@d4gger/design-system 3.0.1 → 4.0.1
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/brand-effects.css +5 -3
- package/dist/components/accordion.css +9 -2
- package/dist/components/alert/Alert.cjs +27 -9
- package/dist/components/alert/Alert.cjs.map +2 -2
- package/dist/components/alert/Alert.d.cts +6 -0
- package/dist/components/alert/Alert.d.cts.map +1 -1
- package/dist/components/alert/Alert.d.mts +6 -0
- package/dist/components/alert/Alert.d.mts.map +1 -1
- package/dist/components/alert/Alert.d.ts +6 -0
- package/dist/components/alert/Alert.d.ts.map +1 -1
- package/dist/components/alert/Alert.js +28 -10
- package/dist/components/alert/Alert.js.map +2 -2
- package/dist/components/alert.css +73 -3
- 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 +140 -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 +9 -1
- package/dist/components/code.css +29 -13
- package/dist/components/collapsible/Collapsible.cjs +14 -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 +14 -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/dialog.css +1 -1
- 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/environment-ribbon.css +73 -0
- package/dist/components/environmentRibbon/EnvironmentRibbon.cjs +69 -0
- package/dist/components/environmentRibbon/EnvironmentRibbon.cjs.map +7 -0
- package/dist/components/environmentRibbon/EnvironmentRibbon.d.cts +15 -0
- package/dist/components/environmentRibbon/EnvironmentRibbon.d.cts.map +1 -0
- package/dist/components/environmentRibbon/EnvironmentRibbon.d.mts +15 -0
- package/dist/components/environmentRibbon/EnvironmentRibbon.d.mts.map +1 -0
- package/dist/components/environmentRibbon/EnvironmentRibbon.d.ts +15 -0
- package/dist/components/environmentRibbon/EnvironmentRibbon.d.ts.map +1 -0
- package/dist/components/environmentRibbon/EnvironmentRibbon.js +39 -0
- package/dist/components/environmentRibbon/EnvironmentRibbon.js.map +7 -0
- package/dist/components/environmentRibbon/environmentRibbon.props.cjs +39 -0
- package/dist/components/environmentRibbon/environmentRibbon.props.cjs.map +7 -0
- package/dist/components/environmentRibbon/environmentRibbon.props.d.cts +18 -0
- package/dist/components/environmentRibbon/environmentRibbon.props.d.cts.map +1 -0
- package/dist/components/environmentRibbon/environmentRibbon.props.d.mts +18 -0
- package/dist/components/environmentRibbon/environmentRibbon.props.d.mts.map +1 -0
- package/dist/components/environmentRibbon/environmentRibbon.props.d.ts +18 -0
- package/dist/components/environmentRibbon/environmentRibbon.props.d.ts.map +1 -0
- package/dist/components/environmentRibbon/environmentRibbon.props.js +19 -0
- package/dist/components/environmentRibbon/environmentRibbon.props.js.map +7 -0
- package/dist/components/field.css +5 -0
- 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 +19 -0
- package/dist/components/icon/Icon.cjs.map +2 -2
- package/dist/components/icon/Icon.d.cts +29 -1
- package/dist/components/icon/Icon.d.cts.map +1 -1
- package/dist/components/icon/Icon.d.mts +29 -1
- package/dist/components/icon/Icon.d.mts.map +1 -1
- package/dist/components/icon/Icon.d.ts +29 -1
- package/dist/components/icon/Icon.d.ts.map +1 -1
- package/dist/components/icon/Icon.js +25 -0
- package/dist/components/icon/Icon.js.map +2 -2
- package/dist/components/icon/icons.cjs +14 -0
- package/dist/components/icon/icons.cjs.map +2 -2
- package/dist/components/icon/icons.d.cts +35 -0
- package/dist/components/icon/icons.d.cts.map +1 -1
- package/dist/components/icon/icons.d.mts +35 -0
- package/dist/components/icon/icons.d.mts.map +1 -1
- package/dist/components/icon/icons.d.ts +35 -0
- package/dist/components/icon/icons.d.ts.map +1 -1
- package/dist/components/icon/icons.js +14 -0
- package/dist/components/icon/icons.js.map +2 -2
- package/dist/components/index.cjs +2 -0
- package/dist/components/index.cjs.map +2 -2
- package/dist/components/index.d.cts +2 -0
- package/dist/components/index.d.cts.map +1 -1
- package/dist/components/index.d.mts +2 -0
- package/dist/components/index.d.mts.map +1 -1
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +2 -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 +58 -10
- package/dist/components/notificationCenter/NotificationCenter.cjs +27 -17
- package/dist/components/notificationCenter/NotificationCenter.cjs.map +2 -2
- package/dist/components/notificationCenter/NotificationCenter.d.cts +2 -0
- package/dist/components/notificationCenter/NotificationCenter.d.cts.map +1 -1
- package/dist/components/notificationCenter/NotificationCenter.d.mts +2 -0
- package/dist/components/notificationCenter/NotificationCenter.d.mts.map +1 -1
- package/dist/components/notificationCenter/NotificationCenter.d.ts +2 -0
- package/dist/components/notificationCenter/NotificationCenter.d.ts.map +1 -1
- package/dist/components/notificationCenter/NotificationCenter.js +28 -18
- package/dist/components/notificationCenter/NotificationCenter.js.map +2 -2
- package/dist/components/page-header.css +21 -0
- package/dist/components/pageHeader/PageHeader.cjs +10 -2
- package/dist/components/pageHeader/PageHeader.cjs.map +2 -2
- package/dist/components/pageHeader/PageHeader.d.cts.map +1 -1
- package/dist/components/pageHeader/PageHeader.d.mts.map +1 -1
- package/dist/components/pageHeader/PageHeader.d.ts.map +1 -1
- package/dist/components/pageHeader/PageHeader.js +10 -2
- package/dist/components/pageHeader/PageHeader.js.map +2 -2
- package/dist/components/pageHeader/pageHeader.props.cjs +7 -1
- package/dist/components/pageHeader/pageHeader.props.cjs.map +2 -2
- package/dist/components/pageHeader/pageHeader.props.d.cts +5 -0
- package/dist/components/pageHeader/pageHeader.props.d.cts.map +1 -1
- package/dist/components/pageHeader/pageHeader.props.d.mts +5 -0
- package/dist/components/pageHeader/pageHeader.props.d.mts.map +1 -1
- package/dist/components/pageHeader/pageHeader.props.d.ts +5 -0
- package/dist/components/pageHeader/pageHeader.props.d.ts.map +1 -1
- package/dist/components/pageHeader/pageHeader.props.js +7 -1
- package/dist/components/pageHeader/pageHeader.props.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 +17 -5
- package/dist/components/sidebar/Sidebar.cjs.map +2 -2
- package/dist/components/sidebar/Sidebar.d.cts +12 -1
- package/dist/components/sidebar/Sidebar.d.cts.map +1 -1
- package/dist/components/sidebar/Sidebar.d.mts +12 -1
- package/dist/components/sidebar/Sidebar.d.mts.map +1 -1
- package/dist/components/sidebar/Sidebar.d.ts +12 -1
- package/dist/components/sidebar/Sidebar.d.ts.map +1 -1
- package/dist/components/sidebar/Sidebar.js +17 -5
- 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 +86 -13
- 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 +2 -0
- package/dist/docs/README.md +2 -0
- package/dist/docs/component-contract.md +7 -4
- package/dist/docs/component-index.json +17 -1
- package/dist/docs/components/accordion.md +5 -36
- package/dist/docs/components/alert.md +44 -17
- 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 +10 -3
- package/dist/docs/components/code.md +33 -220
- package/dist/docs/components/collapsible.md +16 -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 +4 -2
- 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/environment-ribbon.md +126 -0
- package/dist/docs/components/field.md +2 -0
- 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/icon.md +1 -0
- 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 +30 -15
- package/dist/docs/components/page-header.md +20 -6
- 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 +34 -9
- 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/docs/consumer-guide.md +11 -4
- 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 +1921 -1349
- package/dist/tokens.css +346 -362
- package/package.json +1 -1
|
@@ -12,27 +12,21 @@ depends_on:
|
|
|
12
12
|
|
|
13
13
|
# FloatingPanel
|
|
14
14
|
|
|
15
|
-
> Consumer note: this document describes public intent and contracts; the package TypeScript declarations are the exact API.
|
|
16
|
-
|
|
17
15
|
## Purpose
|
|
18
16
|
|
|
19
|
-
A
|
|
17
|
+
A movable, resizable nonmodal surface. The package owns local position, size
|
|
18
|
+
and close state. A consumer persists callback values and remounts with them
|
|
19
|
+
when reopening. This is not a focus-trapped modal dialog.
|
|
20
20
|
|
|
21
21
|
## Anatomy & slots
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
|
28
|
-
|
|
29
|
-
|
|
|
30
|
-
| `FloatingPanel.Header` | `<div>` (or `Slot` host) | `dsx-floating-panel__header` | The drag handle. Carries `data-floating-panel-handle` so the root's drag handler can ignore mouse-downs on it. |
|
|
31
|
-
| `FloatingPanel.Content` | `<div>` (or `Slot` host) | `dsx-floating-panel__content` | The scrollable body region. Flexes to fill the remaining height. |
|
|
32
|
-
| `FloatingPanel.Handle` | `<div>` (or `Slot` host) | `dsx-floating-panel__handle`, `dsx-floating-panel__handle--{direction}` | The resize handle. The root auto-mounts an `se`-direction handle unless `asChild` is set. |
|
|
33
|
-
| (close button, internal) | `<button>` | `dsx-floating-panel__close` | Auto-rendered by the root. Clicking it calls `onClose` and unmounts the panel. |
|
|
34
|
-
|
|
35
|
-
The `Handle` is internal in practice. The root renders one with `direction="se"` automatically; consumers that pass `asChild` on the root take responsibility for the close button and the resize handle.
|
|
23
|
+
| Part | Host / class | Responsibility |
|
|
24
|
+
|---|---|---|
|
|
25
|
+
| Root | div or Slot / `dsx-floating-panel` | Local placement, size and gesture state |
|
|
26
|
+
| Header | div or Slot / `dsx-floating-panel__header` | Drag target, marked `data-floating-panel-handle` |
|
|
27
|
+
| Content | div or Slot / `dsx-floating-panel__content` | Scrollable body |
|
|
28
|
+
| Handle | div or Slot / `dsx-floating-panel__handle--{se,s,e}` | Resize target |
|
|
29
|
+
| Close | button / `dsx-floating-panel__close` | Internal close, `data-slot=floating-panel-close` |
|
|
36
30
|
|
|
37
31
|
## Props contract
|
|
38
32
|
|
|
@@ -40,11 +34,11 @@ The `Handle` is internal in practice. The root renders one with `direction="se"`
|
|
|
40
34
|
|
|
41
35
|
| Prop | Type | Default | Required | Description | Responsive |
|
|
42
36
|
|---|---|---|---|---|---|
|
|
43
|
-
| `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | no |
|
|
37
|
+
| `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | no | Initial size band: sm=240×180, md=320×240, lg=480×360. Writes `data-size`; JavaScript owns dimensions. | no |
|
|
44
38
|
| `defaultPosition` | `{ x: number; y: number }` | `{ x: 0; y: 0 }` | no | Initial top-left position in viewport pixels. | no |
|
|
45
|
-
| `defaultSize` | `{ width: number; height: number }` | `{ width: 320; height: 240 }` | no | Initial size in viewport pixels. | no |
|
|
46
|
-
| `onDragEnd` | `(position: { x: number; y: number }) => void` | `undefined` | no | Called
|
|
47
|
-
| `onResize` | `(size: { width: number; height: number }) => void` | `undefined` | no | Called
|
|
39
|
+
| `defaultSize` | `{ width: number; height: number }` | `{ width: 320; height: 240 }` | no | Initial size in viewport pixels; overrides the size-derived default. | no |
|
|
40
|
+
| `onDragEnd` | `(position: { x: number; y: number }) => void` | `undefined` | no | Called on completed pointer/mouse drag or keyboard movement. Receives the final bounded position. | no |
|
|
41
|
+
| `onResize` | `(size: { width: number; height: number }) => void` | `undefined` | no | Called on completed pointer/mouse resize or keyboard resize. Receives the final bounded size. | no |
|
|
48
42
|
| `onClose` | `() => void` | `undefined` | no | Called when the user closes the panel via the close button or the `Escape` key. | no |
|
|
49
43
|
| `asChild` | `boolean` | `false` | no | Renders the root through `Slot` from `@radix-ui/react-slot`. When set, the root no longer auto-mounts the close button or the resize handle. | no |
|
|
50
44
|
| `children` | `React.ReactNode` | `undefined` | no | Header, Content, and (when `asChild` is set) Handle nodes. | no |
|
|
@@ -86,294 +80,94 @@ The Content also accepts every `React.HTMLAttributes<HTMLDivElement>` key.
|
|
|
86
80
|
|
|
87
81
|
The Handle also accepts every `React.HTMLAttributes<HTMLDivElement>` key. The internal `onResize` wiring between the root and the handle is not part of the public `Handle` API; the root supplies the wiring only when it auto-mounts the handle.
|
|
88
82
|
|
|
89
|
-
Rules
|
|
83
|
+
Rules:
|
|
90
84
|
|
|
91
|
-
-
|
|
92
|
-
- Open state is internal
|
|
93
|
-
-
|
|
94
|
-
- `asChild` is
|
|
95
|
-
-
|
|
85
|
+
- Consumer `style` merges after the generated position and dimensions and may override them. Such overrides can constrain the gesture behavior.
|
|
86
|
+
- Open state is internal and initially true. Closing unmounts the panel; reopen by remounting it.
|
|
87
|
+
- A Header is the drag target when present. Without one, noninteractive body areas can drag. Buttons, links and input controls do not start dragging.
|
|
88
|
+
- `asChild` is supported on Root, Header, Content and Handle. A custom root supplies its own close control and handle.
|
|
89
|
+
- Header and Handle default to tabIndex=0 and role=group, with “Move panel” / “Resize panel” labels and keyboard instructions in their title. Consumer HTML attributes can override these defaults.
|
|
90
|
+
- JS resize floors remain 150×100px, capped by available bounds when smaller. No new token or controlled-position API is introduced.
|
|
96
91
|
|
|
97
92
|
## CSS class contract
|
|
98
93
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
| Attribute | Allowed values | Class | CSS file |
|
|
104
|
-
|---|---|---|---|
|
|
105
|
-
| `data-size` | `sm`, `md`, `lg` | (no CSS consumer; see Anomalies) | `floating-panel.css` |
|
|
106
|
-
| `data-dragging` | (presence) | `.dsx-floating-panel[data-dragging]` (shadow upgrade + grabbing cursor) | `floating-panel.css` |
|
|
107
|
-
|
|
108
|
-
**Slot classes:**
|
|
109
|
-
|
|
110
|
-
| Slot | Class | CSS file |
|
|
111
|
-
|---|---|---|
|
|
112
|
-
| `FloatingPanel.Root` | `dsx-floating-panel` | `floating-panel.css` |
|
|
113
|
-
| `FloatingPanel.Header` | `dsx-floating-panel__header` | `floating-panel.css` |
|
|
114
|
-
| `FloatingPanel.Content` | `dsx-floating-panel__content` | `floating-panel.css` |
|
|
115
|
-
| `FloatingPanel.Handle` | `dsx-floating-panel__handle`, `dsx-floating-panel__handle--{direction}` | `floating-panel.css` |
|
|
116
|
-
| (close button, internal) | `dsx-floating-panel__close` | `floating-panel.css` |
|
|
117
|
-
|
|
118
|
-
**Data attributes from the runtime:**
|
|
119
|
-
|
|
120
|
-
| Element | Attribute | Allowed values | Class hook | CSS file |
|
|
121
|
-
|---|---|---|---|---|
|
|
122
|
-
| Root | `data-dragging` | (presence) | `.dsx-floating-panel[data-dragging]` | `floating-panel.css` |
|
|
123
|
-
| Header | `data-floating-panel-handle` | (presence) | (not styled; the root's drag handler reads the attribute to ignore mouse-downs) | `floating-panel.css` |
|
|
124
|
-
|
|
125
|
-
**Data slots** (used by QA and audit tooling, not visual):
|
|
126
|
-
|
|
127
|
-
| Element | `data-slot` |
|
|
128
|
-
|---|---|
|
|
129
|
-
| Close button | `floating-panel-close` |
|
|
130
|
-
|
|
131
|
-
**Responsive behavior:**
|
|
132
|
-
|
|
133
|
-
- The component does not write `@media` rules. None of its prop defs are `responsive: true`. Size is single-value only.
|
|
134
|
-
- The component's CSS file is breakpoint-agnostic.
|
|
135
|
-
|
|
136
|
-
**Reduced motion:**
|
|
137
|
-
|
|
138
|
-
- The shell, close button, and handle each transition properties (box-shadow, color, background, opacity) against `var(--dsx-motion-duration-fast)` and `var(--dsx-motion-easing-standard)`. The runtime does not import `usePrefersReducedMotion`; rely on the global `prefers-reduced-motion` stylesheet.
|
|
94
|
+
Root writes `data-size=sm/md/lg`; dimensions are consumed in JavaScript, not
|
|
95
|
+
CSS size selectors. `data-dragging` activates the grabbing cursor and elevation.
|
|
96
|
+
Header's existing handle attribute selects drag behavior. All existing part
|
|
97
|
+
classes remain unchanged. There are no width breakpoints.
|
|
139
98
|
|
|
140
99
|
## Token mapping
|
|
141
100
|
|
|
142
|
-
Every CSS value the component paints is a `var(--dsx-*)` token.
|
|
143
|
-
|
|
144
101
|
| Property | Token | Role |
|
|
145
102
|
|---|---|---|
|
|
146
|
-
| Shell radius |
|
|
147
|
-
| Shell border |
|
|
148
|
-
| Shell fill |
|
|
149
|
-
|
|
|
150
|
-
| Shell
|
|
151
|
-
|
|
|
152
|
-
|
|
|
153
|
-
| Header
|
|
154
|
-
|
|
|
155
|
-
|
|
|
156
|
-
|
|
|
157
|
-
|
|
|
158
|
-
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
| Handle size (e) | `var(--dsx-space-sm)` wide, `var(--dsx-space-xl)` tall | East edge handle. |
|
|
172
|
-
| Handle cursor (se) | `nwse-resize` (raw) | Resize affordance. |
|
|
173
|
-
| Handle cursor (s) | `ns-resize` (raw) | Resize affordance. |
|
|
174
|
-
| Handle cursor (e) | `ew-resize` (raw) | Resize affordance. |
|
|
175
|
-
| Handle grip color | `var(--dsx-color-on-surface-variant)` | Grip stroke. |
|
|
176
|
-
| Handle grip opacity | `var(--dsx-opacity-muted)` | Resting fade. |
|
|
177
|
-
| Handle grip border width | `var(--dsx-border-width-md)` | Grip thickness. |
|
|
178
|
-
| Handle z-index | `var(--dsx-z-index-elevated)` | Above panel content. |
|
|
179
|
-
| Motion | `var(--dsx-motion-duration-fast)` + `var(--dsx-motion-easing-standard)` / `--dsx-motion-easing-in-out` | Shell, close, and handle transitions. |
|
|
180
|
-
|
|
181
|
-
Rules:
|
|
182
|
-
|
|
183
|
-
- Tokens come from `DESIGN.md` and the generated `tokens.css`. The intentional non-token values are the cursor keywords (`grab`, `grabbing`, `nwse-resize`, `ns-resize`, `ew-resize`), the `none` user-select, the `hidden` and `auto` overflow values, and the resize min dimensions in JS (`150` × `100`).
|
|
184
|
-
- The CSS file imports `../../_internal/baseCard.css`. The import only matches `.dsx-card` and `.dsx-alert` selectors, so the import is a no-op for `FloatingPanel`. See Anomalies.
|
|
103
|
+
| Shell radius | `--dsx-rounded-xl` | Corner |
|
|
104
|
+
| Shell border | `--dsx-border-width-sm`, `--dsx-color-outline` | Edge |
|
|
105
|
+
| Shell fill | `--dsx-color-panel-translucent` | Surface |
|
|
106
|
+
| Rest / drag shadow | `--dsx-shadow-elevation-2` / `--dsx-shadow-elevation-5` | Feedback |
|
|
107
|
+
| Shell layer | `--dsx-z-index-overlay-local` | Local floating surface |
|
|
108
|
+
| Viewport size cap | 100vw / 100dvh minus `--dsx-space-xl` | Keep shell reachable |
|
|
109
|
+
| Header spacing | `--dsx-space-sm`, `--dsx-space-md`, `--dsx-space-2xl` | Includes close-control clearance |
|
|
110
|
+
| Header floor | `--dsx-size-xl` | 40px header |
|
|
111
|
+
| Close box / inset | `--dsx-size-md` / `--dsx-space-sm` | 24px square with 8px clearance from the shell edge |
|
|
112
|
+
| Southeast handle | `--dsx-space-lg`, `--dsx-space-sm`, `--dsx-space-xs`, `--dsx-border-width-sm` | 24px target with two diagonal resize strokes, matching the native textarea affordance |
|
|
113
|
+
| South / east handle | `--dsx-space-xl` × `--dsx-size-md`, transposed for east | Resize target |
|
|
114
|
+
| Focus | `--dsx-shadow-focus-ring` inset | Header, handle and close focus |
|
|
115
|
+
| Body spacing | `--dsx-space-md` | Scrollable interior |
|
|
116
|
+
|
|
117
|
+
Root bounds are the viewport for fixed positioning, or the offset parent's
|
|
118
|
+
client dimensions for an overridden nonfixed position. Fixed bounds use the
|
|
119
|
+
smaller root client/border-box width so a reserved scrollbar gutter remains
|
|
120
|
+
outside the draggable area. Initial placement,
|
|
121
|
+
window resize, gestures and keyboard updates clamp the panel to these bounds.
|
|
122
|
+
The default southeast handle paints a decorative `dsx-floating-panel__resize-grip`
|
|
123
|
+
span with two CSS strokes; it does not introduce an icon name. South/east
|
|
124
|
+
handles retain the existing `grip-vertical` glyph and rotation. Custom children
|
|
125
|
+
replace the decoration. The native TextAreaField resize grip remains browser-owned.
|
|
126
|
+
Content has min-height=0 and overflow=auto. Header remains nonshrinking;
|
|
127
|
+
close and resize controls sit above body content.
|
|
185
128
|
|
|
186
129
|
## Motion contract
|
|
187
130
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
| Handle grip opacity | `var(--dsx-motion-duration-fast)` + `var(--dsx-motion-easing-standard)` | Opacity lift on hover | None declared in the file. Relies on the global stylesheet. |
|
|
193
|
-
|
|
194
|
-
Rules:
|
|
195
|
-
|
|
196
|
-
- This row does not import `MOTION_TRANSITIONS` from `src/_internal/motion.ts`. All motion is CSS-only.
|
|
197
|
-
- Drag and resize are JS-driven; the drag itself does not animate (the position update is synchronous). The shadow upgrade is the only visual cue during drag.
|
|
198
|
-
- A future promotion that adds framer-motion should pick a preset from `MOTION_TRANSITIONS` and gate it with `usePrefersReducedMotion`. A future CSS-only promotion should add a `@media (prefers-reduced-motion: reduce)` block that sets `transition: none` on the shell, close button, and handle.
|
|
131
|
+
Position and dimensions follow gestures directly. Cosmetic transitions use
|
|
132
|
+
motion-duration-fast and standard/in-out easing. The local reduced-motion
|
|
133
|
+
rule disables shell, close and handle transitions. Header and resize handles
|
|
134
|
+
use touch-action=none while body controls retain their ordinary behavior.
|
|
199
135
|
|
|
200
136
|
## Accessibility
|
|
201
137
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
- The handle is a plain `<div>` with no role. Mouse-only interaction; see Keyboard.
|
|
207
|
-
|
|
208
|
-
**Keyboard:**
|
|
209
|
-
|
|
210
|
-
| Key | Action |
|
|
211
|
-
|---|---|
|
|
212
|
-
| `Tab` | Moves focus to / from any focusable element inside the panel, and to the close button. |
|
|
213
|
-
| `Escape` | Closes the panel and calls `onClose`. The runtime installs a `document` keydown listener while the panel is open. |
|
|
214
|
-
| `Enter`, `Space` | Activates the focused control (close button, content buttons, etc.). |
|
|
215
|
-
| Arrow keys | The component does not implement keyboard-driven drag or resize. Mouse only. |
|
|
216
|
-
|
|
217
|
-
**Focus:**
|
|
138
|
+
Tab reaches Header, body controls, Close and Handle. Focused Header arrows
|
|
139
|
+
move 8px; focused Handle arrows resize 8px along its enabled axes. Shift
|
|
140
|
+
uses 40px steps. Input arrows remain input interactions. Header/Handle labels
|
|
141
|
+
can be overridden using existing HTML attributes.
|
|
218
142
|
|
|
219
|
-
|
|
220
|
-
|
|
143
|
+
Escape closes the focused panel, or the last panel in DOM order if none has
|
|
144
|
+
focus, provided the event has not already been handled. It does not close all
|
|
145
|
+
open panels. Consumer focus entry/return and persistence remain app-owned.
|
|
146
|
+
Do not add aria-modal without actual modal behavior.
|
|
221
147
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
**Color and meaning:**
|
|
227
|
-
|
|
228
|
-
- The drag and resize affordances are communicated by the cursor keyword (`grab` / `grabbing` / `nwse-resize`). Color is not the only signal.
|
|
229
|
-
|
|
230
|
-
**Naming:**
|
|
231
|
-
|
|
232
|
-
- The close button is auto-labeled `Close panel`. The runtime hard-codes the label.
|
|
233
|
-
- The panel has no implicit name. Consumers that need a panel name should add `aria-label` or `aria-labelledby` at the app level.
|
|
234
|
-
- The handle is decorative and has no accessible name.
|
|
148
|
+
Pointer cancellation restores gesture-start placement/size without committing
|
|
149
|
+
a callback. Gesture document listeners are removed on completion and unmount.
|
|
150
|
+
Keyboard alternatives do not alone establish WCAG dragging-movements
|
|
151
|
+
conformance: an application also needs a single-pointer placement alternative.
|
|
235
152
|
|
|
236
153
|
## Playground demo spec
|
|
237
154
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
**Variant story** (one per size and direction):
|
|
245
|
-
|
|
246
|
-
- Renders with `size="sm"`, `size="md"`, and `size="lg"`. Asserts the matching `data-size` attribute on the root (the CSS does not currently consume it; see Anomalies).
|
|
247
|
-
- Renders a custom `Handle` with `direction="se"`, `direction="s"`, and `direction="e"`. Asserts the matching `dsx-floating-panel__handle--{direction}` modifier class and the cursor style.
|
|
248
|
-
|
|
249
|
-
**Composition story** (one per slot):
|
|
250
|
-
|
|
251
|
-
- Renders the full slot hierarchy: `FloatingPanel` > `Header` > `Content`, with the auto-mounted `Handle`. Asserts each slot renders the right class.
|
|
252
|
-
- Renders `FloatingPanel` with `asChild`. Asserts the close button and the resize handle are no longer auto-mounted.
|
|
253
|
-
|
|
254
|
-
**State story:**
|
|
255
|
-
|
|
256
|
-
- Renders the default panel. Mouse-downs on the header, drags, and mouse-ups. Asserts the panel's `left` and `top` inline styles match the final position and that `onDragEnd` was called.
|
|
257
|
-
- Mouse-downs on the resize handle, drags, and mouse-ups. Asserts the panel's `width` and `height` inline styles match the final size and that `onResize` was called.
|
|
258
|
-
- Clicks the close button. Asserts the panel unmounts and `onClose` was called.
|
|
259
|
-
- Opens the panel and presses `Escape`. Asserts the panel unmounts and `onClose` was called.
|
|
260
|
-
|
|
261
|
-
**Token story:**
|
|
262
|
-
|
|
263
|
-
- Renders inside a `Theme` wrapper with `accentColor="amber"`, `accentColor="silver"`, and `accentColor="bronze"`. Asserts the panel surface and shadow track the active theme.
|
|
264
|
-
|
|
265
|
-
**A11y story:**
|
|
266
|
-
|
|
267
|
-
- Uses `vitest-axe` against the rendered default FloatingPanel. Asserts the close button has an accessible name and the panel does not introduce violations.
|
|
268
|
-
|
|
269
|
-
**Props exposed in the playground controls:**
|
|
270
|
-
|
|
271
|
-
| Prop | Control | Default |
|
|
272
|
-
|---|---|---|
|
|
273
|
-
| `size` | select | `md` |
|
|
274
|
-
| `defaultPosition` | text (JSON) | `{ x: 0, y: 0 }` |
|
|
275
|
-
| `defaultSize` | text (JSON) | `{ width: 320, height: 240 }` |
|
|
276
|
-
| `asChild` | boolean | `false` |
|
|
155
|
+
`/docs/floating-panel` launches real editable notes in a wrapping TextArea in all size bands; the whole note is readable without widening the panel. Its live
|
|
156
|
+
example retains callback placement/size and note text when reopening, offers
|
|
157
|
+
Reset placement and numeric placement controls without dragging, and returns
|
|
158
|
+
focus to its launcher when closed. Review mouse/touch header movement, corner
|
|
159
|
+
resize, body editing, keyboard control and viewport containment.
|
|
277
160
|
|
|
278
161
|
## Wiring notes
|
|
279
162
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
- `@radix-ui/react-slot`: enables `asChild` on Root, Header, Content, and Handle.
|
|
285
|
-
|
|
286
|
-
**Used by:**
|
|
287
|
-
|
|
288
|
-
- App-level floating surfaces that need persistent placement and resizing: dashboards, design tools, chart inspectors. No DS component currently wraps `FloatingPanel`. The roster classifies this as a heavy surface; the package owns the shell, the token bindings, and the drag / resize plumbing; apps own persistence, the panel registry, and the focus-trap / dialog semantics.
|
|
289
|
-
|
|
290
|
-
**State boundaries:**
|
|
291
|
-
|
|
292
|
-
- Owned by FloatingPanel: the open state, the position, the size, the drag delta, the resize delta, the `Escape` keydown listener, the auto-mounted close button, and the auto-mounted resize handle.
|
|
293
|
-
- Owned by the consumer: the Header content, the Content body, the optional custom Handle, the `defaultPosition` and `defaultSize` inputs, the `onDragEnd` / `onResize` / `onClose` callbacks, and the focus / dialog semantics.
|
|
294
|
-
|
|
295
|
-
**Boundary rules:**
|
|
296
|
-
|
|
297
|
-
- App-owned data: the panel registry, the persistence of position and size across sessions, the routing integration, and the focus management.
|
|
298
|
-
- DS-owned visuals: token bindings, the `dsx-floating-panel` and slot classes, the `data-size` and `data-dragging` attributes, the close button label, and the resize handle directions.
|
|
299
|
-
- The component does not own a `Dialog` integration. Wrap in a Radix `Dialog` (or set up focus trapping) at the app level for full modal semantics.
|
|
300
|
-
|
|
301
|
-
**Anomalies** (open items that this spec flags):
|
|
302
|
-
|
|
303
|
-
1. **Roster says `Popover, Dialog`; runtime uses neither.** The current runtime at `package_path` does not import Radix Popover or Radix Dialog. Open state, focus, and `Escape` are managed in source via `useState` and a `document.addEventListener('keydown')` listener. Promoting to a `BaseDialog`-backed runtime is tracked as a future item.
|
|
304
|
-
2. **`data-size` attribute has no CSS consumer.** The TSX writes `data-size` on the root and the prop def lists three values (`sm`, `md`, `lg`), but the CSS does not define any `[data-size]` rule. The attribute is a forward-looking hook; the visual treatment today is the same across all three sizes.
|
|
305
|
-
3. **`baseCard.css` import is a no-op.** The CSS file imports `../../_internal/baseCard.css`, which only targets `.dsx-card` and `.dsx-alert`. The import should be removed or `baseCard.css` should be extended to also match `.dsx-floating-panel`.
|
|
306
|
-
4. **Resize min dimensions are raw JS values.** The resize handler clamps the size to `width >= 150` and `height >= 100`. These are not tokens; the next promotion should add `--dsx-floating-panel-min-width` and `--dsx-floating-panel-min-height` (or fold the constraints into the existing size scale).
|
|
307
|
-
5. **Open state is internal and one-shot.** The runtime does not expose `open` or `onOpenChange` props. The component returns `null` after `onClose`; the consumer must remount to reopen. A future promotion should lift the open state.
|
|
308
|
-
6. **Drag math ignores the resize handle and the close button.** The root's `onMouseDown` starts a drag unless the target is the closest `[data-floating-panel-handle]`. The close button does not have `data-floating-panel-handle`, but the drag handler can still fire on a click that lands inside it because the mouse-up handler is bound to `document`. A future promotion should also bail out of drag on `[data-floating-panel-close]`.
|
|
309
|
-
7. **No `prefers-reduced-motion` block in `floating-panel.css`.** The shell, close button, and handle transitions are not explicitly collapsed on the media query. The next promotion should add a `@media (prefers-reduced-motion: reduce)` block.
|
|
310
|
-
8. **The auto-mounted `Handle` always uses `direction="se"`.** Consumers that need south or east edge handles must render the `Handle` themselves and set `asChild` on the root, which also removes the close button. There is no public API to keep the close button while changing the handle direction.
|
|
163
|
+
The component uses React state and pointer/mouse document listeners. Slot
|
|
164
|
+
supports custom hosts. Consumer handlers are composed before root gesture
|
|
165
|
+
handling and can preventDefault. No public controlled position/open props,
|
|
166
|
+
new tokens, or `_internal` engine changes are introduced.
|
|
311
167
|
|
|
312
168
|
## Penpot build recipe
|
|
313
169
|
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
### Root board
|
|
319
|
-
|
|
320
|
-
- **Name**: `Components / FloatingPanel`.
|
|
321
|
-
- **Dimensions**: `320 × 240` (default), `width × height` driven by `defaultSize`.
|
|
322
|
-
- **Layout**: `Flex` (column, header above content).
|
|
323
|
-
- **Sizing**: `horizontalSizing = 'fix'`, `verticalSizing = 'fix'`. Position is `fixed` with `left` / `top` driven by `defaultPosition`.
|
|
324
|
-
|
|
325
|
-
### Layer tree
|
|
326
|
-
|
|
327
|
-
```
|
|
328
|
-
<Root Board: FloatingPanel>
|
|
329
|
-
├── <Frame: header (drag handle)>
|
|
330
|
-
│ └── <Text: title>
|
|
331
|
-
├── <Frame: content (scrollable)>
|
|
332
|
-
│ └── <Text: body>
|
|
333
|
-
├── <Button: close (X icon, top-right)>
|
|
334
|
-
└── <Shape: resize handle (southeast corner)>
|
|
335
|
-
```
|
|
336
|
-
|
|
337
|
-
### Token bindings (Penpot properties)
|
|
338
|
-
|
|
339
|
-
| Shape | Property | Token | Token type | Penpot property name |
|
|
340
|
-
|---|---|---|---|---|
|
|
341
|
-
| Shell | fill | `--dsx-color-panel-translucent` | Color | `fills` |
|
|
342
|
-
| Shell | stroke | `--dsx-color-outline` | Color | `strokes` |
|
|
343
|
-
| Shell | radius | `--dsx-rounded-xl` | Radius | `radius` |
|
|
344
|
-
| Shell | shadow | `--dsx-shadow-elevation-2` | Effect | `shadow` |
|
|
345
|
-
| Shell (dragging) | shadow | `--dsx-shadow-elevation-5` | Effect | `shadow` (state) |
|
|
346
|
-
| Header | fill | `--dsx-color-surface-raised` | Color | `fills` |
|
|
347
|
-
| Header | stroke | `--dsx-color-outline-variant` | Color | `strokes` |
|
|
348
|
-
| Content | padding | `--dsx-space-md` | Spacing | `padding` |
|
|
349
|
-
| Close | fill | `transparent` | Color | `fills` |
|
|
350
|
-
| Close (hover) | fill | `--dsx-effect-hover-layer` | Color | `fills` (state) |
|
|
351
|
-
| Close (hover) | text | `--dsx-color-on-surface` | Color | `fills` (state) |
|
|
352
|
-
| Handle | stroke | `--dsx-color-on-surface-variant` | Color | `strokes` |
|
|
353
|
-
| Handle | opacity | `--dsx-opacity-muted` | Effect | `opacity` |
|
|
354
|
-
|
|
355
|
-
### State transformations
|
|
356
|
-
|
|
357
|
-
| State | Shell shadow | Header cursor | Close fill | Handle opacity |
|
|
358
|
-
|---|---|---|---|---|
|
|
359
|
-
| `default` | `--dsx-shadow-elevation-2` | `grab` | `transparent` | `--dsx-opacity-muted` |
|
|
360
|
-
| `dragging` | `--dsx-shadow-elevation-5` | `grabbing` | `transparent` | `1` |
|
|
361
|
-
| `close-hover` | `--dsx-shadow-elevation-2` | `grab` | `--dsx-effect-hover-layer` | `--dsx-opacity-muted` |
|
|
362
|
-
| `handle-hover` | `--dsx-shadow-elevation-2` | `grab` | `transparent` | `1` |
|
|
363
|
-
|
|
364
|
-
### Variant model
|
|
365
|
-
|
|
366
|
-
- `size`: `sm`, `md`, `lg`. Default `md`. (CSS consumer pending; see Anomalies.)
|
|
367
|
-
- `direction` (handle): `se`, `s`, `e`. Default `se`.
|
|
368
|
-
- Total members for the visual matrix: 3 × 3 = 9 once the `data-size` CSS consumer lands. Today the visual matrix is 3 (handle direction only).
|
|
369
|
-
|
|
370
|
-
### Validation checklist
|
|
371
|
-
|
|
372
|
-
- [ ] Token bindings resolve at the values `DESIGN.md` describes.
|
|
373
|
-
- [ ] Component is promoted to Main Component under `Components`.
|
|
374
|
-
- [ ] `penpotUtils.shapeStructure(board, 3)` matches the expected hierarchy.
|
|
375
|
-
- [ ] The close button label is `Close panel`; do not treat the label as themable in Penpot.
|
|
376
|
-
- [ ] The close button glyph is the `X` Icon; do not treat the glyph as themable in Penpot.
|
|
377
|
-
- [ ] When the `data-size` CSS consumer lands, re-run the spec QA and re-validate the Penpot recipe against the new CSS.
|
|
378
|
-
- [ ] When the `BaseDialog` portal routing lands, re-run the spec QA and confirm the panel tracks `data-accent-color` and the rest of the theme contract.
|
|
379
|
-
- [ ] When the resize min dimensions are tokenized, update the JS clamp to read from the token instead of the hard-coded `150` and `100`.
|
|
170
|
+
No published asset is changed. Mirror existing shell, header, scrollable body,
|
|
171
|
+
close corner and directional handles using the token mapping above. Use
|
|
172
|
+
240×180 / 320×240 / 480×360 initial frames with the viewport cap; static art
|
|
173
|
+
cannot establish drag or keyboard behavior.
|
|
@@ -326,3 +326,7 @@ The package does not yet publish a Penpot asset for Form. Recipe is visual refer
|
|
|
326
326
|
- [ ] Component is promoted to Main Component under `Components`.
|
|
327
327
|
- [ ] `penpotUtils.shapeStructure(board, 3)` matches the expected hierarchy.
|
|
328
328
|
- [ ] The form's `data-slot` attributes are baked in for QA tooling.
|
|
329
|
+
|
|
330
|
+
## Reconciliation stories
|
|
331
|
+
|
|
332
|
+
The live example wires React Hook Form instances to both Profile and Event forms. It proves invalid email feedback, successful submit, reset, labelled fields, room selection and a one-to-two-column event row through Grid. Hosts use width:100% with a maximum width; inline actions wrap at 320/390px.
|
|
@@ -29,8 +29,8 @@ No slots: flat export. `Grid` is a single forwardRef that renders a host element
|
|
|
29
29
|
|---|---|---|---|---|---|
|
|
30
30
|
| `as` | `React.ElementType` | `'div'` | no | Host element. `asChild` takes precedence when set. | no |
|
|
31
31
|
| `asChild` | `boolean` | `false` | no | Renders the host through `Slot`; consumer supplies the child. | no |
|
|
32
|
-
| `columns` | `ResponsiveValue<number \| string>` | `undefined` | no | CSS `grid-template-columns`. Number values resolve to `repeat(n, minmax(0, 1fr))`.
|
|
33
|
-
| `rows` | `ResponsiveValue<number \| string>` | `undefined` | no | CSS `grid-template-rows`. Number values resolve to `repeat(n, minmax(0, 1fr))`.
|
|
32
|
+
| `columns` | `ResponsiveValue<number \| string>` | `undefined` | no | CSS `grid-template-columns`. Number values and digit-only strings resolve to `repeat(n, minmax(0, 1fr))`. Other string values are written through (e.g. `7rem`, `200px 1fr`). When `minItemWidth` is set, the runtime uses `repeat(auto-fit, minmax(<minItemWidth>, 1fr))` instead. Resolves `--dsx-grid-columns`. | yes (initial, sm, md, lg, xl, 2xl) |
|
|
33
|
+
| `rows` | `ResponsiveValue<number \| string>` | `undefined` | no | CSS `grid-template-rows`. Number values and digit-only strings resolve to `repeat(n, minmax(0, 1fr))`. Other string values are written through. Resolves `--dsx-grid-rows`. | yes (initial, sm, md, lg, xl, 2xl) |
|
|
34
34
|
| `areas` | `ResponsiveValue<string>` | `undefined` | no | CSS `grid-template-areas`. Resolves `--dsx-grid-areas`. | yes (initial, sm, md, lg, xl, 2xl) |
|
|
35
35
|
| `flow` | `ResponsiveValue<'row' \| 'column' \| 'dense' \| 'row dense' \| 'column dense'>` | `undefined` | no | CSS `grid-auto-flow`. Resolves `--dsx-grid-auto-flow`. | yes (initial, sm, md, lg, xl, 2xl) |
|
|
36
36
|
| `gap` | `ResponsiveValue<SpaceToken \| string>` | `undefined` | no | Gap between children. Resolves `--dsx-box-gap`. Serialized into `data-gap`. | yes (initial, sm, md, lg, xl, 2xl) |
|
|
@@ -94,7 +94,8 @@ The `dsx-grid` selector wires the grid-template custom properties:
|
|
|
94
94
|
**Responsive behavior:**
|
|
95
95
|
|
|
96
96
|
- The runtime writes `--dsx-grid-columns` (and other `--dsx-grid-*` variables) per breakpoint through `assignResponsiveVars` for the inline-style cascade.
|
|
97
|
-
- The breakpoint alias props `sm`, `md`, `lg`
|
|
97
|
+
- The breakpoint alias props `sm`, `md`, `lg` override their corresponding entries and preserve the rest of the responsive map, including `xl` and `2xl`.
|
|
98
|
+
- Columns and rows use only the component custom-property cascade; duplicate track utility classes are not emitted. Auto-fit minimum widths carry forward as widths and take precedence over column counts until another minimum width is supplied.
|
|
98
99
|
|
|
99
100
|
**Reduced motion:**
|
|
100
101
|
|
|
@@ -157,65 +158,11 @@ Grid has no motion. The motion section is intentionally empty.
|
|
|
157
158
|
|
|
158
159
|
- Grid is not interactive and does not require an accessible name on its own. When Grid wraps an interactive element, the interactive element's accessible name is the source.
|
|
159
160
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
**Default story:**
|
|
163
|
-
|
|
164
|
-
- Renders `Grid columns="3" gap="sm"` with six child squares. Asserts the root class is `dsx-grid`, the host element is a `div`, and the children render.
|
|
165
|
-
|
|
166
|
-
**Column story:**
|
|
167
|
-
|
|
168
|
-
- Renders `Grid columns={2}` and `Grid columns={{ initial: 1, sm: 2, md: 3 }}`. Asserts the `dsx-grid` class and the per-breakpoint `--dsx-grid-columns` custom property.
|
|
169
|
-
|
|
170
|
-
**Areas story:**
|
|
171
|
-
|
|
172
|
-
- Renders `Grid areas='"head head" "side main"'` and asserts `--dsx-grid-areas` resolves to that value.
|
|
173
|
-
|
|
174
|
-
**Flow story:**
|
|
175
|
-
|
|
176
|
-
- Renders `Grid flow="column dense"` and asserts `--dsx-grid-auto-flow` resolves to `column dense`.
|
|
177
|
-
|
|
178
|
-
**MinItemWidth story:**
|
|
179
|
-
|
|
180
|
-
- Renders `Grid minItemWidth={200}` and asserts `--dsx-grid-columns` resolves to `repeat(auto-fit, minmax(200px, 1fr))`.
|
|
181
|
-
|
|
182
|
-
**Breakpoint alias story:**
|
|
183
|
-
|
|
184
|
-
- Renders `Grid columns={2} sm={{ columns: 3, gap: 'sm' }} md={{ columns: 4, gap: 'lg' }} lg={{ columns: 6, gap: 'xl' }}`. Asserts the merged values resolve in the per-breakpoint custom properties.
|
|
185
|
-
|
|
186
|
-
**Responsive story:**
|
|
161
|
+
The matrix numbers all six cells at a fixed available width; the live example arranges realistic project cards in one initial column and two columns at sm.
|
|
187
162
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
**Composition story:**
|
|
191
|
-
|
|
192
|
-
- Renders `Grid` with mixed `Box` children. Asserts the children keep their own `dsx-box` class and inherit the Grid container's gap.
|
|
193
|
-
|
|
194
|
-
**State story:**
|
|
195
|
-
|
|
196
|
-
- No discrete state. The story renders a default Grid with six children.
|
|
197
|
-
|
|
198
|
-
**Token story:**
|
|
199
|
-
|
|
200
|
-
- Grid does not honor `data-accent-color`. Render inside a `Theme` wrapper with `accentColor="silver"` and `accentColor="bronze"`. The story asserts the layout is unchanged and any surfaces come from the theme.
|
|
201
|
-
|
|
202
|
-
**A11y story:**
|
|
203
|
-
|
|
204
|
-
- Use `vitest-axe` against the rendered Grid. The default render is a non-semantic `div` with text content; tests assert no violations.
|
|
205
|
-
|
|
206
|
-
**Props exposed in the playground controls:**
|
|
163
|
+
## Playground demo spec
|
|
207
164
|
|
|
208
|
-
|
|
209
|
-
|---|---|---|
|
|
210
|
-
| `columns` | number | `3` |
|
|
211
|
-
| `rows` | number | `undefined` |
|
|
212
|
-
| `gap` | select | `md` |
|
|
213
|
-
| `flow` | select | `row` |
|
|
214
|
-
| `align` | select | `stretch` |
|
|
215
|
-
| `justify` | select | `start` |
|
|
216
|
-
| `alignContent` | select | `normal` |
|
|
217
|
-
| `justifyItems` | select | `legacy` |
|
|
218
|
-
| `minItemWidth` | number | `undefined` |
|
|
165
|
+
The columns matrix shows six numbered cells at one fixed available width for one, two and three columns. The live example shows four project cards using columns={{ initial: '1', sm: '2' }} and gap="md". Narrow screens stack the cards; desktop uses two equal tracks.
|
|
219
166
|
|
|
220
167
|
## Wiring notes
|
|
221
168
|
|
|
@@ -247,3 +194,7 @@ Grid has no motion. The motion section is intentionally empty.
|
|
|
247
194
|
## Penpot build recipe
|
|
248
195
|
|
|
249
196
|
Grid is a layout primitive. The package code is the only authority. There is no published Penpot build recipe for Grid. A future Penpot board would show a grid container with columns, rows, areas, and gap controls, but the spec intentionally does not duplicate the runtime class contract in a visual recipe.
|
|
197
|
+
|
|
198
|
+
## Reconciliation stories
|
|
199
|
+
|
|
200
|
+
The live example compares numeric and digit-string responsive columns, sm aliases with retained xl/2xl entries, carried auto-fit widths and numeric responsive rows. Browser checks measure actual track count and geometry at breakpoint boundaries.
|