@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/DataTable/hooks/useDataTable.ts","../../src/components/DataTable/hooks/useColumnWidths.ts","../../src/components/DataTable/hooks/useDraggableRows.ts","../../src/components/DataTable/TableSizeContext.tsx","../../src/components/DataTable/TableElement.tsx","../../src/components/DataTable/TableHeader.tsx","../../src/components/DataTable/TableBody.tsx","../../src/components/DataTable/TableRow.tsx","../../src/components/DataTable/DataTableText.tsx","../../src/components/DataTable/TableHead.tsx","../../src/components/DataTable/TableCell.tsx","../../src/components/DataTable/TableQualifier.tsx","../../src/components/DataTable/QualifierContainer.tsx","../../src/components/DataTable/ActionsContainer.tsx","../../src/components/DataTable/DragOverlayRow.tsx","../../src/components/DataTable/Footer.tsx","../../src/components/DataTable/ColumnVisibilityPopover.tsx","../../src/components/DataTable/ColumnSortabilityPopover.tsx","../../src/components/DataTable/components.tsx","../../src/components/DataTable/columns.ts"],"sourcesContent":["\"use client\";\n\"use no memo\";\n\nimport { useState, useEffect, useMemo, useRef } from \"react\";\nimport {\n useReactTable,\n getCoreRowModel,\n getSortedRowModel,\n getPaginationRowModel,\n getFilteredRowModel,\n type Table,\n type ColumnDef,\n type RowData,\n type SortingState,\n type RowSelectionState,\n type ColumnSizingState,\n type PaginationState,\n type ColumnResizeMode,\n type TableOptions,\n type VisibilityState,\n} from \"@tanstack/react-table\";\n\n// ---------------------------------------------------------------------------\n// Exported types\n// ---------------------------------------------------------------------------\n\nexport type SortDirectionState = \"none\" | \"ascending\" | \"descending\";\nexport type SelectionState = \"none\" | \"partial\" | \"all\";\n\n// ---------------------------------------------------------------------------\n// Exported utility\n// ---------------------------------------------------------------------------\n\n/**\n * Convert a TanStack sort direction to a DataTable sort direction string.\n *\n * This is a **named export** (not on the return object) because it is used\n * statically inside JSX header loops, not tied to hook state.\n */\nexport function toSortDirection(\n dir: false | \"asc\" | \"desc\"\n): SortDirectionState {\n if (dir === \"asc\") return \"ascending\";\n if (dir === \"desc\") return \"descending\";\n return \"none\";\n}\n\n// ---------------------------------------------------------------------------\n// Global filter value (combines view-mode + text search)\n// ---------------------------------------------------------------------------\n\ninterface GlobalFilterValue {\n selectedIds: Set<string> | null;\n searchTerm: string;\n}\n\n// ---------------------------------------------------------------------------\n// Hook options & return types\n// ---------------------------------------------------------------------------\n\n/** Keys managed internally — callers cannot override these via `tableOptions`. */\ntype ManagedKeys =\n | \"data\"\n | \"columns\"\n | \"state\"\n | \"onSortingChange\"\n | \"onRowSelectionChange\"\n | \"onColumnSizingChange\"\n | \"onColumnVisibilityChange\"\n | \"onPaginationChange\"\n | \"onGlobalFilterChange\"\n | \"getCoreRowModel\"\n | \"getSortedRowModel\"\n | \"getPaginationRowModel\"\n | \"getFilteredRowModel\"\n | \"globalFilterFn\"\n | \"columnResizeMode\"\n | \"enableRowSelection\"\n | \"enableColumnResizing\"\n | \"getRowId\";\n\n/**\n * Options accepted by {@link useDataTable}.\n *\n * Only `data` and `columns` are required — everything else has sensible defaults.\n */\nexport interface UseDataTableOptions<TData extends RowData> {\n /** The row data array. */\n data: TData[];\n /** TanStack column definitions. */\n columns: ColumnDef<TData, unknown>[];\n /** Rows per page. Set `Infinity` to disable pagination. @default 10 */\n pageSize?: number;\n /** Whether rows can be selected. @default true */\n enableRowSelection?: boolean;\n /** Whether columns can be resized. @default true */\n enableColumnResizing?: boolean;\n /** Stable row identity function. TanStack tracks selection by ID instead of array index. */\n getRowId: TableOptions<TData>[\"getRowId\"];\n /** Resize strategy. @default \"onChange\" */\n columnResizeMode?: ColumnResizeMode;\n /** Initial sorting state. @default [] */\n initialSorting?: SortingState;\n /** Initial column visibility state. @default {} */\n initialColumnVisibility?: VisibilityState;\n /** Initial row selection state. Keys are row IDs (from `getRowId`), values are `true`. @default {} */\n initialRowSelection?: RowSelectionState;\n /** When true AND `initialRowSelection` is non-empty, start in view-selected mode (filtered to selected rows). @default false */\n initialViewSelected?: boolean;\n /** Called whenever the set of selected row IDs changes. */\n onSelectionChange?: (selectedIds: string[]) => void;\n /** Search term for global text filtering. Rows are filtered to those containing\n * the term in any accessor column value (case-insensitive). */\n searchTerm?: string;\n /** Server-side configuration. When provided, enables manual pagination/sorting/filtering. */\n serverSide?: {\n totalItems: number;\n onSortingChange: (sorting: SortingState) => void;\n onPaginationChange: (pageIndex: number, pageSize: number) => void;\n onSearchTermChange: (searchTerm: string) => void;\n };\n /** Escape-hatch: extra options spread into `useReactTable`. Managed keys are excluded. */\n tableOptions?: Partial<Omit<TableOptions<TData>, ManagedKeys>>;\n}\n\n/**\n * Values returned by {@link useDataTable}.\n */\nexport interface UseDataTableReturn<TData extends RowData> {\n /** Full TanStack table instance for rendering. */\n table: Table<TData>;\n\n // Pagination (1-based, matching the Footer)\n /** Current page number (1-based). */\n currentPage: number;\n /** Total number of pages. */\n totalPages: number;\n /** Total number of rows. */\n totalItems: number;\n /** Rows per page. */\n pageSize: number;\n /** Navigate to a page (1-based, clamped to valid range). */\n setPage: (page: number) => void;\n /** Whether pagination is active (pageSize is finite). */\n isPaginated: boolean;\n\n // Selection (pre-computed for the Footer)\n /** Aggregate selection state for the current page. */\n selectionState: SelectionState;\n /** Number of selected rows. */\n selectedCount: number;\n /** Whether every row on the current page is selected. */\n isAllPageRowsSelected: boolean;\n /** IDs of currently selected rows (derived from `getRowId`). */\n selectedRowIds: string[];\n /** Deselect all rows. */\n clearSelection: () => void;\n /** Select or deselect all rows on the current page. */\n toggleAllPageRowsSelected: (selected: boolean) => void;\n /** Select or deselect all rows across all pages. */\n toggleAllRowsSelected: (selected: boolean) => void;\n /** Whether every row across all pages is selected. */\n isAllRowsSelected: boolean;\n\n // View-mode (filter to selected rows)\n /** Whether the table is currently filtered to show only selected rows. */\n isViewingSelected: boolean;\n /** Enter view mode — freeze the current selection as a filter. */\n enterViewMode: () => void;\n /** Exit view mode — remove the selection filter. */\n exitViewMode: () => void;\n}\n\n// ---------------------------------------------------------------------------\n// Hook\n// ---------------------------------------------------------------------------\n\n/**\n * Wraps TanStack `useReactTable` with DataTable-specific defaults and derived\n * state so that consumers only need to provide `data` + `columns`.\n */\nexport default function useDataTable<TData extends RowData>(\n options: UseDataTableOptions<TData>\n): UseDataTableReturn<TData> {\n const {\n data,\n columns,\n pageSize: pageSizeOption = 10,\n enableRowSelection = true,\n enableColumnResizing = true,\n columnResizeMode = \"onChange\",\n initialSorting = [],\n initialColumnVisibility = {},\n initialRowSelection = {},\n initialViewSelected = false,\n getRowId,\n onSelectionChange,\n searchTerm,\n serverSide,\n tableOptions,\n } = options;\n\n const isServerSide = !!serverSide;\n\n // ---- internal state -----------------------------------------------------\n const [sorting, setSorting] = useState<SortingState>(initialSorting);\n const [rowSelection, setRowSelection] =\n useState<RowSelectionState>(initialRowSelection);\n const [columnSizing, setColumnSizing] = useState<ColumnSizingState>({});\n const [columnVisibility, setColumnVisibility] = useState<VisibilityState>(\n initialColumnVisibility\n );\n const [pagination, setPagination] = useState<PaginationState>({\n pageIndex: 0,\n pageSize: pageSizeOption,\n });\n /** Combined global filter: view-mode (selected IDs) + text search. */\n const initialSelectedIds =\n initialViewSelected && Object.keys(initialRowSelection).length > 0\n ? new Set(Object.keys(initialRowSelection))\n : null;\n const [globalFilter, setGlobalFilter] = useState<GlobalFilterValue>({\n selectedIds: initialSelectedIds,\n searchTerm: \"\",\n });\n\n // ---- sync pageSize prop to internal state --------------------------------\n useEffect(() => {\n setPagination((prev) => ({\n ...prev,\n pageSize: pageSizeOption,\n pageIndex: 0,\n }));\n }, [pageSizeOption]);\n\n // ---- sync external searchTerm prop into combined filter state ------------\n // (client-side only — server-side uses separate callbacks instead)\n const preSearchPageRef = useRef<number>(0);\n\n useEffect(() => {\n if (isServerSide) return;\n const term = searchTerm ?? \"\";\n const wasSearching = !!globalFilter.searchTerm;\n\n if (!wasSearching && term) {\n // Entering search — save current page, reset to 0\n preSearchPageRef.current = pagination.pageIndex;\n setPagination((p) => ({ ...p, pageIndex: 0 }));\n } else if (wasSearching && !term) {\n // Clearing search — restore saved page\n setPagination((p) => ({ ...p, pageIndex: preSearchPageRef.current }));\n }\n\n setGlobalFilter((prev) => ({ ...prev, searchTerm: term }));\n // Intentionally omits `globalFilter.searchTerm` and `pagination.pageIndex`:\n // we only read snapshot values to detect the search enter/clear transition,\n // not to react to every filter or page change.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [searchTerm, isServerSide]);\n\n // ---- server-side: 3 separate callbacks -----------------------------------\n // Single ref for the whole serverSide config — prevents effects from\n // re-firing when the consumer passes an inline object each render.\n const serverSideRef = useRef(serverSide);\n serverSideRef.current = serverSide;\n\n useEffect(() => {\n if (!isServerSide) return;\n serverSideRef.current!.onSortingChange(sorting);\n }, [sorting, isServerSide]);\n\n useEffect(() => {\n if (!isServerSide) return;\n serverSideRef.current!.onPaginationChange(\n pagination.pageIndex,\n pagination.pageSize\n );\n }, [pagination.pageIndex, pagination.pageSize, isServerSide]);\n\n useEffect(() => {\n if (!isServerSide) return;\n setPagination((p) => ({ ...p, pageIndex: 0 }));\n serverSideRef.current!.onSearchTermChange(searchTerm ?? \"\");\n }, [searchTerm, isServerSide]);\n\n // ---- TanStack table instance --------------------------------------------\n const serverPageCount = isServerSide\n ? isFinite(pagination.pageSize) && pagination.pageSize > 0\n ? Math.ceil((serverSide!.totalItems || 0) / pagination.pageSize)\n : 1\n : undefined;\n\n const tableOpts: TableOptions<TData> = {\n data,\n columns,\n getRowId,\n state: {\n sorting,\n rowSelection,\n columnSizing,\n columnVisibility,\n pagination,\n ...(isServerSide ? {} : { globalFilter }),\n },\n onSortingChange: isServerSide\n ? (updater) => {\n setSorting(updater);\n setPagination((p) => ({ ...p, pageIndex: 0 }));\n }\n : setSorting,\n onRowSelectionChange: setRowSelection,\n onColumnSizingChange: setColumnSizing,\n onColumnVisibilityChange: setColumnVisibility,\n onPaginationChange: setPagination,\n getCoreRowModel: getCoreRowModel(),\n // We manage page resets explicitly (search enter/clear, view mode,\n // pageSize change) so disable TanStack's auto-reset which would\n // clobber our restored page index when the filter changes.\n autoResetPageIndex: false,\n columnResizeMode,\n enableRowSelection,\n enableColumnResizing,\n ...tableOptions,\n };\n\n if (isServerSide) {\n tableOpts.manualPagination = true;\n tableOpts.manualSorting = true;\n tableOpts.manualFiltering = true;\n tableOpts.pageCount = serverPageCount;\n } else {\n tableOpts.onGlobalFilterChange = setGlobalFilter;\n tableOpts.getSortedRowModel = getSortedRowModel();\n tableOpts.getPaginationRowModel = getPaginationRowModel();\n tableOpts.getFilteredRowModel = getFilteredRowModel();\n tableOpts.globalFilterFn = (\n row,\n _columnId,\n filterValue: GlobalFilterValue\n ) => {\n // View-mode filter (selected IDs)\n if (\n filterValue.selectedIds != null &&\n !filterValue.selectedIds.has(row.id)\n ) {\n return false;\n }\n // Text search filter\n if (filterValue.searchTerm) {\n const term = filterValue.searchTerm.toLowerCase();\n return row.getAllCells().some((cell) => {\n const value = cell.getValue();\n if (value == null) return false;\n return String(value).toLowerCase().includes(term);\n });\n }\n return true;\n };\n }\n\n const table = useReactTable(tableOpts);\n\n // ---- derived values -----------------------------------------------------\n const isAllPageRowsSelected = table.getIsAllPageRowsSelected();\n const isSomePageRowsSelected = table.getIsSomePageRowsSelected();\n\n const selectionState: SelectionState = isAllPageRowsSelected\n ? \"all\"\n : isSomePageRowsSelected\n ? \"partial\"\n : \"none\";\n\n const selectedRowIds = useMemo(\n () => Object.keys(rowSelection),\n [rowSelection]\n );\n const selectedCount = selectedRowIds.length;\n const totalPages = Math.max(1, table.getPageCount());\n const currentPage = pagination.pageIndex + 1;\n const hasActiveFilter =\n !isServerSide &&\n (globalFilter.selectedIds != null || !!globalFilter.searchTerm);\n const totalItems = isServerSide\n ? serverSide!.totalItems\n : hasActiveFilter\n ? table.getPrePaginationRowModel().rows.length\n : data.length;\n const isPaginated = isFinite(pagination.pageSize);\n\n // ---- keep view-mode filter in sync with selection ----------------------\n // When in view-selected mode, deselecting a row should remove it from\n // the visible set so it disappears immediately.\n useEffect(() => {\n if (isServerSide) return;\n if (globalFilter.selectedIds == null) return;\n\n const currentIds = new Set(Object.keys(rowSelection));\n // Remove any ID from the filter that is no longer selected\n let changed = false;\n const next = new Set<string>();\n globalFilter.selectedIds.forEach((id) => {\n if (currentIds.has(id)) {\n next.add(id);\n } else {\n changed = true;\n }\n });\n if (changed) {\n setGlobalFilter((prev) => ({ ...prev, selectedIds: next }));\n }\n // Only react to selection changes while in view mode; `globalFilter.selectedIds`\n // is read as a snapshot, not a trigger.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [rowSelection, isServerSide]);\n\n // ---- selection change callback ------------------------------------------\n const isFirstRenderRef = useRef(true);\n const onSelectionChangeRef = useRef(onSelectionChange);\n onSelectionChangeRef.current = onSelectionChange;\n\n useEffect(() => {\n if (isFirstRenderRef.current) {\n isFirstRenderRef.current = false;\n // Still fire the callback on first render if there's an initial selection\n if (selectedRowIds.length > 0) {\n onSelectionChangeRef.current?.(selectedRowIds);\n }\n return;\n }\n onSelectionChangeRef.current?.(selectedRowIds);\n }, [selectedRowIds]);\n\n // ---- actions ------------------------------------------------------------\n const setPage = (page: number) => {\n const clamped = Math.max(1, Math.min(page, totalPages));\n setPagination((prev) => ({ ...prev, pageIndex: clamped - 1 }));\n };\n\n const clearSelection = () => {\n table.resetRowSelection();\n };\n\n const toggleAllPageRowsSelected = (selected: boolean) => {\n table.toggleAllPageRowsSelected(selected);\n };\n\n // NOTE: In server-side mode, these only operate on the loaded page data,\n // not all rows across all pages. TanStack can't select rows it doesn't have.\n const toggleAllRowsSelected = (selected: boolean) => {\n table.toggleAllRowsSelected(selected);\n };\n\n const isAllRowsSelected = table.getIsAllRowsSelected();\n\n // ---- view mode (filter to selected rows) --------------------------------\n const isViewingSelected = globalFilter.selectedIds != null;\n\n const enterViewMode = () => {\n if (isServerSide) return;\n if (selectedRowIds.length > 0) {\n setGlobalFilter((prev) => ({\n ...prev,\n selectedIds: new Set(selectedRowIds),\n }));\n setPagination((prev) => ({ ...prev, pageIndex: 0 }));\n }\n };\n\n const exitViewMode = () => {\n if (isServerSide) return;\n setGlobalFilter((prev) => ({ ...prev, selectedIds: null }));\n setPagination((prev) => ({ ...prev, pageIndex: 0 }));\n };\n\n return {\n table,\n currentPage,\n totalPages,\n totalItems,\n pageSize: pagination.pageSize,\n setPage,\n isPaginated,\n selectionState,\n selectedCount,\n selectedRowIds,\n isAllPageRowsSelected,\n isAllRowsSelected,\n clearSelection,\n toggleAllPageRowsSelected,\n toggleAllRowsSelected,\n isViewingSelected,\n enterViewMode,\n exitViewMode,\n };\n}\n","\"use client\";\n\n/**\n * useColumnWidths — Proportional column widths with splitter resize.\n *\n * WHY NOT TANSTACK'S BUILT-IN COLUMN SIZING?\n *\n * TanStack Table's column resize system (columnSizing state,\n * header.getResizeHandler(), columnResizeMode) doesn't support the\n * behavior our design requires:\n *\n * 1. No proportional fill — TanStack uses absolute pixel widths from\n * columnDef.size. When the container is wider than the sum of sizes,\n * the extra space is not distributed. We need weight-based proportional\n * distribution so columns fill the container at any width.\n *\n * 2. No splitter semantics — TanStack's resize changes one column's size\n * in isolation (the total table width grows/shrinks). We need \"splitter\"\n * behavior: dragging column i's right edge grows column i and shrinks\n * column i+1 by the same amount, keeping the total fixed. This prevents\n * the actions column from jittering.\n *\n * 3. No per-column min-width enforcement during drag — TanStack only has a\n * global minSize default. We enforce per-column min-widths and clamp the\n * drag delta so neither the dragged column nor its neighbor can shrink\n * below their floor.\n *\n * 4. No weight-based resize persistence — TanStack stores absolute pixel\n * deltas. When the window resizes after a column drag, the proportions\n * drift. We store weights, so a user-resized column scales proportionally\n * with the container — the ratio is preserved, not the pixel count.\n *\n * APPROACH:\n *\n * We still rely on TanStack for everything else (sorting, pagination,\n * visibility, row selection). Only column width computation and resize\n * interaction are handled here. The columnDef.size values are used as\n * initial weights, and TanStack's enableResizing / getCanResize() flags\n * are still respected in the render loop.\n */\n\nimport {\n useState,\n useRef,\n useEffect,\n useLayoutEffect,\n useCallback,\n} from \"react\";\nimport type { Header } from \"@tanstack/react-table\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Extracted config ready to pass to useColumnWidths. */\nexport interface WidthConfig {\n fixedColumnIds: Set<string>;\n columnWeights: Record<string, number>;\n columnMinWidths: Record<string, number>;\n}\n\ninterface UseColumnWidthsOptions {\n /** Visible headers from TanStack's first header group. */\n headers: Header<unknown, unknown>[];\n /** Column IDs that have fixed pixel widths (e.g. qualifier, actions). */\n fixedColumnIds: Set<string>;\n /** Explicit column weights (takes precedence over columnDef.size). */\n columnWeights?: Record<string, number>;\n /** Per-column minimum widths for data (non-fixed) columns. */\n columnMinWidths: Record<string, number>;\n}\n\ninterface UseColumnWidthsReturn {\n /** Attach to the scrollable container for width measurement. */\n containerRef: React.RefObject<HTMLDivElement>;\n /** Computed pixel widths keyed by column ID. */\n columnWidths: Record<string, number>;\n /** Factory to create a splitter resize handler for a column pair. */\n createResizeHandler: (\n columnId: string,\n neighborId: string\n ) => (event: React.MouseEvent | React.TouchEvent) => void;\n}\n\n// ---------------------------------------------------------------------------\n// Internal: measure container width via ResizeObserver\n// ---------------------------------------------------------------------------\n\n/** Tracks an element's content width via ResizeObserver, returning a ref and the current width. */\nfunction useElementWidth(): [React.RefObject<HTMLDivElement>, number] {\n const ref = useRef<HTMLDivElement>(null);\n const [width, setWidth] = useState(0);\n useLayoutEffect(() => {\n const el = ref.current;\n if (!el) return;\n setWidth(el.clientWidth);\n const ro = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) setWidth(entry.contentRect.width);\n });\n ro.observe(el);\n return () => ro.disconnect();\n }, []);\n return [ref, width];\n}\n\n// ---------------------------------------------------------------------------\n// Pure function: compute pixel widths from weights\n// ---------------------------------------------------------------------------\n\n/** Converts column weights into pixel widths, enforcing per-column minimums and fixed-column sizes. */\nfunction computeColumnWidths(\n containerWidth: number,\n headers: Header<unknown, unknown>[],\n customWeights: Record<string, number>,\n fixedColumnIds: Set<string>,\n columnWeights: Record<string, number>,\n columnMinWidths: Record<string, number>\n): Record<string, number> {\n const result: Record<string, number> = {};\n\n let fixedTotal = 0;\n const dataColumns: { id: string; weight: number; minWidth: number }[] = [];\n\n for (const h of headers) {\n const baseSize = h.column.columnDef.size ?? 20;\n if (fixedColumnIds.has(h.id)) {\n fixedTotal += baseSize;\n } else {\n dataColumns.push({\n id: h.id,\n weight: customWeights[h.id] ?? columnWeights[h.id] ?? baseSize,\n minWidth: columnMinWidths[h.id] ?? 50,\n });\n }\n }\n\n const tableMinWidth =\n fixedTotal + dataColumns.reduce((sum, col) => sum + col.minWidth, 0);\n const tableWidth =\n containerWidth > 0 ? Math.max(containerWidth, tableMinWidth) : 0;\n\n if (tableWidth === 0) {\n for (const h of headers) {\n result[h.id] = h.column.columnDef.size ?? 20;\n }\n return result;\n }\n\n const available = tableWidth - fixedTotal;\n\n // Iterative proportional allocation with min-width clamping.\n // Each pass clamps columns whose proportional share falls below their\n // minimum, then redistributes remaining space. Repeats until stable.\n let clampedTotal = 0;\n const clamped = new Set<string>();\n\n let stable = false;\n while (!stable) {\n stable = true;\n const unclamped = dataColumns.filter((col) => !clamped.has(col.id));\n const unclampedWeight = unclamped.reduce((s, c) => s + c.weight, 0);\n const remaining = available - clampedTotal;\n\n for (const col of unclamped) {\n const proportional = remaining * (col.weight / unclampedWeight);\n if (proportional < col.minWidth) {\n result[col.id] = col.minWidth;\n clampedTotal += col.minWidth;\n clamped.add(col.id);\n stable = false;\n }\n }\n }\n\n // Distribute remaining space among unclamped columns\n const unclampedCols = dataColumns.filter((col) => !clamped.has(col.id));\n const unclampedWeight = unclampedCols.reduce((s, c) => s + c.weight, 0);\n const remainingSpace = available - clampedTotal;\n let assigned = 0;\n\n for (let i = 0; i < unclampedCols.length; i++) {\n const col = unclampedCols[i]!;\n if (i === unclampedCols.length - 1) {\n result[col.id] = remainingSpace - assigned;\n } else {\n const w = Math.round(remainingSpace * (col.weight / unclampedWeight));\n result[col.id] = w;\n assigned += w;\n }\n }\n\n // Fixed columns keep their base size\n for (const h of headers) {\n if (fixedColumnIds.has(h.id)) {\n result[h.id] = h.column.columnDef.size ?? 20;\n }\n }\n\n return result;\n}\n\n// ---------------------------------------------------------------------------\n// Pure function: create a splitter resize handler for a column pair\n// ---------------------------------------------------------------------------\n\n/** Creates a mouse/touch drag handler that redistributes weight between two adjacent columns. */\nfunction createSplitterResizeHandler(\n columnId: string,\n neighborId: string,\n startColumnWidth: number,\n startNeighborWidth: number,\n startColumnWeight: number,\n startNeighborWeight: number,\n columnMinWidth: number,\n neighborMinWidth: number,\n setter: (value: React.SetStateAction<Record<string, number>>) => void,\n isDraggingRef: React.MutableRefObject<boolean>\n): (event: React.MouseEvent | React.TouchEvent) => void {\n return (event: React.MouseEvent | React.TouchEvent) => {\n const startX =\n \"touches\" in event ? event.touches[0]!.clientX : event.clientX;\n\n isDraggingRef.current = true;\n\n const onMove = (e: MouseEvent | TouchEvent) => {\n const currentX =\n \"touches\" in e\n ? (e as TouchEvent).touches[0]!.clientX\n : (e as MouseEvent).clientX;\n const rawDelta = currentX - startX;\n const minDelta = columnMinWidth - startColumnWidth;\n const maxDelta = startNeighborWidth - neighborMinWidth;\n const delta = Math.max(minDelta, Math.min(maxDelta, rawDelta));\n\n setter((prev) => ({\n ...prev,\n [columnId]:\n startColumnWeight * ((startColumnWidth + delta) / startColumnWidth),\n [neighborId]:\n startNeighborWeight *\n ((startNeighborWidth - delta) / startNeighborWidth),\n }));\n };\n\n const onUp = () => {\n document.removeEventListener(\"mousemove\", onMove);\n document.removeEventListener(\"mouseup\", onUp);\n document.removeEventListener(\"touchmove\", onMove);\n document.removeEventListener(\"touchend\", onUp);\n document.removeEventListener(\"touchcancel\", onUp);\n document.body.style.userSelect = \"\";\n document.body.style.cursor = \"\";\n isDraggingRef.current = false;\n };\n\n document.body.style.userSelect = \"none\";\n document.body.style.cursor = \"col-resize\";\n document.addEventListener(\"mousemove\", onMove);\n document.addEventListener(\"mouseup\", onUp);\n document.addEventListener(\"touchmove\", onMove);\n document.addEventListener(\"touchend\", onUp);\n document.addEventListener(\"touchcancel\", onUp);\n };\n}\n\n// ---------------------------------------------------------------------------\n// Hook\n// ---------------------------------------------------------------------------\n\n/**\n * Computes proportional column pixel widths from weights and provides\n * splitter-style resize handlers that keep total table width constant.\n */\nexport default function useColumnWidths({\n headers,\n fixedColumnIds,\n columnWeights = {},\n columnMinWidths,\n}: UseColumnWidthsOptions): UseColumnWidthsReturn {\n const [containerRef, containerWidth] = useElementWidth();\n const [customWeights, setCustomWeights] = useState<Record<string, number>>(\n {}\n );\n const isDraggingRef = useRef(false);\n\n useEffect(() => {\n const isDragging = isDraggingRef;\n return () => {\n // Read the ref at unmount time intentionally: if the component unmounts\n // mid-drag we must clear the body styles applied during the drag.\n if (isDragging.current) {\n document.body.style.userSelect = \"\";\n document.body.style.cursor = \"\";\n }\n };\n }, []);\n\n const columnWidths = computeColumnWidths(\n containerWidth,\n headers,\n customWeights,\n fixedColumnIds,\n columnWeights,\n columnMinWidths\n );\n\n const createResizeHandler = useCallback(\n (columnId: string, neighborId: string) => {\n const header = headers.find((h) => h.id === columnId);\n const neighbor = headers.find((h) => h.id === neighborId);\n\n return createSplitterResizeHandler(\n columnId,\n neighborId,\n columnWidths[columnId] ?? 0,\n columnWidths[neighborId] ?? 0,\n customWeights[columnId] ??\n columnWeights[columnId] ??\n header?.column.columnDef.size ??\n 20,\n customWeights[neighborId] ??\n columnWeights[neighborId] ??\n neighbor?.column.columnDef.size ??\n 20,\n columnMinWidths[columnId] ?? 50,\n columnMinWidths[neighborId] ?? 50,\n setCustomWeights,\n isDraggingRef\n );\n },\n [headers, columnWidths, customWeights, columnWeights, columnMinWidths]\n );\n\n return { containerRef, columnWidths, createResizeHandler };\n}\n","\"use client\";\n\nimport { useState, useCallback, useMemo, useRef } from \"react\";\nimport {\n useSensors,\n useSensor,\n PointerSensor,\n KeyboardSensor,\n closestCenter,\n type DragStartEvent,\n type DragEndEvent,\n} from \"@dnd-kit/core\";\nimport { arrayMove, sortableKeyboardCoordinates } from \"@dnd-kit/sortable\";\nimport { restrictToVerticalAxis } from \"@dnd-kit/modifiers\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ninterface UseDraggableRowsOptions<TData> {\n /** Current display-order data. */\n data: TData[];\n /** Extract a unique string ID from each row. */\n getRowId: (row: TData) => string;\n /** Whether DnD row reordering is active (e.g. set to `false` when column sorting is active). @default true */\n enabled?: boolean;\n /** Called after a successful reorder with the new ID order and a map of changed positions. */\n onReorder?: (\n ids: string[],\n changedOrders: Record<string, number>\n ) => void | Promise<void>;\n}\n\nexport interface DraggableRowsReturn {\n /** Props to pass to TableBody's `dndSortable` prop. */\n dndContextProps: {\n sensors: ReturnType<typeof useSensors>;\n collisionDetection: typeof closestCenter;\n modifiers: Array<typeof restrictToVerticalAxis>;\n onDragStart: (event: DragStartEvent) => void;\n onDragEnd: (event: DragEndEvent) => void;\n onDragCancel: () => void;\n };\n /** Ordered list of IDs for SortableContext. */\n sortableItems: string[];\n /** ID of the currently dragged row, or null. */\n activeId: string | null;\n /** Whether a drag is in progress. */\n isDragging: boolean;\n /** Whether DnD is enabled. */\n isEnabled: boolean;\n /** Ref that is `true` briefly after a drag ends, used to suppress the trailing click. */\n wasDraggingRef: React.RefObject<boolean>;\n}\n\n// ---------------------------------------------------------------------------\n// Hook\n// ---------------------------------------------------------------------------\n\n/**\n * Manages drag-and-drop row reordering using @dnd-kit, providing sensor\n * configuration, sortable item IDs, drag state, and a reorder callback\n * that reports only the changed positions.\n */\nexport default function useDraggableRows<TData>(\n options: UseDraggableRowsOptions<TData>\n): DraggableRowsReturn {\n const { data, getRowId, enabled = true, onReorder } = options;\n\n const [activeId, setActiveId] = useState<string | null>(null);\n const wasDraggingRef = useRef(false);\n\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: { distance: 5 },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n );\n\n const sortableItems = useMemo(\n () => data.map((row) => getRowId(row)),\n [data, getRowId]\n );\n\n const sortableIndexMap = useMemo(() => {\n const map = new Map<string, number>();\n for (let i = 0; i < sortableItems.length; i++) {\n const item = sortableItems[i];\n if (item !== undefined) {\n map.set(item, i);\n }\n }\n return map;\n }, [sortableItems]);\n\n const handleDragStart = useCallback((event: DragStartEvent) => {\n setActiveId(String(event.active.id));\n }, []);\n\n const handleDragEnd = useCallback(\n (event: DragEndEvent) => {\n setActiveId(null);\n // Suppress the trailing click event that the browser fires after pointerup.\n wasDraggingRef.current = true;\n requestAnimationFrame(() => {\n wasDraggingRef.current = false;\n });\n if (event.activatorEvent instanceof PointerEvent) {\n (document.activeElement as HTMLElement)?.blur();\n }\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n\n const oldIndex = sortableIndexMap.get(String(active.id));\n const newIndex = sortableIndexMap.get(String(over.id));\n if (oldIndex === undefined || newIndex === undefined) return;\n\n const reordered = arrayMove(sortableItems, oldIndex, newIndex);\n\n const minIdx = Math.min(oldIndex, newIndex);\n const maxIdx = Math.max(oldIndex, newIndex);\n const changedOrders: Record<string, number> = {};\n for (let i = minIdx; i <= maxIdx; i++) {\n const id = reordered[i];\n if (id !== undefined) {\n changedOrders[id] = i;\n }\n }\n\n onReorder?.(reordered, changedOrders);\n },\n [sortableItems, sortableIndexMap, onReorder]\n );\n\n const handleDragCancel = useCallback(() => {\n setActiveId(null);\n }, []);\n\n return {\n dndContextProps: {\n sensors,\n collisionDetection: closestCenter,\n modifiers: [restrictToVerticalAxis],\n onDragStart: handleDragStart,\n onDragEnd: handleDragEnd,\n onDragCancel: handleDragCancel,\n },\n sortableItems,\n activeId,\n isDragging: activeId !== null,\n isEnabled: enabled,\n wasDraggingRef,\n };\n}\n","import { createContext, useContext, type ReactNode } from \"react\";\n\n/** Table density preset. `\"lg\"` is the comfortable default, `\"md\"` is compact. */\nexport type TableSize = \"md\" | \"lg\";\n\nconst TableSizeContext = createContext<TableSize>(\"lg\");\n\nexport interface TableSizeProviderProps {\n size: TableSize;\n children: ReactNode;\n}\n\nexport function TableSizeProvider({ size, children }: TableSizeProviderProps) {\n return (\n <TableSizeContext.Provider value={size}>\n {children}\n </TableSizeContext.Provider>\n );\n}\n\nexport function useTableSize(): TableSize {\n return useContext(TableSizeContext);\n}\n","\"use client\";\n\nimport { forwardRef, type TableHTMLAttributes } from \"react\";\nimport { useTableSize } from \"./TableSizeContext\";\n\nexport type TableVariant = \"rows\" | \"cards\" | \"panel\";\nexport type SelectionBehavior = \"no-select\" | \"single-select\" | \"multi-select\";\n\nexport interface TableElementProps\n extends TableHTMLAttributes<HTMLTableElement> {\n /** Visual row variant. @default \"cards\" */\n variant?: TableVariant;\n /** Row selection behavior. @default \"no-select\" */\n selectionBehavior?: SelectionBehavior;\n /** Explicit pixel width for the table (e.g. from the computed column widths).\n * When provided the table uses exactly this width instead of stretching to\n * fill its container, which prevents extra space being redistributed across\n * columns on resize. */\n width?: number;\n}\n\nconst TableElement = forwardRef<HTMLTableElement, TableElementProps>(\n function TableElement(\n {\n variant = \"cards\",\n selectionBehavior = \"no-select\",\n width,\n className,\n style,\n ...rest\n },\n ref\n ) {\n const size = useTableSize();\n return (\n <table\n ref={ref}\n className={[\"sds-datatable-table\", className].filter(Boolean).join(\" \")}\n style={{ ...style, width }}\n data-fill={width ? undefined : \"\"}\n data-size={size}\n data-variant={variant}\n data-selection={selectionBehavior}\n {...rest}\n />\n );\n }\n);\n\nexport default TableElement;\n","import { forwardRef, type HTMLAttributes } from \"react\";\n\nexport type TableHeaderProps = HTMLAttributes<HTMLTableSectionElement>;\n\nconst TableHeader = forwardRef<HTMLTableSectionElement, TableHeaderProps>(\n function TableHeader(props, ref) {\n return <thead ref={ref} {...props} />;\n }\n);\n\nexport default TableHeader;\n","\"use client\";\n\nimport { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport type {\n DragStartEvent,\n DragEndEvent,\n CollisionDetection,\n Modifier,\n SensorDescriptor,\n SensorOptions,\n} from \"@dnd-kit/core\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface DraggableProps {\n dndContextProps: {\n sensors: SensorDescriptor<SensorOptions>[];\n collisionDetection: CollisionDetection;\n modifiers: Modifier[];\n onDragStart: (event: DragStartEvent) => void;\n onDragEnd: (event: DragEndEvent) => void;\n onDragCancel: () => void;\n };\n sortableItems: string[];\n activeId: string | null;\n isEnabled: boolean;\n}\n\nexport interface TableBodyProps\n extends HTMLAttributes<HTMLTableSectionElement> {\n /** DnD context props from useDraggableRows — enables drag-and-drop reordering. */\n dndSortable?: DraggableProps;\n /** Render function for the drag overlay row. */\n renderDragOverlay?: (activeId: string) => ReactNode;\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\n// DnD wrappers (DndContext, SortableContext, DragOverlay) are rendered\n// *outside* the <table> in components.tsx. Putting them as direct children of\n// <table> made @dnd-kit inject an accessibility <div> as a sibling of <tbody>,\n// which is invalid HTML and triggers hydration errors. The props are kept for\n// backward type compatibility; this component just renders <tbody>.\nconst TableBody = forwardRef<HTMLTableSectionElement, TableBodyProps>(\n function TableBody({ dndSortable, renderDragOverlay, ...rest }, ref) {\n void dndSortable;\n void renderDragOverlay;\n return <tbody ref={ref} {...rest} />;\n }\n);\n\nexport default TableBody;\n","\"use client\";\n\nimport { type HTMLAttributes, type Ref } from \"react\";\nimport { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport SvgHandle from \"../../icons/Handle\";\nimport { useTableSize } from \"./TableSizeContext\";\n\nexport interface TableRowProps extends HTMLAttributes<HTMLTableRowElement> {\n ref?: Ref<HTMLTableRowElement>;\n selected?: boolean;\n /** Disables interaction and applies disabled styling. */\n disabled?: boolean;\n /** When provided, makes this row sortable via @dnd-kit. */\n sortableId?: string;\n /** Show drag handle overlay. Defaults to true when sortableId is set. */\n showDragHandle?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Internal: sortable row\n// ---------------------------------------------------------------------------\n\nfunction SortableTableRow({\n sortableId,\n showDragHandle = true,\n selected,\n disabled,\n ref: _externalRef,\n children,\n className,\n ...props\n}: TableRowProps) {\n const resolvedSize = useTableSize();\n\n const {\n attributes,\n listeners,\n setNodeRef,\n setActivatorNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id: sortableId! });\n\n const style: React.CSSProperties = {\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0 : undefined,\n };\n\n return (\n <tr\n ref={setNodeRef}\n style={style}\n className={[\"sds-datatable-row\", className].filter(Boolean).join(\" \")}\n data-drag-handle={showDragHandle || undefined}\n data-selected={selected || undefined}\n data-disabled={disabled || undefined}\n {...props}\n >\n {children}\n {showDragHandle && (\n <td className=\"sds-datatable-drag-cell\">\n {/*\n * The drag handle is the sole activator: dnd-kit `attributes` carry\n * role=\"button\"/tabindex/aria-roledescription, so they must land on\n * the button, not the <tr>. Spreading them on the row would make the\n * row interactive and nest this button inside it (nested-interactive).\n */}\n <button\n ref={setActivatorNodeRef}\n type=\"button\"\n className=\"sds-datatable-drag-button\"\n data-size={resolvedSize}\n aria-label=\"Drag to reorder\"\n onMouseDown={(e) => e.preventDefault()}\n {...attributes}\n {...listeners}\n >\n <SvgHandle />\n </button>\n </td>\n )}\n </tr>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Main component\n// ---------------------------------------------------------------------------\n\nexport default function TableRow({\n sortableId,\n showDragHandle,\n selected,\n disabled,\n ref,\n className,\n ...props\n}: TableRowProps) {\n if (sortableId) {\n return (\n <SortableTableRow\n sortableId={sortableId}\n showDragHandle={showDragHandle}\n selected={selected}\n disabled={disabled}\n ref={ref}\n className={className}\n {...props}\n />\n );\n }\n\n return (\n <tr\n ref={ref}\n className={[\"sds-datatable-row\", className].filter(Boolean).join(\" \")}\n data-selected={selected || undefined}\n data-disabled={disabled || undefined}\n {...props}\n />\n );\n}\n","import type { ReactNode } from \"react\";\n\n/**\n * Lightweight text primitive for DataTable internals.\n *\n * DEVIATION: the design-system `Text` component is the canonical typography\n * primitive, but importing it into this separate `/table` entry pulls the full\n * `richstr` + inline-markdown renderer into the entry's chunk, pushing the\n * bundle past its 40 kB budget. DataTable only ever renders plain string labels\n * (column headers, the \"showing X of Z\" summary, selection messages, popover\n * menu items) and never needs markdown, so it renders the global `font-*` token\n * presets from `colors_and_type.css` with the color applied via the matching\n * token variable, with zero markdown weight. Typography stays identical to\n * `Text`.\n */\n\ntype TextFont =\n | \"main-ui-body\"\n | \"main-ui-action\"\n | \"secondary-body\"\n | \"secondary-action\";\n\ntype TextColor = \"text-03\" | \"text-04\";\n\nconst COLOR_VAR: Record<TextColor, string> = {\n \"text-03\": \"var(--text-03)\",\n \"text-04\": \"var(--text-04)\",\n};\n\nexport interface DataTableTextProps {\n font: TextFont;\n color: TextColor;\n /** Truncate to a single line with an ellipsis. */\n truncate?: boolean;\n children: ReactNode;\n}\n\nexport function DataTableText({\n font,\n color,\n truncate,\n children,\n}: DataTableTextProps) {\n return (\n <span\n className={`font-${font}`}\n style={{\n color: COLOR_VAR[color],\n ...(truncate\n ? {\n display: \"block\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }\n : undefined),\n }}\n >\n {children}\n </span>\n );\n}\n","\"use client\";\n\nimport {\n type MouseEvent,\n type ReactNode,\n type ThHTMLAttributes,\n type TouchEvent,\n} from \"react\";\nimport SvgArrowUpDown from \"../../icons/ArrowUpDown\";\nimport SvgChevronDown from \"../../icons/ChevronDown\";\nimport SvgChevronUp from \"../../icons/ChevronUp\";\nimport SvgHandle from \"../../icons/Handle\";\nimport { DataTableText } from \"./DataTableText\";\nimport { useTableSize } from \"./TableSizeContext\";\nimport type { DataTableIcon } from \"./types\";\n\nexport type SortDirection = \"none\" | \"ascending\" | \"descending\";\n\ninterface TableHeadCustomProps {\n /** Header label content. */\n children: ReactNode;\n /** Current sort state. When omitted, no sort button is shown. */\n sorted?: SortDirection;\n /** Called when the sort button is clicked. Required to show the sort button. */\n onSort?: () => void;\n /** When `true`, renders a thin resize handle on the right edge. */\n resizable?: boolean;\n /** Called when a resize drag begins on the handle. Attach the splitter\n * resize handler here to enable column resizing. */\n onResizeStart?: (event: MouseEvent | TouchEvent) => void;\n /** Override the sort icon for this column. Receives the current sort state and\n * returns the icon component to render. Falls back to the built-in icons. */\n icon?: (sorted: SortDirection) => DataTableIcon;\n /** Text alignment for the column. Defaults to `\"left\"`. */\n alignment?: \"left\" | \"center\" | \"right\";\n /** Column width in pixels. Applied as an inline style on the `<th>`. */\n width?: number;\n /** When `true`, shows a bottom border on hover. Defaults to `true`. */\n bottomBorder?: boolean;\n}\n\nexport type TableHeadProps = TableHeadCustomProps &\n Omit<ThHTMLAttributes<HTMLTableCellElement>, keyof TableHeadCustomProps>;\n\nfunction defaultSortIcon(sorted: SortDirection): DataTableIcon {\n switch (sorted) {\n case \"ascending\":\n return SvgChevronUp;\n case \"descending\":\n return SvgChevronDown;\n default:\n return SvgArrowUpDown;\n }\n}\n\n/**\n * Table header cell primitive. Displays a column label with optional sort\n * functionality and a resize handle indicator. Renders as a `<th>`.\n */\nexport default function TableHead({\n children,\n sorted,\n onSort,\n icon: iconFn = defaultSortIcon,\n resizable,\n onResizeStart,\n alignment = \"left\",\n width,\n bottomBorder = true,\n ...thProps\n}: TableHeadProps) {\n const resolvedSize = useTableSize();\n const isSmall = resolvedSize === \"md\";\n const SortIcon = iconFn(sorted ?? \"none\");\n\n return (\n <th\n {...thProps}\n style={width != null ? { width } : undefined}\n className=\"sds-datatable-head\"\n data-size={resolvedSize}\n data-align={alignment}\n data-bottom-border={bottomBorder || undefined}\n >\n <div className=\"sds-datatable-head-row\">\n <div className=\"sds-datatable-head-label\">\n {typeof children === \"string\" ? (\n <DataTableText\n font={isSmall ? \"secondary-action\" : \"main-ui-action\"}\n color=\"text-04\"\n truncate\n >\n {children}\n </DataTableText>\n ) : (\n children\n )}\n </div>\n <div className=\"sds-datatable-head-sort\">\n {onSort && (\n <button\n type=\"button\"\n className=\"sds-datatable-sort-button\"\n onClick={onSort}\n aria-label={typeof children === \"string\" ? `Sort ${children}` : \"Sort\"}\n >\n <SortIcon />\n </button>\n )}\n </div>\n </div>\n {resizable && (\n <div\n onMouseDown={onResizeStart}\n onTouchStart={onResizeStart}\n className=\"sds-datatable-resize-handle\"\n aria-hidden=\"true\"\n >\n <SvgHandle />\n </div>\n )}\n </th>\n );\n}\n","import { type ReactNode, type TdHTMLAttributes } from \"react\";\nimport { useTableSize } from \"./TableSizeContext\";\n\nexport interface TableCellProps\n extends TdHTMLAttributes<HTMLTableCellElement> {\n children: ReactNode;\n /** Explicit pixel width for the cell. */\n width?: number;\n}\n\nexport default function TableCell({\n width,\n children,\n className,\n style,\n ...props\n}: TableCellProps) {\n const resolvedSize = useTableSize();\n return (\n <td\n className={[\"sds-datatable-cell\", className].filter(Boolean).join(\" \")}\n data-size={resolvedSize}\n style={width != null ? { ...style, width } : style}\n {...props}\n >\n <div className=\"sds-datatable-cell-inner\" data-size={resolvedSize}>\n {children}\n </div>\n </td>\n );\n}\n","\"use client\";\n\nimport { Checkbox } from \"../Checkbox\";\nimport { useTableSize } from \"./TableSizeContext\";\nimport type { DataTableIcon, QualifierContentType } from \"./types\";\n\nexport interface TableQualifierProps {\n /** Content type displayed in the qualifier. */\n content: QualifierContentType;\n /** Disables interaction. */\n disabled?: boolean;\n /** Whether to show a selection checkbox overlay. */\n selectable?: boolean;\n /** Whether the row is currently selected. */\n selected?: boolean;\n /** Called when the checkbox is toggled. */\n onSelectChange?: (selected: boolean) => void;\n /** Icon component to render (for \"icon\" content). */\n icon?: DataTableIcon;\n /** Image source URL (for \"image\" content). */\n imageSrc?: string;\n /** Image alt text (for \"image\" content). */\n imageAlt?: string;\n /** Show a tinted background container behind the content. */\n background?: boolean;\n /** Icon size preset. `\"lg\"` = 28/24, `\"md\"` = 20/16. @default \"md\" */\n iconSize?: \"lg\" | \"md\";\n}\n\n// Icon font-size presets (icons are 1em-sized SVGs).\nconst iconSizesMap = {\n lg: { lg: 28, md: 24 },\n md: { lg: 20, md: 16 },\n} as const;\n\n/** Selection overlay state, mapped to data-state on the overlay element. */\nfunction getOverlayState(\n selected: boolean,\n disabled: boolean\n): \"selected\" | \"hover\" | \"hidden\" {\n if (disabled) return selected ? \"selected\" : \"hidden\";\n if (selected) return \"selected\";\n return \"hover\";\n}\n\nexport default function TableQualifier({\n content,\n disabled = false,\n selectable = false,\n selected = false,\n onSelectChange,\n icon: Icon,\n imageSrc,\n imageAlt = \"\",\n background = false,\n iconSize: iconSizePreset = \"md\",\n}: TableQualifierProps) {\n const resolvedSize = useTableSize();\n const iconFontSize = iconSizesMap[iconSizePreset][resolvedSize];\n const overlayState = getOverlayState(selected, disabled);\n\n function renderContent() {\n switch (content) {\n case \"icon\":\n return Icon ? (\n <span style={{ fontSize: iconFontSize, lineHeight: 0 }}>\n <Icon />\n </span>\n ) : null;\n case \"image\":\n return imageSrc ? (\n <img\n src={imageSrc}\n alt={imageAlt}\n className=\"sds-datatable-tq-img\"\n />\n ) : null;\n case \"simple\":\n default:\n return null;\n }\n }\n\n const inner = renderContent();\n const showBackground = background && content !== \"simple\";\n\n return (\n <div\n className=\"sds-datatable-tq\"\n data-size={resolvedSize}\n data-disabled={disabled || undefined}\n >\n {showBackground ? (\n <div\n className=\"sds-datatable-tq-bg\"\n data-selected={selected || undefined}\n data-disabled={disabled || undefined}\n >\n {inner}\n </div>\n ) : (\n inner\n )}\n\n {/* Selection overlay */}\n {selectable && (\n <div\n className=\"sds-datatable-tq-overlay\"\n data-content={content}\n data-state={content === \"simple\" ? undefined : overlayState}\n >\n <Checkbox\n checked={selected}\n onCheckedChange={(state) => onSelectChange?.(state === true)}\n disabled={disabled}\n aria-label=\"Select row\"\n />\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport { type MouseEvent, type ReactNode } from \"react\";\nimport { useTableSize } from \"./TableSizeContext\";\n\nexport interface QualifierContainerProps {\n type: \"head\" | \"cell\";\n children?: ReactNode;\n /** Pass-through click handler (e.g. stopPropagation on body cells). */\n onClick?: (e: MouseEvent) => void;\n}\n\nexport default function QualifierContainer({\n type,\n children,\n onClick,\n}: QualifierContainerProps) {\n const resolvedSize = useTableSize();\n const Tag = type === \"head\" ? \"th\" : \"td\";\n\n return (\n <Tag\n className=\"sds-datatable-qualifier\"\n data-type={type}\n data-size={resolvedSize}\n onClick={onClick}\n >\n <div className=\"sds-datatable-qualifier-inner\">{children}</div>\n </Tag>\n );\n}\n","\"use client\";\n\nimport { type MouseEvent, type ReactNode } from \"react\";\nimport { useTableSize } from \"./TableSizeContext\";\n\nexport interface ActionsContainerProps {\n type: \"head\" | \"cell\";\n /** Pass-through click handler (e.g. stopPropagation on body cells). */\n onClick?: (e: MouseEvent) => void;\n children: ReactNode;\n}\n\nexport default function ActionsContainer({\n type,\n children,\n onClick,\n}: ActionsContainerProps) {\n const size = useTableSize();\n const Tag = type === \"head\" ? \"th\" : \"td\";\n\n return (\n <Tag\n className=\"sds-datatable-actions\"\n data-type={type}\n data-size={size}\n onClick={onClick}\n >\n <div className=\"sds-datatable-actions-inner\">{children}</div>\n </Tag>\n );\n}\n","import { memo } from \"react\";\nimport { type Row, flexRender } from \"@tanstack/react-table\";\nimport TableRow from \"./TableRow\";\nimport TableCell from \"./TableCell\";\nimport QualifierContainer from \"./QualifierContainer\";\nimport TableQualifier from \"./TableQualifier\";\nimport ActionsContainer from \"./ActionsContainer\";\nimport type { DataTableColumnDef, QualifierColumn } from \"./types\";\n\nexport interface DragOverlayRowProps<TData> {\n row: Row<TData>;\n columnWidths?: Record<string, number>;\n columnKindMap?: Map<string, DataTableColumnDef<TData>>;\n qualifierColumn?: QualifierColumn<TData> | null;\n isSelectable?: boolean;\n}\n\nfunction DragOverlayRowInner<TData>({\n row,\n columnWidths,\n columnKindMap,\n qualifierColumn,\n isSelectable = false,\n}: DragOverlayRowProps<TData>) {\n const tableWidth = columnWidths\n ? Object.values(columnWidths).reduce((sum, w) => sum + w, 0)\n : undefined;\n\n return (\n <table\n className=\"sds-datatable-table\"\n style={{\n tableLayout: \"fixed\",\n ...(tableWidth != null ? { width: tableWidth } : { minWidth: \"100%\" }),\n }}\n >\n {columnWidths && (\n <colgroup>\n {row.getVisibleCells().map((cell) => (\n <col\n key={cell.column.id}\n style={{ width: columnWidths[cell.column.id] }}\n />\n ))}\n </colgroup>\n )}\n <tbody>\n <TableRow selected={row.getIsSelected()}>\n {row.getVisibleCells().map((cell) => {\n const colDef = columnKindMap?.get(cell.column.id);\n\n if (colDef?.kind === \"qualifier\" && qualifierColumn) {\n return (\n <QualifierContainer key={cell.id} type=\"cell\">\n <TableQualifier\n content={qualifierColumn.content}\n icon={qualifierColumn.getContent?.(row.original)}\n imageSrc={qualifierColumn.getImageSrc?.(row.original)}\n imageAlt={qualifierColumn.getImageAlt?.(row.original)}\n background={qualifierColumn.background}\n iconSize={qualifierColumn.iconSize}\n selectable={isSelectable}\n selected={isSelectable && row.getIsSelected()}\n />\n </QualifierContainer>\n );\n }\n\n if (colDef?.kind === \"actions\") {\n return (\n <ActionsContainer key={cell.id} type=\"cell\">\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </ActionsContainer>\n );\n }\n\n return (\n <TableCell key={cell.id}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n );\n })}\n </TableRow>\n </tbody>\n </table>\n );\n}\n\nconst DragOverlayRow = memo(DragOverlayRowInner) as typeof DragOverlayRowInner;\n\nexport default DragOverlayRow;\n","\"use client\";\n\nimport { type ReactNode } from \"react\";\nimport SvgEye from \"../../icons/Eye\";\nimport SvgXCircle from \"../../icons/XCircle\";\nimport { Pagination } from \"../Pagination\";\nimport { DataTableText } from \"./DataTableText\";\nimport { useTableSize } from \"./TableSizeContext\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ntype SelectionState = \"none\" | \"partial\" | \"all\";\n\n/**\n * Footer mode for tables with selectable rows. Displays a selection message on\n * the left (with optional view/clear actions) and pagination on the right.\n *\n * DEVIATION: Opal's footer used `Pagination variant=\"count\"`, which renders an\n * \"X of Z\" summary inside the pager. The design-system `Pagination` has no\n * count variant (API: page/pageCount/onPageChange), so the selection footer\n * shows page navigation only; the count summary is omitted in this mode to\n * match Opal's selection layout, which did not show a range on the left.\n */\ninterface FooterSelectionModeProps {\n mode: \"selection\";\n /** Whether the table supports selecting multiple rows. */\n multiSelect: boolean;\n /** Current selection state: `\"none\"`, `\"partial\"`, or `\"all\"`. */\n selectionState: SelectionState;\n /** Number of currently selected items. */\n selectedCount: number;\n /** Toggle view-filter on/off. */\n onView?: () => void;\n /** Whether the view-filter is currently active. */\n isViewingSelected?: boolean;\n /** Clears all selections. */\n onClear?: () => void;\n /** Number of items displayed per page. */\n pageSize: number;\n /** Total number of items across all pages. */\n totalItems: number;\n /** The 1-based current page number. */\n currentPage: number;\n /** Total number of pages. */\n totalPages: number;\n /** Called when the user navigates to a different page. */\n onPageChange: (page: number) => void;\n /** Unit label. @default \"items\" */\n units?: string;\n}\n\n/**\n * Footer mode for read-only tables (no row selection). Displays\n * \"Showing X~Y of Z\" on the left and pagination on the right.\n */\ninterface FooterSummaryModeProps {\n mode: \"summary\";\n /** First item number in the current page (e.g. `1`). */\n rangeStart: number;\n /** Last item number in the current page (e.g. `25`). */\n rangeEnd: number;\n /** Total number of items across all pages. */\n totalItems: number;\n /** The 1-based current page number. */\n currentPage: number;\n /** Total number of pages. */\n totalPages: number;\n /** Called when the user navigates to a different page. */\n onPageChange: (page: number) => void;\n /** Optional extra element rendered after the summary text (e.g. a download icon). */\n leftExtra?: ReactNode;\n /** Unit label for the summary text, e.g. \"users\". */\n units?: string;\n}\n\nexport type FooterProps = FooterSelectionModeProps | FooterSummaryModeProps;\n\n// ---------------------------------------------------------------------------\n// Footer\n// ---------------------------------------------------------------------------\n\nfunction getSelectionMessage(\n state: SelectionState,\n multi: boolean,\n count: number,\n isViewingSelected: boolean\n): string {\n if (state === \"none\" && !isViewingSelected) {\n return multi ? \"Select items to continue\" : \"Select an item to continue\";\n }\n if (!multi) return \"Item selected\";\n return `${count} item${count !== 1 ? \"s\" : \"\"} selected`;\n}\n\nexport default function Footer(props: FooterProps) {\n const resolvedSize = useTableSize();\n return (\n <div className=\"sds-datatable-footer\" data-size={resolvedSize}>\n <div className=\"sds-datatable-footer-left\">\n {props.mode === \"selection\" ? (\n <SelectionLeft\n selectionState={props.selectionState}\n multiSelect={props.multiSelect}\n selectedCount={props.selectedCount}\n onView={props.onView}\n isViewingSelected={props.isViewingSelected}\n onClear={props.onClear}\n />\n ) : (\n <>\n <SummaryLeft\n rangeStart={props.rangeStart}\n rangeEnd={props.rangeEnd}\n totalItems={props.totalItems}\n units={props.units}\n />\n {props.leftExtra}\n </>\n )}\n </div>\n\n <div className=\"sds-datatable-footer-right\">\n <Pagination\n page={props.currentPage}\n pageCount={props.totalPages}\n onPageChange={props.onPageChange}\n />\n </div>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Footer — left-side content\n// ---------------------------------------------------------------------------\n\ninterface SelectionLeftProps {\n selectionState: SelectionState;\n multiSelect: boolean;\n selectedCount: number;\n onView?: () => void;\n isViewingSelected?: boolean;\n onClear?: () => void;\n}\n\nfunction SelectionLeft({\n selectionState,\n multiSelect,\n selectedCount,\n onView,\n isViewingSelected = false,\n onClear,\n}: SelectionLeftProps) {\n const message = getSelectionMessage(\n selectionState,\n multiSelect,\n selectedCount,\n isViewingSelected\n );\n const hasSelection = selectionState !== \"none\";\n const showActions = hasSelection || isViewingSelected;\n\n return (\n <div className=\"sds-datatable-footer-selection\">\n <DataTableText\n font={hasSelection ? \"main-ui-action\" : \"main-ui-body\"}\n color=\"text-03\"\n >\n {message}\n </DataTableText>\n\n {showActions && (\n <div className=\"sds-datatable-footer-selection-actions\">\n {onView && (\n <button\n type=\"button\"\n className=\"sds-datatable-footer-button\"\n data-active={isViewingSelected || undefined}\n onClick={onView}\n aria-label=\"View selected\"\n aria-pressed={isViewingSelected}\n >\n <SvgEye />\n </button>\n )}\n {onClear && (\n <button\n type=\"button\"\n className=\"sds-datatable-footer-button\"\n onClick={onClear}\n aria-label=\"Deselect all\"\n >\n <SvgXCircle />\n </button>\n )}\n </div>\n )}\n </div>\n );\n}\n\ninterface SummaryLeftProps {\n rangeStart: number;\n rangeEnd: number;\n totalItems: number;\n units?: string;\n}\n\nfunction SummaryLeft({\n rangeStart,\n rangeEnd,\n totalItems,\n units,\n}: SummaryLeftProps) {\n const suffix = units ? ` ${units}` : \"\";\n return (\n <div className=\"sds-datatable-footer-summary\">\n <DataTableText font=\"main-ui-body\" color=\"text-03\">\n {`Showing ${rangeStart}~${rangeEnd} of ${totalItems}${suffix}`}\n </DataTableText>\n </div>\n );\n}\n","\"use client\";\n\nimport { useState } from \"react\";\nimport {\n type Table,\n type ColumnDef,\n type RowData,\n type VisibilityState,\n} from \"@tanstack/react-table\";\nimport SvgSliders from \"../../icons/Sliders\";\nimport SvgCheck from \"../../icons/Check\";\nimport { Popover, PopoverTrigger, PopoverContent } from \"../Popover\";\nimport { Separator } from \"../Separator\";\nimport { DataTableText } from \"./DataTableText\";\n\ninterface ColumnVisibilityPopoverProps<TData extends RowData = RowData> {\n table: Table<TData>;\n columnVisibility: VisibilityState;\n}\n\n// NOTE: Opal used a dedicated `SvgColumn` icon; the design system has no column\n// glyph, so the nearest match `SvgSliders` is used for the trigger.\nfunction ColumnVisibilityPopover<TData extends RowData>({\n table,\n columnVisibility,\n}: ColumnVisibilityPopoverProps<TData>) {\n const [open, setOpen] = useState(false);\n\n // User-defined columns only (exclude internal qualifier/actions)\n const dataColumns = table\n .getAllLeafColumns()\n .filter(\n (col) =>\n !col.id.startsWith(\"__\") &&\n col.id !== \"qualifier\" &&\n typeof col.columnDef.header === \"string\" &&\n col.columnDef.header.trim() !== \"\"\n );\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"sds-datatable-popover-trigger\"\n data-open={open || undefined}\n aria-label=\"Column options\"\n >\n <SvgSliders />\n </button>\n </PopoverTrigger>\n\n <PopoverContent align=\"end\" side=\"bottom\" withArrow={false}>\n <div className=\"sds-datatable-menu\">\n <Separator label=\"Shown columns\" decorative={false} />\n {dataColumns.map((column) => {\n const canHide = column.getCanHide();\n const isVisible = columnVisibility[column.id] !== false;\n const label =\n typeof column.columnDef.header === \"string\"\n ? column.columnDef.header\n : column.id;\n\n return (\n <button\n key={column.id}\n type=\"button\"\n className=\"sds-datatable-menu-item\"\n data-selected={isVisible || undefined}\n data-disabled={!canHide || undefined}\n onClick={\n canHide ? () => column.toggleVisibility() : undefined\n }\n >\n <DataTableText font=\"main-ui-body\" color=\"text-04\">\n {label}\n </DataTableText>\n {!canHide ? (\n <span className=\"sds-datatable-menu-tag\">Always shown</span>\n ) : isVisible ? (\n <span className=\"sds-datatable-menu-check\">\n <SvgCheck />\n </span>\n ) : null}\n </button>\n );\n })}\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Column definition factory (parity with Opal — not used by the root component)\n// ---------------------------------------------------------------------------\n\nfunction createColumnVisibilityColumn<TData>(): ColumnDef<TData, unknown> {\n return {\n id: \"__columnVisibility\",\n size: 44,\n enableHiding: false,\n enableSorting: false,\n enableResizing: false,\n header: ({ table }) => (\n <ColumnVisibilityPopover\n table={table}\n columnVisibility={table.getState().columnVisibility}\n />\n ),\n cell: () => null,\n };\n}\n\nexport { ColumnVisibilityPopover, createColumnVisibilityColumn };\n","\"use client\";\n\nimport { useState } from \"react\";\nimport {\n type Table,\n type ColumnDef,\n type RowData,\n type SortingState,\n} from \"@tanstack/react-table\";\nimport SvgArrowUpDown from \"../../icons/ArrowUpDown\";\nimport SvgCheck from \"../../icons/Check\";\nimport { Popover, PopoverTrigger, PopoverContent } from \"../Popover\";\nimport { Separator } from \"../Separator\";\nimport { DataTableText } from \"./DataTableText\";\n\ninterface SortingPopoverProps<TData extends RowData = RowData> {\n table: Table<TData>;\n sorting: SortingState;\n footerText?: string;\n ascendingLabel?: string;\n descendingLabel?: string;\n}\n\ninterface SortMenuItemProps {\n selected: boolean;\n label: string;\n onClick: () => void;\n}\n\nfunction SortMenuItem({ selected, label, onClick }: SortMenuItemProps) {\n return (\n <button\n type=\"button\"\n className=\"sds-datatable-menu-item\"\n data-selected={selected || undefined}\n onClick={onClick}\n >\n <DataTableText font=\"main-ui-body\" color=\"text-04\">\n {label}\n </DataTableText>\n {selected ? (\n <span className=\"sds-datatable-menu-check\">\n <SvgCheck />\n </span>\n ) : null}\n </button>\n );\n}\n\n// NOTE: Opal toggled between `SvgArrowUpDown` (unsorted) and `SvgSortOrder`\n// (active). The design system has no `SvgSortOrder`; `SvgArrowUpDown` is used\n// for both states.\nfunction SortingPopover<TData extends RowData>({\n table,\n sorting,\n footerText,\n ascendingLabel = \"Ascending\",\n descendingLabel = \"Descending\",\n}: SortingPopoverProps<TData>) {\n const [open, setOpen] = useState(false);\n const sortableColumns = table\n .getAllLeafColumns()\n .filter((col) => col.getCanSort());\n\n const currentSort = sorting[0] ?? null;\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"sds-datatable-popover-trigger\"\n data-open={open || undefined}\n aria-label=\"Sort options\"\n >\n <SvgArrowUpDown />\n </button>\n </PopoverTrigger>\n\n <PopoverContent align=\"end\" side=\"bottom\" withArrow={false}>\n <div className=\"sds-datatable-menu\">\n <Separator label=\"Sort by\" decorative={false} />\n\n <SortMenuItem\n selected={currentSort === null}\n label=\"Manual ordering\"\n onClick={() => table.resetSorting()}\n />\n\n {sortableColumns.map((column) => {\n const isSorted = currentSort?.id === column.id;\n const label =\n typeof column.columnDef.header === \"string\"\n ? column.columnDef.header\n : column.id;\n\n return (\n <SortMenuItem\n key={column.id}\n selected={isSorted}\n label={label}\n onClick={() => {\n if (isSorted) {\n table.resetSorting();\n return;\n }\n column.toggleSorting(false);\n }}\n />\n );\n })}\n\n {currentSort !== null && (\n <>\n <Separator label=\"Sorting order\" decorative={false} />\n <SortMenuItem\n selected={!currentSort.desc}\n label={ascendingLabel}\n onClick={() =>\n table.setSorting([{ id: currentSort.id, desc: false }])\n }\n />\n <SortMenuItem\n selected={currentSort.desc}\n label={descendingLabel}\n onClick={() =>\n table.setSorting([{ id: currentSort.id, desc: true }])\n }\n />\n </>\n )}\n\n {footerText ? (\n <div className=\"sds-datatable-menu-footer\">\n <DataTableText font=\"secondary-body\" color=\"text-03\">\n {footerText}\n </DataTableText>\n </div>\n ) : null}\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Column definition factory (parity with Opal — not used by the root component)\n// ---------------------------------------------------------------------------\n\ninterface CreateSortingColumnOptions {\n footerText?: string;\n ascendingLabel?: string;\n descendingLabel?: string;\n}\n\nfunction createSortingColumn<TData>(\n options?: CreateSortingColumnOptions\n): ColumnDef<TData, unknown> {\n return {\n id: \"__sorting\",\n size: 44,\n enableHiding: false,\n enableSorting: false,\n enableResizing: false,\n header: ({ table }) => (\n <SortingPopover\n table={table}\n sorting={table.getState().sorting}\n footerText={options?.footerText}\n ascendingLabel={options?.ascendingLabel}\n descendingLabel={options?.descendingLabel}\n />\n ),\n cell: () => null,\n };\n}\n\nexport { SortingPopover, createSortingColumn };\n","\"use client\";\n\"use no memo\";\n\nimport \"./datatable.css\";\n\nimport { Fragment, useCallback, useEffect, useMemo, useState, type CSSProperties } from \"react\";\nimport {\n flexRender,\n type ColumnDef,\n type Header,\n} from \"@tanstack/react-table\";\nimport { DndContext, DragOverlay } from \"@dnd-kit/core\";\nimport {\n SortableContext,\n verticalListSortingStrategy,\n} from \"@dnd-kit/sortable\";\nimport { Checkbox } from \"../Checkbox\";\nimport { VisuallyHidden } from \"../VisuallyHidden\";\nimport useDataTable, { toSortDirection } from \"./hooks/useDataTable\";\nimport useColumnWidths, {\n type WidthConfig,\n} from \"./hooks/useColumnWidths\";\nimport useDraggableRows from \"./hooks/useDraggableRows\";\nimport TableElement, { type TableVariant } from \"./TableElement\";\nimport TableHeader from \"./TableHeader\";\nimport TableBody from \"./TableBody\";\nimport TableRow from \"./TableRow\";\nimport TableHead from \"./TableHead\";\nimport TableCell from \"./TableCell\";\nimport TableQualifier from \"./TableQualifier\";\nimport QualifierContainer from \"./QualifierContainer\";\nimport ActionsContainer from \"./ActionsContainer\";\nimport DragOverlayRow from \"./DragOverlayRow\";\nimport Footer from \"./Footer\";\nimport { TableSizeProvider, type TableSize } from \"./TableSizeContext\";\nimport { ColumnVisibilityPopover } from \"./ColumnVisibilityPopover\";\nimport { SortingPopover } from \"./ColumnSortabilityPopover\";\nimport type {\n DataTableBaseProps,\n DataTableFooterConfig,\n DataTableColumnDef,\n DataColumn,\n QualifierColumn,\n ActionsColumn,\n} from \"./types\";\n\n// ---------------------------------------------------------------------------\n// SelectionBehavior\n// ---------------------------------------------------------------------------\n\nexport type SelectionBehavior = \"no-select\" | \"single-select\" | \"multi-select\";\n\nexport type DataTableProps<TData> = DataTableBaseProps<TData> & {\n /** Row selection behavior. @default \"no-select\" */\n selectionBehavior?: SelectionBehavior;\n /** Optional className applied to the outer wrapper. */\n className?: string;\n};\n\n// ---------------------------------------------------------------------------\n// Internal: resolve size-dependent widths and build TanStack columns\n// ---------------------------------------------------------------------------\n\ninterface ProcessedColumns<TData> {\n tanstackColumns: ColumnDef<TData, unknown>[];\n widthConfig: WidthConfig;\n qualifierColumn: QualifierColumn<TData> | null;\n /** Map from column ID to column def for dispatch in render loops. */\n columnKindMap: Map<string, DataTableColumnDef<TData>>;\n}\n\nfunction processColumns<TData>(\n columns: DataTableColumnDef<TData>[],\n size: TableSize\n): ProcessedColumns<TData> {\n const tanstackColumns: ColumnDef<TData, unknown>[] = [];\n const fixedColumnIds = new Set<string>();\n const columnWeights: Record<string, number> = {};\n const columnMinWidths: Record<string, number> = {};\n const columnKindMap = new Map<string, DataTableColumnDef<TData>>();\n let qualifierColumn: QualifierColumn<TData> | null = null;\n let firstDataColumnSeen = false;\n\n for (const col of columns) {\n const resolvedWidth =\n typeof col.width === \"function\" ? col.width(size) : col.width;\n\n // Clone def to avoid mutating the caller's column definitions\n const clonedDef: ColumnDef<TData, unknown> = {\n ...col.def,\n id: col.id,\n size:\n \"fixed\" in resolvedWidth ? resolvedWidth.fixed : resolvedWidth.weight,\n };\n\n // First data column is never hideable\n if (col.kind === \"data\" && !firstDataColumnSeen) {\n firstDataColumnSeen = true;\n clonedDef.enableHiding = false;\n }\n\n tanstackColumns.push(clonedDef);\n\n const id = col.id;\n columnKindMap.set(id, col);\n\n if (\"fixed\" in resolvedWidth) {\n fixedColumnIds.add(id);\n } else {\n columnWeights[id] = resolvedWidth.weight;\n columnMinWidths[id] = resolvedWidth.minWidth ?? 50;\n }\n\n if (col.kind === \"qualifier\") qualifierColumn = col;\n }\n\n return {\n tanstackColumns,\n widthConfig: { fixedColumnIds, columnWeights, columnMinWidths },\n qualifierColumn,\n columnKindMap,\n };\n}\n\n// ---------------------------------------------------------------------------\n// DataTable component\n// ---------------------------------------------------------------------------\n\n/**\n * Config-driven table that wires together `useDataTable`, `useColumnWidths`,\n * and `useDraggableRows`. Full flexibility via the column definitions from\n * `createTableColumns()`.\n *\n * @example\n * ```tsx\n * const tc = createTableColumns<TeamMember>();\n * const columns = [\n * tc.qualifier({ content: \"icon\", getContent: () => UserIcon }),\n * tc.column(\"name\", { header: \"Name\", weight: 23 }),\n * tc.column(\"email\", { header: \"Email\", weight: 28 }),\n * tc.actions(),\n * ];\n *\n * <DataTable data={items} columns={columns} getRowId={(r) => r.id} footer={{}} />\n * ```\n */\nexport function DataTable<TData>(props: DataTableProps<TData>) {\n const {\n data,\n columns,\n getRowId,\n pageSize,\n initialSorting,\n initialColumnVisibility,\n initialRowSelection,\n initialViewSelected,\n draggable,\n expandable,\n footer,\n size = \"lg\",\n variant = \"cards\" as TableVariant,\n selectionBehavior = \"no-select\",\n onSelectionChange,\n onRowClick,\n searchTerm,\n height,\n serverSide,\n emptyState,\n className,\n } = props;\n\n const effectivePageSize = pageSize ?? (footer ? 10 : data.length);\n\n // Whether the qualifier column should exist in the DOM.\n const qualifierColDef = columns.find(\n (c): c is QualifierColumn<TData> => c.kind === \"qualifier\"\n );\n const hasQualifierColumn =\n (qualifierColDef != null && qualifierColDef.content !== \"simple\") ||\n selectionBehavior === \"multi-select\";\n\n // 1. Process columns (memoized on columns + size)\n const { tanstackColumns, widthConfig, qualifierColumn, columnKindMap } =\n useMemo(() => {\n const processed = processColumns(columns, size);\n if (!hasQualifierColumn) {\n // Remove qualifier from TanStack columns and width config entirely\n return {\n ...processed,\n tanstackColumns: processed.tanstackColumns.filter(\n (c) => c.id !== \"qualifier\"\n ),\n widthConfig: {\n ...processed.widthConfig,\n fixedColumnIds: new Set(\n Array.from(processed.widthConfig.fixedColumnIds).filter(\n (id) => id !== \"qualifier\"\n )\n ),\n },\n qualifierColumn: null,\n };\n }\n return processed;\n }, [columns, size, hasQualifierColumn]);\n\n // 2. Call useDataTable\n const {\n table,\n currentPage,\n totalPages,\n totalItems,\n setPage,\n pageSize: resolvedPageSize,\n selectionState,\n selectedCount,\n clearSelection,\n toggleAllRowsSelected,\n isAllRowsSelected,\n isViewingSelected,\n enterViewMode,\n exitViewMode,\n } = useDataTable({\n data,\n columns: tanstackColumns,\n pageSize: effectivePageSize,\n initialSorting,\n initialColumnVisibility,\n initialRowSelection,\n initialViewSelected,\n getRowId,\n onSelectionChange,\n searchTerm,\n serverSide: serverSide\n ? {\n totalItems: serverSide.totalItems,\n onSortingChange: serverSide.onSortingChange,\n onPaginationChange: serverSide.onPaginationChange,\n onSearchTermChange: serverSide.onSearchTermChange,\n }\n : undefined,\n });\n\n // 3. Call useColumnWidths\n const { containerRef, columnWidths, createResizeHandler } = useColumnWidths({\n headers: (table.getHeaderGroups()[0]?.headers ?? []) as Header<\n unknown,\n unknown\n >[],\n ...widthConfig,\n });\n\n // 4. Call useDraggableRows (conditional — disabled in server-side mode)\n useEffect(() => {\n if (serverSide && draggable) {\n console.warn(\n \"DataTable: `draggable` is ignored when `serverSide` is enabled. \" +\n \"Drag-and-drop reordering is not supported with server-side pagination.\"\n );\n }\n }, [serverSide, draggable]);\n const effectiveDraggable = serverSide ? undefined : draggable;\n const draggableReturn = useDraggableRows({\n data,\n getRowId,\n enabled: !!effectiveDraggable && table.getState().sorting.length === 0,\n onReorder: effectiveDraggable?.onReorder,\n });\n\n const hasDraggable = !!effectiveDraggable;\n\n const isSelectable = selectionBehavior !== \"no-select\";\n const isMultiSelect = selectionBehavior === \"multi-select\";\n // Checkboxes appear for any selectable table\n const showQualifierCheckbox = isSelectable;\n\n // 5. Expandable rows — controlled via `expandable.expandedIds`, else local.\n const expandedControlled = expandable?.expandedIds != null;\n const [expandedInternal, setExpandedInternal] = useState<Record<string, boolean>>(() => {\n const init: Record<string, boolean> = {};\n for (const id of expandable?.defaultExpandedIds ?? []) init[id] = true;\n return init;\n });\n const expandedMap = useMemo(() => {\n if (!expandedControlled) return expandedInternal;\n const m: Record<string, boolean> = {};\n for (const id of expandable?.expandedIds ?? []) m[id] = true;\n return m;\n }, [expandedControlled, expandable?.expandedIds, expandedInternal]);\n\n const expandOnRowClick = expandable ? expandable.expandOnRowClick !== false : false;\n const canRowExpand = useCallback(\n (rowOriginal: TData) =>\n !!expandable && (expandable.getRowCanExpand?.(rowOriginal) ?? true),\n [expandable]\n );\n const toggleExpanded = useCallback(\n (id: string) => {\n const next = { ...expandedMap, [id]: !expandedMap[id] };\n if (!next[id]) delete next[id];\n if (!expandedControlled) setExpandedInternal(next);\n expandable?.onExpandedChange?.(Object.keys(next));\n },\n [expandedMap, expandedControlled, expandable]\n );\n\n // ---------------------------------------------------------------------------\n // Render\n // ---------------------------------------------------------------------------\n\n const isServerLoading = !!serverSide?.isLoading;\n\n function renderFooter(footerConfig: DataTableFooterConfig) {\n // Mode derived from selectionBehavior.\n if (isSelectable) {\n return (\n <Footer\n mode=\"selection\"\n multiSelect={isMultiSelect}\n selectionState={selectionState}\n selectedCount={selectedCount}\n onClear={\n footerConfig.onClear ??\n (() => {\n if (isViewingSelected) exitViewMode();\n clearSelection();\n })\n }\n onView={\n !serverSide\n ? isViewingSelected\n ? exitViewMode\n : enterViewMode\n : undefined\n }\n isViewingSelected={isViewingSelected}\n pageSize={resolvedPageSize}\n totalItems={totalItems}\n currentPage={currentPage}\n totalPages={totalPages}\n onPageChange={setPage}\n units={footerConfig.units}\n />\n );\n }\n\n // Summary mode (no-select only)\n const rangeStart =\n totalItems === 0\n ? 0\n : !isFinite(resolvedPageSize)\n ? 1\n : (currentPage - 1) * resolvedPageSize + 1;\n const rangeEnd = !isFinite(resolvedPageSize)\n ? totalItems\n : Math.min(currentPage * resolvedPageSize, totalItems);\n\n return (\n <Footer\n mode=\"summary\"\n rangeStart={rangeStart}\n rangeEnd={rangeEnd}\n totalItems={totalItems}\n currentPage={currentPage}\n totalPages={totalPages}\n onPageChange={setPage}\n leftExtra={footerConfig.leftExtra}\n units={footerConfig.units}\n />\n );\n }\n\n const scrollStyle: CSSProperties | undefined =\n height != null\n ? {\n maxHeight: typeof height === \"number\" ? `${height}px` : height,\n overflowY: \"auto\",\n }\n : undefined;\n\n function DraggableTableInner() {\n return (\n <TableElement\n variant={variant}\n selectionBehavior={selectionBehavior}\n width={\n Object.keys(columnWidths).length > 0\n ? Object.values(columnWidths).reduce((sum, w) => sum + w, 0)\n : undefined\n }\n >\n <colgroup>\n {table.getVisibleLeafColumns().map((col) => (\n <col\n key={col.id}\n style={\n columnWidths[col.id] != null\n ? { width: columnWidths[col.id] }\n : undefined\n }\n />\n ))}\n </colgroup>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header, headerIndex) => {\n const colDef = columnKindMap.get(header.id);\n\n // Qualifier header — select-all checkbox only for multi-select\n if (colDef?.kind === \"qualifier\") {\n return (\n <QualifierContainer key={header.id} type=\"head\">\n {/*\n * The qualifier column has no visible header text, so the\n * <th> would fail empty-table-header. A visually hidden\n * label gives it a discernible name without changing the\n * column width (position:absolute).\n */}\n <VisuallyHidden>Selection</VisuallyHidden>\n {isMultiSelect && (\n <Checkbox\n label={<VisuallyHidden>Select all rows</VisuallyHidden>}\n checked={\n isAllRowsSelected\n ? true\n : selectedCount > 0\n ? \"indeterminate\"\n : false\n }\n onCheckedChange={() => {\n // Indeterminate → clear all; otherwise toggle\n if (!isAllRowsSelected && selectedCount > 0) {\n toggleAllRowsSelected(false);\n } else {\n toggleAllRowsSelected(!isAllRowsSelected);\n }\n }}\n />\n )}\n </QualifierContainer>\n );\n }\n\n // Actions header\n if (colDef?.kind === \"actions\") {\n const actionsDef = colDef as ActionsColumn<TData>;\n return (\n <ActionsContainer key={header.id} type=\"head\">\n {actionsDef.showColumnVisibility !== false && (\n <ColumnVisibilityPopover\n table={table}\n columnVisibility={table.getState().columnVisibility}\n />\n )}\n {actionsDef.showSorting !== false && (\n <SortingPopover\n table={table}\n sorting={table.getState().sorting}\n footerText={actionsDef.sortingFooterText}\n />\n )}\n </ActionsContainer>\n );\n }\n\n // Data / Display header\n const canSort = header.column.getCanSort();\n const sortDir = header.column.getIsSorted();\n const nextHeader = headerGroup.headers[headerIndex + 1];\n const canResize =\n header.column.getCanResize() &&\n !!nextHeader &&\n !widthConfig.fixedColumnIds.has(nextHeader.id);\n\n const dataCol =\n colDef?.kind === \"data\"\n ? (colDef as DataColumn<TData>)\n : null;\n\n return (\n <TableHead\n key={header.id}\n width={columnWidths[header.id]}\n sorted={canSort ? toSortDirection(sortDir) : undefined}\n onSort={\n canSort ? () => header.column.toggleSorting() : undefined\n }\n icon={dataCol?.icon}\n resizable={canResize}\n onResizeStart={\n canResize\n ? createResizeHandler(header.id, nextHeader.id)\n : undefined\n }\n >\n {flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n </TableHead>\n );\n })}\n </TableRow>\n ))}\n </TableHeader>\n\n <TableBody>\n {emptyState && table.getRowModel().rows.length === 0 && (\n <tr>\n <td\n className=\"sds-datatable-empty-cell\"\n colSpan={table.getVisibleLeafColumns().length}\n >\n {emptyState}\n </td>\n </tr>\n )}\n {table.getRowModel().rows.map((row) => {\n const stableId = getRowId(row.original);\n const rowId = hasDraggable ? stableId : undefined;\n const rowCanExpand = canRowExpand(row.original);\n const rowExpanded = rowCanExpand && !!expandedMap[stableId];\n\n return (\n <Fragment key={row.id}>\n <TableRow\n sortableId={rowId}\n selected={row.getIsSelected()}\n aria-expanded={rowCanExpand ? rowExpanded : undefined}\n data-expanded={rowExpanded ? \"true\" : undefined}\n onClick={() => {\n if (\n hasDraggable &&\n draggableReturn.wasDraggingRef.current\n ) {\n return;\n }\n if (onRowClick) {\n onRowClick(row.original);\n } else if (isSelectable) {\n if (!isMultiSelect) {\n // single-select: clear all, then select this row\n table.toggleAllRowsSelected(false);\n }\n row.toggleSelected();\n }\n if (expandOnRowClick && rowCanExpand) {\n toggleExpanded(stableId);\n }\n }}\n >\n {row.getVisibleCells().map((cell) => {\n const cellColDef = columnKindMap.get(cell.column.id);\n\n // Qualifier cell\n if (cellColDef?.kind === \"qualifier\") {\n const qDef = cellColDef as QualifierColumn<TData>;\n\n return (\n <QualifierContainer\n key={cell.id}\n type=\"cell\"\n onClick={(e) => e.stopPropagation()}\n >\n <TableQualifier\n content={qDef.content}\n icon={qDef.getContent?.(row.original)}\n imageSrc={qDef.getImageSrc?.(row.original)}\n imageAlt={qDef.getImageAlt?.(row.original)}\n background={qDef.background}\n iconSize={qDef.iconSize}\n selectable={showQualifierCheckbox}\n selected={\n showQualifierCheckbox && row.getIsSelected()\n }\n onSelectChange={\n showQualifierCheckbox\n ? (checked) => {\n if (!isMultiSelect) {\n table.toggleAllRowsSelected(false);\n }\n row.toggleSelected(checked);\n }\n : undefined\n }\n />\n </QualifierContainer>\n );\n }\n\n // Actions cell\n if (cellColDef?.kind === \"actions\") {\n return (\n <ActionsContainer\n key={cell.id}\n type=\"cell\"\n onClick={(e) => e.stopPropagation()}\n >\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext()\n )}\n </ActionsContainer>\n );\n }\n\n // Data / Display cell\n return (\n <TableCell key={cell.id} data-column-id={cell.column.id}>\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext()\n )}\n </TableCell>\n );\n })}\n </TableRow>\n {rowExpanded && expandable ? (\n <tr className=\"sds-datatable-expanded-row\" data-row-id={stableId}>\n <td\n className=\"sds-datatable-expanded-cell\"\n colSpan={table.getVisibleLeafColumns().length}\n >\n {expandable.renderExpandedContent(row.original)}\n </td>\n </tr>\n ) : null}\n </Fragment>\n );\n })}\n </TableBody>\n </TableElement>\n );\n }\n\n return (\n <TableSizeProvider size={size}>\n <div\n className={[\"sds-datatable-root\", className].filter(Boolean).join(\" \")}\n data-variant={variant}\n >\n <div\n className=\"sds-datatable-scroll\"\n data-loading={isServerLoading || undefined}\n ref={containerRef}\n style={scrollStyle}\n >\n {/* DnD wrappers must live OUTSIDE <table>. @dnd-kit renders a hidden\n accessibility <div> as a sibling of the body, which is invalid as\n a direct child of <table>. */}\n {hasDraggable ? (\n <DndContext\n sensors={draggableReturn.dndContextProps.sensors}\n collisionDetection={\n draggableReturn.dndContextProps.collisionDetection\n }\n modifiers={draggableReturn.dndContextProps.modifiers}\n onDragStart={draggableReturn.dndContextProps.onDragStart}\n onDragEnd={draggableReturn.dndContextProps.onDragEnd}\n onDragCancel={draggableReturn.dndContextProps.onDragCancel}\n >\n <SortableContext\n items={draggableReturn.sortableItems}\n strategy={verticalListSortingStrategy}\n >\n <DraggableTableInner />\n </SortableContext>\n <DragOverlay dropAnimation={null}>\n {draggableReturn.activeId\n ? (() => {\n const row = table\n .getRowModel()\n .rows.find(\n (r) =>\n getRowId(r.original) === draggableReturn.activeId\n );\n if (!row) return null;\n return (\n <DragOverlayRow\n row={row}\n columnWidths={columnWidths}\n columnKindMap={columnKindMap}\n qualifierColumn={qualifierColumn}\n isSelectable={isSelectable}\n />\n );\n })()\n : null}\n </DragOverlay>\n </DndContext>\n ) : (\n <DraggableTableInner />\n )}\n </div>\n\n {footer && renderFooter(footer)}\n </div>\n </TableSizeProvider>\n );\n}\n","import type { ReactNode } from \"react\";\nimport {\n createColumnHelper,\n type ColumnDef,\n type DeepKeys,\n type DeepValue,\n type CellContext,\n} from \"@tanstack/react-table\";\nimport type { TableSize } from \"./TableSizeContext\";\nimport type { SortDirection } from \"./TableHead\";\nimport type {\n ColumnWidth,\n DataTableIcon,\n QualifierContentType,\n QualifierColumn,\n DataColumn,\n DisplayColumn,\n ActionsColumn,\n} from \"./types\";\n\n// ---------------------------------------------------------------------------\n// Qualifier column config\n// ---------------------------------------------------------------------------\n\ninterface QualifierConfig<TData> {\n /** Content type for body-row `<TableQualifier>`. @default \"simple\" */\n content?: QualifierContentType;\n /** Return the icon component to render for a row (for \"icon\" content). */\n getContent?: (row: TData) => DataTableIcon;\n /** Return the image URL to render for a row (for \"image\" content). */\n getImageSrc?: (row: TData) => string;\n /** Return the image alt text for a row (for \"image\" content). @default \"\" */\n getImageAlt?: (row: TData) => string;\n /** Show a tinted background container behind the content. @default false */\n background?: boolean;\n /** Icon size preset. `\"lg\"` = 28/24, `\"md\"` = 20/16. @default \"md\" */\n iconSize?: \"lg\" | \"md\";\n}\n\n// ---------------------------------------------------------------------------\n// Data column config\n// ---------------------------------------------------------------------------\n\ninterface DataColumnConfig<TData, TValue> {\n /** Column header label. */\n header: string;\n /** Custom cell renderer. If omitted, the value is rendered as a string. */\n cell?: (value: TValue, row: TData) => ReactNode;\n /** Enable sorting for this column. @default true */\n enableSorting?: boolean;\n /** Enable resizing for this column. @default true */\n enableResizing?: boolean;\n /** Enable hiding for this column. @default true */\n enableHiding?: boolean;\n /** Override the sort icon for this column. */\n icon?: (sorted: SortDirection) => DataTableIcon;\n /** Column weight for proportional distribution. @default 20 */\n weight?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Display column config\n// ---------------------------------------------------------------------------\n\ninterface DisplayColumnConfig<TData> {\n /** Unique column ID. */\n id: string;\n /** Column header label. */\n header?: string;\n /** Cell renderer. */\n cell: (row: TData) => ReactNode;\n /** Column width config. */\n width: ColumnWidth;\n /** Enable hiding. @default true */\n enableHiding?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Actions column config\n// ---------------------------------------------------------------------------\n\ninterface ActionsConfig<TData> {\n /** Show column visibility popover. @default true */\n showColumnVisibility?: boolean;\n /** Show sorting popover. @default true */\n showSorting?: boolean;\n /** Footer text for the sorting popover. */\n sortingFooterText?: string;\n /** Optional cell renderer for row-level action buttons. */\n cell?: (row: TData) => ReactNode;\n}\n\n// ---------------------------------------------------------------------------\n// Builder return type\n// ---------------------------------------------------------------------------\n\ninterface TableColumnsBuilder<TData> {\n /** Create a qualifier (leading avatar/checkbox) column. */\n qualifier(config?: QualifierConfig<TData>): QualifierColumn<TData>;\n\n /** Create a data (accessor) column. */\n column<TKey extends DeepKeys<TData>>(\n accessor: TKey,\n config: DataColumnConfig<TData, DeepValue<TData, TKey>>\n ): DataColumn<TData>;\n\n /** Create a display (non-accessor) column. */\n displayColumn(config: DisplayColumnConfig<TData>): DisplayColumn<TData>;\n\n /** Create an actions column (visibility/sorting popovers). */\n actions(config?: ActionsConfig<TData>): ActionsColumn<TData>;\n}\n\n// ---------------------------------------------------------------------------\n// Factory\n// ---------------------------------------------------------------------------\n\n/**\n * Creates a typed column builder for a given row type.\n *\n * Internally uses TanStack's `createColumnHelper<TData>()` to get free\n * `DeepKeys`/`DeepValue` inference for accessor columns.\n *\n * **Important**: Define columns at module scope or wrap in `useMemo` to avoid\n * creating new array references per render.\n *\n * @example\n * ```ts\n * const tc = createTableColumns<TeamMember>();\n * const columns = [\n * tc.qualifier({ content: \"icon\", getContent: () => UserIcon }),\n * tc.column(\"name\", { header: \"Name\", weight: 23 }),\n * tc.column(\"email\", { header: \"Email\", weight: 28 }),\n * tc.actions(),\n * ];\n * ```\n */\nexport function createTableColumns<TData>(): TableColumnsBuilder<TData> {\n const helper = createColumnHelper<TData>();\n\n return {\n qualifier(config?: QualifierConfig<TData>): QualifierColumn<TData> {\n const content = config?.content ?? \"simple\";\n\n const def: ColumnDef<TData, unknown> = helper.display({\n id: \"qualifier\",\n enableResizing: false,\n enableSorting: false,\n enableHiding: false,\n // Cell rendering is handled by DataTable based on the qualifier config\n cell: () => null,\n });\n\n return {\n kind: \"qualifier\",\n id: \"qualifier\",\n def,\n width: (size: TableSize) =>\n size === \"md\" ? { fixed: 36 } : { fixed: 44 },\n content,\n getContent: config?.getContent,\n getImageSrc: config?.getImageSrc,\n getImageAlt: config?.getImageAlt,\n background: config?.background,\n iconSize: config?.iconSize,\n };\n },\n\n column<TKey extends DeepKeys<TData>>(\n accessor: TKey,\n config: DataColumnConfig<TData, DeepValue<TData, TKey>>\n ): DataColumn<TData> {\n const {\n header,\n cell,\n enableSorting = true,\n enableResizing = true,\n enableHiding = true,\n icon,\n weight = 20,\n } = config;\n\n const accessorDef = helper.accessor(accessor, {\n header,\n enableSorting,\n enableResizing,\n enableHiding,\n cell: cell\n ? (info: CellContext<TData, DeepValue<TData, TKey>>) =>\n cell(info.getValue(), info.row.original)\n : (info: CellContext<TData, DeepValue<TData, TKey>>) => {\n // Default renderer: stringify the accessor value. TanStack's\n // built-in default is not reliably applied when the DataTable\n // re-renders cells via `flexRender(columnDef.cell, ...)`, so we\n // provide an explicit one.\n const value = info.getValue();\n return value == null ? null : String(value);\n },\n });\n const def = accessorDef as unknown as ColumnDef<TData, unknown>;\n\n return {\n kind: \"data\",\n id: accessor as string,\n def,\n width: { weight, minWidth: Math.max(header.length * 8 + 40, 80) },\n icon,\n };\n },\n\n displayColumn(config: DisplayColumnConfig<TData>): DisplayColumn<TData> {\n const { id, header, cell, width, enableHiding = true } = config;\n\n const def: ColumnDef<TData, unknown> = helper.display({\n id,\n header: header ?? undefined,\n enableHiding,\n enableSorting: false,\n enableResizing: false,\n cell: (info) => cell(info.row.original),\n });\n\n return {\n kind: \"display\",\n id,\n def,\n width,\n };\n },\n\n actions(config?: ActionsConfig<TData>): ActionsColumn<TData> {\n const def: ColumnDef<TData, unknown> = {\n id: \"__actions\",\n enableHiding: false,\n enableSorting: false,\n enableResizing: false,\n // Header rendering is handled by DataTable based on the actions config\n header: () => null,\n cell: config?.cell\n ? (info: CellContext<TData, unknown>) =>\n config.cell!(info.row.original)\n : () => null,\n };\n\n const showVisibility = config?.showColumnVisibility ?? true;\n const showSorting = config?.showSorting ?? true;\n const buttonCount = (showVisibility ? 1 : 0) + (showSorting ? 1 : 0);\n\n // Icon button sizes: \"md\" button = 28px, \"sm\" button = 24px\n const BUTTON_MD = 28;\n const BUTTON_SM = 24;\n const PADDING = 8;\n\n return {\n kind: \"actions\",\n id: \"__actions\",\n def,\n width: (size: TableSize) => ({\n fixed:\n Math.max(\n buttonCount * (size === \"md\" ? BUTTON_SM : BUTTON_MD),\n size === \"md\" ? BUTTON_SM : BUTTON_MD\n ) + PADDING,\n }),\n showColumnVisibility: showVisibility,\n showSorting: showSorting,\n sortingFooterText: config?.sortingFooterText,\n };\n },\n };\n}\n"],"names":["unclampedWeight","TableElement","TableHeader","TableBody","SvgHandle","SvgChevronUp","SvgChevronDown","SvgArrowUpDown","SvgEye","SvgXCircle","SvgSliders","SvgCheck","Fragment"],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export interface EmptyWorkspaceSuggestion {
|
|
3
|
+
id: string;
|
|
4
|
+
icon: ReactNode;
|
|
5
|
+
title: string;
|
|
6
|
+
description: string;
|
|
7
|
+
meta: string;
|
|
8
|
+
onActivate?: () => void;
|
|
9
|
+
}
|
|
10
|
+
export interface EmptyWorkspaceProps {
|
|
11
|
+
/** Workspace label shown in the hero. */
|
|
12
|
+
workspaceLabel?: string;
|
|
13
|
+
/** Override the eyebrow above the hero title. */
|
|
14
|
+
eyebrow?: string;
|
|
15
|
+
/** Override the hero title. */
|
|
16
|
+
title?: ReactNode;
|
|
17
|
+
/** Override the hero subtitle. */
|
|
18
|
+
subtitle?: ReactNode;
|
|
19
|
+
/** Replace the suggestion cards. */
|
|
20
|
+
suggestions?: EmptyWorkspaceSuggestion[];
|
|
21
|
+
/** Footer link to jump straight into chat. */
|
|
22
|
+
onJumpToChat?: () => void;
|
|
23
|
+
}
|
|
24
|
+
export declare const EmptyWorkspace: import('react').ForwardRefExoticComponent<EmptyWorkspaceProps & import('react').RefAttributes<HTMLDivElement>>;
|
|
25
|
+
//# sourceMappingURL=EmptyWorkspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmptyWorkspace.d.ts","sourceRoot":"","sources":["../../../src/templates/EmptyWorkspace/EmptyWorkspace.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAWnD,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,yCAAyC;IACzC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,oCAAoC;IACpC,WAAW,CAAC,EAAE,wBAAwB,EAAE,CAAC;IACzC,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AA6BD,eAAO,MAAM,cAAc,gHA2D1B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/EmptyWorkspace/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export interface Forbidden403Workspace {
|
|
3
|
+
id: string;
|
|
4
|
+
label: string;
|
|
5
|
+
hint?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface Forbidden403Props {
|
|
8
|
+
/** Workspace the user attempted to open. */
|
|
9
|
+
workspaceLabel?: string;
|
|
10
|
+
/** Email shown in the "signed in as" block. */
|
|
11
|
+
userEmail?: string;
|
|
12
|
+
/** Custom title. */
|
|
13
|
+
title?: ReactNode;
|
|
14
|
+
/** Custom body copy. */
|
|
15
|
+
description?: ReactNode;
|
|
16
|
+
/** Workspaces the user CAN access, used in the switcher dropdown. */
|
|
17
|
+
workspaces?: Forbidden403Workspace[];
|
|
18
|
+
/** Fires when the primary CTA is pressed. */
|
|
19
|
+
onRequestAccess?: () => void;
|
|
20
|
+
/** Fires when a workspace is chosen from the dropdown. */
|
|
21
|
+
onSwitchWorkspace?: (workspace: Forbidden403Workspace) => void;
|
|
22
|
+
}
|
|
23
|
+
export declare const Forbidden403: import('react').ForwardRefExoticComponent<Forbidden403Props & import('react').RefAttributes<HTMLDivElement>>;
|
|
24
|
+
//# sourceMappingURL=Forbidden403.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Forbidden403.d.ts","sourceRoot":"","sources":["../../../src/templates/Forbidden403/Forbidden403.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAcnD,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,4CAA4C;IAC5C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,wBAAwB;IACxB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,qEAAqE;IACrE,UAAU,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACrC,6CAA6C;IAC7C,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,qBAAqB,KAAK,IAAI,CAAC;CAChE;AAQD,eAAO,MAAM,YAAY,8GAoEvB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/Forbidden403/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export interface NotFound404Props {
|
|
3
|
+
/** Workspace label shown on the primary CTA. */
|
|
4
|
+
workspaceLabel?: string;
|
|
5
|
+
/** Custom title; defaults to "We couldn't find that page". */
|
|
6
|
+
title?: ReactNode;
|
|
7
|
+
/** Custom body copy. */
|
|
8
|
+
description?: ReactNode;
|
|
9
|
+
/** Fires when the search field is submitted. */
|
|
10
|
+
onSearch?: (query: string) => void;
|
|
11
|
+
/** Fires when the primary CTA is pressed. */
|
|
12
|
+
onBack?: () => void;
|
|
13
|
+
/** Fires when the secondary CTA is pressed. */
|
|
14
|
+
onStatus?: () => void;
|
|
15
|
+
}
|
|
16
|
+
export declare const NotFound404: import('react').ForwardRefExoticComponent<NotFound404Props & import('react').RefAttributes<HTMLDivElement>>;
|
|
17
|
+
//# sourceMappingURL=NotFound404.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NotFound404.d.ts","sourceRoot":"","sources":["../../../src/templates/NotFound404/NotFound404.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAOnD,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,wBAAwB;IACxB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,eAAO,MAAM,WAAW,6GAsDtB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/NotFound404/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export type NotificationKind = "auth" | "billing" | "mention" | "indexing" | "agent";
|
|
3
|
+
export type NotificationTone = "brand" | "success" | "warning" | "danger" | "purple";
|
|
4
|
+
export interface Notification {
|
|
5
|
+
id: string;
|
|
6
|
+
kind: NotificationKind;
|
|
7
|
+
tone: NotificationTone;
|
|
8
|
+
title: string;
|
|
9
|
+
snippet: string;
|
|
10
|
+
body: ReactNode;
|
|
11
|
+
source: string;
|
|
12
|
+
receivedAt: string;
|
|
13
|
+
read?: boolean;
|
|
14
|
+
actor?: {
|
|
15
|
+
name: string;
|
|
16
|
+
initials: string;
|
|
17
|
+
role: string;
|
|
18
|
+
};
|
|
19
|
+
details?: {
|
|
20
|
+
key: string;
|
|
21
|
+
value: ReactNode;
|
|
22
|
+
}[];
|
|
23
|
+
}
|
|
24
|
+
export interface NotificationFilter {
|
|
25
|
+
id: string;
|
|
26
|
+
label: string;
|
|
27
|
+
icon: ReactNode;
|
|
28
|
+
count: number;
|
|
29
|
+
divider?: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface NotificationsInboxProps {
|
|
32
|
+
/** Workspace label shown in the filter rail header. */
|
|
33
|
+
workspaceLabel?: string;
|
|
34
|
+
/** Initial filter id. */
|
|
35
|
+
defaultFilter?: string;
|
|
36
|
+
/** Provide notifications; falls back to a Sophea sample set. */
|
|
37
|
+
notifications?: Notification[];
|
|
38
|
+
/** Override the filter list. */
|
|
39
|
+
filters?: NotificationFilter[];
|
|
40
|
+
}
|
|
41
|
+
export declare const NotificationsInbox: import('react').ForwardRefExoticComponent<NotificationsInboxProps & import('react').RefAttributes<HTMLDivElement>>;
|
|
42
|
+
//# sourceMappingURL=NotificationsInbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NotificationsInbox.d.ts","sourceRoot":"","sources":["../../../src/templates/NotificationsInbox/NotificationsInbox.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAe7D,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;AACrF,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErF,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,gBAAgB,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACzD,OAAO,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,SAAS,CAAA;KAAE,EAAE,CAAC;CAC/C;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yBAAyB;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B,gCAAgC;IAChC,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAChC;AAwID,eAAO,MAAM,kBAAkB,oHA8I9B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/NotificationsInbox/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type OnboardingStepId = "workspace" | "team" | "source" | "agent";
|
|
2
|
+
export interface OnboardingWizardProps {
|
|
3
|
+
/** Workspace label rendered in the rail. */
|
|
4
|
+
workspaceLabel?: string;
|
|
5
|
+
/** Initial step (uncontrolled). */
|
|
6
|
+
defaultStep?: OnboardingStepId;
|
|
7
|
+
/** Controlled step. */
|
|
8
|
+
step?: OnboardingStepId;
|
|
9
|
+
onStepChange?: (next: OnboardingStepId) => void;
|
|
10
|
+
onFinish?: () => void;
|
|
11
|
+
onCancel?: () => void;
|
|
12
|
+
}
|
|
13
|
+
export declare const OnboardingWizard: import('react').ForwardRefExoticComponent<OnboardingWizardProps & import('react').RefAttributes<HTMLDivElement>>;
|
|
14
|
+
//# sourceMappingURL=OnboardingWizard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OnboardingWizard.d.ts","sourceRoot":"","sources":["../../../src/templates/OnboardingWizard/OnboardingWizard.tsx"],"names":[],"mappings":"AAmBA,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEzE,MAAM,WAAW,qBAAqB;IACpC,4CAA4C;IAC5C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mCAAmC;IACnC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,uBAAuB;IACvB,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AA+DD,eAAO,MAAM,gBAAgB,kHAwH5B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/OnboardingWizard/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC"}
|