entangle-ui 0.6.3 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +219 -0
- package/dist/esm/assets/src/components/controls/ColorPicker/{ColorPicker.css.ts.vanilla-Do5nbdgO.css → ColorPicker.css.ts.vanilla-D7ccNVQx.css} +14 -0
- package/dist/esm/assets/src/components/controls/Select/{Select.css.ts.vanilla-D4C059Ua.css → Select.css.ts.vanilla-oZnFUorL.css} +11 -0
- package/dist/esm/assets/src/components/controls/Slider/{Slider.css.ts.vanilla-C5SJ_7A1.css → Slider.css.ts.vanilla-Cqm3fQ0S.css} +14 -0
- package/dist/esm/assets/src/components/controls/TreeView/{TreeNode.css.ts.vanilla-D3ylUhuW.css → TreeNode.css.ts.vanilla-B_f8pUb8.css} +5 -0
- package/dist/esm/assets/src/components/controls/VectorInput/{VectorInput.css.ts.vanilla-BJma3iQ4.css → VectorInput.css.ts.vanilla-BpoiuhDA.css} +9 -0
- package/dist/esm/assets/src/components/editor/ChatPanel/{ChatPanel.css.ts.vanilla-DPIGnZ4A.css → ChatPanel.css.ts.vanilla-CLn8idfz.css} +180 -116
- package/dist/esm/assets/src/components/editor/PropertyInspector/{PropertySection.css.ts.vanilla-DJBtY_xk.css → PropertySection.css.ts.vanilla-DK12opZc.css} +5 -0
- package/dist/esm/assets/src/components/editor/TransformControl/TransformControl.css.ts.vanilla-H-iW-T0s.css +82 -0
- package/dist/esm/assets/src/components/feedback/Alert/Alert.css.ts.vanilla-CRAI-xHx.css +84 -0
- package/dist/esm/assets/src/components/feedback/Dialog/{Dialog.css.ts.vanilla-BrXTOHwS.css → Dialog.css.ts.vanilla-BxBFePLG.css} +8 -0
- package/dist/esm/assets/src/components/feedback/EmptyState/EmptyState.css.ts.vanilla-B_TWsTOW.css +58 -0
- package/dist/esm/assets/src/components/feedback/ProgressBar/ProgressBar.css.ts.vanilla-4WLVf1hx.css +152 -0
- package/dist/esm/assets/src/components/feedback/Skeleton/Skeleton.css.ts.vanilla-Dk2_SSsC.css +39 -0
- package/dist/esm/assets/src/components/feedback/Spinner/Spinner.css.ts.vanilla-DEUewqdK.css +80 -0
- package/dist/esm/assets/src/components/feedback/Toast/{ToastItem.css.ts.vanilla-D6UuPKAj.css → ToastItem.css.ts.vanilla-DUeXqiaH.css} +9 -0
- package/dist/esm/assets/src/components/form/{InputWrapper.css.ts.vanilla-Bl7u62PI.css → InputWrapper.css.ts.vanilla-CLpKbEjq.css} +5 -0
- package/dist/esm/assets/src/components/layout/Accordion/{Accordion.css.ts.vanilla-Ck5Yew0e.css → Accordion.css.ts.vanilla-CJQum8px.css} +8 -0
- package/dist/esm/assets/src/components/layout/Divider/Divider.css.ts.vanilla-CPvd_RW9.css +72 -0
- package/dist/esm/assets/src/components/layout/ListItem/ListItem.css.ts.vanilla-BwAZrX2f.css +68 -0
- package/dist/esm/assets/src/components/layout/PageHeader/PageHeader.css.ts.vanilla-DdbyyWAN.css +70 -0
- package/dist/esm/assets/src/components/layout/SplitPane/{SplitPane.css.ts.vanilla-BFxdvwyI.css → SplitPane.css.ts.vanilla-BGFZ7zDa.css} +5 -0
- package/dist/esm/assets/src/components/navigation/Breadcrumbs/Breadcrumbs.css.ts.vanilla-DZ4jm_bw.css +128 -0
- package/dist/esm/assets/src/components/navigation/SegmentedControl/SegmentedControl.css.ts.vanilla-BHOnDD2B.css +197 -0
- package/dist/esm/assets/src/components/navigation/Tabs/{Tabs.css.ts.vanilla-D7RGpDPC.css → Tabs.css.ts.vanilla-CQucokdg.css} +14 -0
- package/dist/esm/assets/src/components/primitives/Avatar/Avatar.css.ts.vanilla-jG5hUudL.css +149 -0
- package/dist/esm/assets/src/components/primitives/Badge/Badge.css.ts.vanilla-DxCUcxYW.css +95 -0
- package/dist/esm/assets/src/components/primitives/Button/{Button.css.ts.vanilla-CT592JL7.css → Button.css.ts.vanilla-DXJcIb94.css} +9 -0
- package/dist/esm/assets/src/components/primitives/Checkbox/{Checkbox.css.ts.vanilla-dvrGPiPs.css → Checkbox.css.ts.vanilla-DNa-Gqto.css} +5 -0
- package/dist/esm/assets/src/components/primitives/Code/Code.css.ts.vanilla-mayBqLDM.css +19 -0
- package/dist/esm/assets/src/components/primitives/Collapsible/{Collapsible.css.ts.vanilla-C1rYV-JT.css → Collapsible.css.ts.vanilla-Dz4Vy-ob.css} +8 -0
- package/dist/esm/assets/src/components/primitives/IconButton/{IconButton.css.ts.vanilla-C-xAQoR3.css → IconButton.css.ts.vanilla-CPkPZJRU.css} +9 -0
- package/dist/esm/assets/src/components/primitives/Kbd/Kbd.css.ts.vanilla-Co2-Rxgv.css +60 -0
- package/dist/esm/assets/src/components/primitives/Link/Link.css.ts.vanilla-q-bqHUOF.css +82 -0
- package/dist/esm/assets/src/components/primitives/Popover/{Popover.css.ts.vanilla-DW6aAr57.css → Popover.css.ts.vanilla-KCfDIs4G.css} +5 -0
- package/dist/esm/assets/src/components/primitives/Radio/Radio.css.ts.vanilla-CPjdD-ZM.css +127 -0
- package/dist/esm/assets/src/components/primitives/Switch/{Switch.css.ts.vanilla-CxqwUToB.css → Switch.css.ts.vanilla-CDSt-M5W.css} +5 -0
- package/dist/esm/assets/src/components/primitives/TextArea/TextArea.css.ts.vanilla-M9l1t4HR.css +90 -0
- package/dist/esm/assets/src/components/primitives/VisuallyHidden/VisuallyHidden.css.ts.vanilla-DBulVh4Q.css +36 -0
- package/dist/esm/assets/src/theme/{darkTheme.css.ts.vanilla-DCe89yCJ.css → darkTheme.css.ts.vanilla-ab1WD4dr.css} +3 -0
- package/dist/esm/assets/src/theme/globalScrollbars.css.ts.vanilla-BAJwnUEJ.css +21 -0
- package/dist/esm/assets/src/theme/lightTheme.css.ts.vanilla-OaRI_wIc.css +99 -0
- package/dist/esm/assets/src/utils/animations.css.ts.vanilla-CRLFsBSV.css +72 -0
- package/dist/esm/components/Icons/AddIcon.js +30 -0
- package/dist/esm/components/Icons/AddIcon.js.map +1 -0
- package/dist/esm/components/Icons/AiChatIcon.js +31 -0
- package/dist/esm/components/Icons/AiChatIcon.js.map +1 -0
- package/dist/esm/components/Icons/AiSparklesIcon.js +31 -0
- package/dist/esm/components/Icons/AiSparklesIcon.js.map +1 -0
- package/dist/esm/components/Icons/ArrowDownIcon.js +30 -0
- package/dist/esm/components/Icons/ArrowDownIcon.js.map +1 -0
- package/dist/esm/components/Icons/ArrowLeftIcon.js +30 -0
- package/dist/esm/components/Icons/ArrowLeftIcon.js.map +1 -0
- package/dist/esm/components/Icons/ArrowRightIcon.js +30 -0
- package/dist/esm/components/Icons/ArrowRightIcon.js.map +1 -0
- package/dist/esm/components/Icons/ArrowUpIcon.js +30 -0
- package/dist/esm/components/Icons/ArrowUpIcon.js.map +1 -0
- package/dist/esm/components/Icons/BookmarkIcon.js +30 -0
- package/dist/esm/components/Icons/BookmarkIcon.js.map +1 -0
- package/dist/esm/components/Icons/CalendarIcon.js +30 -0
- package/dist/esm/components/Icons/CalendarIcon.js.map +1 -0
- package/dist/esm/components/Icons/ClockIcon.js +30 -0
- package/dist/esm/components/Icons/ClockIcon.js.map +1 -0
- package/dist/esm/components/Icons/CodeIcon.js +30 -0
- package/dist/esm/components/Icons/CodeIcon.js.map +1 -0
- package/dist/esm/components/Icons/CopyIcon.js +30 -0
- package/dist/esm/components/Icons/CopyIcon.js.map +1 -0
- package/dist/esm/components/Icons/CutIcon.js +30 -0
- package/dist/esm/components/Icons/CutIcon.js.map +1 -0
- package/dist/esm/components/Icons/DownloadIcon.js +30 -0
- package/dist/esm/components/Icons/DownloadIcon.js.map +1 -0
- package/dist/esm/components/Icons/EditIcon.js +30 -0
- package/dist/esm/components/Icons/EditIcon.js.map +1 -0
- package/dist/esm/components/Icons/ErrorIcon.js +30 -0
- package/dist/esm/components/Icons/ErrorIcon.js.map +1 -0
- package/dist/esm/components/Icons/EyeIcon.js +30 -0
- package/dist/esm/components/Icons/EyeIcon.js.map +1 -0
- package/dist/esm/components/Icons/FilterIcon.js +30 -0
- package/dist/esm/components/Icons/FilterIcon.js.map +1 -0
- package/dist/esm/components/Icons/FolderIcon.js +30 -0
- package/dist/esm/components/Icons/FolderIcon.js.map +1 -0
- package/dist/esm/components/Icons/FullscreenIcon.js +30 -0
- package/dist/esm/components/Icons/FullscreenIcon.js.map +1 -0
- package/dist/esm/components/Icons/GridIcon.js +30 -0
- package/dist/esm/components/Icons/GridIcon.js.map +1 -0
- package/dist/esm/components/Icons/HeartIcon.js +30 -0
- package/dist/esm/components/Icons/HeartIcon.js.map +1 -0
- package/dist/esm/components/Icons/HelpIcon.js +30 -0
- package/dist/esm/components/Icons/HelpIcon.js.map +1 -0
- package/dist/esm/components/Icons/HomeIcon.js +30 -0
- package/dist/esm/components/Icons/HomeIcon.js.map +1 -0
- package/dist/esm/components/Icons/InfoIcon.js +30 -0
- package/dist/esm/components/Icons/InfoIcon.js.map +1 -0
- package/dist/esm/components/Icons/LinkIcon.js +30 -0
- package/dist/esm/components/Icons/LinkIcon.js.map +1 -0
- package/dist/esm/components/Icons/ListIcon.js +30 -0
- package/dist/esm/components/Icons/ListIcon.js.map +1 -0
- package/dist/esm/components/Icons/LockIcon.js +30 -0
- package/dist/esm/components/Icons/LockIcon.js.map +1 -0
- package/dist/esm/components/Icons/MaximizeIcon.js +30 -0
- package/dist/esm/components/Icons/MaximizeIcon.js.map +1 -0
- package/dist/esm/components/Icons/MenuIcon.js +30 -0
- package/dist/esm/components/Icons/MenuIcon.js.map +1 -0
- package/dist/esm/components/Icons/MinimizeIcon.js +30 -0
- package/dist/esm/components/Icons/MinimizeIcon.js.map +1 -0
- package/dist/esm/components/Icons/PasteIcon.js +30 -0
- package/dist/esm/components/Icons/PasteIcon.js.map +1 -0
- package/dist/esm/components/Icons/PlayIcon.js +30 -0
- package/dist/esm/components/Icons/PlayIcon.js.map +1 -0
- package/dist/esm/components/Icons/RedoIcon.js +30 -0
- package/dist/esm/components/Icons/RedoIcon.js.map +1 -0
- package/dist/esm/components/Icons/RefreshIcon.js +30 -0
- package/dist/esm/components/Icons/RefreshIcon.js.map +1 -0
- package/dist/esm/components/Icons/RobotIcon.js +30 -0
- package/dist/esm/components/Icons/RobotIcon.js.map +1 -0
- package/dist/esm/components/Icons/SaveIcon.js +30 -0
- package/dist/esm/components/Icons/SaveIcon.js.map +1 -0
- package/dist/esm/components/Icons/SearchIcon.js +30 -0
- package/dist/esm/components/Icons/SearchIcon.js.map +1 -0
- package/dist/esm/components/Icons/SettingsIcon.js +30 -0
- package/dist/esm/components/Icons/SettingsIcon.js.map +1 -0
- package/dist/esm/components/Icons/SortIcon.js +30 -0
- package/dist/esm/components/Icons/SortIcon.js.map +1 -0
- package/dist/esm/components/Icons/StarIcon.js +30 -0
- package/dist/esm/components/Icons/StarIcon.js.map +1 -0
- package/dist/esm/components/Icons/SuccessIcon.js +30 -0
- package/dist/esm/components/Icons/SuccessIcon.js.map +1 -0
- package/dist/esm/components/Icons/TagIcon.js +30 -0
- package/dist/esm/components/Icons/TagIcon.js.map +1 -0
- package/dist/esm/components/Icons/TrashIcon.js +30 -0
- package/dist/esm/components/Icons/TrashIcon.js.map +1 -0
- package/dist/esm/components/Icons/UndoIcon.js +30 -0
- package/dist/esm/components/Icons/UndoIcon.js.map +1 -0
- package/dist/esm/components/Icons/UnlockIcon.js +30 -0
- package/dist/esm/components/Icons/UnlockIcon.js.map +1 -0
- package/dist/esm/components/Icons/UploadIcon.js +30 -0
- package/dist/esm/components/Icons/UploadIcon.js.map +1 -0
- package/dist/esm/components/Icons/UserIcon.js +30 -0
- package/dist/esm/components/Icons/UserIcon.js.map +1 -0
- package/dist/esm/components/Icons/WarningIcon.js +30 -0
- package/dist/esm/components/Icons/WarningIcon.js.map +1 -0
- package/dist/esm/components/Icons/ZoomInIcon.js +30 -0
- package/dist/esm/components/Icons/ZoomInIcon.js.map +1 -0
- package/dist/esm/components/Icons/ZoomOutIcon.js +30 -0
- package/dist/esm/components/Icons/ZoomOutIcon.js.map +1 -0
- package/dist/esm/components/controls/ColorPicker/ColorPicker.css.js +1 -1
- package/dist/esm/components/controls/NumberInput/useNumberInput.js +2 -1
- package/dist/esm/components/controls/NumberInput/useNumberInput.js.map +1 -1
- package/dist/esm/components/controls/Select/Select.css.js +1 -1
- package/dist/esm/components/controls/Slider/Slider.css.js +1 -1
- package/dist/esm/components/controls/TreeView/TreeNode.css.js +1 -1
- package/dist/esm/components/controls/VectorInput/VectorInput.css.js +1 -1
- package/dist/esm/components/controls/VectorInput/VectorInput.js +1 -0
- package/dist/esm/components/controls/VectorInput/VectorInput.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatInput.js +18 -7
- package/dist/esm/components/editor/ChatPanel/ChatInput.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatMarkdownRenderer.js +268 -0
- package/dist/esm/components/editor/ChatPanel/ChatMarkdownRenderer.js.map +1 -0
- package/dist/esm/components/editor/ChatPanel/ChatMessage.js +17 -13
- package/dist/esm/components/editor/ChatPanel/ChatMessage.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatMessageList.js +23 -15
- package/dist/esm/components/editor/ChatPanel/ChatMessageList.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatPanel.css.js +73 -63
- package/dist/esm/components/editor/ChatPanel/ChatPanel.css.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatPanel.js +15 -3
- package/dist/esm/components/editor/ChatPanel/ChatPanel.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/useChatInput.js +3 -3
- package/dist/esm/components/editor/ChatPanel/useChatInput.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/useChatScroll.js +53 -2
- package/dist/esm/components/editor/ChatPanel/useChatScroll.js.map +1 -1
- package/dist/esm/components/editor/PropertyInspector/PropertySection.css.js +1 -1
- package/dist/esm/components/editor/TransformControl/TransformControl.css.js +11 -0
- package/dist/esm/components/editor/TransformControl/TransformControl.css.js.map +1 -0
- package/dist/esm/components/editor/TransformControl/TransformControl.js +158 -0
- package/dist/esm/components/editor/TransformControl/TransformControl.js.map +1 -0
- package/dist/esm/components/feedback/Alert/Alert.css.js +16 -0
- package/dist/esm/components/feedback/Alert/Alert.css.js.map +1 -0
- package/dist/esm/components/feedback/Alert/Alert.js +90 -0
- package/dist/esm/components/feedback/Alert/Alert.js.map +1 -0
- package/dist/esm/components/feedback/Alert/AlertActions.js +30 -0
- package/dist/esm/components/feedback/Alert/AlertActions.js.map +1 -0
- package/dist/esm/components/feedback/Alert/AlertDescription.js +28 -0
- package/dist/esm/components/feedback/Alert/AlertDescription.js.map +1 -0
- package/dist/esm/components/feedback/Alert/AlertTitle.js +28 -0
- package/dist/esm/components/feedback/Alert/AlertTitle.js.map +1 -0
- package/dist/esm/components/feedback/Dialog/Dialog.css.js +1 -1
- package/dist/esm/components/feedback/Dialog/Dialog.js +4 -12
- package/dist/esm/components/feedback/Dialog/Dialog.js.map +1 -1
- package/dist/esm/components/feedback/Dialog/useDialogAnimation.js +10 -3
- package/dist/esm/components/feedback/Dialog/useDialogAnimation.js.map +1 -1
- package/dist/esm/components/feedback/EmptyState/EmptyState.css.js +13 -0
- package/dist/esm/components/feedback/EmptyState/EmptyState.css.js.map +1 -0
- package/dist/esm/components/feedback/EmptyState/EmptyState.js +43 -0
- package/dist/esm/components/feedback/EmptyState/EmptyState.js.map +1 -0
- package/dist/esm/components/feedback/ProgressBar/CircularProgress.js +113 -0
- package/dist/esm/components/feedback/ProgressBar/CircularProgress.js.map +1 -0
- package/dist/esm/components/feedback/ProgressBar/ProgressBar.css.js +22 -0
- package/dist/esm/components/feedback/ProgressBar/ProgressBar.css.js.map +1 -0
- package/dist/esm/components/feedback/ProgressBar/ProgressBar.js +80 -0
- package/dist/esm/components/feedback/ProgressBar/ProgressBar.js.map +1 -0
- package/dist/esm/components/feedback/Skeleton/Skeleton.css.js +13 -0
- package/dist/esm/components/feedback/Skeleton/Skeleton.css.js.map +1 -0
- package/dist/esm/components/feedback/Skeleton/Skeleton.js +78 -0
- package/dist/esm/components/feedback/Skeleton/Skeleton.js.map +1 -0
- package/dist/esm/components/feedback/Skeleton/SkeletonGroup.js +58 -0
- package/dist/esm/components/feedback/Skeleton/SkeletonGroup.js.map +1 -0
- package/dist/esm/components/feedback/Spinner/Spinner.css.js +16 -0
- package/dist/esm/components/feedback/Spinner/Spinner.css.js.map +1 -0
- package/dist/esm/components/feedback/Spinner/Spinner.js +50 -0
- package/dist/esm/components/feedback/Spinner/Spinner.js.map +1 -0
- package/dist/esm/components/feedback/Toast/ToastItem.css.js +1 -1
- package/dist/esm/components/form/InputWrapper.css.js +1 -1
- package/dist/esm/components/layout/Accordion/Accordion.css.js +1 -1
- package/dist/esm/components/layout/Divider/Divider.css.js +9 -0
- package/dist/esm/components/layout/Divider/Divider.css.js.map +1 -0
- package/dist/esm/components/layout/Divider/Divider.js +51 -0
- package/dist/esm/components/layout/Divider/Divider.js.map +1 -0
- package/dist/esm/components/layout/ListItem/ListItem.css.js +10 -0
- package/dist/esm/components/layout/ListItem/ListItem.css.js.map +1 -0
- package/dist/esm/components/layout/ListItem/ListItem.js +45 -0
- package/dist/esm/components/layout/ListItem/ListItem.js.map +1 -0
- package/dist/esm/components/layout/PageHeader/PageHeader.css.js +13 -0
- package/dist/esm/components/layout/PageHeader/PageHeader.css.js.map +1 -0
- package/dist/esm/components/layout/PageHeader/PageHeader.js +29 -0
- package/dist/esm/components/layout/PageHeader/PageHeader.js.map +1 -0
- package/dist/esm/components/layout/ScrollArea/ScrollArea.js +17 -20
- package/dist/esm/components/layout/ScrollArea/ScrollArea.js.map +1 -1
- package/dist/esm/components/layout/SplitPane/SplitPane.css.js +1 -1
- package/dist/esm/components/layout/SplitPane/SplitPane.js +2 -10
- package/dist/esm/components/layout/SplitPane/SplitPane.js.map +1 -1
- package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbEllipsis.js +49 -0
- package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbEllipsis.js.map +1 -0
- package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbItem.js +89 -0
- package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbItem.js.map +1 -0
- package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbSeparator.js +22 -0
- package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbSeparator.js.map +1 -0
- package/dist/esm/components/navigation/Breadcrumbs/Breadcrumbs.css.js +16 -0
- package/dist/esm/components/navigation/Breadcrumbs/Breadcrumbs.css.js.map +1 -0
- package/dist/esm/components/navigation/Breadcrumbs/Breadcrumbs.js +152 -0
- package/dist/esm/components/navigation/Breadcrumbs/Breadcrumbs.js.map +1 -0
- package/dist/esm/components/navigation/SegmentedControl/SegmentedControl.css.js +15 -0
- package/dist/esm/components/navigation/SegmentedControl/SegmentedControl.css.js.map +1 -0
- package/dist/esm/components/navigation/SegmentedControl/SegmentedControl.js +240 -0
- package/dist/esm/components/navigation/SegmentedControl/SegmentedControl.js.map +1 -0
- package/dist/esm/components/navigation/SegmentedControl/SegmentedControlItem.js +83 -0
- package/dist/esm/components/navigation/SegmentedControl/SegmentedControlItem.js.map +1 -0
- package/dist/esm/components/navigation/Tabs/Tab.js +0 -1
- package/dist/esm/components/navigation/Tabs/Tab.js.map +1 -1
- package/dist/esm/components/navigation/Tabs/TabPanel.js +6 -3
- package/dist/esm/components/navigation/Tabs/TabPanel.js.map +1 -1
- package/dist/esm/components/navigation/Tabs/Tabs.css.js +1 -1
- package/dist/esm/components/navigation/Tabs/Tabs.js +3 -1
- package/dist/esm/components/navigation/Tabs/Tabs.js.map +1 -1
- package/dist/esm/components/primitives/Avatar/Avatar.css.js +16 -0
- package/dist/esm/components/primitives/Avatar/Avatar.css.js.map +1 -0
- package/dist/esm/components/primitives/Avatar/Avatar.js +138 -0
- package/dist/esm/components/primitives/Avatar/Avatar.js.map +1 -0
- package/dist/esm/components/primitives/Avatar/AvatarGroup.js +81 -0
- package/dist/esm/components/primitives/Avatar/AvatarGroup.js.map +1 -0
- package/dist/esm/components/primitives/Badge/Badge.css.js +12 -0
- package/dist/esm/components/primitives/Badge/Badge.css.js.map +1 -0
- package/dist/esm/components/primitives/Badge/Badge.js +67 -0
- package/dist/esm/components/primitives/Badge/Badge.js.map +1 -0
- package/dist/esm/components/primitives/Button/Button.css.js +1 -1
- package/dist/esm/components/primitives/Checkbox/Checkbox.css.js +1 -1
- package/dist/esm/components/primitives/Checkbox/Checkbox.js +9 -1
- package/dist/esm/components/primitives/Checkbox/Checkbox.js.map +1 -1
- package/dist/esm/components/primitives/Code/Code.css.js +7 -0
- package/dist/esm/components/primitives/Code/Code.css.js.map +1 -0
- package/dist/esm/components/primitives/Code/Code.js +24 -0
- package/dist/esm/components/primitives/Code/Code.js.map +1 -0
- package/dist/esm/components/primitives/Collapsible/Collapsible.css.js +1 -1
- package/dist/esm/components/primitives/IconButton/IconButton.css.js +1 -1
- package/dist/esm/components/primitives/Kbd/Kbd.css.js +9 -0
- package/dist/esm/components/primitives/Kbd/Kbd.css.js.map +1 -0
- package/dist/esm/components/primitives/Kbd/Kbd.js +46 -0
- package/dist/esm/components/primitives/Kbd/Kbd.js.map +1 -0
- package/dist/esm/components/primitives/Link/Link.css.js +11 -0
- package/dist/esm/components/primitives/Link/Link.css.js.map +1 -0
- package/dist/esm/components/primitives/Link/Link.js +160 -0
- package/dist/esm/components/primitives/Link/Link.js.map +1 -0
- package/dist/esm/components/primitives/Popover/Popover.css.js +1 -1
- package/dist/esm/components/primitives/Radio/Radio.css.js +18 -0
- package/dist/esm/components/primitives/Radio/Radio.css.js.map +1 -0
- package/dist/esm/components/primitives/Radio/Radio.js +109 -0
- package/dist/esm/components/primitives/Radio/Radio.js.map +1 -0
- package/dist/esm/components/primitives/Radio/RadioGroup.js +82 -0
- package/dist/esm/components/primitives/Radio/RadioGroup.js.map +1 -0
- package/dist/esm/components/primitives/Switch/Switch.css.js +1 -1
- package/dist/esm/components/primitives/TextArea/TextArea.css.js +10 -0
- package/dist/esm/components/primitives/TextArea/TextArea.css.js.map +1 -0
- package/dist/esm/components/primitives/TextArea/TextArea.js +97 -0
- package/dist/esm/components/primitives/TextArea/TextArea.js.map +1 -0
- package/dist/esm/components/primitives/Tooltip/Tooltip.js +7 -2
- package/dist/esm/components/primitives/Tooltip/Tooltip.js.map +1 -1
- package/dist/esm/components/primitives/VisuallyHidden/VisuallyHidden.css.js +7 -0
- package/dist/esm/components/primitives/VisuallyHidden/VisuallyHidden.css.js.map +1 -0
- package/dist/esm/components/primitives/VisuallyHidden/VisuallyHidden.js +38 -0
- package/dist/esm/components/primitives/VisuallyHidden/VisuallyHidden.js.map +1 -0
- package/dist/esm/components/shell/FloatingPanel/FloatingPanel.js +2 -10
- package/dist/esm/components/shell/FloatingPanel/FloatingPanel.js.map +1 -1
- package/dist/esm/context/KeyboardContext.js +1 -0
- package/dist/esm/context/KeyboardContext.js.map +1 -1
- package/dist/esm/hooks/useClickOutside/useClickOutside.js +60 -0
- package/dist/esm/hooks/useClickOutside/useClickOutside.js.map +1 -0
- package/dist/esm/hooks/useClipboard/useClipboard.js +147 -0
- package/dist/esm/hooks/useClipboard/useClipboard.js.map +1 -0
- package/dist/esm/hooks/useControlledState/useControlledState.js +75 -0
- package/dist/esm/hooks/useControlledState/useControlledState.js.map +1 -0
- package/dist/esm/hooks/useDisclosure/useDisclosure.js +49 -0
- package/dist/esm/hooks/useDisclosure/useDisclosure.js.map +1 -0
- package/dist/esm/{components/feedback/Dialog → hooks/useFocusTrap}/useFocusTrap.js +7 -7
- package/dist/esm/hooks/useFocusTrap/useFocusTrap.js.map +1 -0
- package/dist/esm/hooks/useHotkey/useHotkey.js +203 -0
- package/dist/esm/hooks/useHotkey/useHotkey.js.map +1 -0
- package/dist/esm/hooks/useKeyboard/useKeyboard.js +56 -0
- package/dist/esm/hooks/useKeyboard/useKeyboard.js.map +1 -0
- package/dist/esm/hooks/useKeyboard/utils.js +56 -0
- package/dist/esm/hooks/useKeyboard/utils.js.map +1 -0
- package/dist/esm/hooks/useMergedRef/useMergedRef.js +39 -0
- package/dist/esm/hooks/useMergedRef/useMergedRef.js.map +1 -0
- package/dist/esm/hooks/useResizeObserver/useResizeObserver.js +75 -0
- package/dist/esm/hooks/useResizeObserver/useResizeObserver.js.map +1 -0
- package/dist/esm/hooks/useTheme/useTheme.js +198 -0
- package/dist/esm/hooks/useTheme/useTheme.js.map +1 -0
- package/dist/esm/index.js +50 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/theme/ThemeProvider.js +17 -3
- package/dist/esm/theme/ThemeProvider.js.map +1 -1
- package/dist/esm/theme/contract.css.js +1 -1
- package/dist/esm/theme/createLightTheme.js +29 -0
- package/dist/esm/theme/createLightTheme.js.map +1 -0
- package/dist/esm/theme/darkTheme.css.js +2 -2
- package/dist/esm/theme/darkThemeValues.js +155 -0
- package/dist/esm/theme/darkThemeValues.js.map +1 -0
- package/dist/esm/theme/globalScrollbars.css.js +6 -0
- package/dist/esm/theme/globalScrollbars.css.js.map +1 -0
- package/dist/esm/theme/index.js +10 -0
- package/dist/esm/theme/index.js.map +1 -0
- package/dist/esm/theme/lightTheme.css.js +6 -0
- package/dist/esm/theme/lightTheme.css.js.map +1 -0
- package/dist/esm/theme/lightThemeValues.js +164 -0
- package/dist/esm/theme/lightThemeValues.js.map +1 -0
- package/dist/esm/theme/themeContractData.js +161 -0
- package/dist/esm/theme/themeContractData.js.map +1 -0
- package/dist/esm/theme-values.js +4 -0
- package/dist/esm/theme-values.js.map +1 -0
- package/dist/esm/utils/animations.css.js +15 -0
- package/dist/esm/utils/animations.css.js.map +1 -0
- package/dist/esm/utils/devWarn.js +36 -0
- package/dist/esm/utils/devWarn.js.map +1 -0
- package/dist/esm/utils/platform.js +91 -0
- package/dist/esm/utils/platform.js.map +1 -0
- package/dist/tokens/tokens.dark.css +98 -0
- package/dist/tokens/tokens.json +851 -0
- package/dist/tokens/tokens.light.css +98 -0
- package/dist/types/components/editor/ChatPanel/ChatMarkdownRenderer.d.ts +323 -0
- package/dist/types/components/editor/ChatPanel/ChatMarkdownRenderer.types.d.ts +46 -0
- package/dist/types/components/editor/ChatPanel/ChatMessage.d.ts +1 -0
- package/dist/types/components/editor/ChatPanel/ChatMessageList.d.ts +2 -1
- package/dist/types/components/editor/ChatPanel/ChatPanel.d.ts +1 -0
- package/dist/types/components/editor/ChatPanel/ChatPanel.types.d.ts +82 -1
- package/dist/types/components/editor/TransformControl/TransformControl.d.ts +34 -0
- package/dist/types/components/editor/TransformControl/TransformControl.types.d.ts +153 -0
- package/dist/types/components/feedback/Alert/Alert.d.ts +340 -0
- package/dist/types/components/feedback/Alert/Alert.types.d.ts +82 -0
- package/dist/types/components/feedback/Alert/AlertActions.d.ts +306 -0
- package/dist/types/components/feedback/Alert/AlertDescription.d.ts +303 -0
- package/dist/types/components/feedback/Alert/AlertTitle.d.ts +303 -0
- package/dist/types/components/feedback/EmptyState/EmptyState.d.ts +313 -0
- package/dist/types/components/feedback/EmptyState/EmptyState.types.d.ts +31 -0
- package/dist/types/components/feedback/ProgressBar/CircularProgress.d.ts +313 -0
- package/dist/types/components/feedback/ProgressBar/ProgressBar.d.ts +315 -0
- package/dist/types/components/feedback/ProgressBar/ProgressBar.types.d.ts +132 -0
- package/dist/types/components/feedback/Skeleton/Skeleton.d.ts +312 -0
- package/dist/types/components/feedback/Skeleton/Skeleton.types.d.ts +82 -0
- package/dist/types/components/feedback/Skeleton/SkeletonGroup.d.ts +313 -0
- package/dist/types/components/feedback/Spinner/Spinner.d.ts +306 -0
- package/dist/types/components/feedback/Spinner/Spinner.types.d.ts +41 -0
- package/dist/types/components/layout/Divider/Divider.d.ts +307 -0
- package/dist/types/components/layout/Divider/Divider.types.d.ts +50 -0
- package/dist/types/components/layout/ListItem/ListItem.d.ts +312 -0
- package/dist/types/components/layout/ListItem/ListItem.types.d.ts +35 -0
- package/dist/types/components/layout/PageHeader/PageHeader.d.ts +311 -0
- package/dist/types/components/layout/PageHeader/PageHeader.types.d.ts +30 -0
- package/dist/types/components/navigation/Breadcrumbs/BreadcrumbEllipsis.d.ts +297 -0
- package/dist/types/components/navigation/Breadcrumbs/BreadcrumbItem.d.ts +304 -0
- package/dist/types/components/navigation/Breadcrumbs/BreadcrumbSeparator.d.ts +296 -0
- package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.d.ts +311 -0
- package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.types.d.ts +89 -0
- package/dist/types/components/navigation/SegmentedControl/SegmentedControl.d.ts +24 -0
- package/dist/types/components/navigation/SegmentedControl/SegmentedControl.types.d.ts +85 -0
- package/dist/types/components/navigation/SegmentedControl/SegmentedControlItem.d.ts +12 -0
- package/dist/types/components/navigation/Tabs/Tabs.types.d.ts +10 -0
- package/dist/types/components/primitives/Avatar/Avatar.d.ts +317 -0
- package/dist/types/components/primitives/Avatar/Avatar.types.d.ts +139 -0
- package/dist/types/components/primitives/Avatar/AvatarGroup.d.ts +316 -0
- package/dist/types/components/primitives/Badge/Badge.d.ts +310 -0
- package/dist/types/components/primitives/Badge/Badge.types.d.ts +67 -0
- package/dist/types/components/primitives/Button/Button.d.ts +2 -2
- package/dist/types/components/primitives/Code/Code.d.ts +301 -0
- package/dist/types/components/primitives/Code/Code.types.d.ts +17 -0
- package/dist/types/components/primitives/IconButton/IconButton.d.ts +2 -2
- package/dist/types/components/primitives/Kbd/Kbd.d.ts +307 -0
- package/dist/types/components/primitives/Kbd/Kbd.types.d.ts +49 -0
- package/dist/types/components/primitives/Link/Link.d.ts +20 -0
- package/dist/types/components/primitives/Link/Link.types.d.ts +123 -0
- package/dist/types/components/primitives/Radio/Radio.d.ts +319 -0
- package/dist/types/components/primitives/Radio/Radio.types.d.ts +155 -0
- package/dist/types/components/primitives/Radio/RadioGroup.d.ts +320 -0
- package/dist/types/components/primitives/TextArea/TextArea.d.ts +26 -0
- package/dist/types/components/primitives/TextArea/TextArea.types.d.ts +76 -0
- package/dist/types/components/primitives/VisuallyHidden/VisuallyHidden.d.ts +316 -0
- package/dist/types/components/primitives/VisuallyHidden/VisuallyHidden.types.d.ts +29 -0
- package/dist/types/hooks/useClickOutside/useClickOutside.d.ts +37 -0
- package/dist/types/hooks/useClipboard/useClipboard.d.ts +24 -0
- package/dist/types/hooks/useClipboard/useClipboard.types.d.ts +22 -0
- package/dist/types/hooks/useControlledState/useControlledState.d.ts +38 -0
- package/dist/types/hooks/useDisclosure/useDisclosure.d.ts +25 -0
- package/dist/types/hooks/useDisclosure/useDisclosure.types.d.ts +22 -0
- package/dist/types/hooks/useFocusTrap/useFocusTrap.d.ts +30 -0
- package/dist/types/hooks/useHotkey/useHotkey.d.ts +23 -0
- package/dist/types/hooks/useHotkey/useHotkey.types.d.ts +36 -0
- package/dist/types/hooks/useKeyboard/types.d.ts +14 -0
- package/dist/types/hooks/useKeyboard/useKeyboard.d.ts +36 -0
- package/dist/types/hooks/useKeyboard/utils.d.ts +6 -0
- package/dist/types/hooks/useMergedRef/useMergedRef.d.ts +22 -0
- package/dist/types/hooks/useResizeObserver/useResizeObserver.d.ts +35 -0
- package/dist/types/hooks/useTheme/useTheme.d.ts +48 -0
- package/dist/types/hooks/useTheme/useTheme.types.d.ts +60 -0
- package/dist/types/index.d.ts +75 -3
- package/dist/types/theme/ThemeProvider.d.ts +14 -2
- package/dist/types/theme/contract.css.d.ts +125 -118
- package/dist/types/theme/createCustomTheme.d.ts +1 -1
- package/dist/types/theme/createLightTheme.d.ts +24 -0
- package/dist/types/theme/{darkTheme.css.d.ts → darkThemeValues.d.ts} +9 -2
- package/dist/types/theme/globalScrollbars.css.d.ts +15 -0
- package/dist/types/theme/index.d.ts +9 -0
- package/dist/types/theme/lightTheme.css.d.ts +17 -0
- package/dist/types/theme/lightThemeValues.d.ts +168 -0
- package/dist/types/theme/themeContractData.d.ts +160 -0
- package/dist/types/theme-values.d.ts +10 -0
- package/dist/types/utils/animations.css.d.ts +20 -0
- package/dist/types/utils/platform.d.ts +16 -0
- package/package.json +13 -4
- package/dist/esm/components/feedback/Dialog/useFocusTrap.js.map +0 -1
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from 'react/jsx-runtime';
|
|
3
|
+
import React, { useState, useMemo } from 'react';
|
|
4
|
+
import '../../Icons/AddIcon.js';
|
|
5
|
+
import '../../Icons/AiChatIcon.js';
|
|
6
|
+
import '../../Icons/AiSparklesIcon.js';
|
|
7
|
+
import '../../Icons/ArrowDownIcon.js';
|
|
8
|
+
import '../../Icons/ArrowLeftIcon.js';
|
|
9
|
+
import { ArrowRightIcon } from '../../Icons/ArrowRightIcon.js';
|
|
10
|
+
import '../../Icons/ArrowUpIcon.js';
|
|
11
|
+
import '../../Icons/BookmarkIcon.js';
|
|
12
|
+
import '../../Icons/CalendarIcon.js';
|
|
13
|
+
import '../../Icons/ChevronDownIcon.js';
|
|
14
|
+
import '../../Icons/ChevronUpIcon.js';
|
|
15
|
+
import '../../Icons/ClockIcon.js';
|
|
16
|
+
import '../../Icons/CloseIcon.js';
|
|
17
|
+
import '../../Icons/CodeIcon.js';
|
|
18
|
+
import '../../Icons/CopyIcon.js';
|
|
19
|
+
import '../../Icons/CutIcon.js';
|
|
20
|
+
import '../../Icons/DownloadIcon.js';
|
|
21
|
+
import '../../Icons/EditIcon.js';
|
|
22
|
+
import '../../Icons/ErrorIcon.js';
|
|
23
|
+
import '../../Icons/EyeDropperIcon.js';
|
|
24
|
+
import '../../Icons/EyeIcon.js';
|
|
25
|
+
import '../../Icons/FilterIcon.js';
|
|
26
|
+
import '../../Icons/FolderIcon.js';
|
|
27
|
+
import '../../Icons/FullscreenIcon.js';
|
|
28
|
+
import '../../Icons/GridIcon.js';
|
|
29
|
+
import '../../Icons/HeartIcon.js';
|
|
30
|
+
import '../../Icons/HelpIcon.js';
|
|
31
|
+
import '../../Icons/HomeIcon.js';
|
|
32
|
+
import '../../Icons/InfoIcon.js';
|
|
33
|
+
import '../../Icons/LinkIcon.js';
|
|
34
|
+
import '../../Icons/ListIcon.js';
|
|
35
|
+
import '../../Icons/LockIcon.js';
|
|
36
|
+
import '../../Icons/MaximizeIcon.js';
|
|
37
|
+
import '../../Icons/MenuIcon.js';
|
|
38
|
+
import '../../Icons/MinimizeIcon.js';
|
|
39
|
+
import '../../Icons/PasteIcon.js';
|
|
40
|
+
import '../../Icons/PlayIcon.js';
|
|
41
|
+
import '../../Icons/RedoIcon.js';
|
|
42
|
+
import '../../Icons/RefreshIcon.js';
|
|
43
|
+
import '../../Icons/RobotIcon.js';
|
|
44
|
+
import '../../Icons/SaveIcon.js';
|
|
45
|
+
import '../../Icons/SearchIcon.js';
|
|
46
|
+
import '../../Icons/SettingsIcon.js';
|
|
47
|
+
import '../../Icons/SortIcon.js';
|
|
48
|
+
import '../../Icons/StarIcon.js';
|
|
49
|
+
import '../../Icons/SuccessIcon.js';
|
|
50
|
+
import '../../Icons/TagIcon.js';
|
|
51
|
+
import '../../Icons/TrashIcon.js';
|
|
52
|
+
import '../../Icons/UndoIcon.js';
|
|
53
|
+
import '../../Icons/UnlockIcon.js';
|
|
54
|
+
import '../../Icons/UploadIcon.js';
|
|
55
|
+
import '../../Icons/UserIcon.js';
|
|
56
|
+
import '../../Icons/WarningIcon.js';
|
|
57
|
+
import '../../Icons/ZoomInIcon.js';
|
|
58
|
+
import '../../Icons/ZoomOutIcon.js';
|
|
59
|
+
import '../../Icons/CheckIcon.js';
|
|
60
|
+
import '../../Icons/CircleIcon.js';
|
|
61
|
+
import '../../Icons/TangentFreeIcon.js';
|
|
62
|
+
import '../../Icons/TangentAlignedIcon.js';
|
|
63
|
+
import '../../Icons/TangentMirroredIcon.js';
|
|
64
|
+
import '../../Icons/TangentAutoIcon.js';
|
|
65
|
+
import '../../Icons/TangentLinearIcon.js';
|
|
66
|
+
import '../../Icons/TangentStepIcon.js';
|
|
67
|
+
import { cx } from '../../../utils/cx.js';
|
|
68
|
+
import { BreadcrumbEllipsis } from './BreadcrumbEllipsis.js';
|
|
69
|
+
import { BreadcrumbItem } from './BreadcrumbItem.js';
|
|
70
|
+
import { BreadcrumbSeparator } from './BreadcrumbSeparator.js';
|
|
71
|
+
import { breadcrumbsListRecipe, breadcrumbsRootRecipe } from './Breadcrumbs.css.js';
|
|
72
|
+
|
|
73
|
+
function isComponentElement(child, component) {
|
|
74
|
+
return React.isValidElement(child) && child.type === component;
|
|
75
|
+
}
|
|
76
|
+
function getItemLabel(child) {
|
|
77
|
+
if (React.isValidElement(child) &&
|
|
78
|
+
typeof child.props.children === 'string') {
|
|
79
|
+
return child.props.children;
|
|
80
|
+
}
|
|
81
|
+
return undefined;
|
|
82
|
+
}
|
|
83
|
+
function withSeparators(items, separator) {
|
|
84
|
+
return items.flatMap((item, index) => index === 0
|
|
85
|
+
? [item]
|
|
86
|
+
: [
|
|
87
|
+
jsx(BreadcrumbSeparator, { children: separator }, `separator-${index}`),
|
|
88
|
+
item,
|
|
89
|
+
]);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Breadcrumb navigation for hierarchical paths.
|
|
93
|
+
*
|
|
94
|
+
* Use Breadcrumbs for file paths, nested categories, editor hierarchy depth,
|
|
95
|
+
* or parent-route navigation. Mark the current page explicitly with
|
|
96
|
+
* `isCurrent`.
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* ```tsx
|
|
100
|
+
* <Breadcrumbs>
|
|
101
|
+
* <BreadcrumbItem href="/">Home</BreadcrumbItem>
|
|
102
|
+
* <BreadcrumbItem href="/components">Components</BreadcrumbItem>
|
|
103
|
+
* <BreadcrumbItem isCurrent>Button</BreadcrumbItem>
|
|
104
|
+
* </Breadcrumbs>
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
const Breadcrumbs = /*#__PURE__*/ React.memo(({ separator = jsx(ArrowRightIcon, { size: "sm", decorative: true }), maxItems = 0, itemsBeforeCollapse = 1, itemsAfterCollapse = 2, expandable = true, size = 'sm', children, className, style, testId, ref, ...rest }) => {
|
|
108
|
+
const [expanded, setExpanded] = useState(false);
|
|
109
|
+
const renderedChildren = useMemo(() => {
|
|
110
|
+
const childArray = React.Children.toArray(children);
|
|
111
|
+
const hasExplicitSeparators = childArray.some(child => isComponentElement(child, BreadcrumbSeparator));
|
|
112
|
+
if (expanded || !maxItems || maxItems <= 0) {
|
|
113
|
+
return hasExplicitSeparators
|
|
114
|
+
? childArray
|
|
115
|
+
: withSeparators(childArray, separator);
|
|
116
|
+
}
|
|
117
|
+
const breadcrumbItems = childArray.filter(child => isComponentElement(child, BreadcrumbItem));
|
|
118
|
+
if (breadcrumbItems.length <= maxItems) {
|
|
119
|
+
return hasExplicitSeparators
|
|
120
|
+
? childArray
|
|
121
|
+
: withSeparators(childArray, separator);
|
|
122
|
+
}
|
|
123
|
+
const safeBefore = Math.max(0, itemsBeforeCollapse);
|
|
124
|
+
const safeAfter = Math.max(0, itemsAfterCollapse);
|
|
125
|
+
const visibleBefore = breadcrumbItems.slice(0, safeBefore);
|
|
126
|
+
const visibleAfter = safeAfter > 0 ? breadcrumbItems.slice(-safeAfter) : [];
|
|
127
|
+
const collapsedItems = breadcrumbItems.slice(safeBefore, breadcrumbItems.length - safeAfter);
|
|
128
|
+
const collapsedLabels = collapsedItems
|
|
129
|
+
.map(getItemLabel)
|
|
130
|
+
.filter((label) => Boolean(label))
|
|
131
|
+
.join(' / ');
|
|
132
|
+
const collapsedTrail = [
|
|
133
|
+
...visibleBefore,
|
|
134
|
+
jsx(BreadcrumbEllipsis, { onClick: expandable ? () => setExpanded(true) : undefined, tooltip: collapsedLabels || undefined }, "breadcrumb-ellipsis"),
|
|
135
|
+
...visibleAfter,
|
|
136
|
+
];
|
|
137
|
+
return withSeparators(collapsedTrail, separator);
|
|
138
|
+
}, [
|
|
139
|
+
children,
|
|
140
|
+
expandable,
|
|
141
|
+
expanded,
|
|
142
|
+
itemsAfterCollapse,
|
|
143
|
+
itemsBeforeCollapse,
|
|
144
|
+
maxItems,
|
|
145
|
+
separator,
|
|
146
|
+
]);
|
|
147
|
+
return (jsx("nav", { ref: ref, className: cx(breadcrumbsRootRecipe({ size }), className), style: style, "data-testid": testId, "aria-label": "Breadcrumb", ...rest, children: jsx("ol", { className: breadcrumbsListRecipe({ size }), children: renderedChildren }) }));
|
|
148
|
+
});
|
|
149
|
+
Breadcrumbs.displayName = 'Breadcrumbs';
|
|
150
|
+
|
|
151
|
+
export { Breadcrumbs };
|
|
152
|
+
//# sourceMappingURL=Breadcrumbs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Breadcrumbs.js","sources":["../../../../../../src/components/navigation/Breadcrumbs/Breadcrumbs.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA;AAIE;AACF;AAEA;AACE;;AAIE;;AAGF;AACF;AAEA;AAIE;;AAGI;AACI;;AAID;AAET;AAEA;;;;;;;;;;;;;;;AAeG;AACI;;AAiBH;;AAEE;;AAQE;AACE;AACA;;AAGJ;AAOA;AACE;AACE;AACA;;;;;AAMJ;AAEA;;;;;AAUA;AACE;;AAMA;;AAGF;AACF;;;;;;;;AAQC;;AAcH;AAGF;;"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import './../../../assets/src/components/navigation/SegmentedControl/SegmentedControl.css.ts.vanilla-BHOnDD2B.css';
|
|
2
|
+
import { createRuntimeFn } from '@vanilla-extract/recipes/createRuntimeFn';
|
|
3
|
+
|
|
4
|
+
var itemOutlineStyle = 'SegmentedControl_itemOutlineStyle__1k6fove16';
|
|
5
|
+
var itemSolidStyle = 'SegmentedControl_itemSolidStyle__1k6fove15';
|
|
6
|
+
var itemSubtleStyle = 'SegmentedControl_itemSubtleStyle__1k6fove14';
|
|
7
|
+
var segmentedControlRecipe = createRuntimeFn({defaultClassName:'SegmentedControl_segmentedControlRecipe__1k6fove0',variantClassNames:{orientation:{horizontal:'SegmentedControl_segmentedControlRecipe_orientation_horizontal__1k6fove1',vertical:'SegmentedControl_segmentedControlRecipe_orientation_vertical__1k6fove2'},variant:{subtle:'SegmentedControl_segmentedControlRecipe_variant_subtle__1k6fove3',solid:'SegmentedControl_segmentedControlRecipe_variant_solid__1k6fove4',outline:'SegmentedControl_segmentedControlRecipe_variant_outline__1k6fove5'},fullWidth:{true:'SegmentedControl_segmentedControlRecipe_fullWidth_true__1k6fove6',false:'SegmentedControl_segmentedControlRecipe_fullWidth_false__1k6fove7'}},defaultVariants:{orientation:'horizontal',variant:'subtle',fullWidth:false},compoundVariants:[]});
|
|
8
|
+
var segmentedIndicatorRecipe = createRuntimeFn({defaultClassName:'SegmentedControl_segmentedIndicatorRecipe__1k6fove8',variantClassNames:{variant:{subtle:'SegmentedControl_segmentedIndicatorRecipe_variant_subtle__1k6fove9',solid:'SegmentedControl_segmentedIndicatorRecipe_variant_solid__1k6fovea',outline:'SegmentedControl_segmentedIndicatorRecipe_variant_outline__1k6foveb'},orientation:{horizontal:'SegmentedControl_segmentedIndicatorRecipe_orientation_horizontal__1k6fovec',vertical:'SegmentedControl_segmentedIndicatorRecipe_orientation_vertical__1k6foved'}},defaultVariants:{variant:'subtle',orientation:'horizontal'},compoundVariants:[[{variant:'outline',orientation:'horizontal'},'SegmentedControl_segmentedIndicatorRecipe_compound_0__1k6fovee'],[{variant:'outline',orientation:'vertical'},'SegmentedControl_segmentedIndicatorRecipe_compound_1__1k6fovef']]});
|
|
9
|
+
var segmentedItemBaseStyle = 'SegmentedControl_segmentedItemBaseStyle__1k6foveu';
|
|
10
|
+
var segmentedItemIconStyle = 'SegmentedControl_segmentedItemIconStyle__1k6fove17';
|
|
11
|
+
var segmentedItemRecipe = createRuntimeFn({defaultClassName:'SegmentedControl_segmentedItemRecipe__1k6fovev',variantClassNames:{size:{sm:'SegmentedControl_segmentedItemRecipe_size_sm__1k6fovew',md:'SegmentedControl_segmentedItemRecipe_size_md__1k6fovex',lg:'SegmentedControl_segmentedItemRecipe_size_lg__1k6fovey'},iconOnly:{true:'SegmentedControl_segmentedItemRecipe_iconOnly_true__1k6fovez',false:'SegmentedControl_segmentedItemRecipe_iconOnly_false__1k6fove10'},orientation:{horizontal:'SegmentedControl_segmentedItemRecipe_orientation_horizontal__1k6fove11',vertical:'SegmentedControl_segmentedItemRecipe_orientation_vertical__1k6fove12'}},defaultVariants:{size:'md',iconOnly:false,orientation:'horizontal'},compoundVariants:[[{iconOnly:true,orientation:'vertical'},'SegmentedControl_segmentedItemRecipe_compound_0__1k6fove13']]});
|
|
12
|
+
var segmentedItemWrapperRecipe = createRuntimeFn({defaultClassName:'SegmentedControl_segmentedItemWrapperBase__1k6foveg',variantClassNames:{fullWidth:{true:'SegmentedControl_segmentedItemWrapperRecipe_fullWidth_true__1k6fovei',false:'SegmentedControl_segmentedItemWrapperRecipe_fullWidth_false__1k6fovej'},orientation:{horizontal:'SegmentedControl_segmentedItemWrapperRecipe_orientation_horizontal__1k6fovek',vertical:'SegmentedControl_segmentedItemWrapperRecipe_orientation_vertical__1k6fovel'},iconOnly:{true:'SegmentedControl_segmentedItemWrapperRecipe_iconOnly_true__1k6fovem',false:'SegmentedControl_segmentedItemWrapperRecipe_iconOnly_false__1k6foven'},size:{sm:'SegmentedControl_segmentedItemWrapperRecipe_size_sm__1k6foveo',md:'SegmentedControl_segmentedItemWrapperRecipe_size_md__1k6fovep',lg:'SegmentedControl_segmentedItemWrapperRecipe_size_lg__1k6foveq'}},defaultVariants:{fullWidth:false,orientation:'horizontal',iconOnly:false,size:'md'},compoundVariants:[[{iconOnly:true,size:'sm',orientation:'horizontal'},'SegmentedControl_segmentedItemWrapperRecipe_compound_0__1k6fover'],[{iconOnly:true,size:'md',orientation:'horizontal'},'SegmentedControl_segmentedItemWrapperRecipe_compound_1__1k6foves'],[{iconOnly:true,size:'lg',orientation:'horizontal'},'SegmentedControl_segmentedItemWrapperRecipe_compound_2__1k6fovet']]});
|
|
13
|
+
|
|
14
|
+
export { itemOutlineStyle, itemSolidStyle, itemSubtleStyle, segmentedControlRecipe, segmentedIndicatorRecipe, segmentedItemBaseStyle, segmentedItemIconStyle, segmentedItemRecipe, segmentedItemWrapperRecipe };
|
|
15
|
+
//# sourceMappingURL=SegmentedControl.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SegmentedControl.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
3
|
+
import { useState, useCallback, useRef, useEffect, useMemo, useLayoutEffect, createContext, useContext } from 'react';
|
|
4
|
+
import { cx } from '../../../utils/cx.js';
|
|
5
|
+
import { segmentedIndicatorRecipe, segmentedControlRecipe } from './SegmentedControl.css.js';
|
|
6
|
+
|
|
7
|
+
// --- Context ---
|
|
8
|
+
const SegmentedControlContext =
|
|
9
|
+
/*#__PURE__*/ createContext(null);
|
|
10
|
+
function useSegmentedControlContext() {
|
|
11
|
+
const ctx = useContext(SegmentedControlContext);
|
|
12
|
+
if (!ctx) {
|
|
13
|
+
throw new Error('SegmentedControlItem must be used within <SegmentedControl>');
|
|
14
|
+
}
|
|
15
|
+
return ctx;
|
|
16
|
+
}
|
|
17
|
+
function computeIndicatorRect(itemEl, variant, orientation) {
|
|
18
|
+
// Use offsetLeft/offsetTop (padding-box-relative) so the indicator
|
|
19
|
+
// aligns with the absolutely-positioned reference frame inside the root.
|
|
20
|
+
const x = itemEl.offsetLeft;
|
|
21
|
+
const y = itemEl.offsetTop;
|
|
22
|
+
const width = itemEl.offsetWidth;
|
|
23
|
+
const height = itemEl.offsetHeight;
|
|
24
|
+
if (variant === 'outline') {
|
|
25
|
+
if (orientation === 'horizontal') {
|
|
26
|
+
// 2px bar at the bottom of the item
|
|
27
|
+
return {
|
|
28
|
+
x,
|
|
29
|
+
y: y + height - 2,
|
|
30
|
+
width,
|
|
31
|
+
height: 2,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
// vertical: 2px bar at the left of the item
|
|
35
|
+
return {
|
|
36
|
+
x,
|
|
37
|
+
y,
|
|
38
|
+
width: 2,
|
|
39
|
+
height,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
// subtle / solid: full-segment background
|
|
43
|
+
return { x, y, width, height };
|
|
44
|
+
}
|
|
45
|
+
// --- Use isomorphic layout effect for SSR safety ---
|
|
46
|
+
const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;
|
|
47
|
+
// --- Component ---
|
|
48
|
+
/**
|
|
49
|
+
* SegmentedControl — toolbar-density mutually exclusive selector.
|
|
50
|
+
*
|
|
51
|
+
* Use when you have 2-5 mutually exclusive states without separate panels
|
|
52
|
+
* (viewport mode, list/grid toggle, alignment). For content panels use Tabs;
|
|
53
|
+
* for form-style selection use RadioGroup.
|
|
54
|
+
*
|
|
55
|
+
* Compound API: pair `SegmentedControl` with `SegmentedControlItem`.
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```tsx
|
|
59
|
+
* <SegmentedControl defaultValue="day">
|
|
60
|
+
* <SegmentedControlItem value="day">Day</SegmentedControlItem>
|
|
61
|
+
* <SegmentedControlItem value="week">Week</SegmentedControlItem>
|
|
62
|
+
* <SegmentedControlItem value="month">Month</SegmentedControlItem>
|
|
63
|
+
* </SegmentedControl>
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
const SegmentedControl = ({ value: valueProp, defaultValue, size = 'md', orientation = 'horizontal', variant = 'subtle', fullWidth = false, disabled = false, onChange, children, className, style, testId, ref, 'aria-label': ariaLabel = 'Segmented control', ...rest }) => {
|
|
67
|
+
const [internalValue, setInternalValue] = useState(defaultValue);
|
|
68
|
+
const isControlled = valueProp !== undefined;
|
|
69
|
+
const activeValue = isControlled ? valueProp : internalValue;
|
|
70
|
+
const setActiveValue = useCallback((next) => {
|
|
71
|
+
if (!isControlled) {
|
|
72
|
+
setInternalValue(next);
|
|
73
|
+
}
|
|
74
|
+
if (next !== activeValue) {
|
|
75
|
+
onChange?.(next);
|
|
76
|
+
}
|
|
77
|
+
}, [isControlled, onChange, activeValue]);
|
|
78
|
+
// --- Item registry for sliding indicator ---
|
|
79
|
+
const rootRef = useRef(null);
|
|
80
|
+
const itemsRef = useRef(new Map());
|
|
81
|
+
const setRootRef = useCallback((node) => {
|
|
82
|
+
rootRef.current = node;
|
|
83
|
+
if (typeof ref === 'function') {
|
|
84
|
+
ref(node);
|
|
85
|
+
}
|
|
86
|
+
else if (ref) {
|
|
87
|
+
ref.current = node;
|
|
88
|
+
}
|
|
89
|
+
}, [ref]);
|
|
90
|
+
const registerItem = useCallback((itemValue, node) => {
|
|
91
|
+
if (node) {
|
|
92
|
+
itemsRef.current.set(itemValue, node);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
itemsRef.current.delete(itemValue);
|
|
96
|
+
}
|
|
97
|
+
}, []);
|
|
98
|
+
// --- Sliding indicator state ---
|
|
99
|
+
const [indicator, setIndicator] = useState(null);
|
|
100
|
+
const [hasMeasured, setHasMeasured] = useState(false);
|
|
101
|
+
const updateIndicator = useCallback(() => {
|
|
102
|
+
if (activeValue === undefined) {
|
|
103
|
+
setIndicator(null);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const item = itemsRef.current.get(activeValue);
|
|
107
|
+
if (!item) {
|
|
108
|
+
setIndicator(null);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
setIndicator(computeIndicatorRect(item, variant, orientation));
|
|
112
|
+
}, [activeValue, variant, orientation]);
|
|
113
|
+
useIsomorphicLayoutEffect(() => {
|
|
114
|
+
updateIndicator();
|
|
115
|
+
// After first measure flip the flag so the indicator can transition on
|
|
116
|
+
// subsequent updates instead of animating from (0,0).
|
|
117
|
+
if (!hasMeasured) {
|
|
118
|
+
setHasMeasured(true);
|
|
119
|
+
}
|
|
120
|
+
}, [
|
|
121
|
+
updateIndicator,
|
|
122
|
+
activeValue,
|
|
123
|
+
variant,
|
|
124
|
+
orientation,
|
|
125
|
+
size,
|
|
126
|
+
fullWidth,
|
|
127
|
+
children,
|
|
128
|
+
hasMeasured,
|
|
129
|
+
]);
|
|
130
|
+
// Roving-tabindex fallback: when no item matches activeValue, the group
|
|
131
|
+
// is otherwise unreachable via Tab. Promote the first non-disabled item
|
|
132
|
+
// to tabIndex=0 so users can enter the group with the keyboard.
|
|
133
|
+
useIsomorphicLayoutEffect(() => {
|
|
134
|
+
const root = rootRef.current;
|
|
135
|
+
if (!root)
|
|
136
|
+
return;
|
|
137
|
+
const items = Array.from(root.querySelectorAll('[data-segmented-item="true"]:not([data-disabled="true"])'));
|
|
138
|
+
const hasSelected = items.some(el => el.getAttribute('aria-pressed') === 'true');
|
|
139
|
+
if (!hasSelected && items[0]) {
|
|
140
|
+
items[0].tabIndex = 0;
|
|
141
|
+
}
|
|
142
|
+
}, [activeValue, children]);
|
|
143
|
+
// Re-measure on resize
|
|
144
|
+
useEffect(() => {
|
|
145
|
+
if (typeof window === 'undefined')
|
|
146
|
+
return;
|
|
147
|
+
const root = rootRef.current;
|
|
148
|
+
if (!root)
|
|
149
|
+
return;
|
|
150
|
+
if (typeof ResizeObserver === 'undefined') {
|
|
151
|
+
const onResize = () => updateIndicator();
|
|
152
|
+
window.addEventListener('resize', onResize);
|
|
153
|
+
return () => window.removeEventListener('resize', onResize);
|
|
154
|
+
}
|
|
155
|
+
const ro = new ResizeObserver(() => updateIndicator());
|
|
156
|
+
ro.observe(root);
|
|
157
|
+
itemsRef.current.forEach(node => ro.observe(node));
|
|
158
|
+
return () => ro.disconnect();
|
|
159
|
+
}, [updateIndicator]);
|
|
160
|
+
// --- Keyboard navigation (roving) ---
|
|
161
|
+
const handleKeyDown = useCallback((e) => {
|
|
162
|
+
const root = rootRef.current;
|
|
163
|
+
if (!root)
|
|
164
|
+
return;
|
|
165
|
+
const isHorizontal = orientation === 'horizontal';
|
|
166
|
+
const nextKey = isHorizontal ? 'ArrowRight' : 'ArrowDown';
|
|
167
|
+
const prevKey = isHorizontal ? 'ArrowLeft' : 'ArrowUp';
|
|
168
|
+
const isNavKey = e.key === nextKey ||
|
|
169
|
+
e.key === prevKey ||
|
|
170
|
+
e.key === 'Home' ||
|
|
171
|
+
e.key === 'End';
|
|
172
|
+
if (!isNavKey)
|
|
173
|
+
return;
|
|
174
|
+
const items = Array.from(root.querySelectorAll('[data-segmented-item="true"]:not([data-disabled="true"])'));
|
|
175
|
+
if (items.length === 0)
|
|
176
|
+
return;
|
|
177
|
+
const current = e.target;
|
|
178
|
+
const currentIndex = items.indexOf(current);
|
|
179
|
+
let nextIndex;
|
|
180
|
+
switch (e.key) {
|
|
181
|
+
case nextKey:
|
|
182
|
+
nextIndex =
|
|
183
|
+
currentIndex === -1 || currentIndex === items.length - 1
|
|
184
|
+
? 0
|
|
185
|
+
: currentIndex + 1;
|
|
186
|
+
break;
|
|
187
|
+
case prevKey:
|
|
188
|
+
nextIndex = currentIndex <= 0 ? items.length - 1 : currentIndex - 1;
|
|
189
|
+
break;
|
|
190
|
+
case 'Home':
|
|
191
|
+
nextIndex = 0;
|
|
192
|
+
break;
|
|
193
|
+
case 'End':
|
|
194
|
+
nextIndex = items.length - 1;
|
|
195
|
+
break;
|
|
196
|
+
default:
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
e.preventDefault();
|
|
200
|
+
const target = items[nextIndex];
|
|
201
|
+
if (target) {
|
|
202
|
+
target.focus();
|
|
203
|
+
const nextValue = target.dataset['value'];
|
|
204
|
+
if (nextValue !== undefined) {
|
|
205
|
+
setActiveValue(nextValue);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}, [orientation, setActiveValue]);
|
|
209
|
+
// --- Context value ---
|
|
210
|
+
const contextValue = useMemo(() => ({
|
|
211
|
+
value: activeValue,
|
|
212
|
+
size,
|
|
213
|
+
variant,
|
|
214
|
+
orientation,
|
|
215
|
+
disabled,
|
|
216
|
+
fullWidth,
|
|
217
|
+
onChange: setActiveValue,
|
|
218
|
+
registerItem,
|
|
219
|
+
}), [
|
|
220
|
+
activeValue,
|
|
221
|
+
size,
|
|
222
|
+
variant,
|
|
223
|
+
orientation,
|
|
224
|
+
disabled,
|
|
225
|
+
fullWidth,
|
|
226
|
+
setActiveValue,
|
|
227
|
+
registerItem,
|
|
228
|
+
]);
|
|
229
|
+
const indicatorClass = segmentedIndicatorRecipe({ variant, orientation });
|
|
230
|
+
return (jsx(SegmentedControlContext.Provider, { value: contextValue, children: jsxs("div", { ref: setRootRef, role: "group", "aria-label": ariaLabel, "aria-disabled": disabled || undefined, "aria-orientation": orientation, className: cx(segmentedControlRecipe({ orientation, variant, fullWidth }), className), style: style, "data-testid": testId, onKeyDown: handleKeyDown, ...rest, children: [indicator && (jsx("span", { "aria-hidden": "true", className: indicatorClass, style: {
|
|
231
|
+
transform: `translate(${indicator.x}px, ${indicator.y}px)`,
|
|
232
|
+
width: `${indicator.width}px`,
|
|
233
|
+
height: `${indicator.height}px`,
|
|
234
|
+
opacity: hasMeasured ? 1 : 0,
|
|
235
|
+
} })), children] }) }));
|
|
236
|
+
};
|
|
237
|
+
SegmentedControl.displayName = 'SegmentedControl';
|
|
238
|
+
|
|
239
|
+
export { SegmentedControl, useSegmentedControlContext };
|
|
240
|
+
//# sourceMappingURL=SegmentedControl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SegmentedControl.js","sources":["../../../../../../src/components/navigation/SegmentedControl/SegmentedControl.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAwBA;AAEA;AACE;;AAGA;;AAEE;;AAIF;AACF;AAWA;;;AAOE;AACA;AACA;AACA;AAEA;AACE;;;;AAII;;AAEA;;;;;;;AAOF;;;;;;AAON;AAEA;AAEA;AAGA;AAEA;;;;;;;;;;;;;;;;;AAiBG;AACI;;AAoBL;;AAGA;;;;AAKI;AACE;;;;AAQN;;AAGA;AAEI;AACA;;;;AAGG;;AAEL;;;;;;AASI;;;;;;AAWN;AACE;;;;;;;;;;;;AAaA;;;;;;AAMF;;;;;;;;;AASC;;;;;AAMC;AACA;;AACA;AAKA;;AAIE;;AAEJ;;;;;AAKE;AACA;;AAEA;AACE;AACA;;;;AAKF;AACA;AACA;AACF;;AAIA;AAEI;AACA;;AAEA;;;AAIA;;;AAIE;AACF;;AAEA;AAKA;;AAEA;;AAGA;AACA;AACE;;;AAGM;AACA;;AAEN;AACE;;AAEF;;;AAGA;AACE;;AAEF;;;;AAKF;;;;AAIE;;;;AAIJ;;AAMF;AAEI;;;;;;AAMA;;AAED;;;;;;;;;AAUA;;AAKH;;AAuBY;AACA;;AAED;AAOb;AAEA;;"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
|
+
import { useEffect, useRef, useCallback } from 'react';
|
|
4
|
+
import { Tooltip } from '../../primitives/Tooltip/Tooltip.js';
|
|
5
|
+
import { cx } from '../../../utils/cx.js';
|
|
6
|
+
import { devWarn } from '../../../utils/devWarn.js';
|
|
7
|
+
import { useSegmentedControlContext } from './SegmentedControl.js';
|
|
8
|
+
import { segmentedItemIconStyle, segmentedItemRecipe, segmentedItemBaseStyle, segmentedItemWrapperRecipe, itemSubtleStyle, itemOutlineStyle, itemSolidStyle } from './SegmentedControl.css.js';
|
|
9
|
+
|
|
10
|
+
function getVariantClass(variant) {
|
|
11
|
+
switch (variant) {
|
|
12
|
+
case 'solid':
|
|
13
|
+
return itemSolidStyle;
|
|
14
|
+
case 'outline':
|
|
15
|
+
return itemOutlineStyle;
|
|
16
|
+
case 'subtle':
|
|
17
|
+
default:
|
|
18
|
+
return itemSubtleStyle;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Individual segment inside a `SegmentedControl`.
|
|
23
|
+
*
|
|
24
|
+
* Supports text, icon-only, or icon + label segments. Pair icon-only
|
|
25
|
+
* segments with a `tooltip` so the action remains discoverable.
|
|
26
|
+
*/
|
|
27
|
+
const SegmentedControlItem = ({ value, children, icon, tooltip, disabled: itemDisabled = false, className, style, testId, onClick, onFocus, ref, ...rest }) => {
|
|
28
|
+
const { value: activeValue, size, variant, orientation, disabled: groupDisabled, fullWidth, onChange, registerItem, } = useSegmentedControlContext();
|
|
29
|
+
const isSelected = activeValue === value;
|
|
30
|
+
const isDisabled = groupDisabled || itemDisabled;
|
|
31
|
+
const hasLabel = children !== undefined && children !== null && children !== '';
|
|
32
|
+
const isIconOnly = !hasLabel && Boolean(icon);
|
|
33
|
+
const ariaLabelProp = rest['aria-label'];
|
|
34
|
+
const ariaLabelledByProp = rest['aria-labelledby'];
|
|
35
|
+
// Warn when an icon-only segment has no accessible name. Runs in an
|
|
36
|
+
// effect so it does not fire from the render path (which would double in
|
|
37
|
+
// StrictMode and on every rerender).
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
if (isIconOnly && !tooltip && !ariaLabelProp && !ariaLabelledByProp) {
|
|
40
|
+
devWarn(`[SegmentedControl] Icon-only segment "${value}" has no tooltip or aria-label. ` +
|
|
41
|
+
'Add a tooltip prop or aria-label so the segment is accessible.');
|
|
42
|
+
}
|
|
43
|
+
}, [isIconOnly, tooltip, ariaLabelProp, ariaLabelledByProp, value]);
|
|
44
|
+
// Wrapper ref: this is the direct child of the SegmentedControl root and
|
|
45
|
+
// the measurement target for the sliding indicator. When `tooltip` is set
|
|
46
|
+
// the Tooltip introduces its own positioned wrapper between us and the
|
|
47
|
+
// button, which is why measuring the button itself would yield (0, 0)
|
|
48
|
+
// relative to that intermediate wrapper.
|
|
49
|
+
const wrapperRef = useRef(null);
|
|
50
|
+
const setWrapperRef = useCallback((node) => {
|
|
51
|
+
wrapperRef.current = node;
|
|
52
|
+
registerItem(value, node);
|
|
53
|
+
}, [registerItem, value]);
|
|
54
|
+
useEffect(() => {
|
|
55
|
+
return () => {
|
|
56
|
+
registerItem(value, null);
|
|
57
|
+
};
|
|
58
|
+
}, [registerItem, value]);
|
|
59
|
+
const handleClick = useCallback((e) => {
|
|
60
|
+
if (isDisabled)
|
|
61
|
+
return;
|
|
62
|
+
onChange(value);
|
|
63
|
+
onClick?.(e);
|
|
64
|
+
}, [isDisabled, onChange, value, onClick]);
|
|
65
|
+
// Resolve aria-label fallback for icon-only segments
|
|
66
|
+
const tooltipString = typeof tooltip === 'string' ? tooltip : undefined;
|
|
67
|
+
const resolvedAriaLabel = ariaLabelProp ?? (isIconOnly ? tooltipString : undefined);
|
|
68
|
+
const button = (jsxs("button", { ref: ref, type: "button", role: "button", "data-segmented-item": "true", "data-value": value, "data-disabled": isDisabled || undefined, "aria-pressed": isSelected, "aria-disabled": isDisabled || undefined, "aria-label": resolvedAriaLabel, tabIndex: isSelected && !isDisabled ? 0 : -1, disabled: isDisabled, onClick: handleClick, onFocus: onFocus, className: cx(segmentedItemBaseStyle, segmentedItemRecipe({
|
|
69
|
+
size,
|
|
70
|
+
iconOnly: isIconOnly,
|
|
71
|
+
orientation,
|
|
72
|
+
}), getVariantClass(variant), className), style: style, "data-testid": testId, ...rest, children: [icon && jsx("span", { className: segmentedItemIconStyle, children: icon }), hasLabel && jsx("span", { children: children })] }));
|
|
73
|
+
return (jsx("span", { ref: setWrapperRef, "data-segmented-item-wrapper": "true", className: segmentedItemWrapperRecipe({
|
|
74
|
+
fullWidth,
|
|
75
|
+
orientation,
|
|
76
|
+
iconOnly: isIconOnly,
|
|
77
|
+
size,
|
|
78
|
+
}), children: tooltip ? jsx(Tooltip, { title: tooltip, children: button }) : button }));
|
|
79
|
+
};
|
|
80
|
+
SegmentedControlItem.displayName = 'SegmentedControlItem';
|
|
81
|
+
|
|
82
|
+
export { SegmentedControlItem };
|
|
83
|
+
//# sourceMappingURL=SegmentedControlItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SegmentedControlItem.js","sources":["../../../../../../src/components/navigation/SegmentedControl/SegmentedControlItem.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;AAkBA;;AAEI;AACE;AACF;AACE;AACF;AACA;AACE;;AAEN;AAEA;;;;;AAKG;AACI;;AAyBL;AACA;AACA;;AAIA;AACA;;;;;;;AASQ;;AAGR;;;;;;AAOA;AACA;AAEI;AACA;AACF;;AAKA;AACE;AACF;AACF;AAEA;AAEI;;;AAEA;;;AAMJ;AACA;AAGA;;AAmBQ;;AAED;;;;AAoBD;;;AAOR;AAEA;;"}
|
|
@@ -65,7 +65,6 @@ const Tab = ({ value, children, icon, disabled = false, closable = false, onClos
|
|
|
65
65
|
const variantClasses = getVariantClasses(variant, isActive, orientation);
|
|
66
66
|
return (jsxs("button", { ref: ref, role: "tab", id: tabId, "aria-selected": isActive, "aria-controls": panelId, "aria-disabled": disabled || undefined, tabIndex: isActive ? 0 : -1, disabled: disabled, onClick: handleClick, onKeyDown: handleKeyDown, className: cx(tabBaseStyle, tabRecipe({ size, disabled, fullWidth }), variantClasses, className), style: {
|
|
67
67
|
gap: vars.spacing.xs,
|
|
68
|
-
transition: `all ${vars.transitions.fast}`,
|
|
69
68
|
...style,
|
|
70
69
|
}, "data-testid": testId, ...rest, children: [icon && (jsx("span", { className: tabIconStyle, style: {
|
|
71
70
|
width: `${sizeConfig.iconSize}px`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tab.js","sources":["../../../../../../src/components/navigation/Tabs/Tab.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;AAkCA;AACE;AACA;AACA;;AAGF;AAEA;;AAMI;AACE;;AAKM;AACA;;AAGR;AACE;AAIF;AACE;;AAIM;AACA;;AAGR;AACE;;AAEN;AAEA;AAEO;AAaL;AASA;AACA;AACA;AAEA;AACA;AAEA;;;;;AAMA;AAEI;;;;;;;;;;AAUF;AAIF;;AAGI;AACF;;AAMF;AAmBM;AACA;
|
|
1
|
+
{"version":3,"file":"Tab.js","sources":["../../../../../../src/components/navigation/Tabs/Tab.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;AAkCA;AACE;AACA;AACA;;AAGF;AAEA;;AAMI;AACE;;AAKM;AACA;;AAGR;AACE;AAIF;AACE;;AAIM;AACA;;AAGR;AACE;;AAEN;AAEA;AAEO;AAaL;AASA;AACA;AACA;AAEA;AACA;AAEA;;;;;AAMA;AAEI;;;;;;;;;;AAUF;AAIF;;AAGI;AACF;;AAMF;AAmBM;AACA;AACD;AAQK;AACA;;AAmBZ;AAEA;;"}
|
|
@@ -5,12 +5,15 @@ import { cx } from '../../../utils/cx.js';
|
|
|
5
5
|
import { tabPanelStyle } from './Tabs.css.js';
|
|
6
6
|
|
|
7
7
|
// --- Component ---
|
|
8
|
-
const TabPanel = ({ value, children, keepMounted
|
|
9
|
-
const
|
|
8
|
+
const TabPanel = ({ value, children, keepMounted, className, style, testId, ref, ...rest }) => {
|
|
9
|
+
const ctx = useTabsContext();
|
|
10
|
+
const { activeValue, tabsId } = ctx;
|
|
10
11
|
const isActive = activeValue === value;
|
|
12
|
+
// Explicit child prop wins over the parent cascade. Undefined = inherit.
|
|
13
|
+
const effectiveKeepMounted = keepMounted ?? ctx.keepMounted;
|
|
11
14
|
const tabId = `tabs-${tabsId}-tab-${value}`;
|
|
12
15
|
const panelId = `tabs-${tabsId}-panel-${value}`;
|
|
13
|
-
if (!isActive && !
|
|
16
|
+
if (!isActive && !effectiveKeepMounted) {
|
|
14
17
|
return null;
|
|
15
18
|
}
|
|
16
19
|
return (jsx("div", { ref: ref, role: "tabpanel", id: panelId, "aria-labelledby": tabId, tabIndex: isActive ? 0 : -1, hidden: !isActive || undefined, className: cx(tabPanelStyle, className), style: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabPanel.js","sources":["../../../../../../src/components/navigation/Tabs/TabPanel.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAQA;AAEO;;
|
|
1
|
+
{"version":3,"file":"TabPanel.js","sources":["../../../../../../src/components/navigation/Tabs/TabPanel.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAQA;AAEO;AAUL;AACA;AACA;;AAGA;AAEA;AACA;AAEA;AACE;;;AAaI;AACA;AACD;AAOP;AAEA;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import './../../../assets/src/components/navigation/Tabs/Tabs.css.ts.vanilla-
|
|
1
|
+
import './../../../assets/src/components/navigation/Tabs/Tabs.css.ts.vanilla-CQucokdg.css';
|
|
2
2
|
import { createRuntimeFn } from '@vanilla-extract/recipes/createRuntimeFn';
|
|
3
3
|
|
|
4
4
|
var tabBaseStyle = 'Tabs_tabBaseStyle__v404x7i';
|
|
@@ -31,7 +31,7 @@ function useTabsContext() {
|
|
|
31
31
|
* </Tabs>
|
|
32
32
|
* ```
|
|
33
33
|
*/
|
|
34
|
-
const Tabs = ({ value: valueProp, defaultValue, variant = 'underline', size = 'md', orientation = 'horizontal', fullWidth = false, pillsFrame = true, children, onChange, className, style, testId, ref, ...rest }) => {
|
|
34
|
+
const Tabs = ({ value: valueProp, defaultValue, variant = 'underline', size = 'md', orientation = 'horizontal', fullWidth = false, pillsFrame = true, keepMounted = false, children, onChange, className, style, testId, ref, ...rest }) => {
|
|
35
35
|
const autoId = useId();
|
|
36
36
|
const tabsId = autoId;
|
|
37
37
|
const [internalValue, setInternalValue] = useState(defaultValue ?? '');
|
|
@@ -51,6 +51,7 @@ const Tabs = ({ value: valueProp, defaultValue, variant = 'underline', size = 'm
|
|
|
51
51
|
orientation,
|
|
52
52
|
fullWidth,
|
|
53
53
|
pillsFrame,
|
|
54
|
+
keepMounted,
|
|
54
55
|
tabsId,
|
|
55
56
|
}), [
|
|
56
57
|
activeValue,
|
|
@@ -60,6 +61,7 @@ const Tabs = ({ value: valueProp, defaultValue, variant = 'underline', size = 'm
|
|
|
60
61
|
orientation,
|
|
61
62
|
fullWidth,
|
|
62
63
|
pillsFrame,
|
|
64
|
+
keepMounted,
|
|
63
65
|
tabsId,
|
|
64
66
|
]);
|
|
65
67
|
return (jsx(TabsContext.Provider, { value: contextValue, children: jsx("div", { ref: ref, className: cx(tabsRootRecipe({ orientation }), className), style: style, "data-testid": testId, ...rest, children: children }) }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tabs.js","sources":["../../../../../../src/components/navigation/Tabs/Tabs.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAcA;AAEA;;AAGE;;AAEE;;AAEF;AACF;AAEA;AAEA;;;;;;;;;;;;;;;;AAgBG;;
|
|
1
|
+
{"version":3,"file":"Tabs.js","sources":["../../../../../../src/components/navigation/Tabs/Tabs.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAcA;AAEA;;AAGE;;AAEE;;AAEF;AACF;AAEA;AAEA;;;;;;;;;;;;;;;;AAgBG;AACI;AAiBL;;AAGA;AACA;;AAGA;;;;AAKI;AACF;AAIF;;;;;;;;;;AAWG;;;;;;;;;;AAWA;AAGH;AAaF;AAEA;;"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import './../../../assets/src/components/primitives/Avatar/Avatar.css.ts.vanilla-jG5hUudL.css';
|
|
2
|
+
import { createRuntimeFn } from '@vanilla-extract/recipes/createRuntimeFn';
|
|
3
|
+
|
|
4
|
+
var avatarBgVar = 'var(--avatarBgVar__e438tx0)';
|
|
5
|
+
var avatarFallbackStyle = 'Avatar_avatarFallbackStyle__e438txe';
|
|
6
|
+
var avatarGroupItemStyle = 'Avatar_avatarGroupItemStyle__e438txq';
|
|
7
|
+
var avatarGroupRootStyle = 'Avatar_avatarGroupRootStyle__e438txp';
|
|
8
|
+
var avatarGroupSpacingVar = 'var(--avatarGroupSpacingVar__e438txo)';
|
|
9
|
+
var avatarImageInheritRadius = 'Avatar_avatarImageInheritRadius__e438txg';
|
|
10
|
+
var avatarImageStyle = 'Avatar_avatarImageStyle__e438txf';
|
|
11
|
+
var avatarRecipe = createRuntimeFn({defaultClassName:'Avatar_avatarRecipe__e438tx2',variantClassNames:{size:{xs:'Avatar_avatarRecipe_size_xs__e438tx3',sm:'Avatar_avatarRecipe_size_sm__e438tx4',md:'Avatar_avatarRecipe_size_md__e438tx5',lg:'Avatar_avatarRecipe_size_lg__e438tx6',xl:'Avatar_avatarRecipe_size_xl__e438tx7',xxl:'Avatar_avatarRecipe_size_xxl__e438tx8'},shape:{circle:'Avatar_avatarRecipe_shape_circle__e438tx9',square:'Avatar_avatarRecipe_shape_square__e438txa',rounded:'Avatar_avatarRecipe_shape_rounded__e438txb'},bordered:{true:'Avatar_avatarRecipe_bordered_true__e438txc'},interactive:{true:'Avatar_avatarRecipe_interactive_true__e438txd'}},defaultVariants:{size:'md',shape:'circle'},compoundVariants:[]});
|
|
12
|
+
var avatarStatusRecipe = createRuntimeFn({defaultClassName:'Avatar_avatarStatusRecipe__e438txh',variantClassNames:{size:{xs:'Avatar_avatarStatusRecipe_size_xs__e438txi',sm:'Avatar_avatarStatusRecipe_size_sm__e438txj',md:'Avatar_avatarStatusRecipe_size_md__e438txk',lg:'Avatar_avatarStatusRecipe_size_lg__e438txl',xl:'Avatar_avatarStatusRecipe_size_xl__e438txm',xxl:'Avatar_avatarStatusRecipe_size_xxl__e438txn'}},defaultVariants:{size:'md'},compoundVariants:[]});
|
|
13
|
+
var avatarStatusVar = 'var(--avatarStatusVar__e438tx1)';
|
|
14
|
+
|
|
15
|
+
export { avatarBgVar, avatarFallbackStyle, avatarGroupItemStyle, avatarGroupRootStyle, avatarGroupSpacingVar, avatarImageInheritRadius, avatarImageStyle, avatarRecipe, avatarStatusRecipe, avatarStatusVar };
|
|
16
|
+
//# sourceMappingURL=Avatar.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Avatar.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;"}
|