@d4gger/design-system 3.0.1 → 4.0.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 +19 -0
- package/dist/components/accordion.css +9 -2
- package/dist/components/alert/Alert.cjs +11 -7
- package/dist/components/alert/Alert.cjs.map +2 -2
- package/dist/components/alert/Alert.d.cts.map +1 -1
- package/dist/components/alert/Alert.d.mts.map +1 -1
- package/dist/components/alert/Alert.d.ts.map +1 -1
- package/dist/components/alert/Alert.js +12 -8
- package/dist/components/alert/Alert.js.map +2 -2
- package/dist/components/alert.css +13 -0
- package/dist/components/article-nodes.css +16 -1
- package/dist/components/articleNodes/ArticleNodes.cjs +46 -5
- package/dist/components/articleNodes/ArticleNodes.cjs.map +2 -2
- package/dist/components/articleNodes/ArticleNodes.d.cts +7 -3
- package/dist/components/articleNodes/ArticleNodes.d.cts.map +1 -1
- package/dist/components/articleNodes/ArticleNodes.d.mts +7 -3
- package/dist/components/articleNodes/ArticleNodes.d.mts.map +1 -1
- package/dist/components/articleNodes/ArticleNodes.d.ts +7 -3
- package/dist/components/articleNodes/ArticleNodes.d.ts.map +1 -1
- package/dist/components/articleNodes/ArticleNodes.js +46 -5
- package/dist/components/articleNodes/ArticleNodes.js.map +2 -2
- package/dist/components/articleNodes/articleExtensions.cjs +21 -4
- package/dist/components/articleNodes/articleExtensions.cjs.map +2 -2
- package/dist/components/articleNodes/articleExtensions.d.cts +8 -2
- package/dist/components/articleNodes/articleExtensions.d.cts.map +1 -1
- package/dist/components/articleNodes/articleExtensions.d.mts +8 -2
- package/dist/components/articleNodes/articleExtensions.d.mts.map +1 -1
- package/dist/components/articleNodes/articleExtensions.d.ts +8 -2
- package/dist/components/articleNodes/articleExtensions.d.ts.map +1 -1
- package/dist/components/articleNodes/articleExtensions.js +21 -4
- package/dist/components/articleNodes/articleExtensions.js.map +2 -2
- package/dist/components/articleNodes/articleNodeViews.cjs +154 -0
- package/dist/components/articleNodes/articleNodeViews.cjs.map +7 -0
- package/dist/components/articleNodes/articleNodeViews.d.cts +3 -0
- package/dist/components/articleNodes/articleNodeViews.d.cts.map +1 -0
- package/dist/components/articleNodes/articleNodeViews.d.mts +3 -0
- package/dist/components/articleNodes/articleNodeViews.d.mts.map +1 -0
- package/dist/components/articleNodes/articleNodeViews.d.ts +3 -0
- package/dist/components/articleNodes/articleNodeViews.d.ts.map +1 -0
- package/dist/components/articleNodes/articleNodeViews.js +124 -0
- package/dist/components/articleNodes/articleNodeViews.js.map +7 -0
- package/dist/components/articleNodes/articleNodes.props.cjs.map +1 -1
- package/dist/components/articleNodes/articleNodes.props.d.cts +25 -2
- package/dist/components/articleNodes/articleNodes.props.d.cts.map +1 -1
- package/dist/components/articleNodes/articleNodes.props.d.mts +25 -2
- package/dist/components/articleNodes/articleNodes.props.d.mts.map +1 -1
- package/dist/components/articleNodes/articleNodes.props.d.ts +25 -2
- package/dist/components/articleNodes/articleNodes.props.d.ts.map +1 -1
- package/dist/components/banner.css +5 -4
- package/dist/components/blockquote.css +7 -4
- package/dist/components/bottom-dock.css +132 -0
- package/dist/components/bottomDock/BottomDock.cjs +140 -0
- package/dist/components/bottomDock/BottomDock.cjs.map +7 -0
- package/dist/components/bottomDock/BottomDock.d.cts +25 -0
- package/dist/components/bottomDock/BottomDock.d.cts.map +1 -0
- package/dist/components/bottomDock/BottomDock.d.mts +25 -0
- package/dist/components/bottomDock/BottomDock.d.mts.map +1 -0
- package/dist/components/bottomDock/BottomDock.d.ts +25 -0
- package/dist/components/bottomDock/BottomDock.d.ts.map +1 -0
- package/dist/components/bottomDock/BottomDock.js +110 -0
- package/dist/components/bottomDock/BottomDock.js.map +7 -0
- package/dist/components/bottomDock/bottomDock.props.cjs +49 -0
- package/dist/components/bottomDock/bottomDock.props.cjs.map +7 -0
- package/dist/components/bottomDock/bottomDock.props.d.cts +29 -0
- package/dist/components/bottomDock/bottomDock.props.d.cts.map +1 -0
- package/dist/components/bottomDock/bottomDock.props.d.mts +29 -0
- package/dist/components/bottomDock/bottomDock.props.d.mts.map +1 -0
- package/dist/components/bottomDock/bottomDock.props.d.ts +29 -0
- package/dist/components/bottomDock/bottomDock.props.d.ts.map +1 -0
- package/dist/components/bottomDock/bottomDock.props.js +29 -0
- package/dist/components/bottomDock/bottomDock.props.js.map +7 -0
- package/dist/components/breadcrumb.css +24 -3
- package/dist/components/callout.css +20 -7
- package/dist/components/card.css +8 -0
- package/dist/components/code.css +29 -13
- package/dist/components/collapsible/Collapsible.cjs +4 -0
- package/dist/components/collapsible/Collapsible.cjs.map +2 -2
- package/dist/components/collapsible/Collapsible.d.cts.map +1 -1
- package/dist/components/collapsible/Collapsible.d.mts.map +1 -1
- package/dist/components/collapsible/Collapsible.d.ts.map +1 -1
- package/dist/components/collapsible/Collapsible.js +4 -0
- package/dist/components/collapsible/Collapsible.js.map +2 -2
- package/dist/components/collapsible.css +10 -1
- package/dist/components/command.css +0 -2
- package/dist/components/comment-thread.css +15 -7
- package/dist/components/commentThread/CommentThread.cjs +45 -17
- package/dist/components/commentThread/CommentThread.cjs.map +2 -2
- package/dist/components/commentThread/CommentThread.d.cts +6 -6
- package/dist/components/commentThread/CommentThread.d.cts.map +1 -1
- package/dist/components/commentThread/CommentThread.d.mts +6 -6
- package/dist/components/commentThread/CommentThread.d.mts.map +1 -1
- package/dist/components/commentThread/CommentThread.d.ts +6 -6
- package/dist/components/commentThread/CommentThread.d.ts.map +1 -1
- package/dist/components/commentThread/CommentThread.js +45 -17
- package/dist/components/commentThread/CommentThread.js.map +2 -2
- package/dist/components/commentThread/commentThread.props.cjs.map +1 -1
- package/dist/components/commentThread/commentThread.props.d.cts +24 -0
- package/dist/components/commentThread/commentThread.props.d.cts.map +1 -1
- package/dist/components/commentThread/commentThread.props.d.mts +24 -0
- package/dist/components/commentThread/commentThread.props.d.mts.map +1 -1
- package/dist/components/commentThread/commentThread.props.d.ts +24 -0
- package/dist/components/commentThread/commentThread.props.d.ts.map +1 -1
- package/dist/components/config-drawer.css +7 -3
- package/dist/components/configDrawer/ConfigDrawer.cjs +1 -1
- package/dist/components/configDrawer/ConfigDrawer.cjs.map +2 -2
- package/dist/components/configDrawer/ConfigDrawer.js +1 -1
- package/dist/components/configDrawer/ConfigDrawer.js.map +2 -2
- package/dist/components/context-menu.css +3 -1
- package/dist/components/contextMenu/ContextMenu.cjs +37 -6
- package/dist/components/contextMenu/ContextMenu.cjs.map +2 -2
- package/dist/components/contextMenu/ContextMenu.d.cts +1 -1
- package/dist/components/contextMenu/ContextMenu.d.cts.map +1 -1
- package/dist/components/contextMenu/ContextMenu.d.mts +1 -1
- package/dist/components/contextMenu/ContextMenu.d.mts.map +1 -1
- package/dist/components/contextMenu/ContextMenu.d.ts +1 -1
- package/dist/components/contextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/components/contextMenu/ContextMenu.js +37 -6
- package/dist/components/contextMenu/ContextMenu.js.map +2 -2
- package/dist/components/drawer.css +23 -6
- package/dist/components/dropdownMenu/DropdownMenu.cjs +10 -5
- package/dist/components/dropdownMenu/DropdownMenu.cjs.map +2 -2
- package/dist/components/dropdownMenu/DropdownMenu.d.cts.map +1 -1
- package/dist/components/dropdownMenu/DropdownMenu.d.mts.map +1 -1
- package/dist/components/dropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/components/dropdownMenu/DropdownMenu.js +10 -5
- package/dist/components/dropdownMenu/DropdownMenu.js.map +2 -2
- package/dist/components/file-upload.css +36 -9
- package/dist/components/floating-panel.css +49 -18
- package/dist/components/floatingPanel/FloatingPanel.cjs +156 -58
- package/dist/components/floatingPanel/FloatingPanel.cjs.map +2 -2
- package/dist/components/floatingPanel/FloatingPanel.d.cts.map +1 -1
- package/dist/components/floatingPanel/FloatingPanel.d.mts.map +1 -1
- package/dist/components/floatingPanel/FloatingPanel.d.ts.map +1 -1
- package/dist/components/floatingPanel/FloatingPanel.js +156 -58
- package/dist/components/floatingPanel/FloatingPanel.js.map +2 -2
- package/dist/components/grid/Grid.cjs +24 -35
- package/dist/components/grid/Grid.cjs.map +2 -2
- package/dist/components/grid/Grid.d.cts.map +1 -1
- package/dist/components/grid/Grid.d.mts.map +1 -1
- package/dist/components/grid/Grid.d.ts.map +1 -1
- package/dist/components/grid/Grid.js +24 -35
- package/dist/components/grid/Grid.js.map +2 -2
- package/dist/components/heading/Heading.cjs +1 -8
- package/dist/components/heading/Heading.cjs.map +2 -2
- package/dist/components/heading/Heading.d.cts.map +1 -1
- package/dist/components/heading/Heading.d.mts.map +1 -1
- package/dist/components/heading/Heading.d.ts.map +1 -1
- package/dist/components/heading/Heading.js +1 -8
- package/dist/components/heading/Heading.js.map +2 -2
- package/dist/components/heading/heading.props.cjs +9 -9
- package/dist/components/heading/heading.props.cjs.map +2 -2
- package/dist/components/heading/heading.props.d.cts +42 -43
- package/dist/components/heading/heading.props.d.cts.map +1 -1
- package/dist/components/heading/heading.props.d.mts +42 -43
- package/dist/components/heading/heading.props.d.mts.map +1 -1
- package/dist/components/heading/heading.props.d.ts +42 -43
- package/dist/components/heading/heading.props.d.ts.map +1 -1
- package/dist/components/heading/heading.props.js +9 -9
- package/dist/components/heading/heading.props.js.map +2 -2
- package/dist/components/heading.css +127 -104
- package/dist/components/hover-card.css +5 -2
- package/dist/components/icon/Icon.cjs +3 -0
- package/dist/components/icon/Icon.cjs.map +2 -2
- package/dist/components/icon/Icon.d.cts +5 -1
- package/dist/components/icon/Icon.d.cts.map +1 -1
- package/dist/components/icon/Icon.d.mts +5 -1
- package/dist/components/icon/Icon.d.mts.map +1 -1
- package/dist/components/icon/Icon.d.ts +5 -1
- package/dist/components/icon/Icon.d.ts.map +1 -1
- package/dist/components/icon/Icon.js +4 -0
- package/dist/components/icon/Icon.js.map +2 -2
- package/dist/components/icon/icons.cjs +2 -0
- package/dist/components/icon/icons.cjs.map +2 -2
- package/dist/components/icon/icons.d.cts +5 -0
- package/dist/components/icon/icons.d.cts.map +1 -1
- package/dist/components/icon/icons.d.mts +5 -0
- package/dist/components/icon/icons.d.mts.map +1 -1
- package/dist/components/icon/icons.d.ts +5 -0
- package/dist/components/icon/icons.d.ts.map +1 -1
- package/dist/components/icon/icons.js +2 -0
- package/dist/components/icon/icons.js.map +2 -2
- package/dist/components/index.cjs +1 -0
- package/dist/components/index.cjs.map +2 -2
- package/dist/components/index.d.cts +1 -0
- package/dist/components/index.d.cts.map +1 -1
- package/dist/components/index.d.mts +1 -0
- package/dist/components/index.d.mts.map +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +1 -0
- package/dist/components/index.js.map +2 -2
- package/dist/components/label.css +3 -0
- package/dist/components/link.css +33 -97
- package/dist/components/notification-center.css +49 -9
- package/dist/components/notificationCenter/NotificationCenter.cjs +21 -16
- package/dist/components/notificationCenter/NotificationCenter.cjs.map +2 -2
- package/dist/components/notificationCenter/NotificationCenter.d.cts.map +1 -1
- package/dist/components/notificationCenter/NotificationCenter.d.mts.map +1 -1
- package/dist/components/notificationCenter/NotificationCenter.d.ts.map +1 -1
- package/dist/components/notificationCenter/NotificationCenter.js +22 -17
- package/dist/components/notificationCenter/NotificationCenter.js.map +2 -2
- package/dist/components/pills/Pills.cjs +1 -1
- package/dist/components/pills/Pills.cjs.map +2 -2
- package/dist/components/pills/Pills.js +2 -2
- package/dist/components/pills/Pills.js.map +2 -2
- package/dist/components/pills.css +6 -0
- package/dist/components/popover.css +45 -6
- package/dist/components/prose.css +3 -3
- package/dist/components/qr-code.css +5 -2
- package/dist/components/qrCode/QrCode.cjs +14 -11
- package/dist/components/qrCode/QrCode.cjs.map +2 -2
- package/dist/components/qrCode/QrCode.d.cts.map +1 -1
- package/dist/components/qrCode/QrCode.d.mts.map +1 -1
- package/dist/components/qrCode/QrCode.d.ts.map +1 -1
- package/dist/components/qrCode/QrCode.js +14 -11
- package/dist/components/qrCode/QrCode.js.map +2 -2
- package/dist/components/resizable.css +20 -4
- package/dist/components/rich-text-editor.css +50 -14
- package/dist/components/richTextEditor/EditorTools.cjs +226 -0
- package/dist/components/richTextEditor/EditorTools.cjs.map +7 -0
- package/dist/components/richTextEditor/EditorTools.d.cts +22 -0
- package/dist/components/richTextEditor/EditorTools.d.cts.map +1 -0
- package/dist/components/richTextEditor/EditorTools.d.mts +22 -0
- package/dist/components/richTextEditor/EditorTools.d.mts.map +1 -0
- package/dist/components/richTextEditor/EditorTools.d.ts +22 -0
- package/dist/components/richTextEditor/EditorTools.d.ts.map +1 -0
- package/dist/components/richTextEditor/EditorTools.js +196 -0
- package/dist/components/richTextEditor/EditorTools.js.map +7 -0
- package/dist/components/richTextEditor/MentionSuggestions.cjs +96 -0
- package/dist/components/richTextEditor/MentionSuggestions.cjs.map +7 -0
- package/dist/components/richTextEditor/MentionSuggestions.d.cts +7 -0
- package/dist/components/richTextEditor/MentionSuggestions.d.cts.map +1 -0
- package/dist/components/richTextEditor/MentionSuggestions.d.mts +7 -0
- package/dist/components/richTextEditor/MentionSuggestions.d.mts.map +1 -0
- package/dist/components/richTextEditor/MentionSuggestions.d.ts +7 -0
- package/dist/components/richTextEditor/MentionSuggestions.d.ts.map +1 -0
- package/dist/components/richTextEditor/MentionSuggestions.js +66 -0
- package/dist/components/richTextEditor/MentionSuggestions.js.map +7 -0
- package/dist/components/richTextEditor/RichTextEditor.cjs +53 -206
- package/dist/components/richTextEditor/RichTextEditor.cjs.map +3 -3
- package/dist/components/richTextEditor/RichTextEditor.d.cts +17 -7
- package/dist/components/richTextEditor/RichTextEditor.d.cts.map +1 -1
- package/dist/components/richTextEditor/RichTextEditor.d.mts +17 -7
- package/dist/components/richTextEditor/RichTextEditor.d.mts.map +1 -1
- package/dist/components/richTextEditor/RichTextEditor.d.ts +17 -7
- package/dist/components/richTextEditor/RichTextEditor.d.ts.map +1 -1
- package/dist/components/richTextEditor/RichTextEditor.js +53 -206
- package/dist/components/richTextEditor/RichTextEditor.js.map +3 -3
- package/dist/components/richTextEditor/editorTokens.cjs +75 -0
- package/dist/components/richTextEditor/editorTokens.cjs.map +7 -0
- package/dist/components/richTextEditor/editorTokens.d.cts +21 -0
- package/dist/components/richTextEditor/editorTokens.d.cts.map +1 -0
- package/dist/components/richTextEditor/editorTokens.d.mts +21 -0
- package/dist/components/richTextEditor/editorTokens.d.mts.map +1 -0
- package/dist/components/richTextEditor/editorTokens.d.ts +21 -0
- package/dist/components/richTextEditor/editorTokens.d.ts.map +1 -0
- package/dist/components/richTextEditor/editorTokens.js +55 -0
- package/dist/components/richTextEditor/editorTokens.js.map +7 -0
- package/dist/components/scroll-area.css +12 -0
- package/dist/components/scrollArea/ScrollArea.cjs +12 -1
- package/dist/components/scrollArea/ScrollArea.cjs.map +2 -2
- package/dist/components/scrollArea/ScrollArea.d.cts.map +1 -1
- package/dist/components/scrollArea/ScrollArea.d.mts.map +1 -1
- package/dist/components/scrollArea/ScrollArea.d.ts.map +1 -1
- package/dist/components/scrollArea/ScrollArea.js +12 -1
- package/dist/components/scrollArea/ScrollArea.js.map +2 -2
- package/dist/components/segmentedControl/SegmentedControl.cjs +2 -2
- package/dist/components/segmentedControl/SegmentedControl.cjs.map +2 -2
- package/dist/components/segmentedControl/SegmentedControl.d.cts.map +1 -1
- package/dist/components/segmentedControl/SegmentedControl.d.mts.map +1 -1
- package/dist/components/segmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/components/segmentedControl/SegmentedControl.js +2 -2
- package/dist/components/segmentedControl/SegmentedControl.js.map +2 -2
- package/dist/components/separator.css +3 -9
- package/dist/components/sidebar/Sidebar.cjs +12 -4
- package/dist/components/sidebar/Sidebar.cjs.map +2 -2
- package/dist/components/sidebar/Sidebar.d.cts +4 -1
- package/dist/components/sidebar/Sidebar.d.cts.map +1 -1
- package/dist/components/sidebar/Sidebar.d.mts +4 -1
- package/dist/components/sidebar/Sidebar.d.mts.map +1 -1
- package/dist/components/sidebar/Sidebar.d.ts +4 -1
- package/dist/components/sidebar/Sidebar.d.ts.map +1 -1
- package/dist/components/sidebar/Sidebar.js +12 -4
- package/dist/components/sidebar/Sidebar.js.map +2 -2
- package/dist/components/sidebar/sidebar.props.cjs +8 -1
- package/dist/components/sidebar/sidebar.props.cjs.map +2 -2
- package/dist/components/sidebar/sidebar.props.d.cts +9 -1
- package/dist/components/sidebar/sidebar.props.d.cts.map +1 -1
- package/dist/components/sidebar/sidebar.props.d.mts +9 -1
- package/dist/components/sidebar/sidebar.props.d.mts.map +1 -1
- package/dist/components/sidebar/sidebar.props.d.ts +9 -1
- package/dist/components/sidebar/sidebar.props.d.ts.map +1 -1
- package/dist/components/sidebar/sidebar.props.js +8 -1
- package/dist/components/sidebar/sidebar.props.js.map +2 -2
- package/dist/components/sidebar.css +28 -0
- package/dist/components/sonner.css +78 -16
- package/dist/components/stepper.css +23 -12
- package/dist/components/tab-nav.css +25 -13
- package/dist/components/tabNav/TabNav.cjs +1 -4
- package/dist/components/tabNav/TabNav.cjs.map +2 -2
- package/dist/components/tabNav/TabNav.d.cts.map +1 -1
- package/dist/components/tabNav/TabNav.d.mts.map +1 -1
- package/dist/components/tabNav/TabNav.d.ts.map +1 -1
- package/dist/components/tabNav/TabNav.js +1 -4
- package/dist/components/tabNav/TabNav.js.map +2 -2
- package/dist/components/table-of-contents.css +12 -2
- package/dist/components/tableOfContents/TableOfContents.cjs +11 -4
- package/dist/components/tableOfContents/TableOfContents.cjs.map +2 -2
- package/dist/components/tableOfContents/TableOfContents.d.cts.map +1 -1
- package/dist/components/tableOfContents/TableOfContents.d.mts.map +1 -1
- package/dist/components/tableOfContents/TableOfContents.d.ts.map +1 -1
- package/dist/components/tableOfContents/TableOfContents.js +11 -4
- package/dist/components/tableOfContents/TableOfContents.js.map +2 -2
- package/dist/components/tabs/Tabs.cjs +39 -54
- package/dist/components/tabs/Tabs.cjs.map +2 -2
- package/dist/components/tabs/Tabs.d.cts.map +1 -1
- package/dist/components/tabs/Tabs.d.mts.map +1 -1
- package/dist/components/tabs/Tabs.d.ts.map +1 -1
- package/dist/components/tabs/Tabs.js +39 -54
- package/dist/components/tabs/Tabs.js.map +2 -2
- package/dist/components/tabs.css +52 -7
- package/dist/components/text/text.props.cjs +9 -9
- package/dist/components/text/text.props.cjs.map +2 -2
- package/dist/components/text/text.props.d.cts +42 -43
- package/dist/components/text/text.props.d.cts.map +1 -1
- package/dist/components/text/text.props.d.mts +42 -43
- package/dist/components/text/text.props.d.mts.map +1 -1
- package/dist/components/text/text.props.d.ts +42 -43
- package/dist/components/text/text.props.d.ts.map +1 -1
- package/dist/components/text/text.props.js +9 -9
- package/dist/components/text/text.props.js.map +2 -2
- package/dist/components/text/typography.props.cjs +32 -0
- package/dist/components/text/typography.props.cjs.map +7 -0
- package/dist/components/text/typography.props.d.cts +3 -0
- package/dist/components/text/typography.props.d.cts.map +1 -0
- package/dist/components/text/typography.props.d.mts +3 -0
- package/dist/components/text/typography.props.d.mts.map +1 -0
- package/dist/components/text/typography.props.d.ts +3 -0
- package/dist/components/text/typography.props.d.ts.map +1 -0
- package/dist/components/text/typography.props.js +12 -0
- package/dist/components/text/typography.props.js.map +7 -0
- package/dist/components/text-field.css +1 -0
- package/dist/components/text.css +41 -6
- package/dist/components/theme-panel.css +6 -0
- package/dist/components/toast/Toast.cjs +3 -1
- package/dist/components/toast/Toast.cjs.map +2 -2
- package/dist/components/toast/Toast.d.cts.map +1 -1
- package/dist/components/toast/Toast.d.mts.map +1 -1
- package/dist/components/toast/Toast.d.ts.map +1 -1
- package/dist/components/toast/Toast.js +3 -1
- package/dist/components/toast/Toast.js.map +2 -2
- package/dist/components/toast.css +36 -36
- package/dist/components/toggle-tip.css +58 -9
- package/dist/components/toggleTip/ToggleTip.cjs +9 -5
- package/dist/components/toggleTip/ToggleTip.cjs.map +2 -2
- package/dist/components/toggleTip/ToggleTip.d.cts.map +1 -1
- package/dist/components/toggleTip/ToggleTip.d.mts.map +1 -1
- package/dist/components/toggleTip/ToggleTip.d.ts.map +1 -1
- package/dist/components/toggleTip/ToggleTip.js +9 -5
- package/dist/components/toggleTip/ToggleTip.js.map +2 -2
- package/dist/components/toolbar/Toolbar.cjs +10 -7
- package/dist/components/toolbar/Toolbar.cjs.map +2 -2
- package/dist/components/toolbar/Toolbar.js +10 -7
- package/dist/components/toolbar/Toolbar.js.map +2 -2
- package/dist/components/toolbar.css +58 -4
- package/dist/components/tooltip.css +9 -5
- package/dist/components/tree-view.css +17 -3
- package/dist/components/treeView/TreeView.cjs +76 -21
- package/dist/components/treeView/TreeView.cjs.map +2 -2
- package/dist/components/treeView/TreeView.d.cts.map +1 -1
- package/dist/components/treeView/TreeView.d.mts.map +1 -1
- package/dist/components/treeView/TreeView.d.ts.map +1 -1
- package/dist/components/treeView/TreeView.js +76 -21
- package/dist/components/treeView/TreeView.js.map +2 -2
- package/dist/components.css +1 -0
- package/dist/docs/README.md +1 -0
- package/dist/docs/component-contract.md +4 -3
- package/dist/docs/component-index.json +9 -1
- package/dist/docs/components/accordion.md +5 -36
- package/dist/docs/components/alert.md +17 -10
- package/dist/docs/components/article-nodes.md +59 -2
- package/dist/docs/components/aspect-ratio.md +3 -26
- package/dist/docs/components/banner.md +7 -7
- package/dist/docs/components/blockquote.md +15 -14
- package/dist/docs/components/bottom-dock.md +146 -0
- package/dist/docs/components/box.md +3 -34
- package/dist/docs/components/breadcrumb.md +13 -8
- package/dist/docs/components/callout.md +18 -7
- package/dist/docs/components/card.md +9 -2
- package/dist/docs/components/code.md +33 -220
- package/dist/docs/components/collapsible.md +11 -35
- package/dist/docs/components/command.md +2 -0
- package/dist/docs/components/comment-thread.md +51 -1
- package/dist/docs/components/config-drawer.md +72 -171
- package/dist/docs/components/container.md +2 -0
- package/dist/docs/components/context-menu.md +19 -5
- package/dist/docs/components/dialog.md +3 -1
- package/dist/docs/components/drawer.md +17 -6
- package/dist/docs/components/dropdown-menu.md +11 -2
- package/dist/docs/components/em.md +1 -1
- package/dist/docs/components/file-upload.md +13 -7
- package/dist/docs/components/floating-panel.md +79 -285
- package/dist/docs/components/form.md +4 -0
- package/dist/docs/components/grid.md +11 -60
- package/dist/docs/components/heading.md +35 -32
- package/dist/docs/components/hover-card.md +9 -1
- package/dist/docs/components/kbd.md +2 -0
- package/dist/docs/components/label.md +11 -9
- package/dist/docs/components/link.md +31 -209
- package/dist/docs/components/notification-center.md +24 -14
- package/dist/docs/components/page-header.md +2 -0
- package/dist/docs/components/pagination.md +4 -0
- package/dist/docs/components/pills.md +13 -4
- package/dist/docs/components/popover.md +10 -3
- package/dist/docs/components/prose.md +9 -0
- package/dist/docs/components/qr-code.md +12 -12
- package/dist/docs/components/quote.md +9 -4
- package/dist/docs/components/resizable.md +26 -18
- package/dist/docs/components/rich-text-editor.md +68 -18
- package/dist/docs/components/scroll-area.md +17 -9
- package/dist/docs/components/section.md +3 -38
- package/dist/docs/components/segmented-control.md +1 -1
- package/dist/docs/components/segmented-meter.md +9 -0
- package/dist/docs/components/separator.md +10 -46
- package/dist/docs/components/sidebar.md +17 -3
- package/dist/docs/components/sonner.md +25 -16
- package/dist/docs/components/stepper.md +8 -33
- package/dist/docs/components/strong.md +1 -1
- package/dist/docs/components/tab-nav.md +33 -96
- package/dist/docs/components/table-of-contents.md +8 -2
- package/dist/docs/components/tabs.md +19 -50
- package/dist/docs/components/text-field.md +1 -0
- package/dist/docs/components/text.md +34 -28
- package/dist/docs/components/theme-panel.md +3 -28
- package/dist/docs/components/theme.md +7 -3
- package/dist/docs/components/toast.md +27 -13
- package/dist/docs/components/toggle-tip.md +58 -241
- package/dist/docs/components/toolbar.md +16 -39
- package/dist/docs/components/tooltip.md +13 -7
- package/dist/docs/components/tree-view.md +22 -55
- package/dist/generated/tokens.cjs +1 -0
- package/dist/generated/tokens.cjs.map +2 -2
- package/dist/generated/tokens.d.cts.map +1 -1
- package/dist/generated/tokens.d.mts.map +1 -1
- package/dist/generated/tokens.d.ts.map +1 -1
- package/dist/generated/tokens.js +1 -0
- package/dist/generated/tokens.js.map +2 -2
- package/dist/styles.css +1632 -1300
- package/dist/tokens.css +344 -362
- package/package.json +1 -1
|
@@ -4,7 +4,7 @@ status: canonical
|
|
|
4
4
|
category: Foundations
|
|
5
5
|
archetype: composite
|
|
6
6
|
depends_on:
|
|
7
|
-
-
|
|
7
|
+
- Drawer
|
|
8
8
|
- IconButton
|
|
9
9
|
- Icon
|
|
10
10
|
- SegmentedControl
|
|
@@ -18,205 +18,106 @@ depends_on:
|
|
|
18
18
|
|
|
19
19
|
# ConfigDrawer
|
|
20
20
|
|
|
21
|
-
>
|
|
21
|
+
> Source of truth: package source; this spec mirrors its public contract.
|
|
22
22
|
|
|
23
23
|
## Purpose
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
One preferences drawer inside ThemeProvider, exposing Theme, Accent, Gray,
|
|
26
|
+
Radius, Density, Scaling and Panel BG. Values and persistence belong to
|
|
27
|
+
ThemeProvider; the drawer supplies their controls. Default side is right.
|
|
26
28
|
|
|
27
29
|
## Anatomy & slots
|
|
28
30
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|---|---|---|---|
|
|
35
|
-
| Trigger | `Sheet.Trigger` rendered as `IconButton` (default) or consumer-supplied `trigger` | `dsx-config-drawer__trigger` (class is added when the default trigger renders) | Default trigger is an `IconButton variant="ghost" size="md"` with `aria-label="Open preferences"` and a `settings` `Icon` (size `md`). Consumers can pass a `trigger` prop to replace the default. |
|
|
36
|
-
| Header | `Sheet.Header` + `Sheet.Title` | (inherits `Sheet` styles) | "Preferences" title. |
|
|
37
|
-
| Body | `Flex direction="column" gap="lg"` | `dsx-config-drawer__body` | Scrollable column of `SettingRow` + `Separator` regions. |
|
|
38
|
-
| SettingRow | `Flex direction="row" justify="between" align="center" gap="md"` | `dsx-config-drawer__row` | A label / description / control triplet. The label is a `Label` element; the description (when present) is a `Text variant="label-small" tone="muted"`; the control is whatever the consumer passes as `children`. |
|
|
39
|
-
| SettingRow info | `Flex direction="column" gap="1"` | `dsx-config-drawer__row-info` | The left column of the row, containing the `Label` and the description. |
|
|
40
|
-
| SettingRow control wrapper | `<div>` | `dsx-config-drawer__row-control` | The right column of the row, wrapping the control. |
|
|
41
|
-
| Accent preview swatch | `<span aria-hidden="true">` | `dsx-config-drawer__accent-swatch` + `data-tier` | Non-interactive preview of each accent tier. It does not write `data-accent-color`, because the swatch represents a color value rather than consuming theme scope. |
|
|
42
|
-
| Scaling input (specific) | `NumberInput` | `dsx-config-drawer__scaling-input` | The scaling control. Sized to `7ch` so the percentage fits without breaking the row rhythm. |
|
|
43
|
-
|
|
44
|
-
**Internal layout:**
|
|
45
|
-
|
|
46
|
-
- The default trigger is a ghost `IconButton` with a `settings` icon. Passing the `trigger` prop replaces it entirely.
|
|
47
|
-
- The body is a single scrollable column. Each `SettingRow` is a `flex-direction: row` with `justify-content: space-between`, so the label and control sit on opposite ends of the row.
|
|
48
|
-
- The six default rows (Theme, Accent, Gray, Radius, Density, Scaling) are separated by `Separator` components from the package. The order is fixed and reflects the dependency direction: appearance first, then accent, then gray, then radius, then density, then scaling.
|
|
49
|
-
- Each row's control is a `SegmentedControl` (for the categorical tokens) or a `NumberInput` (for the scaling percentage). The control is wrapped in a `<div class="dsx-config-drawer__row-control">` so it stays right-aligned without leaking the `gap` into the control itself.
|
|
31
|
+
Flat export composing lazily loaded Drawer, Trigger, Content, Header, Title and
|
|
32
|
+
Description. No ConfigDrawer compound slots. Default trigger is an inline ghost
|
|
33
|
+
IconButton size md, named “Open preferences”, with settings Icon. The host owns
|
|
34
|
+
positioning. Title is “Preferences”; VisuallyHidden wraps the DrawerDescription.
|
|
35
|
+
Body composes Flex, Label, Text, SegmentedControl, NumberInput and Separator.
|
|
50
36
|
|
|
51
37
|
## Props contract
|
|
52
38
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
|
56
|
-
|
|
57
|
-
|
|
|
58
|
-
|
|
|
59
|
-
|
|
|
60
|
-
|
|
|
61
|
-
|
|
62
|
-
The root does not accept `asChild` directly; consumers can swap the host element by passing a `trigger` or by wrapping the rendered output themselves. The internal `Sheet.Content` is locked to `side="right"`; left-side drawers are out of scope for this component.
|
|
63
|
-
|
|
64
|
-
**SettingRow props (internal, not exported):**
|
|
65
|
-
|
|
66
|
-
| Prop | Type | Default | Required | Description | Responsive |
|
|
67
|
-
|---|---|---|---|---|---|
|
|
68
|
-
| `label` | `string` | (none) | **yes** | The label rendered as a `Label` element on the left. | no |
|
|
69
|
-
| `description` | `string` | `undefined` | no | Optional helper text rendered under the label as a muted `Text`. | no |
|
|
70
|
-
| `children` | `ReactNode` | (none) | **yes** | The control rendered on the right (typically a `SegmentedControl` or `NumberInput`). | no |
|
|
71
|
-
|
|
72
|
-
`SettingRow` is an internal helper; consumers do not compose their own rows. The six default rows are wired inside the component.
|
|
73
|
-
|
|
74
|
-
## CSS class contract
|
|
75
|
-
|
|
76
|
-
**Root class:** none at the component level. The component composes `Sheet` (which owns the panel chrome) and the `dsx-config-drawer__*` classes below.
|
|
39
|
+
| Prop | Type | Default | Description | Responsive |
|
|
40
|
+
|---|---|---|---|---|
|
|
41
|
+
| open | boolean | undefined | Controlled open state. | no |
|
|
42
|
+
| onOpenChange | (open: boolean) => void | undefined | Open-state callback. | no |
|
|
43
|
+
| defaultOpen | boolean | false | Uncontrolled initial state. | no |
|
|
44
|
+
| trigger | ReactNode | inline IconButton | Custom trigger via DrawerTrigger asChild. | no |
|
|
45
|
+
| side | top / right / bottom / left | right | Passed to Drawer direction. | no |
|
|
46
|
+
| children | ReactNode | undefined | Host content after built-in rows. | no |
|
|
77
47
|
|
|
78
|
-
|
|
48
|
+
Categorical controls are SegmentedControl type single, size sm:
|
|
79
49
|
|
|
80
|
-
|
|
|
50
|
+
| Row | Accessible name | Choices |
|
|
81
51
|
|---|---|---|
|
|
82
|
-
|
|
|
83
|
-
|
|
|
84
|
-
|
|
|
85
|
-
|
|
|
86
|
-
|
|
|
87
|
-
|
|
|
88
|
-
|
|
|
52
|
+
| Theme | Theme mode | Light / Dark / System |
|
|
53
|
+
| Accent | Accent color | Rift / Warp / Ray / Astral / Spark |
|
|
54
|
+
| Gray | Gray color | Auto / Neutral |
|
|
55
|
+
| Radius | Border radius | None / Small / Medium / Large / Full |
|
|
56
|
+
| Density | Density | Comfortable / Compact |
|
|
57
|
+
| Scaling | Scaling percentage | NumberInput, 90–110%, rounded to steps of 5 |
|
|
58
|
+
| Panel BG | Panel background | Translucent / Solid |
|
|
89
59
|
|
|
90
|
-
|
|
60
|
+
SettingRow is internal: label, optional description, children. Visible labels
|
|
61
|
+
are visual cues; each control has its own programmatic name.
|
|
91
62
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
**Reduced motion:**
|
|
63
|
+
## CSS class contract
|
|
95
64
|
|
|
96
|
-
|
|
65
|
+
| Region | Class |
|
|
66
|
+
|---|---|
|
|
67
|
+
| Body | dsx-config-drawer__body |
|
|
68
|
+
| Row | dsx-config-drawer__row |
|
|
69
|
+
| Information | dsx-config-drawer__row-info |
|
|
70
|
+
| Control | dsx-config-drawer__row-control |
|
|
71
|
+
| Swatch | dsx-config-drawer__accent-swatch |
|
|
72
|
+
| Scaling | dsx-config-drawer__scaling-input |
|
|
73
|
+
|
|
74
|
+
Rows always wrap. Information has min-width 0; controls have min-width 0 and
|
|
75
|
+
max-width 100%. Long categorical groups retain SegmentedControl's own horizontal
|
|
76
|
+
scrolling, including keyboard reveal. Drawer bounds and vertical scrolling use
|
|
77
|
+
the shared Drawer contract. No package width breakpoints.
|
|
97
78
|
|
|
98
79
|
## Token mapping
|
|
99
80
|
|
|
100
|
-
|
|
81
|
+
| Property | Token |
|
|
82
|
+
|---|---|
|
|
83
|
+
| Body gap / padding | --dsx-space-lg / --dsx-space-md |
|
|
84
|
+
| Row gap / minimum height | --dsx-space-md / --dsx-size-lg |
|
|
85
|
+
| Information gap | --dsx-space-2xs |
|
|
86
|
+
| Swatch size / gap / radius | --dsx-space-sm / --dsx-space-xs / --dsx-radius-full |
|
|
87
|
+
| Swatch fill | --dsx-color-accent-{rift,warp,ray,astral,spark}-9 |
|
|
88
|
+
| Scaling width | 7ch |
|
|
101
89
|
|
|
102
|
-
|
|
103
|
-
|---|---|---|
|
|
104
|
-
| Body gap | `var(--dsx-space-lg)` | Vertical gap between rows |
|
|
105
|
-
| Body padding | `var(--dsx-space-md) 0` | Vertical padding around the body |
|
|
106
|
-
| Body overflow | `auto` | Vertical scroll when content overflows |
|
|
107
|
-
| Row min-height | `var(--dsx-size-lg)` | Min hit target |
|
|
108
|
-
| Row gap | `var(--dsx-space-md)` | Horizontal gap between info and control |
|
|
109
|
-
| Row info gap | `var(--dsx-space-2xs)` | Vertical gap inside the info column |
|
|
110
|
-
| Accent preview size | `var(--dsx-space-sm)` | Square preview swatch dimensions |
|
|
111
|
-
| Accent preview spacing | `var(--dsx-space-xs)` | Gap between the preview and tier label |
|
|
112
|
-
| Accent preview radius | `var(--dsx-radius-full)` | Circular preview shape |
|
|
113
|
-
| Accent preview fill | `var(--dsx-runtime-accent-{rift,warp,ray}-9)` | Exact value represented by each theme choice |
|
|
114
|
-
| Scaling input width | `7ch` | Fixed width for the percentage `NumberInput` |
|
|
115
|
-
|
|
116
|
-
The default trigger is an `IconButton`; its visual contract is owned by `IconButton`. The row labels use the `Label` component; their visual contract is owned by `Label`. The segmented controls use the `SegmentedControl` component; their visual contract is owned by `SegmentedControl`.
|
|
90
|
+
Controls, separators and panel chrome retain their own component token contracts.
|
|
117
91
|
|
|
118
92
|
## Motion contract
|
|
119
93
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
| Sheet open / close | inherited from `Sheet` (`MOTION_TRANSITIONS.sheet`) | sheet preset | reduced |
|
|
94
|
+
Inherited Drawer motion uses MOTION_TRANSITIONS.drawer and reduced fallback.
|
|
95
|
+
ConfigDrawer adds no animation.
|
|
123
96
|
|
|
124
|
-
|
|
97
|
+
Rows explicitly compose Flex with wrap="wrap". Row descriptions use a
|
|
98
|
+
max-content flex basis so they retain readable width when the controls wrap. Controls keep their natural width
|
|
99
|
+
within a 100% cap, move below the row description when needed and retain the
|
|
100
|
+
existing SegmentedControl scroll behavior for long choice rails.
|
|
125
101
|
|
|
126
102
|
## Accessibility
|
|
127
103
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
**Keyboard:**
|
|
135
|
-
|
|
136
|
-
| Key | Action |
|
|
137
|
-
|---|---|
|
|
138
|
-
| `Tab` | Moves focus through the trigger, the segmented controls, the scaling input, and the sheet close affordance. |
|
|
139
|
-
| `ArrowLeft` / `ArrowRight` | Navigates within a `SegmentedControl` (radiogroup semantics). |
|
|
140
|
-
| `Enter` / `Space` | Activates the focused segmented option or input. |
|
|
141
|
-
| `Escape` | Closes the `Sheet` and returns focus to the trigger. |
|
|
142
|
-
|
|
143
|
-
**Focus:**
|
|
144
|
-
|
|
145
|
-
- The `Sheet` is a modal: focus is trapped inside the drawer while it is open and returned to the trigger on close.
|
|
146
|
-
- Each `SegmentedControl` is a roving-focus radiogroup: arrow keys move between options; the focused option gets a visible ring.
|
|
147
|
-
- The `NumberInput` exposes the standard textbox focus ring.
|
|
148
|
-
|
|
149
|
-
**Reduced motion:**
|
|
150
|
-
|
|
151
|
-
- Open / close transitions respect `prefers-reduced-motion` through the standard `Sheet` motion contract.
|
|
152
|
-
|
|
153
|
-
**Color and meaning:**
|
|
154
|
-
|
|
155
|
-
- The selected `SegmentedControl` option tracks `--dsx-color-primary`. The control itself does not impose additional color cues.
|
|
156
|
-
- The scaling `NumberInput` is a standard numeric entry; no color meaning.
|
|
157
|
-
|
|
158
|
-
**Naming:**
|
|
159
|
-
|
|
160
|
-
- Each `SegmentedControl` and the `NumberInput` carry an `aria-label` ("Theme mode", "Accent color", "Gray color", "Border radius", "Density", "Scaling percentage"). The visual `Label` repeats the same string so sighted and screen-reader users get the same word.
|
|
161
|
-
- The drawer title is "Preferences".
|
|
104
|
+
Drawer supplies modal dialog semantics, title/description, focus trapping and
|
|
105
|
+
Escape dismissal with focus return. SegmentedControl supplies single selection
|
|
106
|
+
and roving keyboard navigation; NumberInput supplies numeric entry. Enter/Space
|
|
107
|
+
activate the trigger. The playground's draggable trigger separately preserves
|
|
108
|
+
keyboard activation and suppresses clicks after pointer dragging.
|
|
162
109
|
|
|
163
110
|
## Playground demo spec
|
|
164
111
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
**State story:**
|
|
172
|
-
|
|
173
|
-
- Renders the drawer with `defaultOpen` and confirms the six rows appear with the correct default selections (`System`, `Rift`, `Auto`, `Medium`, `Comfortable`, `100`).
|
|
174
|
-
- Renders the drawer with `open` (controlled) and confirms the same.
|
|
175
|
-
- Renders a custom `trigger` and confirms the custom trigger is rendered when the drawer is closed.
|
|
176
|
-
|
|
177
|
-
**Composition story:**
|
|
178
|
-
|
|
179
|
-
- The component owns its own composition. The composition story is the default render: header + six rows + separators.
|
|
180
|
-
|
|
181
|
-
**Token story:**
|
|
182
|
-
|
|
183
|
-
- Renders the default drawer inside a `Theme` wrapper with `accentColor="warp"` and `accentColor="ray"`. Asserts the active segmented option tracks `--dsx-color-primary` while each accent preview continues to show the exact tier it represents.
|
|
184
|
-
|
|
185
|
-
**A11y story:**
|
|
186
|
-
|
|
187
|
-
- Uses `vitest-axe` against the rendered default story with the `aria-allowed-attr` rule disabled (the `SegmentedControl` ships a non-standard `variant` attribute on `role="group"`). Asserts no other axe violations.
|
|
188
|
-
|
|
189
|
-
**Props exposed in the playground controls:**
|
|
190
|
-
|
|
191
|
-
The playground registry for `config-drawer` does not expose prop controls. The component is mounted live at the app root; the registry render explains that placement and notes the `trigger` prop.
|
|
112
|
+
The registry explains usage and lists all seven rows. The live example is the
|
|
113
|
+
single app-root drawer opened with the bottom-right gear; that host uses side
|
|
114
|
+
bottom. Test Light/Dark, every accent, gray palettes, radius, density, scaling
|
|
115
|
+
and panel background at 1280/390/320, including the last row after scrolling.
|
|
116
|
+
No duplicate drawer is mounted just to obtain a screenshot.
|
|
192
117
|
|
|
193
118
|
## Wiring notes
|
|
194
119
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
- `Icon` (`src/components/icon/Icon`): the default `settings` icon.
|
|
200
|
-
- `Label` (`src/components/label/Label`): the row label.
|
|
201
|
-
- `Text` (`src/components/text/Text`): the row description.
|
|
202
|
-
- `Flex` (`src/layout/Flex`): the row layout and the body layout.
|
|
203
|
-
- `SegmentedControl` (`src/components/segmentedControl/SegmentedControl`): the categorical token pickers. The drawer uses `type="single"` and `size="sm"`.
|
|
204
|
-
- `Separator` (`src/components/separator/Separator`): the row separators.
|
|
205
|
-
- `NumberInput` (`src/components/numberInput/NumberInput`): the scaling percentage input, clamped to the 90 to 110 range in 5% steps.
|
|
206
|
-
- `ThemeProvider` (`src/components/themeProvider/ThemeProvider`): the drawer reads and writes the active theme through `useTheme()`. The drawer must be rendered inside a `ThemeProvider` tree.
|
|
207
|
-
|
|
208
|
-
**Used by:**
|
|
209
|
-
|
|
210
|
-
- The playground's app shell mounts a single `ConfigDrawer` alongside `ThemeProvider` so every page can toggle the theme without a dedicated settings route.
|
|
211
|
-
- App-level settings surfaces and onboarding flows.
|
|
212
|
-
|
|
213
|
-
**State boundaries:**
|
|
214
|
-
|
|
215
|
-
- Owned by ConfigDrawer: the six default rows, their order, the accent previews, and the `SettingRow` layout.
|
|
216
|
-
- Owned by the consumer: the placement of the drawer, the custom `trigger` (if any), the controlled `open` / `onOpenChange` (if any), and the surrounding `ThemeProvider`.
|
|
217
|
-
- Owned by `useTheme()`: every categorical selection (`theme`, `accentColor`, `grayColor`, `radius`, `density`, `scaling`) is read from and written to the active `ThemeProvider` context. The drawer does not own the value; it surfaces the control.
|
|
218
|
-
|
|
219
|
-
**Boundary rules:**
|
|
220
|
-
|
|
221
|
-
- App-owned data: the placement of the drawer, the controlled open state, the custom trigger, and the surrounding `ThemeProvider`.
|
|
222
|
-
- DS-owned visuals: token bindings, slot classes, the `Sheet` panel chrome, the segmented control semantics, the `NumberInput` clamping, and the row layout.
|
|
120
|
+
Drawer owns the portal, bounds and focus. ThemeProvider owns selections,
|
|
121
|
+
persistence and system mode. The host owns placement, custom trigger, side,
|
|
122
|
+
controlled open state and optional children. ConfigDrawer owns fixed row order,
|
|
123
|
+
swatches and the numeric scaling clamp. ThemePanel remains the read-only inspector.
|
|
@@ -153,6 +153,8 @@ Container has no motion. The motion section is intentionally empty.
|
|
|
153
153
|
|
|
154
154
|
## Playground demo spec
|
|
155
155
|
|
|
156
|
+
The default container retains its 1080px cap; size 1 and wide show 420px and 1200px caps respectively.
|
|
157
|
+
|
|
156
158
|
**Default story:**
|
|
157
159
|
|
|
158
160
|
- Renders `Container` with no extra props and a child node. Asserts the root classes are `dsx-container` and `dsx-box` (the `dsx-flex` class is conditional — it is only written when a flex layout prop such as `direction`, `align`, `justify`, `gap`, or `wrap` is set), the host element is a `div`, and `--dsx-container-max-width` resolves to `1080px`.
|
|
@@ -33,13 +33,13 @@ An object-scoped right-click action menu. The DS `ContextMenu` wraps `@radix-ui/
|
|
|
33
33
|
| `ContextMenu.Label` | Radix `ContextMenu.Label` | `dsx-context-menu__label` | Non-interactive section label. |
|
|
34
34
|
| `ContextMenu.Separator` | Radix `ContextMenu.Separator` (via `MenuSeparator`) | `dsx-context-menu__separator` | Visual divider. |
|
|
35
35
|
| `ContextMenu.Group` | Radix `ContextMenu.Group` | (no class) | Groups items semantically. |
|
|
36
|
-
| `ContextMenu.Sub` | Radix `ContextMenu.Sub` | (no class) | Submenu owner. |
|
|
36
|
+
| `ContextMenu.Sub` | Radix `ContextMenu.Sub` + `ContextMenuSubOpenContext` | (no class) | Submenu owner; mirrors controlled/uncontrolled state into SubContent. |
|
|
37
37
|
| `ContextMenu.RadioGroup` | Radix `ContextMenu.RadioGroup` | (no class) | Radio selection owner. |
|
|
38
38
|
| `ContextMenu.Portal` | Radix `ContextMenu.Portal` (via `MenuPortal`) | (no class) | Portal wrapper. |
|
|
39
39
|
| `ContextMenu.CheckboxItem` | Radix `ContextMenu.CheckboxItem` | `dsx-context-menu__item` + `dsx-context-menu__item-indicator` | Checkbox row. Renders `check` or `minus` indicator. |
|
|
40
40
|
| `ContextMenu.RadioItem` | Radix `ContextMenu.RadioItem` | `dsx-context-menu__item` + `dsx-context-menu__item-indicator` + `dsx-context-menu__radio-dot` | Radio row. |
|
|
41
41
|
| `ContextMenu.SubTrigger` | Radix `ContextMenu.SubTrigger` | `dsx-context-menu__item` + `dsx-context-menu__sub-trigger` + optional `data-inset` + `chevron-right` | Row that opens the sub-content. |
|
|
42
|
-
| `ContextMenu.SubContent` | Radix `ContextMenu.SubContent` inside `MenuContent`
|
|
42
|
+
| `ContextMenu.SubContent` | Radix `ContextMenu.SubContent` inside portalled `MenuContent` | `dsx-context-menu__content` | The submenu panel follows Sub's open state outside the parent's clip box. Explicit `forceMount` is preserved. |
|
|
43
43
|
| `ContextMenu.Shortcut` | `<span>` (or `Slot` child when `asChild`) | `dsx-context-menu__shortcut` | Keyboard hint rendered on the right. |
|
|
44
44
|
|
|
45
45
|
The roster's `Parent / Slots` column lists `ContextMenu.Root`, `ContextMenu.Trigger`, `ContextMenu.Content`, `ContextMenu.Label`, `ContextMenu.Separator`, `ContextMenu.Item`, `ContextMenu.Group`. The source exports the full Radix part set through `Object.assign`, including `Sub`, `RadioGroup`, `Portal`, `CheckboxItem`, `RadioItem`, `SubTrigger`, `SubContent`, and `Shortcut`. The spec records the full set so the public surface is unambiguous.
|
|
@@ -69,7 +69,7 @@ The roster's `Parent / Slots` column lists `ContextMenu.Root`, `ContextMenu.Trig
|
|
|
69
69
|
|
|
70
70
|
### `ContextMenu.Trigger`, `ContextMenu.Label`, `ContextMenu.Separator`, `ContextMenu.Group`, `ContextMenu.Sub`, `ContextMenu.RadioGroup`, `ContextMenu.Portal`, `ContextMenu.CheckboxItem`, `ContextMenu.RadioItem`, `ContextMenu.SubTrigger`, `ContextMenu.SubContent`
|
|
71
71
|
|
|
72
|
-
These
|
|
72
|
+
These preserve the corresponding Radix props. `ContextMenu.Trigger` accepts standard Radix trigger props and adds the keyboard opening path below. `ContextMenu.Label` and `ContextMenu.Group` accept standard Radix props. `ContextMenu.Sub` preserves controlled `open`, uncontrolled `defaultOpen` and `onOpenChange`. `ContextMenu.SubContent` preserves Radix positioning and `forceMount` props and renders through a theme-preserving portal.
|
|
73
73
|
|
|
74
74
|
### `ContextMenu.Item`
|
|
75
75
|
|
|
@@ -194,13 +194,13 @@ Rules:
|
|
|
194
194
|
- `ContextMenu.Item` is `role="menuitem"`. `ContextMenu.CheckboxItem` is `role="menuitemcheckbox"`; `ContextMenu.RadioItem` is `role="menuitemradio"`. `ContextMenu.SubTrigger` is `role="menuitem"` with `aria-haspopup="menu"`.
|
|
195
195
|
- `ContextMenu.Label` is `role="presentation"` for non-interactive section labels (Radix default).
|
|
196
196
|
- `ContextMenu.Separator` is `role="separator"`.
|
|
197
|
-
- `ContextMenu.Trigger`
|
|
197
|
+
- `ContextMenu.Trigger` captures right-click and touch long-press. A custom non-interactive host must supply `tabIndex={0}` for keyboard opening. The wrapper forwards the Radix trigger props and ref. Essential touch actions should also have an explicit button/menu composition; long-press alone is not discoverable.
|
|
198
198
|
|
|
199
199
|
**Keyboard:**
|
|
200
200
|
|
|
201
201
|
| Key | Action |
|
|
202
202
|
|---|---|
|
|
203
|
-
| `Shift+F10`, context-menu key | Opens the context
|
|
203
|
+
| `Shift+F10`, context-menu key | Opens the menu at the focused trigger's center. The wrapper supplies the context event consistently across browsers; a consumer-cancelled key handler is respected. |
|
|
204
204
|
| `ArrowDown`, `ArrowUp` | Moves through items. |
|
|
205
205
|
| `Enter`, `Space` | Activates the focused item. |
|
|
206
206
|
| `Escape` | Closes the menu. |
|
|
@@ -282,3 +282,17 @@ Rules:
|
|
|
282
282
|
|
|
283
283
|
- App-owned data: the command set, the disabled reasons, the right-click target, and the keyboard shortcut strings.
|
|
284
284
|
- DS-owned visuals: the `dsx-context-menu__*` slot classes, the token bindings, the data-attribute contract, and the open / close animation.
|
|
285
|
+
|
|
286
|
+
## Reconciliation stories
|
|
287
|
+
|
|
288
|
+
`Sub` preserves Radix's controlled `open`, uncontrolled `defaultOpen`, and
|
|
289
|
+
`onOpenChange` contract. `SubContent` follows that state and renders in its own
|
|
290
|
+
theme-preserving portal, outside the root's scroll/clip box. Closed submenus
|
|
291
|
+
are unmounted unless the consumer explicitly requests `forceMount`; they do not
|
|
292
|
+
leave inaccessible menu items behind the parent surface.
|
|
293
|
+
|
|
294
|
+
The panel's usual minimum width is capped by Radix's available width. A submenu
|
|
295
|
+
can become narrower when neither side has room for the usual menu width; labels
|
|
296
|
+
wrap rather than painting off the viewport. No viewport breakpoint is involved.
|
|
297
|
+
|
|
298
|
+
The live example uses a real Project actions button for explicit activation, right-click and keyboard opening. It demonstrates selection feedback, a disabled item, a controlled checkbox and radio group, a submenu and a destructive action. Shortcut hints are labels; item callbacks own the action.
|
|
@@ -239,6 +239,8 @@ Rules:
|
|
|
239
239
|
|
|
240
240
|
## Playground demo spec
|
|
241
241
|
|
|
242
|
+
The live connection-settings example uses the package Select for Region and a nested Popover for display density. Apply closes only the child popover; Save region reports the selected value and returns focus to the dialog launcher. Long-content mode verifies reachable body and footer controls.
|
|
243
|
+
|
|
242
244
|
**Default story:**
|
|
243
245
|
|
|
244
246
|
- Renders `DialogRoot` with a `Trigger` and `Content` containing `Header`, `Body`. Asserts the content has `dsx-dialog__content` and `data-size="md"`.
|
|
@@ -274,7 +276,7 @@ Rules:
|
|
|
274
276
|
|
|
275
277
|
**Token story:**
|
|
276
278
|
|
|
277
|
-
- Renders inside a `Theme` wrapper with `accentColor="
|
|
279
|
+
- Renders inside a `Theme` wrapper with `accentColor="rift"` and one with `accentColor="warp"`. Asserts the `data-accent-color` attribute on the content wrapper.
|
|
278
280
|
|
|
279
281
|
**Props exposed in the playground controls:**
|
|
280
282
|
|
|
@@ -51,8 +51,6 @@ A mobile or edge-attached modal overlay that slides in from any edge of the view
|
|
|
51
51
|
| Prop | Type | Default | Required | Description | Responsive |
|
|
52
52
|
|---|---|---|---|---|---|
|
|
53
53
|
| `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | no | Drawer content size; writes `data-size` attribute. | no |
|
|
54
|
-
| `height` | `string` (responsive) | `undefined` | no | Responsive height override via CSS variable. | yes |
|
|
55
|
-
| `width` | `string` (responsive) | `undefined` | no | Responsive width override via CSS variable. | yes |
|
|
56
54
|
| `className` | `string` | `undefined` | no | Extra classes appended to `dsx-drawer__content`. | no |
|
|
57
55
|
|
|
58
56
|
**Header props:**
|
|
@@ -76,7 +74,7 @@ Standard Radix `Title` and `Description` props plus `className`.
|
|
|
76
74
|
Rules:
|
|
77
75
|
|
|
78
76
|
- `direction` on Root is wired through `extractProps`.
|
|
79
|
-
- `size
|
|
77
|
+
- `size` on Content are wired through `extractProps`.
|
|
80
78
|
- `asChild` on Header and Footer is wired through `extractProps`.
|
|
81
79
|
- The Root manages open state through a controllable hook (`useControllableDrawerOpenState`) that supports both controlled and uncontrolled modes.
|
|
82
80
|
- The Root provides `DrawerOpenContext` and `DrawerDirectionContext` so Content can access the open state and direction for motion calculations.
|
|
@@ -102,12 +100,12 @@ Rules:
|
|
|
102
100
|
| Attribute | Allowed values | Class | CSS file |
|
|
103
101
|
|---|---|---|---|
|
|
104
102
|
| `data-direction` (on content) | `top`, `right`, `bottom`, `left` | `.dsx-drawer__content[data-direction='...']` | `drawer.css` |
|
|
105
|
-
| `data-size` (on content) | `sm`, `md`, `lg` |
|
|
103
|
+
| `data-size` (on content) | `sm`, `md`, `lg` | Top/bottom minimum-height and side-panel width bands | n/a |
|
|
106
104
|
| `data-slot` | `drawer-overlay`, `drawer-content`, `drawer-handle`, `drawer-header`, `drawer-footer`, `drawer-title`, `drawer-description` | (CSS hook only) | n/a |
|
|
107
105
|
|
|
108
106
|
**Responsive behavior:**
|
|
109
107
|
|
|
110
|
-
- Content
|
|
108
|
+
- Content size is single-valued. It does not expose responsive height/width props. Viewport caps and scrolling are intrinsic.
|
|
111
109
|
|
|
112
110
|
**Reduced motion:**
|
|
113
111
|
|
|
@@ -208,7 +206,7 @@ Rules:
|
|
|
208
206
|
|
|
209
207
|
**Token story:**
|
|
210
208
|
|
|
211
|
-
- Renders inside a `Theme` wrapper with `accentColor="
|
|
209
|
+
- Renders inside a `Theme` wrapper with `accentColor="astral"` and `accentColor="spark"`. Drawer does not track `data-accent-color` directly; the story asserts the overlay and content surfaces are visually unchanged.
|
|
212
210
|
|
|
213
211
|
**A11y story:**
|
|
214
212
|
|
|
@@ -243,3 +241,16 @@ Rules:
|
|
|
243
241
|
|
|
244
242
|
- App-owned data: the drawer content, the trigger label, the action handlers, and the open state when controlled.
|
|
245
243
|
- DS-owned visuals: token bindings, the slot CSS classes, the motion presets, and the portal theme mirroring.
|
|
244
|
+
|
|
245
|
+
## Overlay review containment
|
|
246
|
+
|
|
247
|
+
Content caps at 100dvh and its containing viewport width, wraps long words,
|
|
248
|
+
and scrolls vertically. Direct content regions do not shrink into each other.
|
|
249
|
+
Left/right content uses height=100dvh with min-height=0 and width bands capped
|
|
250
|
+
at 100%; top/bottom content retains its minimum-height size bands. No width
|
|
251
|
+
media query is required. `/docs/drawer` opens all four directions and offers
|
|
252
|
+
short/long content to verify both the first row and the footer after scrolling.
|
|
253
|
+
|
|
254
|
+
The package disables Vaul’s offscreen ::after filler on its scrolling shell.
|
|
255
|
+
That pseudo-element otherwise adds blank scroll range and covers bottom-drawer
|
|
256
|
+
footer controls after scrolling; it is unnecessary for the bounded surface.
|
|
@@ -39,7 +39,7 @@ A button-triggered secondary action menu. The DS `DropdownMenu` wraps `@radix-ui
|
|
|
39
39
|
| `DropdownMenu.CheckboxItem` | Radix `DropdownMenu.CheckboxItem` | `dsx-dropdown-menu__item` + `dsx-dropdown-menu__item-indicator` | Checkbox row. Renders `check` or `minus` indicator. |
|
|
40
40
|
| `DropdownMenu.RadioItem` | Radix `DropdownMenu.RadioItem` | `dsx-dropdown-menu__item` + `dsx-dropdown-menu__item-indicator` + `dsx-dropdown-menu__radio-dot` | Radio row. |
|
|
41
41
|
| `DropdownMenu.SubTrigger` | Radix `DropdownMenu.SubTrigger` | `dsx-dropdown-menu__item` + `dsx-dropdown-menu__sub-trigger` + optional `data-inset` + `chevron-right` | Row that opens the sub-content. |
|
|
42
|
-
| `DropdownMenu.SubContent` | Radix `DropdownMenu.SubContent` inside `MenuContent`
|
|
42
|
+
| `DropdownMenu.SubContent` | Radix `DropdownMenu.SubContent` inside portal-mounted `MenuContent` | `dsx-dropdown-menu__content` | The submenu panel tracks its own Sub open state and uses a portal so the parent scroll frame does not clip it. forceMount remains consumer-controlled. |
|
|
43
43
|
| `DropdownMenu.Shortcut` | `<span>` (or `Slot` child when `asChild`) | `dsx-dropdown-menu__shortcut` | Keyboard hint rendered on the right. |
|
|
44
44
|
|
|
45
45
|
The roster's `Parent / Slots` column lists `DropdownMenu.Root`, `DropdownMenu.Trigger`, `DropdownMenu.Content`, `DropdownMenu.Label`, `DropdownMenu.Separator`, `DropdownMenu.Item`, `DropdownMenu.Group`. The source exports the full Radix part set through `Object.assign`, including `Sub`, `RadioGroup`, `Portal`, `CheckboxItem`, `RadioItem`, `SubTrigger`, `SubContent`, and `Shortcut`. The spec records the full set so the public surface is unambiguous.
|
|
@@ -71,7 +71,7 @@ The roster's `Parent / Slots` column lists `DropdownMenu.Root`, `DropdownMenu.Tr
|
|
|
71
71
|
|
|
72
72
|
### `DropdownMenu.Trigger`, `DropdownMenu.Label`, `DropdownMenu.Separator`, `DropdownMenu.Group`, `DropdownMenu.Sub`, `DropdownMenu.RadioGroup`, `DropdownMenu.Portal`, `DropdownMenu.CheckboxItem`, `DropdownMenu.RadioItem`, `DropdownMenu.SubTrigger`, `DropdownMenu.SubContent`
|
|
73
73
|
|
|
74
|
-
These proxy the corresponding Radix props. `DropdownMenu.Trigger` accepts the standard Radix trigger props (no class). `DropdownMenu.Label` and `DropdownMenu.Group` accept the standard Radix props. `DropdownMenu.SubContent` accepts the same `align` and `side` props as `Content`;
|
|
74
|
+
These proxy the corresponding Radix props. `DropdownMenu.Trigger` accepts the standard Radix trigger props (no class). `DropdownMenu.Label` and `DropdownMenu.Group` accept the standard Radix props. `DropdownMenu.SubContent` accepts the same `align` and `side` props as `Content`; Sub preserves controlled/uncontrolled open props; SubContent uses the Radix portal and its owning Sub state.
|
|
75
75
|
|
|
76
76
|
### `DropdownMenu.Item`
|
|
77
77
|
|
|
@@ -288,3 +288,12 @@ Rules:
|
|
|
288
288
|
|
|
289
289
|
- App-owned data: the command set, the disabled reasons, the trigger element, and the keyboard shortcut strings.
|
|
290
290
|
- DS-owned visuals: the `dsx-dropdown-menu__*` slot classes, the token bindings, the data-attribute contract, and the open / close animation.
|
|
291
|
+
|
|
292
|
+
## Overlay review interaction
|
|
293
|
+
|
|
294
|
+
Submenus are absent while closed unless forceMount is requested. Sub owns
|
|
295
|
+
controlled/uncontrolled state and SubContent receives that state through a
|
|
296
|
+
private context; it is no longer forced open. Portalling matches the
|
|
297
|
+
[Radix submenu anatomy](https://www.radix-ui.com/primitives/docs/components/dropdown-menu)
|
|
298
|
+
and keeps the submenu outside the parent’s overflow frame. The live example
|
|
299
|
+
demonstrates working Profile/Settings, Autosave and Share project actions.
|
|
@@ -105,7 +105,7 @@ Rules:
|
|
|
105
105
|
|
|
106
106
|
## Playground demo spec
|
|
107
107
|
|
|
108
|
-
`Em` is registered in `apps/playground/lib/registry/typography.tsx` under the `em` key. The registry entry imports `emPropDefs` and renders the component with a sample emphasis span. Per-component route: `/docs/em`.
|
|
108
|
+
`Em` is registered in `apps/playground/lib/registry/typography.tsx` under the `em` key. The registry entry imports `emPropDefs` and renders the component with a sample emphasis span. Per-component route: `/docs/em`. The live example uses English and Russian sentence context plus a slotted span.
|
|
109
109
|
|
|
110
110
|
**Default story:**
|
|
111
111
|
|
|
@@ -41,7 +41,7 @@ A card-based file selection surface with a dropzone, a list of file rows, and a
|
|
|
41
41
|
|
|
42
42
|
| Prop | Type | Default | Required | Description | Responsive |
|
|
43
43
|
|---|---|---|---|---|---|
|
|
44
|
-
| `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | no | Card-level size
|
|
44
|
+
| `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | no | Card-level size; `sm` uses a wrapping inline attachment layout, `md`/`lg` use a centered drop area. Drives `data-size`. | no |
|
|
45
45
|
| `asChild` | `boolean` | `false` | no | Renders the card through `Slot` from `@radix-ui/react-slot`. | no |
|
|
46
46
|
| Standard `Card` props | `CardProps` | n/a | no | The root extends `CardProps`, so variant, radius, and standard card attributes pass through. | no |
|
|
47
47
|
| `children` | `React.ReactNode` | `undefined` | no | `FileUpload.Dropzone`, `FileUpload.List`, and `FileUpload.Item` children. | no |
|
|
@@ -109,7 +109,7 @@ Rules:
|
|
|
109
109
|
|
|
110
110
|
| Attribute | Allowed values | Class | CSS file |
|
|
111
111
|
|---|---|---|---|
|
|
112
|
-
| `data-size` | `sm`, `md`, `lg` |
|
|
112
|
+
| `data-size` | `sm`, `md`, `lg` | Root controls dropzone layout, minimum height and padding | `file-upload.css` |
|
|
113
113
|
| `data-dragging` | `true` | `.dsx-file-upload__dropzone[data-dragging='true']` thicker accent dashed border + active background (no ring) | `file-upload.css` |
|
|
114
114
|
| `data-status-tone` | `danger` (omitted when `muted`) | `.dsx-file-upload__item:where([data-status-tone='danger']) .dsx-file-upload__status` error color | `file-upload.css` |
|
|
115
115
|
|
|
@@ -135,6 +135,8 @@ Rules:
|
|
|
135
135
|
**Responsive behavior:**
|
|
136
136
|
|
|
137
137
|
- The component does not write `@media` rules. None of its prop defs are `responsive: true`. Size is single-value only.
|
|
138
|
+
- The `sm` dropzone places illustration, text and action in a wrapping row. Consumers choose this attachment composition for narrow forms; `md`/`lg` retain the centered drag area. All sizes grow with content and localized labels.
|
|
139
|
+
- FileUpload owns its dropzone minimum height and typography; it does not inherit EmptyState's standalone empty-page minimum height.
|
|
138
140
|
|
|
139
141
|
**Reduced motion:**
|
|
140
142
|
|
|
@@ -148,7 +150,10 @@ Every CSS value the component paints is a `var(--dsx-*)` token.
|
|
|
148
150
|
|---|---|---|
|
|
149
151
|
| Root layout | `display: grid; gap: var(--dsx-space-md); width: 100%` | Surface layout. |
|
|
150
152
|
| Dropzone width | `width: 100%` | Full width. |
|
|
151
|
-
| Dropzone min-height | `calc(var(--dsx-size-4xl) * 2)`
|
|
153
|
+
| Dropzone min-height | `var(--dsx-size-4xl)` / `calc(var(--dsx-size-4xl) * 2)` / `calc(var(--dsx-size-4xl) * 2.5)` | sm/md/lg content-growing minimums. |
|
|
154
|
+
| Dropzone padding / gap | `var(--dsx-space-sm)` / `var(--dsx-space-md)` / `var(--dsx-space-lg)`; gap `var(--dsx-space-sm)` | sm/md/lg padding and compact internal spacing. |
|
|
155
|
+
| Dropzone illustration | `var(--dsx-size-lg)` square | Upload affordance rather than an empty-page illustration. |
|
|
156
|
+
| Dropzone title | `var(--dsx-typography-label-large-*)` | Form-level title, independent of EmptyState headline typography. |
|
|
152
157
|
| Dropzone border | `var(--dsx-border-width-md)` dashed `var(--dsx-color-outline)` | Resting edge, visible against the sunken fill. |
|
|
153
158
|
| Dropzone radius | `var(--dsx-rounded-lg)` | Round corners. |
|
|
154
159
|
| Dropzone background | `var(--dsx-color-surface-sunken)` | Sunken surface. |
|
|
@@ -160,9 +165,10 @@ Every CSS value the component paints is a `var(--dsx-*)` token.
|
|
|
160
165
|
| Item icon size | `var(--dsx-size-lg)` square | Round icon slot. |
|
|
161
166
|
| Item icon color | `var(--dsx-color-on-surface-variant)` | Quiet icon. |
|
|
162
167
|
| Item content min-width | `min-width: 0` | Allows the title to ellipsis. |
|
|
168
|
+
| Item content flex / row gap | `flex: 1 1 0`; `var(--dsx-space-sm)` | A short file row can shrink its text column before wrapping media/actions. FileUpload overrides Item's prose-oriented content basis. |
|
|
163
169
|
| Item title overflow | `overflow: hidden; text-overflow: ellipsis; white-space: nowrap` | Long file names truncate. |
|
|
164
170
|
| Item media color | `var(--dsx-color-on-surface-variant)` | Quiet media. |
|
|
165
|
-
| Item actions alignment | `margin-left: auto; flex-direction: column; align-items: flex-end; gap: var(--dsx-space-xs)` | Right-aligned, stacked. |
|
|
171
|
+
| Item actions alignment | `margin-left: auto; flex-direction: column; flex-wrap: nowrap; align-items: flex-end; gap: var(--dsx-space-xs)` | Right-aligned, stacked. Consumer wrappers may define their own inner layout. |
|
|
166
172
|
| Progress width | `width: 100%` | Full row width. |
|
|
167
173
|
| Progress label/status typography | `var(--dsx-typography-label-small-*)` | Small label ramp. |
|
|
168
174
|
| Progress label/status color | `var(--dsx-color-on-surface-variant)` | Quiet label. |
|
|
@@ -219,11 +225,11 @@ Every CSS value the component paints is a `var(--dsx-*)` token.
|
|
|
219
225
|
|
|
220
226
|
**Composition story:**
|
|
221
227
|
|
|
222
|
-
-
|
|
228
|
+
- One compact live capture surface populates dropzone, list, item, progress and working remove/retry actions after selection. An expandable row-state gallery shows progress, completed and failed rows, followed by forced drag feedback and Rift/Warp token stories. Size comparisons stay in the matrix rather than duplicating three large surfaces in the live example.
|
|
223
229
|
|
|
224
230
|
**Live capture story:**
|
|
225
231
|
|
|
226
|
-
- Renders `FileUploadLiveCapture
|
|
232
|
+
- Renders `FileUploadLiveCapture` with `size="sm"`, `variant="filled"`, a short title/description and a working Browse files action. A `multiple` dropzone with `onFiles` feeds a simulated upload list (interval-driven progress). Compact rows use the existing `size="sm"` and `icon={null}` options, a file-size description, progress/completion/error status and stacked md ghost icon actions (trash remove always, redo retry on failed rows — retry resets the row to 0%). Files with "fail" in the name fail at 60%. Selection count is announced through a status region. Covered by `tests/file-upload.spec.ts` and `tests/sweep-polish.spec.ts` (drag/browse/keyboard capture, retry/remove, mobile geometry, zero console issues).
|
|
227
233
|
|
|
228
234
|
**A11y story:**
|
|
229
235
|
|
|
@@ -253,7 +259,7 @@ Every CSS value the component paints is a `var(--dsx-*)` token.
|
|
|
253
259
|
|
|
254
260
|
**Composed by consumers (not DS slots):**
|
|
255
261
|
|
|
256
|
-
- URL
|
|
262
|
+
- URL fetching and modal shells with Cancel / Attach-files footers are app composition. The primary playground story focuses on file capture and rows; it does not imply FileUpload supplies a URL transport or an attach-to-record action.
|
|
257
263
|
|
|
258
264
|
**Used by:**
|
|
259
265
|
|