entangle-ui 0.7.0 → 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 +180 -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-BI5569ZO.css → ChatPanel.css.ts.vanilla-CLn8idfz.css} +117 -133
- 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/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/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/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/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/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-DTOMjGkp.css → TextArea.css.ts.vanilla-M9l1t4HR.css} +5 -0
- package/dist/esm/assets/src/components/primitives/VisuallyHidden/VisuallyHidden.css.ts.vanilla-DBulVh4Q.css +36 -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-DOVlpljP.css → animations.css.ts.vanilla-CRLFsBSV.css} +22 -8
- 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/ChatMessage.js +4 -12
- package/dist/esm/components/editor/ChatPanel/ChatMessage.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatMessageList.js +4 -10
- package/dist/esm/components/editor/ChatPanel/ChatMessageList.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatPanel.css.js +72 -74
- package/dist/esm/components/editor/ChatPanel/ChatPanel.css.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/useChatScroll.js +22 -28
- 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/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 +1 -1
- 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/ScrollArea/ScrollArea.js +17 -20
- package/dist/esm/components/layout/ScrollArea/ScrollArea.js.map +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/Tabs.css.js +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/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/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 +1 -1
- 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 +40 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/theme/createLightTheme.js +29 -0
- package/dist/esm/theme/createLightTheme.js.map +1 -0
- package/dist/esm/theme/darkThemeValues.js +155 -0
- package/dist/esm/theme/darkThemeValues.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 +8 -6
- package/dist/esm/utils/animations.css.js.map +1 -1
- 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/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/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/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/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/Button/Button.d.ts +1 -1
- package/dist/types/components/primitives/IconButton/IconButton.d.ts +1 -1
- 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/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 +56 -3
- package/dist/types/theme/contract.css.d.ts +125 -121
- 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} +6 -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 +3 -1
- 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,109 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
|
+
import React, { useContext, useId, useState, useCallback } from 'react';
|
|
4
|
+
import { assignInlineVars } from '@vanilla-extract/dynamic';
|
|
5
|
+
import { FormHelperText } from '../../form/FormHelperText.js';
|
|
6
|
+
import { cx } from '../../../utils/cx.js';
|
|
7
|
+
import { RadioGroupContext } from './RadioGroup.js';
|
|
8
|
+
import { innerSizeVar, outerSizeVar, visuallyHiddenInputStyle, radioDotRecipe, radioOuterRecipe, radioLabelTextStyle, radioLabelRecipe, radioContainerStyle } from './Radio.css.js';
|
|
9
|
+
|
|
10
|
+
const OUTER_SIZES = {
|
|
11
|
+
sm: 12,
|
|
12
|
+
md: 14,
|
|
13
|
+
lg: 16,
|
|
14
|
+
};
|
|
15
|
+
const INNER_SIZES = {
|
|
16
|
+
sm: 6,
|
|
17
|
+
md: 7,
|
|
18
|
+
lg: 8,
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Radio component for mutually exclusive selection in property panels,
|
|
22
|
+
* settings, and form interfaces.
|
|
23
|
+
*
|
|
24
|
+
* Works standalone (controlled or uncontrolled) or as a child of `RadioGroup`,
|
|
25
|
+
* which manages exclusive selection across siblings via context. When inside
|
|
26
|
+
* a `RadioGroup`, the group's `value`, `name`, `size`, `disabled`, and `error`
|
|
27
|
+
* override the corresponding props on individual radios.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```tsx
|
|
31
|
+
* <Radio value="local" label="Local" />
|
|
32
|
+
*
|
|
33
|
+
* <RadioGroup value={space} onChange={setSpace} label="Coordinate space">
|
|
34
|
+
* <Radio value="local" label="Local" />
|
|
35
|
+
* <Radio value="world" label="World" />
|
|
36
|
+
* <Radio value="parent" label="Parent" />
|
|
37
|
+
* </RadioGroup>
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
const Radio = /*#__PURE__*/ React.memo(({ value, checked: checkedProp, defaultChecked = false, label, labelPosition = 'right', size: sizeProp, disabled: disabledProp, helperText, error: errorProp, errorMessage, name: nameProp, onChange, className, style, testId, ref, id: idProp, ...rest }) => {
|
|
41
|
+
const groupContext = useContext(RadioGroupContext);
|
|
42
|
+
const autoId = useId();
|
|
43
|
+
const radioId = idProp ?? autoId;
|
|
44
|
+
const helperId = `${radioId}-helper`;
|
|
45
|
+
const [internalChecked, setInternalChecked] = useState(defaultChecked);
|
|
46
|
+
const isControlled = checkedProp !== undefined;
|
|
47
|
+
const isGrouped = groupContext !== null;
|
|
48
|
+
// Group context overrides individual props when present
|
|
49
|
+
const size = isGrouped ? groupContext.size : (sizeProp ?? 'md');
|
|
50
|
+
const disabled = isGrouped
|
|
51
|
+
? groupContext.disabled
|
|
52
|
+
: (disabledProp ?? false);
|
|
53
|
+
const error = isGrouped ? groupContext.error : (errorProp ?? false);
|
|
54
|
+
const name = isGrouped ? groupContext.name : nameProp;
|
|
55
|
+
let resolvedChecked;
|
|
56
|
+
if (isGrouped) {
|
|
57
|
+
resolvedChecked = groupContext.value === value;
|
|
58
|
+
}
|
|
59
|
+
else if (isControlled) {
|
|
60
|
+
resolvedChecked = checkedProp;
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
resolvedChecked = internalChecked;
|
|
64
|
+
}
|
|
65
|
+
const handleChange = useCallback((event) => {
|
|
66
|
+
if (disabled)
|
|
67
|
+
return;
|
|
68
|
+
if (isGrouped) {
|
|
69
|
+
groupContext.onChange(value, event);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (!isControlled) {
|
|
73
|
+
setInternalChecked(true);
|
|
74
|
+
}
|
|
75
|
+
onChange?.(value, event);
|
|
76
|
+
}, [disabled, isGrouped, groupContext, value, isControlled, onChange]);
|
|
77
|
+
const showHelperText = !isGrouped && error && errorMessage
|
|
78
|
+
? errorMessage
|
|
79
|
+
: !isGrouped
|
|
80
|
+
? helperText
|
|
81
|
+
: undefined;
|
|
82
|
+
const outerInlineVars = assignInlineVars({
|
|
83
|
+
[outerSizeVar]: `${OUTER_SIZES[size]}px`,
|
|
84
|
+
[innerSizeVar]: `${INNER_SIZES[size]}px`,
|
|
85
|
+
});
|
|
86
|
+
const labelNode = (jsxs("label", { className: radioLabelRecipe({
|
|
87
|
+
labelPosition,
|
|
88
|
+
size,
|
|
89
|
+
disabled: disabled || undefined,
|
|
90
|
+
}), children: [jsx("input", { ref: ref, type: "radio", role: "radio", id: radioId, name: name, value: value, checked: resolvedChecked, disabled: disabled, "aria-checked": resolvedChecked, "aria-disabled": disabled || undefined, "aria-invalid": error || undefined, "aria-describedby": showHelperText ? helperId : undefined, onChange: handleChange, className: visuallyHiddenInputStyle, "data-testid": testId, ...rest }), jsx("span", { "aria-hidden": "true", className: radioOuterRecipe({
|
|
91
|
+
checked: resolvedChecked || undefined,
|
|
92
|
+
disabled: disabled || undefined,
|
|
93
|
+
error: error || undefined,
|
|
94
|
+
}), style: outerInlineVars, children: jsx("span", { className: radioDotRecipe({
|
|
95
|
+
checked: resolvedChecked || undefined,
|
|
96
|
+
error: error || undefined,
|
|
97
|
+
}) }) }), label && jsx("span", { className: radioLabelTextStyle, children: label })] }));
|
|
98
|
+
if (!showHelperText) {
|
|
99
|
+
if (className || style) {
|
|
100
|
+
return (jsx("div", { className: cx(radioContainerStyle, className), style: style, children: labelNode }));
|
|
101
|
+
}
|
|
102
|
+
return labelNode;
|
|
103
|
+
}
|
|
104
|
+
return (jsxs("div", { className: cx(radioContainerStyle, className), style: style, children: [labelNode, jsx(FormHelperText, { id: helperId, error: error, children: showHelperText })] }));
|
|
105
|
+
});
|
|
106
|
+
Radio.displayName = 'Radio';
|
|
107
|
+
|
|
108
|
+
export { Radio };
|
|
109
|
+
//# sourceMappingURL=Radio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Radio.js","sources":["../../../../../../src/components/primitives/Radio/Radio.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;AAmBA;AACE;AACA;AACA;;AAGF;AACE;AACA;AACA;;AAGF;;;;;;;;;;;;;;;;;;;AAmBG;AACI;AAqBH;AACA;AACA;AACA;;AAGA;AACA;;AAGA;;;AAGE;AACF;AACA;AAEA;;AAEE;;;;;;;;AAOF;AAEI;;;AAGE;;;;;;AAQF;AACF;AAIF;AAEI;;AAEE;;;;;AAML;AAED;;;;AAMK;;;;;;;AAiCI;;AAQP;AACE;;AAMF;;AAGF;AAQF;AAGF;;"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
|
+
import React, { useId, useState, useCallback, useMemo, createContext } from 'react';
|
|
4
|
+
import { assignInlineVars } from '@vanilla-extract/dynamic';
|
|
5
|
+
import { FormLabel } from '../../form/FormLabel.js';
|
|
6
|
+
import { FormHelperText } from '../../form/FormHelperText.js';
|
|
7
|
+
import { vars } from '../../../theme/contract.css.js';
|
|
8
|
+
import { cx } from '../../../utils/cx.js';
|
|
9
|
+
import { groupItemsStyle, groupSpacingVar, groupOrientationVar, groupContainerStyle } from './Radio.css.js';
|
|
10
|
+
|
|
11
|
+
const RadioGroupContext =
|
|
12
|
+
/*#__PURE__*/ createContext(null);
|
|
13
|
+
const SPACING_SCALE = [
|
|
14
|
+
'0',
|
|
15
|
+
vars.spacing.xs,
|
|
16
|
+
vars.spacing.sm,
|
|
17
|
+
vars.spacing.md,
|
|
18
|
+
vars.spacing.lg,
|
|
19
|
+
vars.spacing.xl,
|
|
20
|
+
vars.spacing.xxl,
|
|
21
|
+
vars.spacing.xxxl,
|
|
22
|
+
];
|
|
23
|
+
const resolveSpacing = (spacing) => {
|
|
24
|
+
if (typeof spacing === 'string')
|
|
25
|
+
return spacing;
|
|
26
|
+
const clamped = Math.max(0, Math.min(SPACING_SCALE.length - 1, spacing));
|
|
27
|
+
const index = Math.floor(clamped);
|
|
28
|
+
return SPACING_SCALE[index] ?? vars.spacing.sm;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Groups multiple Radio components with shared, exclusive selection state.
|
|
32
|
+
*
|
|
33
|
+
* Manages a single `string` value, propagates `name`, `size`, `disabled`,
|
|
34
|
+
* and `error` to children via React Context, and applies `aria-required`
|
|
35
|
+
* for required fields. Supports controlled and uncontrolled modes.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```tsx
|
|
39
|
+
* <RadioGroup
|
|
40
|
+
* label="Coordinate space"
|
|
41
|
+
* value={space}
|
|
42
|
+
* onChange={setSpace}
|
|
43
|
+
* >
|
|
44
|
+
* <Radio value="local" label="Local" />
|
|
45
|
+
* <Radio value="world" label="World" />
|
|
46
|
+
* <Radio value="parent" label="Parent" />
|
|
47
|
+
* </RadioGroup>
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
const RadioGroup = /*#__PURE__*/ React.memo(({ value: valueProp, defaultValue, label, helperText, disabled = false, error = false, errorMessage, required = false, orientation = 'vertical', spacing = 2, name, size = 'md', onChange, children, className, style, testId, ref, id: idProp, ...rest }) => {
|
|
51
|
+
const autoId = useId();
|
|
52
|
+
const groupId = idProp ?? autoId;
|
|
53
|
+
const labelId = `${groupId}-label`;
|
|
54
|
+
const helperId = `${groupId}-helper`;
|
|
55
|
+
const [internalValue, setInternalValue] = useState(defaultValue);
|
|
56
|
+
const isControlled = valueProp !== undefined;
|
|
57
|
+
const currentValue = isControlled ? valueProp : internalValue;
|
|
58
|
+
const handleChange = useCallback((nextValue) => {
|
|
59
|
+
if (!isControlled) {
|
|
60
|
+
setInternalValue(nextValue);
|
|
61
|
+
}
|
|
62
|
+
onChange?.(nextValue);
|
|
63
|
+
}, [isControlled, onChange]);
|
|
64
|
+
const contextValue = useMemo(() => ({
|
|
65
|
+
value: currentValue,
|
|
66
|
+
name,
|
|
67
|
+
size,
|
|
68
|
+
disabled,
|
|
69
|
+
error,
|
|
70
|
+
onChange: handleChange,
|
|
71
|
+
}), [currentValue, name, size, disabled, error, handleChange]);
|
|
72
|
+
const showHelperText = error && errorMessage ? errorMessage : helperText;
|
|
73
|
+
const flexDirection = orientation === 'horizontal' ? 'row' : 'column';
|
|
74
|
+
return (jsxs("div", { ref: ref, role: "radiogroup", "aria-labelledby": label ? labelId : undefined, "aria-describedby": showHelperText ? helperId : undefined, "aria-required": required || undefined, "aria-invalid": error || undefined, "aria-disabled": disabled || undefined, "aria-orientation": orientation, className: cx(groupContainerStyle, className), style: style, "data-testid": testId, ...rest, children: [label && (jsx(FormLabel, { id: labelId, required: required, disabled: disabled, children: label })), jsx(RadioGroupContext.Provider, { value: contextValue, children: jsx("div", { className: groupItemsStyle, style: assignInlineVars({
|
|
75
|
+
[groupOrientationVar]: flexDirection,
|
|
76
|
+
[groupSpacingVar]: resolveSpacing(spacing),
|
|
77
|
+
}), children: children }) }), showHelperText && (jsx(FormHelperText, { id: helperId, error: error, children: showHelperText }))] }));
|
|
78
|
+
});
|
|
79
|
+
RadioGroup.displayName = 'RadioGroup';
|
|
80
|
+
|
|
81
|
+
export { RadioGroup, RadioGroupContext };
|
|
82
|
+
//# sourceMappingURL=RadioGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RadioGroup.js","sources":["../../../../../../src/components/primitives/Radio/RadioGroup.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;AAuBE;AAEF;;;;;;;;;;AAWA;;AACmC;;;;AAInC;AAEA;;;;;;;;;;;;;;;;;;;AAmBG;AACI;AAuBH;AACA;AACA;AACA;;AAKA;;AAGA;;;;AAKI;AACF;AAIF;AAEI;;;;;AAKA;AACD;AAIH;AAEA;;;AA2BU;;AAaZ;AAGF;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import './../../../assets/src/components/primitives/Switch/Switch.css.ts.vanilla-
|
|
1
|
+
import './../../../assets/src/components/primitives/Switch/Switch.css.ts.vanilla-CDSt-M5W.css';
|
|
2
2
|
import { createRuntimeFn } from '@vanilla-extract/recipes/createRuntimeFn';
|
|
3
3
|
|
|
4
4
|
var labelTextStyle = 'Switch_labelTextStyle__h3xwyto';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import './../../../assets/src/components/primitives/TextArea/TextArea.css.ts.vanilla-
|
|
1
|
+
import './../../../assets/src/components/primitives/TextArea/TextArea.css.ts.vanilla-M9l1t4HR.css';
|
|
2
2
|
import { createRuntimeFn } from '@vanilla-extract/recipes/createRuntimeFn';
|
|
3
3
|
|
|
4
4
|
var textAreaContainerStyle = 'TextArea_textAreaContainerStyle__nwf0m90';
|
|
@@ -139,8 +139,13 @@ const Tooltip = ({ children, title, placement = 'top', collision = 'smart', coll
|
|
|
139
139
|
if (trackCursor) {
|
|
140
140
|
rootProps.trackCursorAxis = trackCursor;
|
|
141
141
|
}
|
|
142
|
-
// Build animation transition style
|
|
143
|
-
|
|
142
|
+
// Build animation transition style. Honors `prefers-reduced-motion: reduce`
|
|
143
|
+
// by collapsing to `transition: none` regardless of caller-passed config —
|
|
144
|
+
// user OS-level preference always wins over component config.
|
|
145
|
+
const prefersReducedMotion = typeof window !== 'undefined' &&
|
|
146
|
+
typeof window.matchMedia === 'function' &&
|
|
147
|
+
window.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
|
148
|
+
const animated = animation?.animated !== false && !prefersReducedMotion;
|
|
144
149
|
const duration = animation?.duration ?? 200;
|
|
145
150
|
const easing = animation?.easing ?? 'ease-out';
|
|
146
151
|
const animationStyle = animated
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tooltip.js","sources":["../../../../../../src/components/primitives/Tooltip/Tooltip.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;AA8HA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuFG;AACI;;;AAuBH;;;;;;AAQA;AACI;AACE;AACA;AACA;AACqB;AACxB;AACH;;AAGF;;AASA;;;AAGE;AACA;;;AAGA;;;;AAKA;;;AAGI;;;;AAGF;;;;;AAMF
|
|
1
|
+
{"version":3,"file":"Tooltip.js","sources":["../../../../../../src/components/primitives/Tooltip/Tooltip.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;AA8HA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuFG;AACI;;;AAuBH;;;;;;AAQA;AACI;AACE;AACA;AACA;AACqB;AACxB;AACH;;AAGF;;AASA;;;AAGE;AACA;;;AAGA;;;;AAKA;;;AAGI;;;;AAGF;;;;;AAMF;;;;;AAMF;AAEE;AACA;;AAEF;AACA;;AAGE;;AAEG;AACH;;AA8BgB;AACA;;;AAoBpB;AAEA;;"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import './../../../assets/src/components/primitives/VisuallyHidden/VisuallyHidden.css.ts.vanilla-DBulVh4Q.css';
|
|
2
|
+
|
|
3
|
+
var visuallyHiddenFocusableStyle = 'VisuallyHidden_visuallyHiddenFocusableStyle__1mwqwxp1';
|
|
4
|
+
var visuallyHiddenStyle = 'VisuallyHidden_visuallyHiddenStyle__1mwqwxp0';
|
|
5
|
+
|
|
6
|
+
export { visuallyHiddenFocusableStyle, visuallyHiddenStyle };
|
|
7
|
+
//# sourceMappingURL=VisuallyHidden.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VisuallyHidden.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from 'react/jsx-runtime';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { cx } from '../../../utils/cx.js';
|
|
5
|
+
import { visuallyHiddenFocusableStyle, visuallyHiddenStyle } from './VisuallyHidden.css.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Hides content visually while keeping it accessible to screen readers.
|
|
9
|
+
*
|
|
10
|
+
* Implements the canonical `sr-only` / `visually-hidden` pattern. Use it for
|
|
11
|
+
* screen-reader-only labels, additional context next to icons, and
|
|
12
|
+
* skip-to-content links (with `focusable`).
|
|
13
|
+
*
|
|
14
|
+
* Don't use this to hide content from sighted users for layout reasons —
|
|
15
|
+
* that's `display: none`. This component keeps content in the accessibility
|
|
16
|
+
* tree on purpose.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```tsx
|
|
20
|
+
* // SR-only label next to an icon-only button
|
|
21
|
+
* <button>
|
|
22
|
+
* <SearchIcon />
|
|
23
|
+
* <VisuallyHidden>Search</VisuallyHidden>
|
|
24
|
+
* </button>
|
|
25
|
+
*
|
|
26
|
+
* // Skip link revealed on focus
|
|
27
|
+
* <VisuallyHidden as="a" href="#main" focusable>
|
|
28
|
+
* Skip to content
|
|
29
|
+
* </VisuallyHidden>
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
const VisuallyHidden = /*#__PURE__*/ React.memo(({ as: Component = 'span', focusable = false, children, className, style, testId, ref, ...rest }) => {
|
|
33
|
+
return (jsx(Component, { ref: ref, className: cx(focusable ? visuallyHiddenFocusableStyle : visuallyHiddenStyle, className), style: style, "data-testid": testId, ...rest, children: children }));
|
|
34
|
+
});
|
|
35
|
+
VisuallyHidden.displayName = 'VisuallyHidden';
|
|
36
|
+
|
|
37
|
+
export { VisuallyHidden };
|
|
38
|
+
//# sourceMappingURL=VisuallyHidden.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VisuallyHidden.js","sources":["../../../../../../src/components/primitives/VisuallyHidden/VisuallyHidden.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAUA;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;AACI;AAWH;AAcF;AAGF;;"}
|
|
@@ -3,6 +3,7 @@ import { jsx, jsxs } from 'react/jsx-runtime';
|
|
|
3
3
|
import { useRef, useState, useCallback, useMemo, useId, useEffect, createContext, useContext } from 'react';
|
|
4
4
|
import { assignInlineVars } from '@vanilla-extract/dynamic';
|
|
5
5
|
import { cx } from '../../../utils/cx.js';
|
|
6
|
+
import { useMergedRef } from '../../../hooks/useMergedRef/useMergedRef.js';
|
|
6
7
|
import { ScrollArea } from '../../layout/ScrollArea/ScrollArea.js';
|
|
7
8
|
import { CloseIcon } from '../../Icons/CloseIcon.js';
|
|
8
9
|
import { ChevronUpIcon } from '../../Icons/ChevronUpIcon.js';
|
|
@@ -84,16 +85,7 @@ const FloatingPanel = ({ title: panelTitle, position: controlledPosition, defaul
|
|
|
84
85
|
const zIndex = manager?.getZIndex(id) ?? 100;
|
|
85
86
|
// --- Drag ---
|
|
86
87
|
const panelRef = useRef(null);
|
|
87
|
-
const setPanelRef =
|
|
88
|
-
panelRef.current = node;
|
|
89
|
-
if (typeof externalRef === 'function') {
|
|
90
|
-
externalRef(node);
|
|
91
|
-
}
|
|
92
|
-
else if (externalRef && typeof externalRef === 'object') {
|
|
93
|
-
externalRef.current =
|
|
94
|
-
node;
|
|
95
|
-
}
|
|
96
|
-
}, [externalRef]);
|
|
88
|
+
const setPanelRef = useMergedRef(panelRef, externalRef);
|
|
97
89
|
const dragOffsetRef = useRef({ x: 0, y: 0 });
|
|
98
90
|
const handleDragStart = useCallback((e) => {
|
|
99
91
|
e.preventDefault();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FloatingPanel.js","sources":["../../../../../../src/components/shell/FloatingPanel/FloatingPanel.tsx"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FloatingPanel.js","sources":["../../../../../../src/components/shell/FloatingPanel/FloatingPanel.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;AA0CA;AAEA;AACE;AAEF;AAEO;AAIL;;AAGA;;;;;;AAOA;AACE;;;AAIF;AACE;;AACoC;;;;AAKtC;;AAGI;AACF;AAIF;AAKA;AAKF;AAEA;AAEA;;AA6BE;AACA;AACA;;;AAKA;AACA;AAEI;;AACA;AACF;;;AAOF;AACA;AAEI;;AACA;AACF;;;AAMF;AACA;AACE;;;AAEA;;;AAIF;AACA;;AAGE;;AAEF;AAEA;AACE;AACF;;;AAKA;;AAEA;AAEA;;AAGI;AACA;;AAGE;AACA;;AAGF;;;;;;AAMA;;AAGE;AACA;AACF;AAEA;AACA;AACF;;AAKF;;;AAII;AACA;AAEA;AACA;AACA;AACA;AAEA;AACE;AACA;AACA;AACA;;AAEF;;AAGE;AACA;AACF;AAEA;AACA;AACF;;AAKA;AACA;AACA;AACA;AACA;AACD;AAED;AAWM;AACA;;AAwDR;AAEA;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeyboardContext.js","sources":["../../../../src/context/KeyboardContext.tsx"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"KeyboardContext.js","sources":["../../../../src/context/KeyboardContext.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAQA;AAiBO;AACL;;AAEE;;AAIF;AACF;;"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useRef, useEffect } from 'react';
|
|
3
|
+
|
|
4
|
+
function isOutside(target, refs) {
|
|
5
|
+
if (!(target instanceof Node))
|
|
6
|
+
return true;
|
|
7
|
+
for (const ref of refs) {
|
|
8
|
+
const node = ref.current;
|
|
9
|
+
if (node && (node === target || node.contains(target))) {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Fire a callback when a click occurs outside the referenced element(s).
|
|
17
|
+
*
|
|
18
|
+
* Accepts either a single ref or an array of refs. The handler fires only
|
|
19
|
+
* when the click lands outside ALL provided refs — useful for popover +
|
|
20
|
+
* trigger pairs where clicking either should be considered "inside".
|
|
21
|
+
*
|
|
22
|
+
* Defaults to `mousedown` so the handler runs before `click`. SSR-safe;
|
|
23
|
+
* cleans up on unmount and when `enabled` flips to `false`.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```tsx
|
|
27
|
+
* const ref = useRef<HTMLDivElement>(null);
|
|
28
|
+
* useClickOutside(ref, () => setOpen(false), { enabled: isOpen });
|
|
29
|
+
*
|
|
30
|
+
* return <div ref={ref}>...</div>;
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
function useClickOutside(ref, handler, options = {}) {
|
|
34
|
+
const { enabled = true, event = 'mousedown' } = options;
|
|
35
|
+
const handlerRef = useRef(handler);
|
|
36
|
+
const refsRef = useRef([]);
|
|
37
|
+
// Latest handler — invoked from the listener without re-subscribing.
|
|
38
|
+
handlerRef.current = handler;
|
|
39
|
+
// Latest ref(s) — refreshed every render so consumers may pass inline
|
|
40
|
+
// arrays without forcing a re-subscribe of the document listener.
|
|
41
|
+
refsRef.current = Array.isArray(ref) ? ref : [ref];
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
if (!enabled)
|
|
44
|
+
return;
|
|
45
|
+
if (typeof document === 'undefined')
|
|
46
|
+
return;
|
|
47
|
+
const listener = (e) => {
|
|
48
|
+
if (isOutside(e.target, refsRef.current)) {
|
|
49
|
+
handlerRef.current(e);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
document.addEventListener(event, listener);
|
|
53
|
+
return () => {
|
|
54
|
+
document.removeEventListener(event, listener);
|
|
55
|
+
};
|
|
56
|
+
}, [enabled, event]);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export { useClickOutside };
|
|
60
|
+
//# sourceMappingURL=useClickOutside.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useClickOutside.js","sources":["../../../../../src/hooks/useClickOutside/useClickOutside.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAoBA;AACE;AAA+B;AAE/B;AACE;AACA;AACE;;;AAGJ;AACF;AAEA;;;;;;;;;;;;;;;;;AAiBG;AACG;;AAOJ;AACA;;AAGA;;;AAGA;;AAGE;;;;AAGA;;AAEI;;AAEJ;AAEA;AACA;AACE;AACF;AACF;AACF;;"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useState, useRef, useEffect, useCallback } from 'react';
|
|
3
|
+
|
|
4
|
+
const DEFAULT_TIMEOUT = 2000;
|
|
5
|
+
async function writeViaClipboardApi(text) {
|
|
6
|
+
if (typeof navigator === 'undefined' ||
|
|
7
|
+
typeof navigator.clipboard === 'undefined' ||
|
|
8
|
+
typeof navigator.clipboard.writeText !== 'function') {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
await navigator.clipboard.writeText(text);
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
function writeViaExecCommand(text) {
|
|
15
|
+
if (typeof document === 'undefined')
|
|
16
|
+
return false;
|
|
17
|
+
const textarea = document.createElement('textarea');
|
|
18
|
+
textarea.value = text;
|
|
19
|
+
textarea.setAttribute('readonly', '');
|
|
20
|
+
textarea.style.position = 'absolute';
|
|
21
|
+
textarea.style.left = '-9999px';
|
|
22
|
+
textarea.style.top = '0';
|
|
23
|
+
document.body.appendChild(textarea);
|
|
24
|
+
textarea.select();
|
|
25
|
+
let succeeded = false;
|
|
26
|
+
try {
|
|
27
|
+
succeeded = document.execCommand('copy');
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
succeeded = false;
|
|
31
|
+
}
|
|
32
|
+
document.body.removeChild(textarea);
|
|
33
|
+
return succeeded;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Copy text to the clipboard with a built-in timeout-driven feedback state.
|
|
37
|
+
*
|
|
38
|
+
* Uses `navigator.clipboard.writeText` when available; falls back to
|
|
39
|
+
* `document.execCommand('copy')` only when the modern API is missing.
|
|
40
|
+
* In SSR or restricted contexts where neither path is available, `copy`
|
|
41
|
+
* resolves to `false` and `status` flips to `'error'` without throwing.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```tsx
|
|
45
|
+
* const { copy, copied } = useClipboard({ timeout: 1500 });
|
|
46
|
+
*
|
|
47
|
+
* return (
|
|
48
|
+
* <Button onClick={() => copy('Hello!')}>
|
|
49
|
+
* {copied ? 'Copied!' : 'Copy'}
|
|
50
|
+
* </Button>
|
|
51
|
+
* );
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
function useClipboard(options = {}) {
|
|
55
|
+
const { timeout = DEFAULT_TIMEOUT } = options;
|
|
56
|
+
const [status, setStatus] = useState('idle');
|
|
57
|
+
const [error, setError] = useState(null);
|
|
58
|
+
const timerRef = useRef(null);
|
|
59
|
+
const timeoutRef = useRef(timeout);
|
|
60
|
+
// Bumped on every `copy()` call. The async path captures its own value
|
|
61
|
+
// and short-circuits on resolution if a newer call has started — that
|
|
62
|
+
// prevents an older, slower `writeText` from overwriting the state of a
|
|
63
|
+
// newer copy or from arming a stale timer.
|
|
64
|
+
const requestSeqRef = useRef(0);
|
|
65
|
+
useEffect(() => {
|
|
66
|
+
timeoutRef.current = timeout;
|
|
67
|
+
}, [timeout]);
|
|
68
|
+
const clearTimer = useCallback(() => {
|
|
69
|
+
if (timerRef.current !== null) {
|
|
70
|
+
clearTimeout(timerRef.current);
|
|
71
|
+
timerRef.current = null;
|
|
72
|
+
}
|
|
73
|
+
}, []);
|
|
74
|
+
const reset = useCallback(() => {
|
|
75
|
+
clearTimer();
|
|
76
|
+
// Invalidate any in-flight copy so a late resolution does not flip
|
|
77
|
+
// the status back from idle/error.
|
|
78
|
+
requestSeqRef.current += 1;
|
|
79
|
+
setStatus('idle');
|
|
80
|
+
setError(null);
|
|
81
|
+
}, [clearTimer]);
|
|
82
|
+
const copy = useCallback(async (text) => {
|
|
83
|
+
clearTimer();
|
|
84
|
+
requestSeqRef.current += 1;
|
|
85
|
+
const requestId = requestSeqRef.current;
|
|
86
|
+
let succeeded = false;
|
|
87
|
+
let copyError = null;
|
|
88
|
+
try {
|
|
89
|
+
succeeded = await writeViaClipboardApi(text);
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
copyError = err instanceof Error ? err : new Error(String(err));
|
|
93
|
+
}
|
|
94
|
+
if (!succeeded && copyError === null) {
|
|
95
|
+
try {
|
|
96
|
+
succeeded = writeViaExecCommand(text);
|
|
97
|
+
if (!succeeded) {
|
|
98
|
+
copyError = new Error('Copy command was rejected by the browser.');
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
copyError = err instanceof Error ? err : new Error(String(err));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// A newer call (or `reset`) has started — drop this result on the
|
|
106
|
+
// floor so it does not race the active state.
|
|
107
|
+
if (requestId !== requestSeqRef.current) {
|
|
108
|
+
return succeeded;
|
|
109
|
+
}
|
|
110
|
+
if (succeeded) {
|
|
111
|
+
setError(null);
|
|
112
|
+
setStatus('copied');
|
|
113
|
+
timerRef.current = setTimeout(() => {
|
|
114
|
+
timerRef.current = null;
|
|
115
|
+
// Guard the timer too: another copy may have started during the
|
|
116
|
+
// window and bumped the sequence. We still clear the timer ref,
|
|
117
|
+
// but only flip back to idle if the timer belonged to the
|
|
118
|
+
// current request.
|
|
119
|
+
if (requestId === requestSeqRef.current) {
|
|
120
|
+
setStatus('idle');
|
|
121
|
+
}
|
|
122
|
+
}, timeoutRef.current);
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
setError(copyError ?? new Error('Clipboard API is not available.'));
|
|
126
|
+
setStatus('error');
|
|
127
|
+
return false;
|
|
128
|
+
}, [clearTimer]);
|
|
129
|
+
useEffect(() => {
|
|
130
|
+
return () => {
|
|
131
|
+
if (timerRef.current !== null) {
|
|
132
|
+
clearTimeout(timerRef.current);
|
|
133
|
+
timerRef.current = null;
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
}, []);
|
|
137
|
+
return {
|
|
138
|
+
status,
|
|
139
|
+
copied: status === 'copied',
|
|
140
|
+
error,
|
|
141
|
+
copy,
|
|
142
|
+
reset,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
export { useClipboard };
|
|
147
|
+
//# sourceMappingURL=useClipboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useClipboard.js","sources":["../../../../../src/hooks/useClipboard/useClipboard.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AASA;AAEA;;AAGI;;AAGA;;;AAGF;AACF;AAEA;;AACuC;;AAGrC;AACA;AACA;AACA;AACA;AACA;;;AAIA;AACE;;AACA;;;AAGF;AACA;AACF;AAEA;;;;;;;;;;;;;;;;;;AAkBG;AACG;AAGJ;;;AAKA;AACA;;;;;AAKA;;AAGE;AACF;AAEA;AACE;AACE;AACA;;;AAIJ;AACE;;;AAGA;;;AAGF;;AAII;AAEA;AACA;;;AAKA;AACE;;;AAEA;;AAGF;AACE;AACE;;AAEE;;;;AAGF;;;;;AAMJ;AACE;;;;;AAMA;AACE;;;;;AAKA;;;AAGF;AACA;;;;AAKF;AACF;;AAKA;AACE;AACE;AACA;;AAEJ;;;;;;;;;AAUJ;;"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useState, useRef, useEffect, useCallback } from 'react';
|
|
3
|
+
import { devWarn } from '../../utils/devWarn.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Manage a value that may be either controlled (via prop) or uncontrolled
|
|
7
|
+
* (managed internally with a default).
|
|
8
|
+
*
|
|
9
|
+
* Returns a `[value, setValue]` tuple just like `useState`. When
|
|
10
|
+
* `options.value` is defined the state is read from there and `setValue`
|
|
11
|
+
* becomes a pure side-effect callback that calls `onChange` only — internal
|
|
12
|
+
* state is never mutated. When `options.value` is undefined the hook owns the
|
|
13
|
+
* state and `setValue` updates it as well as calls `onChange`.
|
|
14
|
+
*
|
|
15
|
+
* Switching between controlled and uncontrolled within a component's lifetime
|
|
16
|
+
* is a known pitfall (matches React's own warning for `<input value/defaultValue>`).
|
|
17
|
+
* The hook emits a development-only warning when this happens.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts
|
|
21
|
+
* const [value, setValue] = useControlledState({
|
|
22
|
+
* value: props.value,
|
|
23
|
+
* defaultValue: props.defaultValue,
|
|
24
|
+
* onChange: props.onChange,
|
|
25
|
+
* fallback: '',
|
|
26
|
+
* });
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
function useControlledState(options) {
|
|
30
|
+
const { value, defaultValue, onChange, fallback } = options;
|
|
31
|
+
const isControlled = value !== undefined;
|
|
32
|
+
// Only `undefined` means "no defaultValue given" — `null` is a legal value
|
|
33
|
+
// for generic T (e.g. `string | null`) and must not be replaced by fallback.
|
|
34
|
+
const [internalValue, setInternalValue] = useState(
|
|
35
|
+
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
|
|
36
|
+
defaultValue !== undefined ? defaultValue : fallback);
|
|
37
|
+
// Stable refs to avoid stale closures and unnecessary identity changes.
|
|
38
|
+
const onChangeRef = useRef(onChange);
|
|
39
|
+
const internalValueRef = useRef(internalValue);
|
|
40
|
+
const isControlledRef = useRef(isControlled);
|
|
41
|
+
useEffect(() => {
|
|
42
|
+
onChangeRef.current = onChange;
|
|
43
|
+
}, [onChange]);
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
internalValueRef.current = internalValue;
|
|
46
|
+
}, [internalValue]);
|
|
47
|
+
// Dev-only warning when controlled <-> uncontrolled flips after mount.
|
|
48
|
+
// Mirrors React's behavior for <input value/defaultValue>.
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
const wasControlled = isControlledRef.current;
|
|
51
|
+
if (wasControlled !== isControlled) {
|
|
52
|
+
devWarn(`[useControlledState] Component is changing from ${wasControlled ? 'controlled' : 'uncontrolled'} to ${isControlled ? 'controlled' : 'uncontrolled'}. ` +
|
|
53
|
+
'Components should not switch between controlled and uncontrolled ' +
|
|
54
|
+
'(or vice versa) during their lifetime. Decide between using a ' +
|
|
55
|
+
'controlled or uncontrolled mode for the lifetime of the component.');
|
|
56
|
+
isControlledRef.current = isControlled;
|
|
57
|
+
}
|
|
58
|
+
}, [isControlled]);
|
|
59
|
+
const setValue = useCallback((next) => {
|
|
60
|
+
const prev = isControlledRef.current
|
|
61
|
+
? value
|
|
62
|
+
: internalValueRef.current;
|
|
63
|
+
const resolved = typeof next === 'function' ? next(prev) : next;
|
|
64
|
+
if (!isControlledRef.current) {
|
|
65
|
+
setInternalValue(resolved);
|
|
66
|
+
internalValueRef.current = resolved;
|
|
67
|
+
}
|
|
68
|
+
onChangeRef.current?.(resolved);
|
|
69
|
+
}, [value]);
|
|
70
|
+
const currentValue = isControlled ? value : internalValue;
|
|
71
|
+
return [currentValue, setValue];
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export { useControlledState };
|
|
75
|
+
//# sourceMappingURL=useControlledState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useControlledState.js","sources":["../../../../../src/hooks/useControlledState/useControlledState.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAgBA;;;;;;;;;;;;;;;;;;;;;;;AAuBG;AACG;;AAKJ;;;AAIA;;;;AAMA;AACA;AACA;;AAGE;AACF;;AAGE;AACF;;;;AAKE;AACA;;;;AAOM;AAEJ;;AAEJ;AAEA;AAEI;AACE;AACA;AACF;AAGA;;AAEE;;AAEF;AACF;;AAKF;AACF;;"}
|