@kiefer-tek/sophea-design-system 0.15.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/README.md +141 -0
- package/dist/ai-surface/RenderAgentComponent.d.ts +67 -0
- package/dist/ai-surface/RenderAgentComponent.d.ts.map +1 -0
- package/dist/ai-surface/index.d.ts +2 -0
- package/dist/ai-surface/index.d.ts.map +1 -0
- package/dist/chunks/Icon-BIcnLjtu.js +6506 -0
- package/dist/chunks/Icon-BIcnLjtu.js.map +1 -0
- package/dist/chunks/VisuallyHidden-DNar1Eli.js +972 -0
- package/dist/chunks/VisuallyHidden-DNar1Eli.js.map +1 -0
- package/dist/chunks/XCircle-CoMtPyVN.js +266 -0
- package/dist/chunks/XCircle-CoMtPyVN.js.map +1 -0
- package/dist/components/AIAnatomy/AIAnatomy.d.ts +29 -0
- package/dist/components/AIAnatomy/AIAnatomy.d.ts.map +1 -0
- package/dist/components/AIAnatomy/index.d.ts +3 -0
- package/dist/components/AIAnatomy/index.d.ts.map +1 -0
- package/dist/components/Accordion/Accordion.d.ts +12 -0
- package/dist/components/Accordion/Accordion.d.ts.map +1 -0
- package/dist/components/Accordion/index.d.ts +3 -0
- package/dist/components/Accordion/index.d.ts.map +1 -0
- package/dist/components/AlertDialog/AlertDialog.d.ts +16 -0
- package/dist/components/AlertDialog/AlertDialog.d.ts.map +1 -0
- package/dist/components/AlertDialog/index.d.ts +3 -0
- package/dist/components/AlertDialog/index.d.ts.map +1 -0
- package/dist/components/AnimatedBorder/AnimatedBorder.d.ts +62 -0
- package/dist/components/AnimatedBorder/AnimatedBorder.d.ts.map +1 -0
- package/dist/components/AnimatedBorder/index.d.ts +3 -0
- package/dist/components/AnimatedBorder/index.d.ts.map +1 -0
- package/dist/components/AspectRatio/AspectRatio.d.ts +7 -0
- package/dist/components/AspectRatio/AspectRatio.d.ts.map +1 -0
- package/dist/components/AspectRatio/index.d.ts +3 -0
- package/dist/components/AspectRatio/index.d.ts.map +1 -0
- package/dist/components/Attachment/Attachment.d.ts +13 -0
- package/dist/components/Attachment/Attachment.d.ts.map +1 -0
- package/dist/components/Attachment/index.d.ts +3 -0
- package/dist/components/Attachment/index.d.ts.map +1 -0
- package/dist/components/Avatar/Avatar.d.ts +31 -0
- package/dist/components/Avatar/Avatar.d.ts.map +1 -0
- package/dist/components/Avatar/index.d.ts +3 -0
- package/dist/components/Avatar/index.d.ts.map +1 -0
- package/dist/components/AvatarGroup/AvatarGroup.d.ts +11 -0
- package/dist/components/AvatarGroup/AvatarGroup.d.ts.map +1 -0
- package/dist/components/AvatarGroup/index.d.ts +3 -0
- package/dist/components/AvatarGroup/index.d.ts.map +1 -0
- package/dist/components/Badge/Badge.d.ts +13 -0
- package/dist/components/Badge/Badge.d.ts.map +1 -0
- package/dist/components/Badge/index.d.ts +3 -0
- package/dist/components/Badge/index.d.ts.map +1 -0
- package/dist/components/Banner/Banner.d.ts +21 -0
- package/dist/components/Banner/Banner.d.ts.map +1 -0
- package/dist/components/Banner/index.d.ts +3 -0
- package/dist/components/Banner/index.d.ts.map +1 -0
- package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +21 -0
- package/dist/components/Breadcrumbs/Breadcrumbs.d.ts.map +1 -0
- package/dist/components/Breadcrumbs/index.d.ts +3 -0
- package/dist/components/Breadcrumbs/index.d.ts.map +1 -0
- package/dist/components/Button/Button.d.ts +65 -0
- package/dist/components/Button/Button.d.ts.map +1 -0
- package/dist/components/Button/index.d.ts +3 -0
- package/dist/components/Button/index.d.ts.map +1 -0
- package/dist/components/Card/Card.d.ts +81 -0
- package/dist/components/Card/Card.d.ts.map +1 -0
- package/dist/components/Card/index.d.ts +3 -0
- package/dist/components/Card/index.d.ts.map +1 -0
- package/dist/components/Checkbox/Checkbox.d.ts +19 -0
- package/dist/components/Checkbox/Checkbox.d.ts.map +1 -0
- package/dist/components/Checkbox/index.d.ts +3 -0
- package/dist/components/Checkbox/index.d.ts.map +1 -0
- package/dist/components/Citation/Citation.d.ts +17 -0
- package/dist/components/Citation/Citation.d.ts.map +1 -0
- package/dist/components/Citation/index.d.ts +3 -0
- package/dist/components/Citation/index.d.ts.map +1 -0
- package/dist/components/Code/Code.d.ts +35 -0
- package/dist/components/Code/Code.d.ts.map +1 -0
- package/dist/components/Code/index.d.ts +3 -0
- package/dist/components/Code/index.d.ts.map +1 -0
- package/dist/components/Collapsible/Collapsible.d.ts +11 -0
- package/dist/components/Collapsible/Collapsible.d.ts.map +1 -0
- package/dist/components/Collapsible/index.d.ts +2 -0
- package/dist/components/Collapsible/index.d.ts.map +1 -0
- package/dist/components/ColorPicker/ColorPicker.d.ts +16 -0
- package/dist/components/ColorPicker/ColorPicker.d.ts.map +1 -0
- package/dist/components/ColorPicker/index.d.ts +3 -0
- package/dist/components/ColorPicker/index.d.ts.map +1 -0
- package/dist/components/Composer/Composer.d.ts +27 -0
- package/dist/components/Composer/Composer.d.ts.map +1 -0
- package/dist/components/Composer/ComposerChip.d.ts +61 -0
- package/dist/components/Composer/ComposerChip.d.ts.map +1 -0
- package/dist/components/Composer/index.d.ts +5 -0
- package/dist/components/Composer/index.d.ts.map +1 -0
- package/dist/components/Container/Container.d.ts +10 -0
- package/dist/components/Container/Container.d.ts.map +1 -0
- package/dist/components/Container/index.d.ts +3 -0
- package/dist/components/Container/index.d.ts.map +1 -0
- package/dist/components/Content/Content.d.ts +103 -0
- package/dist/components/Content/Content.d.ts.map +1 -0
- package/dist/components/Content/ContentLg.d.ts +28 -0
- package/dist/components/Content/ContentLg.d.ts.map +1 -0
- package/dist/components/Content/ContentMd.d.ts +40 -0
- package/dist/components/Content/ContentMd.d.ts.map +1 -0
- package/dist/components/Content/ContentSm.d.ts +29 -0
- package/dist/components/Content/ContentSm.d.ts.map +1 -0
- package/dist/components/Content/ContentXl.d.ts +32 -0
- package/dist/components/Content/ContentXl.d.ts.map +1 -0
- package/dist/components/Content/index.d.ts +11 -0
- package/dist/components/Content/index.d.ts.map +1 -0
- package/dist/components/ContentAction/ContentAction.d.ts +25 -0
- package/dist/components/ContentAction/ContentAction.d.ts.map +1 -0
- package/dist/components/ContentAction/index.d.ts +3 -0
- package/dist/components/ContentAction/index.d.ts.map +1 -0
- package/dist/components/ContextChip/ContextChip.d.ts +15 -0
- package/dist/components/ContextChip/ContextChip.d.ts.map +1 -0
- package/dist/components/ContextChip/index.d.ts +3 -0
- package/dist/components/ContextChip/index.d.ts.map +1 -0
- package/dist/components/ContextMenu/ContextMenu.d.ts +17 -0
- package/dist/components/ContextMenu/ContextMenu.d.ts.map +1 -0
- package/dist/components/ContextMenu/index.d.ts +3 -0
- package/dist/components/ContextMenu/index.d.ts.map +1 -0
- package/dist/components/DataTable/ActionsContainer.d.ts +9 -0
- package/dist/components/DataTable/ActionsContainer.d.ts.map +1 -0
- package/dist/components/DataTable/ColumnSortabilityPopover.d.ts +17 -0
- package/dist/components/DataTable/ColumnSortabilityPopover.d.ts.map +1 -0
- package/dist/components/DataTable/ColumnVisibilityPopover.d.ts +9 -0
- package/dist/components/DataTable/ColumnVisibilityPopover.d.ts.map +1 -0
- package/dist/components/DataTable/DataTableText.d.ts +26 -0
- package/dist/components/DataTable/DataTableText.d.ts.map +1 -0
- package/dist/components/DataTable/DragOverlayRow.d.ts +13 -0
- package/dist/components/DataTable/DragOverlayRow.d.ts.map +1 -0
- package/dist/components/DataTable/Footer.d.ts +66 -0
- package/dist/components/DataTable/Footer.d.ts.map +1 -0
- package/dist/components/DataTable/QualifierContainer.d.ts +9 -0
- package/dist/components/DataTable/QualifierContainer.d.ts.map +1 -0
- package/dist/components/DataTable/TableBody.d.ts +24 -0
- package/dist/components/DataTable/TableBody.d.ts.map +1 -0
- package/dist/components/DataTable/TableCell.d.ts +8 -0
- package/dist/components/DataTable/TableCell.d.ts.map +1 -0
- package/dist/components/DataTable/TableElement.d.ts +17 -0
- package/dist/components/DataTable/TableElement.d.ts.map +1 -0
- package/dist/components/DataTable/TableHead.d.ts +33 -0
- package/dist/components/DataTable/TableHead.d.ts.map +1 -0
- package/dist/components/DataTable/TableHeader.d.ts +5 -0
- package/dist/components/DataTable/TableHeader.d.ts.map +1 -0
- package/dist/components/DataTable/TableQualifier.d.ts +25 -0
- package/dist/components/DataTable/TableQualifier.d.ts.map +1 -0
- package/dist/components/DataTable/TableRow.d.ts +13 -0
- package/dist/components/DataTable/TableRow.d.ts.map +1 -0
- package/dist/components/DataTable/TableSizeContext.d.ts +10 -0
- package/dist/components/DataTable/TableSizeContext.d.ts.map +1 -0
- package/dist/components/DataTable/columns.d.ts +89 -0
- package/dist/components/DataTable/columns.d.ts.map +1 -0
- package/dist/components/DataTable/components.d.ts +28 -0
- package/dist/components/DataTable/components.d.ts.map +1 -0
- package/dist/components/DataTable/hooks/useColumnWidths.d.ts +32 -0
- package/dist/components/DataTable/hooks/useColumnWidths.d.ts.map +1 -0
- package/dist/components/DataTable/hooks/useDataTable.d.ts +103 -0
- package/dist/components/DataTable/hooks/useDataTable.d.ts.map +1 -0
- package/dist/components/DataTable/hooks/useDraggableRows.d.ts +41 -0
- package/dist/components/DataTable/hooks/useDraggableRows.d.ts.map +1 -0
- package/dist/components/DataTable/index.d.ts +37 -0
- package/dist/components/DataTable/index.d.ts.map +1 -0
- package/dist/components/DataTable/types.d.ts +170 -0
- package/dist/components/DataTable/types.d.ts.map +1 -0
- package/dist/components/DatePicker/DatePicker.d.ts +34 -0
- package/dist/components/DatePicker/DatePicker.d.ts.map +1 -0
- package/dist/components/DatePicker/index.d.ts +3 -0
- package/dist/components/DatePicker/index.d.ts.map +1 -0
- package/dist/components/DescriptionList/DescriptionList.d.ts +14 -0
- package/dist/components/DescriptionList/DescriptionList.d.ts.map +1 -0
- package/dist/components/DescriptionList/index.d.ts +3 -0
- package/dist/components/DescriptionList/index.d.ts.map +1 -0
- package/dist/components/Disabled/Disabled.d.ts +32 -0
- package/dist/components/Disabled/Disabled.d.ts.map +1 -0
- package/dist/components/Disabled/index.d.ts +3 -0
- package/dist/components/Disabled/index.d.ts.map +1 -0
- package/dist/components/Drawer/Drawer.d.ts +20 -0
- package/dist/components/Drawer/Drawer.d.ts.map +1 -0
- package/dist/components/Drawer/index.d.ts +3 -0
- package/dist/components/Drawer/index.d.ts.map +1 -0
- package/dist/components/DropdownMenu/DropdownMenu.d.ts +27 -0
- package/dist/components/DropdownMenu/DropdownMenu.d.ts.map +1 -0
- package/dist/components/DropdownMenu/index.d.ts +3 -0
- package/dist/components/DropdownMenu/index.d.ts.map +1 -0
- package/dist/components/EmptyMessageCard/EmptyMessageCard.d.ts +28 -0
- package/dist/components/EmptyMessageCard/EmptyMessageCard.d.ts.map +1 -0
- package/dist/components/EmptyMessageCard/index.d.ts +3 -0
- package/dist/components/EmptyMessageCard/index.d.ts.map +1 -0
- package/dist/components/EmptyState/EmptyState.d.ts +13 -0
- package/dist/components/EmptyState/EmptyState.d.ts.map +1 -0
- package/dist/components/EmptyState/index.d.ts +3 -0
- package/dist/components/EmptyState/index.d.ts.map +1 -0
- package/dist/components/ExpandableButton/ExpandableButton.d.ts +26 -0
- package/dist/components/ExpandableButton/ExpandableButton.d.ts.map +1 -0
- package/dist/components/ExpandableButton/index.d.ts +3 -0
- package/dist/components/ExpandableButton/index.d.ts.map +1 -0
- package/dist/components/FeedbackThumbs/FeedbackThumbs.d.ts +27 -0
- package/dist/components/FeedbackThumbs/FeedbackThumbs.d.ts.map +1 -0
- package/dist/components/FeedbackThumbs/index.d.ts +3 -0
- package/dist/components/FeedbackThumbs/index.d.ts.map +1 -0
- package/dist/components/FileInput/FileInput.d.ts +21 -0
- package/dist/components/FileInput/FileInput.d.ts.map +1 -0
- package/dist/components/FileInput/index.d.ts +3 -0
- package/dist/components/FileInput/index.d.ts.map +1 -0
- package/dist/components/FilterButton/FilterButton.d.ts +24 -0
- package/dist/components/FilterButton/FilterButton.d.ts.map +1 -0
- package/dist/components/FilterButton/index.d.ts +3 -0
- package/dist/components/FilterButton/index.d.ts.map +1 -0
- package/dist/components/Grid/Grid.d.ts +20 -0
- package/dist/components/Grid/Grid.d.ts.map +1 -0
- package/dist/components/Grid/index.d.ts +3 -0
- package/dist/components/Grid/index.d.ts.map +1 -0
- package/dist/components/HoverCard/HoverCard.d.ts +5 -0
- package/dist/components/HoverCard/HoverCard.d.ts.map +1 -0
- package/dist/components/HoverCard/index.d.ts +2 -0
- package/dist/components/HoverCard/index.d.ts.map +1 -0
- package/dist/components/Hoverable/Hoverable.d.ts +54 -0
- package/dist/components/Hoverable/Hoverable.d.ts.map +1 -0
- package/dist/components/Hoverable/index.d.ts +3 -0
- package/dist/components/Hoverable/index.d.ts.map +1 -0
- package/dist/components/IllustrationContent/IllustrationContent.d.ts +28 -0
- package/dist/components/IllustrationContent/IllustrationContent.d.ts.map +1 -0
- package/dist/components/IllustrationContent/index.d.ts +3 -0
- package/dist/components/IllustrationContent/index.d.ts.map +1 -0
- package/dist/components/Input/Input.d.ts +10 -0
- package/dist/components/Input/Input.d.ts.map +1 -0
- package/dist/components/Input/index.d.ts +3 -0
- package/dist/components/Input/index.d.ts.map +1 -0
- package/dist/components/InputLayouts/InputLayouts.d.ts +81 -0
- package/dist/components/InputLayouts/InputLayouts.d.ts.map +1 -0
- package/dist/components/InputLayouts/index.d.ts +3 -0
- package/dist/components/InputLayouts/index.d.ts.map +1 -0
- package/dist/components/Interactive/Interactive.d.ts +106 -0
- package/dist/components/Interactive/Interactive.d.ts.map +1 -0
- package/dist/components/Interactive/index.d.ts +3 -0
- package/dist/components/Interactive/index.d.ts.map +1 -0
- package/dist/components/KeyboardKey/KeyboardKey.d.ts +14 -0
- package/dist/components/KeyboardKey/KeyboardKey.d.ts.map +1 -0
- package/dist/components/KeyboardKey/index.d.ts +3 -0
- package/dist/components/KeyboardKey/index.d.ts.map +1 -0
- package/dist/components/LineItemButton/LineItemButton.d.ts +27 -0
- package/dist/components/LineItemButton/LineItemButton.d.ts.map +1 -0
- package/dist/components/LineItemButton/index.d.ts +3 -0
- package/dist/components/LineItemButton/index.d.ts.map +1 -0
- package/dist/components/LinkButton/LinkButton.d.ts +27 -0
- package/dist/components/LinkButton/LinkButton.d.ts.map +1 -0
- package/dist/components/LinkButton/index.d.ts +3 -0
- package/dist/components/LinkButton/index.d.ts.map +1 -0
- package/dist/components/List/List.d.ts +27 -0
- package/dist/components/List/List.d.ts.map +1 -0
- package/dist/components/List/index.d.ts +3 -0
- package/dist/components/List/index.d.ts.map +1 -0
- package/dist/components/Message/Message.d.ts +37 -0
- package/dist/components/Message/Message.d.ts.map +1 -0
- package/dist/components/Message/index.d.ts +3 -0
- package/dist/components/Message/index.d.ts.map +1 -0
- package/dist/components/MessageCard/MessageCard.d.ts +35 -0
- package/dist/components/MessageCard/MessageCard.d.ts.map +1 -0
- package/dist/components/MessageCard/index.d.ts +3 -0
- package/dist/components/MessageCard/index.d.ts.map +1 -0
- package/dist/components/Modal/Modal.d.ts +18 -0
- package/dist/components/Modal/Modal.d.ts.map +1 -0
- package/dist/components/Modal/index.d.ts +3 -0
- package/dist/components/Modal/index.d.ts.map +1 -0
- package/dist/components/NumberInput/NumberInput.d.ts +30 -0
- package/dist/components/NumberInput/NumberInput.d.ts.map +1 -0
- package/dist/components/NumberInput/index.d.ts +3 -0
- package/dist/components/NumberInput/index.d.ts.map +1 -0
- package/dist/components/OpenButton/OpenButton.d.ts +52 -0
- package/dist/components/OpenButton/OpenButton.d.ts.map +1 -0
- package/dist/components/OpenButton/index.d.ts +3 -0
- package/dist/components/OpenButton/index.d.ts.map +1 -0
- package/dist/components/Pagination/Pagination.d.ts +41 -0
- package/dist/components/Pagination/Pagination.d.ts.map +1 -0
- package/dist/components/Pagination/index.d.ts +3 -0
- package/dist/components/Pagination/index.d.ts.map +1 -0
- package/dist/components/PinInput/PinInput.d.ts +26 -0
- package/dist/components/PinInput/PinInput.d.ts.map +1 -0
- package/dist/components/PinInput/index.d.ts +3 -0
- package/dist/components/PinInput/index.d.ts.map +1 -0
- package/dist/components/Popover/Popover.d.ts +12 -0
- package/dist/components/Popover/Popover.d.ts.map +1 -0
- package/dist/components/Popover/index.d.ts +3 -0
- package/dist/components/Popover/index.d.ts.map +1 -0
- package/dist/components/Progress/Progress.d.ts +15 -0
- package/dist/components/Progress/Progress.d.ts.map +1 -0
- package/dist/components/Progress/index.d.ts +3 -0
- package/dist/components/Progress/index.d.ts.map +1 -0
- package/dist/components/RadioGroup/RadioGroup.d.ts +24 -0
- package/dist/components/RadioGroup/RadioGroup.d.ts.map +1 -0
- package/dist/components/RadioGroup/index.d.ts +3 -0
- package/dist/components/RadioGroup/index.d.ts.map +1 -0
- package/dist/components/RegenerateButton/RegenerateButton.d.ts +11 -0
- package/dist/components/RegenerateButton/RegenerateButton.d.ts.map +1 -0
- package/dist/components/RegenerateButton/index.d.ts +3 -0
- package/dist/components/RegenerateButton/index.d.ts.map +1 -0
- package/dist/components/ScrollArea/ScrollArea.d.ts +9 -0
- package/dist/components/ScrollArea/ScrollArea.d.ts.map +1 -0
- package/dist/components/ScrollArea/index.d.ts +3 -0
- package/dist/components/ScrollArea/index.d.ts.map +1 -0
- package/dist/components/ScrollableList/ScrollableList.d.ts +81 -0
- package/dist/components/ScrollableList/ScrollableList.d.ts.map +1 -0
- package/dist/components/ScrollableList/index.d.ts +3 -0
- package/dist/components/ScrollableList/index.d.ts.map +1 -0
- package/dist/components/SearchInput/SearchInput.d.ts +26 -0
- package/dist/components/SearchInput/SearchInput.d.ts.map +1 -0
- package/dist/components/SearchInput/index.d.ts +3 -0
- package/dist/components/SearchInput/index.d.ts.map +1 -0
- package/dist/components/SegmentedControl/SegmentedControl.d.ts +19 -0
- package/dist/components/SegmentedControl/SegmentedControl.d.ts.map +1 -0
- package/dist/components/SegmentedControl/index.d.ts +3 -0
- package/dist/components/SegmentedControl/index.d.ts.map +1 -0
- package/dist/components/Select/Select.d.ts +21 -0
- package/dist/components/Select/Select.d.ts.map +1 -0
- package/dist/components/Select/index.d.ts +3 -0
- package/dist/components/Select/index.d.ts.map +1 -0
- package/dist/components/SelectButton/SelectButton.d.ts +44 -0
- package/dist/components/SelectButton/SelectButton.d.ts.map +1 -0
- package/dist/components/SelectButton/index.d.ts +3 -0
- package/dist/components/SelectButton/index.d.ts.map +1 -0
- package/dist/components/SelectCard/SelectCard.d.ts +19 -0
- package/dist/components/SelectCard/SelectCard.d.ts.map +1 -0
- package/dist/components/SelectCard/index.d.ts +3 -0
- package/dist/components/SelectCard/index.d.ts.map +1 -0
- package/dist/components/Separator/Separator.d.ts +43 -0
- package/dist/components/Separator/Separator.d.ts.map +1 -0
- package/dist/components/Separator/index.d.ts +3 -0
- package/dist/components/Separator/index.d.ts.map +1 -0
- package/dist/components/SidebarTab/SidebarTab.d.ts +30 -0
- package/dist/components/SidebarTab/SidebarTab.d.ts.map +1 -0
- package/dist/components/SidebarTab/index.d.ts +3 -0
- package/dist/components/SidebarTab/index.d.ts.map +1 -0
- package/dist/components/Skeleton/Skeleton.d.ts +10 -0
- package/dist/components/Skeleton/Skeleton.d.ts.map +1 -0
- package/dist/components/Skeleton/index.d.ts +3 -0
- package/dist/components/Skeleton/index.d.ts.map +1 -0
- package/dist/components/SkipLink/SkipLink.d.ts +19 -0
- package/dist/components/SkipLink/SkipLink.d.ts.map +1 -0
- package/dist/components/SkipLink/index.d.ts +3 -0
- package/dist/components/SkipLink/index.d.ts.map +1 -0
- package/dist/components/Slider/Slider.d.ts +12 -0
- package/dist/components/Slider/Slider.d.ts.map +1 -0
- package/dist/components/Slider/index.d.ts +3 -0
- package/dist/components/Slider/index.d.ts.map +1 -0
- package/dist/components/Slot/Slot.d.ts +14 -0
- package/dist/components/Slot/Slot.d.ts.map +1 -0
- package/dist/components/Slot/index.d.ts +2 -0
- package/dist/components/Slot/index.d.ts.map +1 -0
- package/dist/components/Spinner/Spinner.d.ts +11 -0
- package/dist/components/Spinner/Spinner.d.ts.map +1 -0
- package/dist/components/Spinner/index.d.ts +3 -0
- package/dist/components/Spinner/index.d.ts.map +1 -0
- package/dist/components/Stack/Stack.d.ts +15 -0
- package/dist/components/Stack/Stack.d.ts.map +1 -0
- package/dist/components/Stack/index.d.ts +3 -0
- package/dist/components/Stack/index.d.ts.map +1 -0
- package/dist/components/Stat/Stat.d.ts +23 -0
- package/dist/components/Stat/Stat.d.ts.map +1 -0
- package/dist/components/Stat/index.d.ts +3 -0
- package/dist/components/Stat/index.d.ts.map +1 -0
- package/dist/components/StreamingMarkdown/StreamingMarkdown.d.ts +31 -0
- package/dist/components/StreamingMarkdown/StreamingMarkdown.d.ts.map +1 -0
- package/dist/components/StreamingMarkdown/index.d.ts +3 -0
- package/dist/components/StreamingMarkdown/index.d.ts.map +1 -0
- package/dist/components/Switch/Switch.d.ts +19 -0
- package/dist/components/Switch/Switch.d.ts.map +1 -0
- package/dist/components/Switch/index.d.ts +3 -0
- package/dist/components/Switch/index.d.ts.map +1 -0
- package/dist/components/Table/Table.d.ts +18 -0
- package/dist/components/Table/Table.d.ts.map +1 -0
- package/dist/components/Table/index.d.ts +3 -0
- package/dist/components/Table/index.d.ts.map +1 -0
- package/dist/components/Tabs/Tabs.d.ts +25 -0
- package/dist/components/Tabs/Tabs.d.ts.map +1 -0
- package/dist/components/Tabs/index.d.ts +3 -0
- package/dist/components/Tabs/index.d.ts.map +1 -0
- package/dist/components/Tag/Tag.d.ts +20 -0
- package/dist/components/Tag/Tag.d.ts.map +1 -0
- package/dist/components/Tag/index.d.ts +3 -0
- package/dist/components/Tag/index.d.ts.map +1 -0
- package/dist/components/TagInput/TagInput.d.ts +31 -0
- package/dist/components/TagInput/TagInput.d.ts.map +1 -0
- package/dist/components/TagInput/index.d.ts +3 -0
- package/dist/components/TagInput/index.d.ts.map +1 -0
- package/dist/components/Text/Text.d.ts +43 -0
- package/dist/components/Text/Text.d.ts.map +1 -0
- package/dist/components/Text/index.d.ts +5 -0
- package/dist/components/Text/index.d.ts.map +1 -0
- package/dist/components/Text/richstr.d.ts +46 -0
- package/dist/components/Text/richstr.d.ts.map +1 -0
- package/dist/components/Textarea/Textarea.d.ts +12 -0
- package/dist/components/Textarea/Textarea.d.ts.map +1 -0
- package/dist/components/Textarea/index.d.ts +3 -0
- package/dist/components/Textarea/index.d.ts.map +1 -0
- package/dist/components/ThemeProvider/ThemeProvider.d.ts +25 -0
- package/dist/components/ThemeProvider/ThemeProvider.d.ts.map +1 -0
- package/dist/components/ThemeProvider/index.d.ts +3 -0
- package/dist/components/ThemeProvider/index.d.ts.map +1 -0
- package/dist/components/ThoughtBubble/ThoughtBubble.d.ts +17 -0
- package/dist/components/ThoughtBubble/ThoughtBubble.d.ts.map +1 -0
- package/dist/components/ThoughtBubble/index.d.ts +3 -0
- package/dist/components/ThoughtBubble/index.d.ts.map +1 -0
- package/dist/components/Timeline/Timeline.d.ts +17 -0
- package/dist/components/Timeline/Timeline.d.ts.map +1 -0
- package/dist/components/Timeline/index.d.ts +3 -0
- package/dist/components/Timeline/index.d.ts.map +1 -0
- package/dist/components/Toast/Toast.d.ts +25 -0
- package/dist/components/Toast/Toast.d.ts.map +1 -0
- package/dist/components/Toast/index.d.ts +3 -0
- package/dist/components/Toast/index.d.ts.map +1 -0
- package/dist/components/ToggleGroup/ToggleGroup.d.ts +16 -0
- package/dist/components/ToggleGroup/ToggleGroup.d.ts.map +1 -0
- package/dist/components/ToggleGroup/index.d.ts +3 -0
- package/dist/components/ToggleGroup/index.d.ts.map +1 -0
- package/dist/components/TokenCounter/TokenCounter.d.ts +14 -0
- package/dist/components/TokenCounter/TokenCounter.d.ts.map +1 -0
- package/dist/components/TokenCounter/index.d.ts +3 -0
- package/dist/components/TokenCounter/index.d.ts.map +1 -0
- package/dist/components/ToolCallCard/ToolCallCard.d.ts +21 -0
- package/dist/components/ToolCallCard/ToolCallCard.d.ts.map +1 -0
- package/dist/components/ToolCallCard/index.d.ts +3 -0
- package/dist/components/ToolCallCard/index.d.ts.map +1 -0
- package/dist/components/Tooltip/Tooltip.d.ts +39 -0
- package/dist/components/Tooltip/Tooltip.d.ts.map +1 -0
- package/dist/components/Tooltip/index.d.ts +3 -0
- package/dist/components/Tooltip/index.d.ts.map +1 -0
- package/dist/components/Tree/Tree.d.ts +24 -0
- package/dist/components/Tree/Tree.d.ts.map +1 -0
- package/dist/components/Tree/index.d.ts +3 -0
- package/dist/components/Tree/index.d.ts.map +1 -0
- package/dist/components/VisuallyHidden/VisuallyHidden.d.ts +9 -0
- package/dist/components/VisuallyHidden/VisuallyHidden.d.ts.map +1 -0
- package/dist/components/VisuallyHidden/index.d.ts +3 -0
- package/dist/components/VisuallyHidden/index.d.ts.map +1 -0
- package/dist/components/index.d.ts +93 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/spacing/index.d.ts +2 -0
- package/dist/components/spacing/index.d.ts.map +1 -0
- package/dist/components/spacing/padding.d.ts +49 -0
- package/dist/components/spacing/padding.d.ts.map +1 -0
- package/dist/icons/Actions.d.ts +4 -0
- package/dist/icons/Actions.d.ts.map +1 -0
- package/dist/icons/Activity.d.ts +4 -0
- package/dist/icons/Activity.d.ts.map +1 -0
- package/dist/icons/ActivitySmall.d.ts +4 -0
- package/dist/icons/ActivitySmall.d.ts.map +1 -0
- package/dist/icons/AddLines.d.ts +4 -0
- package/dist/icons/AddLines.d.ts.map +1 -0
- package/dist/icons/AiSearch.d.ts +4 -0
- package/dist/icons/AiSearch.d.ts.map +1 -0
- package/dist/icons/AlertCircle.d.ts +4 -0
- package/dist/icons/AlertCircle.d.ts.map +1 -0
- package/dist/icons/AlertTriangle.d.ts +4 -0
- package/dist/icons/AlertTriangle.d.ts.map +1 -0
- package/dist/icons/Archive.d.ts +4 -0
- package/dist/icons/Archive.d.ts.map +1 -0
- package/dist/icons/Arrow.d.ts +4 -0
- package/dist/icons/Arrow.d.ts.map +1 -0
- package/dist/icons/ArrowDown.d.ts +4 -0
- package/dist/icons/ArrowDown.d.ts.map +1 -0
- package/dist/icons/ArrowExchange.d.ts +4 -0
- package/dist/icons/ArrowExchange.d.ts.map +1 -0
- package/dist/icons/ArrowLeft.d.ts +4 -0
- package/dist/icons/ArrowLeft.d.ts.map +1 -0
- package/dist/icons/ArrowLeftDot.d.ts +4 -0
- package/dist/icons/ArrowLeftDot.d.ts.map +1 -0
- package/dist/icons/ArrowRight.d.ts +4 -0
- package/dist/icons/ArrowRight.d.ts.map +1 -0
- package/dist/icons/ArrowRightCircle.d.ts +4 -0
- package/dist/icons/ArrowRightCircle.d.ts.map +1 -0
- package/dist/icons/ArrowRightDot.d.ts +4 -0
- package/dist/icons/ArrowRightDot.d.ts.map +1 -0
- package/dist/icons/ArrowUp.d.ts +4 -0
- package/dist/icons/ArrowUp.d.ts.map +1 -0
- package/dist/icons/ArrowUpDown.d.ts +4 -0
- package/dist/icons/ArrowUpDown.d.ts.map +1 -0
- package/dist/icons/ArrowUpRight.d.ts +4 -0
- package/dist/icons/ArrowUpRight.d.ts.map +1 -0
- package/dist/icons/Audio.d.ts +4 -0
- package/dist/icons/Audio.d.ts.map +1 -0
- package/dist/icons/AudioEqSmall.d.ts +4 -0
- package/dist/icons/AudioEqSmall.d.ts.map +1 -0
- package/dist/icons/BarChart.d.ts +4 -0
- package/dist/icons/BarChart.d.ts.map +1 -0
- package/dist/icons/BarChartSmall.d.ts +4 -0
- package/dist/icons/BarChartSmall.d.ts.map +1 -0
- package/dist/icons/Bell.d.ts +4 -0
- package/dist/icons/Bell.d.ts.map +1 -0
- package/dist/icons/Blocks.d.ts +4 -0
- package/dist/icons/Blocks.d.ts.map +1 -0
- package/dist/icons/BookOpen.d.ts +4 -0
- package/dist/icons/BookOpen.d.ts.map +1 -0
- package/dist/icons/Bookmark.d.ts +4 -0
- package/dist/icons/Bookmark.d.ts.map +1 -0
- package/dist/icons/BooksLineSmall.d.ts +4 -0
- package/dist/icons/BooksLineSmall.d.ts.map +1 -0
- package/dist/icons/BooksStackSmall.d.ts +4 -0
- package/dist/icons/BooksStackSmall.d.ts.map +1 -0
- package/dist/icons/Bookstack.d.ts +4 -0
- package/dist/icons/Bookstack.d.ts.map +1 -0
- package/dist/icons/Bot.d.ts +4 -0
- package/dist/icons/Bot.d.ts.map +1 -0
- package/dist/icons/Boxes.d.ts +4 -0
- package/dist/icons/Boxes.d.ts.map +1 -0
- package/dist/icons/Brain.d.ts +4 -0
- package/dist/icons/Brain.d.ts.map +1 -0
- package/dist/icons/Branch.d.ts +4 -0
- package/dist/icons/Branch.d.ts.map +1 -0
- package/dist/icons/BubbleText.d.ts +4 -0
- package/dist/icons/BubbleText.d.ts.map +1 -0
- package/dist/icons/Bulb.d.ts +4 -0
- package/dist/icons/Bulb.d.ts.map +1 -0
- package/dist/icons/Calendar.d.ts +4 -0
- package/dist/icons/Calendar.d.ts.map +1 -0
- package/dist/icons/Cancel.d.ts +4 -0
- package/dist/icons/Cancel.d.ts.map +1 -0
- package/dist/icons/ChatBubble.d.ts +4 -0
- package/dist/icons/ChatBubble.d.ts.map +1 -0
- package/dist/icons/Check.d.ts +4 -0
- package/dist/icons/Check.d.ts.map +1 -0
- package/dist/icons/CheckCircle.d.ts +4 -0
- package/dist/icons/CheckCircle.d.ts.map +1 -0
- package/dist/icons/CheckSmall.d.ts +4 -0
- package/dist/icons/CheckSmall.d.ts.map +1 -0
- package/dist/icons/CheckSquare.d.ts +4 -0
- package/dist/icons/CheckSquare.d.ts.map +1 -0
- package/dist/icons/ChevronDown.d.ts +4 -0
- package/dist/icons/ChevronDown.d.ts.map +1 -0
- package/dist/icons/ChevronDownSmall.d.ts +4 -0
- package/dist/icons/ChevronDownSmall.d.ts.map +1 -0
- package/dist/icons/ChevronLeft.d.ts +4 -0
- package/dist/icons/ChevronLeft.d.ts.map +1 -0
- package/dist/icons/ChevronRight.d.ts +4 -0
- package/dist/icons/ChevronRight.d.ts.map +1 -0
- package/dist/icons/ChevronUp.d.ts +4 -0
- package/dist/icons/ChevronUp.d.ts.map +1 -0
- package/dist/icons/ChevronsDown.d.ts +4 -0
- package/dist/icons/ChevronsDown.d.ts.map +1 -0
- package/dist/icons/ChevronsUp.d.ts +4 -0
- package/dist/icons/ChevronsUp.d.ts.map +1 -0
- package/dist/icons/Circle.d.ts +4 -0
- package/dist/icons/Circle.d.ts.map +1 -0
- package/dist/icons/Clipboard.d.ts +4 -0
- package/dist/icons/Clipboard.d.ts.map +1 -0
- package/dist/icons/Clock.d.ts +4 -0
- package/dist/icons/Clock.d.ts.map +1 -0
- package/dist/icons/ClockHandsSmall.d.ts +4 -0
- package/dist/icons/ClockHandsSmall.d.ts.map +1 -0
- package/dist/icons/Code.d.ts +4 -0
- package/dist/icons/Code.d.ts.map +1 -0
- package/dist/icons/Command.d.ts +4 -0
- package/dist/icons/Command.d.ts.map +1 -0
- package/dist/icons/Connectors.d.ts +4 -0
- package/dist/icons/Connectors.d.ts.map +1 -0
- package/dist/icons/Copy.d.ts +4 -0
- package/dist/icons/Copy.d.ts.map +1 -0
- package/dist/icons/CornerRightUpDot.d.ts +4 -0
- package/dist/icons/CornerRightUpDot.d.ts.map +1 -0
- package/dist/icons/Cpu.d.ts +4 -0
- package/dist/icons/Cpu.d.ts.map +1 -0
- package/dist/icons/Database.d.ts +4 -0
- package/dist/icons/Database.d.ts.map +1 -0
- package/dist/icons/Delete.d.ts +4 -0
- package/dist/icons/Delete.d.ts.map +1 -0
- package/dist/icons/DevKit.d.ts +4 -0
- package/dist/icons/DevKit.d.ts.map +1 -0
- package/dist/icons/Discord.d.ts +4 -0
- package/dist/icons/Discord.d.ts.map +1 -0
- package/dist/icons/Download.d.ts +4 -0
- package/dist/icons/Download.d.ts.map +1 -0
- package/dist/icons/DownloadCloud.d.ts +4 -0
- package/dist/icons/DownloadCloud.d.ts.map +1 -0
- package/dist/icons/Edit.d.ts +4 -0
- package/dist/icons/Edit.d.ts.map +1 -0
- package/dist/icons/EditBig.d.ts +4 -0
- package/dist/icons/EditBig.d.ts.map +1 -0
- package/dist/icons/Expand.d.ts +4 -0
- package/dist/icons/Expand.d.ts.map +1 -0
- package/dist/icons/ExternalLink.d.ts +4 -0
- package/dist/icons/ExternalLink.d.ts.map +1 -0
- package/dist/icons/Eye.d.ts +4 -0
- package/dist/icons/Eye.d.ts.map +1 -0
- package/dist/icons/EyeClosed.d.ts +4 -0
- package/dist/icons/EyeClosed.d.ts.map +1 -0
- package/dist/icons/EyeOff.d.ts +4 -0
- package/dist/icons/EyeOff.d.ts.map +1 -0
- package/dist/icons/File.d.ts +4 -0
- package/dist/icons/File.d.ts.map +1 -0
- package/dist/icons/FileBraces.d.ts +4 -0
- package/dist/icons/FileBraces.d.ts.map +1 -0
- package/dist/icons/FileBroadcast.d.ts +4 -0
- package/dist/icons/FileBroadcast.d.ts.map +1 -0
- package/dist/icons/FileChartPie.d.ts +4 -0
- package/dist/icons/FileChartPie.d.ts.map +1 -0
- package/dist/icons/FileSmall.d.ts +4 -0
- package/dist/icons/FileSmall.d.ts.map +1 -0
- package/dist/icons/FileText.d.ts +4 -0
- package/dist/icons/FileText.d.ts.map +1 -0
- package/dist/icons/Files.d.ts +4 -0
- package/dist/icons/Files.d.ts.map +1 -0
- package/dist/icons/Filter.d.ts +4 -0
- package/dist/icons/Filter.d.ts.map +1 -0
- package/dist/icons/FilterPlus.d.ts +4 -0
- package/dist/icons/FilterPlus.d.ts.map +1 -0
- package/dist/icons/FlaskConical.d.ts +4 -0
- package/dist/icons/FlaskConical.d.ts.map +1 -0
- package/dist/icons/Fold.d.ts +4 -0
- package/dist/icons/Fold.d.ts.map +1 -0
- package/dist/icons/Folder.d.ts +4 -0
- package/dist/icons/Folder.d.ts.map +1 -0
- package/dist/icons/FolderIn.d.ts +4 -0
- package/dist/icons/FolderIn.d.ts.map +1 -0
- package/dist/icons/FolderOpen.d.ts +4 -0
- package/dist/icons/FolderOpen.d.ts.map +1 -0
- package/dist/icons/FolderOpenDot.d.ts +4 -0
- package/dist/icons/FolderOpenDot.d.ts.map +1 -0
- package/dist/icons/FolderPartialOpen.d.ts +4 -0
- package/dist/icons/FolderPartialOpen.d.ts.map +1 -0
- package/dist/icons/FolderPlus.d.ts +4 -0
- package/dist/icons/FolderPlus.d.ts.map +1 -0
- package/dist/icons/Globe.d.ts +4 -0
- package/dist/icons/Globe.d.ts.map +1 -0
- package/dist/icons/Handle.d.ts +4 -0
- package/dist/icons/Handle.d.ts.map +1 -0
- package/dist/icons/HardDrive.d.ts +4 -0
- package/dist/icons/HardDrive.d.ts.map +1 -0
- package/dist/icons/History.d.ts +4 -0
- package/dist/icons/History.d.ts.map +1 -0
- package/dist/icons/Home.d.ts +4 -0
- package/dist/icons/Home.d.ts.map +1 -0
- package/dist/icons/Hourglass.d.ts +4 -0
- package/dist/icons/Hourglass.d.ts.map +1 -0
- package/dist/icons/Icon.d.ts +21 -0
- package/dist/icons/Icon.d.ts.map +1 -0
- package/dist/icons/Image.d.ts +4 -0
- package/dist/icons/Image.d.ts.map +1 -0
- package/dist/icons/ImageSmall.d.ts +4 -0
- package/dist/icons/ImageSmall.d.ts.map +1 -0
- package/dist/icons/Import.d.ts +4 -0
- package/dist/icons/Import.d.ts.map +1 -0
- package/dist/icons/Info.d.ts +4 -0
- package/dist/icons/Info.d.ts.map +1 -0
- package/dist/icons/InfoCircle.d.ts +4 -0
- package/dist/icons/InfoCircle.d.ts.map +1 -0
- package/dist/icons/InfoSmall.d.ts +4 -0
- package/dist/icons/InfoSmall.d.ts.map +1 -0
- package/dist/icons/Key.d.ts +4 -0
- package/dist/icons/Key.d.ts.map +1 -0
- package/dist/icons/Keystroke.d.ts +4 -0
- package/dist/icons/Keystroke.d.ts.map +1 -0
- package/dist/icons/Lightbulb.d.ts +4 -0
- package/dist/icons/Lightbulb.d.ts.map +1 -0
- package/dist/icons/Link.d.ts +4 -0
- package/dist/icons/Link.d.ts.map +1 -0
- package/dist/icons/Loader.d.ts +4 -0
- package/dist/icons/Loader.d.ts.map +1 -0
- package/dist/icons/Lock.d.ts +4 -0
- package/dist/icons/Lock.d.ts.map +1 -0
- package/dist/icons/LogOut.d.ts +4 -0
- package/dist/icons/LogOut.d.ts.map +1 -0
- package/dist/icons/Mail.d.ts +4 -0
- package/dist/icons/Mail.d.ts.map +1 -0
- package/dist/icons/Maximize.d.ts +4 -0
- package/dist/icons/Maximize.d.ts.map +1 -0
- package/dist/icons/Menu.d.ts +4 -0
- package/dist/icons/Menu.d.ts.map +1 -0
- package/dist/icons/MessagesSquare.d.ts +4 -0
- package/dist/icons/MessagesSquare.d.ts.map +1 -0
- package/dist/icons/Mic.d.ts +4 -0
- package/dist/icons/Mic.d.ts.map +1 -0
- package/dist/icons/Microphone.d.ts +4 -0
- package/dist/icons/Microphone.d.ts.map +1 -0
- package/dist/icons/MicrophoneOff.d.ts +4 -0
- package/dist/icons/MicrophoneOff.d.ts.map +1 -0
- package/dist/icons/Minus.d.ts +4 -0
- package/dist/icons/Minus.d.ts.map +1 -0
- package/dist/icons/MinusCircle.d.ts +4 -0
- package/dist/icons/MinusCircle.d.ts.map +1 -0
- package/dist/icons/Moon.d.ts +4 -0
- package/dist/icons/Moon.d.ts.map +1 -0
- package/dist/icons/MoreHorizontal.d.ts +4 -0
- package/dist/icons/MoreHorizontal.d.ts.map +1 -0
- package/dist/icons/MusicSmall.d.ts +4 -0
- package/dist/icons/MusicSmall.d.ts.map +1 -0
- package/dist/icons/NoAccess.d.ts +4 -0
- package/dist/icons/NoAccess.d.ts.map +1 -0
- package/dist/icons/NotificationBubble.d.ts +4 -0
- package/dist/icons/NotificationBubble.d.ts.map +1 -0
- package/dist/icons/Octagon.d.ts +4 -0
- package/dist/icons/Octagon.d.ts.map +1 -0
- package/dist/icons/Orbit.d.ts +4 -0
- package/dist/icons/Orbit.d.ts.map +1 -0
- package/dist/icons/Organization.d.ts +4 -0
- package/dist/icons/Organization.d.ts.map +1 -0
- package/dist/icons/Owl.d.ts +4 -0
- package/dist/icons/Owl.d.ts.map +1 -0
- package/dist/icons/PaintBrush.d.ts +4 -0
- package/dist/icons/PaintBrush.d.ts.map +1 -0
- package/dist/icons/PanelsTopBottom.d.ts +4 -0
- package/dist/icons/PanelsTopBottom.d.ts.map +1 -0
- package/dist/icons/Paperclip.d.ts +4 -0
- package/dist/icons/Paperclip.d.ts.map +1 -0
- package/dist/icons/Pause.d.ts +4 -0
- package/dist/icons/Pause.d.ts.map +1 -0
- package/dist/icons/PauseCircle.d.ts +4 -0
- package/dist/icons/PauseCircle.d.ts.map +1 -0
- package/dist/icons/PenSmall.d.ts +4 -0
- package/dist/icons/PenSmall.d.ts.map +1 -0
- package/dist/icons/PencilEdit.d.ts +4 -0
- package/dist/icons/PencilEdit.d.ts.map +1 -0
- package/dist/icons/PencilRuler.d.ts +4 -0
- package/dist/icons/PencilRuler.d.ts.map +1 -0
- package/dist/icons/Pin.d.ts +4 -0
- package/dist/icons/Pin.d.ts.map +1 -0
- package/dist/icons/Pinned.d.ts +4 -0
- package/dist/icons/Pinned.d.ts.map +1 -0
- package/dist/icons/Play.d.ts +4 -0
- package/dist/icons/Play.d.ts.map +1 -0
- package/dist/icons/PlayCircle.d.ts +4 -0
- package/dist/icons/PlayCircle.d.ts.map +1 -0
- package/dist/icons/Plug.d.ts +4 -0
- package/dist/icons/Plug.d.ts.map +1 -0
- package/dist/icons/Plus.d.ts +4 -0
- package/dist/icons/Plus.d.ts.map +1 -0
- package/dist/icons/PlusCircle.d.ts +4 -0
- package/dist/icons/PlusCircle.d.ts.map +1 -0
- package/dist/icons/ProgressBars.d.ts +4 -0
- package/dist/icons/ProgressBars.d.ts.map +1 -0
- package/dist/icons/QuestionMarkSmall.d.ts +4 -0
- package/dist/icons/QuestionMarkSmall.d.ts.map +1 -0
- package/dist/icons/Quote.d.ts +4 -0
- package/dist/icons/Quote.d.ts.map +1 -0
- package/dist/icons/Refresh.d.ts +4 -0
- package/dist/icons/Refresh.d.ts.map +1 -0
- package/dist/icons/RefreshCw.d.ts +4 -0
- package/dist/icons/RefreshCw.d.ts.map +1 -0
- package/dist/icons/Revert.d.ts +4 -0
- package/dist/icons/Revert.d.ts.map +1 -0
- package/dist/icons/Robot.d.ts +4 -0
- package/dist/icons/Robot.d.ts.map +1 -0
- package/dist/icons/Rotate.d.ts +4 -0
- package/dist/icons/Rotate.d.ts.map +1 -0
- package/dist/icons/Search.d.ts +4 -0
- package/dist/icons/Search.d.ts.map +1 -0
- package/dist/icons/SearchMenu.d.ts +4 -0
- package/dist/icons/SearchMenu.d.ts.map +1 -0
- package/dist/icons/SearchSmall.d.ts +4 -0
- package/dist/icons/SearchSmall.d.ts.map +1 -0
- package/dist/icons/Send.d.ts +4 -0
- package/dist/icons/Send.d.ts.map +1 -0
- package/dist/icons/SendBold.d.ts +4 -0
- package/dist/icons/SendBold.d.ts.map +1 -0
- package/dist/icons/Server.d.ts +4 -0
- package/dist/icons/Server.d.ts.map +1 -0
- package/dist/icons/Settings.d.ts +4 -0
- package/dist/icons/Settings.d.ts.map +1 -0
- package/dist/icons/Share.d.ts +4 -0
- package/dist/icons/Share.d.ts.map +1 -0
- package/dist/icons/ShareWebhook.d.ts +4 -0
- package/dist/icons/ShareWebhook.d.ts.map +1 -0
- package/dist/icons/Sidebar.d.ts +4 -0
- package/dist/icons/Sidebar.d.ts.map +1 -0
- package/dist/icons/Slack.d.ts +4 -0
- package/dist/icons/Slack.d.ts.map +1 -0
- package/dist/icons/Sliders.d.ts +4 -0
- package/dist/icons/Sliders.d.ts.map +1 -0
- package/dist/icons/SlidersHorizontal.d.ts +4 -0
- package/dist/icons/SlidersHorizontal.d.ts.map +1 -0
- package/dist/icons/SlidersSmall.d.ts +4 -0
- package/dist/icons/SlidersSmall.d.ts.map +1 -0
- package/dist/icons/Sparkle.d.ts +4 -0
- package/dist/icons/Sparkle.d.ts.map +1 -0
- package/dist/icons/Sparkles.d.ts +4 -0
- package/dist/icons/Sparkles.d.ts.map +1 -0
- package/dist/icons/Star.d.ts +4 -0
- package/dist/icons/Star.d.ts.map +1 -0
- package/dist/icons/StarOff.d.ts +4 -0
- package/dist/icons/StarOff.d.ts.map +1 -0
- package/dist/icons/Stop.d.ts +4 -0
- package/dist/icons/Stop.d.ts.map +1 -0
- package/dist/icons/StopCircle.d.ts +4 -0
- package/dist/icons/StopCircle.d.ts.map +1 -0
- package/dist/icons/Sun.d.ts +4 -0
- package/dist/icons/Sun.d.ts.map +1 -0
- package/dist/icons/Tag.d.ts +4 -0
- package/dist/icons/Tag.d.ts.map +1 -0
- package/dist/icons/Terminal.d.ts +4 -0
- package/dist/icons/Terminal.d.ts.map +1 -0
- package/dist/icons/TerminalSmall.d.ts +4 -0
- package/dist/icons/TerminalSmall.d.ts.map +1 -0
- package/dist/icons/TextLines.d.ts +4 -0
- package/dist/icons/TextLines.d.ts.map +1 -0
- package/dist/icons/TextLinesSmall.d.ts +4 -0
- package/dist/icons/TextLinesSmall.d.ts.map +1 -0
- package/dist/icons/ThumbsDown.d.ts +4 -0
- package/dist/icons/ThumbsDown.d.ts.map +1 -0
- package/dist/icons/ThumbsUp.d.ts +4 -0
- package/dist/icons/ThumbsUp.d.ts.map +1 -0
- package/dist/icons/Tick.d.ts +4 -0
- package/dist/icons/Tick.d.ts.map +1 -0
- package/dist/icons/TrainFace.d.ts +4 -0
- package/dist/icons/TrainFace.d.ts.map +1 -0
- package/dist/icons/TrainFront.d.ts +4 -0
- package/dist/icons/TrainFront.d.ts.map +1 -0
- package/dist/icons/TrainFrontTunnel.d.ts +4 -0
- package/dist/icons/TrainFrontTunnel.d.ts.map +1 -0
- package/dist/icons/Translate.d.ts +4 -0
- package/dist/icons/Translate.d.ts.map +1 -0
- package/dist/icons/Trash.d.ts +4 -0
- package/dist/icons/Trash.d.ts.map +1 -0
- package/dist/icons/TwoLineSmall.d.ts +4 -0
- package/dist/icons/TwoLineSmall.d.ts.map +1 -0
- package/dist/icons/UploadCloud.d.ts +4 -0
- package/dist/icons/UploadCloud.d.ts.map +1 -0
- package/dist/icons/UploadSquare.d.ts +4 -0
- package/dist/icons/UploadSquare.d.ts.map +1 -0
- package/dist/icons/User.d.ts +4 -0
- package/dist/icons/User.d.ts.map +1 -0
- package/dist/icons/UserCheck.d.ts +4 -0
- package/dist/icons/UserCheck.d.ts.map +1 -0
- package/dist/icons/UserEdit.d.ts +4 -0
- package/dist/icons/UserEdit.d.ts.map +1 -0
- package/dist/icons/UserKey.d.ts +4 -0
- package/dist/icons/UserKey.d.ts.map +1 -0
- package/dist/icons/UserManage.d.ts +4 -0
- package/dist/icons/UserManage.d.ts.map +1 -0
- package/dist/icons/UserMinus.d.ts +4 -0
- package/dist/icons/UserMinus.d.ts.map +1 -0
- package/dist/icons/UserPlus.d.ts +4 -0
- package/dist/icons/UserPlus.d.ts.map +1 -0
- package/dist/icons/UserSync.d.ts +4 -0
- package/dist/icons/UserSync.d.ts.map +1 -0
- package/dist/icons/UserX.d.ts +4 -0
- package/dist/icons/UserX.d.ts.map +1 -0
- package/dist/icons/Users.d.ts +4 -0
- package/dist/icons/Users.d.ts.map +1 -0
- package/dist/icons/UsersRound.d.ts +4 -0
- package/dist/icons/UsersRound.d.ts.map +1 -0
- package/dist/icons/Volume.d.ts +4 -0
- package/dist/icons/Volume.d.ts.map +1 -0
- package/dist/icons/VolumeOff.d.ts +4 -0
- package/dist/icons/VolumeOff.d.ts.map +1 -0
- package/dist/icons/Warning.d.ts +4 -0
- package/dist/icons/Warning.d.ts.map +1 -0
- package/dist/icons/Wrench.d.ts +4 -0
- package/dist/icons/Wrench.d.ts.map +1 -0
- package/dist/icons/X.d.ts +4 -0
- package/dist/icons/X.d.ts.map +1 -0
- package/dist/icons/XCircle.d.ts +4 -0
- package/dist/icons/XCircle.d.ts.map +1 -0
- package/dist/icons/XOctagon.d.ts +4 -0
- package/dist/icons/XOctagon.d.ts.map +1 -0
- package/dist/icons/ZoomIn.d.ts +4 -0
- package/dist/icons/ZoomIn.d.ts.map +1 -0
- package/dist/icons/ZoomOut.d.ts +4 -0
- package/dist/icons/ZoomOut.d.ts.map +1 -0
- package/dist/icons/index.d.ts +212 -0
- package/dist/icons/index.d.ts.map +1 -0
- package/dist/icons/index.js +215 -0
- package/dist/icons/index.js.map +1 -0
- package/dist/icons/registry.d.ts +212 -0
- package/dist/icons/registry.d.ts.map +1 -0
- package/dist/illustrations/index.d.ts +13 -0
- package/dist/illustrations/index.d.ts.map +1 -0
- package/dist/illustrations/index.js +15 -0
- package/dist/illustrations/index.js.map +1 -0
- package/dist/illustrations/no-access.d.ts +4 -0
- package/dist/illustrations/no-access.d.ts.map +1 -0
- package/dist/illustrations/no-access.js +29 -0
- package/dist/illustrations/no-access.js.map +1 -0
- package/dist/illustrations/no-result.d.ts +4 -0
- package/dist/illustrations/no-result.d.ts.map +1 -0
- package/dist/illustrations/no-result.js +29 -0
- package/dist/illustrations/no-result.js.map +1 -0
- package/dist/illustrations/not-found.d.ts +4 -0
- package/dist/illustrations/not-found.d.ts.map +1 -0
- package/dist/illustrations/not-found.js +31 -0
- package/dist/illustrations/not-found.js.map +1 -0
- package/dist/illustrations/plug-broken.d.ts +4 -0
- package/dist/illustrations/plug-broken.d.ts.map +1 -0
- package/dist/illustrations/plug-broken.js +32 -0
- package/dist/illustrations/plug-broken.js.map +1 -0
- package/dist/illustrations/timeout.d.ts +4 -0
- package/dist/illustrations/timeout.d.ts.map +1 -0
- package/dist/illustrations/timeout.js +30 -0
- package/dist/illustrations/timeout.js.map +1 -0
- package/dist/illustrations/usage-alert.d.ts +4 -0
- package/dist/illustrations/usage-alert.d.ts.map +1 -0
- package/dist/illustrations/usage-alert.js +30 -0
- package/dist/illustrations/usage-alert.js.map +1 -0
- package/dist/index.css +12851 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11630 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/A11yPanel.d.ts +35 -0
- package/dist/internal/A11yPanel.d.ts.map +1 -0
- package/dist/internal/SurfacePreview.d.ts +18 -0
- package/dist/internal/SurfacePreview.d.ts.map +1 -0
- package/dist/internal/interactive-buttons.d.ts +23 -0
- package/dist/internal/interactive-buttons.d.ts.map +1 -0
- package/dist/patterns/AppShell/AppShell.d.ts +100 -0
- package/dist/patterns/AppShell/AppShell.d.ts.map +1 -0
- package/dist/patterns/AppShell/index.d.ts +3 -0
- package/dist/patterns/AppShell/index.d.ts.map +1 -0
- package/dist/patterns/DestructiveConfirm/DestructiveConfirm.d.ts +26 -0
- package/dist/patterns/DestructiveConfirm/DestructiveConfirm.d.ts.map +1 -0
- package/dist/patterns/DestructiveConfirm/index.d.ts +3 -0
- package/dist/patterns/DestructiveConfirm/index.d.ts.map +1 -0
- package/dist/patterns/EmptyHierarchy/EmptyHierarchy.d.ts +13 -0
- package/dist/patterns/EmptyHierarchy/EmptyHierarchy.d.ts.map +1 -0
- package/dist/patterns/EmptyHierarchy/index.d.ts +3 -0
- package/dist/patterns/EmptyHierarchy/index.d.ts.map +1 -0
- package/dist/patterns/ErrorRecovery/ErrorRecovery.d.ts +22 -0
- package/dist/patterns/ErrorRecovery/ErrorRecovery.d.ts.map +1 -0
- package/dist/patterns/ErrorRecovery/index.d.ts +3 -0
- package/dist/patterns/ErrorRecovery/index.d.ts.map +1 -0
- package/dist/patterns/FilePreview/FilePreview.d.ts +35 -0
- package/dist/patterns/FilePreview/FilePreview.d.ts.map +1 -0
- package/dist/patterns/FilePreview/index.d.ts +3 -0
- package/dist/patterns/FilePreview/index.d.ts.map +1 -0
- package/dist/patterns/FilteringPattern/FilteringPattern.d.ts +28 -0
- package/dist/patterns/FilteringPattern/FilteringPattern.d.ts.map +1 -0
- package/dist/patterns/FilteringPattern/index.d.ts +3 -0
- package/dist/patterns/FilteringPattern/index.d.ts.map +1 -0
- package/dist/patterns/FormsPattern/FormsPattern.d.ts +40 -0
- package/dist/patterns/FormsPattern/FormsPattern.d.ts.map +1 -0
- package/dist/patterns/FormsPattern/index.d.ts +3 -0
- package/dist/patterns/FormsPattern/index.d.ts.map +1 -0
- package/dist/patterns/LoadingStates/LoadingStates.d.ts +22 -0
- package/dist/patterns/LoadingStates/LoadingStates.d.ts.map +1 -0
- package/dist/patterns/LoadingStates/index.d.ts +3 -0
- package/dist/patterns/LoadingStates/index.d.ts.map +1 -0
- package/dist/patterns/MasterDetail/MasterDetail.d.ts +48 -0
- package/dist/patterns/MasterDetail/MasterDetail.d.ts.map +1 -0
- package/dist/patterns/MasterDetail/index.d.ts +3 -0
- package/dist/patterns/MasterDetail/index.d.ts.map +1 -0
- package/dist/patterns/PricingTable/PricingTable.d.ts +36 -0
- package/dist/patterns/PricingTable/PricingTable.d.ts.map +1 -0
- package/dist/patterns/PricingTable/index.d.ts +3 -0
- package/dist/patterns/PricingTable/index.d.ts.map +1 -0
- package/dist/patterns/SettingsPage/SettingsPage.d.ts +10 -0
- package/dist/patterns/SettingsPage/SettingsPage.d.ts.map +1 -0
- package/dist/patterns/SettingsPage/index.d.ts +3 -0
- package/dist/patterns/SettingsPage/index.d.ts.map +1 -0
- package/dist/patterns/SignInForm/SignInForm.d.ts +32 -0
- package/dist/patterns/SignInForm/SignInForm.d.ts.map +1 -0
- package/dist/patterns/SignInForm/index.d.ts +3 -0
- package/dist/patterns/SignInForm/index.d.ts.map +1 -0
- package/dist/patterns/Wizard/Wizard.d.ts +30 -0
- package/dist/patterns/Wizard/Wizard.d.ts.map +1 -0
- package/dist/patterns/Wizard/index.d.ts +3 -0
- package/dist/patterns/Wizard/index.d.ts.map +1 -0
- package/dist/patterns/index.d.ts +14 -0
- package/dist/patterns/index.d.ts.map +1 -0
- package/dist/table/index.d.ts +2 -0
- package/dist/table/index.d.ts.map +1 -0
- package/dist/table/index.js +1750 -0
- package/dist/table/index.js.map +1 -0
- package/dist/templates/EmptyWorkspace/EmptyWorkspace.d.ts +25 -0
- package/dist/templates/EmptyWorkspace/EmptyWorkspace.d.ts.map +1 -0
- package/dist/templates/EmptyWorkspace/index.d.ts +2 -0
- package/dist/templates/EmptyWorkspace/index.d.ts.map +1 -0
- package/dist/templates/Forbidden403/Forbidden403.d.ts +24 -0
- package/dist/templates/Forbidden403/Forbidden403.d.ts.map +1 -0
- package/dist/templates/Forbidden403/index.d.ts +2 -0
- package/dist/templates/Forbidden403/index.d.ts.map +1 -0
- package/dist/templates/NotFound404/NotFound404.d.ts +17 -0
- package/dist/templates/NotFound404/NotFound404.d.ts.map +1 -0
- package/dist/templates/NotFound404/index.d.ts +2 -0
- package/dist/templates/NotFound404/index.d.ts.map +1 -0
- package/dist/templates/NotificationsInbox/NotificationsInbox.d.ts +42 -0
- package/dist/templates/NotificationsInbox/NotificationsInbox.d.ts.map +1 -0
- package/dist/templates/NotificationsInbox/index.d.ts +2 -0
- package/dist/templates/NotificationsInbox/index.d.ts.map +1 -0
- package/dist/templates/OnboardingWizard/OnboardingWizard.d.ts +14 -0
- package/dist/templates/OnboardingWizard/OnboardingWizard.d.ts.map +1 -0
- package/dist/templates/OnboardingWizard/index.d.ts +2 -0
- package/dist/templates/OnboardingWizard/index.d.ts.map +1 -0
- package/dist/templates/index.d.ts +6 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/tokens/index.d.ts +79 -0
- package/dist/tokens/index.d.ts.map +1 -0
- package/dist/tokens/index.js +465 -0
- package/dist/tokens/index.js.map +1 -0
- package/dist/tokens/tailwind-preset.d.ts +4 -0
- package/dist/tokens/tailwind-preset.d.ts.map +1 -0
- package/dist/tokens/tailwind-preset.js +61 -0
- package/dist/tokens/tailwind-preset.js.map +1 -0
- package/package.json +200 -0
- package/src/assets/connectors/Anthropic.svg +1 -0
- package/src/assets/connectors/Asana.png +0 -0
- package/src/assets/connectors/Confluence.svg +16 -0
- package/src/assets/connectors/Gemini.svg +1 -0
- package/src/assets/connectors/Github.png +0 -0
- package/src/assets/connectors/GoogleDrive.png +0 -0
- package/src/assets/connectors/Notion.png +0 -0
- package/src/assets/connectors/Slack.png +0 -0
- package/src/assets/sophea-logo.svg +3 -0
- package/src/assets/sophea-wordmark.svg +5 -0
- package/src/tokens/colors_and_type.css +1131 -0
- package/src/tokens/tokens.json +384 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/components/Badge/Badge.tsx","../src/components/Tooltip/Tooltip.tsx","../src/components/AnimatedBorder/AnimatedBorder.tsx","../src/components/Button/Button.tsx","../src/components/Input/Input.tsx","../src/components/Select/Select.tsx","../src/components/Stack/Stack.tsx","../src/components/Switch/Switch.tsx","../src/ai-surface/RenderAgentComponent.tsx","../src/components/RadioGroup/RadioGroup.tsx","../src/components/DatePicker/DatePicker.tsx","../src/components/Modal/Modal.tsx","../src/components/Toast/Toast.tsx","../src/components/Banner/Banner.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Progress/Progress.tsx","../src/components/Spinner/Spinner.tsx","../src/components/Textarea/Textarea.tsx","../src/components/TokenCounter/TokenCounter.tsx","../src/internal/interactive-buttons.tsx","../src/components/FeedbackThumbs/FeedbackThumbs.tsx","../src/components/RegenerateButton/RegenerateButton.tsx","../src/components/ContextChip/ContextChip.tsx","../src/components/ThoughtBubble/ThoughtBubble.tsx","../src/components/ToolCallCard/ToolCallCard.tsx","../src/components/Composer/Composer.tsx","../src/components/Composer/ComposerChip.tsx","../src/components/KeyboardKey/KeyboardKey.tsx","../src/components/ToggleGroup/ToggleGroup.tsx","../src/components/SegmentedControl/SegmentedControl.tsx","../src/components/DropdownMenu/DropdownMenu.tsx","../src/components/ContextMenu/ContextMenu.tsx","../src/components/HoverCard/HoverCard.tsx","../src/components/Accordion/Accordion.tsx","../src/components/Collapsible/Collapsible.tsx","../src/components/ScrollArea/ScrollArea.tsx","../src/components/ScrollableList/ScrollableList.tsx","../src/components/Slider/Slider.tsx","../src/components/AlertDialog/AlertDialog.tsx","../src/components/ThemeProvider/ThemeProvider.tsx","../src/components/Drawer/Drawer.tsx","../src/components/SidebarTab/SidebarTab.tsx","../src/components/Breadcrumbs/Breadcrumbs.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Table/Table.tsx","../src/components/Avatar/Avatar.tsx","../src/components/Code/Code.tsx","../src/components/Attachment/Attachment.tsx","../src/components/Message/Message.tsx","../src/components/AIAnatomy/AIAnatomy.tsx","../src/components/Citation/Citation.tsx","../src/components/EmptyState/EmptyState.tsx","../src/components/Card/Card.tsx","../src/components/SkipLink/SkipLink.tsx","../src/components/AspectRatio/AspectRatio.tsx","../src/components/Container/Container.tsx","../src/components/Grid/Grid.tsx","../src/components/AvatarGroup/AvatarGroup.tsx","../src/components/DescriptionList/DescriptionList.tsx","../src/components/Stat/Stat.tsx","../src/components/Timeline/Timeline.tsx","../src/components/List/List.tsx","../src/components/Tree/Tree.tsx","../src/components/NumberInput/NumberInput.tsx","../src/components/FileInput/FileInput.tsx","../src/components/SearchInput/SearchInput.tsx","../src/components/PinInput/PinInput.tsx","../src/components/TagInput/TagInput.tsx","../src/components/ColorPicker/ColorPicker.tsx","../src/components/Text/Text.tsx","../src/components/Interactive/Interactive.tsx","../src/components/Disabled/Disabled.tsx","../src/components/Hoverable/Hoverable.tsx","../src/components/SelectButton/SelectButton.tsx","../src/components/OpenButton/OpenButton.tsx","../src/components/ExpandableButton/ExpandableButton.tsx","../src/components/FilterButton/FilterButton.tsx","../src/components/LinkButton/LinkButton.tsx","../src/components/Tag/Tag.tsx","../src/components/Content/ContentXl.tsx","../src/components/Content/ContentLg.tsx","../src/components/Content/ContentMd.tsx","../src/components/Content/ContentSm.tsx","../src/components/Content/Content.tsx","../src/components/ContentAction/ContentAction.tsx","../src/components/LineItemButton/LineItemButton.tsx","../src/components/InputLayouts/InputLayouts.tsx","../src/components/SelectCard/SelectCard.tsx","../src/components/MessageCard/MessageCard.tsx","../src/components/EmptyMessageCard/EmptyMessageCard.tsx","../src/components/IllustrationContent/IllustrationContent.tsx","../src/patterns/AppShell/AppShell.tsx","../src/patterns/DestructiveConfirm/DestructiveConfirm.tsx","../src/patterns/EmptyHierarchy/EmptyHierarchy.tsx","../src/patterns/ErrorRecovery/ErrorRecovery.tsx","../src/patterns/FilePreview/FilePreview.tsx","../src/patterns/FilteringPattern/FilteringPattern.tsx","../src/patterns/FormsPattern/FormsPattern.tsx","../src/patterns/LoadingStates/LoadingStates.tsx","../src/patterns/MasterDetail/MasterDetail.tsx","../src/patterns/PricingTable/PricingTable.tsx","../src/patterns/SettingsPage/SettingsPage.tsx","../src/patterns/SignInForm/SignInForm.tsx","../src/patterns/Wizard/Wizard.tsx","../src/templates/EmptyWorkspace/EmptyWorkspace.tsx","../src/templates/Forbidden403/Forbidden403.tsx","../src/templates/NotFound404/NotFound404.tsx","../src/templates/NotificationsInbox/NotificationsInbox.tsx","../src/templates/OnboardingWizard/OnboardingWizard.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport styles from \"./Badge.module.css\";\nimport { resolveNode, type RichStr } from \"../Text/richstr\";\n\nexport type BadgeTone = \"neutral\" | \"info\" | \"success\" | \"warning\" | \"error\" | \"purple\" | \"brand\";\nexport type BadgeProminence = \"subtle\" | \"bold\" | \"outline\";\n\nexport interface BadgeProps extends Omit<HTMLAttributes<HTMLSpanElement>, \"children\"> {\n tone?: BadgeTone;\n prominence?: BadgeProminence;\n dot?: boolean;\n iconLeft?: ReactNode;\n children?: ReactNode | RichStr;\n}\n\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n { tone = \"neutral\", prominence = \"subtle\", dot = false, iconLeft, children, className, ...rest },\n ref,\n) {\n const classes = [styles.badge, styles[`tone-${tone}`], styles[`prom-${prominence}`], className]\n .filter(Boolean)\n .join(\" \");\n\n const ariaLabel = (rest as { \"aria-label\"?: string })[\"aria-label\"];\n const hasChildren = children != null && children !== \"\";\n\n if (dot && !hasChildren && !ariaLabel) {\n // Dot-only badges convey status visually; without text or aria-label they\n // are invisible to assistive technology. Warn in dev consoles only.\n const env =\n typeof globalThis !== \"undefined\"\n ? (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env?.NODE_ENV\n : undefined;\n if (env !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n \"[Badge] dot-only badges (no children) must receive an `aria-label` for screen reader users.\",\n );\n }\n }\n\n return (\n <span ref={ref} className={classes} {...rest}>\n {dot ? <span className={styles.dot} aria-hidden=\"true\" /> : null}\n {iconLeft ? <span className={styles.icon}>{iconLeft}</span> : null}\n {resolveNode(children)}\n {dot && !hasChildren && ariaLabel ? (\n <span className={styles.visuallyHidden}>{ariaLabel}</span>\n ) : null}\n </span>\n );\n});\n","import * as RT from \"@radix-ui/react-tooltip\";\nimport { type ReactNode } from \"react\";\nimport styles from \"./Tooltip.module.css\";\nimport { isRichStr, resolveStr, type RichStr } from \"../Text/richstr\";\n\nexport interface TooltipProps {\n /**\n * Tooltip content. Supports inline markdown via `markdown()`. When\n * `undefined`, the children render bare — callers never need to wrap\n * conditionally.\n */\n content?: ReactNode | RichStr;\n children: ReactNode;\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n align?: \"start\" | \"center\" | \"end\";\n delayDuration?: number;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n sideOffset?: number;\n /**\n * Visual treatment of the content surface. `\"default\"` renders the DS chrome\n * (padding, inverted background, radius) plus a filled arrow. `\"bare\"` drops\n * all chrome and the arrow so `content` can be a custom floating card.\n * @default \"default\"\n */\n variant?: \"default\" | \"bare\";\n /**\n * Show the filled arrow. Defaults to `true` for `variant=\"default\"` and\n * `false` for `variant=\"bare\"`. Set explicitly to override.\n */\n arrow?: boolean;\n /** Class merged onto the content element (after the DS classes). */\n contentClassName?: string;\n}\n\nexport const TooltipProvider = ({\n children,\n delayDuration = 500,\n skipDelayDuration = 150,\n}: {\n children: ReactNode;\n delayDuration?: number;\n skipDelayDuration?: number;\n}) => (\n <RT.Provider delayDuration={delayDuration} skipDelayDuration={skipDelayDuration}>\n {children}\n </RT.Provider>\n);\n\nexport function Tooltip({\n content,\n children,\n side = \"top\",\n align = \"center\",\n delayDuration,\n open,\n defaultOpen,\n onOpenChange,\n sideOffset = 8,\n variant = \"default\",\n arrow,\n contentClassName,\n}: TooltipProps) {\n if (content === undefined) return <>{children}</>;\n const showArrow = arrow ?? variant === \"default\";\n const contentClasses = [\n styles.content,\n variant === \"bare\" ? styles.bare : null,\n contentClassName,\n ]\n .filter(Boolean)\n .join(\" \");\n return (\n <RT.Root\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n delayDuration={delayDuration}\n >\n <RT.Trigger asChild>{children}</RT.Trigger>\n <RT.Portal>\n <RT.Content side={side} align={align} sideOffset={sideOffset} className={contentClasses}>\n {isRichStr(content) ? resolveStr(content) : content}\n {showArrow ? <RT.Arrow className={styles.arrow} width={10} height={5} /> : null}\n </RT.Content>\n </RT.Portal>\n </RT.Root>\n );\n}\n","import { forwardRef, type CSSProperties, type HTMLAttributes } from \"react\";\n// Imported (and referenced below via `styles.ring`) so the library bundler keeps\n// this module's CSS — which registers the :global ring hooks + @property angles\n// — even though the visible class names are all :global. A bare side-effect\n// `import \"./AnimatedBorder.module.css\"` gets tree-shaken out of the lib build.\nimport styles from \"./AnimatedBorder.module.css\";\n\nexport type AnimatedBorderVariant = \"pulse\" | \"spin\";\n\n/**\n * Stable, unscoped class hooks for the animated ring. Apply these to any\n * existing positioned element (one with `position: relative` and a\n * `border-radius`) to opt it into the ring without wrapping it in\n * `<AnimatedBorder>` — useful when a host element must keep its DOM shape.\n *\n * Always combine the base hook with exactly one variant hook, e.g.\n * `` `${animatedBorderClasses.base} ${animatedBorderClasses.pulse}` ``.\n */\nexport const animatedBorderClasses = {\n /** Required base hook — sets up the ::before ring container. */\n base: \"sds-animated-border\",\n /** Red \"live now\" ring (action-danger family). */\n pulse: \"sds-animated-border-pulse\",\n /** Brand-blue \"armed / recording\" ring (theme-primary family). */\n spin: \"sds-animated-border-spin\",\n} as const;\n\n/** Default ring thickness per variant, matching the original Meet treatments.\n * Exported so other DS components (e.g. Button's `animated` prop) apply the\n * same default instead of the CSS 2px fallback. */\nexport const animatedBorderThickness: Record<AnimatedBorderVariant, string> = {\n pulse: \"2px\",\n spin: \"1.5px\",\n};\n\n/**\n * Build the className for an animated ring. Use when you are applying the ring\n * to an element you already render (instead of nesting it in `AnimatedBorder`).\n */\nexport function animatedBorderClassName(variant: AnimatedBorderVariant): string {\n return `${animatedBorderClasses.base} ${animatedBorderClasses[variant]}`;\n}\n\nexport interface AnimatedBorderProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Which attention ring to paint.\n * - `\"pulse\"` — red rotating ring for \"live now\" surfaces (e.g. a meeting\n * that is recording right now).\n * - `\"spin\"` — brand-blue rotating ring for an armed / active feature\n * (e.g. an enabled auto-record control).\n */\n variant: AnimatedBorderVariant;\n /**\n * Optional CSS color string overriding the variant's token color. Accepts any\n * CSS color. The translucent gradient stops are derived from it with\n * `color-mix`, so a single solid color is enough.\n */\n color?: string;\n /**\n * Corner radius of the ring. Defaults to `\"inherit\"` so the ring follows the\n * host's own `border-radius`. Pass a length (e.g. `14` or `\"14px\"`) to force\n * a radius when the host has none.\n */\n radius?: number | string;\n /** Ring thickness. Defaults to 2px (pulse) / 1.5px (spin). */\n thickness?: number | string;\n}\n\nconst toLen = (v: number | string): string => (typeof v === \"number\" ? `${v}px` : v);\n\n/**\n * Renders a positioned wrapper whose `::before` carries a rotating\n * conic-gradient attention ring, with `children` painted above it.\n *\n * If the element you want to ring already exists in your tree and you would\n * rather not re-nest it, apply {@link animatedBorderClasses} (or\n * {@link animatedBorderClassName}) to it directly instead.\n */\nexport const AnimatedBorder = forwardRef<HTMLDivElement, AnimatedBorderProps>(\n function AnimatedBorder(\n { variant, color, radius = \"inherit\", thickness, className, style, children, ...rest },\n ref,\n ) {\n const ringStyle: CSSProperties = {\n borderRadius: radius === \"inherit\" ? undefined : toLen(radius),\n // CSS custom properties consumed by the module CSS.\n [\"--sds-ab-thickness\" as string]: toLen(thickness ?? animatedBorderThickness[variant]),\n ...(color\n ? { [\"--sds-ab-color\" as string]: color, [\"--sds-ab-color-soft\" as string]: color }\n : null),\n ...style,\n };\n\n return (\n <div\n ref={ref}\n className={[styles.ring, animatedBorderClassName(variant), className]\n .filter(Boolean)\n .join(\" \")}\n style={ringStyle}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n","import {\n forwardRef,\n type AnchorHTMLAttributes,\n type ButtonHTMLAttributes,\n type CSSProperties,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport styles from \"./Button.module.css\";\nimport { Tooltip, TooltipProvider } from \"../Tooltip/Tooltip\";\nimport { resolveNode, resolveStr, type RichStr } from \"../Text/richstr\";\nimport {\n animatedBorderClasses,\n animatedBorderThickness,\n type AnimatedBorderVariant,\n} from \"../AnimatedBorder/AnimatedBorder\";\n\nexport type ButtonVariant =\n | \"primary\"\n | \"secondary\"\n | \"tertiary\"\n | \"danger\"\n | \"link\"\n | \"red\"\n | \"ghost\"\n | \"outline\"\n | \"outline-primary\"\n | \"soft\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\nexport type ButtonTooltipSide = \"top\" | \"right\" | \"bottom\" | \"left\";\n\n/**\n * Returns the Button class string for a given variant/size — for styling\n * non-`<button>` elements (e.g. a Radix `AlertDialogAction`, a router link)\n * with DS button visuals without rendering a Button.\n */\nexport function buttonClassNames(opts?: {\n variant?: ButtonVariant;\n size?: ButtonSize;\n iconOnly?: boolean;\n fullWidth?: boolean;\n className?: string;\n}): string {\n const { variant = \"primary\", size = \"md\", iconOnly, fullWidth, className } = opts ?? {};\n return [\n styles.btn,\n styles[`btn-${variant}`],\n styles[`size-${size}`],\n iconOnly ? styles[\"icon-only\"] : null,\n fullWidth ? styles[\"full-width\"] : null,\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n}\n\nexport interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n /**\n * Button label. Accepts plain text, arbitrary nodes, or `markdown()` for\n * inline markdown (`**bold**`, `*italic*`, `` `code` ``, `[links](url)`).\n */\n children?: ReactNode | RichStr;\n iconLeft?: ReactNode;\n iconRight?: ReactNode;\n iconOnly?: boolean;\n loading?: boolean;\n /**\n * Render the Button's styling/props onto the single child element instead of\n * a `<button>`/`<a>` (Radix `Slot`). Use for SPA-safe navigation, e.g.\n * `<Button asChild><Link to=\"/x\">Go</Link></Button>`. The child supplies its\n * own content — `iconLeft`/`iconRight`/`iconOnly` are ignored in this mode.\n */\n asChild?: boolean;\n /**\n * Animated attention ring around the button (the AnimatedBorder treatment),\n * composable with any variant. `true` (or `\"spin\"`) paints the brand-blue\n * \"armed\" ring — e.g. an outline-primary toggle waiting to be enabled;\n * `\"pulse\"` paints the red \"live now\" ring. The ring replaces the painted\n * border and rotates continuously (static at reduced opacity under\n * `prefers-reduced-motion`). Colors are theme-corrected (`--sophea-focus-ring`\n * / `--action-danger-05`) so the ring is visible in both light and dark.\n */\n animated?: boolean | AnimatedBorderVariant;\n /** Renders an `<a>` styled as a button. Disabled links lose their href. */\n href?: string;\n /** Link target. Only used with `href`; `_blank` adds the security rel. */\n target?: string;\n /** Tooltip shown on hover. Supports inline markdown via `markdown()`. */\n tooltip?: string | RichStr;\n /** Tooltip side. Default: `\"top\"`. */\n tooltipSide?: ButtonTooltipSide;\n /** Stretches the button to the container width. */\n fullWidth?: boolean;\n /**\n * Hides the label on narrow viewports, keeping the icon. Use only with\n * `iconLeft` or `iconRight` so the button never collapses to nothing.\n */\n responsiveHideText?: boolean;\n}\n\nexport const Button = forwardRef<HTMLButtonElement | HTMLAnchorElement, ButtonProps>(\n function Button(\n {\n variant = \"primary\",\n size = \"md\",\n iconLeft,\n iconRight,\n iconOnly = false,\n loading = false,\n disabled,\n asChild = false,\n animated = false,\n children,\n className,\n style,\n type = \"button\",\n href,\n target,\n tooltip,\n tooltipSide = \"top\",\n fullWidth = false,\n responsiveHideText = false,\n \"aria-busy\": ariaBusy,\n ...rest\n },\n ref,\n ) {\n const isDisabled = disabled ?? loading;\n\n // Attention ring (AnimatedBorder): resolve `true` to the brand \"spin\" ring,\n // apply the shared :global hook classes plus the variant's default\n // thickness (the bare CSS fallback is 2px — chunkier than the 1px border\n // the ring replaces on a small pill).\n const ring: AnimatedBorderVariant | null =\n animated === true ? \"spin\" : animated || null;\n const ringStyle = ring\n ? ({ \"--sds-ab-thickness\": animatedBorderThickness[ring] } as CSSProperties)\n : undefined;\n const mergedStyle = ringStyle || style ? { ...ringStyle, ...style } : undefined;\n\n const classes = [\n buttonClassNames({ variant, size, iconOnly, fullWidth, className }),\n responsiveHideText ? styles[\"responsive-hide-text\"] : null,\n ring ? `${animatedBorderClasses.base} ${animatedBorderClasses[ring]}` : null,\n ]\n .filter(Boolean)\n .join(\" \");\n\n // asChild: delegate rendering to the single child (Radix Slot) so callers\n // keep SPA-safe links/custom elements while wearing DS button styling. The\n // child owns its content, so the icon slots below don't apply.\n if (asChild) {\n return (\n <Slot ref={ref} className={classes} style={mergedStyle} aria-busy={ariaBusy ?? loading} {...rest}>\n {resolveNode(children)}\n </Slot>\n );\n }\n\n const content = (\n <>\n {iconLeft ? <span className={styles.icon}>{iconLeft}</span> : null}\n {!iconOnly && children ? <span className={styles.label}>{resolveNode(children)}</span> : null}\n {iconRight ? <span className={styles.icon}>{iconRight}</span> : null}\n </>\n );\n\n const element = href ? (\n <a\n ref={ref as Ref<HTMLAnchorElement>}\n className={classes}\n style={mergedStyle}\n href={isDisabled ? undefined : href}\n target={target}\n rel={target === \"_blank\" ? \"noopener noreferrer\" : undefined}\n aria-disabled={isDisabled || undefined}\n aria-busy={ariaBusy ?? loading}\n {...(rest as AnchorHTMLAttributes<HTMLAnchorElement>)}\n >\n {content}\n </a>\n ) : (\n <button\n ref={ref as Ref<HTMLButtonElement>}\n type={type}\n className={classes}\n style={mergedStyle}\n disabled={isDisabled}\n aria-busy={ariaBusy ?? loading}\n {...rest}\n >\n {content}\n </button>\n );\n\n if (tooltip === undefined) return element;\n\n return (\n <TooltipProvider>\n <Tooltip\n content={typeof tooltip === \"string\" ? tooltip : resolveStr(tooltip)}\n side={tooltipSide}\n >\n {element}\n </Tooltip>\n </TooltipProvider>\n );\n },\n);\n","/**\n * Input\n *\n * Accessibility note: placeholder color is `--text-03` (meets WCAG AA after the\n * contrast-audit token darkening). Placeholder text MUST NOT be the only label —\n * callers MUST provide a visible `label` prop (rendered as `<label htmlFor>`).\n * Use `hint` for help text, not placeholder.\n */\nimport { forwardRef, useId, type InputHTMLAttributes, type ReactNode } from \"react\";\nimport styles from \"./Input.module.css\";\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\"> {\n label?: string;\n hint?: string;\n error?: string;\n iconLeft?: ReactNode;\n trailing?: ReactNode;\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n { label, hint, error, iconLeft, trailing, id, className, required, ...rest },\n ref,\n) {\n const autoId = useId();\n const inputId = id ?? autoId;\n const hintId = `${inputId}-hint`;\n const errorId = `${inputId}-error`;\n const describedBy =\n [error ? errorId : null, hint && !error ? hintId : null].filter(Boolean).join(\" \") || undefined;\n\n return (\n <div className={[styles.wrapper, className].filter(Boolean).join(\" \")}>\n {label ? (\n <label htmlFor={inputId} className={styles.label}>\n {label}\n </label>\n ) : null}\n <div className={[styles.field, error ? styles[\"field-error\"] : null].filter(Boolean).join(\" \")}>\n {iconLeft ? <span className={styles.icon}>{iconLeft}</span> : null}\n <input\n ref={ref}\n id={inputId}\n className={styles.input}\n aria-invalid={error ? true : undefined}\n aria-describedby={describedBy}\n required={required}\n {...rest}\n />\n {trailing ? <span className={styles.trailing}>{trailing}</span> : null}\n </div>\n {error ? (\n <span id={errorId} className={styles.error}>\n {error}\n </span>\n ) : hint ? (\n <span id={hintId} className={styles.hint}>\n {hint}\n </span>\n ) : null}\n </div>\n );\n});\n","/**\n * Select\n *\n * Accessibility note: this component does NOT render its own visible label. If the\n * trigger is not associated with an external `<label htmlFor={id}>`, callers MUST\n * pass `aria-label` so screen-reader users get a name for the control.\n */\nimport * as RS from \"@radix-ui/react-select\";\nimport { forwardRef, type ReactNode } from \"react\";\nimport styles from \"./Select.module.css\";\n\nexport interface SelectOption {\n value: string;\n label: ReactNode;\n description?: ReactNode;\n disabled?: boolean;\n}\n\nexport interface SelectProps {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n options: SelectOption[];\n placeholder?: string;\n disabled?: boolean;\n name?: string;\n id?: string;\n \"aria-label\"?: string;\n className?: string;\n}\n\nconst CaretDown = () => (\n <svg className={styles.caret} width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n);\n\nconst Check = () => (\n <svg className={styles.check} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2.5} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M20 6L9 17l-5-5\" />\n </svg>\n);\n\nexport const Select = forwardRef<HTMLButtonElement, SelectProps>(function Select(\n { value, defaultValue, onValueChange, options, placeholder = \"Select…\", disabled, name, id, \"aria-label\": ariaLabel, className },\n ref,\n) {\n return (\n <RS.Root value={value} defaultValue={defaultValue} onValueChange={onValueChange} disabled={disabled} name={name}>\n <RS.Trigger\n ref={ref}\n id={id}\n aria-label={ariaLabel}\n className={[styles.trigger, className].filter(Boolean).join(\" \")}\n >\n <RS.Value placeholder={placeholder} />\n <RS.Icon asChild>\n <CaretDown />\n </RS.Icon>\n </RS.Trigger>\n <RS.Portal>\n <RS.Content className={styles.content} position=\"popper\" sideOffset={4}>\n <RS.Viewport className={styles.viewport}>\n {options.map((opt) => (\n <RS.Item key={opt.value} value={opt.value} disabled={opt.disabled} className={styles.item}>\n <RS.ItemIndicator className={styles.indicator} asChild>\n <Check />\n </RS.ItemIndicator>\n <span className={styles.itemSlot}>\n <RS.ItemText>{opt.label}</RS.ItemText>\n {opt.description ? <span className={styles.itemDesc}>{opt.description}</span> : null}\n </span>\n </RS.Item>\n ))}\n </RS.Viewport>\n </RS.Content>\n </RS.Portal>\n </RS.Root>\n );\n});\n","import { forwardRef, type CSSProperties, type ElementType, type HTMLAttributes } from \"react\";\n\nexport type StackDirection = \"row\" | \"column\";\nexport type StackAlign = \"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\";\nexport type StackJustify =\n | \"start\"\n | \"center\"\n | \"end\"\n | \"between\"\n | \"around\"\n | \"evenly\";\n\nconst ALIGN_MAP: Record<StackAlign, CSSProperties[\"alignItems\"]> = {\n start: \"flex-start\",\n center: \"center\",\n end: \"flex-end\",\n stretch: \"stretch\",\n baseline: \"baseline\",\n};\n\nconst JUSTIFY_MAP: Record<StackJustify, CSSProperties[\"justifyContent\"]> = {\n start: \"flex-start\",\n center: \"center\",\n end: \"flex-end\",\n between: \"space-between\",\n around: \"space-around\",\n evenly: \"space-evenly\",\n};\n\nexport interface StackProps extends HTMLAttributes<HTMLElement> {\n direction?: StackDirection;\n gap?: number | string;\n align?: StackAlign;\n justify?: StackJustify;\n wrap?: boolean;\n inline?: boolean;\n as?: ElementType;\n}\n\nexport const Stack = forwardRef<HTMLElement, StackProps>(function Stack(\n {\n direction = \"column\",\n gap = 12,\n align,\n justify,\n wrap,\n inline,\n as,\n style,\n children,\n ...rest\n },\n ref,\n) {\n const Tag = (as ?? \"div\") as ElementType;\n const flexStyle: CSSProperties = {\n display: inline ? \"inline-flex\" : \"flex\",\n flexDirection: direction,\n gap: typeof gap === \"number\" ? `${gap}px` : gap,\n alignItems: align ? ALIGN_MAP[align] : undefined,\n justifyContent: justify ? JUSTIFY_MAP[justify] : undefined,\n flexWrap: wrap ? \"wrap\" : undefined,\n ...style,\n };\n return (\n <Tag ref={ref as never} style={flexStyle} {...rest}>\n {children}\n </Tag>\n );\n});\n","import * as RS from \"@radix-ui/react-switch\";\nimport { forwardRef, useId, type ReactNode } from \"react\";\nimport styles from \"./Switch.module.css\";\n\nexport type SwitchSize = \"md\" | \"sm\";\n\nexport interface SwitchProps {\n checked?: boolean;\n defaultChecked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n disabled?: boolean;\n required?: boolean;\n name?: string;\n value?: string;\n id?: string;\n size?: SwitchSize;\n label?: ReactNode;\n description?: ReactNode;\n className?: string;\n \"aria-label\"?: string;\n}\n\nexport const Switch = forwardRef<HTMLButtonElement, SwitchProps>(function Switch(\n {\n checked,\n defaultChecked,\n onCheckedChange,\n disabled,\n required,\n name,\n value,\n id,\n size = \"md\",\n label,\n description,\n className,\n \"aria-label\": ariaLabel,\n },\n ref,\n) {\n const autoId = useId();\n const sId = id ?? autoId;\n\n const root = (\n <RS.Root\n ref={ref}\n id={sId}\n checked={checked}\n defaultChecked={defaultChecked}\n onCheckedChange={onCheckedChange}\n disabled={disabled}\n required={required}\n name={name}\n value={value}\n aria-label={ariaLabel}\n className={[styles.root, styles[`size-${size}`], className].filter(Boolean).join(\" \")}\n >\n <RS.Thumb className={styles.thumb} />\n </RS.Root>\n );\n\n if (!label && !description) return root;\n\n return (\n <label htmlFor={sId} className={styles.row} data-disabled={disabled ? \"\" : undefined}>\n <span className={styles.text}>\n <span className={styles.label}>{label}</span>\n {description ? <span className={styles.description}>{description}</span> : null}\n </span>\n {root}\n </label>\n );\n});\n","import { forwardRef, useState, type ReactNode } from \"react\";\nimport { Badge } from \"../components/Badge\";\nimport { Button } from \"../components/Button\";\nimport { Input } from \"../components/Input\";\nimport { Select } from \"../components/Select\";\nimport { Stack } from \"../components/Stack\";\nimport { Switch } from \"../components/Switch\";\nimport {\n SvgAlertTriangle,\n SvgArrowRight,\n SvgCancel,\n SvgTick,\n} from \"../icons\";\nimport styles from \"./RenderAgentComponent.module.css\";\n\n// ---------------------------------------------------------------------------\n// Spec (discriminated union)\n// ---------------------------------------------------------------------------\n\nexport type AgentFormField =\n | {\n kind: \"text\";\n name: string;\n label: string;\n placeholder?: string;\n defaultValue?: string;\n required?: boolean;\n hint?: string;\n }\n | {\n kind: \"select\";\n name: string;\n label: string;\n options: { value: string; label: string }[];\n defaultValue?: string;\n }\n | {\n kind: \"switch\";\n name: string;\n label: string;\n description?: string;\n defaultValue?: boolean;\n };\n\nexport type AgentChartPoint = { label: string; value: number };\n\nexport type AgentComponentSpec =\n | {\n kind: \"form\";\n title?: string;\n fields: AgentFormField[];\n submitLabel?: string;\n cancelLabel?: string;\n }\n | {\n kind: \"chart\";\n title?: string;\n variant: \"bar\" | \"sparkline\";\n data: AgentChartPoint[];\n unit?: string;\n caption?: string;\n }\n | {\n kind: \"confirm\";\n title: string;\n body: string;\n approveLabel?: string;\n rejectLabel?: string;\n danger?: boolean;\n };\n\nexport interface RenderAgentComponentProps {\n spec: AgentComponentSpec;\n /** Fires when a form submit is triggered. */\n onSubmit?: (values: Record<string, string | boolean>) => void;\n /** Fires when the secondary CTA fires (form cancel / confirm reject). */\n onCancel?: () => void;\n /** Fires when a confirm dialog is approved. */\n onApprove?: () => void;\n /** Fires when a confirm dialog is rejected. Aliased to onCancel by default. */\n onReject?: () => void;\n}\n\n// ---------------------------------------------------------------------------\n// Renderer\n// ---------------------------------------------------------------------------\n\nexport const RenderAgentComponent = forwardRef<HTMLDivElement, RenderAgentComponentProps>(\n function RenderAgentComponent({ spec, onSubmit, onCancel, onApprove, onReject }, ref) {\n if (spec.kind === \"form\") {\n return (\n <AgentForm\n ref={ref}\n spec={spec}\n onSubmit={onSubmit}\n onCancel={onCancel}\n />\n );\n }\n if (spec.kind === \"chart\") {\n return <AgentChart ref={ref} spec={spec} />;\n }\n return (\n <AgentConfirm\n ref={ref}\n spec={spec}\n onApprove={onApprove}\n onReject={onReject ?? onCancel}\n />\n );\n },\n);\n\n// ---------------------------------------------------------------------------\n// Form\n// ---------------------------------------------------------------------------\n\nconst AgentForm = forwardRef<\n HTMLDivElement,\n {\n spec: Extract<AgentComponentSpec, { kind: \"form\" }>;\n onSubmit?: (values: Record<string, string | boolean>) => void;\n onCancel?: () => void;\n }\n>(function AgentForm({ spec, onSubmit, onCancel }, ref) {\n const [values, setValues] = useState<Record<string, string | boolean>>(() => {\n const initial: Record<string, string | boolean> = {};\n for (const f of spec.fields) {\n if (f.kind === \"switch\") initial[f.name] = f.defaultValue ?? false;\n else initial[f.name] = f.defaultValue ?? \"\";\n }\n return initial;\n });\n\n const update = (name: string, next: string | boolean) =>\n setValues((prev) => ({ ...prev, [name]: next }));\n\n return (\n <div ref={ref} className={styles.agentCard} data-kind=\"form\">\n <div className={styles.head}>\n <Badge tone=\"brand\" prominence=\"subtle\">\n Generative form\n </Badge>\n {spec.title ? <span className={styles.headTitle}>{spec.title}</span> : null}\n </div>\n <form\n className={styles.formBody}\n onSubmit={(e) => {\n e.preventDefault();\n onSubmit?.(values);\n }}\n >\n <Stack gap={12}>\n {spec.fields.map((f) => {\n if (f.kind === \"text\") {\n return (\n <Input\n key={f.name}\n label={f.label}\n name={f.name}\n placeholder={f.placeholder}\n hint={f.hint}\n required={f.required}\n defaultValue={f.defaultValue ?? \"\"}\n onChange={(e) => update(f.name, e.currentTarget.value)}\n />\n );\n }\n if (f.kind === \"select\") {\n return (\n <div key={f.name} className={styles.fieldRow}>\n <label className={styles.fieldLabel} htmlFor={`gf-${f.name}`}>\n {f.label}\n </label>\n <Select\n id={`gf-${f.name}`}\n options={f.options}\n defaultValue={f.defaultValue}\n aria-label={f.label}\n onValueChange={(v) => update(f.name, v)}\n />\n </div>\n );\n }\n return (\n <Switch\n key={f.name}\n label={f.label}\n description={f.description}\n defaultChecked={f.defaultValue}\n onCheckedChange={(checked) => update(f.name, checked)}\n />\n );\n })}\n </Stack>\n <div className={styles.actions}>\n {onCancel ? (\n <Button variant=\"tertiary\" type=\"button\" onClick={onCancel}>\n {spec.cancelLabel ?? \"Cancel\"}\n </Button>\n ) : null}\n <Button\n variant=\"primary\"\n type=\"submit\"\n iconRight={<SvgArrowRight width={14} height={14} aria-hidden=\"true\" />}\n >\n {spec.submitLabel ?? \"Submit\"}\n </Button>\n </div>\n </form>\n </div>\n );\n});\n\n// ---------------------------------------------------------------------------\n// Chart (hand-rolled SVG, no recharts dependency)\n// ---------------------------------------------------------------------------\n\nconst CHART_W = 240;\nconst CHART_H = 80;\n\nconst AgentChart = forwardRef<\n HTMLDivElement,\n { spec: Extract<AgentComponentSpec, { kind: \"chart\" }> }\n>(function AgentChart({ spec }, ref) {\n const max = Math.max(1, ...spec.data.map((d) => d.value));\n const barWidth = CHART_W / Math.max(1, spec.data.length) - 6;\n\n return (\n <div ref={ref} className={styles.agentCard} data-kind=\"chart\">\n <div className={styles.head}>\n <Badge tone=\"brand\" prominence=\"subtle\">\n Generative chart\n </Badge>\n {spec.title ? <span className={styles.headTitle}>{spec.title}</span> : null}\n </div>\n <div className={styles.chartBody}>\n <svg\n width={CHART_W}\n height={CHART_H}\n viewBox={`0 0 ${CHART_W} ${CHART_H}`}\n role=\"img\"\n aria-label={spec.title ?? `${spec.variant} chart`}\n className={styles.chartSvg}\n >\n {spec.variant === \"bar\"\n ? spec.data.map((d, i) => {\n const h = (d.value / max) * (CHART_H - 18);\n const x = i * (barWidth + 6) + 4;\n const y = CHART_H - 12 - h;\n return (\n <g key={d.label}>\n <rect\n x={x}\n y={y}\n width={barWidth}\n height={h}\n rx={3}\n className={styles.bar}\n />\n <text\n x={x + barWidth / 2}\n y={CHART_H - 2}\n textAnchor=\"middle\"\n className={styles.axisLabel}\n >\n {d.label}\n </text>\n </g>\n );\n })\n : (() => {\n const step = CHART_W / Math.max(1, spec.data.length - 1);\n const points = spec.data\n .map((d, i) => {\n const x = i * step;\n const y = CHART_H - 8 - (d.value / max) * (CHART_H - 16);\n return `${x},${y}`;\n })\n .join(\" \");\n return <polyline points={points} className={styles.spark} />;\n })()}\n </svg>\n <div className={styles.chartLegend}>\n {spec.data.map((d) => (\n <span key={d.label} className={styles.legendItem}>\n <span className={styles.legendLabel}>{d.label}</span>\n <span className={styles.legendValue}>\n {d.value}\n {spec.unit ? ` ${spec.unit}` : null}\n </span>\n </span>\n ))}\n </div>\n </div>\n {spec.caption ? <p className={styles.caption}>{spec.caption}</p> : null}\n </div>\n );\n});\n\n// ---------------------------------------------------------------------------\n// Confirm\n// ---------------------------------------------------------------------------\n\nconst AgentConfirm = forwardRef<\n HTMLDivElement,\n {\n spec: Extract<AgentComponentSpec, { kind: \"confirm\" }>;\n onApprove?: () => void;\n onReject?: () => void;\n }\n>(function AgentConfirm({ spec, onApprove, onReject }, ref) {\n return (\n <div\n ref={ref}\n className={\n spec.danger\n ? `${styles.agentCard} ${styles.confirmDanger}`\n : styles.agentCard\n }\n data-kind=\"confirm\"\n role=\"group\"\n aria-label={spec.title}\n >\n <div className={styles.head}>\n <Badge tone={spec.danger ? \"error\" : \"warning\"} prominence=\"subtle\">\n {spec.danger ? \"Confirm destructive\" : \"Confirm action\"}\n </Badge>\n </div>\n <div className={styles.confirmBody}>\n <span className={styles.confirmIcon} aria-hidden=\"true\">\n <SvgAlertTriangle width={20} height={20} />\n </span>\n <div className={styles.confirmText}>\n <strong>{spec.title}</strong>\n <p>{spec.body}</p>\n </div>\n </div>\n <div className={styles.actions}>\n <Button\n variant=\"secondary\"\n iconLeft={<SvgCancel width={14} height={14} aria-hidden=\"true\" />}\n onClick={onReject}\n >\n {spec.rejectLabel ?? \"Reject\"}\n </Button>\n <Button\n variant={spec.danger ? \"danger\" : \"primary\"}\n iconLeft={<SvgTick width={14} height={14} aria-hidden=\"true\" />}\n onClick={onApprove}\n >\n {spec.approveLabel ?? \"Approve\"}\n </Button>\n </div>\n </div>\n );\n});\n\n// ---------------------------------------------------------------------------\n// Small helper so stories can render the spec next to the rendered component.\n// ---------------------------------------------------------------------------\n\nexport function AgentSpecPreview({\n spec,\n caption,\n}: {\n spec: AgentComponentSpec;\n caption?: ReactNode;\n}) {\n return (\n <div className={styles.specPreview}>\n {caption ? <div className={styles.specCaption}>{caption}</div> : null}\n {/* tabindex makes the horizontally-scrollable code block reachable by keyboard (scrollable-region-focusable). */}\n <pre className={styles.specCode} tabIndex={0}>\n <code>{JSON.stringify(spec, null, 2)}</code>\n </pre>\n </div>\n );\n}\n","import * as RG from \"@radix-ui/react-radio-group\";\nimport { forwardRef, useId, type ReactNode } from \"react\";\nimport styles from \"./RadioGroup.module.css\";\n\nexport interface RadioGroupProps {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n name?: string;\n disabled?: boolean;\n required?: boolean;\n legend?: ReactNode;\n orientation?: \"vertical\" | \"horizontal\";\n children?: ReactNode;\n className?: string;\n}\n\nexport const RadioGroup = forwardRef<HTMLDivElement, RadioGroupProps>(function RadioGroup(\n { value, defaultValue, onValueChange, name, disabled, required, legend, orientation = \"vertical\", children, className },\n ref,\n) {\n const legendId = useId();\n return (\n <div className={[styles.group, className].filter(Boolean).join(\" \")}>\n {legend ? (\n <span id={legendId} className={styles.legend}>\n {legend}\n </span>\n ) : null}\n <RG.Root\n ref={ref}\n value={value}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n name={name}\n disabled={disabled}\n required={required}\n orientation={orientation}\n aria-labelledby={legend ? legendId : undefined}\n className={styles.list}\n data-orientation={orientation}\n >\n {children}\n </RG.Root>\n </div>\n );\n});\n\nexport interface RadioProps {\n value: string;\n disabled?: boolean;\n id?: string;\n label: ReactNode;\n description?: ReactNode;\n className?: string;\n}\n\nexport const Radio = forwardRef<HTMLButtonElement, RadioProps>(function Radio(\n { value, disabled, id, label, description, className },\n ref,\n) {\n const autoId = useId();\n const rId = id ?? autoId;\n return (\n <label htmlFor={rId} className={[styles.opt, className].filter(Boolean).join(\" \")} data-disabled={disabled ? \"\" : undefined}>\n <RG.Item ref={ref} id={rId} value={value} disabled={disabled} className={styles.root}>\n <RG.Indicator className={styles.dot} />\n </RG.Item>\n <span className={styles.text}>\n <span className={styles.label}>{label}</span>\n {description ? <span className={styles.description}>{description}</span> : null}\n </span>\n </label>\n );\n});\n","import * as Popover from \"@radix-ui/react-popover\";\nimport { format as formatDate } from \"date-fns\";\nimport { forwardRef, useState, type ComponentProps, type ReactNode } from \"react\";\nimport { DayPicker, type DateRange } from \"react-day-picker\";\nimport styles from \"./DatePicker.module.css\";\n\nconst CalendarIcon = () => (\n <svg className={styles.icon} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\" />\n <path d=\"M16 3v4M8 3v4M3 11h18\" />\n </svg>\n);\n\nconst ChevronLeft = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.8} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M15 18l-6-6 6-6\" />\n </svg>\n);\n\nconst ChevronRight = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.8} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M9 18l6-6-6-6\" />\n </svg>\n);\n\nconst SINGLE_LETTER_WEEKDAY = [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"];\n\nconst formatters = {\n formatWeekdayName: (d: Date) => SINGLE_LETTER_WEEKDAY[d.getDay()] ?? \"\",\n};\n\nconst dpClassNames = {\n root: styles.dpRoot,\n months: styles.dpMonths,\n month: styles.dpMonth,\n month_caption: styles.dpMonthCaption,\n caption_label: styles.dpCaptionLabel,\n nav: styles.dpNav,\n button_previous: styles.dpNavBtn,\n button_next: styles.dpNavBtn,\n chevron: styles.dpChevron,\n month_grid: styles.dpGrid,\n weekdays: styles.dpWeekdays,\n weekday: styles.dpWeekday,\n week: styles.dpWeek,\n day: styles.dpDay,\n day_button: styles.dpDayBtn,\n today: styles.dpToday,\n selected: styles.dpSelected,\n outside: styles.dpOutside,\n disabled: styles.dpDisabled,\n range_start: styles.dpRangeStart,\n range_end: styles.dpRangeEnd,\n range_middle: styles.dpRangeMiddle,\n} as const;\n\nconst dpComponents = {\n Chevron: ({ orientation }: { orientation?: \"left\" | \"right\" | \"up\" | \"down\" }) =>\n orientation === \"right\" ? <ChevronRight /> : <ChevronLeft />,\n};\n\nexport type CalendarProps = ComponentProps<typeof DayPicker>;\n\n/**\n * Bare, DS-styled calendar grid (react-day-picker passthrough) for consumers\n * that compose their own popover/inline placement — distinct from the bundled\n * DatePicker/DateRangePicker which own their popover + trigger. Supports\n * `mode`, `selected`, `onSelect`, `numberOfMonths`, `disabled`, etc.\n */\nexport function Calendar({ classNames, components, formatters: f, ...props }: CalendarProps) {\n return (\n <DayPicker\n weekStartsOn={1}\n ISOWeek\n classNames={{ ...dpClassNames, ...classNames }}\n components={{ ...dpComponents, ...components }}\n formatters={{ ...formatters, ...f }}\n {...props}\n />\n );\n}\n\nexport interface DatePickerProps {\n value?: Date | undefined;\n onChange?: (date: Date | undefined) => void;\n placeholder?: string;\n disabled?: boolean;\n id?: string;\n \"aria-label\"?: string;\n className?: string;\n triggerIcon?: ReactNode;\n dateFormat?: string;\n}\n\nexport const DatePicker = forwardRef<HTMLButtonElement, DatePickerProps>(function DatePicker(\n { value, onChange, placeholder = \"Pick a date\", disabled, id, \"aria-label\": ariaLabel, className, triggerIcon, dateFormat = \"d MMM yyyy\" },\n ref,\n) {\n const [open, setOpen] = useState(false);\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger\n ref={ref}\n id={id}\n aria-label={ariaLabel}\n disabled={disabled}\n className={[styles.trigger, className].filter(Boolean).join(\" \")}\n >\n {triggerIcon ?? <CalendarIcon />}\n <span className={value ? styles.triggerValue : styles.triggerPlaceholder}>\n {value ? formatDate(value, dateFormat) : placeholder}\n </span>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content className={styles.popover} align=\"start\" sideOffset={4}>\n <DayPicker\n mode=\"single\"\n selected={value}\n onSelect={(d) => {\n onChange?.(d);\n if (d) setOpen(false);\n }}\n weekStartsOn={1}\n ISOWeek\n classNames={dpClassNames}\n components={dpComponents}\n formatters={formatters}\n />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n});\n\nexport interface DateRangePickerProps {\n value?: DateRange | undefined;\n onChange?: (range: DateRange | undefined) => void;\n placeholder?: string;\n disabled?: boolean;\n id?: string;\n \"aria-label\"?: string;\n className?: string;\n dateFormat?: string;\n}\n\nexport const DateRangePicker = forwardRef<HTMLButtonElement, DateRangePickerProps>(function DateRangePicker(\n { value, onChange, placeholder = \"Pick a date range\", disabled, id, \"aria-label\": ariaLabel, className, dateFormat = \"d MMM yyyy\" },\n ref,\n) {\n const [open, setOpen] = useState(false);\n const label =\n value?.from && value?.to\n ? `${formatDate(value.from, \"d MMM\")} – ${formatDate(value.to, dateFormat)}`\n : value?.from\n ? formatDate(value.from, dateFormat)\n : placeholder;\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger\n ref={ref}\n id={id}\n aria-label={ariaLabel}\n disabled={disabled}\n className={[styles.trigger, className].filter(Boolean).join(\" \")}\n >\n <CalendarIcon />\n <span className={value?.from ? styles.triggerValue : styles.triggerPlaceholder}>{label}</span>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content className={styles.popover} align=\"start\" sideOffset={4}>\n <DayPicker\n mode=\"range\"\n selected={value}\n onSelect={onChange}\n weekStartsOn={1}\n ISOWeek\n classNames={dpClassNames}\n components={dpComponents}\n formatters={formatters}\n />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n});\n","import * as RD from \"@radix-ui/react-dialog\";\nimport { forwardRef, type ReactNode } from \"react\";\nimport styles from \"./Modal.module.css\";\n\nexport interface ModalProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n trigger?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n width?: number;\n closeLabel?: string;\n className?: string;\n}\n\nconst CloseIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M6 6l12 12M18 6L6 18\" />\n </svg>\n);\n\nexport const Modal = forwardRef<HTMLDivElement, ModalProps>(function Modal(\n { open, defaultOpen, onOpenChange, trigger, title, description, children, footer, width, closeLabel = \"Close\", className },\n ref,\n) {\n return (\n <RD.Root open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange}>\n {trigger ? <RD.Trigger asChild>{trigger}</RD.Trigger> : null}\n <RD.Portal>\n <RD.Overlay className={styles.overlay} />\n <RD.Content\n ref={ref}\n className={[styles.content, className].filter(Boolean).join(\" \")}\n style={width ? { width: `${width}px` } : undefined}\n >\n <div className={styles.header}>\n <RD.Title className={styles.title}>{title}</RD.Title>\n {description ? (\n <RD.Description className={styles.description}>{description}</RD.Description>\n ) : null}\n <RD.Close className={styles.close} aria-label={closeLabel}>\n <CloseIcon />\n </RD.Close>\n </div>\n {children ? <div className={styles.body}>{children}</div> : null}\n {footer ? <div className={styles.footer}>{footer}</div> : null}\n </RD.Content>\n </RD.Portal>\n </RD.Root>\n );\n});\n\nexport const ModalClose = RD.Close;\n","import * as RT from \"@radix-ui/react-toast\";\nimport { forwardRef, type ReactNode } from \"react\";\nimport styles from \"./Toast.module.css\";\nimport { resolveNode, type RichStr } from \"../Text/richstr\";\n\nexport type ToastTone = \"success\" | \"info\" | \"warning\" | \"error\";\n\nconst DEFAULT_DURATION: Record<ToastTone, number> = {\n success: 5000,\n info: 5000,\n warning: 8000,\n error: 0, // manual dismiss only — error with action\n};\n\nexport interface ToastProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n tone?: ToastTone;\n title: ReactNode | RichStr;\n description?: ReactNode | RichStr;\n action?: { label: ReactNode; altText: string; onClick?: () => void };\n duration?: number;\n closeLabel?: string;\n}\n\nconst Icons: Record<ToastTone, ReactNode> = {\n success: \"✓\",\n info: \"i\",\n warning: \"!\",\n error: \"✕\",\n};\n\nexport const ToastProvider = ({\n children,\n swipeDirection = \"right\",\n duration = 5000,\n}: {\n children: ReactNode;\n swipeDirection?: \"right\" | \"left\" | \"up\" | \"down\";\n duration?: number;\n}) => (\n <RT.Provider swipeDirection={swipeDirection} duration={duration}>\n {children}\n <RT.Viewport className={styles.viewport} />\n </RT.Provider>\n);\n\nexport const Toast = forwardRef<HTMLLIElement, ToastProps>(function Toast(\n {\n open,\n defaultOpen,\n onOpenChange,\n tone = \"success\",\n title,\n description,\n action,\n duration,\n closeLabel = \"Dismiss\",\n },\n ref,\n) {\n return (\n <RT.Root\n ref={ref}\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n duration={duration ?? DEFAULT_DURATION[tone]}\n type={tone === \"error\" ? \"foreground\" : \"background\"}\n className={[styles.root, styles[`tone-${tone}`]].join(\" \")}\n >\n <span className={styles.icon} aria-hidden=\"true\">\n {Icons[tone]}\n </span>\n <div className={styles.body}>\n <RT.Title className={styles.title}>{resolveNode(title)}</RT.Title>\n {description ? (\n <RT.Description className={styles.description}>{resolveNode(description)}</RT.Description>\n ) : null}\n {action ? (\n <RT.Action altText={action.altText} onClick={action.onClick} className={styles.action}>\n {action.label}\n </RT.Action>\n ) : null}\n </div>\n <RT.Close aria-label={closeLabel} className={styles.close}>\n ×\n </RT.Close>\n </RT.Root>\n );\n});\n","import { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport styles from \"./Banner.module.css\";\nimport { resolveNode, type RichStr } from \"../Text/richstr\";\n\nexport type BannerTone = \"info\" | \"success\" | \"warning\" | \"error\" | \"promo\";\n\nexport interface BannerProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\" | \"children\"> {\n tone?: BannerTone;\n title?: ReactNode | RichStr;\n children?: ReactNode | RichStr;\n icon?: ReactNode;\n actions?: ReactNode;\n onDismiss?: () => void;\n dismissLabel?: string;\n role?: \"status\" | \"alert\";\n /**\n * When true, the banner is announced assertively (`role=\"alert\"`).\n * Defaults to false. `tone=\"error\"` also forces `role=\"alert\"` unless\n * the caller explicitly overrides via `role`.\n */\n urgent?: boolean;\n}\n\nconst DefaultIcons: Record<BannerTone, ReactNode> = {\n info: (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.8}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"M12 8v4M12 16h.01\" />\n </svg>\n ),\n warning: (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.8}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M10.3 3.86l-8.4 14a2 2 0 001.7 3h16.8a2 2 0 001.7-3l-8.4-14a2 2 0 00-3.4 0z\" />\n <path d=\"M12 9v4M12 17h.01\" />\n </svg>\n ),\n error: (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.8}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"M15 9l-6 6M9 9l6 6\" />\n </svg>\n ),\n success: (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.8}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"M8.5 12.5l2.5 2.5 4.5-5\" />\n </svg>\n ),\n promo: (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.8}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M12 2l2 7h7l-5.5 4 2 7L12 16l-5.5 4 2-7L3 9h7z\" />\n </svg>\n ),\n};\n\nexport const Banner = forwardRef<HTMLDivElement, BannerProps>(function Banner(\n {\n tone = \"info\",\n title,\n children,\n icon,\n actions,\n onDismiss,\n dismissLabel = \"Dismiss\",\n role,\n urgent = false,\n className,\n ...rest\n },\n ref,\n) {\n const resolvedRole = role ?? (urgent || tone === \"error\" ? \"alert\" : \"status\");\n return (\n <div\n ref={ref}\n role={resolvedRole}\n className={[styles.root, styles[`tone-${tone}`], className].filter(Boolean).join(\" \")}\n {...rest}\n >\n <span className={styles.lead} aria-hidden=\"true\">\n {icon ?? DefaultIcons[tone]}\n </span>\n <span className={styles.text}>\n {title ? <span className={styles.title}>{resolveNode(title)}</span> : null}\n {resolveNode(children)}\n </span>\n {actions ? <div className={styles.actions}>{actions}</div> : null}\n {onDismiss ? (\n <button\n type=\"button\"\n className={styles.close}\n onClick={onDismiss}\n aria-label={dismissLabel}\n >\n ×\n </button>\n ) : null}\n </div>\n );\n});\n","import { forwardRef, type CSSProperties, type HTMLAttributes } from \"react\";\nimport styles from \"./Skeleton.module.css\";\n\nexport type SkeletonVariant = \"block\" | \"text\" | \"circle\";\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {\n variant?: SkeletonVariant;\n width?: number | string;\n height?: number | string;\n radius?: number | string;\n}\n\nexport const Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(function Skeleton(\n { variant = \"block\", width, height, radius, className, style, ...rest },\n ref,\n) {\n const inline: CSSProperties = { ...style };\n if (width !== undefined) inline.width = typeof width === \"number\" ? `${width}px` : width;\n if (height !== undefined) inline.height = typeof height === \"number\" ? `${height}px` : height;\n if (radius !== undefined) inline.borderRadius = typeof radius === \"number\" ? `${radius}px` : radius;\n return (\n <div\n ref={ref}\n aria-hidden=\"true\"\n className={[styles.root, styles[`variant-${variant}`], className].filter(Boolean).join(\" \")}\n style={inline}\n {...rest}\n />\n );\n});\n","import { forwardRef, type CSSProperties, type HTMLAttributes } from \"react\";\nimport styles from \"./Progress.module.css\";\n\nexport type ProgressSize = \"sm\" | \"md\" | \"lg\";\nexport type ProgressTone = \"brand\" | \"success\" | \"warning\" | \"danger\" | \"neutral\";\n\nexport interface ProgressProps extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n /** 0-100. Omit for indeterminate. */\n value?: number;\n size?: ProgressSize;\n tone?: ProgressTone;\n label?: string;\n showValue?: boolean;\n /** Accessibility label when no visible label is rendered. */\n \"aria-label\"?: string;\n}\n\nfunction clamp(n: number) {\n if (Number.isNaN(n)) return 0;\n if (n < 0) return 0;\n if (n > 100) return 100;\n return n;\n}\n\nexport const Progress = forwardRef<HTMLDivElement, ProgressProps>(function Progress(\n {\n value,\n size = \"md\",\n tone = \"brand\",\n label,\n showValue = false,\n className,\n style,\n \"aria-label\": ariaLabel,\n ...rest\n },\n ref,\n) {\n const indeterminate = value === undefined || value === null;\n const v = indeterminate ? 0 : clamp(value);\n const fillStyle: CSSProperties = indeterminate ? {} : { width: `${v}%` };\n\n return (\n <div\n ref={ref}\n className={[styles.root, className].filter(Boolean).join(\" \")}\n style={style}\n {...rest}\n >\n {(label || showValue) && (\n <div className={styles.header}>\n {label && <span className={styles.label}>{label}</span>}\n {showValue && !indeterminate && (\n <span className={styles.value}>{Math.round(v)}%</span>\n )}\n </div>\n )}\n <div\n role=\"progressbar\"\n aria-label={ariaLabel ?? label ?? \"Progress\"}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={indeterminate ? undefined : v}\n className={[\n styles.track,\n styles[`size-${size}`],\n styles[`tone-${tone}`],\n indeterminate ? styles.indeterminate : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n <div className={styles.fill} style={fillStyle} />\n </div>\n </div>\n );\n});\n","import { forwardRef, type CSSProperties, type HTMLAttributes } from \"react\";\nimport styles from \"./Spinner.module.css\";\n\nexport type SpinnerSize = \"xs\" | \"sm\" | \"md\" | \"lg\";\nexport type SpinnerTone = \"brand\" | \"neutral\" | \"inverse\";\n\nexport interface SpinnerProps extends HTMLAttributes<HTMLSpanElement> {\n size?: SpinnerSize;\n tone?: SpinnerTone;\n /** Accessible label for screen readers. Defaults to \"Loading\". */\n label?: string;\n}\n\nconst SIZE_PX: Record<SpinnerSize, number> = { xs: 12, sm: 16, md: 22, lg: 32 };\n\nexport const Spinner = forwardRef<HTMLSpanElement, SpinnerProps>(function Spinner(\n { size = \"md\", tone = \"brand\", label = \"Loading\", className, style, ...rest },\n ref,\n) {\n const px = SIZE_PX[size];\n const dim: CSSProperties = { width: px, height: px, ...style };\n return (\n <span\n ref={ref}\n role=\"status\"\n aria-live=\"polite\"\n aria-label={label}\n className={[styles.root, styles[`tone-${tone}`], className].filter(Boolean).join(\" \")}\n style={dim}\n {...rest}\n >\n <svg viewBox=\"0 0 24 24\" className={styles.svg} aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"9\" className={styles.track} />\n <circle cx=\"12\" cy=\"12\" r=\"9\" className={styles.arc} />\n </svg>\n <span className={styles.sr}>{label}</span>\n </span>\n );\n});\n","import { forwardRef, useId, type TextareaHTMLAttributes } from \"react\";\nimport styles from \"./Textarea.module.css\";\n\nexport type TextareaResize = \"none\" | \"vertical\" | \"horizontal\" | \"both\";\n\nexport interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n label?: string;\n hint?: string;\n error?: string;\n resize?: TextareaResize;\n /** Visual character count footer. Reflects `value.length` if controlled, else `defaultValue.length`. */\n showCount?: boolean;\n}\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea(\n {\n label,\n hint,\n error,\n resize = \"vertical\",\n showCount,\n maxLength,\n id,\n className,\n required,\n rows = 4,\n value,\n defaultValue,\n ...rest\n },\n ref,\n) {\n const autoId = useId();\n const taId = id ?? autoId;\n const hintId = `${taId}-hint`;\n const errorId = `${taId}-error`;\n const countId = `${taId}-count`;\n const describedBy =\n [error ? errorId : null, hint && !error ? hintId : null, showCount ? countId : null]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n const length =\n typeof value === \"string\"\n ? value.length\n : typeof defaultValue === \"string\"\n ? defaultValue.length\n : 0;\n\n return (\n <div className={[styles.wrapper, className].filter(Boolean).join(\" \")}>\n {label ? (\n <label htmlFor={taId} className={styles.label}>\n {label}\n </label>\n ) : null}\n <div className={[styles.field, error ? styles[\"field-error\"] : null].filter(Boolean).join(\" \")}>\n <textarea\n ref={ref}\n id={taId}\n rows={rows}\n maxLength={maxLength}\n value={value}\n defaultValue={defaultValue}\n className={styles.textarea}\n style={{ resize }}\n aria-invalid={error ? true : undefined}\n aria-describedby={describedBy}\n required={required}\n {...rest}\n />\n </div>\n <div className={styles.footer}>\n {error ? (\n <span id={errorId} className={styles.error}>\n {error}\n </span>\n ) : hint ? (\n <span id={hintId} className={styles.hint}>\n {hint}\n </span>\n ) : (\n <span />\n )}\n {showCount ? (\n <span id={countId} className={styles.count}>\n {length}\n {maxLength ? ` / ${maxLength}` : \"\"}\n </span>\n ) : null}\n </div>\n </div>\n );\n});\n","import { forwardRef, type HTMLAttributes } from \"react\";\nimport styles from \"./TokenCounter.module.css\";\n\nexport type TokenCounterTone = \"neutral\" | \"ok\" | \"warn\" | \"danger\";\n\nexport interface TokenCounterProps extends HTMLAttributes<HTMLSpanElement> {\n used: number;\n limit?: number;\n /** Optional explicit tone override. If omitted, tone derives from used/limit ratio. */\n tone?: TokenCounterTone;\n /** Label prefix, e.g. \"tokens\", \"ctx\". Default: \"tokens\". */\n unit?: string;\n /** Show only the ratio bar without the numbers. */\n barOnly?: boolean;\n}\n\nfunction format(n: number): string {\n if (n >= 1_000_000) return `${(n / 1_000_000).toFixed(1).replace(/\\.0$/, \"\")}M`;\n if (n >= 1_000) return `${(n / 1_000).toFixed(1).replace(/\\.0$/, \"\")}k`;\n return n.toLocaleString();\n}\n\nfunction deriveTone(used: number, limit?: number): TokenCounterTone {\n if (!limit) return \"neutral\";\n const r = used / limit;\n if (r >= 1) return \"danger\";\n if (r >= 0.85) return \"warn\";\n if (r >= 0.6) return \"ok\";\n return \"neutral\";\n}\n\nexport const TokenCounter = forwardRef<HTMLSpanElement, TokenCounterProps>(\n function TokenCounter(\n { used, limit, tone, unit = \"tokens\", barOnly, className, ...rest },\n ref,\n ) {\n const finalTone = tone ?? deriveTone(used, limit);\n const ratio = limit ? Math.min(1, used / limit) : 0;\n const ariaLabel = limit\n ? `${used} of ${limit} ${unit} used`\n : `${used} ${unit}`;\n return (\n <span\n ref={ref}\n role=\"status\"\n aria-label={ariaLabel}\n className={[\n styles.root,\n styles[`tone-${finalTone}`],\n barOnly ? styles.barOnly : null,\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n {...rest}\n >\n {!barOnly && (\n <span className={styles.text}>\n <span className={styles.used}>{format(used)}</span>\n {limit ? (\n <>\n <span className={styles.sep}>/</span>\n <span className={styles.limit}>{format(limit)}</span>\n </>\n ) : null}\n <span className={styles.unit}>{unit}</span>\n </span>\n )}\n {limit ? (\n <span className={styles.bar} aria-hidden=\"true\">\n <span className={styles.fill} style={{ width: `${ratio * 100}%` }} />\n </span>\n ) : null}\n </span>\n );\n },\n);\n","import \"./interactive-buttons.css\";\nimport type { ComponentType, ReactNode, SVGProps } from \"react\";\nimport SvgChevronDownSmall from \"../icons/ChevronDownSmall\";\nimport { Tooltip, TooltipProvider } from \"../components/Tooltip/Tooltip\";\nimport { resolveStr, type RichStr } from \"../components/Text/richstr\";\n\n/** An icon component from `src/icons` (1em-sized SVG driven by font-size). */\nexport type IconComponent = ComponentType<SVGProps<SVGSVGElement>>;\n\nexport type InteractiveButtonSize = \"lg\" | \"md\" | \"sm\" | \"xs\" | \"2xs\" | \"fit\";\n\nconst ICON_SIZE: Record<InteractiveButtonSize, { padding: string; rem: number }> = {\n lg: { padding: \"2px\", rem: 1 },\n md: { padding: \"2px\", rem: 1 },\n sm: { padding: \"0\", rem: 1 },\n xs: { padding: \"2px\", rem: 0.75 },\n \"2xs\": { padding: \"0\", rem: 0.75 },\n fit: { padding: \"2px\", rem: 1 },\n};\n\n/**\n * Renders an icon inside the `interactive-foreground-icon` wrapper so it\n * reads the Interactive color matrix's icon foreground. Returns an empty\n * spacer when no icon is given but column alignment is wanted.\n */\nexport function iconSlot(\n Icon: IconComponent | undefined,\n size: InteractiveButtonSize,\n includeSpacer: boolean,\n): ReactNode {\n const { padding, rem } = ICON_SIZE[size];\n if (Icon) {\n return (\n <span className=\"interactive-foreground-icon sds-icon-slot\" style={{ padding }}>\n <Icon style={{ width: `${rem}rem`, height: `${rem}rem`, flexShrink: 0 }} />\n </span>\n );\n }\n return includeSpacer ? <span /> : null;\n}\n\n/**\n * Chevron that rotates 180 degrees while the parent `.interactive` is in\n * hover or active state. Shared dropdown indicator for OpenButton and\n * FilterButton.\n */\nexport function ChevronIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <SvgChevronDownSmall\n {...props}\n className={[\"sds-button-chevron\", props.className].filter(Boolean).join(\" \")}\n />\n );\n}\n\n/**\n * Wraps an element in a self-providing Tooltip when `tooltip` is set;\n * passes the element through untouched otherwise.\n */\nexport function withTooltip(\n element: ReactNode,\n tooltip: string | RichStr | undefined,\n side: \"top\" | \"right\" | \"bottom\" | \"left\",\n): ReactNode {\n if (tooltip === undefined) return element;\n return (\n <TooltipProvider>\n <Tooltip content={typeof tooltip === \"string\" ? tooltip : resolveStr(tooltip)} side={side}>\n {element}\n </Tooltip>\n </TooltipProvider>\n );\n}\n","import { forwardRef, useState, type HTMLAttributes } from \"react\";\nimport styles from \"./FeedbackThumbs.module.css\";\nimport { withTooltip } from \"../../internal/interactive-buttons\";\nimport type { RichStr } from \"../Text/richstr\";\n\nexport type FeedbackValue = \"up\" | \"down\" | null;\n\n/**\n * Per-thumb tooltip content. A `string`/`RichStr` shows the same hint\n * regardless of state; a function receives whether that thumb is currently\n * active so consumers can swap copy (e.g. \"Good response\" → \"Remove like\").\n * Returning `undefined` shows no tooltip for that state.\n */\nexport type FeedbackThumbTooltip =\n | string\n | RichStr\n | ((active: boolean) => string | RichStr | undefined);\n\nexport interface FeedbackThumbsProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\" | \"defaultValue\"> {\n value?: FeedbackValue;\n defaultValue?: FeedbackValue;\n onChange?: (next: FeedbackValue) => void;\n /** Accessible label for the control group. */\n label?: string;\n size?: \"sm\" | \"md\";\n disabled?: boolean;\n /** Hover tooltip for the thumbs-up control. State-aware via a callback. */\n upTooltip?: FeedbackThumbTooltip;\n /** Hover tooltip for the thumbs-down control. State-aware via a callback. */\n downTooltip?: FeedbackThumbTooltip;\n /** Side the tooltips open on. Defaults to `\"top\"`. */\n tooltipSide?: \"top\" | \"right\" | \"bottom\" | \"left\";\n}\n\nconst resolveTooltip = (\n tip: FeedbackThumbTooltip | undefined,\n active: boolean,\n): string | RichStr | undefined => (typeof tip === \"function\" ? tip(active) : tip);\n\nconst UpIcon = ({ size = 16 }: { size?: number }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.6} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M7 22V11M2 13v7a2 2 0 0 0 2 2h3M22 11.5a3 3 0 0 0-3-3h-4l1.4-5.4a1 1 0 0 0-1-1.2l-.9.1a1 1 0 0 0-.8.6L7 11v11h11.3a2 2 0 0 0 2-1.7l1.7-7.8Z\" />\n </svg>\n);\n\nconst DownIcon = ({ size = 16 }: { size?: number }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.6} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M17 2v11M22 11V4a2 2 0 0 0-2-2h-3M2 12.5a3 3 0 0 0 3 3h4l-1.4 5.4a1 1 0 0 0 1 1.2l.9-.1a1 1 0 0 0 .8-.6L17 13V2H5.7a2 2 0 0 0-2 1.7L2 11.5Z\" />\n </svg>\n);\n\nexport const FeedbackThumbs = forwardRef<HTMLDivElement, FeedbackThumbsProps>(\n function FeedbackThumbs(\n {\n value,\n defaultValue = null,\n onChange,\n label = \"Rate this response\",\n size = \"md\",\n disabled,\n upTooltip,\n downTooltip,\n tooltipSide = \"top\",\n className,\n ...rest\n },\n ref,\n ) {\n const controlled = value !== undefined;\n const [internal, setInternal] = useState<FeedbackValue>(defaultValue);\n const current = controlled ? value : internal;\n\n const set = (next: FeedbackValue) => {\n const v = current === next ? null : next;\n if (!controlled) setInternal(v);\n onChange?.(v);\n };\n\n const px = size === \"sm\" ? 14 : 16;\n\n const upButton = (\n <button\n type=\"button\"\n className={[styles.btn, current === \"up\" ? styles.active : null].filter(Boolean).join(\" \")}\n aria-pressed={current === \"up\"}\n aria-label=\"Helpful\"\n onClick={() => set(\"up\")}\n disabled={disabled}\n >\n <UpIcon size={px} />\n </button>\n );\n\n const downButton = (\n <button\n type=\"button\"\n className={[styles.btn, current === \"down\" ? styles.activeDown : null]\n .filter(Boolean)\n .join(\" \")}\n aria-pressed={current === \"down\"}\n aria-label=\"Not helpful\"\n onClick={() => set(\"down\")}\n disabled={disabled}\n >\n <DownIcon size={px} />\n </button>\n );\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-label={label}\n className={[styles.root, styles[`size-${size}`], className].filter(Boolean).join(\" \")}\n {...rest}\n >\n {withTooltip(upButton, resolveTooltip(upTooltip, current === \"up\"), tooltipSide)}\n {withTooltip(downButton, resolveTooltip(downTooltip, current === \"down\"), tooltipSide)}\n </div>\n );\n },\n);\n","import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from \"react\";\nimport styles from \"./RegenerateButton.module.css\";\n\nexport interface RegenerateButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Show spinning icon. */\n busy?: boolean;\n /** Optional override of the default label. */\n label?: string;\n /** Icon override; defaults to refresh arrow. */\n icon?: ReactNode;\n}\n\nconst RefreshIcon = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.6} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M21 12a9 9 0 0 1-15.4 6.36L3 21\" />\n <path d=\"M3 12a9 9 0 0 1 15.4-6.36L21 3\" />\n <path d=\"M21 3v6h-6\" />\n <path d=\"M3 21v-6h6\" />\n </svg>\n);\n\nexport const RegenerateButton = forwardRef<HTMLButtonElement, RegenerateButtonProps>(\n function RegenerateButton(\n { busy, label = \"Regenerate\", icon, disabled, className, children, ...rest },\n ref,\n ) {\n return (\n <button\n ref={ref}\n type=\"button\"\n className={[styles.root, busy ? styles.busy : null, className].filter(Boolean).join(\" \")}\n disabled={disabled || busy}\n aria-busy={busy || undefined}\n aria-label={label}\n {...rest}\n >\n <span className={styles.icon} aria-hidden=\"true\">\n {icon ?? <RefreshIcon />}\n </span>\n {children ?? label}\n </button>\n );\n },\n);\n","import { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport styles from \"./ContextChip.module.css\";\n\nexport type ContextChipKind =\n | \"file\"\n | \"mention\"\n | \"citation\"\n | \"agent\"\n | \"search\"\n | \"tag\";\n\nexport interface ContextChipProps extends Omit<HTMLAttributes<HTMLSpanElement>, \"onRemove\"> {\n kind?: ContextChipKind;\n icon?: ReactNode;\n /** Optional small meta string rendered after the label (e.g. file size, page number). */\n meta?: string;\n /** Render a remove (×) button. Fires onRemove on click. */\n onRemove?: () => void;\n /** Click handler turns the chip into a button. */\n onClick?: () => void;\n removeLabel?: string;\n}\n\nconst KIND_ICON: Record<ContextChipKind, ReactNode> = {\n file: (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.6} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n </svg>\n ),\n mention: (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.6} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\n <path d=\"M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-4 8\" />\n </svg>\n ),\n citation: (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.6} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M7 7h4v4H7zM7 13h4M13 7h4v4h-4zM13 13h4\" />\n </svg>\n ),\n agent: (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.6} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <rect x=\"5\" y=\"7\" width=\"14\" height=\"12\" rx=\"2\" />\n <path d=\"M12 3v4M8 13h.01M16 13h.01\" />\n </svg>\n ),\n search: (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.6} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <circle cx=\"11\" cy=\"11\" r=\"7\" />\n <path d=\"M21 21l-4.3-4.3\" />\n </svg>\n ),\n tag: (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.6} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M20.59 13.41L13 21l-9-9V4h8l8.59 8.59a2 2 0 0 1 0 2.82Z\" />\n <circle cx=\"7.5\" cy=\"7.5\" r=\"1\" />\n </svg>\n ),\n};\n\nexport const ContextChip = forwardRef<HTMLSpanElement, ContextChipProps>(function ContextChip(\n { kind = \"file\", icon, meta, onRemove, onClick, removeLabel = \"Remove\", className, children, ...rest },\n ref,\n) {\n const interactive = !!onClick;\n return (\n <span\n ref={ref}\n role={interactive ? \"button\" : undefined}\n tabIndex={interactive ? 0 : undefined}\n onClick={onClick}\n onKeyDown={\n interactive\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick?.();\n }\n }\n : undefined\n }\n className={[\n styles.root,\n styles[`kind-${kind}`],\n interactive ? styles.interactive : null,\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n {...rest}\n >\n <span className={styles.icon} aria-hidden=\"true\">\n {icon ?? KIND_ICON[kind]}\n </span>\n <span className={styles.label}>{children}</span>\n {meta ? <span className={styles.meta}>{meta}</span> : null}\n {onRemove ? (\n <button\n type=\"button\"\n className={styles.remove}\n aria-label={removeLabel}\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n >\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n ) : null}\n </span>\n );\n});\n","import { forwardRef, useId, useState, type HTMLAttributes, type ReactNode } from \"react\";\nimport styles from \"./ThoughtBubble.module.css\";\n\nexport interface ThoughtBubbleProps extends HTMLAttributes<HTMLDivElement> {\n /** Header label. Default: \"Reasoning\". */\n label?: string;\n /** Optional duration shown next to the header (e.g. \"1.4s\"). */\n duration?: string;\n /** Render expanded on mount. */\n defaultOpen?: boolean;\n /** Controlled open state. */\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /** Streaming flag — adds an animated caret next to the label. */\n streaming?: boolean;\n children: ReactNode;\n}\n\nconst ChevronIcon = ({ open }: { open: boolean }) => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.6}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n style={{ transform: open ? \"rotate(90deg)\" : \"rotate(0deg)\", transition: \"transform 120ms ease-out\" }}\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n);\n\nconst BrainIcon = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M9.5 2A2.5 2.5 0 0 0 7 4.5v.04a4 4 0 0 0-2 6.92A4 4 0 0 0 7 18.5V19a3 3 0 0 0 5 2.24V2Z\" />\n <path d=\"M14.5 2a2.5 2.5 0 0 1 2.5 2.5v.04a4 4 0 0 1 2 6.92 4 4 0 0 1-2 7.04V19a3 3 0 0 1-5 2.24V2Z\" />\n </svg>\n);\n\nexport const ThoughtBubble = forwardRef<HTMLDivElement, ThoughtBubbleProps>(function ThoughtBubble(\n {\n label = \"Reasoning\",\n duration,\n defaultOpen = false,\n open,\n onOpenChange,\n streaming,\n className,\n children,\n ...rest\n },\n ref,\n) {\n const controlled = open !== undefined;\n const [internal, setInternal] = useState(defaultOpen);\n const isOpen = controlled ? !!open : internal;\n const setOpen = (next: boolean) => {\n if (!controlled) setInternal(next);\n onOpenChange?.(next);\n };\n const bodyId = useId();\n\n return (\n <div\n ref={ref}\n className={[styles.root, isOpen ? styles.open : null, className].filter(Boolean).join(\" \")}\n {...rest}\n >\n <button\n type=\"button\"\n className={styles.header}\n aria-expanded={isOpen}\n aria-controls={bodyId}\n onClick={() => setOpen(!isOpen)}\n >\n <span className={styles.icon} aria-hidden=\"true\"><BrainIcon /></span>\n <span className={styles.label}>{label}</span>\n {streaming ? <span className={styles.caret} aria-hidden=\"true\" /> : null}\n {duration ? <span className={styles.duration}>{duration}</span> : null}\n <span className={styles.chev} aria-hidden=\"true\"><ChevronIcon open={isOpen} /></span>\n </button>\n <div id={bodyId} className={styles.body} hidden={!isOpen}>\n {children}\n </div>\n </div>\n );\n});\n","import {\n forwardRef,\n useId,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport styles from \"./ToolCallCard.module.css\";\n\nexport type ToolCallStatus = \"pending\" | \"running\" | \"success\" | \"error\";\n\nexport interface ToolCallCardProps extends HTMLAttributes<HTMLDivElement> {\n name: string;\n status?: ToolCallStatus;\n /** Compact one-line summary shown next to the tool name. */\n summary?: string;\n /** Duration label (e.g. \"0.8s\"). */\n duration?: string;\n /** JSON-serializable input arguments. Rendered as collapsed JSON tree. */\n args?: unknown;\n /** Output payload (JSON or string). */\n output?: ReactNode;\n /** Default to expanded. */\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n onRetry?: () => void;\n}\n\nfunction formatJson(v: unknown): string {\n try {\n return JSON.stringify(v, null, 2);\n } catch {\n return String(v);\n }\n}\n\nconst ChevronIcon = ({ open }: { open: boolean }) => (\n <svg\n width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n strokeWidth={1.6} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\"\n style={{ transform: open ? \"rotate(90deg)\" : \"rotate(0deg)\", transition: \"transform 120ms ease-out\" }}\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n);\n\nconst ToolIcon = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.6} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M14.7 6.3a4 4 0 1 0 4.55 6.35l-7.4 7.4a2 2 0 0 1-2.83-2.83l7.41-7.4a4 4 0 0 0-1.73-3.52Z\" />\n <path d=\"M4 4l4 4\" />\n </svg>\n);\n\nconst STATUS_LABEL: Record<ToolCallStatus, string> = {\n pending: \"Pending\",\n running: \"Running\",\n success: \"Complete\",\n error: \"Error\",\n};\n\nexport const ToolCallCard = forwardRef<HTMLDivElement, ToolCallCardProps>(function ToolCallCard(\n {\n name,\n status = \"success\",\n summary,\n duration,\n args,\n output,\n defaultOpen = false,\n open,\n onOpenChange,\n onRetry,\n className,\n children,\n ...rest\n },\n ref,\n) {\n const controlled = open !== undefined;\n const [internal, setInternal] = useState(defaultOpen);\n const isOpen = controlled ? !!open : internal;\n const setOpen = (next: boolean) => {\n if (!controlled) setInternal(next);\n onOpenChange?.(next);\n };\n const bodyId = useId();\n\n return (\n <div\n ref={ref}\n className={[styles.root, styles[`status-${status}`], className].filter(Boolean).join(\" \")}\n {...rest}\n >\n <button\n type=\"button\"\n className={styles.header}\n aria-expanded={isOpen}\n aria-controls={bodyId}\n onClick={() => setOpen(!isOpen)}\n >\n <span className={styles.icon} aria-hidden=\"true\"><ToolIcon /></span>\n <span className={styles.name}>{name}</span>\n {summary ? <span className={styles.summary}>{summary}</span> : null}\n <span className={styles.right}>\n <span className={[styles.status, styles[`status-pill-${status}`]].join(\" \")}>\n <span className={styles.dot} aria-hidden=\"true\" />\n {STATUS_LABEL[status]}\n </span>\n {duration ? <span className={styles.duration}>{duration}</span> : null}\n <span className={styles.chev} aria-hidden=\"true\"><ChevronIcon open={isOpen} /></span>\n </span>\n </button>\n <div id={bodyId} className={styles.body} hidden={!isOpen}>\n {args !== undefined ? (\n <div className={styles.section}>\n <div className={styles.sectionLabel}>arguments</div>\n <pre className={styles.code}>{formatJson(args)}</pre>\n </div>\n ) : null}\n {output !== undefined ? (\n <div className={styles.section}>\n <div className={styles.sectionLabel}>output</div>\n {typeof output === \"string\" ? (\n <pre className={styles.code}>{output}</pre>\n ) : (\n <div className={styles.output}>{output}</div>\n )}\n </div>\n ) : null}\n {children}\n {status === \"error\" && onRetry ? (\n <div className={styles.actions}>\n <button type=\"button\" className={styles.retry} onClick={onRetry}>\n Retry\n </button>\n </div>\n ) : null}\n </div>\n </div>\n );\n});\n","import {\n forwardRef,\n useEffect,\n useRef,\n useState,\n type KeyboardEvent,\n type ReactNode,\n type TextareaHTMLAttributes,\n} from \"react\";\nimport styles from \"./Composer.module.css\";\n\nexport interface ComposerProps\n extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, \"onChange\" | \"onSubmit\" | \"value\"> {\n value?: string;\n defaultValue?: string;\n onChange?: (next: string) => void;\n onSubmit?: (text: string) => void;\n /** Render submit-disabled state and a spinner on the send button. */\n busy?: boolean;\n /** Text shown on the send button. Default: \"Send\". */\n sendLabel?: string;\n /** Replace the default send icon (paper-plane arrow). */\n sendIcon?: ReactNode;\n /** Top slot — attachment chips, citations, etc. */\n attachments?: ReactNode;\n /** Left toolbar slot — attach button, slash menu trigger, model picker. */\n leadingActions?: ReactNode;\n /** Right footer slot — token counter, helper text. */\n trailingMeta?: ReactNode;\n /** Greek-friendly placeholder. */\n placeholder?: string;\n /** Max visual rows before scroll. Default 12. */\n maxRows?: number;\n /** Submit on plain Enter (Shift+Enter for newline). Default true. */\n submitOnEnter?: boolean;\n}\n\nconst SendIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2.75} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M5 12h14M13 5l7 7-7 7\" />\n </svg>\n);\n\nexport const Composer = forwardRef<HTMLTextAreaElement, ComposerProps>(function Composer(\n {\n value,\n defaultValue,\n onChange,\n onSubmit,\n busy,\n sendLabel = \"Send\",\n sendIcon,\n attachments,\n leadingActions,\n trailingMeta,\n placeholder = \"Ask anything…\",\n maxRows = 12,\n submitOnEnter = true,\n rows = 1,\n className,\n disabled,\n ...rest\n },\n ref,\n) {\n const controlled = value !== undefined;\n const [internal, setInternal] = useState(defaultValue ?? \"\");\n const text = controlled ? (value as string) : internal;\n const taRef = useRef<HTMLTextAreaElement | null>(null);\n\n const setText = (next: string) => {\n if (!controlled) setInternal(next);\n onChange?.(next);\n };\n\n // Auto-grow up to maxRows lines.\n useEffect(() => {\n const el = taRef.current;\n if (!el) return;\n el.style.height = \"auto\";\n const lineHeight = parseFloat(getComputedStyle(el).lineHeight || \"20\") || 20;\n const max = lineHeight * maxRows;\n el.style.height = `${Math.min(el.scrollHeight, max)}px`;\n el.style.overflowY = el.scrollHeight > max ? \"auto\" : \"hidden\";\n }, [text, maxRows]);\n\n const submit = () => {\n const trimmed = text.trim();\n if (!trimmed || busy || disabled) return;\n onSubmit?.(trimmed);\n if (!controlled) setInternal(\"\");\n };\n\n const onKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n if (submitOnEnter && e.key === \"Enter\" && !e.shiftKey && !e.nativeEvent.isComposing) {\n e.preventDefault();\n submit();\n }\n rest.onKeyDown?.(e);\n };\n\n const canSend = !!text.trim() && !busy && !disabled;\n\n return (\n <form\n className={[styles.root, className].filter(Boolean).join(\" \")}\n onSubmit={(e) => {\n e.preventDefault();\n submit();\n }}\n >\n {attachments ? <div className={styles.attachments}>{attachments}</div> : null}\n <div className={[styles.shell, disabled ? styles.disabled : null].filter(Boolean).join(\" \")}>\n <textarea\n ref={(el) => {\n taRef.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) (ref as { current: HTMLTextAreaElement | null }).current = el;\n }}\n rows={rows}\n className={styles.textarea}\n placeholder={placeholder}\n value={text}\n onChange={(e) => setText(e.target.value)}\n onKeyDown={onKeyDown}\n disabled={disabled || busy}\n {...rest}\n />\n <div className={styles.footer}>\n <div className={styles.leading}>{leadingActions}</div>\n <div className={styles.trailing}>\n {trailingMeta ? <span className={styles.meta}>{trailingMeta}</span> : null}\n <button\n type=\"submit\"\n className={styles.send}\n disabled={!canSend}\n aria-label={sendLabel}\n aria-busy={busy || undefined}\n >\n {busy ? (\n <span className={styles.spinner} aria-hidden=\"true\" />\n ) : (\n <span className={styles.sendIcon}>{sendIcon ?? <SendIcon />}</span>\n )}\n <span className={styles.sendLabel}>{sendLabel}</span>\n </button>\n </div>\n </div>\n </div>\n </form>\n );\n});\n","import {\n forwardRef,\n type ButtonHTMLAttributes,\n type KeyboardEvent,\n type MouseEvent,\n type ReactNode,\n} from \"react\";\nimport styles from \"./ComposerChip.module.css\";\nimport SvgX from \"../../icons/X\";\nimport { withTooltip } from \"../../internal/interactive-buttons\";\nimport type { RichStr } from \"../Text/richstr\";\n\nexport interface ComposerChipProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> {\n /** Leading icon node. */\n icon?: ReactNode;\n /**\n * Status dot rendered before the label. Pass a CSS color (e.g. a token var\n * or hex) to show a small glowing indicator — used for model/status chips.\n */\n dot?: string;\n /**\n * Show a trailing chevron, signalling the chip opens a menu. Renders\n * independently — it coexists with {@link onRemove} / {@link trailing} /\n * {@link trailingActions} (caret first, interactive affordance after), so a\n * chip can show both a dropdown caret and a clear-X.\n */\n caret?: boolean;\n /** Selected/active styling. */\n active?: boolean;\n /**\n * When set, render a trailing remove control (an X) with its own click\n * target. Clicking (or activating via keyboard) it calls `onRemove` and does\n * NOT trigger the chip's primary `onClick`. Sugar over {@link trailing}.\n */\n onRemove?: () => void;\n /** Accessible name for the remove control. Defaults to `\"Remove\"`. */\n removeLabel?: string;\n /**\n * Generic trailing slot rendered after the label (and after the caret).\n * Clicks within it do not fire the chip's `onClick`. When `onRemove` is also\n * set, `onRemove` wins for this slot.\n */\n trailing?: ReactNode;\n /**\n * Extra interactive controls rendered at the chip's trailing edge, after the\n * caret and the remove/trailing affordance. Clicks within it do not fire the\n * chip's primary `onClick`. Use for secondary per-chip actions alongside a\n * caret and/or clear-X. Render `role=\"button\"` spans here, never a nested\n * `<button>` (the chip root is itself a `<button>`).\n */\n trailingActions?: ReactNode;\n /**\n * When set, wraps the chip in the DS Tooltip. Supports inline markdown via\n * `markdown()`. When `undefined`, the chip renders bare (no wrapper).\n */\n tooltip?: string | RichStr;\n /** Side the tooltip opens on. Defaults to `\"top\"`. */\n tooltipSide?: \"top\" | \"right\" | \"bottom\" | \"left\";\n children?: ReactNode;\n}\n\nconst Caret = () => (\n <svg\n className={styles.caret}\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n);\n\n/**\n * Pill-shaped action chip for the {@link Composer} toolbar (`leadingActions`\n * slot) — model pickers, source-scope filters, language toggles. Replaces the\n * ad-hoc inline-styled buttons chat surfaces used to hand-roll.\n *\n * The chip root is a `<button>`; any interactive trailing affordance is a\n * sibling `role=\"button\"` overlay (never a descendant `<button>`) to keep the\n * DOM free of nested interactive elements.\n */\nexport const ComposerChip = forwardRef<HTMLButtonElement, ComposerChipProps>(\n function ComposerChip(\n {\n icon,\n dot,\n caret = false,\n active = false,\n onRemove,\n removeLabel = \"Remove\",\n trailing,\n trailingActions,\n tooltip,\n tooltipSide = \"top\",\n children,\n className,\n type = \"button\",\n ...rest\n },\n ref,\n ) {\n const classes = [styles.chip, active ? styles.active : null, className]\n .filter(Boolean)\n .join(\" \");\n\n // The caret is decorative and renders independently. The interactive\n // affordance (onRemove's X, else the generic `trailing` slot) renders\n // after it, then any `trailingActions`. So caret + clear-X can coexist.\n let affordanceNode: ReactNode = null;\n if (onRemove) {\n const fire = () => onRemove();\n const onKeyDown = (e: KeyboardEvent<HTMLSpanElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n e.stopPropagation();\n fire();\n }\n };\n const onClick = (e: MouseEvent<HTMLSpanElement>) => {\n e.stopPropagation();\n fire();\n };\n affordanceNode = (\n <span\n className={styles.remove}\n role=\"button\"\n tabIndex={0}\n aria-label={removeLabel}\n onClick={onClick}\n onKeyDown={onKeyDown}\n >\n <SvgX aria-hidden=\"true\" />\n </span>\n );\n } else if (trailing != null) {\n affordanceNode = (\n <span className={styles.trailing} onClick={(e) => e.stopPropagation()} role=\"presentation\">\n {trailing}\n </span>\n );\n }\n\n const trailingNode = (\n <>\n {caret ? <Caret /> : null}\n {affordanceNode}\n {trailingActions != null ? (\n <span className={styles.trailing} onClick={(e) => e.stopPropagation()} role=\"presentation\">\n {trailingActions}\n </span>\n ) : null}\n </>\n );\n\n const chip = (\n // eslint-disable-next-line react/button-has-type -- `type` defaults to \"button\", overridable via prop\n <button ref={ref} type={type} className={classes} {...rest}>\n {dot ? (\n <span\n className={styles.dot}\n aria-hidden=\"true\"\n style={{ background: dot, boxShadow: `0 0 6px ${dot}` }}\n />\n ) : null}\n {icon ? (\n <span className={styles.icon} aria-hidden=\"true\">\n {icon}\n </span>\n ) : null}\n {children != null ? <span className={styles.label}>{children}</span> : null}\n {trailingNode}\n </button>\n );\n\n return <>{withTooltip(chip, tooltip, tooltipSide)}</>;\n },\n);\n","import { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport styles from \"./KeyboardKey.module.css\";\n\nexport type KeyboardKeySize = \"sm\" | \"md\";\n\nexport interface KeyboardKeyProps extends HTMLAttributes<HTMLElement> {\n size?: KeyboardKeySize;\n children: ReactNode;\n}\n\nexport const KeyboardKey = forwardRef<HTMLElement, KeyboardKeyProps>(function KeyboardKey(\n { size = \"sm\", className, children, ...rest },\n ref,\n) {\n return (\n <kbd\n ref={ref as never}\n className={[styles.root, styles[`size-${size}`], className].filter(Boolean).join(\" \")}\n {...rest}\n >\n {children}\n </kbd>\n );\n});\n\nexport interface KeyboardShortcutProps extends HTMLAttributes<HTMLSpanElement> {\n keys: ReactNode[];\n separator?: ReactNode;\n size?: KeyboardKeySize;\n}\n\nexport const KeyboardShortcut = forwardRef<HTMLSpanElement, KeyboardShortcutProps>(\n function KeyboardShortcut({ keys, separator = \"+\", size = \"sm\", className, ...rest }, ref) {\n return (\n <span\n ref={ref}\n className={[styles.shortcut, className].filter(Boolean).join(\" \")}\n {...rest}\n >\n {keys.map((k, i) => (\n <span key={i} className={styles.shortcutItem}>\n {i > 0 ? <span className={styles.sep}>{separator}</span> : null}\n <KeyboardKey size={size}>{k}</KeyboardKey>\n </span>\n ))}\n </span>\n );\n },\n);\n","import * as RT from \"@radix-ui/react-toggle-group\";\nimport { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from \"react\";\nimport styles from \"./ToggleGroup.module.css\";\n\nexport type ToggleGroupSize = \"sm\" | \"md\";\n\ntype ToggleGroupRootProps = ComponentPropsWithoutRef<typeof RT.Root>;\n\nexport type ToggleGroupSingleProps = Omit<ToggleGroupRootProps, \"size\"> & {\n size?: ToggleGroupSize;\n};\n\nexport const ToggleGroup = forwardRef<HTMLDivElement, ToggleGroupSingleProps>(\n function ToggleGroup(props, ref) {\n const {\n size = \"md\",\n className,\n ...rest\n } = props as ToggleGroupSingleProps & { className?: string };\n return (\n <RT.Root\n ref={ref}\n className={[styles.root, styles[`size-${size}`], className].filter(Boolean).join(\" \")}\n {...(rest as ToggleGroupRootProps)}\n />\n );\n },\n);\n\nexport interface ToggleGroupItemProps\n extends ComponentPropsWithoutRef<typeof RT.Item> {\n children: ReactNode;\n}\n\nexport const ToggleGroupItem = forwardRef<HTMLButtonElement, ToggleGroupItemProps>(\n function ToggleGroupItem({ className, children, ...rest }, ref) {\n return (\n <RT.Item ref={ref} className={[styles.item, className].filter(Boolean).join(\" \")} {...rest}>\n {children}\n </RT.Item>\n );\n },\n);\n","import * as RT from \"@radix-ui/react-toggle-group\";\nimport { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from \"react\";\nimport styles from \"./SegmentedControl.module.css\";\n\nexport type SegmentedSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface SegmentedOption {\n value: string;\n label: ReactNode;\n icon?: ReactNode;\n disabled?: boolean;\n}\n\nexport interface SegmentedControlProps\n extends Omit<\n ComponentPropsWithoutRef<typeof RT.Root>,\n \"type\" | \"size\" | \"value\" | \"defaultValue\" | \"onValueChange\" | \"onChange\"\n > {\n options: SegmentedOption[];\n value?: string;\n defaultValue?: string;\n onChange?: (next: string) => void;\n size?: SegmentedSize;\n fullWidth?: boolean;\n}\n\nexport const SegmentedControl = forwardRef<HTMLDivElement, SegmentedControlProps>(\n function SegmentedControl(\n { options, value, defaultValue, onChange, size = \"md\", fullWidth, className, ...rest },\n ref,\n ) {\n return (\n <RT.Root\n ref={ref}\n type=\"single\"\n value={value}\n defaultValue={defaultValue ?? options[0]?.value}\n onValueChange={(v) => v && onChange?.(v)}\n className={[\n styles.root,\n styles[`size-${size}`],\n fullWidth ? styles.fullWidth : null,\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n {...rest}\n >\n {options.map((o) => (\n <RT.Item\n key={o.value}\n value={o.value}\n disabled={o.disabled}\n className={styles.item}\n >\n {o.icon ? <span className={styles.icon} aria-hidden=\"true\">{o.icon}</span> : null}\n <span className={styles.label}>{o.label}</span>\n </RT.Item>\n ))}\n </RT.Root>\n );\n },\n);\n","import * as DM from \"@radix-ui/react-dropdown-menu\";\nimport { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from \"react\";\nimport styles from \"./DropdownMenu.module.css\";\n\nexport const DropdownMenu = DM.Root;\nexport const DropdownMenuTrigger = DM.Trigger;\nexport const DropdownMenuGroup = DM.Group;\nexport const DropdownMenuRadioGroup = DM.RadioGroup;\nexport const DropdownMenuSub = DM.Sub;\n\nexport const DropdownMenuContent = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<typeof DM.Content>\n>(function DropdownMenuContent({ className, sideOffset = 6, ...rest }, ref) {\n return (\n <DM.Portal>\n <DM.Content\n ref={ref}\n sideOffset={sideOffset}\n className={[styles.content, className].filter(Boolean).join(\" \")}\n {...rest}\n />\n </DM.Portal>\n );\n});\n\nexport interface DropdownMenuItemProps extends ComponentPropsWithoutRef<typeof DM.Item> {\n icon?: ReactNode;\n shortcut?: ReactNode;\n tone?: \"default\" | \"danger\";\n}\n\nexport const DropdownMenuItem = forwardRef<HTMLDivElement, DropdownMenuItemProps>(\n function DropdownMenuItem({ icon, shortcut, tone = \"default\", className, children, ...rest }, ref) {\n return (\n <DM.Item\n ref={ref}\n className={[styles.item, styles[`tone-${tone}`], className].filter(Boolean).join(\" \")}\n {...rest}\n >\n {icon ? <span className={styles.icon} aria-hidden=\"true\">{icon}</span> : null}\n <span className={styles.label}>{children}</span>\n {shortcut ? <span className={styles.shortcut}>{shortcut}</span> : null}\n </DM.Item>\n );\n },\n);\n\nexport interface DropdownMenuCheckboxItemProps\n extends ComponentPropsWithoutRef<typeof DM.CheckboxItem> {\n children: ReactNode;\n}\n\nexport const DropdownMenuCheckboxItem = forwardRef<HTMLDivElement, DropdownMenuCheckboxItemProps>(\n function DropdownMenuCheckboxItem({ className, children, ...rest }, ref) {\n return (\n <DM.CheckboxItem\n ref={ref}\n className={[styles.item, styles.indicatorItem, className].filter(Boolean).join(\" \")}\n {...rest}\n >\n <DM.ItemIndicator className={styles.indicator}>\n <CheckIcon />\n </DM.ItemIndicator>\n <span className={styles.label}>{children}</span>\n </DM.CheckboxItem>\n );\n },\n);\n\nexport interface DropdownMenuRadioItemProps\n extends ComponentPropsWithoutRef<typeof DM.RadioItem> {\n children: ReactNode;\n}\n\nexport const DropdownMenuRadioItem = forwardRef<HTMLDivElement, DropdownMenuRadioItemProps>(\n function DropdownMenuRadioItem({ className, children, ...rest }, ref) {\n return (\n <DM.RadioItem\n ref={ref}\n className={[styles.item, styles.indicatorItem, className].filter(Boolean).join(\" \")}\n {...rest}\n >\n <DM.ItemIndicator className={styles.indicator}>\n <span className={styles.radioDot} />\n </DM.ItemIndicator>\n <span className={styles.label}>{children}</span>\n </DM.RadioItem>\n );\n },\n);\n\nexport const DropdownMenuLabel = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<typeof DM.Label>\n>(function DropdownMenuLabel({ className, ...rest }, ref) {\n return (\n <DM.Label\n ref={ref}\n className={[styles.menuLabel, className].filter(Boolean).join(\" \")}\n {...rest}\n />\n );\n});\n\nexport const DropdownMenuSeparator = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<typeof DM.Separator>\n>(function DropdownMenuSeparator({ className, ...rest }, ref) {\n return (\n <DM.Separator\n ref={ref}\n className={[styles.separator, className].filter(Boolean).join(\" \")}\n {...rest}\n />\n );\n});\n\nexport const DropdownMenuSubTrigger = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<typeof DM.SubTrigger>\n>(function DropdownMenuSubTrigger({ className, children, ...rest }, ref) {\n return (\n <DM.SubTrigger\n ref={ref}\n className={[styles.item, styles.subTrigger, className].filter(Boolean).join(\" \")}\n {...rest}\n >\n <span className={styles.label}>{children}</span>\n <span className={styles.subChevron} aria-hidden=\"true\">▸</span>\n </DM.SubTrigger>\n );\n});\n\nexport const DropdownMenuSubContent = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<typeof DM.SubContent>\n>(function DropdownMenuSubContent({ className, ...rest }, ref) {\n return (\n <DM.Portal>\n <DM.SubContent\n ref={ref}\n className={[styles.content, className].filter(Boolean).join(\" \")}\n {...rest}\n />\n </DM.Portal>\n );\n});\n\nfunction CheckIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2.5} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n","import * as CM from \"@radix-ui/react-context-menu\";\nimport { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from \"react\";\nimport styles from \"./ContextMenu.module.css\";\n\nexport const ContextMenu = CM.Root;\nexport const ContextMenuTrigger = CM.Trigger;\nexport const ContextMenuGroup = CM.Group;\nexport const ContextMenuRadioGroup = CM.RadioGroup;\nexport const ContextMenuSub = CM.Sub;\n\nexport const ContextMenuContent = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<typeof CM.Content>\n>(function ContextMenuContent({ className, ...rest }, ref) {\n return (\n <CM.Portal>\n <CM.Content\n ref={ref}\n className={[styles.content, className].filter(Boolean).join(\" \")}\n {...rest}\n />\n </CM.Portal>\n );\n});\n\nexport interface ContextMenuItemProps extends ComponentPropsWithoutRef<typeof CM.Item> {\n icon?: ReactNode;\n shortcut?: ReactNode;\n tone?: \"default\" | \"danger\";\n}\n\nexport const ContextMenuItem = forwardRef<HTMLDivElement, ContextMenuItemProps>(\n function ContextMenuItem({ icon, shortcut, tone = \"default\", className, children, ...rest }, ref) {\n return (\n <CM.Item\n ref={ref}\n className={[styles.item, styles[`tone-${tone}`], className].filter(Boolean).join(\" \")}\n {...rest}\n >\n {icon ? <span className={styles.icon} aria-hidden=\"true\">{icon}</span> : null}\n <span className={styles.label}>{children}</span>\n {shortcut ? <span className={styles.shortcut}>{shortcut}</span> : null}\n </CM.Item>\n );\n },\n);\n\nexport const ContextMenuLabel = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<typeof CM.Label>\n>(function ContextMenuLabel({ className, ...rest }, ref) {\n return (\n <CM.Label\n ref={ref}\n className={[styles.menuLabel, className].filter(Boolean).join(\" \")}\n {...rest}\n />\n );\n});\n\nexport const ContextMenuSeparator = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<typeof CM.Separator>\n>(function ContextMenuSeparator({ className, ...rest }, ref) {\n return (\n <CM.Separator\n ref={ref}\n className={[styles.separator, className].filter(Boolean).join(\" \")}\n {...rest}\n />\n );\n});\n","import * as HC from \"@radix-ui/react-hover-card\";\nimport { forwardRef, type ComponentPropsWithoutRef } from \"react\";\nimport styles from \"./HoverCard.module.css\";\n\nexport const HoverCard = HC.Root;\nexport const HoverCardTrigger = HC.Trigger;\n\nexport const HoverCardContent = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<typeof HC.Content>\n>(function HoverCardContent({ className, sideOffset = 8, ...rest }, ref) {\n return (\n <HC.Portal>\n <HC.Content\n ref={ref}\n sideOffset={sideOffset}\n className={[styles.content, className].filter(Boolean).join(\" \")}\n {...rest}\n />\n </HC.Portal>\n );\n});\n","import * as A from \"@radix-ui/react-accordion\";\nimport { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from \"react\";\nimport styles from \"./Accordion.module.css\";\n\ntype AccordionRootProps = ComponentPropsWithoutRef<typeof A.Root>;\n\nexport const Accordion = forwardRef<HTMLDivElement, AccordionRootProps>(\n function Accordion(props, ref) {\n const { className, ...rest } = props as AccordionRootProps & { className?: string };\n return (\n <A.Root\n ref={ref}\n className={[styles.root, className].filter(Boolean).join(\" \")}\n {...(rest as AccordionRootProps)}\n />\n );\n },\n);\n\nexport const AccordionItem = forwardRef<HTMLDivElement, ComponentPropsWithoutRef<typeof A.Item>>(\n function AccordionItem({ className, ...rest }, ref) {\n return (\n <A.Item\n ref={ref}\n className={[styles.item, className].filter(Boolean).join(\" \")}\n {...rest}\n />\n );\n },\n);\n\nexport interface AccordionTriggerProps extends ComponentPropsWithoutRef<typeof A.Trigger> {\n children: ReactNode;\n}\n\nexport const AccordionTrigger = forwardRef<HTMLButtonElement, AccordionTriggerProps>(\n function AccordionTrigger({ className, children, ...rest }, ref) {\n return (\n <A.Header className={styles.header}>\n <A.Trigger\n ref={ref}\n className={[styles.trigger, className].filter(Boolean).join(\" \")}\n {...rest}\n >\n <span className={styles.label}>{children}</span>\n <span className={styles.chev} aria-hidden=\"true\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.6} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </span>\n </A.Trigger>\n </A.Header>\n );\n },\n);\n\nexport const AccordionContent = forwardRef<HTMLDivElement, ComponentPropsWithoutRef<typeof A.Content>>(\n function AccordionContent({ className, children, ...rest }, ref) {\n return (\n <A.Content\n ref={ref}\n className={[styles.content, className].filter(Boolean).join(\" \")}\n {...rest}\n >\n <div className={styles.contentInner}>{children}</div>\n </A.Content>\n );\n },\n);\n","import * as C from \"@radix-ui/react-collapsible\";\nimport { forwardRef, type ComponentPropsWithoutRef } from \"react\";\nimport styles from \"./Collapsible.module.css\";\n\n/**\n * Collapsible — a single show/hide disclosure (distinct from Accordion, which\n * groups several items under one value). Thin wrappers over Radix Collapsible:\n * controlled (`open`/`onOpenChange`) or uncontrolled (`defaultOpen`), and the\n * trigger supports `asChild` so callers can host their own button/row.\n */\nexport const Collapsible = forwardRef<HTMLDivElement, ComponentPropsWithoutRef<typeof C.Root>>(\n function Collapsible({ className, ...rest }, ref) {\n return (\n <C.Root ref={ref} className={[styles.root, className].filter(Boolean).join(\" \")} {...rest} />\n );\n },\n);\n\nexport const CollapsibleTrigger = forwardRef<\n HTMLButtonElement,\n ComponentPropsWithoutRef<typeof C.Trigger>\n>(function CollapsibleTrigger({ className, ...rest }, ref) {\n return (\n <C.Trigger\n ref={ref}\n className={[styles.trigger, className].filter(Boolean).join(\" \")}\n {...rest}\n />\n );\n});\n\nexport const CollapsibleContent = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<typeof C.Content>\n>(function CollapsibleContent({ className, children, ...rest }, ref) {\n return (\n <C.Content\n ref={ref}\n className={[styles.content, className].filter(Boolean).join(\" \")}\n {...rest}\n >\n {children}\n </C.Content>\n );\n});\n","import * as SA from \"@radix-ui/react-scroll-area\";\nimport { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from \"react\";\nimport styles from \"./ScrollArea.module.css\";\n\nexport type ScrollAreaOrientation = \"vertical\" | \"horizontal\" | \"both\";\n\nexport interface ScrollAreaProps extends ComponentPropsWithoutRef<typeof SA.Root> {\n orientation?: ScrollAreaOrientation;\n children: ReactNode;\n}\n\nexport const ScrollArea = forwardRef<HTMLDivElement, ScrollAreaProps>(function ScrollArea(\n { orientation = \"vertical\", className, children, ...rest },\n ref,\n) {\n return (\n <SA.Root\n ref={ref}\n className={[styles.root, className].filter(Boolean).join(\" \")}\n {...rest}\n >\n {/* tabIndex={0} keeps the scrollable viewport keyboard-reachable (axe scrollable-region-focusable). */}\n <SA.Viewport className={styles.viewport} tabIndex={0}>\n {children}\n </SA.Viewport>\n {(orientation === \"vertical\" || orientation === \"both\") && (\n <SA.Scrollbar orientation=\"vertical\" className={styles.scrollbar}>\n <SA.Thumb className={styles.thumb} />\n </SA.Scrollbar>\n )}\n {(orientation === \"horizontal\" || orientation === \"both\") && (\n <SA.Scrollbar\n orientation=\"horizontal\"\n className={[styles.scrollbar, styles.scrollbarHorizontal].join(\" \")}\n >\n <SA.Thumb className={styles.thumb} />\n </SA.Scrollbar>\n )}\n <SA.Corner className={styles.corner} />\n </SA.Root>\n );\n});\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useImperativeHandle,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { Button } from \"../Button/Button\";\nimport SvgChevronUp from \"../../icons/ChevronUp\";\nimport styles from \"./ScrollableList.module.css\";\n\n/**\n * Kept for API compatibility. Headers no longer paint a surface — the pinned\n * title floats over the top fade mask (rows dissolve beneath it, exactly like\n * the bottom fade), so there is no header box to paint.\n *\n * @deprecated The header surface is no longer rendered; the prop is ignored.\n */\nexport type ScrollableListHeaderSurface = \"surface\" | \"glass\" | \"transparent\";\n\nexport interface ScrollStateChange {\n /** Content is hidden above the viewport (top fade is shown). */\n atTop: boolean;\n /** Content is hidden below the viewport (bottom fade is shown). */\n atBottom: boolean;\n /** The viewport actually overflows (is scrollable). */\n isScrollable: boolean;\n}\n\ninterface SectionEntry {\n element: HTMLElement | null;\n header: ReactNode;\n hasHeader: boolean;\n}\n\ninterface ScrollableListCtx {\n /** Sections upsert themselves every render so the root always has the\n * latest header node + element for the pinned-title scroll math. */\n updateSection: (id: string, entry: SectionEntry) => void;\n removeSection: (id: string) => void;\n}\n\nconst ScrollableListContext = createContext<ScrollableListCtx | null>(null);\n\nexport interface ScrollableListProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onScroll\"> {\n /** Accessible name for the scroll `region`. Required for a labelled landmark. */\n ariaLabel: string;\n /** Max height of the scroll viewport. Number → px. Required to bound scrolling. */\n maxHeight: number | string;\n /** @deprecated Ignored — headers float over the fade and paint no surface. */\n headerSurface?: ScrollableListHeaderSurface;\n /**\n * Horizontal breathing room (px) so row hover shadows/glows aren't clipped\n * by the viewport's overflow-x. Layout-neutral: padding paired with an\n * equal negative margin. Default 16.\n */\n bleed?: number;\n /**\n * Stretch the scroll region to its container's full height even when the\n * content is shorter — keeps the region's bottom edge (and fade) aligned\n * with sibling panes. Pair with a definite-height parent (e.g. a 1fr grid\n * row). Default false (content-sized up to maxHeight).\n */\n fill?: boolean;\n /**\n * Show the back-to-top button in the header line. Visible whenever the list\n * is scrolled away from the top; smooth-scrolls to the top on click\n * (instant when `prefers-reduced-motion`). Default `true`.\n */\n backToTop?: boolean;\n /** Accessible label for the back-to-top button. Default \"Back to top\". */\n backToTopLabel?: string;\n /** Fired when the scroll edges or scrollability change. */\n onScrollStateChange?: (state: ScrollStateChange) => void;\n children?: ReactNode;\n}\n\nexport interface ScrollableListHandle {\n /** Smooth-scroll (or instant under reduced motion) the viewport to the top. */\n scrollToTop: () => void;\n /** The scrollable viewport element, for advanced callers. */\n readonly viewport: HTMLDivElement | null;\n}\n\nfunction prefersReducedMotion(): boolean {\n return (\n typeof window !== \"undefined\" &&\n typeof window.matchMedia === \"function\" &&\n window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n );\n}\n\n/**\n * ScrollableList — a bounded, fade-masked scroll region with floating pinned\n * section titles and an optional back-to-top control.\n *\n * Composition:\n * <ScrollableList ariaLabel=\"Past meetings\" maxHeight={480}>\n * <ScrollableList.Section header={<h3>Jun 5 · 7 recordings</h3>}>\n * …rows…\n * </ScrollableList.Section>\n * </ScrollableList>\n *\n * Fades: both edges are CSS `mask-image` on the viewport — content genuinely\n * dissolves, revealing whatever sits behind the list (solid surface or glass).\n * The top fade mirrors the bottom one exactly.\n *\n * Pinned titles: section headers render in normal flow and dissolve into the\n * top fade with their rows. The root tracks which section spans the top edge\n * and floats a crisp copy of its header above the fade (aria-hidden — the\n * in-flow header keeps the semantics). When the next section's header\n * approaches, the floating title is displaced upward, reproducing the classic\n * sticky hand-off without putting the header inside the masked subtree.\n */\nfunction ScrollableListRoot(\n {\n ariaLabel,\n maxHeight,\n headerSurface: _headerSurface = \"surface\",\n bleed = 16,\n fill = false,\n backToTop = true,\n backToTopLabel = \"Back to top\",\n onScrollStateChange,\n children,\n className,\n style,\n ...rest\n }: ScrollableListProps,\n ref: React.Ref<ScrollableListHandle>,\n) {\n const viewportRef = useRef<HTMLDivElement>(null);\n const topSentinelRef = useRef<HTMLDivElement>(null);\n const bottomSentinelRef = useRef<HTMLDivElement>(null);\n const pinnedRef = useRef<HTMLDivElement>(null);\n\n const [atTop, setAtTop] = useState(true);\n const [atBottom, setAtBottom] = useState(true);\n const [isScrollable, setIsScrollable] = useState(false);\n const [showBackToTop, setShowBackToTop] = useState(false);\n\n // Registry of sections for the pinned-title math. A ref (not state): the\n // rAF loop reads it; only the *active header* transition triggers a render.\n const sectionsRef = useRef(new Map<string, SectionEntry>());\n const [activeHeader, setActiveHeader] = useState<ReactNode>(null);\n const activeIdRef = useRef<string | null>(null);\n // In-flow headers inside the fade zone are hidden (visibility) — their\n // crisp floating twins are the only rendering there. Tracked for precise\n // restore when they leave the zone or the list unmounts.\n const hiddenHeadersRef = useRef(new Set<HTMLElement>());\n\n const updateSection = useCallback((id: string, entry: SectionEntry) => {\n sectionsRef.current.set(id, entry);\n // Keep the floating copy in sync when the active section's header node\n // itself re-renders (e.g. its count changes).\n if (activeIdRef.current === id) setActiveHeader(entry.header);\n }, []);\n const removeSection = useCallback((id: string) => {\n sectionsRef.current.delete(id);\n if (activeIdRef.current === id) {\n activeIdRef.current = null;\n setActiveHeader(null);\n }\n }, []);\n\n const onChangeRef = useRef(onScrollStateChange);\n onChangeRef.current = onScrollStateChange;\n const emit = useCallback((next: ScrollStateChange) => {\n onChangeRef.current?.(next);\n }, []);\n\n // Sentinel-based edge detection (zero-height lines at the content's ends).\n useEffect(() => {\n const viewport = viewportRef.current;\n const top = topSentinelRef.current;\n const bottom = bottomSentinelRef.current;\n if (!viewport || !top || !bottom) return;\n\n const io = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.target === top) setAtTop(entry.isIntersecting);\n else if (entry.target === bottom) setAtBottom(entry.isIntersecting);\n }\n },\n { root: viewport, threshold: 0 },\n );\n io.observe(top);\n io.observe(bottom);\n return () => io.disconnect();\n }, []);\n\n // rAF measure loop: overflow state, back-to-top visibility, and the pinned\n // section title (which section owns the top edge + hand-off displacement).\n useEffect(() => {\n const viewport = viewportRef.current;\n if (!viewport) return;\n\n let frame = 0;\n const measure = () => {\n frame = 0;\n const scrollable = viewport.scrollHeight - viewport.clientHeight > 1;\n setIsScrollable(scrollable);\n // Visible whenever the list is scrolled away from the top (stg behavior).\n setShowBackToTop(scrollable && viewport.scrollTop > 8);\n\n // ---- floating section title (single slot) ----\n // Only ONE title renders at a time: the pinned copy of the section\n // owning the top edge. In-flow headers are visibility-hidden through\n // the fade zone (they dissolve like rows); the pinned title slides out\n // as the next header reaches the top, completing its exit exactly when\n // the next section takes over (contact hand-off, no co-visible titles).\n const pinned = pinnedRef.current;\n const rootEl = viewport.parentElement as HTMLElement;\n const rootRect = rootEl.getBoundingClientRect();\n const vpTop = viewport.getBoundingClientRect().top;\n // The pane can sit at a fractional screen offset; transforms must\n // compensate so the title's FINAL position is whole-pixel (fractional\n // rasterization is what blurs the text).\n const snapY = (y: number) => Math.round(rootRect.top + y) - rootRect.top;\n const snapX = (x: number) => Math.round(rootRect.left + x) - rootRect.left;\n const fadeZone =\n parseFloat(getComputedStyle(viewport).getPropertyValue(\"--sds-list-fade-top\")) || 96;\n const entries = [...sectionsRef.current.entries()]\n .filter(([, e]) => e.element && e.hasHeader)\n .map(([id, e]) => {\n const rect = (e.element as HTMLElement).getBoundingClientRect();\n const headerEl = (e.element as HTMLElement)\n .firstElementChild as HTMLElement | null;\n const hRect = headerEl ? headerEl.getBoundingClientRect() : rect;\n return {\n id,\n entry: e,\n rect,\n headerEl,\n headerTop: hRect.top - vpTop,\n headerH: hRect.height,\n };\n })\n .sort((a, b) => a.rect.top - b.rect.top);\n\n let active: (typeof entries)[number] | null = null;\n let next: (typeof entries)[number] | null = null;\n for (const s of entries) {\n if (s.rect.top - vpTop <= 1) active = s;\n else if (!next) next = s;\n }\n\n if ((active?.id ?? null) !== activeIdRef.current) {\n activeIdRef.current = active?.id ?? null;\n setActiveHeader(active ? active.entry.header : null);\n }\n\n // At rest (scrollTop 0) the in-flow header is fully visible — only\n // float a copy once the real one has scrolled above the top edge.\n const activeObscured = active != null && active.headerTop < -0.5;\n\n // Hide in-flow headers whose text would ghost through the fade: the\n // active one (its copy is pinned) and the next one while inside the\n // zone. visibility (not display) — layout must not shift.\n const desiredHidden = new Set<HTMLElement>();\n if (active?.headerEl && activeObscured) desiredHidden.add(active.headerEl);\n if (next?.headerEl && next.headerTop < fadeZone) desiredHidden.add(next.headerEl);\n for (const el of hiddenHeadersRef.current) {\n if (!desiredHidden.has(el)) el.style.visibility = \"\";\n }\n for (const el of desiredHidden) el.style.visibility = \"hidden\";\n hiddenHeadersRef.current = desiredHidden;\n\n if (pinned) {\n if (active && activeObscured) {\n const h = pinned.offsetHeight;\n // Slide out on contact: as the next header covers the title's own\n // band [0..h], push the title up; it exits fully at the exact\n // moment the next section takes over (ty = -h at headerTop = 0).\n const ty = next ? Math.min(0, next.headerTop - h) : 0;\n const pinProgress = h > 0 ? Math.max(0, 1 + ty / h) : 1;\n pinned.style.transform =\n \"translate(\" + snapX(12 * pinProgress) + \"px, \" + snapY(ty) + \"px)\";\n pinned.style.opacity = \"1\";\n } else {\n pinned.style.opacity = \"0\";\n }\n }\n };\n const schedule = () => {\n if (frame) return;\n frame = requestAnimationFrame(measure);\n };\n\n measure();\n viewport.addEventListener(\"scroll\", schedule, { passive: true });\n const ro = new ResizeObserver(schedule);\n ro.observe(viewport);\n const content = viewport.firstElementChild;\n if (content) ro.observe(content);\n\n return () => {\n viewport.removeEventListener(\"scroll\", schedule);\n ro.disconnect();\n if (frame) cancelAnimationFrame(frame);\n for (const el of hiddenHeadersRef.current) el.style.visibility = \"\";\n hiddenHeadersRef.current = new Set();\n };\n }, []);\n\n useEffect(() => {\n emit({ atTop, atBottom, isScrollable });\n }, [atTop, atBottom, isScrollable, emit]);\n\n const scrollToTop = useCallback(() => {\n const viewport = viewportRef.current;\n if (!viewport) return;\n viewport.scrollTo({\n top: 0,\n behavior: prefersReducedMotion() ? \"auto\" : \"smooth\",\n });\n }, []);\n\n useImperativeHandle(\n ref,\n () => ({\n scrollToTop,\n get viewport() {\n return viewportRef.current;\n },\n }),\n [scrollToTop],\n );\n\n // Both fades are the same mask, mirrored. The pinned title lives OUTSIDE\n // the masked viewport, so it stays crisp while rows dissolve beneath it.\n const fadeTop = !atTop;\n const fadeBottom = isScrollable && !atBottom;\n\n return (\n <ScrollableListContext.Provider value={{ updateSection, removeSection }}>\n <div\n className={[styles.root, className].filter(Boolean).join(\" \")}\n style={fill ? { height: \"100%\", ...style } : style}\n {...rest}\n >\n <div\n ref={viewportRef}\n className={styles.viewport}\n role=\"region\"\n aria-label={ariaLabel}\n tabIndex={isScrollable ? 0 : undefined}\n data-fade-top={fadeTop ? \"\" : undefined}\n data-fade-bottom={fadeBottom ? \"\" : undefined}\n style={{\n maxHeight: typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight,\n height: fill ? \"100%\" : undefined,\n paddingInline: bleed,\n marginInline: -bleed,\n }}\n >\n <div ref={topSentinelRef} className={styles.sentinel} aria-hidden=\"true\" />\n <div className={styles.content}>{children}</div>\n <div ref={bottomSentinelRef} className={styles.sentinel} aria-hidden=\"true\" />\n </div>\n\n {/* Floating copy of the active section's header. The in-flow header\n carries the semantics; this is presentation only. */}\n <div\n ref={pinnedRef}\n className={styles.pinnedHeader}\n data-visible={activeHeader != null && fadeTop ? \"\" : undefined}\n aria-hidden=\"true\"\n >\n {activeHeader}\n </div>\n\n {backToTop && (\n <div\n className={styles.backToTopSlot}\n data-visible={showBackToTop ? \"\" : undefined}\n aria-hidden={showBackToTop ? undefined : \"true\"}\n >\n <Button\n variant=\"tertiary\"\n size=\"md\"\n iconOnly\n iconLeft={<SvgChevronUp width={26} height={26} />}\n aria-label={backToTopLabel}\n tooltip={backToTopLabel}\n tabIndex={showBackToTop ? undefined : -1}\n onClick={scrollToTop}\n />\n </div>\n )}\n </div>\n </ScrollableListContext.Provider>\n );\n}\n\nconst ScrollableListForwardRef = forwardRef(ScrollableListRoot);\nScrollableListForwardRef.displayName = \"ScrollableList\";\n\nexport interface ScrollableListSectionProps extends HTMLAttributes<HTMLElement> {\n /**\n * Header for the section. Rendered in normal flow (it scrolls and dissolves\n * into the top fade with its rows); while the section spans the top edge the\n * root floats a crisp copy of it above the fade, displaced by the next\n * section's header on hand-off. Omit for an unheadered group.\n */\n header?: ReactNode;\n children?: ReactNode;\n}\n\n/**\n * A group of rows under a section header. IMPORTANT: when a header is present\n * it must be the section's first child (the root reads it for the floating\n * pinned copy) — this component guarantees that ordering.\n */\nconst ScrollableListSection = forwardRef<HTMLElement, ScrollableListSectionProps>(\n function ScrollableListSection({ header, children, className, ...rest }, ref) {\n const ctx = useContext(ScrollableListContext);\n const labelId = useId();\n const elementRef = useRef<HTMLElement | null>(null);\n\n // Upsert into the root registry every render so the floating copy always\n // shows the latest header content; remove on unmount.\n useEffect(() => {\n ctx?.updateSection(labelId, {\n element: elementRef.current,\n header,\n hasHeader: header != null,\n });\n });\n useEffect(() => {\n return () => ctx?.removeSection(labelId);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <section\n ref={(node) => {\n elementRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLElement | null>).current = node;\n }}\n className={[styles.section, className].filter(Boolean).join(\" \")}\n aria-labelledby={header ? labelId : undefined}\n {...rest}\n >\n {header != null && (\n <div id={labelId} className={styles.sectionHeader}>\n {header}\n </div>\n )}\n {children}\n </section>\n );\n },\n);\n\n/**\n * Compound export: `ScrollableList` is the forwardRef root with a `.Section`\n * member. Built via `Object.assign` so the static is present at the value's\n * type (a plain cast would assert a member that isn't attached yet).\n */\nexport const ScrollableList = Object.assign(ScrollableListForwardRef, {\n Section: ScrollableListSection,\n});\n\nexport { ScrollableListSection };\n","import * as S from \"@radix-ui/react-slider\";\nimport { forwardRef, type ComponentPropsWithoutRef } from \"react\";\nimport styles from \"./Slider.module.css\";\n\nexport interface SliderProps extends ComponentPropsWithoutRef<typeof S.Root> {\n /** Optional label rendered above the track. */\n label?: string;\n /** Optional value label rendered next to the label. */\n formatValue?: (value: number) => string;\n /** Show numeric value badge on the thumb. */\n showValueOnThumb?: boolean;\n}\n\nexport const Slider = forwardRef<HTMLSpanElement, SliderProps>(function Slider(\n { label, formatValue, showValueOnThumb, className, value, defaultValue, ...rest },\n ref,\n) {\n const v = (value ?? defaultValue ?? [0]) as number[];\n const display = formatValue ? v.map(formatValue).join(\" – \") : v.join(\" – \");\n\n return (\n <div className={[styles.wrapper, className].filter(Boolean).join(\" \")}>\n {label || formatValue ? (\n <div className={styles.header}>\n {label ? <span className={styles.label}>{label}</span> : <span />}\n <span className={styles.value}>{display}</span>\n </div>\n ) : null}\n <S.Root\n ref={ref}\n className={styles.root}\n value={value}\n defaultValue={defaultValue}\n {...rest}\n >\n <S.Track className={styles.track}>\n <S.Range className={styles.range} />\n </S.Track>\n {v.map((val, i) => (\n <S.Thumb key={i} className={styles.thumb} aria-label={label ?? \"Value\"}>\n {showValueOnThumb ? (\n <span className={styles.thumbValue}>{formatValue ? formatValue(val) : val}</span>\n ) : null}\n </S.Thumb>\n ))}\n </S.Root>\n </div>\n );\n});\n","import * as AD from \"@radix-ui/react-alert-dialog\";\nimport { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from \"react\";\nimport styles from \"./AlertDialog.module.css\";\nimport { resolveNode, type RichStr } from \"../Text/richstr\";\n\nexport const AlertDialog = AD.Root;\nexport const AlertDialogTrigger = AD.Trigger;\nexport const AlertDialogAction = AD.Action;\nexport const AlertDialogCancel = AD.Cancel;\n\nexport type AlertDialogTone = \"default\" | \"danger\";\n\nexport interface AlertDialogContentProps extends Omit<\n ComponentPropsWithoutRef<typeof AD.Content>,\n \"title\"\n> {\n title: ReactNode | RichStr;\n description?: ReactNode | RichStr;\n tone?: AlertDialogTone;\n}\n\nexport const AlertDialogContent = forwardRef<HTMLDivElement, AlertDialogContentProps>(\n function AlertDialogContent(\n { title, description, tone = \"default\", className, children, ...rest },\n ref,\n ) {\n return (\n <AD.Portal>\n <AD.Overlay className={styles.overlay} />\n <AD.Content\n ref={ref}\n className={[styles.content, styles[`tone-${tone}`], className].filter(Boolean).join(\" \")}\n {...rest}\n >\n <div className={styles.header}>\n {tone === \"danger\" ? (\n <span className={styles.toneIcon} aria-hidden=\"true\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.8}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0Z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n </span>\n ) : null}\n <div>\n <AD.Title className={styles.title}>{resolveNode(title)}</AD.Title>\n {description ? (\n <AD.Description className={styles.description}>\n {resolveNode(description)}\n </AD.Description>\n ) : null}\n </div>\n </div>\n {children}\n </AD.Content>\n </AD.Portal>\n );\n },\n);\n\nexport const AlertDialogFooter = forwardRef<HTMLDivElement, ComponentPropsWithoutRef<\"div\">>(\n function AlertDialogFooter({ className, ...rest }, ref) {\n return (\n <div ref={ref} className={[styles.footer, className].filter(Boolean).join(\" \")} {...rest} />\n );\n },\n);\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ReactNode,\n} from \"react\";\n\nexport type Theme = \"light\" | \"dark\";\nexport type ThemeMode = Theme | \"system\";\n\nexport interface ThemeContextValue {\n /** Resolved theme actually applied to the document. Always `\"light\"` or `\"dark\"`. */\n theme: Theme;\n /** User-selected mode. `\"system\"` defers to `prefers-color-scheme`. */\n mode: ThemeMode;\n setMode: (mode: ThemeMode) => void;\n toggle: () => void;\n}\n\nconst ThemeContext = createContext<ThemeContextValue | null>(null);\n\nexport interface ThemeProviderProps {\n /** Initial mode if no stored value exists. Default: `\"system\"`. */\n defaultMode?: ThemeMode;\n /** Where to write the data attribute. Default: `document.documentElement` (`<html>`). */\n attribute?: \"data-theme\" | \"class\";\n /** localStorage key for persistence. Set to `null` to disable. Default: `\"sds-theme\"`. */\n storageKey?: string | null;\n /** Disable transitions during theme switch to avoid flicker. Default: true. */\n disableTransitionOnChange?: boolean;\n children: ReactNode;\n}\n\nfunction getSystemTheme(): Theme {\n if (typeof window === \"undefined\") return \"light\";\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\";\n}\n\nfunction resolve(mode: ThemeMode): Theme {\n return mode === \"system\" ? getSystemTheme() : mode;\n}\n\nfunction applyTheme(\n theme: Theme,\n attribute: \"data-theme\" | \"class\",\n disableTransitions: boolean,\n) {\n if (typeof document === \"undefined\") return;\n const root = document.documentElement;\n let cleanup: (() => void) | null = null;\n if (disableTransitions) {\n const style = document.createElement(\"style\");\n style.appendChild(\n document.createTextNode(\n \"*,*::before,*::after{transition:none!important;animation-duration:0s!important}\",\n ),\n );\n document.head.appendChild(style);\n // Force reflow so the disable lands before attribute mutation.\n void root.offsetHeight;\n cleanup = () => {\n // Re-enable transitions next frame.\n requestAnimationFrame(() => {\n style.remove();\n });\n };\n }\n if (attribute === \"data-theme\") {\n root.setAttribute(\"data-theme\", theme);\n } else {\n root.classList.remove(\"light\", \"dark\");\n root.classList.add(theme);\n }\n cleanup?.();\n}\n\nexport function ThemeProvider({\n defaultMode = \"system\",\n attribute = \"data-theme\",\n storageKey = \"sds-theme\",\n disableTransitionOnChange = true,\n children,\n}: ThemeProviderProps) {\n const [mode, setModeState] = useState<ThemeMode>(() => {\n if (typeof window === \"undefined\" || !storageKey) return defaultMode;\n const stored = window.localStorage.getItem(storageKey);\n if (stored === \"light\" || stored === \"dark\" || stored === \"system\") return stored;\n return defaultMode;\n });\n\n const [theme, setTheme] = useState<Theme>(() => resolve(defaultMode));\n\n // Apply theme on every mode change.\n useEffect(() => {\n const next = resolve(mode);\n setTheme(next);\n applyTheme(next, attribute, disableTransitionOnChange);\n if (storageKey && typeof window !== \"undefined\") {\n window.localStorage.setItem(storageKey, mode);\n }\n }, [mode, attribute, disableTransitionOnChange, storageKey]);\n\n // Listen to system preference when mode is \"system\".\n useEffect(() => {\n if (mode !== \"system\" || typeof window === \"undefined\") return;\n const mql = window.matchMedia(\"(prefers-color-scheme: dark)\");\n const onChange = () => {\n const next = mql.matches ? \"dark\" : \"light\";\n setTheme(next);\n applyTheme(next, attribute, disableTransitionOnChange);\n };\n mql.addEventListener(\"change\", onChange);\n return () => mql.removeEventListener(\"change\", onChange);\n }, [mode, attribute, disableTransitionOnChange]);\n\n const setMode = useCallback((next: ThemeMode) => {\n setModeState(next);\n }, []);\n\n const toggle = useCallback(() => {\n setModeState((prev) => {\n const current = resolve(prev);\n return current === \"dark\" ? \"light\" : \"dark\";\n });\n }, []);\n\n const value = useMemo<ThemeContextValue>(\n () => ({ theme, mode, setMode, toggle }),\n [theme, mode, setMode, toggle],\n );\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n\nexport function useTheme(): ThemeContextValue {\n const ctx = useContext(ThemeContext);\n if (!ctx) {\n throw new Error(\"useTheme() must be used inside <ThemeProvider>.\");\n }\n return ctx;\n}\n","import * as RD from \"@radix-ui/react-dialog\";\nimport { forwardRef, type ReactNode } from \"react\";\nimport styles from \"./Drawer.module.css\";\n\nexport type DrawerSide = \"right\" | \"left\" | \"bottom\";\n\nexport interface DrawerProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n trigger?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n side?: DrawerSide;\n width?: number;\n closeLabel?: string;\n className?: string;\n}\n\nconst CloseIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M6 6l12 12M18 6L6 18\" />\n </svg>\n);\n\nexport const Drawer = forwardRef<HTMLDivElement, DrawerProps>(function Drawer(\n { open, defaultOpen, onOpenChange, trigger, title, description, children, footer, side = \"right\", width, closeLabel = \"Close\", className },\n ref,\n) {\n return (\n <RD.Root open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange}>\n {trigger ? <RD.Trigger asChild>{trigger}</RD.Trigger> : null}\n <RD.Portal>\n <RD.Overlay className={styles.overlay} />\n <RD.Content\n ref={ref}\n className={[styles.content, styles[`side-${side}`], className].filter(Boolean).join(\" \")}\n style={width && side !== \"bottom\" ? { width: `${width}px` } : undefined}\n >\n <div className={styles.header}>\n <RD.Title className={styles.title}>{title}</RD.Title>\n <RD.Close className={styles.close} aria-label={closeLabel}>\n <CloseIcon />\n </RD.Close>\n </div>\n {description ? <RD.Description className={styles.description}>{description}</RD.Description> : null}\n {children ? <div className={styles.body}>{children}</div> : null}\n {footer ? <div className={styles.footer}>{footer}</div> : null}\n </RD.Content>\n </RD.Portal>\n </RD.Root>\n );\n});\n\nexport const DrawerClose = RD.Close;\n","import { motion } from \"framer-motion\";\nimport {\n createContext,\n forwardRef,\n useContext,\n useId,\n useState,\n type KeyboardEvent,\n type ReactNode,\n} from \"react\";\nimport styles from \"./SidebarTab.module.css\";\nimport { Tooltip, TooltipProvider } from \"../Tooltip/Tooltip\";\n\ninterface SidebarContext {\n value: string | undefined;\n setValue: (v: string) => void;\n groupId: string;\n folded: boolean;\n}\n\nconst SidebarTabsContext = createContext<SidebarContext | null>(null);\n\nexport interface SidebarTabsProps {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n children?: ReactNode;\n className?: string;\n /**\n * Collapses every tab to its icon. Labels move into tooltips so the rail\n * stays usable while narrow. Default: false.\n */\n folded?: boolean;\n}\n\nexport function SidebarTabs({\n value,\n defaultValue,\n onValueChange,\n children,\n className,\n folded = false,\n}: SidebarTabsProps) {\n const [internal, setInternal] = useState(defaultValue);\n const groupId = useId();\n const current = value ?? internal;\n const setValue = (v: string) => {\n if (value === undefined) setInternal(v);\n onValueChange?.(v);\n };\n\n const onKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (\n event.key !== \"ArrowDown\" &&\n event.key !== \"ArrowUp\" &&\n event.key !== \"Home\" &&\n event.key !== \"End\"\n ) {\n return;\n }\n const container = event.currentTarget;\n const tabs = Array.from(\n container.querySelectorAll<HTMLButtonElement>('[role=\"tab\"]:not([disabled])'),\n );\n if (tabs.length === 0) return;\n const activeIndex = tabs.findIndex((tab) => tab === document.activeElement);\n let nextIndex = activeIndex;\n if (event.key === \"ArrowDown\") {\n nextIndex = activeIndex < 0 ? 0 : (activeIndex + 1) % tabs.length;\n } else if (event.key === \"ArrowUp\") {\n nextIndex = activeIndex < 0 ? tabs.length - 1 : (activeIndex - 1 + tabs.length) % tabs.length;\n } else if (event.key === \"Home\") {\n nextIndex = 0;\n } else if (event.key === \"End\") {\n nextIndex = tabs.length - 1;\n }\n const next = tabs[nextIndex];\n if (!next) return;\n event.preventDefault();\n next.focus();\n next.click();\n };\n\n return (\n <SidebarTabsContext.Provider value={{ value: current, setValue, groupId, folded }}>\n <div\n role=\"tablist\"\n aria-orientation=\"vertical\"\n data-folded={folded || undefined}\n className={[styles.panel, folded ? styles.folded : null, className]\n .filter(Boolean)\n .join(\" \")}\n onKeyDown={onKeyDown}\n >\n {children}\n </div>\n </SidebarTabsContext.Provider>\n );\n}\n\nexport function SidebarSection({ children }: { children: ReactNode }) {\n return <div className={styles.section}>{children}</div>;\n}\n\nexport interface SidebarTabProps {\n value: string;\n children: ReactNode;\n icon?: ReactNode;\n count?: number | string;\n onClick?: () => void;\n /** Indents the tab with a spacer instead of an icon (sub-items). */\n nested?: boolean;\n /** Right-aligned actions (badges, buttons). Hidden while folded. */\n rightChildren?: ReactNode;\n}\n\nexport const SidebarTab = forwardRef<HTMLButtonElement, SidebarTabProps>(function SidebarTab(\n { value, children, icon, count, onClick, nested = false, rightChildren },\n ref,\n) {\n const ctx = useContext(SidebarTabsContext);\n if (!ctx) throw new Error(\"SidebarTab must be inside <SidebarTabs>\");\n const selected = ctx.value === value;\n\n const tab = (\n <button\n ref={ref}\n type=\"button\"\n role=\"tab\"\n aria-selected={selected}\n tabIndex={selected ? 0 : -1}\n className={[styles.tab, selected ? styles.selected : null, nested ? styles.nested : null]\n .filter(Boolean)\n .join(\" \")}\n onClick={() => {\n ctx.setValue(value);\n onClick?.();\n }}\n >\n {selected ? (\n <motion.span\n layoutId={`sidebar-indicator-${ctx.groupId}`}\n className={styles.indicator}\n transition={{ type: \"spring\", stiffness: 500, damping: 40 }}\n />\n ) : null}\n <span className={styles.body}>\n {nested && !icon ? <span className={styles.spacer} aria-hidden=\"true\" /> : null}\n {icon ? <span className={styles.icon}>{icon}</span> : null}\n <span className={styles.label}>{children}</span>\n {count !== undefined ? <span className={styles.count}>{count}</span> : null}\n {rightChildren !== undefined ? (\n <span className={styles.rightChildren}>{rightChildren}</span>\n ) : null}\n </span>\n </button>\n );\n\n // Folded rails lose their labels; the tooltip carries the label instead.\n if (!ctx.folded) return tab;\n return (\n <TooltipProvider>\n <Tooltip content={children} side=\"right\">\n {tab}\n </Tooltip>\n </TooltipProvider>\n );\n});\n","import { Fragment, forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport styles from \"./Breadcrumbs.module.css\";\n\nexport type CrumbItem =\n | { kind: \"link\"; label: ReactNode; href: string; icon?: ReactNode }\n | { kind: \"current\"; label: ReactNode }\n | { kind: \"ellipsis\"; onClick?: () => void; ariaLabel?: string };\n\nexport interface BreadcrumbsProps extends Omit<HTMLAttributes<HTMLElement>, \"children\"> {\n items: CrumbItem[];\n separator?: \"chevron\" | \"slash\" | ReactNode;\n ariaLabel?: string;\n}\n\nconst Chevron = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M9 18l6-6-6-6\" />\n </svg>\n);\n\nexport const Breadcrumbs = forwardRef<HTMLElement, BreadcrumbsProps>(function Breadcrumbs(\n { items, separator = \"chevron\", ariaLabel = \"Breadcrumb\", className, ...rest },\n ref,\n) {\n const sepNode =\n separator === \"chevron\" ? <Chevron /> : separator === \"slash\" ? <span>/</span> : separator;\n\n return (\n <nav\n ref={ref}\n aria-label={ariaLabel}\n className={[styles.crumbs, className].filter(Boolean).join(\" \")}\n {...rest}\n >\n {items.map((item, i) => {\n const isLast = i === items.length - 1;\n return (\n <Fragment key={i}>\n {item.kind === \"link\" ? (\n <a href={item.href} className={item.icon ? styles.linkWithIcon : styles.link}>\n {item.icon ? <span className={styles.icon}>{item.icon}</span> : null}\n {item.label}\n </a>\n ) : item.kind === \"current\" ? (\n <span className={styles.current} aria-current=\"page\">\n {item.label}\n </span>\n ) : (\n <button\n type=\"button\"\n className={styles.ellipsis}\n onClick={item.onClick}\n aria-label={item.ariaLabel ?? \"Show more\"}\n >\n …\n </button>\n )}\n {isLast ? null : (\n <span className={styles.sep} aria-hidden=\"true\">\n {sepNode}\n </span>\n )}\n </Fragment>\n );\n })}\n </nav>\n );\n});\n","import * as RT from \"@radix-ui/react-tabs\";\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n type MutableRefObject,\n type ReactNode,\n} from \"react\";\nimport styles from \"./Tabs.module.css\";\n\nexport type TabsVariant = \"underline\" | \"segmented\" | \"pill\";\n\ninterface TabsCtx {\n value: string | undefined;\n groupId: string;\n variant: TabsVariant;\n /** Register/unregister a trigger's DOM node so the list can measure it. */\n registerTrigger: (value: string, node: HTMLButtonElement | null) => void;\n}\n\nconst TabsContext = createContext<TabsCtx | null>(null);\n\nexport interface TabsProps {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n variant?: TabsVariant;\n children?: ReactNode;\n className?: string;\n}\n\nexport function Tabs({\n value,\n defaultValue,\n onValueChange,\n variant = \"underline\",\n children,\n className,\n}: TabsProps) {\n const [internal, setInternal] = useState(defaultValue);\n const groupId = useId();\n const current = value ?? internal;\n\n // Map of tab value -> trigger node, shared with the list for measurement.\n const triggersRef = useRef(new Map<string, HTMLButtonElement>());\n const registerTrigger = useCallback((v: string, node: HTMLButtonElement | null) => {\n if (node) triggersRef.current.set(v, node);\n else triggersRef.current.delete(v);\n }, []);\n\n return (\n <TabsContext.Provider value={{ value: current, groupId, variant, registerTrigger }}>\n <TriggersRefContext.Provider value={triggersRef}>\n <RT.Root\n value={value}\n defaultValue={defaultValue}\n onValueChange={(v) => {\n if (value === undefined) setInternal(v);\n onValueChange?.(v);\n }}\n className={[styles.root, styles[`v-${variant}`], className].filter(Boolean).join(\" \")}\n >\n {children}\n </RT.Root>\n </TriggersRefContext.Provider>\n </TabsContext.Provider>\n );\n}\n\nconst TriggersRefContext = createContext<MutableRefObject<\n Map<string, HTMLButtonElement>\n> | null>(null);\n\nexport interface TabsListProps {\n children: ReactNode;\n ariaLabel?: string;\n}\n\nexport function TabsList({ children, ariaLabel }: TabsListProps) {\n const ctx = useContext(TabsContext);\n const triggersRef = useContext(TriggersRefContext);\n if (!ctx || !triggersRef) throw new Error(\"TabsList must be inside <Tabs>\");\n\n const listRef = useRef<HTMLDivElement>(null);\n const [indicator, setIndicator] = useState<{ left: number; width: number; ready: boolean }>({\n left: 0,\n width: 0,\n ready: false,\n });\n\n // Measure the active trigger relative to the list, in a layout effect so the\n // indicator never paints at a stale position.\n const measure = useCallback(() => {\n const list = listRef.current;\n if (!list || ctx.value === undefined) {\n setIndicator((prev) => (prev.ready ? { ...prev, ready: false } : prev));\n return;\n }\n const node = triggersRef.current.get(ctx.value);\n if (!node) {\n setIndicator((prev) => (prev.ready ? { ...prev, ready: false } : prev));\n return;\n }\n const listBox = list.getBoundingClientRect();\n const box = node.getBoundingClientRect();\n const left = box.left - listBox.left;\n // Bail out when nothing moved so observer fires can't cause render churn.\n setIndicator((prev) =>\n prev.ready && prev.left === left && prev.width === box.width\n ? prev\n : { left, width: box.width, ready: true },\n );\n }, [ctx.value, triggersRef]);\n\n useLayoutEffect(() => {\n measure();\n }, [measure]);\n\n // Keep the indicator correct on resize / content reflow.\n useEffect(() => {\n const list = listRef.current;\n if (!list || typeof ResizeObserver === \"undefined\") return;\n const ro = new ResizeObserver(() => measure());\n ro.observe(list);\n for (const node of triggersRef.current.values()) ro.observe(node);\n window.addEventListener(\"resize\", measure);\n return () => {\n ro.disconnect();\n window.removeEventListener(\"resize\", measure);\n };\n }, [measure, triggersRef]);\n\n return (\n <RT.List\n ref={listRef}\n aria-label={ariaLabel}\n className={[styles.list, styles[`list-${ctx.variant}`]].join(\" \")}\n >\n <span\n aria-hidden=\"true\"\n data-active={indicator.ready || undefined}\n className={[styles.indicator, styles[`indicator-${ctx.variant}`]].join(\" \")}\n style={{\n transform: `translateX(${indicator.left}px)`,\n width: indicator.width,\n }}\n />\n {children}\n </RT.List>\n );\n}\n\nexport interface TabsTriggerProps {\n value: string;\n children: ReactNode;\n disabled?: boolean;\n}\n\nexport const TabsTrigger = forwardRef<HTMLButtonElement, TabsTriggerProps>(function TabsTrigger(\n { value, children, disabled },\n ref,\n) {\n const ctx = useContext(TabsContext);\n if (!ctx) throw new Error(\"TabsTrigger must be inside <Tabs>\");\n\n const setRef = useCallback(\n (node: HTMLButtonElement | null) => {\n ctx.registerTrigger(value, node);\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n },\n [ctx, value, ref],\n );\n\n return (\n <RT.Trigger\n ref={setRef}\n value={value}\n disabled={disabled}\n className={[styles.trigger, styles[`trigger-${ctx.variant}`]].join(\" \")}\n >\n <span className={styles.label}>{children}</span>\n </RT.Trigger>\n );\n});\n\nexport const TabsContent = RT.Content;\n","import { forwardRef, type HTMLAttributes, type ReactNode, type TableHTMLAttributes, type TdHTMLAttributes, type ThHTMLAttributes } from \"react\";\nimport styles from \"./Table.module.css\";\n\nexport interface TableProps extends TableHTMLAttributes<HTMLTableElement> {\n stickyHeader?: boolean;\n caption?: ReactNode;\n}\n\nexport const Table = forwardRef<HTMLTableElement, TableProps>(function Table(\n { stickyHeader, caption, className, children, ...rest },\n ref,\n) {\n return (\n <table\n ref={ref}\n className={[styles.table, stickyHeader ? styles.sticky : null, className].filter(Boolean).join(\" \")}\n {...rest}\n >\n {caption ? <caption className={styles.caption}>{caption}</caption> : null}\n {children}\n </table>\n );\n});\n\nexport interface ThProps extends ThHTMLAttributes<HTMLTableCellElement> {\n numeric?: boolean;\n}\n\nexport const Th = forwardRef<HTMLTableCellElement, ThProps>(function Th(\n { numeric, className, scope, ...rest },\n ref,\n) {\n return (\n <th\n ref={ref}\n scope={scope ?? \"col\"}\n className={[styles.th, numeric ? styles.numeric : null, className].filter(Boolean).join(\" \")}\n {...rest}\n />\n );\n});\n\nexport interface TdProps extends TdHTMLAttributes<HTMLTableCellElement> {\n numeric?: boolean;\n}\n\nexport const Td = forwardRef<HTMLTableCellElement, TdProps>(function Td(\n { numeric, className, ...rest },\n ref,\n) {\n return (\n <td\n ref={ref}\n className={[styles.td, numeric ? styles.numeric : null, className].filter(Boolean).join(\" \")}\n {...rest}\n />\n );\n});\n\nexport const Thead = forwardRef<HTMLTableSectionElement, HTMLAttributes<HTMLTableSectionElement>>(function Thead(props, ref) {\n return <thead ref={ref} {...props} />;\n});\n\nexport const Tbody = forwardRef<HTMLTableSectionElement, HTMLAttributes<HTMLTableSectionElement>>(function Tbody(props, ref) {\n return <tbody ref={ref} {...props} />;\n});\n\nexport const Tr = forwardRef<HTMLTableRowElement, HTMLAttributes<HTMLTableRowElement>>(function Tr(props, ref) {\n return <tr ref={ref} {...props} />;\n});\n","import { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport styles from \"./Avatar.module.css\";\n\nexport type AvatarSize = \"xs\" | \"sm\" | \"md\" | \"lg\";\nexport type AvatarTone = \"user\" | \"brand\" | \"success\" | \"warning\" | \"muted\";\nexport type AvatarStatus = \"online\" | \"away\" | \"off\";\n\nconst STATUS_LABELS: Record<AvatarStatus, string> = {\n online: \"Online\",\n away: \"Away\",\n off: \"Offline\",\n};\n\nexport interface AvatarProps extends HTMLAttributes<HTMLSpanElement> {\n size?: AvatarSize;\n tone?: AvatarTone;\n status?: AvatarStatus;\n src?: string;\n alt?: string;\n children?: ReactNode;\n}\n\n/**\n * When `src` is omitted and `children` (typically initials) is rendered, the\n * wrapping span defaults to `role=\"img\"` and uses `aria-label` (or the children\n * value as fallback) so screen readers announce a meaningful identity. Callers\n * should pass `aria-label` with the full name where possible.\n */\nexport const Avatar = forwardRef<HTMLSpanElement, AvatarProps>(function Avatar(\n { size = \"md\", tone = \"user\", status, src, alt, children, className, role, ...rest },\n ref,\n) {\n const isInitials = !src && children != null;\n const ariaLabel = (rest as { \"aria-label\"?: string })[\"aria-label\"];\n const inferredLabel = isInitials\n ? ariaLabel ?? (typeof children === \"string\" ? children : undefined)\n : undefined;\n const resolvedRole = role ?? (isInitials ? \"img\" : undefined);\n\n return (\n <span\n ref={ref}\n role={resolvedRole}\n aria-label={isInitials ? inferredLabel : ariaLabel}\n className={[styles.av, styles[`size-${size}`], styles[`tone-${tone}`], className].filter(Boolean).join(\" \")}\n {...rest}\n >\n {src ? <img src={src} alt={alt ?? \"\"} className={styles.img} /> : children}\n {status ? (\n <>\n <span className={[styles.status, styles[`status-${status}`]].join(\" \")} aria-hidden=\"true\" />\n <span className={styles.visuallyHidden}>{STATUS_LABELS[status]}</span>\n </>\n ) : null}\n </span>\n );\n});\n\nexport interface AvatarStackProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const AvatarStack = forwardRef<HTMLDivElement, AvatarStackProps>(function AvatarStack(\n { children, className, ...rest },\n ref,\n) {\n return (\n <div ref={ref} className={[styles.stack, className].filter(Boolean).join(\" \")} {...rest}>\n {children}\n </div>\n );\n});\n\nexport interface AvatarChipProps extends HTMLAttributes<HTMLSpanElement> {\n initials?: ReactNode;\n src?: string;\n alt?: string;\n children: ReactNode;\n}\n\nexport const AvatarChip = forwardRef<HTMLSpanElement, AvatarChipProps>(function AvatarChip(\n { initials, src, alt, children, className, ...rest },\n ref,\n) {\n return (\n <span ref={ref} className={[styles.chip, className].filter(Boolean).join(\" \")} {...rest}>\n <Avatar size=\"xs\" src={src} alt={alt}>\n {initials}\n </Avatar>\n {children}\n </span>\n );\n});\n","import { forwardRef, useState, type HTMLAttributes, type ReactNode } from \"react\";\nimport styles from \"./Code.module.css\";\n\nexport interface CodeBlockProps extends HTMLAttributes<HTMLDivElement> {\n language?: string;\n filename?: string;\n showLineNumbers?: boolean;\n copyable?: boolean;\n copyText?: string;\n children: ReactNode;\n}\n\nconst CopyIcon = () => (\n <svg width=\"11\" height=\"11\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" />\n <path d=\"M5 15V5a2 2 0 012-2h10\" />\n </svg>\n);\n\nexport const CodeBlock = forwardRef<HTMLDivElement, CodeBlockProps>(function CodeBlock(\n { language, filename, showLineNumbers = true, copyable = true, copyText, children, className, ...rest },\n ref,\n) {\n const [copied, setCopied] = useState(false);\n const text = String(children ?? \"\");\n const lines = text.split(\"\\n\");\n const lastEmpty = lines.length > 0 && lines[lines.length - 1] === \"\";\n const visibleLines = lastEmpty ? lines.slice(0, -1) : lines;\n\n const onCopy = async () => {\n try {\n await navigator.clipboard.writeText(copyText ?? text);\n setCopied(true);\n window.setTimeout(() => setCopied(false), 1500);\n } catch {\n /* no-op */\n }\n };\n\n return (\n <div ref={ref} className={[styles.cb, className].filter(Boolean).join(\" \")} {...rest}>\n <div className={styles.head}>\n <span className={styles.dots} aria-hidden=\"true\">\n <span />\n <span />\n <span />\n </span>\n {language || filename ? (\n <span className={styles.lang}>\n {language ? <span>{language}</span> : null}\n {language && filename ? <span className={styles.langSep}> · </span> : null}\n {filename ? <span>{filename}</span> : null}\n </span>\n ) : null}\n {copyable ? (\n <button\n type=\"button\"\n className={styles.copy}\n onClick={onCopy}\n aria-label={copied ? \"Copy code, copied!\" : \"Copy code\"}\n >\n <CopyIcon />\n {copied ? \"Copied\" : \"Copy\"}\n </button>\n ) : null}\n </div>\n <div className={styles.body}>\n {showLineNumbers ? (\n <div className={styles.gutter} aria-hidden=\"true\">\n {visibleLines.map((_, i) => (\n <span key={i}>{i + 1}</span>\n ))}\n </div>\n ) : null}\n <pre\n className={styles.pre}\n tabIndex={0}\n aria-label={filename || language || \"Code block\"}\n >\n {children}\n </pre>\n </div>\n {copyable ? (\n <span role=\"status\" aria-live=\"polite\" className={styles.srStatus}>\n {copied ? \"Code copied to clipboard\" : \"\"}\n </span>\n ) : null}\n </div>\n );\n});\n\nexport interface InlineCodeProps extends HTMLAttributes<HTMLElement> {\n children: ReactNode;\n}\n\nexport const InlineCode = forwardRef<HTMLElement, InlineCodeProps>(function InlineCode(\n { children, className, ...rest },\n ref,\n) {\n return (\n <code ref={ref} className={[styles.inline, className].filter(Boolean).join(\" \")} {...rest}>\n {children}\n </code>\n );\n});\n\nexport const Tok = {\n K: ({ children }: { children: ReactNode }) => <span className={styles.k}>{children}</span>,\n S: ({ children }: { children: ReactNode }) => <span className={styles.s}>{children}</span>,\n N: ({ children }: { children: ReactNode }) => <span className={styles.n}>{children}</span>,\n C: ({ children }: { children: ReactNode }) => <span className={styles.c}>{children}</span>,\n F: ({ children }: { children: ReactNode }) => <span className={styles.f}>{children}</span>,\n V: ({ children }: { children: ReactNode }) => <span className={styles.v}>{children}</span>,\n};\n","import { forwardRef, useId, type HTMLAttributes, type ReactNode } from \"react\";\nimport styles from \"./Attachment.module.css\";\n\nexport type AttachmentMime = \"pdf\" | \"xls\" | \"doc\" | \"png\" | \"default\";\n\nexport interface AttachmentProps extends HTMLAttributes<HTMLDivElement> {\n mime?: AttachmentMime;\n mimeLabel?: ReactNode;\n name: ReactNode;\n meta?: ReactNode;\n uploadingProgress?: number;\n onDismiss?: () => void;\n dismissLabel?: string;\n}\n\nconst MIME_LABELS: Record<AttachmentMime, string> = {\n pdf: \"PDF\",\n xls: \"XLS\",\n doc: \"DOC\",\n png: \"PNG\",\n default: \"FILE\",\n};\n\nconst CloseIcon = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.8} strokeLinecap=\"round\" aria-hidden=\"true\">\n <path d=\"M6 6l12 12M18 6L6 18\" />\n </svg>\n);\n\nexport const Attachment = forwardRef<HTMLDivElement, AttachmentProps>(function Attachment(\n { mime = \"pdf\", mimeLabel, name, meta, uploadingProgress, onDismiss, dismissLabel = \"Remove\", className, style, ...rest },\n ref,\n) {\n const isUploading = uploadingProgress !== undefined;\n const progressValue = isUploading\n ? Math.max(0, Math.min(100, uploadingProgress!))\n : undefined;\n // Name the progressbar from the visible filename so the accessible name stays\n // localized rather than hardcoded.\n const nameId = useId();\n return (\n <div\n ref={ref}\n className={[styles.att, isUploading ? styles.uploading : null, className].filter(Boolean).join(\" \")}\n style={style}\n role={isUploading ? \"progressbar\" : undefined}\n aria-valuenow={progressValue}\n aria-valuemin={isUploading ? 0 : undefined}\n aria-valuemax={isUploading ? 100 : undefined}\n aria-busy={isUploading || undefined}\n aria-labelledby={isUploading ? nameId : undefined}\n {...rest}\n >\n <span className={[styles.ic, styles[`ic-${mime}`]].join(\" \")}>{mimeLabel ?? MIME_LABELS[mime]}</span>\n <span className={styles.body}>\n <span id={nameId} className={styles.name}>{name}</span>\n {meta ? <span className={styles.meta}>{meta}</span> : null}\n </span>\n {onDismiss && !isUploading ? (\n <button type=\"button\" className={styles.close} onClick={onDismiss} aria-label={dismissLabel}>\n <CloseIcon />\n </button>\n ) : null}\n {isUploading ? (\n <span\n className={styles.progress}\n style={{ width: `${progressValue}%` }}\n aria-hidden=\"true\"\n />\n ) : null}\n </div>\n );\n});\n","import { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport styles from \"./Message.module.css\";\n\nexport type MessageRole = \"user\" | \"assistant\";\n\nconst ROLE_LABEL: Record<MessageRole, string> = {\n user: \"You said\",\n assistant: \"Assistant said\",\n};\n\nexport interface MessageProps extends HTMLAttributes<HTMLDivElement> {\n role: MessageRole;\n avatar?: ReactNode;\n /**\n * Optional override for the bubble aria-label.\n * Defaults to \"You said\" / \"Assistant said\".\n */\n bubbleLabel?: string;\n children: ReactNode;\n}\n\n/**\n * Message renders a single chat turn.\n *\n * Accessibility:\n * - Each bubble is exposed as `role=\"article\"` with an aria-label so screen\n * readers can navigate turns.\n * - Consumers that stream multiple Messages MUST wrap them in a live region,\n * e.g. `<MessageList>` (preferred) or `<div role=\"log\" aria-live=\"polite\">`.\n */\nexport const Message = forwardRef<HTMLDivElement, MessageProps>(function Message(\n { role, avatar, bubbleLabel, children, className, ...rest },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={[styles.msg, styles[`role-${role}`], className].filter(Boolean).join(\" \")}\n {...rest}\n >\n {avatar ? (\n <div className={[styles.avatar, styles[`avatar-${role}`]].join(\" \")} aria-hidden=\"true\">\n {avatar}\n </div>\n ) : (\n <div className={[styles.avatar, styles[`avatar-${role}`]].join(\" \")} aria-hidden=\"true\" />\n )}\n <div\n className={[styles.bubble, styles[`bubble-${role}`]].join(\" \")}\n role=\"article\"\n aria-label={bubbleLabel ?? ROLE_LABEL[role]}\n >\n {children}\n </div>\n </div>\n );\n});\n\nexport interface MessageListProps extends HTMLAttributes<HTMLDivElement> {\n /** Override the default aria-label for the conversation log. */\n \"aria-label\"?: string;\n}\n\n/**\n * MessageList wraps a stream of Messages in a polite live region so screen\n * readers announce new turns as they arrive.\n */\nexport const MessageList = forwardRef<HTMLDivElement, MessageListProps>(function MessageList(\n { className, children, \"aria-label\": ariaLabel = \"Chat conversation\", ...rest },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={[styles.list, className].filter(Boolean).join(\" \")}\n role=\"log\"\n aria-live=\"polite\"\n aria-label={ariaLabel}\n {...rest}\n >\n {children}\n </div>\n );\n});\n\nexport interface MessageSourceProps extends HTMLAttributes<HTMLDivElement> {\n icon?: ReactNode;\n children: ReactNode;\n}\n\nexport const MessageSource = forwardRef<HTMLDivElement, MessageSourceProps>(function MessageSource(\n { icon, children, className, ...rest },\n ref,\n) {\n return (\n <div ref={ref} className={[styles.source, className].filter(Boolean).join(\" \")} {...rest}>\n <span className={styles.sourceIc} aria-hidden=\"true\">{icon}</span>\n {children}\n </div>\n );\n});\n","import { forwardRef, useId, type HTMLAttributes, type ReactNode } from \"react\";\nimport styles from \"./AIAnatomy.module.css\";\n\nexport interface ModelBadgeProps extends HTMLAttributes<HTMLSpanElement> {\n dotColor?: string;\n children: ReactNode;\n}\n\nexport const ModelBadge = forwardRef<HTMLSpanElement, ModelBadgeProps>(function ModelBadge(\n { dotColor, children, className, ...rest },\n ref,\n) {\n return (\n <span ref={ref} className={[styles.model, className].filter(Boolean).join(\" \")} {...rest}>\n <span className={styles.modelDot} style={dotColor ? { background: dotColor } : undefined} />\n {children}\n </span>\n );\n});\n\nexport type ConfidenceLevel = \"low\" | \"medium\" | \"high\";\n\nexport interface ConfidencePipProps extends HTMLAttributes<HTMLSpanElement> {\n level: ConfidenceLevel;\n label?: ReactNode;\n}\n\nconst LEVEL_FILL: Record<ConfidenceLevel, number> = { low: 1, medium: 2, high: 3 };\n\nexport const ConfidencePip = forwardRef<HTMLSpanElement, ConfidencePipProps>(function ConfidencePip(\n { level, label, className, \"aria-label\": ariaLabelProp, ...rest },\n ref,\n) {\n const filled = LEVEL_FILL[level];\n const levelText = `${level[0]?.toUpperCase()}${level.slice(1)} confidence`;\n const resolvedAriaLabel =\n ariaLabelProp ??\n (typeof label === \"string\" ? label : `Confidence: ${levelText}`);\n return (\n <span\n ref={ref}\n className={[styles.confidence, styles[`conf-${level}`], className].filter(Boolean).join(\" \")}\n aria-label={resolvedAriaLabel}\n {...rest}\n >\n <span className={styles.confidencePip} aria-hidden=\"true\">\n {[0, 1, 2].map((i) => (\n <span key={i} className={i < filled ? \"\" : styles.dim} />\n ))}\n </span>\n {label ?? levelText}\n </span>\n );\n});\n\nexport interface ToolStepProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n status?: \"success\" | \"running\" | \"error\";\n title: ReactNode;\n meta?: ReactNode;\n children?: ReactNode;\n}\n\nexport const ToolStep = forwardRef<HTMLDivElement, ToolStepProps>(function ToolStep(\n { status = \"success\", title, meta, children, className, ...rest },\n ref,\n) {\n const titleId = useId();\n return (\n <div\n ref={ref}\n className={[styles.tool, className].filter(Boolean).join(\" \")}\n role=\"region\"\n aria-labelledby={titleId}\n {...rest}\n >\n <div className={styles.toolHead}>\n <span className={[styles.check, styles[`status-${status}`]].join(\" \")} aria-hidden=\"true\">\n {status === \"success\" ? \"✓\" : status === \"error\" ? \"✕\" : \"…\"}\n </span>\n <span id={titleId}>{title}</span>\n {meta ? <span className={styles.toolMeta}>{meta}</span> : null}\n </div>\n {children ? <div className={styles.toolBody}>{children}</div> : null}\n </div>\n );\n});\n\nexport function StreamingCaret() {\n return <span className={styles.caret} aria-hidden=\"true\" />;\n}\n\nexport interface MessageActionProps extends HTMLAttributes<HTMLButtonElement> {\n icon?: ReactNode;\n children: ReactNode;\n}\n\nexport const MessageAction = forwardRef<HTMLButtonElement, MessageActionProps>(function MessageAction(\n { icon, children, className, ...rest },\n ref,\n) {\n return (\n <button ref={ref} type=\"button\" className={[styles.act, className].filter(Boolean).join(\" \")} {...rest}>\n {icon ? <span className={styles.actIcon}>{icon}</span> : null}\n {children}\n </button>\n );\n});\n\nexport function MessageActions({ children }: { children: ReactNode }) {\n return <div className={styles.actions}>{children}</div>;\n}\n","import * as Popover from \"@radix-ui/react-popover\";\nimport { forwardRef, type ButtonHTMLAttributes, type ReactNode } from \"react\";\nimport styles from \"./Citation.module.css\";\n\nexport interface CitationPillProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> {\n n: number | string;\n ariaLabel?: string;\n}\n\nexport const CitationPill = forwardRef<HTMLButtonElement, CitationPillProps>(function CitationPill(\n { n, ariaLabel, className, ...rest },\n ref,\n) {\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label={ariaLabel ?? `Citation ${n}`}\n className={[styles.cite, className].filter(Boolean).join(\" \")}\n {...rest}\n >\n {n}\n </button>\n );\n});\n\nexport interface CitationProps {\n n: number | string;\n mime?: string;\n mimeColor?: string;\n title: ReactNode;\n loc?: ReactNode;\n snippet: ReactNode;\n children?: ReactNode;\n}\n\nexport function Citation({ n, mime = \"PDF\", mimeColor = \"#dc2626\", title, loc, snippet }: CitationProps) {\n return (\n <Popover.Root>\n <Popover.Trigger asChild>\n <CitationPill n={n} ariaLabel={`Citation ${n}, opens source preview`} />\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content className={styles.popover} side=\"bottom\" align=\"center\" sideOffset={8}>\n <div className={styles.head}>\n <span className={styles.ic} style={{ background: mimeColor }}>{mime}</span>\n <span className={styles.title}>{title}</span>\n {loc ? <span className={styles.loc}>{loc}</span> : null}\n </div>\n <div className={styles.snippet}>{snippet}</div>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n}\n","import { createElement, forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport styles from \"./EmptyState.module.css\";\nimport { resolveNode, type RichStr } from \"../Text/richstr\";\n\nexport type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;\n\nexport interface EmptyStateProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n illustration?: ReactNode;\n title: ReactNode | RichStr;\n /** Heading level for the title; defaults to 3. Set per page hierarchy. */\n titleLevel?: HeadingLevel;\n description?: ReactNode | RichStr;\n actions?: ReactNode;\n}\n\nexport const EmptyState = forwardRef<HTMLDivElement, EmptyStateProps>(function EmptyState(\n { illustration, title, titleLevel = 3, description, actions, className, ...rest },\n ref,\n) {\n return (\n <div ref={ref} className={[styles.stage, className].filter(Boolean).join(\" \")} {...rest}>\n {illustration ? (\n <div className={styles.illu} aria-hidden=\"true\">\n {illustration}\n </div>\n ) : null}\n {createElement(`h${titleLevel}`, { className: styles.title }, resolveNode(title))}\n {description ? <div className={styles.desc}>{resolveNode(description)}</div> : null}\n {actions ? <div className={styles.actions}>{actions}</div> : null}\n </div>\n );\n});\n","import {\n createElement,\n forwardRef,\n type CSSProperties,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from \"react\";\nimport styles from \"./Card.module.css\";\nimport { resolveNode, type RichStr } from \"../Text/richstr\";\nimport { resolveSpacing, type Spacing } from \"../spacing/padding\";\n\nexport type CardSurface = \"panel\" | \"inset\" | \"elevated\";\n/** Legacy class-backed padding steps (asymmetric vertical/horizontal px). */\nexport type CardPadding = \"none\" | \"sm\" | \"md\" | \"lg\";\nconst LEGACY_PADDING = new Set<string>([\"none\", \"sm\", \"md\", \"lg\"]);\nexport type CardBorder = \"none\" | \"dashed\" | \"solid\";\nexport type CardBorderColor = \"default\" | \"info\" | \"success\" | \"warning\" | \"error\";\nexport type CardRounding = \"xs\" | \"sm\" | \"md\" | \"lg\";\nexport type CardBackground = \"none\" | \"light\" | \"heavy\";\n\ninterface CardBaseProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n surface?: CardSurface;\n /**\n * Inner padding. The legacy keywords (`none`/`sm`/`md`/`lg`) keep their\n * established asymmetric spacing. Any other {@link PaddingVariant} keyword\n * (`xs`/`xl`/`2xl`/`fit`), a number (px), or a CSS length string applies\n * symmetric padding via inline style. Default: `\"md\"`.\n */\n padding?: CardPadding | Spacing;\n interactive?: boolean;\n asChild?: boolean;\n /** Border style override. Default: the surface's own border (solid). */\n border?: CardBorder;\n /** Border color from the status palette. No effect with `border=\"none\"`. */\n borderColor?: CardBorderColor;\n /** Corner rounding override. Default: the card's standard 12px radius. */\n rounding?: CardRounding;\n /**\n * Background fill override (Opal parity). `light` and `heavy` swap the card's\n * fill to a tinted surface; `none` makes it transparent. Default: undefined,\n * which preserves the surface's own background.\n */\n background?: CardBackground;\n}\n\ninterface CardPlainProps extends CardBaseProps {\n /** Plain card (default): children render inside a single styled div. */\n expandable?: false;\n}\n\ninterface CardExpandableProps extends CardBaseProps {\n /**\n * Expandable mode: `children` is the always-visible header,\n * `expandedContent` animates open and closed below it. Fully controlled —\n * the caller owns `expanded` and wires its own toggle.\n */\n expandable: true;\n /** Controlled expanded state. Default: false. */\n expanded?: boolean;\n /** Body rendered below the header, animating with `expanded`. */\n expandedContent?: ReactNode;\n /** Body height: `\"md\"` caps at 20rem with scroll, `\"fit\"` is natural height. Default: `\"md\"`. */\n expandableContentHeight?: \"md\" | \"fit\";\n}\n\nexport type CardProps = CardPlainProps | CardExpandableProps;\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(function Card(props, ref) {\n const {\n surface = \"panel\",\n padding = \"md\",\n interactive,\n border,\n borderColor,\n rounding,\n background,\n className,\n children,\n onClick,\n onKeyDown,\n role,\n tabIndex,\n } = props;\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n if (!interactive || !onClick || event.defaultPrevented) return;\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n onClick(event as unknown as Parameters<NonNullable<typeof onClick>>[0]);\n }\n };\n\n const interactiveProps = interactive\n ? {\n role: role ?? \"button\",\n tabIndex: tabIndex ?? 0,\n onKeyDown: handleKeyDown,\n }\n : { role, tabIndex, onKeyDown };\n\n // Legacy keywords keep their class-backed asymmetric padding; new variants /\n // numbers / arbitrary lengths apply symmetric padding via inline style on top\n // of a zero-padding base class.\n const isLegacyPadding = typeof padding === \"string\" && LEGACY_PADDING.has(padding);\n const padClass = isLegacyPadding ? styles[`pad-${padding}`] : styles[\"pad-none\"];\n const padStyle: CSSProperties | undefined = isLegacyPadding\n ? undefined\n : { padding: resolveSpacing(padding as Spacing) };\n\n const skinClasses = [\n styles.card,\n styles[`surface-${surface}`],\n padClass,\n interactive ? styles.interactive : null,\n border ? styles[`border-${border}`] : null,\n borderColor ? styles[`bc-${borderColor}`] : null,\n rounding ? styles[`round-${rounding}`] : null,\n background ? styles[`bg-${background}`] : null,\n ];\n\n if (!props.expandable) {\n const {\n surface: _s,\n padding: _p,\n interactive: _i,\n asChild: _a,\n border: _b,\n borderColor: _bc,\n rounding: _r,\n background: _bg,\n expandable: _e,\n className: _c,\n children: _ch,\n onClick: _oc,\n onKeyDown: _ok,\n role: _ro,\n tabIndex: _ti,\n style: styleProp,\n ...rest\n } = props;\n return (\n <div\n ref={ref}\n className={[...skinClasses, className].filter(Boolean).join(\" \")}\n style={padStyle ? { ...padStyle, ...styleProp } : styleProp}\n onClick={onClick}\n {...interactiveProps}\n {...rest}\n >\n {children}\n </div>\n );\n }\n\n // Expandable mode — header keeps the card skin; the body joins it seamlessly\n // (top rounding on header, bottom rounding on body) while expanded.\n const { expanded = false, expandedContent, expandableContentHeight = \"md\" } = props;\n const showContent = expanded && expandedContent !== undefined;\n\n return (\n <div ref={ref} className={[styles.expandableRoot, className].filter(Boolean).join(\" \")}>\n <div\n className={[\n ...skinClasses,\n styles.expandableHeader,\n showContent ? styles[`roundTop-${rounding ?? \"md\"}`] : null,\n ]\n .filter(Boolean)\n .join(\" \")}\n style={padStyle}\n onClick={onClick}\n {...interactiveProps}\n >\n {children}\n </div>\n {expandedContent !== undefined && (\n <div className={styles.expandWrapper} data-expanded={showContent ? \"true\" : \"false\"}>\n <div className={styles.expandInner}>\n <div\n className={[\n styles.expandBody,\n styles[`roundBottom-${rounding ?? \"md\"}`],\n border ? styles[`border-${border}`] : styles[\"border-solid\"],\n borderColor ? styles[`bc-${borderColor}`] : null,\n expandableContentHeight === \"md\" ? styles.expandBodyCapped : null,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {expandedContent}\n </div>\n </div>\n </div>\n )}\n </div>\n );\n});\n\nexport type CardHeaderTitleLevel = 1 | 2 | 3 | 4 | 5 | 6;\n\nexport interface CardHeaderProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n title?: ReactNode | RichStr;\n titleLevel?: CardHeaderTitleLevel;\n description?: ReactNode | RichStr;\n actions?: ReactNode;\n}\n\nexport const CardHeader = forwardRef<HTMLDivElement, CardHeaderProps>(function CardHeader(\n { title, titleLevel = 3, description, actions, children, className, ...rest },\n ref,\n) {\n return (\n <div ref={ref} className={[styles.header, className].filter(Boolean).join(\" \")} {...rest}>\n <div className={styles.headerText}>\n {title\n ? createElement(`h${titleLevel}`, { className: styles.title }, resolveNode(title))\n : null}\n {description ? <div className={styles.description}>{resolveNode(description)}</div> : null}\n {children}\n </div>\n {actions ? <div className={styles.headerActions}>{actions}</div> : null}\n </div>\n );\n});\n\nexport const CardBody = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n function CardBody({ className, ...rest }, ref) {\n return (\n <div ref={ref} className={[styles.body, className].filter(Boolean).join(\" \")} {...rest} />\n );\n },\n);\n\nexport const CardFooter = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n function CardFooter({ className, ...rest }, ref) {\n return (\n <div ref={ref} className={[styles.footer, className].filter(Boolean).join(\" \")} {...rest} />\n );\n },\n);\n\nexport interface CardTitleProps extends HTMLAttributes<HTMLHeadingElement> {\n /** Heading level rendered. Default: 3. */\n level?: CardHeaderTitleLevel;\n}\n\n/**\n * Standalone card title. Use inside `CardHeader` (or anywhere a card heading is\n * needed) when you need to forward `className`/`ref` — the `CardHeader title=`\n * prop does not. Renders `h{level}` carrying the shared `.title` token style.\n */\nexport const CardTitle = forwardRef<HTMLHeadingElement, CardTitleProps>(function CardTitle(\n { level = 3, className, children, ...rest },\n ref,\n) {\n return createElement(\n `h${level}`,\n { ref, className: [styles.title, className].filter(Boolean).join(\" \"), ...rest },\n children,\n );\n});\n\n/**\n * Standalone card description (className/ref-forwarding counterpart to the\n * `CardHeader description=` prop).\n */\nexport const CardDescription = forwardRef<\n HTMLParagraphElement,\n HTMLAttributes<HTMLParagraphElement>\n>(function CardDescription({ className, ...rest }, ref) {\n return (\n <p ref={ref} className={[styles.description, className].filter(Boolean).join(\" \")} {...rest} />\n );\n});\n","import { forwardRef, type AnchorHTMLAttributes, type ReactNode } from \"react\";\nimport styles from \"./SkipLink.module.css\";\n\nexport interface SkipLinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {\n /** Anchor target, e.g. `#main-content`. */\n href: string;\n children: ReactNode;\n}\n\n/**\n * SkipLink renders an anchor that is visually hidden until focused, then\n * jumps the keyboard user past chrome (rail, header, banners) to the target.\n *\n * Place as the first focusable element inside `<body>`. The destination\n * should be focusable (typically `<main id=\"main-content\" tabIndex={-1}>`).\n *\n * Accessibility:\n * - Visible only on `:focus-visible`, ≥ 2 px outline + 2 px offset.\n * - Honors `prefers-reduced-motion` (slide-in collapses to instant).\n */\nexport const SkipLink = forwardRef<HTMLAnchorElement, SkipLinkProps>(function SkipLink(\n { href, children, className, ...rest },\n ref,\n) {\n return (\n <a\n ref={ref}\n href={href}\n className={[styles.link, className].filter(Boolean).join(\" \")}\n {...rest}\n >\n {children}\n </a>\n );\n});\n","import { forwardRef, type CSSProperties, type HTMLAttributes } from \"react\";\n\nexport interface AspectRatioProps extends HTMLAttributes<HTMLDivElement> {\n /** Ratio of width to height. Default 16/9. Example: `1`, `4/3`, `21/9`. */\n ratio?: number;\n}\n\nexport const AspectRatio = forwardRef<HTMLDivElement, AspectRatioProps>(function AspectRatio(\n { ratio = 16 / 9, style, children, ...rest },\n ref,\n) {\n const wrap: CSSProperties = {\n position: \"relative\",\n width: \"100%\",\n aspectRatio: String(ratio),\n ...style,\n };\n return (\n <div ref={ref} style={wrap} {...rest}>\n <div style={{ position: \"absolute\", inset: 0 }}>{children}</div>\n </div>\n );\n});\n","import { forwardRef, type CSSProperties, type ElementType, type HTMLAttributes } from \"react\";\n\nexport type ContainerSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n\nconst SIZE_MAX: Record<ContainerSize, string | number> = {\n sm: 640,\n md: 800,\n lg: 1024,\n xl: 1280,\n full: \"100%\",\n};\n\nexport interface ContainerProps extends HTMLAttributes<HTMLElement> {\n size?: ContainerSize;\n /** Horizontal padding in px. Default 24. */\n paddingX?: number | string;\n as?: ElementType;\n}\n\nexport const Container = forwardRef<HTMLElement, ContainerProps>(function Container(\n { size = \"lg\", paddingX = 24, as, style, children, ...rest },\n ref,\n) {\n const Tag = (as ?? \"div\") as ElementType;\n const maxWidth = SIZE_MAX[size];\n const css: CSSProperties = {\n width: \"100%\",\n maxWidth: typeof maxWidth === \"number\" ? `${maxWidth}px` : maxWidth,\n marginInline: \"auto\",\n paddingInline: typeof paddingX === \"number\" ? `${paddingX}px` : paddingX,\n ...style,\n };\n return (\n <Tag ref={ref as never} style={css} {...rest}>\n {children}\n </Tag>\n );\n});\n","import { forwardRef, type CSSProperties, type ElementType, type HTMLAttributes } from \"react\";\n\nexport interface GridProps extends HTMLAttributes<HTMLElement> {\n /** Explicit number of columns. Mutually exclusive with `minColumnWidth`. */\n columns?: number;\n /** Auto-fit columns to a minimum width using `auto-fit minmax(min, 1fr)`. */\n minColumnWidth?: number | string;\n gap?: number | string;\n rowGap?: number | string;\n columnGap?: number | string;\n as?: ElementType;\n}\n\nfunction px(v: number | string | undefined): string | undefined {\n if (v === undefined) return undefined;\n return typeof v === \"number\" ? `${v}px` : v;\n}\n\nexport const Grid = forwardRef<HTMLElement, GridProps>(function Grid(\n { columns, minColumnWidth, gap = 16, rowGap, columnGap, as, style, children, ...rest },\n ref,\n) {\n const Tag = (as ?? \"div\") as ElementType;\n let template: string;\n if (minColumnWidth !== undefined) {\n const min = typeof minColumnWidth === \"number\" ? `${minColumnWidth}px` : minColumnWidth;\n template = `repeat(auto-fit, minmax(${min}, 1fr))`;\n } else if (columns !== undefined) {\n template = `repeat(${columns}, minmax(0, 1fr))`;\n } else {\n template = \"repeat(12, minmax(0, 1fr))\";\n }\n const css: CSSProperties = {\n display: \"grid\",\n gridTemplateColumns: template,\n gap: px(gap),\n rowGap: px(rowGap),\n columnGap: px(columnGap),\n ...style,\n };\n return (\n <Tag ref={ref as never} style={css} {...rest}>\n {children}\n </Tag>\n );\n});\n\nexport interface GridItemProps extends HTMLAttributes<HTMLDivElement> {\n /** Column span (1-12 typical). */\n span?: number;\n /** Column start index. */\n start?: number;\n}\n\nexport const GridItem = forwardRef<HTMLDivElement, GridItemProps>(function GridItem(\n { span, start, style, children, ...rest },\n ref,\n) {\n const css: CSSProperties = {\n gridColumn: span && start ? `${start} / span ${span}` : span ? `span ${span}` : undefined,\n ...style,\n };\n return (\n <div ref={ref} style={css} {...rest}>\n {children}\n </div>\n );\n});\n","import {\n Children,\n cloneElement,\n forwardRef,\n isValidElement,\n type HTMLAttributes,\n type ReactElement,\n} from \"react\";\nimport { Avatar, type AvatarSize } from \"../Avatar\";\nimport styles from \"./AvatarGroup.module.css\";\n\nexport interface AvatarGroupProps extends HTMLAttributes<HTMLDivElement> {\n size?: AvatarSize;\n /** Max avatars to render. Extras collapsed into a `+N` chip. */\n max?: number;\n /** Direction of stacking. Default: rightmost on top. */\n direction?: \"start\" | \"end\";\n}\n\nconst SIZE_PX: Record<AvatarSize, number> = { xs: 20, sm: 24, md: 32, lg: 40 };\nconst OVERLAP: Record<AvatarSize, number> = { xs: 6, sm: 8, md: 10, lg: 12 };\n\nexport const AvatarGroup = forwardRef<HTMLDivElement, AvatarGroupProps>(function AvatarGroup(\n { size = \"md\", max, direction = \"end\", className, children, ...rest },\n ref,\n) {\n const items = Children.toArray(children).filter(isValidElement) as ReactElement[];\n const visible = max ? items.slice(0, max) : items;\n const remaining = max && items.length > max ? items.length - max : 0;\n const overlap = OVERLAP[size];\n const dim = SIZE_PX[size];\n\n return (\n <div\n ref={ref}\n className={[\n styles.root,\n direction === \"start\" ? styles.start : null,\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n style={{ [\"--sds-avatar-overlap\" as string]: `${overlap}px` }}\n {...rest}\n >\n {visible.map((child, i) => {\n const childProps = child.props as { size?: AvatarSize; className?: string };\n return cloneElement(child as ReactElement<{ size?: AvatarSize; className?: string }>, {\n key: i,\n size: childProps.size ?? size,\n className: [styles.item, childProps.className].filter(Boolean).join(\" \"),\n });\n })}\n {remaining > 0 ? (\n <Avatar\n size={size}\n aria-label={`${remaining} more`}\n className={[styles.item, styles.extra].join(\" \")}\n style={{ width: dim, height: dim }}\n >\n +{remaining}\n </Avatar>\n ) : null}\n </div>\n );\n});\n","import { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport styles from \"./DescriptionList.module.css\";\n\nexport type DescriptionListOrientation = \"horizontal\" | \"vertical\";\n\nexport interface DescriptionListProps extends HTMLAttributes<HTMLDListElement> {\n orientation?: DescriptionListOrientation;\n /** Add hairline dividers between rows. Default true for horizontal. */\n dividers?: boolean;\n}\n\nexport const DescriptionList = forwardRef<HTMLDListElement, DescriptionListProps>(\n function DescriptionList(\n { orientation = \"horizontal\", dividers, className, children, ...rest },\n ref,\n ) {\n const showDividers = dividers ?? orientation === \"horizontal\";\n return (\n <dl\n ref={ref}\n className={[\n styles.root,\n styles[`orient-${orientation}`],\n showDividers ? styles.dividers : null,\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n {...rest}\n >\n {children}\n </dl>\n );\n },\n);\n\nexport interface DescriptionItemProps extends HTMLAttributes<HTMLDivElement> {\n term: ReactNode;\n children: ReactNode;\n}\n\nexport const DescriptionItem = forwardRef<HTMLDivElement, DescriptionItemProps>(\n function DescriptionItem({ term, children, className, ...rest }, ref) {\n return (\n <div\n ref={ref}\n className={[styles.row, className].filter(Boolean).join(\" \")}\n {...rest}\n >\n <dt className={styles.term}>{term}</dt>\n <dd className={styles.desc}>{children}</dd>\n </div>\n );\n },\n);\n","import { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport styles from \"./Stat.module.css\";\nimport { resolveNode, type RichStr } from \"../Text/richstr\";\n\nexport type StatTrend = \"up\" | \"down\" | \"flat\";\nexport type StatTone = \"neutral\" | \"positive\" | \"negative\";\n\nexport interface StatProps extends HTMLAttributes<HTMLDivElement> {\n label: ReactNode | RichStr;\n value: ReactNode;\n /** Sub-value or unit suffix. */\n unit?: ReactNode;\n /** Change delta (e.g. \"+12%\"). */\n delta?: ReactNode;\n trend?: StatTrend;\n /** Tone for the delta chip. If omitted, derives from trend. */\n deltaTone?: StatTone;\n /** Optional helper text below the value. */\n description?: ReactNode | RichStr;\n /** Optional icon rendered top-left. */\n icon?: ReactNode;\n /** Render inside a card surface. Default true. */\n bordered?: boolean;\n}\n\nconst TrendIcon = ({ trend }: { trend: StatTrend }) => {\n if (trend === \"up\") {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"6 15 12 9 18 15\" />\n </svg>\n );\n }\n if (trend === \"down\") {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n );\n }\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n );\n};\n\nfunction deriveTone(trend?: StatTrend): StatTone {\n if (trend === \"up\") return \"positive\";\n if (trend === \"down\") return \"negative\";\n return \"neutral\";\n}\n\nexport const Stat = forwardRef<HTMLDivElement, StatProps>(function Stat(\n {\n label,\n value,\n unit,\n delta,\n trend,\n deltaTone,\n description,\n icon,\n bordered = true,\n className,\n ...rest\n },\n ref,\n) {\n const tone = deltaTone ?? deriveTone(trend);\n return (\n <div\n ref={ref}\n className={[styles.root, bordered ? styles.bordered : null, className]\n .filter(Boolean)\n .join(\" \")}\n {...rest}\n >\n <div className={styles.head}>\n {icon ? (\n <span className={styles.icon} aria-hidden=\"true\">\n {icon}\n </span>\n ) : null}\n <span className={styles.label}>{resolveNode(label)}</span>\n </div>\n <div className={styles.valueRow}>\n <span className={styles.value}>\n {value}\n {unit ? <span className={styles.unit}>{unit}</span> : null}\n </span>\n {delta !== undefined ? (\n <span className={[styles.delta, styles[`tone-${tone}`]].join(\" \")}>\n {trend ? <TrendIcon trend={trend} /> : null}\n <span>{delta}</span>\n </span>\n ) : null}\n </div>\n {description ? <div className={styles.description}>{resolveNode(description)}</div> : null}\n </div>\n );\n});\n","import { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport styles from \"./Timeline.module.css\";\n\nexport type TimelineStatus =\n | \"default\"\n | \"info\"\n | \"success\"\n | \"warning\"\n | \"error\"\n | \"pending\";\n\nexport interface TimelineProps extends HTMLAttributes<HTMLOListElement> {\n /** Connect items with a vertical rule. Default true. */\n connector?: boolean;\n}\n\nexport const Timeline = forwardRef<HTMLOListElement, TimelineProps>(function Timeline(\n { connector = true, className, children, ...rest },\n ref,\n) {\n return (\n <ol\n ref={ref}\n className={[\n styles.root,\n connector ? styles.connected : null,\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n {...rest}\n >\n {children}\n </ol>\n );\n});\n\nexport interface TimelineItemProps extends Omit<HTMLAttributes<HTMLLIElement>, \"title\"> {\n status?: TimelineStatus;\n /** Optional icon override; defaults to a dot. */\n icon?: ReactNode;\n /** Right-aligned timestamp / meta label. */\n meta?: ReactNode;\n title: ReactNode;\n}\n\nexport const TimelineItem = forwardRef<HTMLLIElement, TimelineItemProps>(function TimelineItem(\n { status = \"default\", icon, meta, title, className, children, ...rest },\n ref,\n) {\n return (\n <li\n ref={ref}\n className={[styles.item, styles[`status-${status}`], className].filter(Boolean).join(\" \")}\n {...rest}\n >\n <span className={styles.marker} aria-hidden=\"true\">\n {icon ?? <span className={styles.dot} />}\n </span>\n <div className={styles.body}>\n <div className={styles.head}>\n <span className={styles.title}>{title}</span>\n {meta ? <span className={styles.meta}>{meta}</span> : null}\n </div>\n {children ? <div className={styles.content}>{children}</div> : null}\n </div>\n </li>\n );\n});\n","import {\n forwardRef,\n useId,\n type HTMLAttributes,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type ReactNode,\n} from \"react\";\nimport styles from \"./List.module.css\";\nimport { resolveNode, type RichStr } from \"../Text/richstr\";\n\nexport interface ListProps extends HTMLAttributes<HTMLUListElement> {\n /** Hairline dividers between items. Default true. */\n dividers?: boolean;\n /** Wrap in a bordered panel surface. Default true. */\n bordered?: boolean;\n /** Compact row padding. */\n density?: \"compact\" | \"cozy\" | \"comfortable\";\n}\n\nexport const List = forwardRef<HTMLUListElement, ListProps>(function List(\n { dividers = true, bordered = true, density = \"cozy\", className, children, ...rest },\n ref,\n) {\n return (\n <ul\n ref={ref}\n className={[\n styles.root,\n bordered ? styles.bordered : null,\n dividers ? styles.dividers : null,\n styles[`density-${density}`],\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n {...rest}\n >\n {children}\n </ul>\n );\n});\n\nexport interface ListItemProps extends Omit<HTMLAttributes<HTMLLIElement>, \"title\"> {\n /** Left slot — avatar, icon. */\n leading?: ReactNode;\n /** Right slot — meta, status, action. */\n trailing?: ReactNode;\n /** Primary text. */\n title?: ReactNode | RichStr;\n /** Secondary text under title. */\n description?: ReactNode | RichStr;\n /** Make the row clickable (renders role=button + keyboard handler). */\n interactive?: boolean;\n /** Selected/active styling. */\n active?: boolean;\n}\n\nexport const ListItem = forwardRef<HTMLLIElement, ListItemProps>(function ListItem(\n {\n leading,\n trailing,\n title,\n description,\n interactive,\n active,\n className,\n children,\n onClick,\n onKeyDown,\n role,\n tabIndex,\n \"aria-current\": ariaCurrent,\n \"aria-label\": ariaLabel,\n ...rest\n },\n ref,\n) {\n // The row stays a plain listitem so the <ul> keeps a valid list structure.\n // When interactive, an absolutely-positioned transparent <button> overlays the\n // row as a sibling (never an ancestor) of the trailing slot. This keeps any\n // actions consumers drop into `trailing` out of the button's subtree, so the\n // primary row action and those actions never nest. Native button gives Enter +\n // Space activation for free.\n const titleId = useId();\n\n if (interactive) {\n // Overlay button has no text child; label it from the visible title when\n // present, else fall back to a caller-provided aria-label.\n const labelProps = title\n ? { \"aria-labelledby\": titleId }\n : ariaLabel\n ? { \"aria-label\": ariaLabel }\n : {};\n return (\n <li\n ref={ref}\n className={[styles.item, styles.interactive, active ? styles.active : null, className]\n .filter(Boolean)\n .join(\" \")}\n {...rest}\n >\n <button\n type=\"button\"\n className={styles.overlay}\n // Handlers are typed against the <li> in ListItemProps; the overlay\n // button receives them instead. Same DOM events at runtime.\n onClick={onClick as MouseEventHandler<HTMLElement> as MouseEventHandler<HTMLButtonElement>}\n onKeyDown={onKeyDown as KeyboardEventHandler<HTMLElement> as KeyboardEventHandler<HTMLButtonElement>}\n tabIndex={tabIndex}\n aria-current={ariaCurrent}\n {...labelProps}\n />\n {leading ? <span className={styles.leading}>{leading}</span> : null}\n <div className={styles.body}>\n {title ? (\n <span id={titleId} className={styles.title}>\n {resolveNode(title)}\n </span>\n ) : null}\n {description ? (\n <span className={styles.description}>{resolveNode(description)}</span>\n ) : null}\n {children}\n </div>\n {trailing ? <span className={styles.trailing}>{trailing}</span> : null}\n </li>\n );\n }\n\n return (\n <li\n ref={ref}\n className={[styles.item, active ? styles.active : null, className].filter(Boolean).join(\" \")}\n onClick={onClick}\n onKeyDown={onKeyDown}\n role={role}\n tabIndex={tabIndex}\n aria-current={ariaCurrent}\n aria-label={ariaLabel}\n {...rest}\n >\n {leading ? <span className={styles.leading}>{leading}</span> : null}\n <div className={styles.body}>\n {title ? <span className={styles.title}>{resolveNode(title)}</span> : null}\n {description ? (\n <span className={styles.description}>{resolveNode(description)}</span>\n ) : null}\n {children}\n </div>\n {trailing ? <span className={styles.trailing}>{trailing}</span> : null}\n </li>\n );\n});\n","import {\n forwardRef,\n useCallback,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport styles from \"./Tree.module.css\";\n\nexport interface TreeNode {\n id: string;\n label: ReactNode;\n icon?: ReactNode;\n meta?: ReactNode;\n children?: TreeNode[];\n disabled?: boolean;\n}\n\nexport interface TreeProps extends Omit<HTMLAttributes<HTMLUListElement>, \"onSelect\"> {\n data: TreeNode[];\n /** Controlled expanded set. */\n expanded?: Set<string>;\n /** Default expanded ids (uncontrolled). */\n defaultExpanded?: string[];\n onExpandedChange?: (next: Set<string>) => void;\n /** Controlled selected node id. */\n selectedId?: string | null;\n onSelect?: (id: string) => void;\n /** Aria label for the tree. */\n \"aria-label\"?: string;\n}\n\nconst ChevronIcon = ({ open }: { open: boolean }) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.8}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n style={{\n transform: open ? \"rotate(90deg)\" : \"rotate(0deg)\",\n transition: \"transform 120ms ease-out\",\n }}\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n);\n\ninterface NodeProps {\n node: TreeNode;\n depth: number;\n expanded: Set<string>;\n selectedId: string | null | undefined;\n onToggle: (id: string) => void;\n onSelect: (id: string) => void;\n}\n\nfunction TreeNodeRow({ node, depth, expanded, selectedId, onToggle, onSelect }: NodeProps) {\n const hasChildren = !!node.children && node.children.length > 0;\n const isOpen = expanded.has(node.id);\n const isSelected = selectedId === node.id;\n\n const handleKey = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (node.disabled) return;\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onSelect(node.id);\n } else if (e.key === \"ArrowRight\" && hasChildren && !isOpen) {\n e.preventDefault();\n onToggle(node.id);\n } else if (e.key === \"ArrowLeft\" && hasChildren && isOpen) {\n e.preventDefault();\n onToggle(node.id);\n }\n };\n\n return (\n <li\n role=\"treeitem\"\n aria-expanded={hasChildren ? isOpen : undefined}\n aria-selected={isSelected || undefined}\n aria-disabled={node.disabled || undefined}\n className={styles.itemWrap}\n >\n <div\n className={[\n styles.row,\n isSelected ? styles.selected : null,\n node.disabled ? styles.disabled : null,\n ]\n .filter(Boolean)\n .join(\" \")}\n style={{ paddingLeft: 8 + depth * 16 }}\n tabIndex={node.disabled ? -1 : 0}\n onClick={() => !node.disabled && onSelect(node.id)}\n onKeyDown={handleKey}\n >\n {hasChildren ? (\n <button\n type=\"button\"\n className={styles.toggle}\n aria-label={isOpen ? \"Collapse\" : \"Expand\"}\n tabIndex={-1}\n onClick={(e) => {\n e.stopPropagation();\n onToggle(node.id);\n }}\n >\n <ChevronIcon open={isOpen} />\n </button>\n ) : (\n <span className={styles.toggleSpacer} aria-hidden=\"true\" />\n )}\n {node.icon ? <span className={styles.icon} aria-hidden=\"true\">{node.icon}</span> : null}\n <span className={styles.label}>{node.label}</span>\n {node.meta ? <span className={styles.meta}>{node.meta}</span> : null}\n </div>\n {hasChildren && isOpen ? (\n <ul role=\"group\" className={styles.group}>\n {node.children!.map((c) => (\n <TreeNodeRow\n key={c.id}\n node={c}\n depth={depth + 1}\n expanded={expanded}\n selectedId={selectedId}\n onToggle={onToggle}\n onSelect={onSelect}\n />\n ))}\n </ul>\n ) : null}\n </li>\n );\n}\n\nexport const Tree = forwardRef<HTMLUListElement, TreeProps>(function Tree(\n {\n data,\n expanded,\n defaultExpanded,\n onExpandedChange,\n selectedId,\n onSelect,\n className,\n \"aria-label\": ariaLabel = \"Tree\",\n ...rest\n },\n ref,\n) {\n const controlled = expanded !== undefined;\n const [internal, setInternal] = useState<Set<string>>(\n () => new Set(defaultExpanded ?? []),\n );\n const current = controlled ? expanded! : internal;\n\n const onToggle = useCallback(\n (id: string) => {\n const next = new Set(current);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n if (!controlled) setInternal(next);\n onExpandedChange?.(next);\n },\n [current, controlled, onExpandedChange],\n );\n\n const handleSelect = useCallback(\n (id: string) => {\n onSelect?.(id);\n },\n [onSelect],\n );\n\n return (\n <ul\n ref={ref}\n role=\"tree\"\n aria-label={ariaLabel}\n className={[styles.root, className].filter(Boolean).join(\" \")}\n {...rest}\n >\n {data.map((n) => (\n <TreeNodeRow\n key={n.id}\n node={n}\n depth={0}\n expanded={current}\n selectedId={selectedId}\n onToggle={onToggle}\n onSelect={handleSelect}\n />\n ))}\n </ul>\n );\n});\n","/**\n * NumberInput\n *\n * Locale-aware numeric input with +/- stepper buttons. Wraps a text input with\n * `inputMode=\"decimal\"` so mobile keyboards present the right keypad without\n * the browser-native spinner. Formatting goes through `Intl.NumberFormat`.\n *\n * Accessibility note: stepper buttons get `aria-label` text. The text input\n * itself takes ARIA from the standard Input pattern (label, hint, error).\n */\nimport {\n forwardRef,\n useCallback,\n useId,\n useMemo,\n useRef,\n useState,\n type FocusEvent,\n type InputHTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from \"react\";\nimport { SvgPlus } from \"../../icons\";\nimport styles from \"./NumberInput.module.css\";\n\ntype BaseInputProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"size\" | \"type\" | \"value\" | \"defaultValue\" | \"onChange\" | \"min\" | \"max\" | \"step\" | \"prefix\"\n>;\n\nexport interface NumberInputProps extends BaseInputProps {\n value?: number | null;\n defaultValue?: number | null;\n onChange?: (next: number | null) => void;\n min?: number;\n max?: number;\n /** Increment per stepper / arrow key. Default 1. */\n step?: number;\n /** Number of fraction digits to format with. Defaults to inferring from `step`. */\n precision?: number;\n label?: string;\n hint?: string;\n error?: string;\n /** Static text shown before the number (e.g. \"$\"). */\n prefix?: ReactNode;\n /** Static text shown after the number (e.g. \"kg\"). */\n suffix?: ReactNode;\n /** BCP 47 locale used by `Intl.NumberFormat`. Default \"en-US\". */\n locale?: string;\n disabled?: boolean;\n /** Accessible label for the decrement button. */\n decrementLabel?: string;\n /** Accessible label for the increment button. */\n incrementLabel?: string;\n}\n\nfunction inferPrecision(step: number): number {\n if (!Number.isFinite(step)) return 0;\n const s = String(step);\n const dot = s.indexOf(\".\");\n return dot >= 0 ? s.length - dot - 1 : 0;\n}\n\nfunction clamp(n: number, min: number | undefined, max: number | undefined): number {\n let out = n;\n if (typeof min === \"number\" && out < min) out = min;\n if (typeof max === \"number\" && out > max) out = max;\n return out;\n}\n\nfunction roundTo(n: number, precision: number): number {\n if (!Number.isFinite(n)) return n;\n const f = 10 ** precision;\n return Math.round(n * f) / f;\n}\n\nexport const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(function NumberInput(\n {\n value,\n defaultValue,\n onChange,\n min,\n max,\n step = 1,\n precision,\n label,\n hint,\n error,\n prefix,\n suffix,\n locale = \"en-US\",\n disabled,\n decrementLabel = \"Decrement\",\n incrementLabel = \"Increment\",\n id,\n className,\n required,\n onBlur,\n onKeyDown,\n placeholder,\n ...rest\n },\n ref,\n) {\n const autoId = useId();\n const inputId = id ?? autoId;\n const hintId = `${inputId}-hint`;\n const errorId = `${inputId}-error`;\n const describedBy =\n [error ? errorId : null, hint && !error ? hintId : null].filter(Boolean).join(\" \") || undefined;\n\n const controlled = value !== undefined;\n const resolvedPrecision = useMemo(\n () => (typeof precision === \"number\" ? precision : inferPrecision(step)),\n [precision, step],\n );\n\n const formatter = useMemo(\n () =>\n new Intl.NumberFormat(locale, {\n minimumFractionDigits: 0,\n maximumFractionDigits: Math.max(resolvedPrecision, 0),\n useGrouping: false,\n }),\n [locale, resolvedPrecision],\n );\n\n const formatNumber = useCallback(\n (n: number | null | undefined): string => {\n if (n === null || n === undefined || Number.isNaN(n)) return \"\";\n return formatter.format(n);\n },\n [formatter],\n );\n\n const [internalValue, setInternalValue] = useState<number | null>(defaultValue ?? null);\n const numeric = controlled ? (value ?? null) : internalValue;\n\n // The visible text. Tracked locally so users can type intermediate values\n // (a lone \"-\", \"1.\", \".5\") without losing them on each keystroke.\n const [text, setText] = useState<string>(() => formatNumber(numeric));\n const lastFormattedFor = useRef<number | null>(numeric);\n if (lastFormattedFor.current !== numeric) {\n lastFormattedFor.current = numeric;\n setText(formatNumber(numeric));\n }\n\n const commitValue = useCallback(\n (next: number | null) => {\n if (!controlled) setInternalValue(next);\n onChange?.(next);\n },\n [controlled, onChange],\n );\n\n const parseAndCommit = useCallback(\n (raw: string): number | null => {\n const trimmed = raw.trim();\n if (trimmed === \"\" || trimmed === \"-\") {\n commitValue(null);\n return null;\n }\n // Strip grouping separators that match the locale, normalise decimal sep.\n const parts = new Intl.NumberFormat(locale).formatToParts(12345.6);\n const group = parts.find((p) => p.type === \"group\")?.value ?? \",\";\n const decimal = parts.find((p) => p.type === \"decimal\")?.value ?? \".\";\n const normalised = trimmed\n .split(group)\n .join(\"\")\n .replace(decimal, \".\");\n const n = Number(normalised);\n if (!Number.isFinite(n)) {\n commitValue(null);\n return null;\n }\n const clamped = roundTo(clamp(n, min, max), resolvedPrecision);\n commitValue(clamped);\n return clamped;\n },\n [commitValue, locale, max, min, resolvedPrecision],\n );\n\n const adjust = (multiplier: number) => {\n if (disabled) return;\n const base = numeric ?? 0;\n const next = roundTo(clamp(base + step * multiplier, min, max), resolvedPrecision);\n commitValue(next);\n setText(formatNumber(next));\n lastFormattedFor.current = next;\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n const mult = e.shiftKey ? 10 : 1;\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n adjust(mult);\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault();\n adjust(-mult);\n } else if (e.key === \"Enter\") {\n const next = parseAndCommit(text);\n setText(formatNumber(next));\n lastFormattedFor.current = next;\n }\n onKeyDown?.(e);\n };\n\n const handleBlur = (e: FocusEvent<HTMLInputElement>) => {\n const next = parseAndCommit(text);\n setText(formatNumber(next));\n lastFormattedFor.current = next;\n onBlur?.(e);\n };\n\n const decrementDisabled =\n disabled || (typeof min === \"number\" && (numeric ?? min) <= min);\n const incrementDisabled =\n disabled || (typeof max === \"number\" && (numeric ?? max) >= max);\n\n return (\n <div className={[styles.wrapper, className].filter(Boolean).join(\" \")}>\n {label ? (\n <label htmlFor={inputId} className={styles.label}>\n {label}\n </label>\n ) : null}\n <div className={[styles.field, error ? styles[\"field-error\"] : null].filter(Boolean).join(\" \")}>\n <button\n type=\"button\"\n className={styles.stepper}\n onClick={() => adjust(-1)}\n disabled={decrementDisabled}\n aria-label={decrementLabel}\n tabIndex={-1}\n >\n <span aria-hidden=\"true\" className={styles.minus}>\n −\n </span>\n </button>\n {prefix ? <span className={styles.affix}>{prefix}</span> : null}\n <input\n ref={ref}\n id={inputId}\n type=\"text\"\n inputMode=\"decimal\"\n autoComplete=\"off\"\n className={styles.input}\n value={text}\n placeholder={placeholder}\n disabled={disabled}\n required={required}\n aria-invalid={error ? true : undefined}\n aria-describedby={describedBy}\n role=\"spinbutton\"\n aria-valuenow={numeric ?? undefined}\n aria-valuemin={min}\n aria-valuemax={max}\n onChange={(e) => setText(e.target.value)}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n {...rest}\n />\n {suffix ? <span className={styles.affix}>{suffix}</span> : null}\n <button\n type=\"button\"\n className={styles.stepper}\n onClick={() => adjust(1)}\n disabled={incrementDisabled}\n aria-label={incrementLabel}\n tabIndex={-1}\n >\n <SvgPlus aria-hidden=\"true\" width={14} height={14} />\n </button>\n </div>\n {error ? (\n <span id={errorId} className={styles.error}>\n {error}\n </span>\n ) : hint ? (\n <span id={hintId} className={styles.hint}>\n {hint}\n </span>\n ) : null}\n </div>\n );\n});\n","/**\n * FileInput\n *\n * Drag-and-drop dropzone. Renders a dashed-border drop area with the paperclip\n * icon, accepts files via either drop or the hidden `<input type=\"file\">`,\n * and shows accepted files as ContextChip(kind=\"file\") below.\n *\n * Validation (size, count, accept) happens locally. Rejected files are dropped\n * silently from the emitted array; callers wanting reasons should validate\n * upstream and pass `error` for messaging.\n */\nimport {\n forwardRef,\n useCallback,\n useId,\n useRef,\n useState,\n type DragEvent,\n type InputHTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { SvgPaperclip } from \"../../icons\";\nimport { ContextChip } from \"../ContextChip\";\nimport styles from \"./FileInput.module.css\";\n\ntype BaseProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"onChange\" | \"value\" | \"defaultValue\" | \"size\"\n>;\n\nexport interface FileInputProps extends BaseProps {\n /** MIME types or extensions, forwarded to the hidden file input. */\n accept?: string;\n multiple?: boolean;\n /** Hard cap on the number of files retained. Extras are dropped. */\n maxFiles?: number;\n /** Hard cap on individual file size (bytes). Larger files are dropped. */\n maxSize?: number;\n disabled?: boolean;\n label?: string;\n hint?: string;\n error?: string;\n /** Override the default body text inside the drop area. */\n children?: ReactNode;\n onFiles?: (files: File[]) => void;\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;\n}\n\nfunction matchesAccept(file: File, accept?: string): boolean {\n if (!accept) return true;\n const items = accept\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean);\n if (items.length === 0) return true;\n const name = file.name.toLowerCase();\n const type = file.type.toLowerCase();\n return items.some((it) => {\n const i = it.toLowerCase();\n if (i.startsWith(\".\")) return name.endsWith(i);\n if (i.endsWith(\"/*\")) return type.startsWith(i.slice(0, -1));\n return type === i;\n });\n}\n\nexport const FileInput = forwardRef<HTMLInputElement, FileInputProps>(function FileInput(\n {\n accept,\n multiple,\n maxFiles,\n maxSize,\n disabled,\n label,\n hint,\n error,\n children,\n onFiles,\n id,\n className,\n required,\n ...rest\n },\n ref,\n) {\n const autoId = useId();\n const inputId = id ?? autoId;\n const hintId = `${inputId}-hint`;\n const errorId = `${inputId}-error`;\n const describedBy =\n [error ? errorId : null, hint && !error ? hintId : null].filter(Boolean).join(\" \") || undefined;\n\n const innerRef = useRef<HTMLInputElement | null>(null);\n const setRefs = useCallback(\n (node: HTMLInputElement | null) => {\n innerRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as { current: HTMLInputElement | null }).current = node;\n },\n [ref],\n );\n\n const [files, setFiles] = useState<File[]>([]);\n const [dragActive, setDragActive] = useState(false);\n\n const filter = useCallback(\n (list: File[]): File[] => {\n let out = list.filter((f) => matchesAccept(f, accept));\n if (typeof maxSize === \"number\") out = out.filter((f) => f.size <= maxSize);\n if (typeof maxFiles === \"number\") out = out.slice(0, Math.max(0, maxFiles));\n return out;\n },\n [accept, maxFiles, maxSize],\n );\n\n const commit = useCallback(\n (next: File[]) => {\n const filtered = filter(next);\n setFiles(filtered);\n onFiles?.(filtered);\n },\n [filter, onFiles],\n );\n\n const handleDrop = (e: DragEvent<HTMLLabelElement>) => {\n e.preventDefault();\n e.stopPropagation();\n setDragActive(false);\n if (disabled) return;\n const dropped = Array.from(e.dataTransfer.files ?? []);\n if (dropped.length === 0) return;\n const next = multiple ? [...files, ...dropped] : dropped.slice(0, 1);\n commit(next);\n };\n\n const onDragOver = (e: DragEvent<HTMLLabelElement>) => {\n e.preventDefault();\n e.stopPropagation();\n if (!disabled) setDragActive(true);\n };\n\n const onDragLeave = (e: DragEvent<HTMLLabelElement>) => {\n e.preventDefault();\n e.stopPropagation();\n setDragActive(false);\n };\n\n const removeAt = (idx: number) => {\n const next = files.slice();\n next.splice(idx, 1);\n commit(next);\n };\n\n return (\n <div className={[styles.wrapper, className].filter(Boolean).join(\" \")}>\n {label ? (\n <label htmlFor={inputId} className={styles.label}>\n {label}\n </label>\n ) : null}\n {/*\n * The dropzone is a <label> for the hidden file input: label > input is\n * the one interactive nesting ARIA allows (a div with role=\"button\"\n * wrapping the input fails axe nested-interactive). Click forwards to\n * the input natively; keyboard focus and Enter/Space live on the input.\n */}\n <label\n htmlFor={inputId}\n className={[\n styles.area,\n dragActive ? styles[\"area-active\"] : null,\n error ? styles[\"area-error\"] : null,\n disabled ? styles[\"area-disabled\"] : null,\n ]\n .filter(Boolean)\n .join(\" \")}\n onDrop={handleDrop}\n onDragOver={onDragOver}\n onDragEnter={onDragOver}\n onDragLeave={onDragLeave}\n >\n <SvgPaperclip className={styles.icon} aria-hidden=\"true\" width={20} height={20} />\n <div className={styles.body}>\n {children ?? (\n <>\n <span className={styles.primary}>Drop files here or click to browse</span>\n <span className={styles.secondary}>\n {accept ? `Accepts ${accept}.` : \"Any file type.\"}\n {typeof maxSize === \"number\" ? ` Up to ${formatBytes(maxSize)}.` : \"\"}\n {typeof maxFiles === \"number\" ? ` Max ${maxFiles}.` : \"\"}\n </span>\n </>\n )}\n </div>\n <input\n ref={setRefs}\n id={inputId}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n required={required}\n aria-invalid={error ? true : undefined}\n aria-describedby={describedBy}\n className={styles.hiddenInput}\n onChange={(e) => {\n const picked = Array.from(e.target.files ?? []);\n if (picked.length === 0) return;\n const next = multiple ? [...files, ...picked] : picked.slice(0, 1);\n commit(next);\n // Allow re-selecting the same file.\n e.target.value = \"\";\n }}\n {...rest}\n />\n </label>\n {files.length > 0 ? (\n <ul className={styles.list} aria-label=\"Selected files\">\n {files.map((f, i) => (\n <li key={`${f.name}-${i}`} className={styles.listItem}>\n <ContextChip\n kind=\"file\"\n meta={formatBytes(f.size)}\n onRemove={() => removeAt(i)}\n removeLabel={`Remove ${f.name}`}\n >\n {f.name}\n </ContextChip>\n </li>\n ))}\n </ul>\n ) : null}\n {error ? (\n <span id={errorId} className={styles.error}>\n {error}\n </span>\n ) : hint ? (\n <span id={hintId} className={styles.hint}>\n {hint}\n </span>\n ) : null}\n </div>\n );\n});\n","/**\n * SearchInput\n *\n * Pre-styled Input with a leading search icon, optional trailing keyboard\n * shortcut, and a clearable X when the value is non-empty. While `loading`,\n * the search icon is replaced with a spinner.\n *\n * Mirrors the base Input prop surface so consumers can swap them as needed.\n */\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n type InputHTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { SvgCancel, SvgLoader, SvgSearch } from \"../../icons\";\nimport styles from \"./SearchInput.module.css\";\n\ntype BaseProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"size\" | \"type\" | \"value\" | \"defaultValue\" | \"onChange\"\n>;\n\nexport interface SearchInputProps extends BaseProps {\n value?: string;\n defaultValue?: string;\n onChange?: (next: string) => void;\n onClear?: () => void;\n /** Trailing affordance, typically a `KeyboardShortcut`. */\n shortcut?: ReactNode;\n /** Replace the leading search icon with a spinner. */\n loading?: boolean;\n label?: string;\n hint?: string;\n error?: string;\n clearLabel?: string;\n /**\n * Optional debounced echo of the typed value. Fires `onDebouncedChange`\n * after the user has paused typing for `debounceMs`. `onChange` still\n * fires on every keystroke. Default: 0 (off).\n */\n debounceMs?: number;\n onDebouncedChange?: (next: string) => void;\n}\n\n/**\n * Internal debounce helper. Not exported. Used by SearchInput to feed the\n * optional `onDebouncedChange` callback.\n */\nfunction useDebouncedValue<T>(value: T, delayMs: number): T {\n const [debounced, setDebounced] = useState(value);\n useEffect(() => {\n if (delayMs <= 0) {\n setDebounced(value);\n return;\n }\n const t = setTimeout(() => setDebounced(value), delayMs);\n return () => clearTimeout(t);\n }, [value, delayMs]);\n return debounced;\n}\n\nexport const SearchInput = forwardRef<HTMLInputElement, SearchInputProps>(function SearchInput(\n {\n value,\n defaultValue,\n onChange,\n onClear,\n shortcut,\n loading,\n label,\n hint,\n error,\n clearLabel = \"Clear search\",\n debounceMs = 0,\n onDebouncedChange,\n id,\n className,\n placeholder = \"Search…\",\n required,\n disabled,\n ...rest\n },\n ref,\n) {\n const autoId = useId();\n const inputId = id ?? autoId;\n const hintId = `${inputId}-hint`;\n const errorId = `${inputId}-error`;\n const describedBy =\n [error ? errorId : null, hint && !error ? hintId : null].filter(Boolean).join(\" \") || undefined;\n\n const innerRef = useRef<HTMLInputElement | null>(null);\n const setRefs = useCallback(\n (node: HTMLInputElement | null) => {\n innerRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as { current: HTMLInputElement | null }).current = node;\n },\n [ref],\n );\n\n const controlled = value !== undefined;\n const [internal, setInternal] = useState<string>(defaultValue ?? \"\");\n const current = controlled ? value ?? \"\" : internal;\n\n const debounced = useDebouncedValue(current, debounceMs);\n useEffect(() => {\n if (debounceMs > 0 && onDebouncedChange) onDebouncedChange(debounced);\n // We intentionally only fire when the debounced echo flips.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [debounced]);\n\n const handleChange = (next: string) => {\n if (!controlled) setInternal(next);\n onChange?.(next);\n };\n\n const clear = () => {\n if (!controlled) setInternal(\"\");\n onChange?.(\"\");\n onClear?.();\n innerRef.current?.focus();\n };\n\n const hasValue = current.length > 0;\n\n return (\n <div className={[styles.wrapper, className].filter(Boolean).join(\" \")}>\n {label ? (\n <label htmlFor={inputId} className={styles.label}>\n {label}\n </label>\n ) : null}\n <div className={[styles.field, error ? styles[\"field-error\"] : null].filter(Boolean).join(\" \")}>\n <span className={styles.icon} aria-hidden=\"true\">\n {loading ? (\n <SvgLoader className={styles.spin} width={16} height={16} />\n ) : (\n <SvgSearch width={16} height={16} />\n )}\n </span>\n <input\n ref={setRefs}\n id={inputId}\n type=\"search\"\n role=\"searchbox\"\n autoComplete=\"off\"\n className={styles.input}\n value={current}\n placeholder={placeholder}\n disabled={disabled}\n required={required}\n aria-invalid={error ? true : undefined}\n aria-describedby={describedBy}\n onChange={(e) => handleChange(e.target.value)}\n {...rest}\n />\n {hasValue ? (\n <button\n type=\"button\"\n className={styles.clear}\n onClick={clear}\n aria-label={clearLabel}\n disabled={disabled}\n >\n <SvgCancel width={14} height={14} aria-hidden=\"true\" />\n </button>\n ) : shortcut ? (\n <span className={styles.trailing}>{shortcut}</span>\n ) : null}\n </div>\n {error ? (\n <span id={errorId} className={styles.error}>\n {error}\n </span>\n ) : hint ? (\n <span id={hintId} className={styles.hint}>\n {hint}\n </span>\n ) : null}\n </div>\n );\n});\n","/**\n * PinInput (OTP)\n *\n * N single-character inputs in a row. Auto-advances focus on input, backspace\n * moves back, paste fills the sequence from any index.\n *\n * Accessibility note: callers MUST pass a `label` (or `aria-label`) so screen\n * readers can name the group. The fieldset and legend pattern is used to scope\n * the input set; individual inputs declare position via `aria-label`.\n */\nimport {\n forwardRef,\n useCallback,\n useId,\n useImperativeHandle,\n useRef,\n useState,\n type ClipboardEvent,\n type KeyboardEvent,\n} from \"react\";\nimport styles from \"./PinInput.module.css\";\n\nexport type PinInputMode = \"numeric\" | \"text\";\n\nexport interface PinInputProps {\n /** Number of slots. Default 6. */\n length?: number;\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n /** Fires when every slot is filled. */\n onComplete?: (value: string) => void;\n /** \"numeric\" accepts digits only; \"text\" accepts any single character. */\n inputMode?: PinInputMode;\n /** Render filled slots as masked dots. */\n mask?: boolean;\n disabled?: boolean;\n label?: string;\n hint?: string;\n error?: string;\n id?: string;\n className?: string;\n /** Aria label used when `label` is not provided. */\n \"aria-label\"?: string;\n autoFocus?: boolean;\n name?: string;\n}\n\nfunction isAccepted(ch: string, mode: PinInputMode): boolean {\n if (ch.length !== 1) return false;\n if (mode === \"numeric\") return /[0-9]/.test(ch);\n return /\\S/.test(ch);\n}\n\nfunction sanitise(raw: string, mode: PinInputMode, max: number): string {\n const cleaned = raw\n .split(\"\")\n .filter((c) => isAccepted(c, mode))\n .join(\"\");\n return cleaned.slice(0, max);\n}\n\nexport const PinInput = forwardRef<HTMLInputElement, PinInputProps>(function PinInput(\n {\n length = 6,\n value,\n defaultValue,\n onChange,\n onComplete,\n inputMode = \"numeric\",\n mask,\n disabled,\n label,\n hint,\n error,\n id,\n className,\n \"aria-label\": ariaLabel,\n autoFocus,\n name,\n },\n ref,\n) {\n const autoId = useId();\n const baseId = id ?? autoId;\n const hintId = `${baseId}-hint`;\n const errorId = `${baseId}-error`;\n const describedBy =\n [error ? errorId : null, hint && !error ? hintId : null].filter(Boolean).join(\" \") || undefined;\n\n const controlled = value !== undefined;\n const [internal, setInternal] = useState<string>(() =>\n sanitise(defaultValue ?? \"\", inputMode, length),\n );\n const current = controlled ? sanitise(value ?? \"\", inputMode, length) : internal;\n const chars: string[] = Array.from({ length }, (_, i) => current[i] ?? \"\");\n\n const slotRefs = useRef<Array<HTMLInputElement | null>>([]);\n\n // Forwarded ref points at the first slot for autoFocus / programmatic focus.\n useImperativeHandle(ref, () => slotRefs.current[0] as HTMLInputElement, []);\n\n const commit = useCallback(\n (next: string) => {\n const cleaned = sanitise(next, inputMode, length);\n if (!controlled) setInternal(cleaned);\n onChange?.(cleaned);\n if (cleaned.length === length) onComplete?.(cleaned);\n },\n [controlled, inputMode, length, onChange, onComplete],\n );\n\n const focusSlot = (idx: number) => {\n const clamped = Math.max(0, Math.min(length - 1, idx));\n slotRefs.current[clamped]?.focus();\n slotRefs.current[clamped]?.select();\n };\n\n const setCharAt = (idx: number, ch: string) => {\n const acc = chars.slice();\n acc[idx] = ch;\n const joined = acc.join(\"\").replace(/\\s+$/g, \"\");\n commit(joined);\n };\n\n const handleBeforeInput = (idx: number, raw: string) => {\n if (!raw) return;\n if (raw.length === 1) {\n if (!isAccepted(raw, inputMode)) return;\n setCharAt(idx, raw);\n focusSlot(idx + 1);\n return;\n }\n // Multi-char insert (paste through input event in some browsers).\n const cleaned = sanitise(raw, inputMode, length - idx);\n const acc = chars.slice();\n for (let i = 0; i < cleaned.length; i++) {\n const ch = cleaned.charAt(i);\n if (ch) acc[idx + i] = ch;\n }\n commit(acc.join(\"\").replace(/\\s+$/g, \"\"));\n focusSlot(idx + cleaned.length);\n };\n\n const handleKeyDown = (idx: number, e: KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n if (e.key === \"Backspace\") {\n e.preventDefault();\n if (chars[idx]) {\n setCharAt(idx, \"\");\n } else if (idx > 0) {\n setCharAt(idx - 1, \"\");\n focusSlot(idx - 1);\n }\n return;\n }\n if (e.key === \"ArrowLeft\") {\n e.preventDefault();\n focusSlot(idx - 1);\n return;\n }\n if (e.key === \"ArrowRight\") {\n e.preventDefault();\n focusSlot(idx + 1);\n return;\n }\n if (e.key === \"Home\") {\n e.preventDefault();\n focusSlot(0);\n return;\n }\n if (e.key === \"End\") {\n e.preventDefault();\n focusSlot(length - 1);\n return;\n }\n if (e.key.length === 1 && !e.metaKey && !e.ctrlKey && !e.altKey) {\n if (!isAccepted(e.key, inputMode)) {\n e.preventDefault();\n return;\n }\n e.preventDefault();\n setCharAt(idx, e.key);\n focusSlot(idx + 1);\n }\n };\n\n const handlePaste = (idx: number, e: ClipboardEvent<HTMLInputElement>) => {\n e.preventDefault();\n const text = e.clipboardData.getData(\"text\");\n const cleaned = sanitise(text, inputMode, length - idx);\n if (!cleaned) return;\n const acc = chars.slice();\n for (let i = 0; i < cleaned.length; i++) {\n const ch = cleaned.charAt(i);\n if (ch) acc[idx + i] = ch;\n }\n commit(acc.join(\"\").replace(/\\s+$/g, \"\"));\n focusSlot(idx + cleaned.length);\n };\n\n return (\n <div className={[styles.wrapper, className].filter(Boolean).join(\" \")} id={baseId}>\n {label ? (\n <span className={styles.label} id={`${baseId}-label`}>\n {label}\n </span>\n ) : null}\n <div\n role=\"group\"\n aria-labelledby={label ? `${baseId}-label` : undefined}\n aria-label={!label ? ariaLabel : undefined}\n aria-describedby={describedBy}\n className={[styles.row, error ? styles[\"row-error\"] : null].filter(Boolean).join(\" \")}\n >\n {chars.map((ch, idx) => (\n <input\n key={idx}\n ref={(el) => {\n slotRefs.current[idx] = el;\n }}\n type={mask ? \"password\" : \"text\"}\n inputMode={inputMode === \"numeric\" ? \"numeric\" : \"text\"}\n autoComplete={idx === 0 ? \"one-time-code\" : \"off\"}\n name={name ? `${name}-${idx}` : undefined}\n maxLength={1}\n value={ch}\n disabled={disabled}\n autoFocus={autoFocus && idx === 0}\n aria-label={`${label ?? ariaLabel ?? \"PIN\"} digit ${idx + 1} of ${length}`}\n aria-invalid={error ? true : undefined}\n className={[styles.slot, ch ? styles[\"slot-filled\"] : null].filter(Boolean).join(\" \")}\n onBeforeInput={(e) => {\n const data = (e as unknown as { data?: string }).data ?? \"\";\n if (!data) return;\n if (data.length === 1) {\n if (!isAccepted(data, inputMode)) e.preventDefault();\n return;\n }\n // multi-char input (some IMEs) — handle in change instead.\n }}\n onChange={(e) => {\n const raw = e.target.value;\n if (raw.length <= 1) {\n if (raw === \"\") {\n setCharAt(idx, \"\");\n } else if (isAccepted(raw, inputMode)) {\n setCharAt(idx, raw);\n focusSlot(idx + 1);\n }\n return;\n }\n handleBeforeInput(idx, raw);\n }}\n onKeyDown={(e) => handleKeyDown(idx, e)}\n onPaste={(e) => handlePaste(idx, e)}\n onFocus={(e) => e.target.select()}\n />\n ))}\n </div>\n {error ? (\n <span id={errorId} className={styles.error}>\n {error}\n </span>\n ) : hint ? (\n <span id={hintId} className={styles.hint}>\n {hint}\n </span>\n ) : null}\n </div>\n );\n});\n","/**\n * TagInput\n *\n * Chip multi-select input. Renders existing tags as ContextChip(kind=\"tag\")\n * inside the field, plus an inline text input. Enter or the configured\n * `delimiter` commits a tag. Backspace on an empty input removes the last\n * tag. Suggestions render in a popover-style list below.\n */\nimport {\n forwardRef,\n useCallback,\n useId,\n useRef,\n useState,\n type ClipboardEvent,\n type KeyboardEvent,\n type ReactNode,\n} from \"react\";\nimport { ContextChip } from \"../ContextChip\";\nimport styles from \"./TagInput.module.css\";\n\nexport interface TagInputProps {\n value?: string[];\n defaultValue?: string[];\n onChange?: (next: string[]) => void;\n /** Character that commits a tag in addition to Enter. Default \",\". */\n delimiter?: string;\n /** Hints rendered below the field; clicking adds them. */\n suggestions?: string[];\n /** Hard cap on tag count. Extras are dropped. */\n maxTags?: number;\n placeholder?: string;\n label?: string;\n hint?: string;\n error?: string;\n disabled?: boolean;\n id?: string;\n className?: string;\n /** Strip whitespace / case-collapse / etc. before commit. Default trims. */\n normalize?: (raw: string) => string;\n /** Optional gate per candidate tag. Returning false silently drops it. */\n validate?: (tag: string, current: string[]) => boolean;\n /** Children label rendered when a tag's chip is removed. Default \"Remove\". */\n removeLabel?: (tag: string) => string;\n /** Aria label used when `label` is not provided. */\n \"aria-label\"?: string;\n /** Render an additional adornment after the input (e.g. small caption). */\n trailing?: ReactNode;\n}\n\nfunction uniquePush(current: string[], next: string, max?: number): string[] {\n if (!next) return current;\n if (current.includes(next)) return current;\n if (typeof max === \"number\" && current.length >= max) return current;\n return [...current, next];\n}\n\nexport const TagInput = forwardRef<HTMLInputElement, TagInputProps>(function TagInput(\n {\n value,\n defaultValue,\n onChange,\n delimiter = \",\",\n suggestions,\n maxTags,\n placeholder = \"Add a tag…\",\n label,\n hint,\n error,\n disabled,\n id,\n className,\n normalize,\n validate,\n removeLabel,\n \"aria-label\": ariaLabel,\n trailing,\n },\n ref,\n) {\n const autoId = useId();\n const inputId = id ?? autoId;\n const hintId = `${inputId}-hint`;\n const errorId = `${inputId}-error`;\n const describedBy =\n [error ? errorId : null, hint && !error ? hintId : null].filter(Boolean).join(\" \") || undefined;\n\n const controlled = value !== undefined;\n const [internal, setInternal] = useState<string[]>(defaultValue ?? []);\n const tags = controlled ? value ?? [] : internal;\n\n const innerRef = useRef<HTMLInputElement | null>(null);\n const setRefs = useCallback(\n (node: HTMLInputElement | null) => {\n innerRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as { current: HTMLInputElement | null }).current = node;\n },\n [ref],\n );\n\n const [draft, setDraft] = useState(\"\");\n\n const commit = (next: string[]) => {\n if (!controlled) setInternal(next);\n onChange?.(next);\n };\n\n const addTag = (raw: string) => {\n const normalised = (normalize ?? ((s) => s.trim()))(raw);\n if (!normalised) return;\n if (validate && !validate(normalised, tags)) return;\n const next = uniquePush(tags, normalised, maxTags);\n if (next === tags) return;\n commit(next);\n };\n\n const removeTag = (idx: number) => {\n const next = tags.slice();\n next.splice(idx, 1);\n commit(next);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n if (e.key === \"Enter\" || e.key === delimiter) {\n if (draft.trim()) {\n e.preventDefault();\n addTag(draft);\n setDraft(\"\");\n } else if (e.key === delimiter) {\n e.preventDefault();\n }\n return;\n }\n if (e.key === \"Backspace\" && draft === \"\" && tags.length > 0) {\n e.preventDefault();\n removeTag(tags.length - 1);\n }\n };\n\n const handlePaste = (e: ClipboardEvent<HTMLInputElement>) => {\n const text = e.clipboardData.getData(\"text\");\n if (!text.includes(delimiter) && !text.includes(\"\\n\")) return;\n e.preventDefault();\n const parts = text\n .split(new RegExp(`[${delimiter}\\n]`))\n .map((p) => p.trim())\n .filter(Boolean);\n let next = tags;\n for (const p of parts) {\n const normalised = (normalize ?? ((s) => s.trim()))(p);\n if (!normalised) continue;\n if (validate && !validate(normalised, next)) continue;\n next = uniquePush(next, normalised, maxTags);\n }\n if (next !== tags) commit(next);\n };\n\n const unusedSuggestions = (suggestions ?? []).filter((s) => !tags.includes(s));\n\n return (\n <div className={[styles.wrapper, className].filter(Boolean).join(\" \")}>\n {label ? (\n <label htmlFor={inputId} className={styles.label}>\n {label}\n </label>\n ) : null}\n <div\n className={[styles.field, error ? styles[\"field-error\"] : null].filter(Boolean).join(\" \")}\n onClick={() => innerRef.current?.focus()}\n >\n {tags.map((t, i) => (\n <ContextChip\n key={`${t}-${i}`}\n kind=\"tag\"\n onRemove={disabled ? undefined : () => removeTag(i)}\n removeLabel={removeLabel ? removeLabel(t) : `Remove ${t}`}\n >\n {t}\n </ContextChip>\n ))}\n <input\n ref={setRefs}\n id={inputId}\n type=\"text\"\n autoComplete=\"off\"\n className={styles.input}\n value={draft}\n disabled={disabled}\n placeholder={tags.length === 0 ? placeholder : \"\"}\n aria-label={!label ? ariaLabel : undefined}\n aria-invalid={error ? true : undefined}\n aria-describedby={describedBy}\n onChange={(e) => setDraft(e.target.value)}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n onBlur={() => {\n if (draft.trim()) {\n addTag(draft);\n setDraft(\"\");\n }\n }}\n />\n {trailing ? <span className={styles.trailing}>{trailing}</span> : null}\n </div>\n {unusedSuggestions.length > 0 ? (\n <div className={styles.suggestions} aria-label=\"Suggested tags\">\n {unusedSuggestions.map((s) => (\n <button\n key={s}\n type=\"button\"\n className={styles.suggestion}\n disabled={\n disabled || (typeof maxTags === \"number\" && tags.length >= maxTags)\n }\n onClick={() => {\n addTag(s);\n innerRef.current?.focus();\n }}\n >\n {s}\n </button>\n ))}\n </div>\n ) : null}\n {error ? (\n <span id={errorId} className={styles.error}>\n {error}\n </span>\n ) : hint ? (\n <span id={hintId} className={styles.hint}>\n {hint}\n </span>\n ) : null}\n </div>\n );\n});\n","/**\n * ColorPicker\n *\n * Trigger button rendering a swatch + hex value. Opens a Popover with HSV\n * range sliders, a hex text input, and a grid of Sophea-friendly presets.\n *\n * Accessibility note: the trigger gets `aria-label` text. Inside the popover,\n * each slider has an `aria-label` and a visible label. Hex input is a regular\n * text field with validation on blur.\n */\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useState,\n type ChangeEvent,\n} from \"react\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../Popover\";\nimport styles from \"./ColorPicker.module.css\";\n\nexport interface ColorPickerProps {\n value?: string;\n defaultValue?: string;\n onChange?: (next: string) => void;\n presets?: string[];\n label?: string;\n hint?: string;\n error?: string;\n disabled?: boolean;\n id?: string;\n className?: string;\n /** Aria label used when `label` is not provided. */\n \"aria-label\"?: string;\n}\n\nconst DEFAULT_PRESETS = [\n // Sophea brand stops + supporting neutrals + status colours.\n \"#0E2238\",\n \"#1F4F7B\",\n \"#2E6DAD\",\n \"#5891D0\",\n \"#94B7DC\",\n \"#C9DBEC\",\n \"#0F172A\",\n \"#1F2937\",\n \"#374151\",\n \"#6B7280\",\n \"#94A3B8\",\n \"#CBD5E1\",\n \"#F4F5F8\",\n \"#FFFFFF\",\n \"#16A34A\",\n \"#22C55E\",\n \"#84CC16\",\n \"#EAB308\",\n \"#F59E0B\",\n \"#DC2626\",\n \"#B91C1C\",\n \"#7C3AED\",\n \"#8B57C8\",\n \"#0EA5E9\",\n];\n\nfunction normaliseHex(input: string): string | null {\n let raw = input.trim().toLowerCase();\n if (raw.startsWith(\"#\")) raw = raw.slice(1);\n if (/^[0-9a-f]{3}$/.test(raw)) raw = raw.split(\"\").map((c) => c + c).join(\"\");\n if (!/^[0-9a-f]{6}$/.test(raw)) return null;\n return `#${raw.toUpperCase()}`;\n}\n\nfunction hexToHsv(hex: string): { h: number; s: number; v: number } {\n const m = /^#?([0-9a-f]{6})$/i.exec(hex);\n const group = m?.[1];\n if (!group) return { h: 0, s: 0, v: 0 };\n const int = parseInt(group, 16);\n const r = ((int >> 16) & 0xff) / 255;\n const g = ((int >> 8) & 0xff) / 255;\n const b = (int & 0xff) / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const d = max - min;\n const v = max;\n const s = max === 0 ? 0 : d / max;\n let h = 0;\n if (d !== 0) {\n if (max === r) h = ((g - b) / d) % 6;\n else if (max === g) h = (b - r) / d + 2;\n else h = (r - g) / d + 4;\n h *= 60;\n if (h < 0) h += 360;\n }\n return { h, s: s * 100, v: v * 100 };\n}\n\nfunction hsvToHex(h: number, s: number, v: number): string {\n const sn = s / 100;\n const vn = v / 100;\n const c = vn * sn;\n const hh = h / 60;\n const x = c * (1 - Math.abs((hh % 2) - 1));\n let r = 0;\n let g = 0;\n let b = 0;\n if (hh >= 0 && hh < 1) [r, g, b] = [c, x, 0];\n else if (hh < 2) [r, g, b] = [x, c, 0];\n else if (hh < 3) [r, g, b] = [0, c, x];\n else if (hh < 4) [r, g, b] = [0, x, c];\n else if (hh < 5) [r, g, b] = [x, 0, c];\n else [r, g, b] = [c, 0, x];\n const m = vn - c;\n const out = [r + m, g + m, b + m].map((u) => {\n const n = Math.round(u * 255)\n .toString(16)\n .padStart(2, \"0\");\n return n;\n });\n return `#${out.join(\"\").toUpperCase()}`;\n}\n\nexport const ColorPicker = forwardRef<HTMLButtonElement, ColorPickerProps>(function ColorPicker(\n {\n value,\n defaultValue,\n onChange,\n presets = DEFAULT_PRESETS,\n label,\n hint,\n error,\n disabled,\n id,\n className,\n \"aria-label\": ariaLabel,\n },\n ref,\n) {\n const autoId = useId();\n const inputId = id ?? autoId;\n const hintId = `${inputId}-hint`;\n const errorId = `${inputId}-error`;\n const describedBy =\n [error ? errorId : null, hint && !error ? hintId : null].filter(Boolean).join(\" \") || undefined;\n\n const controlled = value !== undefined;\n const seed = normaliseHex(defaultValue ?? \"#2E6DAD\") ?? \"#2E6DAD\";\n const [internal, setInternal] = useState<string>(seed);\n const current = controlled ? normaliseHex(value ?? \"\") ?? seed : internal;\n\n const [hex, setHex] = useState<string>(current);\n // Track HSV locally so users dragging a slider don't get clobbered by repeated parsing.\n const [hsv, setHsv] = useState(() => hexToHsv(current));\n const [open, setOpen] = useState(false);\n\n useEffect(() => {\n setHex(current);\n setHsv(hexToHsv(current));\n }, [current]);\n\n const commit = useCallback(\n (next: string) => {\n const normalised = normaliseHex(next);\n if (!normalised) return;\n if (!controlled) setInternal(normalised);\n onChange?.(normalised);\n },\n [controlled, onChange],\n );\n\n const onHueChange = (e: ChangeEvent<HTMLInputElement>) => {\n const h = Number(e.target.value);\n const next = { ...hsv, h };\n setHsv(next);\n const out = hsvToHex(next.h, next.s, next.v);\n setHex(out);\n commit(out);\n };\n\n const onSatChange = (e: ChangeEvent<HTMLInputElement>) => {\n const s = Number(e.target.value);\n const next = { ...hsv, s };\n setHsv(next);\n const out = hsvToHex(next.h, next.s, next.v);\n setHex(out);\n commit(out);\n };\n\n const onValChange = (e: ChangeEvent<HTMLInputElement>) => {\n const v = Number(e.target.value);\n const next = { ...hsv, v };\n setHsv(next);\n const out = hsvToHex(next.h, next.s, next.v);\n setHex(out);\n commit(out);\n };\n\n const onHexInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n setHex(e.target.value);\n };\n\n const onHexInputBlur = () => {\n const normalised = normaliseHex(hex);\n if (normalised) {\n commit(normalised);\n setHsv(hexToHsv(normalised));\n setHex(normalised);\n } else {\n // Reset to last good value.\n setHex(current);\n }\n };\n\n return (\n <div className={[styles.wrapper, className].filter(Boolean).join(\" \")}>\n {label ? (\n <label htmlFor={inputId} className={styles.label}>\n {label}\n </label>\n ) : null}\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger\n ref={ref}\n id={inputId}\n disabled={disabled}\n aria-label={!label ? ariaLabel ?? \"Pick a colour\" : undefined}\n aria-describedby={describedBy}\n aria-invalid={error ? true : undefined}\n className={[styles.trigger, error ? styles[\"trigger-error\"] : null].filter(Boolean).join(\" \")}\n >\n <span\n className={styles.swatch}\n style={{ backgroundColor: current }}\n aria-hidden=\"true\"\n />\n <span className={styles.triggerValue}>{current}</span>\n </PopoverTrigger>\n <PopoverContent className={styles.content} align=\"start\" sideOffset={6} withArrow={false}>\n <div className={styles.preview} style={{ backgroundColor: current }} aria-hidden=\"true\" />\n <div className={styles.sliders}>\n <label className={styles.sliderRow}>\n <span className={styles.sliderLabel}>Hue</span>\n <input\n type=\"range\"\n min={0}\n max={360}\n value={Math.round(hsv.h)}\n onChange={onHueChange}\n aria-label=\"Hue\"\n className={[styles.slider, styles[\"slider-hue\"]].join(\" \")}\n />\n <span className={styles.sliderValue}>{Math.round(hsv.h)}°</span>\n </label>\n <label className={styles.sliderRow}>\n <span className={styles.sliderLabel}>Saturation</span>\n <input\n type=\"range\"\n min={0}\n max={100}\n value={Math.round(hsv.s)}\n onChange={onSatChange}\n aria-label=\"Saturation\"\n className={styles.slider}\n />\n <span className={styles.sliderValue}>{Math.round(hsv.s)}%</span>\n </label>\n <label className={styles.sliderRow}>\n <span className={styles.sliderLabel}>Value</span>\n <input\n type=\"range\"\n min={0}\n max={100}\n value={Math.round(hsv.v)}\n onChange={onValChange}\n aria-label=\"Value\"\n className={styles.slider}\n />\n <span className={styles.sliderValue}>{Math.round(hsv.v)}%</span>\n </label>\n </div>\n <div className={styles.hexRow}>\n <label htmlFor={`${inputId}-hex`} className={styles.hexLabel}>\n Hex\n </label>\n <input\n id={`${inputId}-hex`}\n type=\"text\"\n value={hex}\n onChange={onHexInputChange}\n onBlur={onHexInputBlur}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n onHexInputBlur();\n }\n }}\n spellCheck={false}\n autoComplete=\"off\"\n className={styles.hexInput}\n aria-label=\"Hex value\"\n />\n </div>\n <div className={styles.presets} role=\"listbox\" aria-label=\"Preset colours\">\n {presets.map((p) => {\n const norm = normaliseHex(p);\n if (!norm) return null;\n const selected = norm === current;\n return (\n <button\n key={norm}\n type=\"button\"\n role=\"option\"\n aria-selected={selected}\n aria-label={norm}\n className={[styles.preset, selected ? styles[\"preset-selected\"] : null]\n .filter(Boolean)\n .join(\" \")}\n style={{ backgroundColor: norm }}\n onClick={() => {\n commit(norm);\n setHsv(hexToHsv(norm));\n setHex(norm);\n }}\n />\n );\n })}\n </div>\n </PopoverContent>\n </Popover>\n {error ? (\n <span id={errorId} className={styles.error}>\n {error}\n </span>\n ) : hint ? (\n <span id={hintId} className={styles.hint}>\n {hint}\n </span>\n ) : null}\n </div>\n );\n});\n","import {\n forwardRef,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport styles from \"./Text.module.css\";\nimport { resolveNode, type RichStr } from \"./richstr\";\n\n/**\n * Named font presets. Each bundles family + size + weight + leading + a\n * default color via the global `.font-*` classes in\n * `src/tokens/colors_and_type.css`. The preset is the single source of truth;\n * this component only selects one.\n */\nexport type TextFont =\n | \"heading-h1\"\n | \"heading-h2\"\n | \"heading-h3\"\n | \"heading-h4\"\n | \"main-ui-body\"\n | \"main-ui-action\"\n | \"main-content\"\n | \"secondary-body\"\n | \"secondary-action\"\n | \"section-title\"\n | \"code\"\n | \"secondary-mono\";\n\n/**\n * Optional color override. When omitted, the font preset's own color applies.\n * `inherit` defers to the parent (for use inside Buttons, Banners, etc.).\n */\nexport type TextColor =\n | \"inherit\"\n | \"text-01\"\n | \"text-02\"\n | \"text-03\"\n | \"text-04\"\n | \"text-05\"\n | \"text-inverted-03\"\n | \"text-inverted-04\"\n | \"text-inverted-05\";\n\nexport type TextTag = \"span\" | \"p\" | \"li\" | \"h1\" | \"h2\" | \"h3\" | \"h4\";\n\nexport interface TextProps\n extends Omit<HTMLAttributes<HTMLElement>, \"children\" | \"color\"> {\n /** Font preset. Default: `\"main-ui-body\"`. */\n font?: TextFont;\n /** Color override. Default: the preset's own color. */\n color?: TextColor;\n /** HTML tag to render. Default: `\"span\"`. */\n as?: TextTag;\n /** Prevent text wrapping. */\n nowrap?: boolean;\n /** Truncate to N lines with ellipsis. `1` uses single-line truncation; `2+` uses line clamping. */\n maxLines?: number;\n /**\n * Content. A plain string renders verbatim; `markdown()` (a {@link RichStr})\n * renders inline markdown (bold, italic, code, links); any other\n * `ReactNode` (e.g. react-markdown element children) renders verbatim with\n * the preset's typography applied via the `.font-*` class.\n */\n children?: ReactNode | RichStr;\n}\n\nconst COLOR_CLASS: Record<TextColor, string> = {\n inherit: \"color-inherit\",\n \"text-01\": \"color-text-01\",\n \"text-02\": \"color-text-02\",\n \"text-03\": \"color-text-03\",\n \"text-04\": \"color-text-04\",\n \"text-05\": \"color-text-05\",\n \"text-inverted-03\": \"color-text-inverted-03\",\n \"text-inverted-04\": \"color-text-inverted-04\",\n \"text-inverted-05\": \"color-text-inverted-05\",\n};\n\n/**\n * Typography primitive. Renders one of the named font presets from the token\n * sheet, with optional color override, wrapping control, and line clamping.\n * Accepts `string`, `markdown(\"**bold**\")` ({@link RichStr}), or any\n * `ReactNode` children — strings/markdown keep their existing behavior; other\n * nodes render verbatim with the preset's typography applied.\n */\nexport const Text = forwardRef<HTMLElement, TextProps>(function Text(\n {\n font = \"main-ui-body\",\n color,\n as: Tag = \"span\",\n nowrap = false,\n maxLines,\n children,\n className,\n style,\n ...rest\n },\n ref,\n) {\n const classes = [\n styles.text,\n `font-${font}`,\n color ? styles[COLOR_CLASS[color]] : null,\n nowrap ? styles.nowrap : null,\n maxLines === 1 ? styles.truncate : null,\n maxLines !== undefined && maxLines > 1 ? styles.clamp : null,\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n const mergedStyle: CSSProperties | undefined =\n maxLines !== undefined && maxLines > 1\n ? { ...style, [\"--text-max-lines\" as string]: maxLines }\n : style;\n\n return (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- ref covers the heterogeneous tag union\n <Tag ref={ref as any} className={classes} style={mergedStyle} {...rest}>\n {children !== undefined ? resolveNode(children) : null}\n </Tag>\n );\n});\n","import \"./interactive.css\";\nimport \"./stateful.css\";\nimport {\n forwardRef,\n type CSSProperties,\n type HTMLAttributes,\n type MouseEvent,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\n\n// ---------------------------------------------------------------------------\n// Shared types\n// ---------------------------------------------------------------------------\n\nexport type InteractiveButtonType = \"submit\" | \"button\" | \"reset\";\nexport type InteractiveInteraction = \"rest\" | \"hover\" | \"active\";\n\n/**\n * Guards an onClick handler against React synthetic event bubbling from\n * portalled children (e.g. Radix dialog overlays). React bubbles synthetic\n * events through the fiber tree, not the DOM tree, so a click on a portalled\n * overlay can reach a parent's onClick even though the overlay is not a DOM\n * descendant. This checks the click target is inside the handler's element.\n */\nfunction guardPortalClick<E extends MouseEvent>(\n onClick: ((e: E) => void) | undefined,\n): ((e: E) => void) | undefined {\n if (!onClick) return undefined;\n return (e: E) => {\n if (\n e.currentTarget instanceof Node &&\n e.target instanceof Node &&\n e.currentTarget.contains(e.target)\n ) {\n onClick(e);\n }\n };\n}\n\ninterface InteractiveBaseProps extends HTMLAttributes<HTMLElement> {\n /**\n * JS-controllable interaction override: `\"hover\"` and `\"active\"` force the\n * corresponding visual state without pointer events (e.g. while a menu\n * anchored to this element is open). Default: `\"rest\"`.\n */\n interaction?: InteractiveInteraction;\n /**\n * HTML button type. When set, the element is treated as inherently\n * interactive for cursor styling even without `onClick` or `href`.\n */\n type?: InteractiveButtonType;\n /** URL to navigate to when clicked. Passed through Slot to the child. */\n href?: string;\n /** Link target. Only used when `href` is provided. */\n target?: string;\n /** Applies variant-specific disabled colors and suppresses clicks. */\n disabled?: boolean;\n}\n\nfunction getInteractiveSlotProps(\n props: InteractiveBaseProps & { className?: string },\n dataAttrs: Record<string, string | undefined>,\n) {\n const { interaction = \"rest\", type, href, target, disabled, className, onClick, ...rest } = props;\n const isDisabled = !!disabled;\n\n const classes = [\n \"interactive\",\n !onClick && !href && !type ? \"interactive-inert\" : null,\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n return {\n className: classes,\n ...dataAttrs,\n \"data-interaction\": interaction !== \"rest\" ? interaction : undefined,\n \"data-disabled\": isDisabled ? \"true\" : undefined,\n \"aria-disabled\": isDisabled || undefined,\n ...(href\n ? {\n href: isDisabled ? undefined : href,\n target,\n rel: target === \"_blank\" ? \"noopener noreferrer\" : undefined,\n }\n : {}),\n ...rest,\n onClick: isDisabled\n ? href\n ? (e: MouseEvent) => e.preventDefault()\n : undefined\n : guardPortalClick(onClick),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Interactive.Stateless\n// ---------------------------------------------------------------------------\n\nexport type InteractiveStatelessVariant = \"default\" | \"action\" | \"danger\";\nexport type InteractiveStatelessProminence = \"primary\" | \"secondary\" | \"tertiary\" | \"internal\";\n\nexport interface InteractiveStatelessProps extends InteractiveBaseProps {\n /** Visual variant controlling the color palette. Default: `\"default\"`. */\n variant?: InteractiveStatelessVariant;\n /** Prominence level controlling background intensity. Default: `\"primary\"`. */\n prominence?: InteractiveStatelessProminence;\n}\n\n/**\n * Stateless interactive surface primitive: the color system for buttons,\n * links, and any clickable element without selection state. Applies the\n * variant × prominence matrix via data attributes and merges onto a single\n * child element via Radix `Slot` (no extra DOM node).\n */\nconst InteractiveStateless = forwardRef<HTMLElement, InteractiveStatelessProps>(\n function InteractiveStateless({ variant = \"default\", prominence = \"primary\", ...props }, ref) {\n const slotProps = getInteractiveSlotProps(props, {\n \"data-interactive-variant\": variant,\n \"data-interactive-prominence\": prominence,\n });\n return <Slot ref={ref} {...slotProps} />;\n },\n);\n\n// ---------------------------------------------------------------------------\n// Interactive.Stateful\n// ---------------------------------------------------------------------------\n\nexport type InteractiveStatefulVariant =\n | \"select-light\"\n | \"select-heavy\"\n | \"select-card\"\n | \"select-tinted\"\n | \"select-input\"\n | \"select-filter\"\n | \"sidebar-heavy\"\n | \"sidebar-light\";\nexport type InteractiveStatefulState = \"empty\" | \"filled\" | \"selected\";\n\nexport interface InteractiveStatefulProps extends InteractiveBaseProps {\n /** Visual variant controlling the color palette. Default: `\"select-heavy\"`. */\n variant?: InteractiveStatefulVariant;\n /** Current value state: `\"empty\"`, `\"filled\"`, or `\"selected\"`. Default: `\"empty\"`. */\n state?: InteractiveStatefulState;\n}\n\n/**\n * Stateful interactive surface primitive: the color system for elements that\n * maintain a value state (toggles, selectable rows, sidebar items). Applies\n * the variant × state matrix via data attributes and merges onto a single\n * child element via Radix `Slot`.\n */\nconst InteractiveStateful = forwardRef<HTMLElement, InteractiveStatefulProps>(\n function InteractiveStateful({ variant = \"select-heavy\", state = \"empty\", ...props }, ref) {\n const slotProps = getInteractiveSlotProps(props, {\n \"data-interactive-variant\": variant,\n \"data-interactive-state\": state,\n });\n return <Slot ref={ref} {...slotProps} />;\n },\n);\n\n// ---------------------------------------------------------------------------\n// Interactive.Container\n// ---------------------------------------------------------------------------\n\nexport type InteractiveContainerSize = \"lg\" | \"md\" | \"sm\" | \"xs\" | \"2xs\" | \"fit\";\nexport type InteractiveContainerRounding = \"md\" | \"sm\" | \"xs\";\nexport type InteractiveContainerWidth = \"fit\" | \"full\";\n\nexport interface InteractiveContainerProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * HTML button type. When provided, renders a `<button>` instead of a\n * `<div>` so styling stays on one element. Mutually exclusive with the\n * `href` injected by a parent Stateless/Stateful Slot.\n */\n type?: InteractiveButtonType;\n /** Draws a 1px border in the theme border color. Default: false. */\n border?: boolean;\n /** Corner rounding preset. Default: `\"md\"`. */\n rounding?: InteractiveContainerRounding;\n /** Size preset controlling height, min-width, and padding. Default: `\"lg\"`. */\n size?: InteractiveContainerSize;\n /** Width preset. Default: `\"fit\"`. */\n width?: InteractiveContainerWidth;\n}\n\n/**\n * Structural box for use inside `Interactive.Stateless` / `Interactive.Stateful`.\n * Carries height, padding, rounding, and border; the parent primitive carries\n * color. Renders `<a>` when a parent Slot injects `href`, `<button>` when\n * `type` is set, `<div>` otherwise.\n */\nconst InteractiveContainer = forwardRef<HTMLElement, InteractiveContainerProps>(\n function InteractiveContainer(\n { type, border, rounding = \"md\", size = \"lg\", width = \"fit\", className, ...props },\n ref,\n ) {\n const {\n href,\n target,\n rel,\n style,\n ...rest\n } = props as InteractiveContainerProps & {\n href?: string;\n target?: string;\n rel?: string;\n style?: CSSProperties;\n };\n\n const sharedProps = {\n ...rest,\n className: [\n \"interactive-container\",\n `interactive-rounding-${rounding}`,\n `interactive-size-${size}`,\n `interactive-width-${width}`,\n className,\n ]\n .filter(Boolean)\n .join(\" \"),\n \"data-border\": border ? (\"true\" as const) : undefined,\n style,\n };\n\n if (href) {\n return (\n <a\n ref={ref as Ref<HTMLAnchorElement>}\n href={href}\n target={target}\n rel={rel}\n {...(sharedProps as HTMLAttributes<HTMLAnchorElement>)}\n />\n );\n }\n if (type) {\n const ariaDisabled = (rest as Record<string, unknown>)[\"aria-disabled\"];\n const nativeDisabled = ariaDisabled === true || ariaDisabled === \"true\" || undefined;\n return (\n <button\n ref={ref as Ref<HTMLButtonElement>}\n type={type}\n disabled={nativeDisabled}\n {...(sharedProps as HTMLAttributes<HTMLButtonElement>)}\n />\n );\n }\n return <div ref={ref as Ref<HTMLDivElement>} {...sharedProps} />;\n },\n);\n\n// ---------------------------------------------------------------------------\n// Interactive.Foldable\n// ---------------------------------------------------------------------------\n\nexport interface InteractiveFoldableProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\n/**\n * Zero-width collapsible wrapper that expands when its ancestor\n * `.interactive` element is hovered, focused within, or carries an\n * interaction override. Uses a CSS grid `0fr ↔ 1fr` animation. The flex\n * parent holding persistent + foldable content should add the\n * `interactive-foldable-host` class for synchronized gap transitions.\n */\nconst InteractiveFoldable = forwardRef<HTMLDivElement, InteractiveFoldableProps>(\n function InteractiveFoldable({ children, className, ...props }, ref) {\n return (\n <div\n ref={ref}\n {...props}\n className={[\"interactive-foldable\", className].filter(Boolean).join(\" \")}\n >\n <div className=\"interactive-foldable-inner\">{children}</div>\n </div>\n );\n },\n);\n\n// ---------------------------------------------------------------------------\n// Compound export\n// ---------------------------------------------------------------------------\n\n/**\n * Core interactive primitives. Most code should use higher-level components\n * (Button, etc.); reach for these when building new interactive surfaces.\n *\n * - `Interactive.Stateless` — variant × prominence color matrix\n * - `Interactive.Stateful` — variant × state (empty/filled/selected) matrix\n * - `Interactive.Container` — structural box (size, rounding, border)\n * - `Interactive.Foldable` — zero-width collapse revealed on hover/focus\n */\nexport const Interactive = {\n Stateless: InteractiveStateless,\n Stateful: InteractiveStateful,\n Container: InteractiveContainer,\n Foldable: InteractiveFoldable,\n};\n\nexport { InteractiveStateless, InteractiveStateful, InteractiveContainer, InteractiveFoldable };\n","import \"./disabled.css\";\nimport { forwardRef, type HTMLAttributes, type ReactElement } from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { Tooltip, TooltipProvider } from \"../Tooltip/Tooltip\";\nimport { resolveStr, type RichStr } from \"../Text/richstr\";\n\nexport type DisabledTooltipSide = \"top\" | \"right\" | \"bottom\" | \"left\";\n\nexport interface DisabledProps extends HTMLAttributes<HTMLElement> {\n /** When truthy, applies disabled styling to the child element. */\n disabled?: boolean;\n /**\n * Re-enables pointer events while keeping the disabled visual treatment.\n * Useful when the element must keep receiving hover or click at a higher\n * level. Default: false.\n */\n allowClick?: boolean;\n /**\n * Tooltip shown on hover while disabled (the \"why is this disabled\" hint).\n * Implies `allowClick` so the trigger can receive pointer events. Supports\n * inline markdown via `markdown()`.\n */\n tooltip?: string | RichStr;\n /** Tooltip side. Default: `\"right\"`. */\n tooltipSide?: DisabledTooltipSide;\n children: ReactElement;\n}\n\n/**\n * Applies baseline disabled visuals (opacity, cursor, pointer-events) to a\n * single child element via Radix `Slot` — no wrapper DOM node. Interactive\n * primitives handle their own disabled colors; this wrapper covers arbitrary\n * subtrees and composites that expose no `disabled` prop, and enables\n * tooltips on disabled elements (native disabled controls swallow pointer\n * events, so the hint never fires without this).\n */\nexport const Disabled = forwardRef<HTMLElement, DisabledProps>(function Disabled(\n { disabled, allowClick, tooltip, tooltipSide = \"right\", children, ...rest },\n ref,\n) {\n const showTooltip = Boolean(disabled && tooltip);\n const enableClick = allowClick || showTooltip;\n\n const wrapper = (\n <Slot\n ref={ref}\n {...rest}\n aria-disabled={disabled || undefined}\n data-sds-disabled={disabled || undefined}\n data-allow-click={disabled && enableClick ? \"\" : undefined}\n >\n {children}\n </Slot>\n );\n\n if (!showTooltip || tooltip === undefined) return wrapper;\n\n // Own provider so the wrapper works without an app-level TooltipProvider.\n return (\n <TooltipProvider>\n <Tooltip\n content={typeof tooltip === \"string\" ? tooltip : resolveStr(tooltip)}\n side={tooltipSide}\n >\n {wrapper}\n </Tooltip>\n </TooltipProvider>\n );\n});\n","import \"./hoverable.css\";\nimport { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\n\nexport type HoverableInteraction = \"rest\" | \"hover\";\nexport type HoverableItemVariant = \"opacity-on-hover\";\nexport type HoverableWidth = \"fit\" | \"full\";\n\nexport interface HoverableRootProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n /** Group identifier matched by descendant `Hoverable.Item group` props. */\n group: string;\n /** Width preset. Default: `\"full\"`. */\n width?: HoverableWidth;\n /**\n * Interaction override. `\"hover\"` forces items visible regardless of hover\n * state — set it while a menu or modal opened from a hoverable action is\n * up, so the user keeps seeing which element they are acting on.\n * Default: `\"rest\"`.\n */\n interaction?: HoverableInteraction;\n}\n\n/**\n * Hover-tracking container for a named group. Entirely CSS-driven: the\n * browser's `:hover` controls descendant `Hoverable.Item` visibility, so\n * hover state clears automatically when modals or portals steal pointer\n * events. No React state or context.\n */\nconst HoverableRoot = forwardRef<HTMLDivElement, HoverableRootProps>(function HoverableRoot(\n { group, children, width = \"full\", interaction = \"rest\", className, ...props },\n ref,\n) {\n return (\n <div\n {...props}\n ref={ref}\n className={[width === \"full\" ? \"hoverable-width-full\" : \"hoverable-width-fit\", className]\n .filter(Boolean)\n .join(\" \")}\n data-hover-group={group}\n data-interaction={interaction !== \"rest\" ? interaction : undefined}\n >\n {children}\n </div>\n );\n});\n\nexport interface HoverableItemProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n /**\n * Group mode: matches an ancestor `Hoverable.Root group`. Omit for local\n * mode, where the item reveals on its own `:hover`.\n */\n group?: string;\n /** Reveal animation variant. Default: `\"opacity-on-hover\"`. */\n variant?: HoverableItemVariant;\n}\n\n/**\n * An element revealed on hover. Group mode (with `group`): visibility driven\n * by `:hover` on the nearest `Hoverable.Root`. Local mode (no `group`): the\n * item handles its own `:hover`. Keyboard focus inside the group or item\n * also reveals it.\n */\nconst HoverableItem = forwardRef<HTMLDivElement, HoverableItemProps>(function HoverableItem(\n { group, variant = \"opacity-on-hover\", children, className, ...props },\n ref,\n) {\n const isLocal = group === undefined;\n return (\n <div\n {...props}\n ref={ref}\n className={[\"hoverable-item\", className].filter(Boolean).join(\" \")}\n data-hoverable-variant={variant}\n data-hoverable-local={isLocal ? \"true\" : undefined}\n >\n {children}\n </div>\n );\n});\n\n/**\n * Hover-to-reveal compound component.\n *\n * - `Hoverable.Root` — the hover area (e.g. a row or card)\n * - `Hoverable.Item` — the revealed element (e.g. a delete button)\n */\nexport const Hoverable = {\n Root: HoverableRoot,\n Item: HoverableItem,\n};\n\nexport { HoverableRoot, HoverableItem };\n","import { Interactive, type InteractiveStatefulProps } from \"../Interactive/Interactive\";\nimport { Text } from \"../Text/Text\";\nimport type { RichStr } from \"../Text/richstr\";\nimport {\n iconSlot,\n withTooltip,\n type IconComponent,\n type InteractiveButtonSize,\n} from \"../../internal/interactive-buttons\";\n\nexport type SelectButtonSize = InteractiveButtonSize;\nexport type SelectButtonTooltipSide = \"top\" | \"right\" | \"bottom\" | \"left\";\n\n/**\n * Content union enforced on `foldable`:\n * - `foldable: true` → `icon` and `children` required (icon stays, label and\n * rightIcon fold away)\n * - otherwise at least one of `icon` or `children`\n */\ntype SelectButtonContentProps =\n | { foldable: true; icon: IconComponent; children: string | RichStr; rightIcon?: IconComponent }\n | {\n foldable?: false;\n icon?: IconComponent;\n children: string | RichStr;\n rightIcon?: IconComponent;\n }\n | {\n foldable?: false;\n icon: IconComponent;\n children?: string | RichStr;\n rightIcon?: IconComponent;\n };\n\nexport type SelectButtonProps = Omit<InteractiveStatefulProps, \"children\"> &\n SelectButtonContentProps & {\n /** Size preset controlling height, text size, and rounding. Default: `\"lg\"`. */\n size?: SelectButtonSize;\n /** Tooltip shown on hover. Folded disabled buttons fall back to the label. */\n tooltip?: string;\n /** Width preset. Default: `\"fit\"`. */\n width?: \"fit\" | \"full\";\n /** Tooltip side. Default: `\"top\"`. */\n tooltipSide?: SelectButtonTooltipSide;\n };\n\n/**\n * Stateful toggle button over `Interactive.Stateful`: empty / filled /\n * selected color states, optional foldable label that expands on hover.\n */\nexport function SelectButton({\n icon: Icon,\n children,\n rightIcon: RightIcon,\n size = \"lg\",\n type = \"button\",\n foldable,\n width,\n tooltip,\n tooltipSide = \"top\",\n disabled,\n ...statefulProps\n}: SelectButtonProps) {\n const isLarge = size === \"lg\";\n\n const labelEl = children ? (\n <Text font={isLarge ? \"main-ui-body\" : \"secondary-body\"} color=\"inherit\" nowrap>\n {children}\n </Text>\n ) : null;\n\n const button = (\n <Interactive.Stateful disabled={disabled} {...statefulProps}>\n <Interactive.Container\n type={type}\n size={size}\n width={width}\n rounding={isLarge ? \"md\" : size === \"2xs\" ? \"xs\" : \"sm\"}\n >\n <span\n className={[\"sds-button-row\", foldable ? \"interactive-foldable-host\" : \"sds-button-row-gap\"].join(\" \")}\n >\n {iconSlot(Icon, size, !foldable && !!children)}\n {foldable ? (\n <Interactive.Foldable>\n {labelEl}\n {iconSlot(RightIcon, size, !!children)}\n </Interactive.Foldable>\n ) : (\n <>\n {labelEl}\n {iconSlot(RightIcon, size, !!children)}\n </>\n )}\n </span>\n </Interactive.Container>\n </Interactive.Stateful>\n );\n\n const resolvedTooltip =\n tooltip ??\n (foldable && disabled && typeof children === \"string\" ? children : undefined);\n\n return <>{withTooltip(button, resolvedTooltip, tooltipSide)}</>;\n}\n","import {\n Interactive,\n type InteractiveContainerRounding,\n type InteractiveInteraction,\n type InteractiveStatefulProps,\n} from \"../Interactive/Interactive\";\nimport { Text } from \"../Text/Text\";\nimport type { RichStr } from \"../Text/richstr\";\nimport {\n ChevronIcon,\n iconSlot,\n withTooltip,\n type IconComponent,\n type InteractiveButtonSize,\n} from \"../../internal/interactive-buttons\";\n\nexport type OpenButtonVariant = \"select-light\" | \"select-heavy\" | \"select-tinted\";\nexport type OpenButtonSize = InteractiveButtonSize;\nexport type OpenButtonTooltipSide = \"top\" | \"right\" | \"bottom\" | \"left\";\n\n/**\n * Content union enforced on `foldable`:\n * - `foldable: true` → `icon` and `children` required (icon stays, label and\n * chevron fold away)\n * - otherwise at least one of `icon` or `children`\n */\ntype OpenButtonContentProps =\n | { foldable: true; icon: IconComponent; children: string | RichStr }\n | { foldable?: false; icon?: IconComponent; children: string | RichStr }\n | { foldable?: false; icon: IconComponent; children?: string | RichStr };\n\nexport type OpenButtonProps = Omit<InteractiveStatefulProps, \"variant\" | \"children\"> &\n OpenButtonContentProps & {\n /** Visual variant. Default: `\"select-heavy\"`. */\n variant?: OpenButtonVariant;\n /** Size preset. Default: `\"lg\"`. */\n size?: OpenButtonSize;\n /** Width preset. Default: `\"fit\"`. */\n width?: \"fit\" | \"full\";\n /**\n * When `\"between\"`, icon + label group left and the chevron pushes to the\n * right edge. Default keeps a tight row.\n */\n justifyContent?: \"between\";\n /** Tooltip shown on hover. */\n tooltip?: string;\n /** Tooltip side. Default: `\"top\"`. */\n tooltipSide?: OpenButtonTooltipSide;\n /** Override the rounding derived from `size`. */\n rounding?: InteractiveContainerRounding;\n };\n\n/**\n * Dropdown trigger button with a built-in rotating chevron. When rendered as\n * a Radix trigger (DropdownMenu, Popover), the injected `data-state=\"open\"`\n * automatically forces the hover visual while the menu is open.\n */\nexport function OpenButton({\n icon: Icon,\n children,\n size = \"lg\",\n foldable,\n width,\n justifyContent,\n tooltip,\n tooltipSide = \"top\",\n rounding: roundingOverride,\n interaction,\n variant = \"select-heavy\",\n disabled,\n ...statefulProps\n}: OpenButtonProps) {\n // Derive open state: explicit prop, else Radix data-state injected via Slot.\n const dataState = (statefulProps as Record<string, unknown>)[\"data-state\"] as\n | string\n | undefined;\n const resolvedInteraction: InteractiveInteraction =\n interaction ?? (dataState === \"open\" ? \"hover\" : \"rest\");\n\n const isLarge = size === \"lg\";\n\n const labelEl = children ? (\n <Text font={isLarge ? \"main-ui-body\" : \"secondary-body\"} color=\"inherit\" nowrap>\n {children}\n </Text>\n ) : null;\n\n const rowClass = [\n \"sds-button-row\",\n justifyContent === \"between\"\n ? \"sds-button-row-between\"\n : foldable\n ? \"interactive-foldable-host\"\n : \"sds-button-row-gap\",\n ].join(\" \");\n\n const button = (\n <Interactive.Stateful\n variant={variant}\n interaction={resolvedInteraction}\n disabled={disabled}\n {...statefulProps}\n >\n <Interactive.Container\n type=\"button\"\n size={size}\n width={width}\n rounding={roundingOverride ?? (isLarge ? \"md\" : size === \"2xs\" ? \"xs\" : \"sm\")}\n >\n <span className={rowClass}>\n {justifyContent === \"between\" ? (\n <>\n <span className=\"sds-button-row sds-button-row-gap\">\n {iconSlot(Icon, size, !foldable && !!children)}\n {labelEl}\n </span>\n {iconSlot(ChevronIcon, size, !!children)}\n </>\n ) : foldable ? (\n <>\n {iconSlot(Icon, size, false)}\n <Interactive.Foldable>\n {labelEl}\n {iconSlot(ChevronIcon, size, !!children)}\n </Interactive.Foldable>\n </>\n ) : (\n <>\n {iconSlot(Icon, size, !!children)}\n {labelEl}\n {iconSlot(ChevronIcon, size, !!children)}\n </>\n )}\n </span>\n </Interactive.Container>\n </Interactive.Stateful>\n );\n\n const resolvedTooltip =\n tooltip ??\n (foldable && disabled && typeof children === \"string\" ? children : undefined);\n\n return <>{withTooltip(button, resolvedTooltip, tooltipSide)}</>;\n}\n","import { forwardRef, type ReactNode } from \"react\";\nimport styles from \"./ExpandableButton.module.css\";\nimport { Button, type ButtonProps } from \"../Button/Button\";\n\nexport interface ExpandableButtonProps\n extends Omit<ButtonProps, \"iconLeft\" | \"iconRight\" | \"iconOnly\" | \"children\" | \"title\"> {\n /** Icon rendered in the fixed square box. Stays visible at rest. */\n icon: ReactNode;\n /**\n * Text label. Collapsed (width 0) at rest; slides out on hover / keyboard\n * focus. Also used as the `title` and `aria-label` so the control is always\n * announced even while the label is visually collapsed.\n */\n label: string;\n /**\n * When true, the label also expands while an ancestor element carrying the\n * `data-expand-trigger` attribute is hovered — so a whole card can reveal the\n * label on hover, not just the button itself. Default: false.\n */\n expandOnContainerHover?: boolean;\n}\n\n/**\n * A square icon Button whose text label is collapsed at rest and slides out\n * smoothly on hover / keyboard focus (and, optionally, while an ancestor\n * `[data-expand-trigger]` is hovered). Composes the DS `Button` for all visual\n * styling — variant, size, and every other Button prop passes straight through.\n */\nexport const ExpandableButton = forwardRef<HTMLButtonElement, ExpandableButtonProps>(\n function ExpandableButton(\n { icon, label, expandOnContainerHover = false, className, ...rest },\n ref,\n ) {\n const classes = [\n styles.root,\n expandOnContainerHover ? styles.containerHover : null,\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <Button\n ref={ref}\n className={classes}\n title={label}\n aria-label={label}\n iconLeft={\n <span className={styles.iconBox} aria-hidden=\"true\">\n {icon}\n </span>\n }\n {...rest}\n >\n <span className={styles.label}>{label}</span>\n </Button>\n );\n },\n);\n","import {\n Interactive,\n type InteractiveInteraction,\n type InteractiveStatefulProps,\n} from \"../Interactive/Interactive\";\nimport { Text } from \"../Text/Text\";\nimport type { RichStr } from \"../Text/richstr\";\nimport SvgX from \"../../icons/X\";\nimport styles from \"./FilterButton.module.css\";\nimport {\n ChevronIcon,\n iconSlot,\n withTooltip,\n type IconComponent,\n} from \"../../internal/interactive-buttons\";\n\nexport type FilterButtonTooltipSide = \"top\" | \"right\" | \"bottom\" | \"left\";\n\nexport interface FilterButtonProps\n extends Omit<InteractiveStatefulProps, \"variant\" | \"state\" | \"children\"> {\n /** Left icon, always visible. */\n icon: IconComponent;\n /** Label between the icon and the trailing indicator. */\n children: string | RichStr;\n /** Whether the filter has an active selection. Default: false. */\n active?: boolean;\n /** Called when the clear (X) control is clicked in the active state. */\n onClear: () => void;\n /** Tooltip shown on hover. */\n tooltip?: string;\n /** Tooltip side. Default: `\"top\"`. */\n tooltipSide?: FilterButtonTooltipSide;\n}\n\n/**\n * Filter chip: chevron when inactive, clear-X when a selection is active.\n * Active state uses the inverted `select-filter` palette.\n */\nexport function FilterButton({\n icon: Icon,\n children,\n onClear,\n tooltip,\n tooltipSide = \"top\",\n active = false,\n interaction,\n ...statefulProps\n}: FilterButtonProps) {\n // Derive open state: explicit prop, else Radix data-state injected via Slot.\n const dataState = (statefulProps as Record<string, unknown>)[\"data-state\"] as\n | string\n | undefined;\n const resolvedInteraction: InteractiveInteraction =\n interaction ?? (dataState === \"open\" ? \"hover\" : \"rest\");\n\n const button = (\n <span className={styles.anchor}>\n <Interactive.Stateful\n {...statefulProps}\n variant=\"select-filter\"\n interaction={resolvedInteraction}\n state={active ? \"selected\" : \"empty\"}\n >\n <Interactive.Container type=\"button\">\n <span className=\"sds-button-row sds-button-row-gap\">\n {iconSlot(Icon, \"lg\", true)}\n {/* Consume the resolved interactive foreground explicitly. `color`\n inherit lost to the font preset's own color class by stylesheet\n order, leaving the selected-state label unreadable in dark mode;\n the inline value wins deterministically and tracks every state. */}\n <Text\n font=\"main-ui-action\"\n nowrap\n style={{ color: \"var(--interactive-foreground)\" }}\n >\n {children}\n </Text>\n <span style={{ visibility: active ? \"hidden\" : \"visible\" }}>\n {iconSlot(ChevronIcon, \"lg\", true)}\n </span>\n </span>\n </Interactive.Container>\n </Interactive.Stateful>\n\n {active && (\n <span className={styles.clear}>\n {/* Forced hover keeps the X prominent against the inverted selected\n background; at rest it renders dimmed and looks disabled. */}\n <Interactive.Stateless\n variant=\"default\"\n prominence=\"tertiary\"\n interaction=\"hover\"\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onClear();\n }}\n >\n <Interactive.Container type=\"button\" size=\"2xs\" rounding=\"xs\" aria-label=\"Clear filter\">\n <SvgX className={styles.clearIcon} />\n </Interactive.Container>\n </Interactive.Stateless>\n </span>\n )}\n </span>\n );\n\n return <>{withTooltip(button, tooltip, tooltipSide)}</>;\n}\n","import type { MouseEvent } from \"react\";\nimport styles from \"./LinkButton.module.css\";\nimport SvgExternalLink from \"../../icons/ExternalLink\";\nimport { withTooltip } from \"../../internal/interactive-buttons\";\nimport type { RichStr } from \"../Text/richstr\";\n\nexport type LinkButtonTooltipSide = \"top\" | \"right\" | \"bottom\" | \"left\";\n\nexport interface LinkButtonProps {\n /** Visible label, rendered as underlined link text. */\n children: string;\n /** Destination URL. When provided, renders an `<a>`. */\n href?: string;\n /** Anchor target. Only meaningful with `href`. */\n target?: string;\n /** Click handler. Without `href`, renders a `<button>`. */\n onClick?: () => void;\n /** Applies disabled styling and suppresses navigation/clicks. */\n disabled?: boolean;\n /** Tooltip shown on hover. Pass `markdown()` for inline markdown. */\n tooltip?: string | RichStr;\n /** Tooltip side. Default: `\"top\"`. */\n tooltipSide?: LinkButtonTooltipSide;\n}\n\n/**\n * A bare, anchor-styled link with a trailing external-link glyph. For inline\n * references (\"Pricing\", \"Docs\"), not interactive surfaces that need hover\n * backgrounds or prominence tiers — use `Button` for those. Deliberately\n * does not use the Interactive primitives: their height, rounding, and color\n * matrix are wrong for an inline text link.\n */\nexport function LinkButton({\n children,\n href,\n target,\n onClick,\n disabled,\n tooltip,\n tooltipSide = \"top\",\n}: LinkButtonProps) {\n const inner = (\n <>\n <span className={`${styles.label} font-secondary-body`}>{children}</span>\n <SvgExternalLink style={{ width: 12, height: 12 }} />\n </>\n );\n\n // Always stop propagation so clicks don't bubble to interactive ancestors\n // (cards, list rows). If disabled, also prevent anchor navigation.\n const handleAnchorClick = (e: MouseEvent<HTMLAnchorElement>) => {\n e.stopPropagation();\n if (disabled) e.preventDefault();\n };\n\n const handleButtonClick = (e: MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation();\n if (disabled) return;\n onClick?.();\n };\n\n const element = href ? (\n <a\n className={styles.linkButton}\n href={disabled ? undefined : href}\n target={target}\n rel={target === \"_blank\" ? \"noopener noreferrer\" : undefined}\n aria-disabled={disabled || undefined}\n data-disabled={disabled || undefined}\n onClick={handleAnchorClick}\n >\n {inner}\n </a>\n ) : (\n <button\n type=\"button\"\n className={styles.linkButton}\n onClick={handleButtonClick}\n disabled={disabled}\n data-disabled={disabled || undefined}\n >\n {inner}\n </button>\n );\n\n return <>{withTooltip(element, tooltip, tooltipSide)}</>;\n}\n","import styles from \"./Tag.module.css\";\nimport { resolveStr, type RichStr } from \"../Text/richstr\";\nimport type { IconComponent } from \"../../internal/interactive-buttons\";\n\nexport type TagColor = \"green\" | \"purple\" | \"blue\" | \"gray\" | \"amber\";\nexport type TagSize = \"sm\" | \"md\";\n\nexport interface TagProps {\n /** Optional leading icon. */\n icon?: IconComponent;\n /** Label text. Supports inline markdown via `markdown()`. */\n title: string | RichStr;\n /** Color variant. Default: `\"gray\"`. */\n color?: TagColor;\n /** Size variant. Default: `\"sm\"`. */\n size?: TagSize;\n}\n\n/**\n * Categorical color label. Distinct from `Badge`: Badge communicates status\n * tone (success, warning, error); Tag classifies (team, topic, model).\n */\nexport function Tag({ icon: Icon, title, color = \"gray\", size = \"sm\" }: TagProps) {\n return (\n <span className={[styles.tag, styles[`color-${color}`]].join(\" \")} data-size={size}>\n {Icon ? (\n <span className={styles.iconContainer}>\n <Icon className={styles.icon} />\n </span>\n ) : null}\n <span className={styles.title}>{resolveStr(title)}</span>\n </span>\n );\n}\n","import { forwardRef, useState, type CSSProperties, type ReactNode } from \"react\";\nimport { Button } from \"../Button/Button\";\nimport SvgEdit from \"../../icons/Edit\";\nimport type { IconComponent } from \"../../internal/interactive-buttons\";\nimport { Text, type TextFont } from \"../Text/Text\";\nimport { toPlainString, type RichStr } from \"../Text/richstr\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type ContentXlSizePreset = \"headline\" | \"section\";\n\n/** Edit-button size on the DS Button scale (`sm | md | lg`). */\ntype EditButtonSize = \"sm\" | \"md\";\n\ninterface ContentXlPresetConfig {\n /** Icon width/height (CSS value). */\n iconSize: string;\n /** Padding on the icon container (CSS value). */\n iconContainerPadding: string;\n /** More-icon-1 width/height (CSS value). */\n moreIcon1Size: string;\n /** Padding on the more-icon-1 container (CSS value). */\n moreIcon1ContainerPadding: string;\n /** More-icon-2 width/height (CSS value). */\n moreIcon2Size: string;\n /** Padding on the more-icon-2 container (CSS value). */\n moreIcon2ContainerPadding: string;\n /** Font preset for the title. */\n titleFont: TextFont;\n /** Title line-height — also used as icon container min-height (CSS value). */\n lineHeight: string;\n /** Button `size` prop for the edit button. */\n editButtonSize: EditButtonSize;\n /** Padding on the edit-button container (CSS value). */\n editButtonPadding: string;\n}\n\nexport interface ContentXlProps {\n /** Optional icon component. */\n icon?: IconComponent;\n /** Main title text. Supports inline markdown via `markdown()`. */\n title: string | RichStr;\n /** Optional description below the title. */\n description?: string | RichStr;\n /** Enable inline editing of the title. */\n editable?: boolean;\n /** Called when the user commits an edit. */\n onTitleChange?: (newTitle: string) => void;\n /** Size preset. Default: `\"headline\"`. */\n sizePreset?: ContentXlSizePreset;\n /** Optional secondary icon rendered in the icon row. */\n moreIcon1?: IconComponent;\n /** Optional tertiary icon rendered in the icon row. */\n moreIcon2?: IconComponent;\n /**\n * Action slot rendered on the right side of the content row.\n * Naturally hosts a `ContentAction` trigger, button, badge, or arbitrary\n * nodes. When set, the root becomes a row pairing the content with the slot.\n */\n rightChildren?: ReactNode;\n /** Extra class for the root `<div>`. */\n className?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Presets\n// ---------------------------------------------------------------------------\n\nconst CONTENT_XL_PRESETS: Record<ContentXlSizePreset, ContentXlPresetConfig> = {\n headline: {\n iconSize: \"2rem\",\n iconContainerPadding: \"0.125rem\",\n moreIcon1Size: \"1rem\",\n moreIcon1ContainerPadding: \"0.125rem\",\n moreIcon2Size: \"2rem\",\n moreIcon2ContainerPadding: \"0.125rem\",\n titleFont: \"heading-h2\",\n lineHeight: \"2.25rem\",\n editButtonSize: \"md\",\n editButtonPadding: \"0.25rem\",\n },\n section: {\n iconSize: \"1.5rem\",\n iconContainerPadding: \"0.125rem\",\n moreIcon1Size: \"0.75rem\",\n moreIcon1ContainerPadding: \"0.125rem\",\n moreIcon2Size: \"1.5rem\",\n moreIcon2ContainerPadding: \"0.125rem\",\n // DS lacks `heading-h3-section`; nearest is `heading-h3`.\n titleFont: \"heading-h3\",\n lineHeight: \"1.75rem\",\n editButtonSize: \"sm\",\n editButtonPadding: \"0.125rem\",\n },\n};\n\n// ---------------------------------------------------------------------------\n// ContentXl — icon row on top (flex-col)\n// ---------------------------------------------------------------------------\n\nexport const ContentXl = forwardRef<HTMLDivElement, ContentXlProps>(\n function ContentXl(\n {\n sizePreset = \"headline\",\n icon: Icon,\n title,\n description,\n editable,\n onTitleChange,\n moreIcon1: MoreIcon1,\n moreIcon2: MoreIcon2,\n rightChildren,\n className,\n },\n ref,\n ) {\n const [editing, setEditing] = useState(false);\n const [editValue, setEditValue] = useState(toPlainString(title));\n\n const config = CONTENT_XL_PRESETS[sizePreset];\n\n function startEditing() {\n setEditValue(toPlainString(title));\n setEditing(true);\n }\n\n function commit() {\n const value = editValue.trim();\n if (value && value !== toPlainString(title)) onTitleChange?.(value);\n setEditing(false);\n }\n\n const classes = [\"sds-content-xl\", className].filter(Boolean).join(\" \");\n\n const inner = (\n <>\n {(Icon || MoreIcon1 || MoreIcon2) && (\n <div className=\"sds-content-xl-icon-row\">\n {Icon && (\n <div\n className=\"sds-content-xl-icon-container\"\n style={{\n padding: config.iconContainerPadding,\n minHeight: config.lineHeight,\n }}\n >\n <Icon\n className=\"sds-content-xl-icon\"\n style={{ width: config.iconSize, height: config.iconSize }}\n />\n </div>\n )}\n\n {MoreIcon1 && (\n <div\n className=\"sds-content-xl-more-icon-container\"\n style={{ padding: config.moreIcon1ContainerPadding }}\n >\n <MoreIcon1\n className=\"sds-content-xl-icon\"\n style={{\n width: config.moreIcon1Size,\n height: config.moreIcon1Size,\n }}\n />\n </div>\n )}\n\n {MoreIcon2 && (\n <div\n className=\"sds-content-xl-more-icon-container\"\n style={{ padding: config.moreIcon2ContainerPadding }}\n >\n <MoreIcon2\n className=\"sds-content-xl-icon\"\n style={{\n width: config.moreIcon2Size,\n height: config.moreIcon2Size,\n }}\n />\n </div>\n )}\n </div>\n )}\n\n <div className=\"sds-content-xl-body\">\n <div className=\"sds-content-xl-title-row\">\n {editing ? (\n <div className=\"sds-content-xl-input-sizer\">\n <span\n className={`sds-content-xl-input-mirror font-${config.titleFont}`}\n >\n {editValue || \" \"}\n </span>\n <input\n className={`sds-content-xl-input font-${config.titleFont}`}\n value={editValue}\n onChange={(e) => setEditValue(e.target.value)}\n size={1}\n autoFocus\n onFocus={(e) => e.currentTarget.select()}\n onBlur={commit}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") commit();\n if (e.key === \"Escape\") {\n setEditValue(toPlainString(title));\n setEditing(false);\n }\n }}\n style={{ height: config.lineHeight } as CSSProperties}\n />\n </div>\n ) : (\n <Text\n font={config.titleFont}\n color=\"inherit\"\n maxLines={1}\n title={toPlainString(title)}\n onClick={editable ? startEditing : undefined}\n >\n {title}\n </Text>\n )}\n\n {editable && !editing && (\n <div\n className=\"sds-content-xl-edit-button\"\n style={{ padding: config.editButtonPadding }}\n >\n <Button\n variant=\"tertiary\"\n size={config.editButtonSize}\n iconLeft={<SvgEdit />}\n iconOnly\n tooltip=\"Edit\"\n tooltipSide=\"right\"\n aria-label=\"Edit\"\n onClick={startEditing}\n />\n </div>\n )}\n </div>\n\n {description && toPlainString(description) && (\n <div className=\"sds-content-xl-description\">\n <Text font=\"secondary-body\" color=\"text-03\" as=\"p\">\n {description}\n </Text>\n </div>\n )}\n </div>\n </>\n );\n\n if (rightChildren) {\n return (\n <div ref={ref} className={classes} data-has-right>\n <div className=\"sds-content-xl-main\">{inner}</div>\n <div className=\"sds-content-right\">{rightChildren}</div>\n </div>\n );\n }\n\n return (\n <div ref={ref} className={classes}>\n {inner}\n </div>\n );\n },\n);\n","import { forwardRef, useState, type CSSProperties, type ReactNode } from \"react\";\nimport { Button } from \"../Button/Button\";\nimport SvgEdit from \"../../icons/Edit\";\nimport type { IconComponent } from \"../../internal/interactive-buttons\";\nimport { Text, type TextFont } from \"../Text/Text\";\nimport { toPlainString, type RichStr } from \"../Text/richstr\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type ContentLgSizePreset = \"headline\" | \"section\";\n\n/** Edit-button size on the DS Button scale (`sm | md | lg`). */\ntype EditButtonSize = \"sm\" | \"md\";\n\ninterface ContentLgPresetConfig {\n /** Icon width/height (CSS value). */\n iconSize: string;\n /** Padding on the icon container (CSS value). */\n iconContainerPadding: string;\n /** Gap between icon container and content (CSS value). */\n gap: string;\n /** Font preset for the title. */\n titleFont: TextFont;\n /** Title line-height — also used as icon container min-height (CSS value). */\n lineHeight: string;\n /** Button `size` prop for the edit button. */\n editButtonSize: EditButtonSize;\n /** Padding on the edit-button container (CSS value). */\n editButtonPadding: string;\n}\n\nexport interface ContentLgProps {\n /** Optional icon component. */\n icon?: IconComponent;\n /** Main title text. Supports inline markdown via `markdown()`. */\n title: string | RichStr;\n /** Optional description below the title. */\n description?: string | RichStr;\n /** Enable inline editing of the title. */\n editable?: boolean;\n /** Called when the user commits an edit. */\n onTitleChange?: (newTitle: string) => void;\n /** Size preset. Default: `\"headline\"`. */\n sizePreset?: ContentLgSizePreset;\n /**\n * Action slot rendered on the right side of the content row.\n * Naturally hosts a `ContentAction` trigger, button, badge, or arbitrary\n * nodes. When set, the root becomes a row pairing the content with the slot.\n */\n rightChildren?: ReactNode;\n /** Extra class for the root `<div>`. */\n className?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Presets\n// ---------------------------------------------------------------------------\n\nconst CONTENT_LG_PRESETS: Record<ContentLgSizePreset, ContentLgPresetConfig> = {\n headline: {\n iconSize: \"2rem\",\n iconContainerPadding: \"0.125rem\",\n gap: \"0.25rem\",\n titleFont: \"heading-h2\",\n lineHeight: \"2.25rem\",\n editButtonSize: \"md\",\n editButtonPadding: \"0.25rem\",\n },\n section: {\n iconSize: \"1.25rem\",\n iconContainerPadding: \"0.25rem\",\n gap: \"0rem\",\n // DS lacks `heading-h3-muted`; nearest is `heading-h3`.\n titleFont: \"heading-h3\",\n lineHeight: \"1.75rem\",\n editButtonSize: \"sm\",\n editButtonPadding: \"0.125rem\",\n },\n};\n\n// ---------------------------------------------------------------------------\n// ContentLg — icon inline (flex-row)\n// ---------------------------------------------------------------------------\n\nexport const ContentLg = forwardRef<HTMLDivElement, ContentLgProps>(\n function ContentLg(\n {\n sizePreset = \"headline\",\n icon: Icon,\n title,\n description,\n editable,\n onTitleChange,\n rightChildren,\n className,\n },\n ref,\n ) {\n const [editing, setEditing] = useState(false);\n const [editValue, setEditValue] = useState(toPlainString(title));\n\n const config = CONTENT_LG_PRESETS[sizePreset];\n\n function startEditing() {\n setEditValue(toPlainString(title));\n setEditing(true);\n }\n\n function commit() {\n const value = editValue.trim();\n if (value && value !== toPlainString(title)) onTitleChange?.(value);\n setEditing(false);\n }\n\n const classes = [\"sds-content-lg\", className].filter(Boolean).join(\" \");\n\n const inner = (\n <>\n {Icon && (\n <div\n className=\"sds-content-lg-icon-container\"\n style={{\n padding: config.iconContainerPadding,\n minHeight: config.lineHeight,\n }}\n >\n <Icon\n className=\"sds-content-lg-icon\"\n style={{ width: config.iconSize, height: config.iconSize }}\n />\n </div>\n )}\n\n <div className=\"sds-content-lg-body\">\n <div className=\"sds-content-lg-title-row\">\n {editing ? (\n <div className=\"sds-content-lg-input-sizer\">\n <span\n className={`sds-content-lg-input-mirror font-${config.titleFont}`}\n >\n {editValue || \"\\u00A0\"}\n </span>\n <input\n className={`sds-content-lg-input font-${config.titleFont}`}\n value={editValue}\n onChange={(e) => setEditValue(e.target.value)}\n size={1}\n autoFocus\n onFocus={(e) => e.currentTarget.select()}\n onBlur={commit}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") commit();\n if (e.key === \"Escape\") {\n setEditValue(toPlainString(title));\n setEditing(false);\n }\n }}\n style={{ height: config.lineHeight } as CSSProperties}\n />\n </div>\n ) : (\n <Text\n font={config.titleFont}\n color=\"inherit\"\n maxLines={1}\n title={toPlainString(title)}\n onClick={editable ? startEditing : undefined}\n >\n {title}\n </Text>\n )}\n\n {editable && !editing && (\n <div\n className=\"sds-content-lg-edit-button\"\n style={{ padding: config.editButtonPadding }}\n >\n <Button\n variant=\"tertiary\"\n size={config.editButtonSize}\n iconLeft={<SvgEdit />}\n iconOnly\n tooltip=\"Edit\"\n tooltipSide=\"right\"\n aria-label=\"Edit\"\n onClick={startEditing}\n />\n </div>\n )}\n </div>\n\n {description && toPlainString(description) && (\n <div className=\"sds-content-lg-description\">\n <Text font=\"secondary-body\" color=\"text-03\" as=\"p\">\n {description}\n </Text>\n </div>\n )}\n </div>\n </>\n );\n\n if (rightChildren) {\n return (\n <div ref={ref} className={classes} data-has-right>\n <div className=\"sds-content-lg-main\" style={{ gap: config.gap }}>\n {inner}\n </div>\n <div className=\"sds-content-right\">{rightChildren}</div>\n </div>\n );\n }\n\n return (\n <div ref={ref} className={classes} style={{ gap: config.gap }}>\n {inner}\n </div>\n );\n },\n);\n","import {\n forwardRef,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { Button } from \"../Button/Button\";\nimport { Tag, type TagProps } from \"../Tag/Tag\";\nimport SvgAlertCircle from \"../../icons/AlertCircle\";\nimport SvgAlertTriangle from \"../../icons/AlertTriangle\";\nimport SvgEdit from \"../../icons/Edit\";\nimport SvgXOctagon from \"../../icons/XOctagon\";\nimport type { IconComponent } from \"../../internal/interactive-buttons\";\nimport { Text, type TextFont } from \"../Text/Text\";\nimport { toPlainString, type RichStr } from \"../Text/richstr\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type ContentMdSizePreset = \"main-content\" | \"main-ui\" | \"secondary\";\n\nexport type ContentMdAuxIcon = \"info-gray\" | \"info-blue\" | \"warning\" | \"error\";\n\nexport type ContentMdSuffix = \"optional\" | (string & {});\n\n/** Edit-button size on the DS Button scale (`sm | md | lg`). */\ntype EditButtonSize = \"sm\" | \"md\";\n\ninterface ContentMdPresetConfig {\n iconSize: string;\n /** Padding on the icon container (CSS value). */\n iconContainerPadding: string;\n /** Icon color token. */\n iconColor: string;\n titleFont: TextFont;\n lineHeight: string;\n /** Button `size` prop for the edit button. */\n editButtonSize: EditButtonSize;\n /** Padding on the edit-button container (CSS value). */\n editButtonPadding: string;\n /** Font preset for the muted suffix. */\n suffixFont: TextFont;\n /** Aux icon size = lineHeight − 2 × icon padding. */\n auxIconSize: string;\n /** Left indent for the description so it aligns with the title (past the icon). */\n descriptionIndent: string;\n}\n\nexport interface ContentMdProps {\n /** Optional icon component. */\n icon?: IconComponent;\n /** Main title text. Supports inline markdown via `markdown()`. */\n title: string | RichStr;\n /** Optional description text below the title. */\n description?: string | RichStr;\n /** Enable inline editing of the title. */\n editable?: boolean;\n /** Called when the user commits an edit. */\n onTitleChange?: (newTitle: string) => void;\n /**\n * Muted suffix rendered beside the title.\n * Use `\"optional\"` for the standard \"(Optional)\" label, or pass any string.\n */\n suffix?: ContentMdSuffix;\n /** Auxiliary status icon rendered beside the title. */\n auxIcon?: ContentMdAuxIcon;\n /** Tag rendered beside the title. */\n tag?: TagProps;\n /** Size preset. Default: `\"main-ui\"`. */\n sizePreset?: ContentMdSizePreset;\n /**\n * Action slot rendered on the right side of the content row.\n * Naturally hosts a `ContentAction` trigger, button, badge, or arbitrary\n * nodes. When set, the root becomes a row pairing the content with the slot.\n */\n rightChildren?: ReactNode;\n /** Extra class for the root `<div>`. */\n className?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Presets\n// ---------------------------------------------------------------------------\n\nconst CONTENT_MD_PRESETS: Record<ContentMdSizePreset, ContentMdPresetConfig> = {\n \"main-content\": {\n iconSize: \"1rem\",\n iconContainerPadding: \"0.25rem\",\n iconColor: \"var(--text-04)\",\n // DS lacks `main-content-emphasis`; nearest emphasis preset is `main-ui-action`.\n titleFont: \"main-ui-action\",\n lineHeight: \"1.5rem\",\n // DS Button has no xs/2xs; `sm` is the smallest preset.\n editButtonSize: \"sm\",\n editButtonPadding: \"0rem\",\n // DS lacks `main-content-muted`; nearest is `main-content`.\n suffixFont: \"main-content\",\n auxIconSize: \"1.25rem\",\n descriptionIndent: \"1.625rem\",\n },\n \"main-ui\": {\n iconSize: \"1rem\",\n iconContainerPadding: \"0.125rem\",\n iconColor: \"var(--text-03)\",\n titleFont: \"main-ui-action\",\n lineHeight: \"1.25rem\",\n editButtonSize: \"sm\",\n editButtonPadding: \"0rem\",\n // DS lacks `main-ui-muted`; nearest is `main-ui-body`.\n suffixFont: \"main-ui-body\",\n auxIconSize: \"1rem\",\n descriptionIndent: \"1.375rem\",\n },\n secondary: {\n iconSize: \"0.75rem\",\n iconContainerPadding: \"0.125rem\",\n iconColor: \"var(--text-04)\",\n titleFont: \"secondary-action\",\n lineHeight: \"1rem\",\n editButtonSize: \"sm\",\n editButtonPadding: \"0rem\",\n suffixFont: \"secondary-action\",\n auxIconSize: \"0.75rem\",\n descriptionIndent: \"1.125rem\",\n },\n};\n\nconst AUX_ICON_CONFIG: Record<\n ContentMdAuxIcon,\n { icon: IconComponent; color: string }\n> = {\n \"info-gray\": { icon: SvgAlertCircle, color: \"var(--text-02)\" },\n \"info-blue\": { icon: SvgAlertCircle, color: \"var(--status-info-05)\" },\n warning: { icon: SvgAlertTriangle, color: \"var(--status-warning-05)\" },\n error: { icon: SvgXOctagon, color: \"var(--status-error-05)\" },\n};\n\n// ---------------------------------------------------------------------------\n// ContentMd — compact inline (flex-row)\n// ---------------------------------------------------------------------------\n\nexport const ContentMd = forwardRef<HTMLDivElement, ContentMdProps>(\n function ContentMd(\n {\n icon: Icon,\n title,\n description,\n editable,\n onTitleChange,\n suffix,\n auxIcon,\n tag,\n sizePreset = \"main-ui\",\n rightChildren,\n className,\n },\n ref,\n ) {\n const [editing, setEditing] = useState(false);\n const [editValue, setEditValue] = useState(toPlainString(title));\n const inputRef = useRef<HTMLInputElement>(null);\n\n const config = CONTENT_MD_PRESETS[sizePreset];\n\n function startEditing() {\n setEditValue(toPlainString(title));\n setEditing(true);\n }\n\n function commit() {\n const value = editValue.trim();\n if (value && value !== toPlainString(title)) onTitleChange?.(value);\n setEditing(false);\n }\n\n const classes = [\"sds-content-md\", className].filter(Boolean).join(\" \");\n\n const inner = (\n <>\n <div\n className=\"sds-content-md-header\"\n data-editing={editing || undefined}\n >\n {Icon && (\n <div\n className=\"sds-content-md-icon-container\"\n style={{\n padding: config.iconContainerPadding,\n minHeight: config.lineHeight,\n }}\n >\n <Icon\n className=\"sds-content-md-icon\"\n style={{\n width: config.iconSize,\n height: config.iconSize,\n color: config.iconColor,\n }}\n />\n </div>\n )}\n\n <div className=\"sds-content-md-title-row\">\n {editing ? (\n <div className=\"sds-content-md-input-sizer\">\n <span\n className={`sds-content-md-input-mirror font-${config.titleFont}`}\n >\n {editValue || \"\\u00A0\"}\n </span>\n <input\n ref={inputRef}\n className={`sds-content-md-input font-${config.titleFont}`}\n value={editValue}\n onChange={(e) => setEditValue(e.target.value)}\n size={1}\n autoFocus\n onFocus={(e) => e.currentTarget.select()}\n onBlur={commit}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") commit();\n if (e.key === \"Escape\") {\n setEditValue(toPlainString(title));\n setEditing(false);\n }\n }}\n style={{ height: config.lineHeight } as CSSProperties}\n />\n </div>\n ) : (\n <Text\n font={config.titleFont}\n color=\"inherit\"\n maxLines={1}\n title={toPlainString(title)}\n onClick={editable ? startEditing : undefined}\n >\n {title}\n </Text>\n )}\n\n {suffix && (\n <Text font={config.suffixFont} color=\"text-03\">\n {suffix === \"optional\" ? \"(Optional)\" : suffix}\n </Text>\n )}\n\n {auxIcon &&\n (() => {\n const { icon: AuxIcon, color } = AUX_ICON_CONFIG[auxIcon];\n return (\n <div\n className=\"sds-content-md-aux-icon\"\n style={{ height: config.lineHeight }}\n >\n <AuxIcon\n style={{\n width: config.auxIconSize,\n height: config.auxIconSize,\n color,\n }}\n />\n </div>\n );\n })()}\n\n {tag && <Tag {...tag} />}\n\n {editable && !editing && (\n <div\n className=\"sds-content-md-edit-button\"\n style={{ padding: config.editButtonPadding }}\n >\n <Button\n variant=\"tertiary\"\n size={config.editButtonSize}\n iconLeft={<SvgEdit />}\n iconOnly\n tooltip=\"Edit\"\n tooltipSide=\"right\"\n aria-label=\"Edit\"\n onClick={startEditing}\n />\n </div>\n )}\n </div>\n </div>\n\n {description && toPlainString(description) && (\n <div\n className=\"sds-content-md-description\"\n style={\n Icon ? { paddingLeft: config.descriptionIndent } : undefined\n }\n >\n <Text font=\"secondary-body\" color=\"text-03\" as=\"p\">\n {description}\n </Text>\n </div>\n )}\n </>\n );\n\n if (rightChildren) {\n return (\n <div ref={ref} className={classes} data-has-right>\n <div className=\"sds-content-md-main\">{inner}</div>\n <div className=\"sds-content-right\">{rightChildren}</div>\n </div>\n );\n }\n\n return (\n <div ref={ref} className={classes}>\n {inner}\n </div>\n );\n },\n);\n","import { forwardRef, type ReactNode } from \"react\";\nimport type { IconComponent } from \"../../internal/interactive-buttons\";\nimport { Text, type TextFont } from \"../Text/Text\";\nimport { toPlainString, type RichStr } from \"../Text/richstr\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type ContentSmSizePreset = \"main-content\" | \"main-ui\" | \"secondary\";\nexport type ContentSmOrientation = \"vertical\" | \"inline\" | \"reverse\";\nexport type ContentSmProminence = \"default\" | \"muted\";\n\ninterface ContentSmPresetConfig {\n /** Icon width/height (CSS value). */\n iconSize: string;\n /** Padding on the icon container (CSS value). */\n iconContainerPadding: string;\n /** Font preset for the title. */\n titleFont: TextFont;\n /** Title line-height — also used as icon container min-height (CSS value). */\n lineHeight: string;\n /** Gap between icon container and title (CSS value). */\n gap: string;\n}\n\n/** Props for {@link ContentSm}. Does not support editing or descriptions. */\nexport interface ContentSmProps {\n /** Optional icon component. */\n icon?: IconComponent;\n /** Main title text (read-only — editing is not supported). */\n title: string | RichStr;\n /** Size preset. Default: `\"main-ui\"`. */\n sizePreset?: ContentSmSizePreset;\n /** Layout orientation. Default: `\"inline\"`. */\n orientation?: ContentSmOrientation;\n /** Title prominence. Default: `\"default\"`. */\n prominence?: ContentSmProminence;\n /**\n * Action slot rendered on the right side of the content row.\n * Naturally hosts a `ContentAction` trigger, button, badge, or arbitrary\n * nodes. When set, the root becomes a row pairing the content with the slot.\n */\n rightChildren?: ReactNode;\n /** Extra class for the root `<div>`. */\n className?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Presets\n// ---------------------------------------------------------------------------\n\nconst CONTENT_SM_PRESETS: Record<ContentSmSizePreset, ContentSmPresetConfig> = {\n \"main-content\": {\n iconSize: \"1rem\",\n iconContainerPadding: \"0.25rem\",\n // DS lacks `main-content-body`; nearest is `main-content`.\n titleFont: \"main-content\",\n lineHeight: \"1.5rem\",\n gap: \"0.125rem\",\n },\n \"main-ui\": {\n iconSize: \"1rem\",\n iconContainerPadding: \"0.125rem\",\n titleFont: \"main-ui-action\",\n lineHeight: \"1.25rem\",\n gap: \"0.25rem\",\n },\n secondary: {\n iconSize: \"0.75rem\",\n iconContainerPadding: \"0.125rem\",\n titleFont: \"secondary-action\",\n lineHeight: \"1rem\",\n gap: \"0.125rem\",\n },\n};\n\n// ---------------------------------------------------------------------------\n// ContentSm — body-text layout (orientation-driven)\n// ---------------------------------------------------------------------------\n\nexport const ContentSm = forwardRef<HTMLDivElement, ContentSmProps>(\n function ContentSm(\n {\n icon: Icon,\n title,\n sizePreset = \"main-ui\",\n orientation = \"inline\",\n prominence = \"default\",\n rightChildren,\n className,\n },\n ref,\n ) {\n const config = CONTENT_SM_PRESETS[sizePreset];\n\n const classes = [\"sds-content-sm\", className].filter(Boolean).join(\" \");\n\n const inner = (\n <>\n {Icon && (\n <div\n className=\"sds-content-sm-icon-container\"\n style={{\n padding: config.iconContainerPadding,\n minHeight: config.lineHeight,\n }}\n >\n <Icon\n className=\"sds-content-sm-icon\"\n style={{ width: config.iconSize, height: config.iconSize }}\n />\n </div>\n )}\n\n <Text\n font={config.titleFont}\n color=\"inherit\"\n maxLines={1}\n title={toPlainString(title)}\n >\n {title}\n </Text>\n </>\n );\n\n if (rightChildren) {\n return (\n <div\n ref={ref}\n className={classes}\n data-prominence={prominence}\n data-has-right\n >\n <div\n className=\"sds-content-sm-main\"\n data-orientation={orientation}\n style={{ gap: config.gap }}\n >\n {inner}\n </div>\n <div className=\"sds-content-right\">{rightChildren}</div>\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={classes}\n data-orientation={orientation}\n data-prominence={prominence}\n style={{ gap: config.gap }}\n >\n {inner}\n </div>\n );\n },\n);\n","import \"./content.css\";\nimport { forwardRef, type ReactNode } from \"react\";\nimport { ContentXl, type ContentXlProps } from \"./ContentXl\";\nimport { ContentLg, type ContentLgProps } from \"./ContentLg\";\nimport {\n ContentMd,\n type ContentMdProps,\n type ContentMdAuxIcon,\n type ContentMdSuffix,\n} from \"./ContentMd\";\nimport {\n ContentSm,\n type ContentSmProps,\n type ContentSmOrientation,\n type ContentSmProminence,\n} from \"./ContentSm\";\nimport type { IconComponent } from \"../../internal/interactive-buttons\";\nimport type { TagProps } from \"../Tag/Tag\";\nimport type { RichStr } from \"../Text/richstr\";\n\n// ---------------------------------------------------------------------------\n// Shared types\n// ---------------------------------------------------------------------------\n\nexport type SizePreset =\n | \"headline\"\n | \"section\"\n | \"main-content\"\n | \"main-ui\"\n | \"secondary\";\n\nexport type ContentVariant = \"heading\" | \"section\" | \"body\";\n\n/** Horizontal width preset for the wrapper. */\nexport type ContentWidth = \"auto\" | \"fit\" | \"full\";\n\ninterface ContentBaseProps {\n /** Optional icon component. */\n icon?: IconComponent;\n /** Main title text. Supports inline markdown via `markdown()`. */\n title: string | RichStr;\n /** Optional description below the title. */\n description?: string | RichStr;\n /** Enable inline editing of the title. */\n editable?: boolean;\n /** Called when the user commits an edit. */\n onTitleChange?: (newTitle: string) => void;\n /**\n * Width preset controlling the component's horizontal size.\n *\n * - `\"auto\"` / `\"fit\"` — Shrink-wraps to content width\n * - `\"full\"` — Stretches to fill the parent's width\n *\n * @default \"full\"\n */\n width?: ContentWidth;\n /**\n * Opt out of the automatic interactive color override.\n *\n * When `Content` is nested inside an `.interactive` element, its title and\n * icon colors are normally overridden by the interactive foreground palette.\n * Set this to `true` to keep Content's own colors regardless of context.\n *\n * @default false\n */\n nonInteractive?: boolean;\n /**\n * Action slot rendered on the right side of the content row.\n *\n * Naturally hosts a `ContentAction` trigger, `Button`, `Badge`, or any\n * arbitrary node(s). When set, the resolved layout's root becomes a row that\n * pairs the content with a trailing, vertically-centered action slot. The\n * slot is forwarded to whichever internal layout (`ContentXl` / `Lg` / `Md`\n * / `Sm`) the `sizePreset` × `variant` combination resolves to.\n */\n rightChildren?: ReactNode;\n /** Extra class for the resolved layout's root `<div>`. */\n className?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Discriminated union: valid sizePreset × variant combinations\n// ---------------------------------------------------------------------------\n\nexport type XlContentProps = ContentBaseProps & {\n /** Size preset. Default: `\"headline\"`. */\n sizePreset?: \"headline\" | \"section\";\n /** Variant. Default: `\"heading\"` for heading-eligible presets. */\n variant?: \"heading\";\n /** Optional secondary icon rendered in the icon row (ContentXl only). */\n moreIcon1?: IconComponent;\n /** Optional tertiary icon rendered in the icon row (ContentXl only). */\n moreIcon2?: IconComponent;\n};\n\nexport type LgContentProps = ContentBaseProps & {\n /** Size preset. Default: `\"headline\"`. */\n sizePreset?: \"headline\" | \"section\";\n /** Variant. */\n variant: \"section\";\n};\n\nexport type MdContentProps = ContentBaseProps & {\n sizePreset: \"main-content\" | \"main-ui\" | \"secondary\";\n variant?: \"section\";\n /** Muted suffix rendered beside the title. Use `\"optional\"` for \"(Optional)\". */\n suffix?: ContentMdSuffix;\n /** Auxiliary status icon rendered beside the title. */\n auxIcon?: ContentMdAuxIcon;\n /** Tag rendered beside the title. */\n tag?: TagProps;\n};\n\n/** ContentSm does not support descriptions or inline editing. */\nexport type SmContentProps = Omit<\n ContentBaseProps,\n \"description\" | \"editable\" | \"onTitleChange\"\n> & {\n sizePreset: \"main-content\" | \"main-ui\" | \"secondary\";\n variant: \"body\";\n /** Layout orientation. Default: `\"inline\"`. */\n orientation?: ContentSmOrientation;\n /** Title prominence. Default: `\"default\"`. */\n prominence?: ContentSmProminence;\n};\n\nexport type ContentProps =\n | XlContentProps\n | LgContentProps\n | MdContentProps\n | SmContentProps;\n\nconst WIDTH_CLASS: Record<ContentWidth, string> = {\n auto: \"sds-content-width-fit\",\n fit: \"sds-content-width-fit\",\n full: \"sds-content-width-full\",\n};\n\n// ---------------------------------------------------------------------------\n// Content — routes to the appropriate internal layout\n// ---------------------------------------------------------------------------\n\n/**\n * Two-axis layout that pairs an optional icon with a title and description,\n * routing to one of four internal layouts based on `sizePreset` × `variant`:\n *\n * | sizePreset | variant | layout |\n * |-----------------------|--------------------|-------------|\n * | headline / section | heading | ContentXl |\n * | headline / section | section | ContentLg |\n * | main-* / secondary | section / heading | ContentMd |\n * | main-* / secondary | body | ContentSm |\n */\nexport const Content = forwardRef<HTMLDivElement, ContentProps>(\n function Content(props, ref) {\n const {\n sizePreset = \"headline\",\n variant = \"heading\",\n width = \"full\",\n nonInteractive,\n ...rest\n } = props as ContentBaseProps & {\n sizePreset?: SizePreset;\n variant?: ContentVariant;\n };\n\n let layout: React.ReactNode = null;\n\n if (sizePreset === \"headline\" || sizePreset === \"section\") {\n if (variant === \"heading\") {\n layout = (\n <ContentXl\n sizePreset={sizePreset}\n ref={ref}\n {...(rest as Omit<ContentXlProps, \"sizePreset\">)}\n />\n );\n } else {\n layout = (\n <ContentLg\n sizePreset={sizePreset}\n ref={ref}\n {...(rest as Omit<ContentLgProps, \"sizePreset\">)}\n />\n );\n }\n } else if (variant === \"section\" || variant === \"heading\") {\n layout = (\n <ContentMd\n sizePreset={sizePreset}\n ref={ref}\n {...(rest as Omit<ContentMdProps, \"sizePreset\">)}\n />\n );\n } else if (variant === \"body\") {\n layout = (\n <ContentSm\n sizePreset={sizePreset}\n ref={ref}\n {...(rest as Omit<ContentSmProps, \"sizePreset\">)}\n />\n );\n }\n\n // This case should NEVER be hit.\n if (!layout)\n throw new Error(\n `Content: no layout matched for sizePreset=\"${sizePreset}\" variant=\"${variant}\"`,\n );\n\n return (\n <div\n className={WIDTH_CLASS[width]}\n data-non-interactive={nonInteractive || undefined}\n >\n {layout}\n </div>\n );\n },\n);\n","import { forwardRef, type ReactNode } from \"react\";\nimport { Content, type ContentProps } from \"../Content/Content\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Padding preset for the `Content` area. Mirrors the DS size scale. */\nexport type ContentActionPadding = \"2xs\" | \"xs\" | \"sm\" | \"md\" | \"lg\";\n\nexport type ContentActionProps = ContentProps & {\n /** Content rendered on the right side, stretched to full height. */\n rightChildren?: ReactNode;\n /**\n * Padding applied around the `Content` area.\n *\n * @default \"lg\"\n */\n padding?: ContentActionPadding;\n /** Extra class for the root row `<div>`. */\n className?: string;\n};\n\nconst PADDING_VALUE: Record<ContentActionPadding, string> = {\n \"2xs\": \"var(--space-1)\", /* 4px */\n xs: \"var(--space-1)\", /* 4px */\n sm: \"var(--space-2)\", /* 8px */\n md: \"var(--space-2)\", /* 8px */\n lg: \"var(--space-3)\", /* 12px */\n};\n\n// ---------------------------------------------------------------------------\n// ContentAction\n// ---------------------------------------------------------------------------\n\n/**\n * A row layout that pairs a {@link Content} block with optional right-side\n * action children (e.g. buttons, badges).\n *\n * The `Content` area receives padding controlled by `padding`. The\n * `rightChildren` wrapper stretches to the full height of the row.\n */\nexport const ContentAction = forwardRef<HTMLDivElement, ContentActionProps>(\n function ContentAction(\n { rightChildren, padding = \"lg\", className, ...contentProps },\n ref,\n ) {\n const classes = [\"sds-content-action\", className].filter(Boolean).join(\" \");\n\n return (\n <div ref={ref} className={classes}>\n <div\n className=\"sds-content-action-main\"\n style={{ padding: PADDING_VALUE[padding] }}\n >\n <Content {...(contentProps as ContentProps)} />\n </div>\n {rightChildren && (\n <div className=\"sds-content-action-right\">{rightChildren}</div>\n )}\n </div>\n );\n },\n);\n","import styles from \"./LineItemButton.module.css\";\nimport {\n Interactive,\n type InteractiveContainerRounding,\n type InteractiveStatefulProps,\n} from \"../Interactive/Interactive\";\nimport { ContentAction, type ContentActionProps } from \"../ContentAction/ContentAction\";\nimport { withTooltip } from \"../../internal/interactive-buttons\";\n\nexport type LineItemButtonTooltipSide = \"top\" | \"right\" | \"bottom\" | \"left\";\n\n// `editable` is excluded: Content's edit mode renders a Button, which would\n// nest inside this component's <button> (invalid HTML).\ntype ContentPassthroughProps = Omit<\n ContentActionProps,\n \"padding\" | \"width\" | \"editable\" | \"onTitleChange\"\n>;\n\ntype LineItemButtonOwnProps = Pick<\n InteractiveStatefulProps,\n \"state\" | \"interaction\" | \"onClick\" | \"href\" | \"target\" | \"type\"\n> & {\n /** Interactive select variant. Default: `\"select-light\"`. */\n selectVariant?: \"select-light\" | \"select-heavy\";\n /** Corner rounding preset; height is always content-driven. Default: `\"md\"`. */\n rounding?: InteractiveContainerRounding;\n /** Container width. Default: `\"full\"`. */\n width?: \"fit\" | \"full\";\n /** Tooltip shown on hover. */\n tooltip?: string;\n /** Tooltip side. Default: `\"top\"`. */\n tooltipSide?: LineItemButtonTooltipSide;\n /** Applies disabled styling and suppresses clicks. */\n disabled?: boolean;\n};\n\nexport type LineItemButtonProps = ContentPassthroughProps & LineItemButtonOwnProps;\n\n/**\n * Full-row interactive item: a `ContentAction` (icon + title + description +\n * right actions) made clickable through the Stateful color system. The row\n * height follows its content.\n */\nexport function LineItemButton({\n selectVariant = \"select-light\",\n state,\n interaction,\n onClick,\n href,\n target,\n type = \"button\",\n rounding = \"md\",\n width = \"full\",\n tooltip,\n tooltipSide = \"top\",\n disabled,\n ...contentActionProps\n}: LineItemButtonProps) {\n const item = (\n <Interactive.Stateful\n variant={selectVariant}\n state={state}\n interaction={interaction}\n onClick={onClick}\n href={href}\n target={target}\n disabled={disabled}\n >\n <Interactive.Container type={type} width={width} size=\"fit\" rounding={rounding}>\n <span className={styles.body}>\n <ContentAction {...(contentActionProps as ContentActionProps)} padding=\"2xs\" />\n </span>\n </Interactive.Container>\n </Interactive.Stateful>\n );\n\n return <>{withTooltip(item, tooltip, tooltipSide)}</>;\n}\n","import {\n forwardRef,\n type HTMLAttributes,\n type LabelHTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport styles from \"./InputLayouts.module.css\";\nimport { Text } from \"../Text/Text\";\nimport { type RichStr } from \"../Text/richstr\";\nimport { Separator } from \"../Separator/Separator\";\nimport { Tag, type TagProps } from \"../Tag/Tag\";\nimport type { IconComponent } from \"../../internal/interactive-buttons\";\nimport SvgXOctagon from \"../../icons/XOctagon\";\nimport SvgAlertCircle from \"../../icons/AlertCircle\";\n\n// ---------------------------------------------------------------------------\n// Label\n// ---------------------------------------------------------------------------\n\nexport interface LabelProps\n extends Omit<LabelHTMLAttributes<HTMLLabelElement>, \"htmlFor\"> {\n /** Sets `htmlFor` on the `<label>` to associate it with a form element by id. */\n label?: string;\n /** Switches cursor from `pointer` to `not-allowed`. */\n disabled?: boolean;\n}\n\n/**\n * Block-level `<label>` wrapper that stretches to fill its row and forwards\n * clicks to the associated form element (via `htmlFor`) or the first labelable\n * descendant.\n */\nexport const Label = forwardRef<HTMLLabelElement, LabelProps>(function Label(\n { label, disabled, className, ...props },\n ref,\n) {\n return (\n <label\n ref={ref}\n className={[styles.label, className].filter(Boolean).join(\" \")}\n htmlFor={label}\n data-disabled={disabled || undefined}\n {...props}\n />\n );\n});\n\n// ---------------------------------------------------------------------------\n// InputErrorText\n// ---------------------------------------------------------------------------\n\nexport type InputErrorType = \"error\" | \"warning\";\n\nexport interface InputErrorTextProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n children?: string | RichStr;\n type?: InputErrorType;\n}\n\n/**\n * Inline validation message with a leading status icon. `error` uses the\n * x-octagon glyph and error color; `warning` uses the alert-circle glyph and\n * warning color. The message text carries `role=\"alert\"` so assistive tech\n * announces it.\n */\nexport const InputErrorText = forwardRef<HTMLDivElement, InputErrorTextProps>(\n function InputErrorText({ children, type = \"error\", className, ...rest }, ref) {\n const Icon: IconComponent = type === \"error\" ? SvgXOctagon : SvgAlertCircle;\n return (\n <div\n ref={ref}\n className={[styles.errorText, styles[`error-${type}`], className]\n .filter(Boolean)\n .join(\" \")}\n {...rest}\n >\n <Icon className={styles.errorIcon} aria-hidden=\"true\" />\n <span role=\"alert\">\n <Text font=\"secondary-body\" color=\"inherit\">\n {children ?? \"\"}\n </Text>\n </span>\n </div>\n );\n },\n);\n\n// ---------------------------------------------------------------------------\n// Shared title / description header\n// ---------------------------------------------------------------------------\n\ninterface InputLayoutProps {\n /**\n * Controls the `<label>` wrapper.\n *\n * - `false` (default) — no `<label>`.\n * - `true` — implicit `<label>` (no `htmlFor`). The browser forwards clicks\n * to the first labelable descendant.\n * - `string` — `<label htmlFor={string}>` associated with a form element by\n * id.\n */\n withLabel?: boolean | string;\n disabled?: boolean;\n children?: ReactNode;\n title: string | RichStr;\n description?: string | RichStr;\n suffix?: \"optional\" | (string & {});\n /** Categorical tag rendered beside the title. */\n tag?: TagProps;\n /** Validation error message, rendered through `InputErrorText`. */\n error?: string;\n /** Validation warning message, rendered through `InputErrorText`. */\n warning?: string;\n}\n\n/**\n * Renders the title + optional suffix + optional description block.\n *\n * NOTE: Opal routes this through its `Content` layout. The DS `Content` port is\n * being done in parallel and may not exist yet, so title/description are\n * rendered directly with `Text`: title in `main-ui-action`, suffix and\n * description in muted `secondary-body`.\n */\ninterface InputHeaderProps {\n title: string | RichStr;\n description?: string | RichStr;\n suffix?: string;\n tag?: TagProps;\n}\n\nfunction InputHeader({ title, description, suffix, tag }: InputHeaderProps) {\n return (\n <div className={styles.header}>\n <div className={styles.titleRow}>\n <Text font=\"main-ui-action\" color=\"text-05\">\n {title}\n </Text>\n {tag && <Tag {...tag} />}\n {suffix && (\n <Text font=\"secondary-body\" color=\"text-03\">\n {suffix}\n </Text>\n )}\n </div>\n {description && (\n <Text font=\"secondary-body\" color=\"text-04\">\n {description}\n </Text>\n )}\n </div>\n );\n}\n\n/** Picks the error message first, then warning, then renders nothing. */\nfunction InputValidation({\n error,\n warning,\n}: {\n error?: string;\n warning?: string;\n}) {\n if (error) return <InputErrorText type=\"error\">{error}</InputErrorText>;\n if (warning) return <InputErrorText type=\"warning\">{warning}</InputErrorText>;\n return null;\n}\n\nfunction maybeWrapInLabel(\n withLabel: boolean | string,\n disabled: boolean | undefined,\n content: ReactNode,\n): ReactNode {\n if (!withLabel) return content;\n const fieldName = typeof withLabel === \"string\" ? withLabel : undefined;\n return (\n <Label label={fieldName} disabled={disabled}>\n {content}\n </Label>\n );\n}\n\n// ---------------------------------------------------------------------------\n// InputVertical\n// ---------------------------------------------------------------------------\n\nexport interface InputVerticalProps extends InputLayoutProps {\n /** Smaller helper text rendered below the input. */\n subDescription?: string | RichStr;\n}\n\n/**\n * Stacks the title/description header above the input control, with optional\n * validation message and sub-description below. Set `withLabel` to wrap the\n * whole block in a `<label>`.\n */\nexport const InputVertical = forwardRef<HTMLDivElement, InputVerticalProps>(\n function InputVertical(\n {\n withLabel = false,\n disabled,\n children,\n subDescription,\n title,\n description,\n suffix,\n tag,\n error,\n warning,\n },\n ref,\n ) {\n const content = (\n <div ref={ref} className={styles.vertical}>\n <InputHeader title={title} description={description} suffix={suffix} tag={tag} />\n {children}\n <InputValidation error={error} warning={warning} />\n {subDescription && (\n <Text font=\"secondary-body\" color=\"text-04\">\n {subDescription}\n </Text>\n )}\n </div>\n );\n return <>{maybeWrapInLabel(withLabel, disabled, content)}</>;\n },\n);\n\n// ---------------------------------------------------------------------------\n// InputHorizontal\n// ---------------------------------------------------------------------------\n\nexport interface InputHorizontalProps extends InputLayoutProps {\n /** Vertically center the input against the label/description. */\n center?: boolean;\n}\n\n/**\n * Places the title/description header on the left and the input control on the\n * right of the same row, with an optional validation message below. Set\n * `center` to vertically center the control against the header.\n */\nexport const InputHorizontal = forwardRef<HTMLDivElement, InputHorizontalProps>(\n function InputHorizontal(\n {\n withLabel = false,\n disabled,\n children,\n center,\n title,\n description,\n suffix,\n tag,\n error,\n warning,\n },\n ref,\n ) {\n const content = (\n <div ref={ref} className={styles.horizontal}>\n <div\n className={[styles.row, center ? styles.rowCenter : null]\n .filter(Boolean)\n .join(\" \")}\n >\n <div className={styles.rowMain}>\n <InputHeader\n title={title}\n description={description}\n suffix={suffix}\n tag={tag}\n />\n </div>\n <div className={styles.rowAside}>{children}</div>\n </div>\n <InputValidation error={error} warning={warning} />\n </div>\n );\n return <>{maybeWrapInLabel(withLabel, disabled, content)}</>;\n },\n);\n\n// ---------------------------------------------------------------------------\n// InputDivider\n// ---------------------------------------------------------------------------\n\nexport type InputDividerProps = HTMLAttributes<HTMLDivElement>;\n\n/**\n * Padded horizontal rule between input rows. Wraps the DS `Separator` (the\n * equivalent of Opal's `Divider`) with consistent vertical spacing.\n */\nexport const InputDivider = forwardRef<HTMLDivElement, InputDividerProps>(\n function InputDivider({ className, ...rest }, ref) {\n return (\n <div\n ref={ref}\n className={[styles.divider, className].filter(Boolean).join(\" \")}\n {...rest}\n >\n <Separator />\n </div>\n );\n },\n);\n\n// ---------------------------------------------------------------------------\n// InputPadder\n// ---------------------------------------------------------------------------\n\nexport type InputPadderProps = HTMLAttributes<HTMLDivElement>;\n\n/** Full-width padded container for grouping input rows. */\nexport const InputPadder = forwardRef<HTMLDivElement, InputPadderProps>(\n function InputPadder({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={[styles.padder, className].filter(Boolean).join(\" \")}\n {...props}\n />\n );\n },\n);\n","import { forwardRef, type ReactNode } from \"react\";\nimport styles from \"./SelectCard.module.css\";\nimport { Interactive, type InteractiveStatefulProps } from \"../Interactive/Interactive\";\n\nexport type SelectCardPadding = \"lg\" | \"md\" | \"sm\" | \"xs\" | \"2xs\" | \"fit\";\nexport type SelectCardRounding = \"xs\" | \"sm\" | \"md\" | \"lg\";\n\nexport interface SelectCardProps extends Omit<InteractiveStatefulProps, \"variant\"> {\n /** Padding preset. Default: `\"md\"`. */\n padding?: SelectCardPadding;\n /** Corner rounding preset. Default: `\"md\"`. */\n rounding?: SelectCardRounding;\n children?: ReactNode;\n}\n\n/**\n * Stateful interactive card — the card counterpart to `SelectButton`. The\n * Stateful system owns background and foreground colors; the card owns\n * padding, rounding, border, and overflow. Children are fully composable\n * (`ContentAction`, `Content`, buttons, `Interactive.Foldable`).\n */\nexport const SelectCard = forwardRef<HTMLDivElement, SelectCardProps>(function SelectCard(\n { padding = \"md\", rounding = \"md\", children, className, ...statefulProps },\n ref,\n) {\n return (\n <Interactive.Stateful {...statefulProps} variant=\"select-card\">\n <div\n ref={ref}\n className={[styles.card, styles[`pad-${padding}`], styles[`round-${rounding}`], className]\n .filter(Boolean)\n .join(\" \")}\n >\n {children}\n </div>\n </Interactive.Stateful>\n );\n});\n","import { forwardRef, useMemo, type ReactNode, type SVGProps } from \"react\";\nimport styles from \"./MessageCard.module.css\";\nimport { ContentAction } from \"../ContentAction/ContentAction\";\nimport { Separator } from \"../Separator/Separator\";\nimport { Interactive } from \"../Interactive/Interactive\";\nimport type { RichStr } from \"../Text/richstr\";\nimport type { IconComponent } from \"../../internal/interactive-buttons\";\nimport SvgAlertCircle from \"../../icons/AlertCircle\";\nimport SvgAlertTriangle from \"../../icons/AlertTriangle\";\nimport SvgCheckCircle from \"../../icons/CheckCircle\";\nimport SvgX from \"../../icons/X\";\nimport SvgXOctagon from \"../../icons/XOctagon\";\n\nexport type MessageCardVariant = \"default\" | \"info\" | \"success\" | \"warning\" | \"error\";\n\ninterface MessageCardBaseProps {\n /** Visual variant controlling background, border, and icon. Default: `\"default\"`. */\n variant?: MessageCardVariant;\n /** Override the variant's default icon. */\n icon?: IconComponent;\n /** Main title text. Supports inline markdown via `markdown()`. */\n title: string | RichStr;\n /** Optional description below the title. */\n description?: string | RichStr;\n /** Padding preset. Default: `\"sm\"`. */\n padding?: \"sm\" | \"xs\";\n /** Content rendered below a divider, under the main content area. */\n bottomChildren?: ReactNode;\n}\n\nexport type MessageCardProps = MessageCardBaseProps &\n (\n | {\n /** Right-side content. Mutually exclusive with `onClose`. */\n rightChildren?: ReactNode;\n onClose?: never;\n }\n | {\n rightChildren?: never;\n /** Close button callback. Mutually exclusive with `rightChildren`. */\n onClose?: () => void;\n }\n );\n\nconst VARIANT_ICON: Record<MessageCardVariant, IconComponent> = {\n default: SvgAlertCircle,\n info: SvgAlertCircle,\n success: SvgCheckCircle,\n warning: SvgAlertTriangle,\n error: SvgXOctagon,\n};\n\n/**\n * Card-level status block: inline message, alert, or notification. Uses\n * `ContentAction` for the icon + title + description + right-actions layout.\n * Page-level announcements stay with `Banner`; this is for in-flow surfaces.\n */\nexport const MessageCard = forwardRef<HTMLDivElement, MessageCardProps>(function MessageCard(\n {\n variant = \"default\",\n icon: iconOverride,\n title,\n description,\n padding = \"sm\",\n bottomChildren,\n rightChildren,\n onClose,\n },\n ref,\n) {\n const Icon = iconOverride ?? VARIANT_ICON[variant];\n // Wrapper injects the variant color class; DS icons stroke currentColor.\n // Memoized on Icon so the SVG keeps a stable component identity.\n const ColoredIcon = useMemo(\n () =>\n function ColoredIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <Icon {...props} className={[styles.icon, props.className].filter(Boolean).join(\" \")} />\n );\n },\n [Icon],\n );\n\n const right = onClose ? (\n <Interactive.Stateless\n variant=\"default\"\n prominence=\"internal\"\n type=\"button\"\n onClick={onClose}\n >\n <Interactive.Container type=\"button\" size=\"md\" rounding=\"sm\" aria-label=\"Close\">\n <SvgX className={styles.closeIcon} />\n </Interactive.Container>\n </Interactive.Stateless>\n ) : (\n rightChildren\n );\n\n return (\n <div\n ref={ref}\n className={[styles.card, styles[`pad-${padding}`]].join(\" \")}\n data-variant={variant}\n >\n <ContentAction\n icon={ColoredIcon}\n title={title}\n description={description}\n sizePreset=\"main-ui\"\n variant=\"section\"\n padding=\"md\"\n rightChildren={right}\n />\n {bottomChildren && (\n <>\n <Separator />\n {bottomChildren}\n </>\n )}\n </div>\n );\n});\n","import { forwardRef } from \"react\";\nimport styles from \"./EmptyMessageCard.module.css\";\nimport { Card } from \"../Card/Card\";\nimport { Content } from \"../Content/Content\";\nimport type { RichStr } from \"../Text/richstr\";\nimport type { IconComponent } from \"../../internal/interactive-buttons\";\nimport SvgBoxes from \"../../icons/Boxes\";\n\nexport type EmptyMessageCardPadding = \"none\" | \"sm\" | \"md\" | \"lg\";\n\ninterface EmptyMessageCardBaseProps {\n /** Icon displayed beside the title. Default: `SvgBoxes`. */\n icon?: IconComponent;\n /** Primary message text. Supports inline markdown via `markdown()`. */\n title: string | RichStr;\n /** Card padding preset. Default: `\"md\"`. */\n padding?: EmptyMessageCardPadding;\n className?: string;\n}\n\nexport type EmptyMessageCardProps =\n | (EmptyMessageCardBaseProps & {\n /** Compact single-line message. Default. */\n sizePreset?: \"secondary\";\n })\n | (EmptyMessageCardBaseProps & {\n sizePreset: \"main-ui\";\n /** Optional description below the title. */\n description?: string | RichStr;\n });\n\n/**\n * Inline dashed-border placeholder for empty slots: empty lists, empty\n * sections, \"nothing here yet\" rows. Page-level empty states stay with\n * `EmptyState`; this is for in-flow surfaces.\n */\nexport const EmptyMessageCard = forwardRef<HTMLDivElement, EmptyMessageCardProps>(\n function EmptyMessageCard(props, ref) {\n const { sizePreset = \"secondary\", icon = SvgBoxes, title, padding = \"md\", className } = props;\n\n return (\n <Card\n ref={ref}\n border=\"dashed\"\n padding={padding}\n rounding=\"md\"\n className={[styles.transparent, className].filter(Boolean).join(\" \")}\n >\n {sizePreset === \"secondary\" ? (\n <Content icon={icon} title={title} sizePreset=\"secondary\" variant=\"body\" prominence=\"muted\" />\n ) : (\n <Content\n icon={icon}\n title={title}\n description={\"description\" in props ? props.description : undefined}\n sizePreset=\"main-ui\"\n variant=\"section\"\n />\n )}\n </Card>\n );\n },\n);\n","import { createElement, forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport styles from \"./IllustrationContent.module.css\";\nimport { resolveNode, type RichStr } from \"../Text/richstr\";\n\nexport type IllustrationHeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;\nexport type IllustrationSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface IllustrationContentProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n /** Illustration glyph — e.g. one of the `./illustrations` stroke SVGs. */\n illustration?: ReactNode;\n /** Title. Supports `markdown()` and arbitrary nodes. */\n title: ReactNode | RichStr;\n /** Heading level for the title. Default: 3. */\n titleLevel?: IllustrationHeadingLevel;\n /** Supporting copy below the title. */\n description?: ReactNode | RichStr;\n /** Optional action slot (buttons, links) below the text. */\n actions?: ReactNode;\n /** Illustration size. Default: `\"md\"` (64px). `sm`=48px, `lg`=96px. */\n size?: IllustrationSize;\n /** Horizontal alignment of the stack. Default: `\"center\"`. */\n align?: \"center\" | \"start\";\n}\n\n/**\n * Centered illustration + title + description layout (with optional actions).\n * Pairs the `./illustrations` glyphs with copy for empty / error / permission\n * states. The illustration inherits `currentColor`; size it via the `size`\n * prop, which sets the glyph's `font-size`.\n */\nexport const IllustrationContent = forwardRef<HTMLDivElement, IllustrationContentProps>(\n function IllustrationContent(\n {\n illustration,\n title,\n titleLevel = 3,\n description,\n actions,\n size = \"md\",\n align = \"center\",\n className,\n ...rest\n },\n ref,\n ) {\n return (\n <div\n ref={ref}\n className={[styles.root, styles[`align-${align}`], className].filter(Boolean).join(\" \")}\n {...rest}\n >\n {illustration ? (\n <div className={[styles.illu, styles[`size-${size}`]].join(\" \")} aria-hidden=\"true\">\n {illustration}\n </div>\n ) : null}\n {createElement(`h${titleLevel}`, { className: styles.title }, resolveNode(title))}\n {description ? <div className={styles.desc}>{resolveNode(description)}</div> : null}\n {actions ? <div className={styles.actions}>{actions}</div> : null}\n </div>\n );\n },\n);\n","import {\n Children,\n createContext,\n forwardRef,\n isValidElement,\n useCallback,\n useContext,\n useRef,\n useState,\n type ButtonHTMLAttributes,\n type ComponentType,\n type HTMLAttributes,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n type SVGProps,\n} from \"react\";\nimport { Slot, Slottable } from \"@radix-ui/react-slot\";\nimport styles from \"./AppShell.module.css\";\n\nconst cx = (...parts: Array<string | false | null | undefined>) =>\n parts.filter(Boolean).join(\" \");\n\n// Static marker used by Root/Main to place a child in the correct region\n// without forcing the consumer to nest extra wrappers. The compound parts\n// carry this so the spec's flat JSX (Rail/Sidebar/Main as direct Root children)\n// works while the mobile-drawer wrapper still groups rail + sidebar.\ntype ShellRole = \"drawer\" | \"header\" | \"footer\";\nconst ROLE = \"__appShellRole\" as const;\nconst roleOf = (node: ReactNode): ShellRole | undefined =>\n isValidElement(node)\n ? ((node.type as { [ROLE]?: ShellRole })[ROLE] ?? undefined)\n : undefined;\n\n// ---------------------------------------------------------------------------\n// Context — shared, optional state. Controlled props on Root/Rail/Sidebar\n// always win; the Provider only fills the gaps (uncontrolled convenience).\n// It owns NO persistence and NO keyboard shortcut — those stay in the consumer.\n// ---------------------------------------------------------------------------\n\ninterface AppShellContextValue {\n drawerOpen: boolean;\n setDrawerOpen: (open: boolean) => void;\n railCollapsed: boolean;\n setRailCollapsed: (collapsed: boolean) => void;\n sidebarFolded: boolean;\n setSidebarFolded: (folded: boolean) => void;\n}\n\nconst AppShellContext = createContext<AppShellContextValue | null>(null);\n\n/**\n * Access the shared shell state when an {@link AppShellProvider} is mounted.\n * Returns `null` outside a provider (controlled usage never needs it).\n */\nexport function useAppShell(): AppShellContextValue | null {\n return useContext(AppShellContext);\n}\n\nexport interface AppShellProviderProps {\n children: ReactNode;\n defaultRailCollapsed?: boolean;\n defaultSidebarFolded?: boolean;\n defaultDrawerOpen?: boolean;\n}\n\n/**\n * Optional uncontrolled holder for the three shell states (rail collapse,\n * sidebar fold, mobile drawer). Convenience only — controlled props on Root /\n * Rail / Sidebar work without it. Deliberately omits persistence and the\n * `Cmd/Ctrl+E` shortcut; the consuming app owns those.\n */\nfunction AppShellProvider({\n children,\n defaultRailCollapsed = false,\n defaultSidebarFolded = false,\n defaultDrawerOpen = false,\n}: AppShellProviderProps) {\n const [drawerOpen, setDrawerOpen] = useState(defaultDrawerOpen);\n const [railCollapsed, setRailCollapsed] = useState(defaultRailCollapsed);\n const [sidebarFolded, setSidebarFolded] = useState(defaultSidebarFolded);\n return (\n <AppShellContext.Provider\n value={{\n drawerOpen,\n setDrawerOpen,\n railCollapsed,\n setRailCollapsed,\n sidebarFolded,\n setSidebarFolded,\n }}\n >\n {children}\n </AppShellContext.Provider>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Root — the rounded shell card. Groups Rail + Sidebar into the mobile-drawer\n// wrapper (which dissolves to `display: contents` at the md breakpoint so they\n// participate directly in the flex row); everything else renders in-row.\n// ---------------------------------------------------------------------------\n\nexport interface AppShellRootProps extends HTMLAttributes<HTMLDivElement> {\n /** Controlled mobile-drawer open state. Falls back to the Provider. */\n drawerOpen?: boolean;\n onDrawerOpenChange?: (open: boolean) => void;\n}\n\nconst AppShellRoot = forwardRef<HTMLDivElement, AppShellRootProps>(function AppShellRoot(\n { drawerOpen, onDrawerOpenChange, children, className, ...rest },\n ref,\n) {\n const ctx = useContext(AppShellContext);\n const open = drawerOpen ?? ctx?.drawerOpen ?? false;\n const setOpen = onDrawerOpenChange ?? ctx?.setDrawerOpen;\n\n const drawerChildren: ReactNode[] = [];\n const rowChildren: ReactNode[] = [];\n Children.forEach(children, (child) => {\n if (roleOf(child) === \"drawer\") drawerChildren.push(child);\n else rowChildren.push(child);\n });\n\n return (\n <div ref={ref} className={cx(styles.root, className)} {...rest}>\n <span className={styles.topAccent} aria-hidden=\"true\" />\n <button\n type=\"button\"\n className={styles.scrim}\n data-open={open ? \"true\" : \"false\"}\n aria-hidden={!open}\n tabIndex={open ? 0 : -1}\n aria-label=\"Close navigation\"\n onClick={() => setOpen?.(false)}\n />\n <div className={styles.drawer} data-open={open ? \"true\" : \"false\"}>\n {drawerChildren}\n </div>\n {rowChildren}\n </div>\n );\n});\n\n// ---------------------------------------------------------------------------\n// Rail — vertical activity navigation. Width is fit-content (so longer locale\n// labels can widen it up to a cap); collapse animates max-width because\n// fit-content cannot interpolate.\n// ---------------------------------------------------------------------------\n\nexport interface AppShellRailProps extends HTMLAttributes<HTMLElement> {\n /** Controlled collapse. Falls back to the Provider. */\n collapsed?: boolean;\n /** Top slot — typically the product logo. */\n header?: ReactNode;\n /** Bottom slot — typically avatar / settings. */\n footer?: ReactNode;\n}\n\nconst AppShellRail = forwardRef<HTMLElement, AppShellRailProps>(function AppShellRail(\n { collapsed, header, footer, children, className, \"aria-label\": ariaLabel, ...rest },\n ref,\n) {\n const ctx = useContext(AppShellContext);\n const isCollapsed = collapsed ?? ctx?.railCollapsed ?? false;\n return (\n <nav\n ref={ref}\n className={cx(styles.rail, className)}\n data-collapsed={isCollapsed ? \"true\" : \"false\"}\n aria-label={ariaLabel ?? \"Sidebar activities\"}\n aria-hidden={isCollapsed || undefined}\n {...rest}\n >\n {header ? <div className={styles.railHeader}>{header}</div> : null}\n <div className={styles.railItems}>{children}</div>\n {footer ? <div className={styles.railFooter}>{footer}</div> : null}\n </nav>\n );\n});\n(AppShellRail as { [ROLE]?: ShellRole })[ROLE] = \"drawer\";\n\n// ---------------------------------------------------------------------------\n// RailItem — stacked icon over an 11px label, with a selection pill. Renders a\n// <button> by default; `asChild` slots the consumer's <a>/<Link> as the host\n// element (for SPA routing / real hrefs) while RailItem keeps the visual\n// content via Radix Slottable.\n// ---------------------------------------------------------------------------\n\nexport interface AppShellRailItemProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"onSelect\"> {\n /** Icon component, rendered at 24px. */\n icon?: ComponentType<SVGProps<SVGSVGElement>>;\n label: ReactNode;\n selected?: boolean;\n onSelect?: () => void;\n /** Render onto the single child element (e.g. a router `<Link>`). */\n asChild?: boolean;\n}\n\nconst AppShellRailItem = forwardRef<HTMLButtonElement, AppShellRailItemProps>(\n function AppShellRailItem(\n { icon: Icon, label, selected = false, onSelect, asChild = false, className, children, ...rest },\n ref,\n ) {\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n ref={ref}\n className={cx(styles.railItem, className)}\n data-selected={selected ? \"true\" : \"false\"}\n onClick={onSelect}\n {...(asChild ? {} : { type: \"button\", \"aria-pressed\": selected })}\n {...rest}\n >\n {/* In asChild mode this element becomes the host (the consumer's <a>);\n the pill/icon/label below become its children. */}\n <Slottable>{asChild ? children : null}</Slottable>\n {selected ? <span className={styles.railItemPill} aria-hidden=\"true\" /> : null}\n {Icon ? <Icon className={styles.railItemIcon} width={24} height={24} aria-hidden=\"true\" /> : null}\n <span className={styles.railItemLabel}>{label}</span>\n </Comp>\n );\n },\n);\n\n// ---------------------------------------------------------------------------\n// Sidebar — contextual panel. Width is consumed from a CSS variable (default\n// `--app-sidebar-w`); the optional resize handle writes that variable\n// imperatively to documentElement and toggles `data-resizing` (the attribute\n// other components key off to opt out of transitions), matching the existing\n// nous ResizeHandle mechanism. No controlled width prop, no built-in persist.\n// ---------------------------------------------------------------------------\n\nexport interface AppShellSidebarProps extends HTMLAttributes<HTMLElement> {\n /** Controlled fold. Falls back to the Provider. */\n folded?: boolean;\n /** CSS variable the width lives in. Default `--app-sidebar-w`. */\n widthVar?: string;\n /** Fallback width when the variable is unset. Default `15rem`. */\n defaultWidth?: string;\n /** Clamp (px) applied by the resize handle. */\n minWidth?: number;\n maxWidth?: number;\n resizable?: boolean;\n /** Fires on drag end (and double-click reset) so the consumer can persist. */\n onWidthCommit?: (px: number) => void;\n}\n\nconst AppShellSidebar = forwardRef<HTMLElement, AppShellSidebarProps>(function AppShellSidebar(\n {\n folded,\n widthVar = \"--app-sidebar-w\",\n defaultWidth = \"15rem\",\n minWidth,\n maxWidth,\n resizable = false,\n onWidthCommit,\n children,\n className,\n style,\n ...rest\n },\n ref,\n) {\n const ctx = useContext(AppShellContext);\n const isFolded = folded ?? ctx?.sidebarFolded ?? false;\n const innerRef = useRef<HTMLElement | null>(null);\n\n const setRefs = useCallback(\n (node: HTMLElement | null) => {\n innerRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as { current: HTMLElement | null }).current = node;\n },\n [ref],\n );\n\n const clamp = useCallback(\n (px: number) => {\n let next = px;\n if (typeof minWidth === \"number\") next = Math.max(minWidth, next);\n if (typeof maxWidth === \"number\") next = Math.min(maxWidth, next);\n return next;\n },\n [minWidth, maxWidth],\n );\n\n const startDrag = useCallback(\n (event: ReactPointerEvent<HTMLDivElement>) => {\n event.preventDefault();\n const docEl = document.documentElement;\n const startX = event.clientX;\n const startWidth = innerRef.current?.getBoundingClientRect().width ?? 0;\n docEl.setAttribute(\"data-resizing\", \"\");\n\n const onMove = (ev: PointerEvent) => {\n const next = clamp(startWidth + (ev.clientX - startX));\n docEl.style.setProperty(widthVar, `${next}px`);\n };\n const onUp = () => {\n window.removeEventListener(\"pointermove\", onMove);\n window.removeEventListener(\"pointerup\", onUp);\n docEl.removeAttribute(\"data-resizing\");\n const committed = parseFloat(docEl.style.getPropertyValue(widthVar));\n if (!Number.isNaN(committed)) onWidthCommit?.(committed);\n };\n window.addEventListener(\"pointermove\", onMove);\n window.addEventListener(\"pointerup\", onUp);\n },\n [clamp, widthVar, onWidthCommit],\n );\n\n // Double-click resets to the default width and reports the measured px.\n const resetWidth = useCallback(() => {\n document.documentElement.style.setProperty(widthVar, defaultWidth);\n const px = innerRef.current?.getBoundingClientRect().width;\n if (px) onWidthCommit?.(px);\n }, [widthVar, defaultWidth, onWidthCommit]);\n\n return (\n <aside\n ref={setRefs}\n className={cx(styles.sidebar, className)}\n data-folded={isFolded ? \"true\" : \"false\"}\n style={{ [\"--shell-sidebar-width\" as string]: `var(${widthVar}, ${defaultWidth})`, ...style }}\n {...rest}\n >\n <div className={styles.sidebarInner}>{children}</div>\n {resizable ? (\n <div\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label=\"Resize sidebar\"\n tabIndex={0}\n className={styles.resizeHandle}\n onPointerDown={startDrag}\n onDoubleClick={resetWidth}\n />\n ) : null}\n </aside>\n );\n});\n(AppShellSidebar as { [ROLE]?: ShellRole })[ROLE] = \"drawer\";\n\n// ---------------------------------------------------------------------------\n// SidebarToggle — the header chrome button that folds/unfolds the Sidebar.\n// Ported from the nous header fold toggle (28px icon-only button, panel-layout\n// glyph, --shell-chrome-hover-bg hover). Controlled via `folded` /\n// `onFoldedChange`, falling back to the Provider. Deliberately owns NO\n// keyboard shortcut and NO persistence — those stay in the consumer.\n// ---------------------------------------------------------------------------\n\nconst SidebarToggleIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" width={16} height={16} {...props}>\n <path stroke=\"currentColor\" strokeWidth={1.5} d=\"M2.5 9h19M8 21.5V9\" />\n <path\n stroke=\"currentColor\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n d=\"M5.5 21.5h13a3 3 0 0 0 3-3v-13a3 3 0 0 0-3-3h-13a3 3 0 0 0-3 3v13a3 3 0 0 0 3 3Z\"\n />\n </svg>\n);\n\nexport interface AppShellSidebarToggleProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> {\n /** Controlled fold state. Falls back to the Provider. */\n folded?: boolean;\n /** Receives the next fold state. Falls back to the Provider. */\n onFoldedChange?: (folded: boolean) => void;\n}\n\nconst AppShellSidebarToggle = forwardRef<HTMLButtonElement, AppShellSidebarToggleProps>(\n function AppShellSidebarToggle(\n { folded, onFoldedChange, className, onClick, \"aria-label\": ariaLabel, ...rest },\n ref,\n ) {\n const ctx = useContext(AppShellContext);\n const isFolded = folded ?? ctx?.sidebarFolded ?? false;\n const setFolded = onFoldedChange ?? ctx?.setSidebarFolded;\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cx(styles.sidebarToggle, className)}\n aria-label={ariaLabel ?? \"Toggle sidebar\"}\n aria-expanded={!isFolded}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) setFolded?.(!isFolded);\n }}\n {...rest}\n >\n <SidebarToggleIcon aria-hidden=\"true\" />\n </button>\n );\n },\n);\n\n// ---------------------------------------------------------------------------\n// Main — header bar, scrollable content, footer. Renders a backdrop underlay\n// (region glass, or a frosted custom background image when `backgroundCss` is\n// supplied). Header/MainFooter children are pulled to the top/bottom; the rest\n// becomes the scroll container (carries `data-main-container` + a container\n// query for portal-targeting parity).\n// ---------------------------------------------------------------------------\n\nexport interface AppShellMainProps extends HTMLAttributes<HTMLElement> {\n /** A CSS `background` value painted behind the frost layer. */\n backgroundCss?: string;\n}\n\nconst AppShellMain = forwardRef<HTMLElement, AppShellMainProps>(function AppShellMain(\n { backgroundCss, children, className, ...rest },\n ref,\n) {\n let header: ReactNode = null;\n let footer: ReactNode = null;\n const content: ReactNode[] = [];\n Children.forEach(children, (child) => {\n const role = roleOf(child);\n if (role === \"header\") header = child;\n else if (role === \"footer\") footer = child;\n else content.push(child);\n });\n\n return (\n <section ref={ref} className={cx(styles.main, className)} {...rest}>\n <div className={styles.mainBackdrop} aria-hidden=\"true\">\n {backgroundCss ? (\n <>\n <div className={styles.mainBackdropImage} style={{ background: backgroundCss }} />\n <div className={styles.mainBackdropFrost} />\n </>\n ) : null}\n </div>\n {header}\n <div className={styles.mainContent} data-main-container=\"\">\n {content}\n </div>\n {footer}\n </section>\n );\n});\n\n// ---------------------------------------------------------------------------\n// Header — full-width 3-region bar. Left/right take flex-1 on desktop so the\n// center stays centered; on mobile they shrink to a 10% basis.\n// ---------------------------------------------------------------------------\n\nexport interface AppShellHeaderProps extends HTMLAttributes<HTMLElement> {\n left?: ReactNode;\n center?: ReactNode;\n right?: ReactNode;\n}\n\nconst AppShellHeader = forwardRef<HTMLElement, AppShellHeaderProps>(function AppShellHeader(\n { left, center, right, className, ...rest },\n ref,\n) {\n return (\n <header ref={ref} className={cx(styles.header, className)} {...rest}>\n <div className={styles.headerLeft}>{left}</div>\n <div className={styles.headerCenter}>{center}</div>\n <div className={styles.headerRight}>{right}</div>\n </header>\n );\n});\n(AppShellHeader as { [ROLE]?: ShellRole })[ROLE] = \"header\";\n\n// ---------------------------------------------------------------------------\n// MainFooter — pinned below the scroll area.\n// ---------------------------------------------------------------------------\n\nexport type AppShellMainFooterProps = HTMLAttributes<HTMLElement>;\n\nconst AppShellMainFooter = forwardRef<HTMLElement, AppShellMainFooterProps>(\n function AppShellMainFooter({ className, children, ...rest }, ref) {\n return (\n <footer ref={ref} className={cx(styles.mainFooter, className)} {...rest}>\n {children}\n </footer>\n );\n },\n);\n(AppShellMainFooter as { [ROLE]?: ShellRole })[ROLE] = \"footer\";\n\n// ---------------------------------------------------------------------------\n// Compound export.\n// ---------------------------------------------------------------------------\n\nexport const AppShell = Object.assign(AppShellRoot, {\n Root: AppShellRoot,\n Rail: AppShellRail,\n RailItem: AppShellRailItem,\n Sidebar: AppShellSidebar,\n SidebarToggle: AppShellSidebarToggle,\n Main: AppShellMain,\n Header: AppShellHeader,\n MainFooter: AppShellMainFooter,\n Provider: AppShellProvider,\n});\n\nexport {\n AppShellRoot,\n AppShellRail,\n AppShellRailItem,\n AppShellSidebar,\n AppShellSidebarToggle,\n AppShellMain,\n AppShellHeader,\n AppShellMainFooter,\n AppShellProvider,\n};\n","import { useId, useState, type ReactNode } from \"react\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogFooter,\n AlertDialogTrigger,\n} from \"../../components/AlertDialog\";\nimport { Button } from \"../../components/Button\";\nimport { Input } from \"../../components/Input\";\nimport { Stack } from \"../../components/Stack\";\nimport styles from \"./DestructiveConfirm.module.css\";\n\nexport interface DestructiveConfirmProps {\n /** Element that opens the dialog (typically a danger Button). */\n trigger: ReactNode;\n /** Dialog title (sentence case, name the noun). */\n title: ReactNode;\n /** Long-form description rendered in the dialog header. */\n description?: ReactNode;\n /**\n * Exact text the user has to type in to enable the destroy button.\n * Comparison is case-sensitive and whitespace-trimmed.\n */\n confirmation: string;\n /** Label for the destroy button. Defaults to \"Delete\". */\n actionLabel?: ReactNode;\n /** Label for the cancel button. Defaults to \"Cancel\". */\n cancelLabel?: ReactNode;\n /** Hint rendered above the input. */\n inputLabel?: ReactNode;\n onConfirm?: () => void;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport function DestructiveConfirm({\n trigger,\n title,\n description,\n confirmation,\n actionLabel = \"Delete\",\n cancelLabel = \"Cancel\",\n inputLabel,\n onConfirm,\n open,\n defaultOpen,\n onOpenChange,\n}: DestructiveConfirmProps) {\n const [typed, setTyped] = useState(\"\");\n const matches = typed.trim() === confirmation;\n const inputId = useId();\n\n const reset = (next: boolean) => {\n if (!next) setTyped(\"\");\n onOpenChange?.(next);\n };\n\n return (\n <AlertDialog open={open} defaultOpen={defaultOpen} onOpenChange={reset}>\n <AlertDialogTrigger asChild>{trigger}</AlertDialogTrigger>\n <AlertDialogContent tone=\"danger\" title={title} description={description}>\n <Stack gap={12} className={styles.body}>\n <div className={styles.field}>\n <label htmlFor={inputId} className={styles.fieldLabel}>\n {inputLabel ?? (\n <>\n Type <code className={styles.code}>{confirmation}</code> to confirm\n </>\n )}\n </label>\n <Input\n id={inputId}\n value={typed}\n onChange={(event) => setTyped(event.target.value)}\n aria-label={\n typeof title === \"string\" ? `Confirm by typing ${confirmation}` : undefined\n }\n autoComplete=\"off\"\n spellCheck={false}\n />\n </div>\n <AlertDialogFooter>\n <AlertDialogCancel asChild>\n <Button variant=\"secondary\">{cancelLabel}</Button>\n </AlertDialogCancel>\n <AlertDialogAction asChild>\n <Button\n variant=\"danger\"\n disabled={!matches}\n onClick={() => {\n if (matches) onConfirm?.();\n }}\n >\n {actionLabel}\n </Button>\n </AlertDialogAction>\n </AlertDialogFooter>\n </Stack>\n </AlertDialogContent>\n </AlertDialog>\n );\n}\n","import { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { EmptyState } from \"../../components/EmptyState\";\nimport { Button } from \"../../components/Button\";\n\nexport type EmptyHierarchyVariant = \"first-run\" | \"filtered\" | \"error\";\n\nexport interface EmptyHierarchyProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n variant: EmptyHierarchyVariant;\n illustration?: ReactNode;\n title?: ReactNode;\n description?: ReactNode;\n actionLabel?: ReactNode;\n onAction?: () => void;\n actions?: ReactNode;\n}\n\nconst ChatIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z\" />\n </svg>\n);\n\nconst SearchIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"11\" cy=\"11\" r=\"7\" />\n <path d=\"M21 21l-4.3-4.3\" />\n </svg>\n);\n\nconst AlertIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"M12 8v4M12 16h.01\" />\n </svg>\n);\n\ninterface VariantDefaults {\n illustration: ReactNode;\n illustrationColor?: string;\n title: string;\n description: string;\n actionLabel: string;\n actionVariant: \"primary\" | \"secondary\" | \"tertiary\" | \"danger\";\n}\n\nconst DEFAULTS: Record<EmptyHierarchyVariant, VariantDefaults> = {\n \"first-run\": {\n illustration: <ChatIcon />,\n title: \"No chats yet\",\n description: \"Ask Sophea anything across your indexed sources to start.\",\n actionLabel: \"Start a chat\",\n actionVariant: \"primary\",\n },\n filtered: {\n illustration: <SearchIcon />,\n title: \"No results match\",\n description: \"Try a different keyword or remove a filter to see more.\",\n actionLabel: \"Clear all filters\",\n actionVariant: \"secondary\",\n },\n error: {\n illustration: <AlertIcon />,\n illustrationColor: \"var(--action-danger-05)\",\n title: \"Couldn't load chats\",\n description: \"Network hiccup. Refreshing usually fixes it within a few seconds.\",\n actionLabel: \"Try again\",\n actionVariant: \"secondary\",\n },\n};\n\nconst VARIANT_ARIA_LABEL: Record<EmptyHierarchyVariant, string | undefined> = {\n \"first-run\": undefined,\n filtered: undefined,\n error: \"Error empty state\",\n};\n\nexport const EmptyHierarchy = forwardRef<HTMLDivElement, EmptyHierarchyProps>(function EmptyHierarchy(\n { variant, illustration, title, description, actionLabel, onAction, actions, \"aria-label\": ariaLabel, ...rest },\n ref,\n) {\n const d = DEFAULTS[variant];\n const illu = illustration ?? d.illustration;\n const styledIllu = d.illustrationColor ? (\n <span style={{ color: d.illustrationColor, display: \"inline-flex\" }}>{illu}</span>\n ) : (\n illu\n );\n\n const defaultActions = (\n <Button variant={d.actionVariant} size=\"sm\" onClick={onAction}>\n {actionLabel ?? d.actionLabel}\n </Button>\n );\n\n return (\n <EmptyState\n ref={ref}\n illustration={styledIllu}\n title={title ?? d.title}\n description={description ?? d.description}\n actions={actions ?? defaultActions}\n aria-label={ariaLabel ?? VARIANT_ARIA_LABEL[variant]}\n {...rest}\n />\n );\n});\n","import { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { Banner, type BannerTone } from \"../../components/Banner\";\nimport { Button } from \"../../components/Button\";\nimport styles from \"./ErrorRecovery.module.css\";\n\nexport type ErrorRecoveryTone = Extract<BannerTone, \"info\" | \"warning\" | \"error\">;\n\nexport interface ErrorRecoveryAction {\n label: ReactNode;\n onClick?: () => void;\n}\n\nexport interface ErrorRecoveryProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"title\" | \"role\"> {\n /** Override the auto-resolved ARIA role (defaults: error -> alert, info/warning -> status). */\n role?: \"alert\" | \"status\";\n tone?: ErrorRecoveryTone;\n /** What broke. Short, factual headline. */\n title: ReactNode;\n /** Why it broke + what now. Plain text or rich body. */\n description: ReactNode;\n /** Recovery action — primary CTA. */\n primaryAction: ErrorRecoveryAction;\n /** Fallback action — tertiary text button. */\n fallbackAction: ErrorRecoveryAction;\n}\n\nconst TONE_LABEL: Record<ErrorRecoveryTone, string> = {\n info: \"Info\",\n warning: \"Warning\",\n error: \"Error\",\n};\n\nexport const ErrorRecovery = forwardRef<HTMLDivElement, ErrorRecoveryProps>(\n function ErrorRecovery(\n {\n tone = \"error\",\n title,\n description,\n primaryAction,\n fallbackAction,\n className,\n ...rest\n },\n ref,\n ) {\n // Recovery CTA: danger for error tone, primary otherwise.\n const primaryVariant = tone === \"error\" ? \"danger\" : \"primary\";\n\n return (\n <Banner\n ref={ref}\n tone={tone}\n className={[styles.root, className].filter(Boolean).join(\" \")}\n title={\n <span className={styles.head}>\n <span className={`${styles.tag} ${styles[`tag-${tone}`]}`}>\n {TONE_LABEL[tone]}\n </span>\n <span className={styles.title}>{title}</span>\n </span>\n }\n {...rest}\n >\n <span className={styles.desc}>{description}</span>\n <span className={styles.actions}>\n <Button variant={primaryVariant} size=\"sm\" onClick={primaryAction.onClick}>\n {primaryAction.label}\n </Button>\n <Button variant=\"tertiary\" size=\"sm\" onClick={fallbackAction.onClick}>\n {fallbackAction.label}\n </Button>\n </span>\n </Banner>\n );\n },\n);\n","import { forwardRef, type ReactNode } from \"react\";\nimport { Avatar } from \"../../components/Avatar\";\nimport { Badge, type BadgeTone } from \"../../components/Badge\";\nimport { Button } from \"../../components/Button\";\nimport { Card, CardBody, CardHeader } from \"../../components/Card\";\nimport { DescriptionItem, DescriptionList } from \"../../components/DescriptionList\";\nimport { Separator } from \"../../components/Separator\";\nimport { Stack } from \"../../components/Stack\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"../../components/Tabs\";\nimport { Timeline, TimelineItem } from \"../../components/Timeline\";\nimport { SvgCopy, SvgFile, SvgRefresh } from \"../../icons\";\nimport styles from \"./FilePreview.module.css\";\n\nexport type FilePreviewKind = \"pdf\" | \"doc\" | \"sheet\" | \"slide\" | \"image\" | \"generic\";\n\nexport type FilePreviewStatus = \"indexed\" | \"indexing\" | \"stale\" | \"failed\";\n\nconst STATUS_TONE: Record<FilePreviewStatus, BadgeTone> = {\n indexed: \"success\",\n indexing: \"info\",\n stale: \"warning\",\n failed: \"error\",\n};\n\nconst STATUS_LABEL: Record<FilePreviewStatus, string> = {\n indexed: \"Indexed\",\n indexing: \"Indexing…\",\n stale: \"Stale\",\n failed: \"Failed\",\n};\n\nexport interface FilePreviewActivityEvent {\n id: string;\n /** Status maps to Timeline status; defaults to \"info\". */\n status?: \"success\" | \"info\" | \"warning\" | \"error\" | \"pending\" | \"default\";\n title: ReactNode;\n description?: ReactNode;\n timestamp?: ReactNode;\n}\n\nexport interface FilePreviewProps {\n filename: string;\n /** Used to colour the file icon avatar. Defaults to \"generic\". */\n kind?: FilePreviewKind;\n /** Indexing status badge. */\n status?: FilePreviewStatus;\n /** Human-readable size string (\"2.3 MB\"). */\n size?: ReactNode;\n /** Source label rendered under the filename (\"Drive · Legal / Acme\"). */\n source?: ReactNode;\n /** Override the rendered preview content. Defaults to a placeholder. */\n preview?: ReactNode;\n /** Metadata description list rows. */\n metadata?: { term: ReactNode; value: ReactNode }[];\n /** Activity events for the third tab. */\n activity?: FilePreviewActivityEvent[];\n /** Optional trailing actions in the header. */\n actions?: ReactNode;\n}\n\nfunction KindIcon({ kind }: { kind: FilePreviewKind }) {\n return <SvgFile width={18} height={18} aria-hidden=\"true\" data-kind={kind} />;\n}\n\nexport const FilePreview = forwardRef<HTMLDivElement, FilePreviewProps>(function FilePreview(\n {\n filename,\n kind = \"generic\",\n status = \"indexed\",\n size,\n source,\n preview,\n metadata,\n activity,\n actions,\n },\n ref,\n) {\n return (\n <Card ref={ref} surface=\"elevated\" padding=\"none\" className={styles.panel}>\n <CardHeader\n className={styles.header}\n title={\n <span className={styles.title}>\n <Avatar size=\"sm\" tone=\"muted\" aria-label={`${kind.toUpperCase()} file`}>\n <KindIcon kind={kind} />\n </Avatar>\n <span className={styles.titleText}>\n <span className={styles.filename}>{filename}</span>\n <span className={styles.meta}>\n {source ? <span>{source}</span> : null}\n {source && size ? <span aria-hidden=\"true\">·</span> : null}\n {size ? <span>{size}</span> : null}\n </span>\n </span>\n </span>\n }\n actions={\n <Stack direction=\"row\" gap={6} align=\"center\">\n <Badge tone={STATUS_TONE[status]} prominence=\"subtle\">\n {STATUS_LABEL[status]}\n </Badge>\n {actions ?? (\n <>\n <Button\n variant=\"tertiary\"\n size=\"sm\"\n iconOnly\n iconLeft={<SvgCopy width={14} height={14} aria-hidden=\"true\" />}\n aria-label=\"Copy reference\"\n />\n <Button\n variant=\"tertiary\"\n size=\"sm\"\n iconOnly\n iconLeft={<SvgRefresh width={14} height={14} aria-hidden=\"true\" />}\n aria-label=\"Re-index\"\n />\n </>\n )}\n </Stack>\n }\n />\n <Separator />\n <CardBody className={styles.body}>\n <Tabs defaultValue=\"preview\">\n <TabsList ariaLabel={`Tabs for ${filename}`}>\n <TabsTrigger value=\"preview\">Preview</TabsTrigger>\n <TabsTrigger value=\"metadata\">Metadata</TabsTrigger>\n <TabsTrigger value=\"activity\">Activity</TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"preview\">\n <div className={styles.previewPane}>\n {preview ?? (\n <div className={styles.placeholder} role=\"img\" aria-label={`Preview of ${filename}`}>\n <KindIcon kind={kind} />\n <span>{filename}</span>\n <span className={styles.placeholderHint}>\n Preview rendered server-side. Open the source for full fidelity.\n </span>\n </div>\n )}\n </div>\n </TabsContent>\n\n <TabsContent value=\"metadata\">\n <div className={styles.metadataPane}>\n {metadata && metadata.length > 0 ? (\n <DescriptionList orientation=\"horizontal\">\n {metadata.map((row, i) => (\n <DescriptionItem key={i} term={row.term}>\n {row.value}\n </DescriptionItem>\n ))}\n </DescriptionList>\n ) : (\n <div className={styles.placeholderHint}>No metadata captured.</div>\n )}\n </div>\n </TabsContent>\n\n <TabsContent value=\"activity\">\n <div className={styles.activityPane}>\n {activity && activity.length > 0 ? (\n <Timeline>\n {activity.map((event) => (\n <TimelineItem\n key={event.id}\n status={event.status ?? \"info\"}\n title={event.title}\n meta={event.timestamp}\n >\n {event.description}\n </TimelineItem>\n ))}\n </Timeline>\n ) : (\n <div className={styles.placeholderHint}>No activity yet.</div>\n )}\n </div>\n </TabsContent>\n </Tabs>\n </CardBody>\n </Card>\n );\n});\n","import { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { Card } from \"../../components/Card\";\nimport { Input } from \"../../components/Input\";\nimport { Select, type SelectOption } from \"../../components/Select\";\nimport styles from \"./FilteringPattern.module.css\";\n\nexport interface FilteringFacet {\n id: string;\n label: ReactNode;\n count?: number;\n onClick?: () => void;\n}\n\nexport interface FilteringAppliedChip {\n id: string;\n label: ReactNode;\n onRemove?: () => void;\n}\n\nexport interface FilteringPatternProps extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n query?: string;\n onQueryChange?: (q: string) => void;\n placeholder?: string;\n facets: FilteringFacet[];\n applied: FilteringAppliedChip[];\n total?: number;\n totalLabel?: ReactNode;\n sortOptions?: SelectOption[];\n sortValue?: string;\n onSortChange?: (v: string) => void;\n onClearAll?: () => void;\n}\n\nconst SearchIcon = () => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"7\" />\n <path d=\"M21 21l-4.3-4.3\" />\n </svg>\n);\n\nconst CaretDown = () => (\n <svg viewBox=\"0 0 24 24\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className={styles.chipCaret} aria-hidden=\"true\">\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n);\n\nexport const FilteringPattern = forwardRef<HTMLDivElement, FilteringPatternProps>(function FilteringPattern(\n {\n query,\n onQueryChange,\n placeholder = \"Search…\",\n facets,\n applied,\n total,\n totalLabel,\n sortOptions,\n sortValue,\n onSortChange,\n onClearAll,\n className,\n ...rest\n },\n ref,\n) {\n const showApplied = applied.length > 0;\n\n return (\n <Card\n ref={ref}\n surface=\"elevated\"\n padding=\"sm\"\n className={[styles.stage, className].filter(Boolean).join(\" \")}\n {...rest}\n >\n <div className={styles.bar}>\n <div className={styles.search}>\n <Input\n type=\"search\"\n value={query ?? \"\"}\n placeholder={placeholder}\n iconLeft={<SearchIcon />}\n onChange={(e) => onQueryChange?.(e.target.value)}\n aria-label=\"Search\"\n />\n </div>\n {facets.map((facet) => (\n <button key={facet.id} type=\"button\" className={styles.chip} onClick={facet.onClick}>\n {facet.label}\n {typeof facet.count === \"number\" ? <span className={styles.chipCount}>({facet.count})</span> : null}\n <CaretDown />\n </button>\n ))}\n </div>\n\n {showApplied ? (\n <div className={styles.bar}>\n {applied.map((chip) => (\n <span key={chip.id} className={[styles.chip, styles.chipApplied].join(\" \")}>\n {chip.onRemove ? (\n <button\n type=\"button\"\n className={styles.chipX}\n onClick={chip.onRemove}\n aria-label={\n typeof chip.label === \"string\"\n ? `Remove filter: ${chip.label}`\n : \"Remove filter\"\n }\n >\n <span aria-hidden=\"true\">×</span>\n </button>\n ) : null}\n {chip.label}\n </span>\n ))}\n {onClearAll ? (\n <button type=\"button\" className={styles.clear} onClick={onClearAll}>\n Clear all ({applied.length})\n </button>\n ) : null}\n </div>\n ) : null}\n\n {total !== undefined || sortOptions ? (\n <div className={styles.meta}>\n <span className={styles.metaCount}>\n {total !== undefined ? (\n <>\n <strong>{total.toLocaleString()}</strong> {totalLabel ?? \"results\"}\n </>\n ) : null}\n </span>\n {sortOptions ? (\n <span className={styles.sort}>\n <span className={styles.sortLabel}>Sort:</span>\n <Select\n options={sortOptions}\n value={sortValue}\n onValueChange={onSortChange}\n aria-label=\"Sort results\"\n />\n </span>\n ) : null}\n </div>\n ) : null}\n </Card>\n );\n});\n","import { forwardRef, useId, type HTMLAttributes, type ReactNode } from \"react\";\nimport { Input } from \"../../components/Input\";\nimport { Select } from \"../../components/Select\";\nimport { Switch } from \"../../components/Switch\";\nimport { RadioGroup, Radio } from \"../../components/RadioGroup\";\nimport { Button } from \"../../components/Button\";\nimport { Card, CardHeader, CardBody, CardFooter } from \"../../components/Card\";\nimport styles from \"./FormsPattern.module.css\";\n\nexport interface FormFieldProps extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n label?: ReactNode;\n hint?: ReactNode;\n error?: ReactNode;\n required?: boolean;\n optional?: boolean;\n htmlFor?: string;\n children: ReactNode;\n}\n\nconst WarnIcon = () => (\n <svg\n className={styles.errorIcon}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\" />\n <path d=\"M12 9v4M12 17h.01\" />\n </svg>\n);\n\n/**\n * FormField wraps a label + arbitrary control + hint/error slot.\n *\n * Accessibility caveat: this primitive does NOT auto-wire `aria-describedby`\n * or `aria-invalid` onto the inner control because it accepts arbitrary\n * `children`. Consumers MUST either:\n * - pass `aria-describedby` and `aria-invalid` explicitly on the inner\n * control (using the same `htmlFor`/id you pass here), or\n * - prefer dedicated subcomponents like `<Input>` / `<Select>` which wire\n * their own hint/error association internally.\n *\n * The `error` slot here uses `role=\"alert\"` so it is announced regardless,\n * but the visual hint will only be associated to the control if the consumer\n * wires `aria-describedby` themselves.\n */\nexport const FormField = forwardRef<HTMLDivElement, FormFieldProps>(function FormField(\n { label, hint, error, required, optional, htmlFor, children, className, ...rest },\n ref,\n) {\n const autoId = useId();\n const labelId = `${autoId}-label`;\n const hintId = `${autoId}-hint`;\n const errorId = `${autoId}-error`;\n\n return (\n <div\n ref={ref}\n className={[styles.field, className].filter(Boolean).join(\" \")}\n {...rest}\n >\n {label ? (\n <label id={labelId} htmlFor={htmlFor} className={styles.label}>\n {label}\n {required ? (\n <span className={styles.required} aria-hidden=\"true\">\n {\" *\"}\n </span>\n ) : null}\n {optional && !required ? (\n <span className={styles.optional}>{\"(optional)\"}</span>\n ) : null}\n </label>\n ) : null}\n {children}\n {error ? (\n <span id={errorId} className={styles.error} role=\"alert\">\n <WarnIcon />\n {error}\n </span>\n ) : hint ? (\n <span id={hintId} className={styles.hint}>\n {hint}\n </span>\n ) : null}\n </div>\n );\n});\n\nexport interface FormGroupProps extends HTMLAttributes<HTMLDivElement> {}\n\nexport const FormGroup = forwardRef<HTMLDivElement, FormGroupProps>(function FormGroup(\n { className, ...rest },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={[styles.group, className].filter(Boolean).join(\" \")}\n {...rest}\n />\n );\n});\n\nexport interface FormFooterProps extends HTMLAttributes<HTMLDivElement> {}\n\nexport const FormFooter = forwardRef<HTMLDivElement, FormFooterProps>(function FormFooter(\n { className, ...rest },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={[styles.footer, className].filter(Boolean).join(\" \")}\n {...rest}\n />\n );\n});\n\nexport type FormPatternVariant = \"workspace-create\" | \"errors\" | \"inline\";\n\nexport interface FormPatternProps {\n variant?: FormPatternVariant;\n onCancel?: () => void;\n onSubmit?: () => void;\n}\n\nconst REGION_OPTIONS = [\n { value: \"eu-west-1\", label: \"EU West (Ireland)\" },\n { value: \"eu-central-1\", label: \"EU Central (Frankfurt)\" },\n { value: \"us-east-1\", label: \"US East (Virginia)\" },\n];\n\nexport function FormPattern({\n variant = \"workspace-create\",\n onCancel,\n onSubmit,\n}: FormPatternProps) {\n if (variant === \"inline\") {\n return (\n <Card surface=\"elevated\" padding=\"md\">\n <CardBody>\n <FormGroup>\n <div className={styles.inline}>\n <Input\n label=\"Invite teammate\"\n placeholder=\"name@kiefer-tek.com\"\n type=\"email\"\n />\n <Button variant=\"primary\" onClick={onSubmit}>\n Send invite\n </Button>\n </div>\n </FormGroup>\n </CardBody>\n </Card>\n );\n }\n\n const showErrors = variant === \"errors\";\n\n return (\n <Card surface=\"elevated\" padding=\"md\">\n <CardHeader\n title=\"Create a workspace\"\n description=\"Workspaces isolate teams, sources, and billing.\"\n />\n <CardBody>\n <FormGroup>\n <Input\n label=\"Email\"\n type=\"email\"\n defaultValue=\"stamos@kiefer-tek.com\"\n required\n />\n <Input\n label=\"Workspace\"\n defaultValue={showErrors ? \"kiefer tek\" : \"kiefer-tek\"}\n error={\n showErrors\n ? \"Workspace can only contain letters, numbers and hyphens.\"\n : undefined\n }\n hint={showErrors ? undefined : \"Lowercase, hyphen-separated.\"}\n required\n />\n <FormField label=\"Region\" required>\n <Select\n options={REGION_OPTIONS}\n defaultValue=\"eu-west-1\"\n aria-label=\"Region\"\n />\n </FormField>\n <Input\n label=\"Description\"\n placeholder=\"A short note for your team…\"\n hint=\"Visible to anyone in this workspace, 120 char max.\"\n />\n <FormField label=\"Default visibility\" required>\n <RadioGroup defaultValue=\"private\" name=\"visibility\">\n <Radio\n value=\"private\"\n label=\"Private\"\n description=\"Only invited members can join.\"\n />\n <Radio\n value=\"org\"\n label=\"Organization\"\n description=\"Anyone in your org can request access.\"\n />\n </RadioGroup>\n </FormField>\n <FormField\n hint=\"Email digest of new sources and runs, sent weekly.\"\n >\n <Switch\n label=\"Weekly activity digest\"\n defaultChecked\n />\n </FormField>\n </FormGroup>\n </CardBody>\n <CardFooter>\n <div className={styles.footer} style={{ width: \"100%\" }}>\n <Button variant=\"secondary\" onClick={onCancel}>\n Cancel\n </Button>\n <Button variant=\"primary\" onClick={onSubmit}>\n Save changes\n </Button>\n </div>\n </CardFooter>\n </Card>\n );\n}\n","import { forwardRef, type HTMLAttributes } from \"react\";\nimport styles from \"./LoadingStates.module.css\";\n\n/* -------------------------------------------------------------------------- */\n/* Spinner */\n/* -------------------------------------------------------------------------- */\n\nexport type SpinnerSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface SpinnerProps extends Omit<HTMLAttributes<HTMLSpanElement>, \"aria-label\"> {\n size?: SpinnerSize;\n \"aria-label\"?: string;\n}\n\nconst SPINNER_PX: Record<SpinnerSize, number> = { sm: 16, md: 20, lg: 24 };\n\nexport const Spinner = forwardRef<HTMLSpanElement, SpinnerProps>(function Spinner(\n { size = \"md\", className, \"aria-label\": ariaLabel = \"Loading\", ...rest },\n ref,\n) {\n const px = SPINNER_PX[size];\n return (\n <span\n ref={ref}\n role=\"status\"\n aria-label={ariaLabel}\n className={[styles.spinner, styles[`spinner-${size}`], className].filter(Boolean).join(\" \")}\n {...rest}\n >\n <svg\n viewBox=\"0 0 24 24\"\n width={px}\n height={px}\n fill=\"none\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"9\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeDasharray=\"14 56\"\n />\n </svg>\n </span>\n );\n});\n\n/* -------------------------------------------------------------------------- */\n/* ProgressBar */\n/* -------------------------------------------------------------------------- */\n\nexport interface ProgressBarProps extends Omit<HTMLAttributes<HTMLDivElement>, \"role\"> {\n /** Percent complete, 0-100. Ignored when `indeterminate` is true. */\n value?: number;\n /** Optional label rendered above the bar. */\n label?: React.ReactNode;\n /** Render an indeterminate, oscillating fill. */\n indeterminate?: boolean;\n /**\n * Override the aria-label applied to the progressbar element. Used when\n * `label` is non-string or when the visible label needs a different AT name.\n */\n \"aria-label\"?: string;\n}\n\nfunction clampPct(n: number): number {\n if (Number.isNaN(n)) return 0;\n if (n < 0) return 0;\n if (n > 100) return 100;\n return n;\n}\n\nexport const ProgressBar = forwardRef<HTMLDivElement, ProgressBarProps>(function ProgressBar(\n { value = 0, label, indeterminate = false, className, \"aria-label\": ariaLabel, ...rest },\n ref,\n) {\n const pct = clampPct(value);\n const ariaProps = indeterminate\n ? ({ \"aria-valuemin\": 0, \"aria-valuemax\": 100 } as const)\n : ({ \"aria-valuemin\": 0, \"aria-valuemax\": 100, \"aria-valuenow\": Math.round(pct) } as const);\n\n const resolvedAriaLabel =\n ariaLabel ?? (typeof label === \"string\" ? label : \"Loading\");\n\n return (\n <div\n ref={ref}\n className={[styles.progressWrap, className].filter(Boolean).join(\" \")}\n aria-busy={indeterminate || undefined}\n {...rest}\n >\n {label != null ? <span className={styles.progressLabel}>{label}</span> : null}\n <div\n className={styles.progressTrack}\n role=\"progressbar\"\n aria-label={resolvedAriaLabel}\n {...ariaProps}\n >\n <div\n className={[styles.progressFill, indeterminate ? styles.indeterminate : null]\n .filter(Boolean)\n .join(\" \")}\n style={indeterminate ? undefined : { width: `${pct}%` }}\n />\n </div>\n </div>\n );\n});\n","import { useMemo, useState, type ReactNode } from \"react\";\nimport { Avatar } from \"../../components/Avatar\";\nimport { Badge, type BadgeTone } from \"../../components/Badge\";\nimport { Button } from \"../../components/Button\";\nimport { Card, CardBody, CardFooter, CardHeader } from \"../../components/Card\";\nimport { DescriptionItem, DescriptionList } from \"../../components/DescriptionList\";\nimport { List, ListItem } from \"../../components/List\";\nimport { Stack } from \"../../components/Stack\";\nimport styles from \"./MasterDetail.module.css\";\n\nexport interface MasterDetailItem {\n id: string;\n /** Primary text rendered in the list. */\n title: ReactNode;\n /** Secondary text under the title. */\n description?: ReactNode;\n /** Optional leading visual (avatar, icon). */\n leading?: ReactNode;\n /** Optional trailing slot (status pill, badge). */\n trailing?: ReactNode;\n /** Arbitrary payload surfaced to the detail renderer. */\n data?: unknown;\n}\n\nexport interface MasterDetailProps<TItem extends MasterDetailItem = MasterDetailItem> {\n items: TItem[];\n /** Initial selection. Falls back to the first item. */\n defaultSelectedId?: string;\n /** Controlled selection. */\n selectedId?: string;\n onSelectionChange?: (id: string) => void;\n /** Title rendered above the master list. */\n masterTitle?: ReactNode;\n /** Description rendered above the master list. */\n masterDescription?: ReactNode;\n /** Slot rendered at the top of the master column (e.g. search, filters). */\n masterToolbar?: ReactNode;\n /** Renders the detail card. */\n renderDetail: (item: TItem) => ReactNode;\n /** Empty state when no items are provided. */\n empty?: ReactNode;\n}\n\nexport function MasterDetail<TItem extends MasterDetailItem = MasterDetailItem>({\n items,\n defaultSelectedId,\n selectedId,\n onSelectionChange,\n masterTitle,\n masterDescription,\n masterToolbar,\n renderDetail,\n empty,\n}: MasterDetailProps<TItem>) {\n const fallbackId = items[0]?.id;\n const [internal, setInternal] = useState<string | undefined>(defaultSelectedId ?? fallbackId);\n const current = selectedId ?? internal ?? fallbackId;\n\n const selected = useMemo(() => items.find((item) => item.id === current), [items, current]);\n\n const select = (id: string) => {\n if (selectedId === undefined) setInternal(id);\n onSelectionChange?.(id);\n };\n\n if (items.length === 0) {\n return <div className={styles.shell}>{empty}</div>;\n }\n\n return (\n <div className={styles.shell}>\n <aside className={styles.master} aria-label=\"Members\">\n {masterTitle || masterDescription ? (\n <header className={styles.masterHeader}>\n {masterTitle ? <div className={styles.masterTitle}>{masterTitle}</div> : null}\n {masterDescription ? (\n <div className={styles.masterDescription}>{masterDescription}</div>\n ) : null}\n </header>\n ) : null}\n {masterToolbar ? <div className={styles.masterToolbar}>{masterToolbar}</div> : null}\n <div className={styles.masterList}>\n <List bordered={false} dividers density=\"compact\">\n {items.map((item) => (\n <ListItem\n key={item.id}\n interactive\n active={item.id === current}\n onClick={() => select(item.id)}\n leading={item.leading}\n title={item.title}\n description={item.description}\n trailing={item.trailing}\n aria-current={item.id === current ? \"true\" : undefined}\n />\n ))}\n </List>\n </div>\n </aside>\n <section className={styles.detail} aria-label=\"Selected member\">\n {selected ? renderDetail(selected) : null}\n </section>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// WorkspaceMembersDetail: opinionated detail renderer used by the showcase\n// story. Consumers can either drop it in directly or pass their own renderer.\n// ---------------------------------------------------------------------------\n\nexport interface WorkspaceMember extends MasterDetailItem {\n data: {\n fullName: string;\n email: string;\n role: \"Owner\" | \"Admin\" | \"Member\" | \"Viewer\";\n team: string;\n joined: string;\n lastActive: string;\n sources: string[];\n status: \"Active\" | \"Invited\" | \"Suspended\";\n };\n}\n\nconst ROLE_TONE: Record<WorkspaceMember[\"data\"][\"role\"], BadgeTone> = {\n Owner: \"brand\",\n Admin: \"info\",\n Member: \"neutral\",\n Viewer: \"neutral\",\n};\n\nconst STATUS_TONE: Record<WorkspaceMember[\"data\"][\"status\"], BadgeTone> = {\n Active: \"success\",\n Invited: \"warning\",\n Suspended: \"error\",\n};\n\nexport function WorkspaceMembersDetail(item: WorkspaceMember) {\n const d = item.data;\n return (\n <Card surface=\"elevated\" padding=\"md\">\n <CardHeader\n title={\n <span className={styles.detailTitle}>\n {d.fullName}\n <Badge tone={ROLE_TONE[d.role]} prominence=\"subtle\">\n {d.role}\n </Badge>\n <Badge tone={STATUS_TONE[d.status]} prominence=\"subtle\">\n {d.status}\n </Badge>\n </span>\n }\n description={d.email}\n />\n <CardBody>\n <Stack gap={16}>\n <DescriptionList orientation=\"horizontal\">\n <DescriptionItem term=\"Team\">{d.team}</DescriptionItem>\n <DescriptionItem term=\"Joined\">{d.joined}</DescriptionItem>\n <DescriptionItem term=\"Last active\">{d.lastActive}</DescriptionItem>\n <DescriptionItem term=\"Source scope\">\n {d.sources.length === 0 ? \"All sources\" : d.sources.join(\", \")}\n </DescriptionItem>\n </DescriptionList>\n </Stack>\n </CardBody>\n <CardFooter>\n <div className={styles.detailActions}>\n <Button variant=\"tertiary\">Open profile</Button>\n <Button variant=\"secondary\">Change role</Button>\n <Button variant=\"danger\">Remove from workspace</Button>\n </div>\n </CardFooter>\n </Card>\n );\n}\n\nexport const SAMPLE_MEMBERS: WorkspaceMember[] = [\n {\n id: \"sk\",\n leading: <Avatar size=\"sm\" tone=\"brand\">SK</Avatar>,\n title: \"Stamos Kantarakis\",\n description: \"stamos@kiefer-tek.com\",\n trailing: <Badge tone=\"brand\" prominence=\"subtle\">Owner</Badge>,\n data: {\n fullName: \"Stamos Kantarakis\",\n email: \"stamos@kiefer-tek.com\",\n role: \"Owner\",\n team: \"Platform\",\n joined: \"2025-09-01\",\n lastActive: \"2 minutes ago\",\n sources: [],\n status: \"Active\",\n },\n },\n {\n id: \"av\",\n leading: <Avatar size=\"sm\" tone=\"user\">AV</Avatar>,\n title: \"Anna Vasileiou\",\n description: \"anna@kiefer-tek.com\",\n trailing: <Badge tone=\"info\" prominence=\"subtle\">Admin</Badge>,\n data: {\n fullName: \"Anna Vasileiou\",\n email: \"anna@kiefer-tek.com\",\n role: \"Admin\",\n team: \"Legal\",\n joined: \"2025-09-04\",\n lastActive: \"12 minutes ago\",\n sources: [\"Greek Legal\", \"Confluence\"],\n status: \"Active\",\n },\n },\n {\n id: \"mp\",\n leading: <Avatar size=\"sm\" tone=\"user\">MP</Avatar>,\n title: \"Maria Papadopoulou\",\n description: \"maria@kiefer-tek.com\",\n trailing: <Badge tone=\"neutral\" prominence=\"subtle\">Member</Badge>,\n data: {\n fullName: \"Maria Papadopoulou\",\n email: \"maria@kiefer-tek.com\",\n role: \"Member\",\n team: \"Sales\",\n joined: \"2025-10-12\",\n lastActive: \"yesterday\",\n sources: [\"Drive\", \"Slack\"],\n status: \"Active\",\n },\n },\n {\n id: \"dk\",\n leading: <Avatar size=\"sm\" tone=\"muted\">DK</Avatar>,\n title: \"Dimitris Karagiannis\",\n description: \"dimitris@kiefer-tek.com\",\n trailing: <Badge tone=\"warning\" prominence=\"subtle\">Invited</Badge>,\n data: {\n fullName: \"Dimitris Karagiannis\",\n email: \"dimitris@kiefer-tek.com\",\n role: \"Member\",\n team: \"Engineering\",\n joined: \"2026-05-22\",\n lastActive: \"never\",\n sources: [\"Drive\"],\n status: \"Invited\",\n },\n },\n {\n id: \"es\",\n leading: <Avatar size=\"sm\" tone=\"user\">ES</Avatar>,\n title: \"Eleni Stamatiou\",\n description: \"eleni@kiefer-tek.com\",\n trailing: <Badge tone=\"neutral\" prominence=\"subtle\">Viewer</Badge>,\n data: {\n fullName: \"Eleni Stamatiou\",\n email: \"eleni@kiefer-tek.com\",\n role: \"Viewer\",\n team: \"Compliance\",\n joined: \"2025-12-08\",\n lastActive: \"3 days ago\",\n sources: [\"Greek Legal\"],\n status: \"Active\",\n },\n },\n];\n","import { forwardRef, type ReactNode } from \"react\";\nimport { Badge } from \"../../components/Badge\";\nimport { Button, type ButtonVariant } from \"../../components/Button\";\nimport { Card, CardBody, CardFooter, CardHeader } from \"../../components/Card\";\nimport { List, ListItem } from \"../../components/List\";\nimport { Stat } from \"../../components/Stat\";\nimport { SvgTick } from \"../../icons\";\nimport styles from \"./PricingTable.module.css\";\n\nexport interface PricingTier {\n id: string;\n /** Tier name (Hobby / Pro / Enterprise). */\n name: ReactNode;\n /** Long-form tagline rendered under the name. */\n tagline?: ReactNode;\n /** Headline price (renders inside `Stat.value`). */\n price: ReactNode;\n /** Optional sub-unit (\"/ month\", \"team\", \"Custom\"). */\n unit?: ReactNode;\n /** Optional helper line under the value. */\n description?: ReactNode;\n /** Feature checklist. */\n features: ReactNode[];\n /** CTA copy. */\n ctaLabel: ReactNode;\n /** Button variant for the CTA. Defaults to \"secondary\"; recommended tier should use \"primary\". */\n ctaVariant?: ButtonVariant;\n /** When true, highlights this tier as recommended (renders the bold brand badge). */\n recommended?: boolean;\n onCtaClick?: () => void;\n}\n\nexport interface PricingTableProps {\n tiers: PricingTier[];\n /** Heading shown above the table. */\n title?: ReactNode;\n /** Sub-heading shown above the table. */\n description?: ReactNode;\n /** Footnote rendered under the table. */\n footnote?: ReactNode;\n}\n\nfunction TickIcon() {\n return (\n <span className={styles.tick} aria-hidden=\"true\">\n <SvgTick width={14} height={14} />\n </span>\n );\n}\n\nfunction TierCard({ tier }: { tier: PricingTier }) {\n const variant = tier.ctaVariant ?? (tier.recommended ? \"primary\" : \"secondary\");\n return (\n <Card\n surface=\"elevated\"\n padding=\"md\"\n className={[styles.tier, tier.recommended ? styles.tierRecommended : null]\n .filter(Boolean)\n .join(\" \")}\n >\n <CardHeader\n title={\n <span className={styles.tierTitle}>\n {tier.name}\n {tier.recommended ? (\n <Badge tone=\"brand\" prominence=\"bold\">\n Recommended\n </Badge>\n ) : null}\n </span>\n }\n description={tier.tagline}\n />\n <CardBody>\n <div className={styles.priceRow}>\n <Stat\n label={tier.unit ?? \"per month\"}\n value={tier.price}\n description={tier.description}\n bordered={false}\n />\n </div>\n <List bordered={false} dividers={false} density=\"compact\" className={styles.features}>\n {tier.features.map((feature, i) => (\n <ListItem key={i} leading={<TickIcon />} title={feature} />\n ))}\n </List>\n </CardBody>\n <CardFooter>\n <Button variant={variant} className={styles.cta} onClick={tier.onCtaClick}>\n {tier.ctaLabel}\n </Button>\n </CardFooter>\n </Card>\n );\n}\n\nexport const PricingTable = forwardRef<HTMLDivElement, PricingTableProps>(function PricingTable(\n { tiers, title, description, footnote },\n ref,\n) {\n return (\n <div ref={ref} className={styles.shell}>\n {title || description ? (\n <header className={styles.heading}>\n {title ? <h2 className={styles.title}>{title}</h2> : null}\n {description ? <p className={styles.description}>{description}</p> : null}\n </header>\n ) : null}\n <div className={styles.grid}>\n {tiers.map((tier) => (\n <TierCard key={tier.id} tier={tier} />\n ))}\n </div>\n {footnote ? <div className={styles.footnote}>{footnote}</div> : null}\n </div>\n );\n});\n\n// ---------------------------------------------------------------------------\n// SAMPLE_TIERS: Sophea-flavoured Hobby / Pro / Enterprise pricing.\n// ---------------------------------------------------------------------------\n\nexport const SAMPLE_TIERS: PricingTier[] = [\n {\n id: \"hobby\",\n name: \"Hobby\",\n tagline: \"For solo builders kicking the tyres.\",\n price: \"€ 0\",\n unit: \"per month\",\n description: \"Up to 3 seats. Community support.\",\n features: [\n \"1 workspace, eu-central-1 only\",\n \"500 indexed documents\",\n \"1 connector (Drive)\",\n \"Deep Research agent · 50 runs / month\",\n \"Community Discord support\",\n ],\n ctaLabel: \"Start free\",\n },\n {\n id: \"pro\",\n name: \"Pro\",\n tagline: \"For teams putting Sophea in front of customers.\",\n price: \"€ 150\",\n unit: \"per seat / month\",\n description: \"Billed annually. SOC 2 reports included.\",\n features: [\n \"Unlimited workspaces, EU + US regions\",\n \"50,000 indexed documents\",\n \"All connectors (Drive, Confluence, Notion, Slack)\",\n \"Deep Research + Greek Legal agents\",\n \"Zitadel SSO + SCIM\",\n \"Priority email support, 8h SLA\",\n ],\n ctaLabel: \"Start 30-day trial\",\n ctaVariant: \"primary\",\n recommended: true,\n },\n {\n id: \"enterprise\",\n name: \"Enterprise\",\n tagline: \"For regulated workloads with custom residency.\",\n price: \"Custom\",\n unit: \"annual\",\n description: \"Pilot rollouts welcomed. Greek-first onboarding.\",\n features: [\n \"Self-hosted EKS or air-gapped option\",\n \"Unlimited documents and seats\",\n \"Custom agents (Sophea-built)\",\n \"Audit log export to your SIEM\",\n \"Dedicated SRE + 24×7 paging\",\n \"DPA + EU data-residency contract\",\n ],\n ctaLabel: \"Talk to sales\",\n },\n];\n","import { useState, type ReactNode } from \"react\";\nimport { Badge } from \"../../components/Badge\";\nimport { Button } from \"../../components/Button\";\nimport { Card, CardBody, CardFooter, CardHeader } from \"../../components/Card\";\nimport { DescriptionItem, DescriptionList } from \"../../components/DescriptionList\";\nimport { Input } from \"../../components/Input\";\nimport { Select } from \"../../components/Select\";\nimport { SidebarSection, SidebarTab, SidebarTabs } from \"../../components/SidebarTab\";\nimport { Stack } from \"../../components/Stack\";\nimport { Switch } from \"../../components/Switch\";\nimport {\n SvgAlertTriangle,\n SvgBulb,\n SvgChatBubble,\n SvgFolder,\n SvgPlug,\n SvgUsers,\n} from \"../../icons\";\nimport styles from \"./SettingsPage.module.css\";\n\nexport type SettingsSectionId =\n | \"account\"\n | \"workspace\"\n | \"notifications\"\n | \"billing\"\n | \"api-keys\"\n | \"danger\";\n\nexport interface SettingsPageProps {\n /** Initial section. */\n defaultSection?: SettingsSectionId;\n /** Controlled section. */\n section?: SettingsSectionId;\n onSectionChange?: (id: SettingsSectionId) => void;\n}\n\nconst NAV_ITEMS: { id: SettingsSectionId; label: string; icon: ReactNode }[] = [\n { id: \"account\", label: \"Account\", icon: <SvgUsers width={16} height={16} aria-hidden=\"true\" /> },\n { id: \"workspace\", label: \"Workspace\", icon: <SvgFolder width={16} height={16} aria-hidden=\"true\" /> },\n { id: \"notifications\", label: \"Notifications\", icon: <SvgBulb width={16} height={16} aria-hidden=\"true\" /> },\n { id: \"billing\", label: \"Billing\", icon: <SvgChatBubble width={16} height={16} aria-hidden=\"true\" /> },\n { id: \"api-keys\", label: \"API keys\", icon: <SvgPlug width={16} height={16} aria-hidden=\"true\" /> },\n { id: \"danger\", label: \"Danger zone\", icon: <SvgAlertTriangle width={16} height={16} aria-hidden=\"true\" /> },\n];\n\nconst REGION_OPTIONS = [\n { value: \"eu-central-1\", label: \"EU Central (Frankfurt)\" },\n { value: \"eu-west-1\", label: \"EU West (Ireland)\" },\n { value: \"us-east-1\", label: \"US East (Virginia)\" },\n];\n\nconst DIGEST_OPTIONS = [\n { value: \"off\", label: \"Off\" },\n { value: \"daily\", label: \"Daily\" },\n { value: \"weekly\", label: \"Weekly\" },\n];\n\nfunction AccountSection() {\n return (\n <Stack gap={16}>\n <Card surface=\"elevated\" padding=\"md\">\n <CardHeader title=\"Profile\" description=\"Visible to teammates in Acme · prod.\" />\n <CardBody>\n <Stack gap={12}>\n <Input label=\"Full name\" defaultValue=\"Stamos Kantarakis\" />\n <Input label=\"Email\" type=\"email\" defaultValue=\"stamos@kiefer-tek.com\" />\n <Input label=\"Job title\" defaultValue=\"Staff platform engineer\" />\n </Stack>\n </CardBody>\n <CardFooter>\n <div className={styles.actions}>\n <Button variant=\"secondary\">Cancel</Button>\n <Button variant=\"primary\">Save changes</Button>\n </div>\n </CardFooter>\n </Card>\n\n <Card surface=\"elevated\" padding=\"md\">\n <CardHeader title=\"Sign-in\" description=\"Authentication and session preferences.\" />\n <CardBody>\n <DescriptionList orientation=\"horizontal\">\n <DescriptionItem term=\"Identity provider\">Zitadel · sophea-portal</DescriptionItem>\n <DescriptionItem term=\"Two-factor\">\n <Badge tone=\"success\" prominence=\"subtle\">Enabled</Badge>\n </DescriptionItem>\n <DescriptionItem term=\"Last sign-in\">2026-05-24 · 14:32 · Athens</DescriptionItem>\n </DescriptionList>\n </CardBody>\n </Card>\n </Stack>\n );\n}\n\nfunction WorkspaceSection() {\n return (\n <Stack gap={16}>\n <Card surface=\"elevated\" padding=\"md\">\n <CardHeader\n title=\"Workspace details\"\n description=\"Workspace name is visible to everyone in Acme · prod.\"\n />\n <CardBody>\n <Stack gap={12}>\n <Input label=\"Display name\" defaultValue=\"Acme · prod\" />\n <Input\n label=\"Slug\"\n defaultValue=\"acme-prod\"\n hint=\"Lowercase, hyphen-separated. Used in URLs and the CLI.\"\n />\n <div className={styles.fieldRow}>\n <label className={styles.fieldLabel} htmlFor=\"region\">\n Region\n </label>\n <Select\n id=\"region\"\n options={REGION_OPTIONS}\n defaultValue=\"eu-central-1\"\n aria-label=\"Region\"\n />\n </div>\n </Stack>\n </CardBody>\n <CardFooter>\n <div className={styles.actions}>\n <Button variant=\"secondary\">Cancel</Button>\n <Button variant=\"primary\">Save changes</Button>\n </div>\n </CardFooter>\n </Card>\n </Stack>\n );\n}\n\nfunction NotificationsSection() {\n return (\n <Card surface=\"elevated\" padding=\"md\">\n <CardHeader\n title=\"Notifications\"\n description=\"Where Sophea pings you when something needs attention.\"\n />\n <CardBody>\n <Stack gap={14}>\n <Switch\n label=\"Source indexing failures\"\n description=\"Email and Slack when a connector run fails.\"\n defaultChecked\n />\n <Switch\n label=\"Agent run completed\"\n description=\"Notify when Deep Research or Greek Legal finishes a job over 60 seconds.\"\n defaultChecked\n />\n <Switch\n label=\"New teammate joins workspace\"\n description=\"Quiet by default. Flip on if you own access reviews.\"\n />\n <div className={styles.fieldRow}>\n <label className={styles.fieldLabel} htmlFor=\"digest\">\n Weekly digest cadence\n </label>\n <Select\n id=\"digest\"\n options={DIGEST_OPTIONS}\n defaultValue=\"weekly\"\n aria-label=\"Weekly digest cadence\"\n />\n </div>\n </Stack>\n </CardBody>\n </Card>\n );\n}\n\nfunction BillingSection() {\n return (\n <Stack gap={16}>\n <Card surface=\"elevated\" padding=\"md\">\n <CardHeader\n title=\"Plan\"\n description=\"Acme · prod is on the Pro plan. Renews 14 November 2026.\"\n actions={<Badge tone=\"brand\" prominence=\"bold\">Pro</Badge>}\n />\n <CardBody>\n <DescriptionList orientation=\"horizontal\">\n <DescriptionItem term=\"Seats\">28 of 50</DescriptionItem>\n <DescriptionItem term=\"Indexed documents\">14,802 of 50,000</DescriptionItem>\n <DescriptionItem term=\"Agent minutes (May)\">3,210 min</DescriptionItem>\n <DescriptionItem term=\"Next invoice\">€ 4,200.00 · 1 June 2026</DescriptionItem>\n </DescriptionList>\n </CardBody>\n <CardFooter>\n <div className={styles.actions}>\n <Button variant=\"secondary\">Download invoices</Button>\n <Button variant=\"primary\">Change plan</Button>\n </div>\n </CardFooter>\n </Card>\n </Stack>\n );\n}\n\nfunction ApiKeysSection() {\n return (\n <Card surface=\"elevated\" padding=\"md\">\n <CardHeader\n title=\"API keys\"\n description=\"Service-to-service auth for CLI and webhook integrations.\"\n />\n <CardBody>\n <Stack gap={10}>\n <div className={styles.keyRow}>\n <div className={styles.keyMeta}>\n <span className={styles.keyName}>cli-prod</span>\n <span className={styles.keyDetail}>Last used 2 hours ago · created 2026-04-12</span>\n </div>\n <Badge tone=\"success\" prominence=\"subtle\">Active</Badge>\n </div>\n <div className={styles.keyRow}>\n <div className={styles.keyMeta}>\n <span className={styles.keyName}>greek-legal-runner</span>\n <span className={styles.keyDetail}>Last used 5 days ago · created 2026-02-03</span>\n </div>\n <Badge tone=\"warning\" prominence=\"subtle\">Rotate soon</Badge>\n </div>\n </Stack>\n </CardBody>\n <CardFooter>\n <div className={styles.actions}>\n <Button variant=\"primary\">Create key</Button>\n </div>\n </CardFooter>\n </Card>\n );\n}\n\nfunction DangerSection() {\n return (\n <Card surface=\"elevated\" padding=\"md\">\n <CardHeader\n title=\"Danger zone\"\n description=\"These actions are permanent. Double-check before you confirm.\"\n />\n <CardBody>\n <Stack gap={12}>\n <div className={styles.dangerRow}>\n <div>\n <div className={styles.dangerTitle}>Transfer workspace</div>\n <div className={styles.dangerCopy}>\n Move Acme · prod to a different billing owner. Members keep access.\n </div>\n </div>\n <Button variant=\"secondary\">Transfer</Button>\n </div>\n <div className={styles.dangerRow}>\n <div>\n <div className={styles.dangerTitle}>Delete workspace</div>\n <div className={styles.dangerCopy}>\n Removes chats, connectors, and indexed documents. Cannot be undone.\n </div>\n </div>\n <Button variant=\"danger\">Delete workspace</Button>\n </div>\n </Stack>\n </CardBody>\n </Card>\n );\n}\n\nconst SECTION_RENDERERS: Record<SettingsSectionId, () => ReactNode> = {\n account: AccountSection,\n workspace: WorkspaceSection,\n notifications: NotificationsSection,\n billing: BillingSection,\n \"api-keys\": ApiKeysSection,\n danger: DangerSection,\n};\n\nexport function SettingsPage({\n defaultSection = \"account\",\n section,\n onSectionChange,\n}: SettingsPageProps) {\n const [internal, setInternal] = useState<SettingsSectionId>(defaultSection);\n const current = section ?? internal;\n const setCurrent = (id: SettingsSectionId) => {\n if (section === undefined) setInternal(id);\n onSectionChange?.(id);\n };\n const Render = SECTION_RENDERERS[current];\n\n return (\n <div className={styles.shell}>\n <aside className={styles.nav} aria-label=\"Settings navigation\">\n <SidebarTabs\n value={current}\n onValueChange={(v) => setCurrent(v as SettingsSectionId)}\n >\n <SidebarSection>Settings</SidebarSection>\n {NAV_ITEMS.map((item) => (\n <SidebarTab key={item.id} value={item.id} icon={item.icon}>\n {item.label}\n </SidebarTab>\n ))}\n </SidebarTabs>\n </aside>\n <main className={styles.main} aria-label=\"Settings content\">\n <Render />\n </main>\n </div>\n );\n}\n","import { forwardRef, type FormEvent, type ReactNode } from \"react\";\nimport { Button } from \"../../components/Button\";\nimport { Card, CardBody, CardHeader } from \"../../components/Card\";\nimport { Input } from \"../../components/Input\";\nimport { Separator } from \"../../components/Separator\";\nimport { Stack } from \"../../components/Stack\";\nimport { SvgOwl, SvgPlug } from \"../../icons\";\nimport styles from \"./SignInForm.module.css\";\n\nexport interface SignInFormProps {\n /** Workspace label shown above the form (e.g. \"Acme · prod\"). */\n workspaceLabel?: ReactNode;\n /** Title text. Defaults to \"Sign in to Sophea\". */\n title?: ReactNode;\n /** Subtitle / description text. */\n description?: ReactNode;\n onSubmit?: (values: { email: string; password: string }) => void;\n onSsoClick?: () => void;\n /** Footer link slot (sign-up CTA, recovery, etc.). */\n footer?: ReactNode;\n}\n\nfunction FormMark({ label }: { label: ReactNode }) {\n return (\n <div className={styles.mark}>\n <span className={styles.markIcon} aria-hidden=\"true\">\n <SvgOwl width={28} height={28} />\n </span>\n <span className={styles.markLabel}>{label}</span>\n </div>\n );\n}\n\nexport const SignInForm = forwardRef<HTMLDivElement, SignInFormProps>(function SignInForm(\n {\n workspaceLabel = \"Acme · prod\",\n title = \"Sign in to Sophea\",\n description = \"Use your work email. SSO is available for org-managed accounts.\",\n onSubmit,\n onSsoClick,\n footer,\n },\n ref,\n) {\n const handleSubmit = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const data = new FormData(event.currentTarget);\n onSubmit?.({\n email: String(data.get(\"email\") ?? \"\"),\n password: String(data.get(\"password\") ?? \"\"),\n });\n };\n\n return (\n <div className={styles.stage}>\n <Card ref={ref} surface=\"elevated\" padding=\"lg\" className={styles.card}>\n <FormMark label={workspaceLabel} />\n <CardHeader title={title} description={description} />\n <CardBody>\n <form onSubmit={handleSubmit} className={styles.form} noValidate>\n <Stack gap={12}>\n <Input\n label=\"Work email\"\n name=\"email\"\n type=\"email\"\n autoComplete=\"email\"\n placeholder=\"you@kiefer-tek.com\"\n required\n />\n <Input\n label=\"Password\"\n name=\"password\"\n type=\"password\"\n autoComplete=\"current-password\"\n placeholder=\"••••••••\"\n required\n />\n <div className={styles.helperRow}>\n <a href=\"#\" className={styles.link}>\n Forgot password?\n </a>\n </div>\n <Button variant=\"primary\" size=\"md\" type=\"submit\" className={styles.cta}>\n Sign in\n </Button>\n <Separator label=\"OR\" />\n <Button\n variant=\"secondary\"\n size=\"md\"\n type=\"button\"\n iconLeft={<SvgPlug width={16} height={16} aria-hidden=\"true\" />}\n onClick={onSsoClick}\n className={styles.cta}\n >\n Sign in with SSO\n </Button>\n </Stack>\n </form>\n </CardBody>\n <div className={styles.foot}>\n {footer ?? (\n <span>\n New to Sophea?{\" \"}\n <a href=\"#\" className={styles.link}>\n Create a workspace\n </a>\n </span>\n )}\n </div>\n </Card>\n </div>\n );\n});\n\n// ---------------------------------------------------------------------------\n// SignUpForm: sibling composition for the marketing-side flow. Same chrome,\n// extra name + workspace fields, copy tuned for first-run.\n// ---------------------------------------------------------------------------\n\nexport interface SignUpFormProps {\n workspaceLabel?: ReactNode;\n title?: ReactNode;\n description?: ReactNode;\n onSubmit?: (values: { name: string; email: string; workspace: string; password: string }) => void;\n onSsoClick?: () => void;\n footer?: ReactNode;\n}\n\nexport const SignUpForm = forwardRef<HTMLDivElement, SignUpFormProps>(function SignUpForm(\n {\n workspaceLabel = \"Sophea\",\n title = \"Create your Sophea workspace\",\n description = \"30-day trial. No card required. Greek and English supported.\",\n onSubmit,\n onSsoClick,\n footer,\n },\n ref,\n) {\n const handleSubmit = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const data = new FormData(event.currentTarget);\n onSubmit?.({\n name: String(data.get(\"name\") ?? \"\"),\n email: String(data.get(\"email\") ?? \"\"),\n workspace: String(data.get(\"workspace\") ?? \"\"),\n password: String(data.get(\"password\") ?? \"\"),\n });\n };\n\n return (\n <div className={styles.stage}>\n <Card ref={ref} surface=\"elevated\" padding=\"lg\" className={styles.card}>\n <FormMark label={workspaceLabel} />\n <CardHeader title={title} description={description} />\n <CardBody>\n <form onSubmit={handleSubmit} className={styles.form} noValidate>\n <Stack gap={12}>\n <Input\n label=\"Your name\"\n name=\"name\"\n autoComplete=\"name\"\n placeholder=\"Stamos Kantarakis\"\n required\n />\n <Input\n label=\"Work email\"\n name=\"email\"\n type=\"email\"\n autoComplete=\"email\"\n placeholder=\"you@kiefer-tek.com\"\n required\n />\n <Input\n label=\"Workspace name\"\n name=\"workspace\"\n placeholder=\"acme-prod\"\n hint=\"Lowercase, hyphen-separated.\"\n required\n />\n <Input\n label=\"Password\"\n name=\"password\"\n type=\"password\"\n autoComplete=\"new-password\"\n placeholder=\"At least 12 characters\"\n required\n />\n <Button variant=\"primary\" size=\"md\" type=\"submit\" className={styles.cta}>\n Create workspace\n </Button>\n <Separator label=\"OR\" />\n <Button\n variant=\"secondary\"\n size=\"md\"\n type=\"button\"\n iconLeft={<SvgPlug width={16} height={16} aria-hidden=\"true\" />}\n onClick={onSsoClick}\n className={styles.cta}\n >\n Continue with SSO\n </Button>\n </Stack>\n </form>\n </CardBody>\n <div className={styles.foot}>\n {footer ?? (\n <span>\n Already have an account?{\" \"}\n <a href=\"#\" className={styles.link}>\n Sign in\n </a>\n </span>\n )}\n </div>\n </Card>\n </div>\n );\n});\n","import { useState, type ReactNode } from \"react\";\nimport { Badge } from \"../../components/Badge\";\nimport { Button } from \"../../components/Button\";\nimport { Card, CardBody, CardFooter, CardHeader } from \"../../components/Card\";\nimport { Input } from \"../../components/Input\";\nimport { Select } from \"../../components/Select\";\nimport { Stack } from \"../../components/Stack\";\nimport { Switch } from \"../../components/Switch\";\nimport { SvgArrowLeft, SvgArrowRight, SvgTick } from \"../../icons\";\nimport styles from \"./Wizard.module.css\";\n\nexport interface WizardStep {\n /** Stable id, kept across re-renders. */\n id: string;\n /** Short label shown in the step pills. */\n label: ReactNode;\n /** Optional detailed title rendered above the step body. */\n title?: ReactNode;\n /** Optional description rendered under the title. */\n description?: ReactNode;\n /** Step body. */\n content: ReactNode;\n}\n\nexport interface WizardProps {\n steps: WizardStep[];\n /** Initial step index. */\n defaultStep?: number;\n /** Controlled step index. */\n step?: number;\n onStepChange?: (index: number) => void;\n onFinish?: () => void;\n onCancel?: () => void;\n /** Title rendered above the whole shell. */\n title?: ReactNode;\n /** Description rendered under the title. */\n description?: ReactNode;\n}\n\nexport function Wizard({\n steps,\n defaultStep = 0,\n step,\n onStepChange,\n onFinish,\n onCancel,\n title,\n description,\n}: WizardProps) {\n const [internal, setInternal] = useState(defaultStep);\n const current = Math.min(Math.max(0, step ?? internal), steps.length - 1);\n const setCurrent = (next: number) => {\n if (step === undefined) setInternal(next);\n onStepChange?.(next);\n };\n const isLast = current === steps.length - 1;\n const isFirst = current === 0;\n const active = steps[current];\n\n if (!active) return null;\n\n return (\n <Card surface=\"elevated\" padding=\"md\" className={styles.shell}>\n {title || description ? (\n <CardHeader title={title} description={description} />\n ) : null}\n <CardBody>\n <Stack gap={20}>\n <ol className={styles.pills} aria-label=\"Wizard steps\">\n {steps.map((s, i) => {\n const isActive = i === current;\n const isComplete = i < current;\n return (\n <li key={s.id} className={styles.pillItem}>\n <Badge\n tone={isActive || isComplete ? \"brand\" : \"neutral\"}\n prominence={isActive ? \"bold\" : \"subtle\"}\n iconLeft={\n isComplete ? (\n <SvgTick width={12} height={12} aria-hidden=\"true\" />\n ) : (\n <span className={styles.pillIndex} aria-hidden=\"true\">\n {i + 1}\n </span>\n )\n }\n >\n {s.label}\n </Badge>\n {i < steps.length - 1 ? (\n <span className={styles.pillConnector} aria-hidden=\"true\" />\n ) : null}\n </li>\n );\n })}\n </ol>\n\n <section className={styles.body} aria-live=\"polite\">\n {active.title || active.description ? (\n <header className={styles.bodyHeader}>\n {active.title ? <h3 className={styles.bodyTitle}>{active.title}</h3> : null}\n {active.description ? (\n <p className={styles.bodyDescription}>{active.description}</p>\n ) : null}\n </header>\n ) : null}\n {active.content}\n </section>\n </Stack>\n </CardBody>\n <CardFooter>\n <div className={styles.footer}>\n <Button variant=\"tertiary\" onClick={onCancel}>\n Cancel\n </Button>\n <div className={styles.footerRight}>\n <Button\n variant=\"secondary\"\n iconLeft={<SvgArrowLeft width={14} height={14} aria-hidden=\"true\" />}\n disabled={isFirst}\n onClick={() => setCurrent(current - 1)}\n >\n Back\n </Button>\n {isLast ? (\n <Button variant=\"primary\" onClick={onFinish}>\n Finish setup\n </Button>\n ) : (\n <Button\n variant=\"primary\"\n iconRight={<SvgArrowRight width={14} height={14} aria-hidden=\"true\" />}\n onClick={() => setCurrent(current + 1)}\n >\n Next\n </Button>\n )}\n </div>\n </div>\n </CardFooter>\n </Card>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Showcase steps used by the stories: Sophea-flavoured workspace setup.\n// ---------------------------------------------------------------------------\n\nconst REGION_OPTIONS = [\n { value: \"eu-central-1\", label: \"EU Central (Frankfurt)\" },\n { value: \"eu-west-1\", label: \"EU West (Ireland)\" },\n { value: \"us-east-1\", label: \"US East (Virginia)\" },\n];\n\nconst SOURCE_OPTIONS = [\n { value: \"drive\", label: \"Google Drive\" },\n { value: \"confluence\", label: \"Confluence\" },\n { value: \"notion\", label: \"Notion\" },\n { value: \"slack\", label: \"Slack\" },\n { value: \"github\", label: \"GitHub\" },\n];\n\nexport const WORKSPACE_WIZARD_STEPS: WizardStep[] = [\n {\n id: \"details\",\n label: \"Workspace details\",\n title: \"Name your workspace\",\n description: \"These details show up on invitations and the workspace switcher.\",\n content: (\n <Stack gap={12}>\n <Input label=\"Display name\" defaultValue=\"Acme · prod\" required />\n <Input\n label=\"Slug\"\n defaultValue=\"acme-prod\"\n hint=\"Lowercase, hyphen-separated.\"\n required\n />\n <div className={styles.fieldRow}>\n <label htmlFor=\"wizard-region\" className={styles.fieldLabel}>\n Region\n </label>\n <Select\n id=\"wizard-region\"\n options={REGION_OPTIONS}\n defaultValue=\"eu-central-1\"\n aria-label=\"Region\"\n />\n </div>\n </Stack>\n ),\n },\n {\n id: \"invite\",\n label: \"Invite team\",\n title: \"Invite your team\",\n description: \"We'll send a Zitadel-backed invite. They keep their own credentials.\",\n content: (\n <Stack gap={12}>\n <Input\n label=\"Teammate emails\"\n placeholder=\"anna@kiefer-tek.com, dimitris@kiefer-tek.com\"\n hint=\"Comma-separated. We support up to 50 invitations per batch.\"\n />\n <Switch\n label=\"Invite as admins\"\n description=\"Admins can manage members, sources, and billing.\"\n />\n <Switch\n label=\"Send onboarding digest\"\n description=\"A weekly summary of new sources and runs, off by default.\"\n />\n </Stack>\n ),\n },\n {\n id: \"source\",\n label: \"Connect a source\",\n title: \"Connect your first source\",\n description: \"Add one source now so Sophea has something to retrieve from. You can add more later.\",\n content: (\n <Stack gap={12}>\n <div className={styles.fieldRow}>\n <label htmlFor=\"wizard-source\" className={styles.fieldLabel}>\n Source type\n </label>\n <Select\n id=\"wizard-source\"\n options={SOURCE_OPTIONS}\n defaultValue=\"drive\"\n aria-label=\"Source type\"\n />\n </div>\n <Input\n label=\"Connector name\"\n defaultValue=\"Acme Drive · legal\"\n hint=\"A friendly label so teammates can find it later.\"\n />\n <Switch\n label=\"Index Greek-language content\"\n description=\"Adds the LiteLLM Greek embeddings profile to this connector.\"\n defaultChecked\n />\n </Stack>\n ),\n },\n];\n","import { forwardRef, type ReactNode } from \"react\";\nimport {\n SvgArrowRight,\n SvgBulb,\n SvgOwl,\n SvgPlug,\n SvgSparkles,\n SvgUsers,\n} from \"../../icons\";\nimport styles from \"./EmptyWorkspace.module.css\";\n\nexport interface EmptyWorkspaceSuggestion {\n id: string;\n icon: ReactNode;\n title: string;\n description: string;\n meta: string;\n onActivate?: () => void;\n}\n\nexport interface EmptyWorkspaceProps {\n /** Workspace label shown in the hero. */\n workspaceLabel?: string;\n /** Override the eyebrow above the hero title. */\n eyebrow?: string;\n /** Override the hero title. */\n title?: ReactNode;\n /** Override the hero subtitle. */\n subtitle?: ReactNode;\n /** Replace the suggestion cards. */\n suggestions?: EmptyWorkspaceSuggestion[];\n /** Footer link to jump straight into chat. */\n onJumpToChat?: () => void;\n}\n\nconst DEFAULT_SUGGESTIONS: EmptyWorkspaceSuggestion[] = [\n {\n id: \"source\",\n icon: <SvgPlug width={18} height={18} aria-hidden=\"true\" />,\n title: \"Index your first source\",\n description:\n \"Connect Google Drive, Confluence, or Notion. Sophea indexes them in the eu-central-1 region.\",\n meta: \"Two minutes\",\n },\n {\n id: \"team\",\n icon: <SvgUsers width={18} height={18} aria-hidden=\"true\" />,\n title: \"Invite teammates\",\n description:\n \"Send Zitadel-backed invitations. Members keep their own credentials and SSO works on day one.\",\n meta: \"Up to 50 per batch\",\n },\n {\n id: \"agent\",\n icon: <SvgBulb width={18} height={18} aria-hidden=\"true\" />,\n title: \"Try Deep Research\",\n description:\n \"Run a multi-step research agent across your sources. Greek Legal is wired in for EL workspaces.\",\n meta: \"Greek + English\",\n },\n];\n\nexport const EmptyWorkspace = forwardRef<HTMLDivElement, EmptyWorkspaceProps>(\n function EmptyWorkspace(\n {\n workspaceLabel = \"Acme · prod\",\n eyebrow = \"Welcome\",\n title,\n subtitle = \"Three quick steps to make this workspace useful. Each one takes a couple of minutes and unlocks the next.\",\n suggestions = DEFAULT_SUGGESTIONS,\n onJumpToChat,\n },\n ref,\n ) {\n const resolvedTitle = title ?? `Welcome to ${workspaceLabel}`;\n return (\n <div ref={ref} className={styles.shell}>\n <span className={styles.brandMark} aria-hidden=\"true\">\n <SvgOwl width={32} height={32} />\n </span>\n <div className={styles.eyebrow}>{eyebrow}</div>\n <h1 className={styles.title}>{resolvedTitle}</h1>\n <p className={styles.subtitle}>{subtitle}</p>\n {/* role=\"group\" not role=\"list\": a button cannot take role=\"listitem\" (aria-allowed-role). */}\n <div className={styles.cards} role=\"group\" aria-label=\"Workspace starter actions\">\n {suggestions.map((s) => (\n <button\n key={s.id}\n type=\"button\"\n className={styles.card}\n onClick={s.onActivate}\n >\n <span className={styles.cardIcon}>{s.icon}</span>\n <h2 className={styles.cardTitle}>{s.title}</h2>\n <p className={styles.cardDesc}>{s.description}</p>\n <span className={styles.cardMeta}>{s.meta}</span>\n </button>\n ))}\n </div>\n <p className={styles.footnote}>\n <SvgSparkles width={14} height={14} aria-hidden=\"true\" />\n <span>\n Or{\" \"}\n <a\n href=\"#\"\n className={styles.footLink}\n onClick={(e) => {\n if (onJumpToChat) {\n e.preventDefault();\n onJumpToChat();\n }\n }}\n >\n jump straight to chat\n </a>{\" \"}\n </span>\n <SvgArrowRight width={14} height={14} aria-hidden=\"true\" />\n </p>\n </div>\n );\n },\n);\n","import { forwardRef, type ReactNode } from \"react\";\nimport { Button } from \"../../components/Button\";\nimport { Card, CardBody } from \"../../components/Card\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../../components/DropdownMenu\";\nimport { SvgArrowRight, SvgFolder, SvgUsers } from \"../../icons\";\nimport styles from \"./Forbidden403.module.css\";\n\nexport interface Forbidden403Workspace {\n id: string;\n label: string;\n hint?: string;\n}\n\nexport interface Forbidden403Props {\n /** Workspace the user attempted to open. */\n workspaceLabel?: string;\n /** Email shown in the \"signed in as\" block. */\n userEmail?: string;\n /** Custom title. */\n title?: ReactNode;\n /** Custom body copy. */\n description?: ReactNode;\n /** Workspaces the user CAN access, used in the switcher dropdown. */\n workspaces?: Forbidden403Workspace[];\n /** Fires when the primary CTA is pressed. */\n onRequestAccess?: () => void;\n /** Fires when a workspace is chosen from the dropdown. */\n onSwitchWorkspace?: (workspace: Forbidden403Workspace) => void;\n}\n\nconst DEFAULT_WORKSPACES: Forbidden403Workspace[] = [\n { id: \"ws-acme-staging\", label: \"Acme · staging\", hint: \"Admin\" },\n { id: \"ws-greek-legal\", label: \"Greek Legal · eu-central-1\", hint: \"Member\" },\n { id: \"ws-gamma\", label: \"Gamma Industries\", hint: \"Viewer\" },\n];\n\nexport const Forbidden403 = forwardRef<HTMLDivElement, Forbidden403Props>(function Forbidden403(\n {\n workspaceLabel = \"Acme · prod\",\n userEmail = \"stamos@kiefer-tek.com\",\n title = \"You don't have access to this workspace\",\n description = \"Ask the workspace owner to grant access, or switch to a workspace where you already have a role.\",\n workspaces = DEFAULT_WORKSPACES,\n onRequestAccess,\n onSwitchWorkspace,\n },\n ref,\n) {\n return (\n <div ref={ref} className={styles.shell}>\n <Card surface=\"elevated\" padding=\"lg\" className={styles.card}>\n <div className={styles.head}>\n <span className={styles.mark} aria-hidden=\"true\">\n <SvgUsers width={26} height={26} />\n </span>\n <div className={styles.markText}>\n <span className={styles.statusCode}>Status 403 · {workspaceLabel}</span>\n <span className={styles.statusTitle}>{title}</span>\n </div>\n </div>\n <CardBody>\n <p className={styles.body}>{description}</p>\n <div className={styles.who}>\n <span className={styles.whoLabel}>Signed in as</span>\n <span className={styles.whoValue}>{userEmail}</span>\n </div>\n <div className={styles.actions}>\n <Button\n variant=\"primary\"\n iconRight={<SvgArrowRight width={14} height={14} aria-hidden=\"true\" />}\n onClick={onRequestAccess}\n >\n Request access\n </Button>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"secondary\"\n iconLeft={<SvgFolder width={14} height={14} aria-hidden=\"true\" />}\n aria-label=\"Switch workspace\"\n >\n Switch workspace\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n <DropdownMenuLabel>Your workspaces</DropdownMenuLabel>\n {workspaces.map((w) => (\n <DropdownMenuItem\n key={w.id}\n shortcut={w.hint}\n onSelect={() => onSwitchWorkspace?.(w)}\n >\n {w.label}\n </DropdownMenuItem>\n ))}\n <DropdownMenuSeparator />\n <DropdownMenuItem>Create a workspace…</DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </CardBody>\n </Card>\n </div>\n );\n});\n","import { forwardRef, type ReactNode } from \"react\";\nimport { Button } from \"../../components/Button\";\nimport { Card, CardBody } from \"../../components/Card\";\nimport { SearchInput } from \"../../components/SearchInput\";\nimport { SvgArrowRight, SvgGlobe } from \"../../icons\";\nimport styles from \"./NotFound404.module.css\";\n\nexport interface NotFound404Props {\n /** Workspace label shown on the primary CTA. */\n workspaceLabel?: string;\n /** Custom title; defaults to \"We couldn't find that page\". */\n title?: ReactNode;\n /** Custom body copy. */\n description?: ReactNode;\n /** Fires when the search field is submitted. */\n onSearch?: (query: string) => void;\n /** Fires when the primary CTA is pressed. */\n onBack?: () => void;\n /** Fires when the secondary CTA is pressed. */\n onStatus?: () => void;\n}\n\nexport const NotFound404 = forwardRef<HTMLDivElement, NotFound404Props>(function NotFound404(\n {\n workspaceLabel = \"Acme · prod\",\n title = \"We couldn't find that page\",\n description = \"The link may be stale or the page was moved. Search the workspace, or head back to the chat surface.\",\n onSearch,\n onBack,\n onStatus,\n },\n ref,\n) {\n return (\n <div ref={ref} className={styles.shell}>\n <Card surface=\"elevated\" padding=\"lg\" className={styles.card}>\n <div className={styles.head}>\n <span className={styles.mark} aria-hidden=\"true\">\n 404\n </span>\n <div className={styles.markText}>\n <span className={styles.statusCode}>Status 404</span>\n <span className={styles.statusTitle}>{title}</span>\n </div>\n </div>\n <CardBody>\n <p className={styles.body}>{description}</p>\n <div className={styles.search}>\n <SearchInput\n placeholder=\"Search chats, docs, agents…\"\n onChange={() => {}}\n onDebouncedChange={onSearch}\n debounceMs={250}\n aria-label=\"Search workspace\"\n />\n </div>\n <div className={styles.actions}>\n <Button\n variant=\"primary\"\n iconRight={<SvgArrowRight width={14} height={14} aria-hidden=\"true\" />}\n onClick={onBack}\n >\n Back to {workspaceLabel}\n </Button>\n <Button\n variant=\"tertiary\"\n iconLeft={<SvgGlobe width={14} height={14} aria-hidden=\"true\" />}\n onClick={onStatus}\n >\n Visit status page\n </Button>\n </div>\n </CardBody>\n </Card>\n </div>\n );\n});\n","import { forwardRef, useState, type ReactNode } from \"react\";\nimport { Avatar } from \"../../components/Avatar\";\nimport { Badge } from \"../../components/Badge\";\nimport { Button } from \"../../components/Button\";\nimport {\n SvgAlertCircle,\n SvgBulb,\n SvgChatBubble,\n SvgFolder,\n SvgPlug,\n SvgRefresh,\n SvgUsers,\n} from \"../../icons\";\nimport styles from \"./NotificationsInbox.module.css\";\n\nexport type NotificationKind = \"auth\" | \"billing\" | \"mention\" | \"indexing\" | \"agent\";\nexport type NotificationTone = \"brand\" | \"success\" | \"warning\" | \"danger\" | \"purple\";\n\nexport interface Notification {\n id: string;\n kind: NotificationKind;\n tone: NotificationTone;\n title: string;\n snippet: string;\n body: ReactNode;\n source: string;\n receivedAt: string;\n read?: boolean;\n actor?: { name: string; initials: string; role: string };\n details?: { key: string; value: ReactNode }[];\n}\n\nexport interface NotificationFilter {\n id: string;\n label: string;\n icon: ReactNode;\n count: number;\n divider?: boolean;\n}\n\nexport interface NotificationsInboxProps {\n /** Workspace label shown in the filter rail header. */\n workspaceLabel?: string;\n /** Initial filter id. */\n defaultFilter?: string;\n /** Provide notifications; falls back to a Sophea sample set. */\n notifications?: Notification[];\n /** Override the filter list. */\n filters?: NotificationFilter[];\n}\n\nconst ICONS: Record<NotificationKind, ReactNode> = {\n auth: <SvgPlug width={16} height={16} aria-hidden=\"true\" />,\n billing: <SvgFolder width={16} height={16} aria-hidden=\"true\" />,\n mention: <SvgChatBubble width={16} height={16} aria-hidden=\"true\" />,\n indexing: <SvgRefresh width={16} height={16} aria-hidden=\"true\" />,\n agent: <SvgBulb width={16} height={16} aria-hidden=\"true\" />,\n};\n\nconst DEFAULT_NOTIFICATIONS: Notification[] = [\n {\n id: \"n1\",\n kind: \"auth\",\n tone: \"warning\",\n title: \"Drive auth expired\",\n snippet:\n \"Google Drive connector acme-legal lost OAuth. Reauthorize to resume indexing. 142 files queued.\",\n body: (\n <>\n <strong>Google Drive · Acme legal</strong> stopped indexing at 14:12 because the OAuth token\n expired. 142 files are queued in the Celery backlog and will resume the moment you\n reauthorize. Nothing has been deleted.\n </>\n ),\n source: \"Connector / Google Drive\",\n receivedAt: \"2h\",\n actor: { name: \"Sophea\", initials: \"SO\", role: \"System\" },\n details: [\n { key: \"Connector\", value: \"drive · acme-legal\" },\n { key: \"Status\", value: <Badge tone=\"warning\" prominence=\"subtle\">Auth expired</Badge> },\n { key: \"Queued files\", value: \"142\" },\n { key: \"Last successful run\", value: \"2026-05-25 · 09:04 EEST\" },\n ],\n },\n {\n id: \"n2\",\n kind: \"billing\",\n tone: \"brand\",\n title: \"Acme MSA renewal · 3 days\",\n snippet:\n \"The Acme master services agreement auto-renews on 14 November. Review the price uplift cap before sign-off.\",\n body: (\n <>\n The <strong>Acme MSA</strong> auto-renews in 3 days. The CPI uplift is bound at 7% but the\n current draft removes the cap for digital employees. Legal flagged it as a high-impact diff.\n </>\n ),\n source: \"Billing / Acme · prod\",\n receivedAt: \"5h\",\n actor: { name: \"Anna Lekka\", initials: \"AL\", role: \"Legal owner\" },\n details: [\n { key: \"Document\", value: \"Acme MSA · final draft\" },\n { key: \"Renewal date\", value: \"14 November 2026\" },\n { key: \"Cap\", value: \"7% CPI (digital employees unbounded)\" },\n ],\n },\n {\n id: \"n3\",\n kind: \"mention\",\n tone: \"purple\",\n title: \"Anna mentioned you in #legal-acme\",\n snippet:\n \"@stamos can you confirm the EU residency profile is wired to LiteLLM before we send Friday's diff?\",\n body: (\n <>\n Anna pinged you in <strong>#legal-acme</strong>: <em>\"Can you confirm the EU residency\n profile is wired to LiteLLM before we send Friday's diff?\"</em>\n </>\n ),\n source: \"Slack / #legal-acme\",\n receivedAt: \"Yesterday\",\n actor: { name: \"Anna Lekka\", initials: \"AL\", role: \"Legal owner\" },\n details: [\n { key: \"Channel\", value: \"#legal-acme · 12 members\" },\n { key: \"Linked doc\", value: \"Acme MSA · final draft\" },\n ],\n },\n {\n id: \"n4\",\n kind: \"indexing\",\n tone: \"success\",\n title: \"Confluence sync completed\",\n snippet:\n \"3,420 pages indexed across 7 spaces. No conflicts. Hybrid recall improved 2 points on the eval set.\",\n body: (\n <>\n Confluence connector finished its weekly resync. <strong>3,420 pages</strong> across 7\n spaces are live for retrieval. Eval recall on the internal benchmark went from 0.74 to 0.76.\n </>\n ),\n source: \"Connector / Confluence\",\n receivedAt: \"Yesterday\",\n read: true,\n actor: { name: \"Sophea\", initials: \"SO\", role: \"System\" },\n details: [\n { key: \"Pages\", value: \"3,420\" },\n { key: \"Spaces\", value: \"7\" },\n { key: \"Duration\", value: \"12 min 04 s\" },\n ],\n },\n {\n id: \"n5\",\n kind: \"agent\",\n tone: \"brand\",\n title: \"Greek Legal run finished\",\n snippet:\n \"Άρθρο 281 ΑΚ research run completed in 4 min 12 s. 18 citations, 3 case-law references.\",\n body: (\n <>\n The <strong>Greek Legal</strong> agent finished a 4 min run on Άρθρο 281 ΑΚ with 18\n citations and 3 case-law references. Output is in the conversation panel.\n </>\n ),\n source: \"Agent / Greek Legal\",\n receivedAt: \"2 days\",\n read: true,\n actor: { name: \"Greek Legal\", initials: \"GL\", role: \"Agent\" },\n details: [\n { key: \"Run id\", value: \"run_5f3e8\" },\n { key: \"Duration\", value: \"4m 12s\" },\n { key: \"Citations\", value: \"18 · 3 case-law\" },\n ],\n },\n];\n\nconst DEFAULT_FILTERS: NotificationFilter[] = [\n { id: \"all\", label: \"All\", icon: <SvgChatBubble width={14} height={14} aria-hidden=\"true\" />, count: 5 },\n { id: \"unread\", label: \"Unread\", icon: <SvgAlertCircle width={14} height={14} aria-hidden=\"true\" />, count: 3, divider: true },\n { id: \"auth\", label: \"Connectors\", icon: <SvgPlug width={14} height={14} aria-hidden=\"true\" />, count: 1 },\n { id: \"billing\", label: \"Billing\", icon: <SvgFolder width={14} height={14} aria-hidden=\"true\" />, count: 1 },\n { id: \"mention\", label: \"Mentions\", icon: <SvgUsers width={14} height={14} aria-hidden=\"true\" />, count: 1 },\n { id: \"indexing\", label: \"Indexing\", icon: <SvgRefresh width={14} height={14} aria-hidden=\"true\" />, count: 1 },\n { id: \"agent\", label: \"Agents\", icon: <SvgBulb width={14} height={14} aria-hidden=\"true\" />, count: 1 },\n];\n\nexport const NotificationsInbox = forwardRef<HTMLDivElement, NotificationsInboxProps>(\n function NotificationsInbox(\n {\n workspaceLabel = \"Acme · prod\",\n defaultFilter = \"all\",\n notifications = DEFAULT_NOTIFICATIONS,\n filters = DEFAULT_FILTERS,\n },\n ref,\n ) {\n const [filter, setFilter] = useState(defaultFilter);\n const filtered = notifications.filter((n) => {\n if (filter === \"all\") return true;\n if (filter === \"unread\") return !n.read;\n return n.kind === filter;\n });\n const firstId = filtered[0]?.id ?? notifications[0]?.id ?? \"\";\n const [selectedId, setSelectedId] = useState<string>(firstId);\n const selected =\n filtered.find((n) => n.id === selectedId) ??\n filtered[0] ??\n notifications[0];\n\n return (\n <div ref={ref} className={styles.shell}>\n <aside className={styles.column} aria-label=\"Notification filters\">\n <div className={styles.columnHead}>\n <span className={styles.columnTitle}>Inbox</span>\n <span className={styles.columnMeta}>{workspaceLabel}</span>\n </div>\n <div className={styles.filterList} role=\"navigation\">\n {filters.map((f) => (\n <div key={f.id}>\n <button\n type=\"button\"\n className={styles.filterItem}\n aria-current={filter === f.id ? \"page\" : undefined}\n onClick={() => setFilter(f.id)}\n >\n <span className={styles.filterIcon}>{f.icon}</span>\n <span className={styles.filterLabel}>{f.label}</span>\n <span className={styles.filterCount}>{f.count}</span>\n </button>\n {f.divider ? <div className={styles.filterDivider} aria-hidden=\"true\" /> : null}\n </div>\n ))}\n </div>\n </aside>\n\n <section className={styles.column} aria-label=\"Notifications\">\n <div className={styles.columnHead}>\n <span className={styles.columnTitle}>{labelFor(filter, filters)}</span>\n <span className={styles.columnMeta}>{filtered.length} items</span>\n </div>\n <div className={styles.notifBody}>\n {filtered.map((n) => (\n <button\n key={n.id}\n type=\"button\"\n className={\n selected?.id === n.id ? `${styles.notif} ${styles.active}` : styles.notif\n }\n onClick={() => setSelectedId(n.id)}\n >\n <span\n className={`${styles.notifLead} ${styles[n.tone]}`}\n aria-hidden=\"true\"\n >\n {ICONS[n.kind]}\n </span>\n <span className={styles.notifText}>\n <span className={styles.notifTitle}>{n.title}</span>\n <span className={styles.notifSnippet}>{n.snippet}</span>\n </span>\n <span className={styles.notifMeta}>\n <span className={styles.notifTime}>{n.receivedAt}</span>\n {!n.read ? (\n <span className={styles.unreadDot} aria-label=\"Unread\" />\n ) : null}\n </span>\n </button>\n ))}\n </div>\n </section>\n\n <section className={styles.column} aria-label=\"Notification preview\">\n {selected ? (\n <>\n <div className={styles.previewHead}>\n <div className={styles.previewHeadText}>\n <span className={styles.previewTitle}>{selected.title}</span>\n <span className={styles.previewSubtitle}>\n {selected.source} · {selected.receivedAt} ago\n </span>\n </div>\n <div className={styles.previewActions}>\n <Button variant=\"tertiary\" size=\"sm\">\n Mark as read\n </Button>\n <Button variant=\"secondary\" size=\"sm\">\n Open source\n </Button>\n </div>\n </div>\n <div className={styles.previewBody}>\n {selected.actor ? (\n <div className={styles.previewAvatar}>\n <Avatar size=\"md\" tone=\"brand\" aria-label={selected.actor.name}>\n {selected.actor.initials}\n </Avatar>\n <div className={styles.previewAvatarText}>\n <span className={styles.previewAvatarName}>{selected.actor.name}</span>\n <span className={styles.previewAvatarMeta}>{selected.actor.role}</span>\n </div>\n </div>\n ) : null}\n <p className={styles.previewMessage}>{selected.body}</p>\n {selected.details && selected.details.length > 0 ? (\n <dl className={styles.detailGrid}>\n {selected.details.map((d, i) => (\n <div key={i} style={{ display: \"contents\" }}>\n <dt className={styles.detailKey}>{d.key}</dt>\n <dd className={styles.detailValue}>{d.value}</dd>\n </div>\n ))}\n </dl>\n ) : null}\n </div>\n <div className={styles.previewFooter}>\n <Button variant=\"tertiary\" size=\"sm\">\n Snooze\n </Button>\n <Button variant=\"primary\" size=\"sm\">\n Take action\n </Button>\n </div>\n </>\n ) : null}\n </section>\n </div>\n );\n },\n);\n\nfunction labelFor(id: string, filters: NotificationFilter[]): string {\n return filters.find((f) => f.id === id)?.label ?? \"Notifications\";\n}\n","import { forwardRef, useState, type ReactNode } from \"react\";\nimport { Button } from \"../../components/Button\";\nimport { Input } from \"../../components/Input\";\nimport { Select } from \"../../components/Select\";\nimport { Stack } from \"../../components/Stack\";\nimport { Switch } from \"../../components/Switch\";\nimport { TagInput } from \"../../components/TagInput\";\nimport {\n SvgArrowLeft,\n SvgArrowRight,\n SvgBulb,\n SvgFolder,\n SvgOwl,\n SvgPlug,\n SvgTick,\n SvgUsers,\n} from \"../../icons\";\nimport styles from \"./OnboardingWizard.module.css\";\n\nexport type OnboardingStepId = \"workspace\" | \"team\" | \"source\" | \"agent\";\n\nexport interface OnboardingWizardProps {\n /** Workspace label rendered in the rail. */\n workspaceLabel?: string;\n /** Initial step (uncontrolled). */\n defaultStep?: OnboardingStepId;\n /** Controlled step. */\n step?: OnboardingStepId;\n onStepChange?: (next: OnboardingStepId) => void;\n onFinish?: () => void;\n onCancel?: () => void;\n}\n\ninterface StepMeta {\n id: OnboardingStepId;\n label: string;\n hint: string;\n}\n\nconst STEPS: StepMeta[] = [\n { id: \"workspace\", label: \"Workspace details\", hint: \"Name, slug, region\" },\n { id: \"team\", label: \"Invite team\", hint: \"Add up to 50 teammates\" },\n { id: \"source\", label: \"Connect first source\", hint: \"Drive, Confluence, Notion\" },\n { id: \"agent\", label: \"Pick a starter agent\", hint: \"Deep Research or Greek Legal\" },\n];\n\nconst REGION_OPTIONS = [\n { value: \"eu-central-1\", label: \"EU Central (Frankfurt)\" },\n { value: \"eu-west-1\", label: \"EU West (Ireland)\" },\n { value: \"us-east-1\", label: \"US East (Virginia)\" },\n];\n\nconst SOURCE_OPTIONS = [\n { value: \"drive\", label: \"Google Drive\" },\n { value: \"confluence\", label: \"Confluence\" },\n { value: \"notion\", label: \"Notion\" },\n { value: \"slack\", label: \"Slack\" },\n { value: \"github\", label: \"GitHub\" },\n];\n\ninterface StarterAgent {\n id: string;\n title: string;\n description: string;\n icon: ReactNode;\n}\n\nconst STARTER_AGENTS: StarterAgent[] = [\n {\n id: \"deep-research\",\n title: \"Deep Research\",\n description: \"Multi-step research across your indexed sources. Best for analyst workflows.\",\n icon: <SvgBulb width={18} height={18} aria-hidden=\"true\" />,\n },\n {\n id: \"greek-legal\",\n title: \"Greek Legal\",\n description: \"Greek case law and statutes. Pretuned for ΑΚ and Ν. references.\",\n icon: <SvgFolder width={18} height={18} aria-hidden=\"true\" />,\n },\n {\n id: \"sales-enablement\",\n title: \"Sales enablement\",\n description: \"Pitch decks, pricing, objection handling. Reads from your CRM corpus.\",\n icon: <SvgUsers width={18} height={18} aria-hidden=\"true\" />,\n },\n {\n id: \"support-triage\",\n title: \"Support triage\",\n description: \"Classifies tickets, surfaces runbook excerpts. Use as a Slack bot or co-pilot.\",\n icon: <SvgPlug width={18} height={18} aria-hidden=\"true\" />,\n },\n];\n\nexport const OnboardingWizard = forwardRef<HTMLDivElement, OnboardingWizardProps>(\n function OnboardingWizard(\n {\n workspaceLabel = \"Acme · prod\",\n defaultStep = \"workspace\",\n step,\n onStepChange,\n onFinish,\n onCancel,\n },\n ref,\n ) {\n const [internalStep, setInternalStep] = useState<OnboardingStepId>(defaultStep);\n const [agent, setAgent] = useState<string>(\"deep-research\");\n const current = step ?? internalStep;\n const currentIndex = STEPS.findIndex((s) => s.id === current);\n const isFirst = currentIndex === 0;\n const isLast = currentIndex === STEPS.length - 1;\n\n const setCurrent = (next: OnboardingStepId) => {\n if (step === undefined) setInternalStep(next);\n onStepChange?.(next);\n };\n\n const goNext = () => {\n const next = STEPS[currentIndex + 1];\n if (next) setCurrent(next.id);\n };\n const goBack = () => {\n const prev = STEPS[currentIndex - 1];\n if (prev) setCurrent(prev.id);\n };\n\n return (\n <div ref={ref} className={styles.shell}>\n <aside className={styles.rail} aria-label=\"Onboarding progress\">\n <div className={styles.brand}>\n <span className={styles.brandMark} aria-hidden=\"true\">\n <SvgOwl width={22} height={22} />\n </span>\n <div className={styles.brandText}>\n <span className={styles.brandEyebrow}>Setting up</span>\n <span className={styles.brandLabel}>{workspaceLabel}</span>\n </div>\n </div>\n <ol className={styles.steps}>\n {STEPS.map((s, i) => {\n const done = i < currentIndex;\n const active = i === currentIndex;\n const indexClass = active\n ? `${styles.stepIndex} ${styles.active}`\n : done\n ? `${styles.stepIndex} ${styles.done}`\n : styles.stepIndex;\n return (\n <li key={s.id}>\n <button\n type=\"button\"\n className={styles.stepItem}\n aria-current={active ? \"step\" : undefined}\n onClick={() => setCurrent(s.id)}\n >\n <span className={indexClass} aria-hidden=\"true\">\n {done ? <SvgTick width={12} height={12} /> : i + 1}\n </span>\n <span className={styles.stepText}>\n <span className={styles.stepLabel}>{s.label}</span>\n <span className={styles.stepHint}>{s.hint}</span>\n </span>\n </button>\n </li>\n );\n })}\n </ol>\n <div className={styles.railFoot}>\n Two minutes per step. You can re-run setup later from Settings · Workspace.\n </div>\n </aside>\n <main className={styles.main} aria-label=\"Onboarding step body\">\n <div className={styles.eyebrow}>\n Step {currentIndex + 1} of {STEPS.length}\n </div>\n {current === \"workspace\" ? <WorkspaceStep /> : null}\n {current === \"team\" ? <TeamStep /> : null}\n {current === \"source\" ? <SourceStep /> : null}\n {current === \"agent\" ? (\n <AgentStep selected={agent} onSelect={setAgent} />\n ) : null}\n <div className={styles.footer}>\n <Button variant=\"tertiary\" onClick={onCancel}>\n Cancel setup\n </Button>\n <div className={styles.footerRight}>\n <Button\n variant=\"secondary\"\n iconLeft={<SvgArrowLeft width={14} height={14} aria-hidden=\"true\" />}\n disabled={isFirst}\n onClick={goBack}\n >\n Back\n </Button>\n {isLast ? (\n <Button variant=\"primary\" onClick={onFinish}>\n Finish setup\n </Button>\n ) : (\n <Button\n variant=\"primary\"\n iconRight={<SvgArrowRight width={14} height={14} aria-hidden=\"true\" />}\n onClick={goNext}\n >\n Continue\n </Button>\n )}\n </div>\n </div>\n </main>\n </div>\n );\n },\n);\n\nfunction WorkspaceStep() {\n return (\n <>\n <h2 className={styles.title}>Name your workspace</h2>\n <p className={styles.subtitle}>\n Visible on invites and the workspace switcher. You can rename later.\n </p>\n <div className={styles.body}>\n <Stack gap={12}>\n <Input label=\"Display name\" defaultValue=\"Acme · prod\" required />\n <Input\n label=\"Slug\"\n defaultValue=\"acme-prod\"\n hint=\"Lowercase, hyphen-separated. Used in CLI and URLs.\"\n required\n />\n <div className={styles.fieldRow}>\n <label htmlFor=\"onboarding-region\" className={styles.fieldLabel}>\n Region\n </label>\n <Select\n id=\"onboarding-region\"\n options={REGION_OPTIONS}\n defaultValue=\"eu-central-1\"\n aria-label=\"Region\"\n />\n </div>\n </Stack>\n </div>\n </>\n );\n}\n\nfunction TeamStep() {\n return (\n <>\n <h2 className={styles.title}>Invite your team</h2>\n <p className={styles.subtitle}>\n Zitadel-backed invitations. Members keep their own credentials and SSO if your org enabled it.\n </p>\n <div className={styles.body}>\n <Stack gap={12}>\n <TagInput\n label=\"Teammate emails\"\n placeholder=\"anna@kiefer-tek.com\"\n defaultValue={[\"dimitris@kiefer-tek.com\", \"ioanna@kiefer-tek.com\"]}\n hint=\"Press Enter or comma to add. Up to 50 per batch.\"\n />\n <Switch\n label=\"Invite as admins\"\n description=\"Admins can manage members, sources, and billing.\"\n />\n <Switch\n label=\"Send onboarding digest\"\n description=\"Weekly summary of new sources and runs. Off by default.\"\n />\n </Stack>\n </div>\n </>\n );\n}\n\nfunction SourceStep() {\n return (\n <>\n <h2 className={styles.title}>Connect your first source</h2>\n <p className={styles.subtitle}>\n Add one source now so Sophea has something to retrieve from. Add more from Settings later.\n </p>\n <div className={styles.body}>\n <Stack gap={12}>\n <div className={styles.fieldRow}>\n <label htmlFor=\"onboarding-source\" className={styles.fieldLabel}>\n Source type\n </label>\n <Select\n id=\"onboarding-source\"\n options={SOURCE_OPTIONS}\n defaultValue=\"drive\"\n aria-label=\"Source type\"\n />\n </div>\n <Input\n label=\"Connector name\"\n defaultValue=\"Acme Drive · legal\"\n hint=\"A friendly label so teammates can find it later.\"\n />\n <Switch\n label=\"Index Greek-language content\"\n description=\"Adds the LiteLLM Greek embeddings profile to this connector.\"\n defaultChecked\n />\n </Stack>\n </div>\n </>\n );\n}\n\nfunction AgentStep({\n selected,\n onSelect,\n}: {\n selected: string;\n onSelect: (id: string) => void;\n}) {\n return (\n <>\n <h2 className={styles.title}>Pick a starter agent</h2>\n <p className={styles.subtitle}>\n We will spin one up so your workspace has a default. You can clone or replace it any time.\n </p>\n <div className={styles.body}>\n <div className={styles.starterGrid} role=\"radiogroup\" aria-label=\"Starter agent\">\n {STARTER_AGENTS.map((a) => {\n const isSelected = selected === a.id;\n return (\n <button\n key={a.id}\n type=\"button\"\n role=\"radio\"\n aria-checked={isSelected}\n className={\n isSelected ? `${styles.starterCard} ${styles.selected}` : styles.starterCard\n }\n onClick={() => onSelect(a.id)}\n >\n <span className={styles.starterTitle}>\n {a.icon} {a.title}\n </span>\n <span className={styles.starterDesc}>{a.description}</span>\n </button>\n );\n })}\n </div>\n </div>\n </>\n );\n}\n"],"names":["Badge","dot","styles","content","arrow","v","AnimatedBorder","iconOnly","fullWidth","Button","disabled","responsiveHideText","ring","Input","label","hint","error","trailing","required","CaretDown","Select","value","placeholder","name","opt","Stack","inline","as","Tag","Switch","description","root","RS","RenderAgentComponent","AgentForm","f","e","SvgArrowRight","AgentChart","d","i","h","x","y","AgentConfirm","SvgAlertTriangle","SvgCancel","SvgTick","caption","RadioGroup","legend","Radio","DatePicker","formatDate","DateRangePicker","CloseIcon","Modal","trigger","title","footer","duration","RT","Toast","action","Banner","icon","actions","Skeleton","clamp","n","Progress","indeterminate","SIZE_PX","Spinner","px","dim","Textarea","deriveTone","used","limit","r","TokenCounter","unit","barOnly","ChevronIcon","SvgChevronDownSmall","active","FeedbackThumbs","current","RegenerateButton","busy","ContextChip","meta","interactive","ThoughtBubble","STATUS_LABEL","ToolCallCard","status","summary","output","Composer","sendLabel","sendIcon","attachments","text","ComposerChip","caret","SvgX","chip","KeyboardKey","KeyboardShortcut","separator","k","ToggleGroup","ToggleGroupItem","SegmentedControl","o","DropdownMenuContent","DropdownMenuItem","shortcut","DropdownMenuCheckboxItem","DropdownMenuRadioItem","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuSubTrigger","DropdownMenuSubContent","ContextMenuContent","ContextMenuItem","ContextMenuLabel","ContextMenuSeparator","HoverCardContent","Accordion","A","AccordionItem","AccordionTrigger","AccordionContent","Collapsible","C","CollapsibleTrigger","CollapsibleContent","ScrollArea","fill","viewport","a","b","s","SvgChevronUp","ScrollableListSection","header","Slider","S","AlertDialogContent","AlertDialogFooter","toggle","Drawer","folded","tab","SidebarTab","count","rightChildren","selected","Breadcrumbs","item","Fragment","indicator","list","TabsTrigger","Table","Th","numeric","Td","Thead","Tbody","Tr","Avatar","AvatarStack","AvatarChip","CodeBlock","filename","InlineCode","Attachment","Message","avatar","MessageList","MessageSource","ModelBadge","ConfidencePip","ToolStep","MessageAction","CitationPill","loc","snippet","EmptyState","Card","CardHeader","CardBody","CardFooter","CardTitle","CardDescription","SkipLink","AspectRatio","Container","Grid","GridItem","start","AvatarGroup","DescriptionList","dividers","DescriptionItem","term","Stat","delta","bordered","Timeline","TimelineItem","List","density","ListItem","leading","c","Tree","NumberInput","group","p","SvgPlus","FileInput","SvgPaperclip","t","SearchInput","clear","SvgLoader","SvgSearch","ch","PinInput","TagInput","suggestions","input","m","g","u","ColorPicker","presets","Popover","Text","nowrap","InteractiveStateless","InteractiveStateful","InteractiveContainer","InteractiveFoldable","Disabled","wrapper","HoverableRoot","HoverableItem","ExpandableButton","SvgExternalLink","ContentXl","SvgEdit","ContentLg","SvgAlertCircle","SvgXOctagon","ContentMd","tag","ContentSm","Content","ContentAction","Label","InputErrorText","warning","InputVertical","InputHorizontal","InputDivider","InputPadder","SelectCard","SvgCheckCircle","MessageCard","ColoredIcon","right","EmptyMessageCard","SvgBoxes","IllustrationContent","AppShellRoot","AppShellRail","AppShellRailItem","AppShellSidebar","AppShellSidebarToggle","AppShellMain","AppShellHeader","AppShellMainFooter","SearchIcon","EmptyHierarchy","illu","ErrorRecovery","STATUS_TONE","SvgFile","FilePreview","source","preview","SvgCopy","SvgRefresh","row","FilteringPattern","FormField","optional","FormGroup","FormFooter","REGION_OPTIONS","ProgressBar","masterTitle","masterDescription","masterToolbar","tier","PricingTable","footnote","SvgUsers","SvgFolder","SvgBulb","SvgChatBubble","SvgPlug","section","SvgOwl","SignInForm","SignUpForm","steps","SvgArrowLeft","SOURCE_OPTIONS","EmptyWorkspace","eyebrow","subtitle","SvgSparkles","Forbidden403","w","NotFound404","SvgGlobe","NotificationsInbox","OnboardingWizard","done"],"mappings":"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"}
|