@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
package/README.md
CHANGED
|
@@ -12,6 +12,25 @@ pnpm add @d4gger/design-system react react-dom lucide-react
|
|
|
12
12
|
React 18 and 19 are supported. Add optional peers only for the advanced
|
|
13
13
|
surfaces you use.
|
|
14
14
|
|
|
15
|
+
## Migrating from 3.x
|
|
16
|
+
|
|
17
|
+
Text and Heading now accept single typography and spacing values. Replace
|
|
18
|
+
responsive maps on `size`, `color`, `align`, `wrap`, `trim`, `weight`, and
|
|
19
|
+
the margin/padding props with scalar values. Choose one readable type role;
|
|
20
|
+
put responsive spacing and composition on layout primitives such as Flex and Grid.
|
|
21
|
+
|
|
22
|
+
```tsx
|
|
23
|
+
// 3.x
|
|
24
|
+
<Text size={{ initial: '2', md: '3' }}>Workspace update</Text>
|
|
25
|
+
|
|
26
|
+
// 4.x
|
|
27
|
+
<Text size="3">Workspace update</Text>
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Responsive layout props remain available. There is no compatibility adapter
|
|
31
|
+
for the removed typography maps. Rebuild generated declarations and styles
|
|
32
|
+
together when upgrading.
|
|
33
|
+
|
|
15
34
|
## Start using it
|
|
16
35
|
|
|
17
36
|
Import the complete stylesheet once at application entry:
|
package/dist/brand-effects.css
CHANGED
|
@@ -16,10 +16,12 @@
|
|
|
16
16
|
|
|
17
17
|
.dsx-brand-ambient {
|
|
18
18
|
background-color: var(--dsx-color-background);
|
|
19
|
+
/* The three washes are multiples of the theme-aware ambient strength (G-16, 2026-10-05): at the dark value of 10% they are the
|
|
20
|
+
22% / 12% / 8% they always were, and light, which is raised, gets the same proportions. */
|
|
19
21
|
background-image:
|
|
20
|
-
radial-gradient(ellipse 900px 500px at 15% -5%, color-mix(in srgb, var(--dsx-color-primary)
|
|
21
|
-
radial-gradient(ellipse 700px 400px at 88% 8%, color-mix(in srgb, var(--dsx-color-secondary)
|
|
22
|
-
radial-gradient(ellipse 600px 300px at 50% 100%, color-mix(in srgb, var(--dsx-color-primary) 8
|
|
22
|
+
radial-gradient(ellipse 900px 500px at 15% -5%, color-mix(in srgb, var(--dsx-color-primary) calc(var(--dsx-effect-ambient-strength) * 2.2), transparent), transparent 55%),
|
|
23
|
+
radial-gradient(ellipse 700px 400px at 88% 8%, color-mix(in srgb, var(--dsx-color-secondary) calc(var(--dsx-effect-ambient-strength) * 1.2), transparent), transparent 50%),
|
|
24
|
+
radial-gradient(ellipse 600px 300px at 50% 100%, color-mix(in srgb, var(--dsx-color-primary) calc(var(--dsx-effect-ambient-strength) * 0.8), transparent), transparent 60%),
|
|
23
25
|
linear-gradient(180deg, var(--dsx-color-surface) 0%, var(--dsx-color-background) 50%);
|
|
24
26
|
background-repeat: no-repeat;
|
|
25
27
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
.dsx-accordion__item {
|
|
4
4
|
width: 100%;
|
|
5
|
-
overflow:
|
|
5
|
+
overflow: visible;
|
|
6
6
|
border-bottom: var(--dsx-border-width-sm) solid var(--dsx-color-outline);
|
|
7
7
|
}
|
|
8
8
|
|
|
@@ -33,10 +33,11 @@
|
|
|
33
33
|
flex: 1;
|
|
34
34
|
min-width: 0;
|
|
35
35
|
text-align: start;
|
|
36
|
+
overflow-wrap: anywhere;
|
|
36
37
|
}
|
|
37
38
|
|
|
38
39
|
.dsx-accordion__trigger[data-state='open'] {
|
|
39
|
-
color: var(--dsx-color-
|
|
40
|
+
color: var(--dsx-color-accent-indicator);
|
|
40
41
|
}
|
|
41
42
|
|
|
42
43
|
.dsx-accordion__trigger:focus-visible {
|
|
@@ -89,3 +90,9 @@
|
|
|
89
90
|
font-family: var(--dsx-typography-body-medium-font-family), sans-serif;
|
|
90
91
|
font-size: var(--dsx-typography-body-medium-font-size);
|
|
91
92
|
}
|
|
93
|
+
|
|
94
|
+
@media (prefers-reduced-motion: reduce) {
|
|
95
|
+
.dsx-accordion__chevron { transition: none; }
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.dsx-accordion__trigger:disabled { opacity: var(--dsx-opacity-disabled); }
|
|
@@ -39,7 +39,6 @@ var React = __toESM(require("react"), 1);
|
|
|
39
39
|
var import_classnames = __toESM(require("classnames"), 1);
|
|
40
40
|
var import_react_slot = require("@radix-ui/react-slot");
|
|
41
41
|
var import_extractProps = require("../../_internal/helpers/extractProps");
|
|
42
|
-
var import_Card = require("../card/Card");
|
|
43
42
|
var import_Icon = require("../icon/Icon");
|
|
44
43
|
var import_alert = require("./alert.props");
|
|
45
44
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
@@ -47,6 +46,11 @@ const AlertAction = React.forwardRef(
|
|
|
47
46
|
({ className, ...props }, forwardedRef) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ...props, ref: forwardedRef, className: (0, import_classnames.default)("dsx-alert__action", className) })
|
|
48
47
|
);
|
|
49
48
|
AlertAction.displayName = "AlertAction";
|
|
49
|
+
const isAlertAction = (node) => React.isValidElement(node) && node.type === AlertAction;
|
|
50
|
+
function splitAlertChildren(children) {
|
|
51
|
+
const nodes = React.Children.toArray(children);
|
|
52
|
+
return { actions: nodes.filter(isAlertAction), body: nodes.filter((node) => !isAlertAction(node)) };
|
|
53
|
+
}
|
|
50
54
|
const AlertRoot = React.forwardRef((props, forwardedRef) => {
|
|
51
55
|
const {
|
|
52
56
|
asChild,
|
|
@@ -54,6 +58,7 @@ const AlertRoot = React.forwardRef((props, forwardedRef) => {
|
|
|
54
58
|
color,
|
|
55
59
|
highContrast = false,
|
|
56
60
|
icon,
|
|
61
|
+
children,
|
|
57
62
|
role,
|
|
58
63
|
size = "md",
|
|
59
64
|
variant = "default",
|
|
@@ -61,19 +66,27 @@ const AlertRoot = React.forwardRef((props, forwardedRef) => {
|
|
|
61
66
|
} = (0, import_extractProps.extractProps)(props, import_alert.alertPropDefs);
|
|
62
67
|
const Comp = asChild ? import_react_slot.Slot : "div";
|
|
63
68
|
const fallbackIcon = variant === "success" ? "check-circle" : variant === "default" ? "info" : "alert-triangle";
|
|
69
|
+
const child = asChild ? React.Children.only(children) : null;
|
|
70
|
+
const { actions, body } = splitAlertChildren(child ? child.props.children : children);
|
|
71
|
+
const content = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
72
|
+
icon === null ? null : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { "aria-hidden": "true", className: "dsx-alert__icon", children: icon ?? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Icon.Icon, { name: fallbackIcon, size: "md", strokeWidth: "var(--dsx-icon-stroke-width-strong, 2.25)" }) }),
|
|
73
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "dsx-alert__main", children: [
|
|
74
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "dsx-alert__content", children: body }),
|
|
75
|
+
actions.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "dsx-alert__actions", children: actions }) : null
|
|
76
|
+
] })
|
|
77
|
+
] });
|
|
64
78
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
65
|
-
|
|
79
|
+
Comp,
|
|
66
80
|
{
|
|
67
|
-
|
|
81
|
+
...alertProps,
|
|
82
|
+
ref: forwardedRef,
|
|
83
|
+
role: role ?? "alert",
|
|
68
84
|
className: (0, import_classnames.default)("dsx-alert", className),
|
|
69
85
|
"data-accent-color": color,
|
|
70
86
|
"data-high-contrast": highContrast ? "true" : void 0,
|
|
71
87
|
"data-size": size,
|
|
72
88
|
"data-variant": variant,
|
|
73
|
-
children:
|
|
74
|
-
icon === null ? null : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { "aria-hidden": "true", className: "dsx-alert__icon", children: icon ?? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Icon.Icon, { name: fallbackIcon, size: "md", strokeWidth: "var(--dsx-icon-stroke-width-strong, 2.25)" }) }),
|
|
75
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "dsx-alert__content", children: alertProps.children })
|
|
76
|
-
] })
|
|
89
|
+
children: child ? React.cloneElement(child, void 0, content) : content
|
|
77
90
|
}
|
|
78
91
|
);
|
|
79
92
|
});
|
|
@@ -84,16 +97,21 @@ const AlertTitle = React.forwardRef((props, forwardedRef) => {
|
|
|
84
97
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Comp, { ...titleProps, ref: forwardedRef, className: (0, import_classnames.default)("dsx-alert__title", className) });
|
|
85
98
|
});
|
|
86
99
|
AlertTitle.displayName = "AlertTitle";
|
|
100
|
+
const isLineClamp = (value) => typeof value === "number" && Number.isInteger(value) && value >= 1;
|
|
87
101
|
const AlertDescription = React.forwardRef(
|
|
88
102
|
(props, forwardedRef) => {
|
|
89
|
-
const {
|
|
103
|
+
const { lineClamp, style, ...ownProps } = props;
|
|
104
|
+
const { asChild, className, ...descriptionProps } = (0, import_extractProps.extractProps)(ownProps, import_alert.alertDescriptionPropDefs);
|
|
90
105
|
const Comp = asChild ? import_react_slot.Slot : "p";
|
|
106
|
+
const clamp = isLineClamp(lineClamp) ? lineClamp : void 0;
|
|
91
107
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
92
108
|
Comp,
|
|
93
109
|
{
|
|
94
110
|
...descriptionProps,
|
|
95
111
|
ref: forwardedRef,
|
|
96
|
-
className: (0, import_classnames.default)("dsx-alert__description", className)
|
|
112
|
+
className: (0, import_classnames.default)("dsx-alert__description", className),
|
|
113
|
+
"data-line-clamp": clamp,
|
|
114
|
+
style: clamp ? { ...style, "--dsx-alert-line-clamp": clamp } : style
|
|
97
115
|
}
|
|
98
116
|
);
|
|
99
117
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/components/alert/Alert.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react'\nimport classNames from 'classnames'\nimport { Slot } from '@radix-ui/react-slot'\n\nimport { extractProps } from '../../_internal/helpers/extractProps'\nimport {
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAuB;AACvB,wBAAuB;AACvB,wBAAqB;AAErB,0BAA6B;AAC7B,
|
|
4
|
+
"sourcesContent": ["import * as React from 'react'\nimport classNames from 'classnames'\nimport { Slot } from '@radix-ui/react-slot'\n\nimport { extractProps } from '../../_internal/helpers/extractProps'\nimport { Icon } from '../icon/Icon'\nimport { alertDescriptionPropDefs, alertPropDefs, alertTitlePropDefs } from './alert.props'\n\nimport type { GetPropDefTypes } from '../../_internal/props/propDef'\n\ntype AlertActionElement = React.ComponentRef<'div'>\n\nconst AlertAction = React.forwardRef<AlertActionElement, React.ComponentPropsWithoutRef<'div'>>(\n ({ className, ...props }, forwardedRef) => (\n <div {...props} ref={forwardedRef} className={classNames('dsx-alert__action', className)} />\n ),\n)\nAlertAction.displayName = 'AlertAction'\n\nconst isAlertAction = (node: React.ReactNode): boolean => React.isValidElement(node) && node.type === AlertAction\n\n// An `Alert.Action` that is a direct child sits beside the content, not inside it, in one `.dsx-alert__actions` group: the\n// group trails the row, and wraps below the text as a whole when it is narrow, under the text and not under the icon (the\n// icon is one column, the text and the group are the other: `.dsx-alert__main`). A consumer who nests an action in their own\n// wrapper keeps it in the content.\nfunction splitAlertChildren(children: React.ReactNode): { actions: React.ReactNode[]; body: React.ReactNode[] } {\n const nodes = React.Children.toArray(children)\n return { actions: nodes.filter(isAlertAction), body: nodes.filter((node) => !isAlertAction(node)) }\n}\n\ntype AlertElement = React.ComponentRef<'div'>\ntype AlertOwnProps = GetPropDefTypes<typeof alertPropDefs> & {\n icon?: React.ReactNode\n}\n\ninterface AlertProps extends Omit<React.ComponentPropsWithoutRef<'div'>, 'color'>, AlertOwnProps {}\n\nconst AlertRoot = React.forwardRef<AlertElement, AlertProps>((props, forwardedRef) => {\n const {\n asChild,\n className,\n color,\n highContrast = false,\n icon,\n children,\n role,\n size = 'md',\n variant = 'default',\n ...alertProps\n } = extractProps(props, alertPropDefs)\n const Comp = asChild ? Slot : 'div'\n const fallbackIcon = variant === 'success' ? 'check-circle' : variant === 'default' ? 'info' : 'alert-triangle'\n const child = asChild ? React.Children.only(children) as React.ReactElement<{ children?: React.ReactNode }> : null\n const { actions, body } = splitAlertChildren(child ? child.props.children : children)\n const content = <>\n {icon === null ? null : (\n <span aria-hidden=\"true\" className=\"dsx-alert__icon\">\n {icon ?? <Icon name={fallbackIcon} size=\"md\" strokeWidth=\"var(--dsx-icon-stroke-width-strong, 2.25)\" />}\n </span>\n )}\n <div className=\"dsx-alert__main\">\n <div className=\"dsx-alert__content\">{body}</div>\n {actions.length > 0 ? <div className=\"dsx-alert__actions\">{actions}</div> : null}\n </div>\n </>\n\n return (\n <Comp\n {...alertProps}\n ref={forwardedRef}\n role={role ?? 'alert'}\n className={classNames('dsx-alert', className)}\n data-accent-color={color}\n data-high-contrast={highContrast ? 'true' : undefined}\n data-size={size}\n data-variant={variant}\n >\n {child ? React.cloneElement(child, undefined, content) : content}\n </Comp>\n )\n})\nAlertRoot.displayName = 'Alert'\n\ntype AlertTitleElement = React.ComponentRef<'h5'>\ntype AlertTitleOwnProps = GetPropDefTypes<typeof alertTitlePropDefs>\n\ninterface AlertTitleProps extends React.ComponentPropsWithoutRef<'h5'>, AlertTitleOwnProps {}\n\nconst AlertTitle = React.forwardRef<AlertTitleElement, AlertTitleProps>((props, forwardedRef) => {\n const { asChild, className, ...titleProps } = extractProps(props, alertTitlePropDefs)\n const Comp = asChild ? Slot : 'h5'\n\n return <Comp {...titleProps} ref={forwardedRef} className={classNames('dsx-alert__title', className)} />\n})\nAlertTitle.displayName = 'AlertTitle'\n\ntype AlertDescriptionElement = React.ComponentRef<'p'>\ntype AlertDescriptionOwnProps = GetPropDefTypes<typeof alertDescriptionPropDefs>\n\ninterface AlertDescriptionProps\n extends React.ComponentPropsWithoutRef<'p'>,\n AlertDescriptionOwnProps {\n /**\n * Clamp the text to this many lines (a whole number of 1 or more); the rest is clipped with an ellipsis. Anything else\n * leaves the text unclamped. Whether the text is clipped, and how to reveal it, is the consumer's: it can measure the\n * element (`scrollHeight > clientHeight`) and drop the prop to show everything.\n */\n lineClamp?: number\n}\n\nconst isLineClamp = (value: unknown): value is number =>\n typeof value === 'number' && Number.isInteger(value) && value >= 1\n\nconst AlertDescription = React.forwardRef<AlertDescriptionElement, AlertDescriptionProps>(\n (props, forwardedRef) => {\n // `lineClamp` is behaviour-only, so it stays out of extractProps (it has no class mapping and would leak to the DOM).\n const { lineClamp, style, ...ownProps } = props\n const { asChild, className, ...descriptionProps } = extractProps(ownProps, alertDescriptionPropDefs)\n const Comp = asChild ? Slot : 'p'\n const clamp = isLineClamp(lineClamp) ? lineClamp : undefined\n\n return (\n <Comp\n {...descriptionProps}\n ref={forwardedRef}\n className={classNames('dsx-alert__description', className)}\n data-line-clamp={clamp}\n style={clamp ? ({ ...style, '--dsx-alert-line-clamp': clamp } as React.CSSProperties) : style}\n />\n )\n },\n)\nAlertDescription.displayName = 'AlertDescription'\n\nconst Alert: typeof AlertRoot & {\n Title: typeof AlertTitle\n Description: typeof AlertDescription\n Action: typeof AlertAction\n} = Object.assign(AlertRoot, {\n Title: AlertTitle,\n Description: AlertDescription,\n Action: AlertAction,\n})\n\nexport { Alert, AlertAction, AlertDescription, AlertRoot, AlertTitle }\nexport type { AlertDescriptionProps, AlertProps, AlertTitleProps }\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["classNames"]
|
|
7
7
|
}
|
|
@@ -14,6 +14,12 @@ interface AlertTitleProps extends React.ComponentPropsWithoutRef<'h5'>, AlertTit
|
|
|
14
14
|
declare const AlertTitle: React.ForwardRefExoticComponent<AlertTitleProps & React.RefAttributes<HTMLHeadingElement>>;
|
|
15
15
|
type AlertDescriptionOwnProps = GetPropDefTypes<typeof alertDescriptionPropDefs>;
|
|
16
16
|
interface AlertDescriptionProps extends React.ComponentPropsWithoutRef<'p'>, AlertDescriptionOwnProps {
|
|
17
|
+
/**
|
|
18
|
+
* Clamp the text to this many lines (a whole number of 1 or more); the rest is clipped with an ellipsis. Anything else
|
|
19
|
+
* leaves the text unclamped. Whether the text is clipped, and how to reveal it, is the consumer's: it can measure the
|
|
20
|
+
* element (`scrollHeight > clientHeight`) and drop the prop to show everything.
|
|
21
|
+
*/
|
|
22
|
+
lineClamp?: number;
|
|
17
23
|
}
|
|
18
24
|
declare const AlertDescription: React.ForwardRefExoticComponent<AlertDescriptionProps & React.RefAttributes<HTMLParagraphElement>>;
|
|
19
25
|
declare const Alert: typeof AlertRoot & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Alert.d.cts","sourceRoot":"","sources":["../../../src/components/alert/Alert.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"Alert.d.cts","sourceRoot":"","sources":["../../../src/components/alert/Alert.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAM9B,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAE3F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAIpE,QAAA,MAAM,WAAW,mKAIhB,CAAA;AAeD,KAAK,aAAa,GAAG,eAAe,CAAC,OAAO,aAAa,CAAC,GAAG;IAC3D,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CACvB,CAAA;AAED,UAAU,UAAW,SAAQ,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,aAAa;CAAG;AAEnG,QAAA,MAAM,SAAS,mFA2Cb,CAAA;AAIF,KAAK,kBAAkB,GAAG,eAAe,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEpE,UAAU,eAAgB,SAAQ,KAAK,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,kBAAkB;CAAG;AAE7F,QAAA,MAAM,UAAU,4FAKd,CAAA;AAIF,KAAK,wBAAwB,GAAG,eAAe,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEhF,UAAU,qBACR,SAAQ,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC,EACzC,wBAAwB;IAC1B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAKD,QAAA,MAAM,gBAAgB,oGAkBrB,CAAA;AAGD,QAAA,MAAM,KAAK,EAAE,OAAO,SAAS,GAAG;IAC9B,KAAK,EAAE,OAAO,UAAU,CAAA;IACxB,WAAW,EAAE,OAAO,gBAAgB,CAAA;IACpC,MAAM,EAAE,OAAO,WAAW,CAAA;CAK1B,CAAA;AAEF,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAE,CAAA;AACtE,YAAY,EAAE,qBAAqB,EAAE,UAAU,EAAE,eAAe,EAAE,CAAA"}
|
|
@@ -14,6 +14,12 @@ interface AlertTitleProps extends React.ComponentPropsWithoutRef<'h5'>, AlertTit
|
|
|
14
14
|
declare const AlertTitle: React.ForwardRefExoticComponent<AlertTitleProps & React.RefAttributes<HTMLHeadingElement>>;
|
|
15
15
|
type AlertDescriptionOwnProps = GetPropDefTypes<typeof alertDescriptionPropDefs>;
|
|
16
16
|
interface AlertDescriptionProps extends React.ComponentPropsWithoutRef<'p'>, AlertDescriptionOwnProps {
|
|
17
|
+
/**
|
|
18
|
+
* Clamp the text to this many lines (a whole number of 1 or more); the rest is clipped with an ellipsis. Anything else
|
|
19
|
+
* leaves the text unclamped. Whether the text is clipped, and how to reveal it, is the consumer's: it can measure the
|
|
20
|
+
* element (`scrollHeight > clientHeight`) and drop the prop to show everything.
|
|
21
|
+
*/
|
|
22
|
+
lineClamp?: number;
|
|
17
23
|
}
|
|
18
24
|
declare const AlertDescription: React.ForwardRefExoticComponent<AlertDescriptionProps & React.RefAttributes<HTMLParagraphElement>>;
|
|
19
25
|
declare const Alert: typeof AlertRoot & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Alert.d.mts","sourceRoot":"","sources":["../../../src/components/alert/Alert.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"Alert.d.mts","sourceRoot":"","sources":["../../../src/components/alert/Alert.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAM9B,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAE3F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAIpE,QAAA,MAAM,WAAW,mKAIhB,CAAA;AAeD,KAAK,aAAa,GAAG,eAAe,CAAC,OAAO,aAAa,CAAC,GAAG;IAC3D,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CACvB,CAAA;AAED,UAAU,UAAW,SAAQ,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,aAAa;CAAG;AAEnG,QAAA,MAAM,SAAS,mFA2Cb,CAAA;AAIF,KAAK,kBAAkB,GAAG,eAAe,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEpE,UAAU,eAAgB,SAAQ,KAAK,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,kBAAkB;CAAG;AAE7F,QAAA,MAAM,UAAU,4FAKd,CAAA;AAIF,KAAK,wBAAwB,GAAG,eAAe,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEhF,UAAU,qBACR,SAAQ,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC,EACzC,wBAAwB;IAC1B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAKD,QAAA,MAAM,gBAAgB,oGAkBrB,CAAA;AAGD,QAAA,MAAM,KAAK,EAAE,OAAO,SAAS,GAAG;IAC9B,KAAK,EAAE,OAAO,UAAU,CAAA;IACxB,WAAW,EAAE,OAAO,gBAAgB,CAAA;IACpC,MAAM,EAAE,OAAO,WAAW,CAAA;CAK1B,CAAA;AAEF,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAE,CAAA;AACtE,YAAY,EAAE,qBAAqB,EAAE,UAAU,EAAE,eAAe,EAAE,CAAA"}
|
|
@@ -14,6 +14,12 @@ interface AlertTitleProps extends React.ComponentPropsWithoutRef<'h5'>, AlertTit
|
|
|
14
14
|
declare const AlertTitle: React.ForwardRefExoticComponent<AlertTitleProps & React.RefAttributes<HTMLHeadingElement>>;
|
|
15
15
|
type AlertDescriptionOwnProps = GetPropDefTypes<typeof alertDescriptionPropDefs>;
|
|
16
16
|
interface AlertDescriptionProps extends React.ComponentPropsWithoutRef<'p'>, AlertDescriptionOwnProps {
|
|
17
|
+
/**
|
|
18
|
+
* Clamp the text to this many lines (a whole number of 1 or more); the rest is clipped with an ellipsis. Anything else
|
|
19
|
+
* leaves the text unclamped. Whether the text is clipped, and how to reveal it, is the consumer's: it can measure the
|
|
20
|
+
* element (`scrollHeight > clientHeight`) and drop the prop to show everything.
|
|
21
|
+
*/
|
|
22
|
+
lineClamp?: number;
|
|
17
23
|
}
|
|
18
24
|
declare const AlertDescription: React.ForwardRefExoticComponent<AlertDescriptionProps & React.RefAttributes<HTMLParagraphElement>>;
|
|
19
25
|
declare const Alert: typeof AlertRoot & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Alert.d.ts","sourceRoot":"","sources":["../../../src/components/alert/Alert.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"Alert.d.ts","sourceRoot":"","sources":["../../../src/components/alert/Alert.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAM9B,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAE3F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAIpE,QAAA,MAAM,WAAW,mKAIhB,CAAA;AAeD,KAAK,aAAa,GAAG,eAAe,CAAC,OAAO,aAAa,CAAC,GAAG;IAC3D,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CACvB,CAAA;AAED,UAAU,UAAW,SAAQ,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,aAAa;CAAG;AAEnG,QAAA,MAAM,SAAS,mFA2Cb,CAAA;AAIF,KAAK,kBAAkB,GAAG,eAAe,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEpE,UAAU,eAAgB,SAAQ,KAAK,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,kBAAkB;CAAG;AAE7F,QAAA,MAAM,UAAU,4FAKd,CAAA;AAIF,KAAK,wBAAwB,GAAG,eAAe,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEhF,UAAU,qBACR,SAAQ,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC,EACzC,wBAAwB;IAC1B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAKD,QAAA,MAAM,gBAAgB,oGAkBrB,CAAA;AAGD,QAAA,MAAM,KAAK,EAAE,OAAO,SAAS,GAAG;IAC9B,KAAK,EAAE,OAAO,UAAU,CAAA;IACxB,WAAW,EAAE,OAAO,gBAAgB,CAAA;IACpC,MAAM,EAAE,OAAO,WAAW,CAAA;CAK1B,CAAA;AAEF,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAE,CAAA;AACtE,YAAY,EAAE,qBAAqB,EAAE,UAAU,EAAE,eAAe,EAAE,CAAA"}
|
|
@@ -2,14 +2,18 @@ import * as React from "react";
|
|
|
2
2
|
import classNames from "classnames";
|
|
3
3
|
import { Slot } from "@radix-ui/react-slot";
|
|
4
4
|
import { extractProps } from "../../_internal/helpers/extractProps.js";
|
|
5
|
-
import { CardRoot } from "../card/Card.js";
|
|
6
5
|
import { Icon } from "../icon/Icon.js";
|
|
7
6
|
import { alertDescriptionPropDefs, alertPropDefs, alertTitlePropDefs } from "./alert.props.js";
|
|
8
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
9
8
|
const AlertAction = React.forwardRef(
|
|
10
9
|
({ className, ...props }, forwardedRef) => /* @__PURE__ */ jsx("div", { ...props, ref: forwardedRef, className: classNames("dsx-alert__action", className) })
|
|
11
10
|
);
|
|
12
11
|
AlertAction.displayName = "AlertAction";
|
|
12
|
+
const isAlertAction = (node) => React.isValidElement(node) && node.type === AlertAction;
|
|
13
|
+
function splitAlertChildren(children) {
|
|
14
|
+
const nodes = React.Children.toArray(children);
|
|
15
|
+
return { actions: nodes.filter(isAlertAction), body: nodes.filter((node) => !isAlertAction(node)) };
|
|
16
|
+
}
|
|
13
17
|
const AlertRoot = React.forwardRef((props, forwardedRef) => {
|
|
14
18
|
const {
|
|
15
19
|
asChild,
|
|
@@ -17,6 +21,7 @@ const AlertRoot = React.forwardRef((props, forwardedRef) => {
|
|
|
17
21
|
color,
|
|
18
22
|
highContrast = false,
|
|
19
23
|
icon,
|
|
24
|
+
children,
|
|
20
25
|
role,
|
|
21
26
|
size = "md",
|
|
22
27
|
variant = "default",
|
|
@@ -24,19 +29,27 @@ const AlertRoot = React.forwardRef((props, forwardedRef) => {
|
|
|
24
29
|
} = extractProps(props, alertPropDefs);
|
|
25
30
|
const Comp = asChild ? Slot : "div";
|
|
26
31
|
const fallbackIcon = variant === "success" ? "check-circle" : variant === "default" ? "info" : "alert-triangle";
|
|
32
|
+
const child = asChild ? React.Children.only(children) : null;
|
|
33
|
+
const { actions, body } = splitAlertChildren(child ? child.props.children : children);
|
|
34
|
+
const content = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
35
|
+
icon === null ? null : /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "dsx-alert__icon", children: icon ?? /* @__PURE__ */ jsx(Icon, { name: fallbackIcon, size: "md", strokeWidth: "var(--dsx-icon-stroke-width-strong, 2.25)" }) }),
|
|
36
|
+
/* @__PURE__ */ jsxs("div", { className: "dsx-alert__main", children: [
|
|
37
|
+
/* @__PURE__ */ jsx("div", { className: "dsx-alert__content", children: body }),
|
|
38
|
+
actions.length > 0 ? /* @__PURE__ */ jsx("div", { className: "dsx-alert__actions", children: actions }) : null
|
|
39
|
+
] })
|
|
40
|
+
] });
|
|
27
41
|
return /* @__PURE__ */ jsx(
|
|
28
|
-
|
|
42
|
+
Comp,
|
|
29
43
|
{
|
|
30
|
-
|
|
44
|
+
...alertProps,
|
|
45
|
+
ref: forwardedRef,
|
|
46
|
+
role: role ?? "alert",
|
|
31
47
|
className: classNames("dsx-alert", className),
|
|
32
48
|
"data-accent-color": color,
|
|
33
49
|
"data-high-contrast": highContrast ? "true" : void 0,
|
|
34
50
|
"data-size": size,
|
|
35
51
|
"data-variant": variant,
|
|
36
|
-
children:
|
|
37
|
-
icon === null ? null : /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "dsx-alert__icon", children: icon ?? /* @__PURE__ */ jsx(Icon, { name: fallbackIcon, size: "md", strokeWidth: "var(--dsx-icon-stroke-width-strong, 2.25)" }) }),
|
|
38
|
-
/* @__PURE__ */ jsx("div", { className: "dsx-alert__content", children: alertProps.children })
|
|
39
|
-
] })
|
|
52
|
+
children: child ? React.cloneElement(child, void 0, content) : content
|
|
40
53
|
}
|
|
41
54
|
);
|
|
42
55
|
});
|
|
@@ -47,16 +60,21 @@ const AlertTitle = React.forwardRef((props, forwardedRef) => {
|
|
|
47
60
|
return /* @__PURE__ */ jsx(Comp, { ...titleProps, ref: forwardedRef, className: classNames("dsx-alert__title", className) });
|
|
48
61
|
});
|
|
49
62
|
AlertTitle.displayName = "AlertTitle";
|
|
63
|
+
const isLineClamp = (value) => typeof value === "number" && Number.isInteger(value) && value >= 1;
|
|
50
64
|
const AlertDescription = React.forwardRef(
|
|
51
65
|
(props, forwardedRef) => {
|
|
52
|
-
const {
|
|
66
|
+
const { lineClamp, style, ...ownProps } = props;
|
|
67
|
+
const { asChild, className, ...descriptionProps } = extractProps(ownProps, alertDescriptionPropDefs);
|
|
53
68
|
const Comp = asChild ? Slot : "p";
|
|
69
|
+
const clamp = isLineClamp(lineClamp) ? lineClamp : void 0;
|
|
54
70
|
return /* @__PURE__ */ jsx(
|
|
55
71
|
Comp,
|
|
56
72
|
{
|
|
57
73
|
...descriptionProps,
|
|
58
74
|
ref: forwardedRef,
|
|
59
|
-
className: classNames("dsx-alert__description", className)
|
|
75
|
+
className: classNames("dsx-alert__description", className),
|
|
76
|
+
"data-line-clamp": clamp,
|
|
77
|
+
style: clamp ? { ...style, "--dsx-alert-line-clamp": clamp } : style
|
|
60
78
|
}
|
|
61
79
|
);
|
|
62
80
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/components/alert/Alert.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react'\nimport classNames from 'classnames'\nimport { Slot } from '@radix-ui/react-slot'\n\nimport { extractProps } from '../../_internal/helpers/extractProps'\nimport {
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;AACvB,OAAO,gBAAgB;AACvB,SAAS,YAAY;AAErB,SAAS,oBAAoB;AAC7B,SAAS,
|
|
4
|
+
"sourcesContent": ["import * as React from 'react'\nimport classNames from 'classnames'\nimport { Slot } from '@radix-ui/react-slot'\n\nimport { extractProps } from '../../_internal/helpers/extractProps'\nimport { Icon } from '../icon/Icon'\nimport { alertDescriptionPropDefs, alertPropDefs, alertTitlePropDefs } from './alert.props'\n\nimport type { GetPropDefTypes } from '../../_internal/props/propDef'\n\ntype AlertActionElement = React.ComponentRef<'div'>\n\nconst AlertAction = React.forwardRef<AlertActionElement, React.ComponentPropsWithoutRef<'div'>>(\n ({ className, ...props }, forwardedRef) => (\n <div {...props} ref={forwardedRef} className={classNames('dsx-alert__action', className)} />\n ),\n)\nAlertAction.displayName = 'AlertAction'\n\nconst isAlertAction = (node: React.ReactNode): boolean => React.isValidElement(node) && node.type === AlertAction\n\n// An `Alert.Action` that is a direct child sits beside the content, not inside it, in one `.dsx-alert__actions` group: the\n// group trails the row, and wraps below the text as a whole when it is narrow, under the text and not under the icon (the\n// icon is one column, the text and the group are the other: `.dsx-alert__main`). A consumer who nests an action in their own\n// wrapper keeps it in the content.\nfunction splitAlertChildren(children: React.ReactNode): { actions: React.ReactNode[]; body: React.ReactNode[] } {\n const nodes = React.Children.toArray(children)\n return { actions: nodes.filter(isAlertAction), body: nodes.filter((node) => !isAlertAction(node)) }\n}\n\ntype AlertElement = React.ComponentRef<'div'>\ntype AlertOwnProps = GetPropDefTypes<typeof alertPropDefs> & {\n icon?: React.ReactNode\n}\n\ninterface AlertProps extends Omit<React.ComponentPropsWithoutRef<'div'>, 'color'>, AlertOwnProps {}\n\nconst AlertRoot = React.forwardRef<AlertElement, AlertProps>((props, forwardedRef) => {\n const {\n asChild,\n className,\n color,\n highContrast = false,\n icon,\n children,\n role,\n size = 'md',\n variant = 'default',\n ...alertProps\n } = extractProps(props, alertPropDefs)\n const Comp = asChild ? Slot : 'div'\n const fallbackIcon = variant === 'success' ? 'check-circle' : variant === 'default' ? 'info' : 'alert-triangle'\n const child = asChild ? React.Children.only(children) as React.ReactElement<{ children?: React.ReactNode }> : null\n const { actions, body } = splitAlertChildren(child ? child.props.children : children)\n const content = <>\n {icon === null ? null : (\n <span aria-hidden=\"true\" className=\"dsx-alert__icon\">\n {icon ?? <Icon name={fallbackIcon} size=\"md\" strokeWidth=\"var(--dsx-icon-stroke-width-strong, 2.25)\" />}\n </span>\n )}\n <div className=\"dsx-alert__main\">\n <div className=\"dsx-alert__content\">{body}</div>\n {actions.length > 0 ? <div className=\"dsx-alert__actions\">{actions}</div> : null}\n </div>\n </>\n\n return (\n <Comp\n {...alertProps}\n ref={forwardedRef}\n role={role ?? 'alert'}\n className={classNames('dsx-alert', className)}\n data-accent-color={color}\n data-high-contrast={highContrast ? 'true' : undefined}\n data-size={size}\n data-variant={variant}\n >\n {child ? React.cloneElement(child, undefined, content) : content}\n </Comp>\n )\n})\nAlertRoot.displayName = 'Alert'\n\ntype AlertTitleElement = React.ComponentRef<'h5'>\ntype AlertTitleOwnProps = GetPropDefTypes<typeof alertTitlePropDefs>\n\ninterface AlertTitleProps extends React.ComponentPropsWithoutRef<'h5'>, AlertTitleOwnProps {}\n\nconst AlertTitle = React.forwardRef<AlertTitleElement, AlertTitleProps>((props, forwardedRef) => {\n const { asChild, className, ...titleProps } = extractProps(props, alertTitlePropDefs)\n const Comp = asChild ? Slot : 'h5'\n\n return <Comp {...titleProps} ref={forwardedRef} className={classNames('dsx-alert__title', className)} />\n})\nAlertTitle.displayName = 'AlertTitle'\n\ntype AlertDescriptionElement = React.ComponentRef<'p'>\ntype AlertDescriptionOwnProps = GetPropDefTypes<typeof alertDescriptionPropDefs>\n\ninterface AlertDescriptionProps\n extends React.ComponentPropsWithoutRef<'p'>,\n AlertDescriptionOwnProps {\n /**\n * Clamp the text to this many lines (a whole number of 1 or more); the rest is clipped with an ellipsis. Anything else\n * leaves the text unclamped. Whether the text is clipped, and how to reveal it, is the consumer's: it can measure the\n * element (`scrollHeight > clientHeight`) and drop the prop to show everything.\n */\n lineClamp?: number\n}\n\nconst isLineClamp = (value: unknown): value is number =>\n typeof value === 'number' && Number.isInteger(value) && value >= 1\n\nconst AlertDescription = React.forwardRef<AlertDescriptionElement, AlertDescriptionProps>(\n (props, forwardedRef) => {\n // `lineClamp` is behaviour-only, so it stays out of extractProps (it has no class mapping and would leak to the DOM).\n const { lineClamp, style, ...ownProps } = props\n const { asChild, className, ...descriptionProps } = extractProps(ownProps, alertDescriptionPropDefs)\n const Comp = asChild ? Slot : 'p'\n const clamp = isLineClamp(lineClamp) ? lineClamp : undefined\n\n return (\n <Comp\n {...descriptionProps}\n ref={forwardedRef}\n className={classNames('dsx-alert__description', className)}\n data-line-clamp={clamp}\n style={clamp ? ({ ...style, '--dsx-alert-line-clamp': clamp } as React.CSSProperties) : style}\n />\n )\n },\n)\nAlertDescription.displayName = 'AlertDescription'\n\nconst Alert: typeof AlertRoot & {\n Title: typeof AlertTitle\n Description: typeof AlertDescription\n Action: typeof AlertAction\n} = Object.assign(AlertRoot, {\n Title: AlertTitle,\n Description: AlertDescription,\n Action: AlertAction,\n})\n\nexport { Alert, AlertAction, AlertDescription, AlertRoot, AlertTitle }\nexport type { AlertDescriptionProps, AlertProps, AlertTitleProps }\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
@import '../../_internal/baseCard.css';
|
|
3
3
|
|
|
4
4
|
.dsx-alert {
|
|
5
|
+
box-sizing: border-box;
|
|
5
6
|
display: flex;
|
|
6
7
|
align-items: flex-start;
|
|
7
8
|
gap: var(--dsx-space-md);
|
|
@@ -23,16 +24,53 @@
|
|
|
23
24
|
color: currentColor;
|
|
24
25
|
}
|
|
25
26
|
|
|
26
|
-
.dsx-
|
|
27
|
-
|
|
27
|
+
.dsx-alert__icon { flex-shrink: 0; }
|
|
28
|
+
|
|
29
|
+
/* The icon is one column; the text and the actions are the other. Only this column wraps, so actions that drop below the text
|
|
30
|
+
start under the text and not under the icon (G-15, 2026-10-05). The gap is the alert's own, per size. */
|
|
31
|
+
.dsx-alert__main {
|
|
32
|
+
display: flex;
|
|
33
|
+
flex: 1 1 0;
|
|
34
|
+
flex-wrap: wrap;
|
|
35
|
+
align-items: flex-start;
|
|
36
|
+
gap: inherit;
|
|
37
|
+
min-width: 0;
|
|
28
38
|
}
|
|
29
39
|
|
|
40
|
+
/* The basis is the width the text needs to read before the actions wrap below it; min() keeps it from overflowing a column
|
|
41
|
+
narrower than that. */
|
|
30
42
|
.dsx-alert__content {
|
|
31
43
|
display: grid;
|
|
32
44
|
gap: var(--dsx-space-xs);
|
|
33
|
-
flex: 1;
|
|
45
|
+
flex: 1 1 min(calc(var(--dsx-size-xl) * 5), 100%);
|
|
46
|
+
min-width: 0;
|
|
47
|
+
overflow-wrap: anywhere;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/* The direct-child Alert.Actions are one group. The content grows to push the group to the end of the row, and when the text
|
|
51
|
+
would drop under its readable width the group wraps below it as a whole, at the start of the column. It has no auto margin:
|
|
52
|
+
that would push a wrapped group to the far edge. Its own buttons wrap inside it when even the group is too wide. */
|
|
53
|
+
.dsx-alert__actions {
|
|
54
|
+
display: flex;
|
|
55
|
+
flex: 0 0 auto;
|
|
56
|
+
flex-wrap: wrap;
|
|
57
|
+
align-items: flex-start;
|
|
58
|
+
gap: var(--dsx-space-sm);
|
|
59
|
+
max-width: 100%;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.dsx-alert__action {
|
|
63
|
+
align-self: flex-start;
|
|
64
|
+
justify-content: flex-start;
|
|
65
|
+
flex-wrap: wrap;
|
|
66
|
+
gap: var(--dsx-space-sm);
|
|
34
67
|
}
|
|
35
68
|
|
|
69
|
+
.dsx-alert[data-variant='warning'] { border-color: var(--dsx-color-warning); }
|
|
70
|
+
.dsx-alert[data-variant='success'] { border-color: var(--dsx-color-success); }
|
|
71
|
+
.dsx-alert[data-variant='destructive'] { border-color: var(--dsx-color-error); }
|
|
72
|
+
.dsx-alert[data-high-contrast='true'] { border-color: var(--dsx-color-high-contrast-border); }
|
|
73
|
+
|
|
36
74
|
.dsx-alert__title {
|
|
37
75
|
margin: 0;
|
|
38
76
|
font-family: var(--dsx-typography-label-large-font-family), sans-serif;
|
|
@@ -72,3 +110,35 @@
|
|
|
72
110
|
min-width: var(--dsx-size-lg);
|
|
73
111
|
min-height: var(--dsx-size-lg);
|
|
74
112
|
}
|
|
113
|
+
|
|
114
|
+
/* With a trailing action, the icon, the first line of text and the action share one centre at any width: all
|
|
115
|
+
three get a control-height row, and the first line's box is that tall (`::first-line`). Alerts without an
|
|
116
|
+
action are untouched. Kept last so it wins over the size rules above. */
|
|
117
|
+
:where(.dsx-alert:has(> .dsx-alert__main > .dsx-alert__actions)) :is(.dsx-alert__icon, .dsx-alert__action) {
|
|
118
|
+
min-height: var(--dsx-size-lg);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
:where(.dsx-alert:has(> .dsx-alert__main > .dsx-alert__actions)) .dsx-alert__content > :where(:first-child)::first-line {
|
|
122
|
+
line-height: var(--dsx-size-lg);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/* `lineClamp` on Alert.Description: the text stops after that many lines with an ellipsis. */
|
|
126
|
+
.dsx-alert__description[data-line-clamp] {
|
|
127
|
+
display: -webkit-box;
|
|
128
|
+
-webkit-box-orient: vertical;
|
|
129
|
+
-webkit-line-clamp: var(--dsx-alert-line-clamp);
|
|
130
|
+
overflow: hidden;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/* Whether `::first-line` reaches into a clamped description depends on the engine (Chromium draws it as a block
|
|
134
|
+
container, WebKit and Gecko as a legacy flexbox), so the control-height first line above is switched off for it and
|
|
135
|
+
the same centring is done with padding in every engine: the first line sits on the middle of the control row (`lh`
|
|
136
|
+
is the element's own line height). */
|
|
137
|
+
:where(.dsx-alert:has(> .dsx-alert__main > .dsx-alert__actions)) .dsx-alert__description[data-line-clamp] {
|
|
138
|
+
padding-block-start: calc((var(--dsx-size-lg) - 1lh) / 2);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/* Same specificity as the first-line rule it switches off (0,1,1), so source order decides: this one comes last. */
|
|
142
|
+
:where(.dsx-alert:has(> .dsx-alert__main > .dsx-alert__actions)) .dsx-alert__description:where([data-line-clamp])::first-line {
|
|
143
|
+
line-height: inherit;
|
|
144
|
+
}
|
|
@@ -2,7 +2,22 @@
|
|
|
2
2
|
.dsx-article-image__media, .dsx-before-after img { display: block; width: 100%; height: auto; border-radius: var(--dsx-rounded-md); }
|
|
3
3
|
.dsx-article-image figcaption { margin-block-start: var(--dsx-space-sm); color: var(--dsx-color-on-surface-variant); text-align: center; }
|
|
4
4
|
.dsx-article-embed, .dsx-article-poll { display: grid; gap: var(--dsx-space-sm); padding: var(--dsx-space-md); border: var(--dsx-border-width-sm) solid var(--dsx-color-outline); border-radius: var(--dsx-rounded-md); background: var(--dsx-color-surface-raised); }
|
|
5
|
+
.dsx-article-image, .dsx-article-embed, .dsx-article-poll, .dsx-before-after { min-width: 0; overflow-wrap: anywhere; }
|
|
5
6
|
.dsx-before-after { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--dsx-space-sm); overflow-x: auto; }
|
|
6
7
|
.dsx-before-after > div { min-width: var(--dsx-size-3xl); }
|
|
7
8
|
.dsx-before-after span { display: block; margin-block-start: var(--dsx-space-xs); color: var(--dsx-color-on-surface-variant); }
|
|
8
|
-
.dsx-article-
|
|
9
|
+
.dsx-article-poll__option { min-width: 0; width: 100%; }
|
|
10
|
+
.dsx-article-video { margin: var(--dsx-space-md) 0; min-width: 0; }
|
|
11
|
+
.dsx-article-video__media { display: block; width: 100%; border-radius: var(--dsx-rounded-md); }
|
|
12
|
+
.dsx-article-video figcaption { margin-block-start: var(--dsx-space-sm); color: var(--dsx-color-on-surface-variant); }
|
|
13
|
+
.dsx-article-platform-tabs { min-width: 0; }
|
|
14
|
+
.dsx-article-poll__result { display: grid; gap: var(--dsx-space-xs); min-width: 0; }
|
|
15
|
+
.dsx-article-poll__result progress { width: 100%; accent-color: var(--dsx-color-accent-indicator); }
|
|
16
|
+
.dsx-article-poll__actions { display: flex; flex-wrap: wrap; gap: var(--dsx-space-sm); }
|
|
17
|
+
.dsx-article-editor-block { display: grid; gap: var(--dsx-space-md); min-width: 0; margin-block: var(--dsx-space-md); padding: var(--dsx-space-md); border: var(--dsx-border-width-sm) solid var(--dsx-color-outline); border-radius: var(--dsx-rounded-md); background: var(--dsx-color-surface); }
|
|
18
|
+
.dsx-article-editor-block[aria-current='true'] { border-color: var(--dsx-color-accent-border); }
|
|
19
|
+
.dsx-article-editor-block__controls { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--dsx-space-sm); }
|
|
20
|
+
.dsx-article-editor-block__actions { display: flex; flex-wrap: wrap; gap: var(--dsx-space-xs); }
|
|
21
|
+
.dsx-article-editor-block__fields { display: grid; gap: var(--dsx-space-sm); min-width: 0; }
|
|
22
|
+
.dsx-article-editor-block__content { min-width: 0; }
|
|
23
|
+
.dsx-article-editor-block__textarea { width: 100%; min-height: var(--dsx-size-4xl); display: block; padding: var(--dsx-space-sm); border: var(--dsx-border-width-sm) solid var(--dsx-color-outline); border-radius: var(--dsx-rounded-sm); background: var(--dsx-color-surface-raised); color: var(--dsx-color-on-surface); font: inherit; }
|
|
@@ -30,12 +30,17 @@ var ArticleNodes_exports = {};
|
|
|
30
30
|
__export(ArticleNodes_exports, {
|
|
31
31
|
ArticleEmbed: () => ArticleEmbed,
|
|
32
32
|
ArticleImage: () => ArticleImage,
|
|
33
|
+
ArticleMaterialLink: () => ArticleMaterialLink,
|
|
34
|
+
ArticlePlatformTabs: () => ArticlePlatformTabs,
|
|
33
35
|
ArticlePoll: () => ArticlePoll,
|
|
36
|
+
ArticleVideo: () => ArticleVideo,
|
|
34
37
|
BeforeAfterComparison: () => BeforeAfterComparison
|
|
35
38
|
});
|
|
36
39
|
module.exports = __toCommonJS(ArticleNodes_exports);
|
|
37
40
|
var React = __toESM(require("react"), 1);
|
|
38
41
|
var import_classnames = __toESM(require("classnames"), 1);
|
|
42
|
+
var import_Button = require("../button/Button");
|
|
43
|
+
var import_Tabs = require("../tabs/Tabs");
|
|
39
44
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
40
45
|
const ArticleImage = ({ caption, className, alt = "", ...props }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("figure", { className: "dsx-article-image", children: [
|
|
41
46
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", { ...props, alt, className: (0, import_classnames.default)("dsx-article-image__media", className) }),
|
|
@@ -61,16 +66,52 @@ const BeforeAfterComparison = ({ beforeSrc, afterSrc, beforeAlt, afterAlt, befor
|
|
|
61
66
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: afterLabel })
|
|
62
67
|
] })
|
|
63
68
|
] });
|
|
64
|
-
const
|
|
69
|
+
const ArticleVideo = ({ caption, className, controls = true, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("figure", { className: "dsx-article-video", children: [
|
|
70
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("video", { ...props, controls, className: (0, import_classnames.default)("dsx-article-video__media", className) }),
|
|
71
|
+
caption ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("figcaption", { children: caption }) : null
|
|
72
|
+
] });
|
|
73
|
+
const ArticleMaterialLink = ({ materialId, href, children, unavailableLabel = "Material unavailable", ...props }) => {
|
|
74
|
+
let allowed = false;
|
|
75
|
+
try {
|
|
76
|
+
allowed = ["http:", "https:"].includes(new URL(href ?? "", "https://example.invalid").protocol);
|
|
77
|
+
} catch {
|
|
78
|
+
}
|
|
79
|
+
return href && allowed ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", { ...props, href, "data-dsx-material-id": materialId, children }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { role: "status", "data-dsx-material-id": materialId, children: unavailableLabel });
|
|
80
|
+
};
|
|
81
|
+
const ArticlePlatformTabs = ({ tabs, value, onValueChange, className, dir, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_Tabs.Tabs, { ...props, dir: dir === "rtl" || dir === "ltr" ? dir : void 0, className: (0, import_classnames.default)("dsx-article-platform-tabs", className), defaultValue: tabs[0]?.platform, value, onValueChange, children: [
|
|
82
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_Tabs.Tabs.List, { "aria-label": "Platform instructions", children: [
|
|
83
|
+
tabs.map((tab) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Tabs.Tabs.Trigger, { value: tab.platform, children: tab.label }, tab.platform)),
|
|
84
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Tabs.Tabs.Indicator, {})
|
|
85
|
+
] }),
|
|
86
|
+
tabs.map((tab) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Tabs.Tabs.Content, { value: tab.platform, children: tab.content }, tab.platform))
|
|
87
|
+
] });
|
|
88
|
+
const ArticlePoll = ({ pollId, question, options = [], state = "ready", onLoad, onVote, selection, multiple = false, onSelectionChange, onSubmit, onRetract, totalVotes, className, ...props }) => {
|
|
65
89
|
React.useEffect(() => {
|
|
66
90
|
onLoad?.(pollId);
|
|
67
91
|
}, [pollId, onLoad]);
|
|
92
|
+
const controlled = selection !== void 0;
|
|
93
|
+
const total = totalVotes ?? options.reduce((sum, option) => sum + (option.votes ?? 0), 0);
|
|
94
|
+
const inert = state === "closed" || state === "loading" || state === "error" || !controlled && state !== "ready";
|
|
68
95
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { ...props, className: (0, import_classnames.default)("dsx-article-poll", className), "data-dsx-poll-id": pollId, "data-state": state, "aria-busy": state === "loading" || void 0, children: [
|
|
69
96
|
question ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: question }) : null,
|
|
70
|
-
state === "
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
97
|
+
state === "closed" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { role: "status", children: "Poll closed" }) : null,
|
|
98
|
+
state === "error" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { role: "alert", children: "Poll unavailable" }) : options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "dsx-article-poll__result", children: [
|
|
99
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_Button.Button, { className: "dsx-article-poll__option", type: "button", size: "lg", variant: selection?.includes(option.id) ? "secondary" : "outline", "aria-pressed": controlled ? selection.includes(option.id) : void 0, disabled: inert, onClick: () => {
|
|
100
|
+
if (!controlled) {
|
|
101
|
+
onVote?.(pollId, option.id);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
onSelectionChange?.(multiple ? selection.includes(option.id) ? selection.filter((id) => id !== option.id) : [...selection, option.id] : [option.id]);
|
|
105
|
+
}, children: [
|
|
106
|
+
option.label,
|
|
107
|
+
option.votes === void 0 ? null : ` (${option.votes})`
|
|
108
|
+
] }),
|
|
109
|
+
option.votes !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("progress", { "aria-label": `${String(option.label)} results`, value: option.votes, max: Math.max(total, 1) }) : null
|
|
110
|
+
] }, option.id)),
|
|
111
|
+
controlled && !inert ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "dsx-article-poll__actions", children: [
|
|
112
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Button.Button, { type: "button", size: "lg", disabled: !selection.length || !onSubmit, onClick: () => onSubmit?.(pollId, selection), children: state === "voted" ? "Change vote" : "Vote" }),
|
|
113
|
+
state === "voted" && onRetract ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Button.Button, { type: "button", size: "lg", variant: "outline", onClick: () => onRetract(pollId), children: "Retract vote" }) : null
|
|
114
|
+
] }) : null
|
|
74
115
|
] });
|
|
75
116
|
};
|
|
76
117
|
//# sourceMappingURL=ArticleNodes.cjs.map
|