entangle-ui 0.9.0 → 0.11.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 +766 -0
- package/README.md +8 -6
- package/dist/esm/assets/src/components/controls/FileTree/FileTree.css.ts.vanilla-YmktPvnr.css +48 -0
- package/dist/esm/assets/src/components/controls/Select/{Select.css.ts.vanilla-oZnFUorL.css → Select.css.ts.vanilla-Cpu2BvWL.css} +3 -0
- package/dist/esm/assets/src/components/controls/TreeView/{TreeNode.css.ts.vanilla-B_f8pUb8.css → TreeNode.css.ts.vanilla-DXPJRWZZ.css} +31 -24
- package/dist/esm/assets/src/components/editor/AssetBrowser/AssetBrowser.css.ts.vanilla-B2S4cEiY.css +262 -0
- package/dist/esm/assets/src/components/editor/Minimap/Minimap.css.ts.vanilla--rNdWQwy.css +133 -0
- package/dist/esm/assets/src/components/editor/NodeGraph/NodeGraph.css.ts.vanilla-ClF4YZvl.css +401 -0
- package/dist/esm/assets/src/components/editor/PropertyInspector/{PropertyPanel.css.ts.vanilla-RYv_XgOu.css → PropertyPanel.css.ts.vanilla-Dpr_k5I3.css} +4 -1
- package/dist/esm/assets/src/components/editor/PropertyInspector/{PropertyRow.css.ts.vanilla-C3YZnnHb.css → PropertyRow.css.ts.vanilla-pq1Uhd2a.css} +15 -8
- package/dist/esm/assets/src/components/editor/PropertyInspector/{PropertySection.css.ts.vanilla-DK12opZc.css → PropertySection.css.ts.vanilla-6MWWAqyd.css} +50 -32
- package/dist/esm/assets/src/components/editor/Timeline/Timeline.css.ts.vanilla-DDX6Zalo.css +203 -0
- package/dist/esm/assets/src/components/feedback/LogView/LogView.css.ts.vanilla-nB5ENOpw.css +312 -0
- package/dist/esm/assets/src/components/navigation/Menu/Menu.css.ts.vanilla-B5iVe5S2.css +88 -0
- package/dist/esm/assets/src/components/navigation/PathBar/PathBar.css.ts.vanilla-BIEzQQOf.css +10 -0
- package/dist/esm/assets/src/components/primitives/viewport/Viewport.css.ts.vanilla-CkFBJ7Vo.css +65 -0
- package/dist/esm/assets/src/components/shell/FloatingPanel/{FloatingPanel.css.ts.vanilla-1rIAXEFp.css → FloatingPanel.css.ts.vanilla-CRaeYJ2b.css} +20 -13
- package/dist/esm/assets/src/theme/{darkTheme.css.ts.vanilla-ab1WD4dr.css → darkTheme.css.ts.vanilla-BHZ3ecRn.css} +3 -3
- package/dist/esm/assets/src/theme/{lightTheme.css.ts.vanilla-OaRI_wIc.css → lightTheme.css.ts.vanilla-Ct6f9Iym.css} +3 -3
- package/dist/esm/components/Icons/AddIcon.js.map +1 -1
- package/dist/esm/components/Icons/AiChatIcon.js.map +1 -1
- package/dist/esm/components/Icons/AiSparklesIcon.js.map +1 -1
- package/dist/esm/components/Icons/ArchiveIcon.js.map +1 -1
- package/dist/esm/components/Icons/ArrowDownIcon.js.map +1 -1
- package/dist/esm/components/Icons/ArrowLeftIcon.js.map +1 -1
- package/dist/esm/components/Icons/ArrowRightIcon.js.map +1 -1
- package/dist/esm/components/Icons/ArrowUpIcon.js.map +1 -1
- package/dist/esm/components/Icons/BookmarkIcon.js.map +1 -1
- package/dist/esm/components/Icons/BugIcon.js.map +1 -1
- package/dist/esm/components/Icons/BuildingIcon.js.map +1 -1
- package/dist/esm/components/Icons/CalendarIcon.js.map +1 -1
- package/dist/esm/components/Icons/CameraIcon.js +31 -0
- package/dist/esm/components/Icons/CameraIcon.js.map +1 -0
- package/dist/esm/components/Icons/CheckIcon.js.map +1 -1
- package/dist/esm/components/Icons/ChevronDownIcon.js.map +1 -1
- package/dist/esm/components/Icons/ChevronLeftIcon.js.map +1 -1
- package/dist/esm/components/Icons/ChevronRightIcon.js.map +1 -1
- package/dist/esm/components/Icons/ChevronUpIcon.js.map +1 -1
- package/dist/esm/components/Icons/CircleIcon.js.map +1 -1
- package/dist/esm/components/Icons/ClockIcon.js.map +1 -1
- package/dist/esm/components/Icons/CloseIcon.js.map +1 -1
- package/dist/esm/components/Icons/CloudUploadIcon.js.map +1 -1
- package/dist/esm/components/Icons/CodeIcon.js.map +1 -1
- package/dist/esm/components/Icons/CopyIcon.js.map +1 -1
- package/dist/esm/components/Icons/CubeIcon.js +31 -0
- package/dist/esm/components/Icons/CubeIcon.js.map +1 -0
- package/dist/esm/components/Icons/CutIcon.js.map +1 -1
- package/dist/esm/components/Icons/DotsHorizontalIcon.js.map +1 -1
- package/dist/esm/components/Icons/DotsVerticalIcon.js.map +1 -1
- package/dist/esm/components/Icons/DownloadIcon.js.map +1 -1
- package/dist/esm/components/Icons/EditIcon.js.map +1 -1
- package/dist/esm/components/Icons/ErrorIcon.js.map +1 -1
- package/dist/esm/components/Icons/ExternalLinkIcon.js.map +1 -1
- package/dist/esm/components/Icons/EyeDropperIcon.js.map +1 -1
- package/dist/esm/components/Icons/EyeIcon.js.map +1 -1
- package/dist/esm/components/Icons/FileTextIcon.js.map +1 -1
- package/dist/esm/components/Icons/FilterIcon.js.map +1 -1
- package/dist/esm/components/Icons/FirstIcon.js.map +1 -1
- package/dist/esm/components/Icons/FolderCogIcon.js.map +1 -1
- package/dist/esm/components/Icons/FolderIcon.js.map +1 -1
- package/dist/esm/components/Icons/FolderOpenIcon.js +2 -2
- package/dist/esm/components/Icons/FolderOpenIcon.js.map +1 -1
- package/dist/esm/components/Icons/FullscreenIcon.js.map +1 -1
- package/dist/esm/components/Icons/GitBranchIcon.js.map +1 -1
- package/dist/esm/components/Icons/GridIcon.js.map +1 -1
- package/dist/esm/components/Icons/HeartIcon.js.map +1 -1
- package/dist/esm/components/Icons/HelpIcon.js.map +1 -1
- package/dist/esm/components/Icons/HomeIcon.js.map +1 -1
- package/dist/esm/components/Icons/ImageIcon.js +31 -0
- package/dist/esm/components/Icons/ImageIcon.js.map +1 -0
- package/dist/esm/components/Icons/InfoIcon.js.map +1 -1
- package/dist/esm/components/Icons/LastIcon.js.map +1 -1
- package/dist/esm/components/Icons/LinkIcon.js.map +1 -1
- package/dist/esm/components/Icons/ListIcon.js.map +1 -1
- package/dist/esm/components/Icons/LockIcon.js.map +1 -1
- package/dist/esm/components/Icons/MaximizeIcon.js.map +1 -1
- package/dist/esm/components/Icons/MenuIcon.js.map +1 -1
- package/dist/esm/components/Icons/MinimizeIcon.js.map +1 -1
- package/dist/esm/components/Icons/MinusIcon.js.map +1 -1
- package/dist/esm/components/Icons/OrbitIcon.js +31 -0
- package/dist/esm/components/Icons/OrbitIcon.js.map +1 -0
- package/dist/esm/components/Icons/PasteIcon.js.map +1 -1
- package/dist/esm/components/Icons/PauseIcon.js +2 -2
- package/dist/esm/components/Icons/PauseIcon.js.map +1 -1
- package/dist/esm/components/Icons/PinIcon.js.map +1 -1
- package/dist/esm/components/Icons/PlayIcon.js.map +1 -1
- package/dist/esm/components/Icons/RedoIcon.js.map +1 -1
- package/dist/esm/components/Icons/RefreshIcon.js.map +1 -1
- package/dist/esm/components/Icons/RobotIcon.js.map +1 -1
- package/dist/esm/components/Icons/RotateIcon.js +32 -0
- package/dist/esm/components/Icons/RotateIcon.js.map +1 -0
- package/dist/esm/components/Icons/SaveIcon.js.map +1 -1
- package/dist/esm/components/Icons/SearchIcon.js.map +1 -1
- package/dist/esm/components/Icons/SendIcon.js.map +1 -1
- package/dist/esm/components/Icons/SettingsIcon.js.map +1 -1
- package/dist/esm/components/Icons/SortIcon.js.map +1 -1
- package/dist/esm/components/Icons/SpinIcon.js +32 -0
- package/dist/esm/components/Icons/SpinIcon.js.map +1 -0
- package/dist/esm/components/Icons/StarIcon.js.map +1 -1
- package/dist/esm/components/Icons/StopIcon.js.map +1 -1
- package/dist/esm/components/Icons/SuccessIcon.js.map +1 -1
- package/dist/esm/components/Icons/TagIcon.js.map +1 -1
- package/dist/esm/components/Icons/TangentAlignedIcon.js.map +1 -1
- package/dist/esm/components/Icons/TangentAutoIcon.js.map +1 -1
- package/dist/esm/components/Icons/TangentFreeIcon.js.map +1 -1
- package/dist/esm/components/Icons/TangentLinearIcon.js.map +1 -1
- package/dist/esm/components/Icons/TangentMirroredIcon.js.map +1 -1
- package/dist/esm/components/Icons/TangentStepIcon.js.map +1 -1
- package/dist/esm/components/Icons/TerminalIcon.js.map +1 -1
- package/dist/esm/components/Icons/TrashIcon.js.map +1 -1
- package/dist/esm/components/Icons/UndoIcon.js.map +1 -1
- package/dist/esm/components/Icons/UnlinkIcon.js.map +1 -1
- package/dist/esm/components/Icons/UnlockIcon.js.map +1 -1
- package/dist/esm/components/Icons/UploadIcon.js.map +1 -1
- package/dist/esm/components/Icons/UserIcon.js.map +1 -1
- package/dist/esm/components/Icons/UsersIcon.js.map +1 -1
- package/dist/esm/components/Icons/WarningIcon.js.map +1 -1
- package/dist/esm/components/Icons/ZoomFitIcon.js +32 -0
- package/dist/esm/components/Icons/ZoomFitIcon.js.map +1 -0
- package/dist/esm/components/Icons/ZoomInIcon.js.map +1 -1
- package/dist/esm/components/Icons/ZoomOutIcon.js.map +1 -1
- package/dist/esm/components/controls/CartesianPicker/CartesianPicker.js +3 -3
- package/dist/esm/components/controls/CartesianPicker/CartesianPicker.js.map +1 -1
- package/dist/esm/components/controls/CartesianPicker/useCartesianInteraction.js +7 -5
- package/dist/esm/components/controls/CartesianPicker/useCartesianInteraction.js.map +1 -1
- package/dist/esm/components/controls/CartesianPicker/useCartesianRenderer.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/AlphaSlider.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/ColorArea.js +2 -2
- package/dist/esm/components/controls/ColorPicker/ColorArea.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/ColorInputs.js +16 -2
- package/dist/esm/components/controls/ColorPicker/ColorInputs.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/ColorPalette.js +3 -1
- package/dist/esm/components/controls/ColorPicker/ColorPalette.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/ColorPicker.js +6 -6
- package/dist/esm/components/controls/ColorPicker/ColorPicker.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/ColorPresets.js +3 -1
- package/dist/esm/components/controls/ColorPicker/ColorPresets.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/ColorSwatch.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/EyeDropper.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/HueSlider.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/colorUtils.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/palettes/material.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/palettes/professional.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/palettes/tailwind.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/useColor.js.map +1 -1
- package/dist/esm/components/controls/Combobox/Combobox.js +46 -23
- package/dist/esm/components/controls/Combobox/Combobox.js.map +1 -1
- package/dist/esm/components/controls/CurveEditor/CurveCanvas.js +11 -4
- package/dist/esm/components/controls/CurveEditor/CurveCanvas.js.map +1 -1
- package/dist/esm/components/controls/CurveEditor/CurveEditor.js +4 -4
- package/dist/esm/components/controls/CurveEditor/CurveEditor.js.map +1 -1
- package/dist/esm/components/controls/CurveEditor/CurveToolbar.js +7 -5
- package/dist/esm/components/controls/CurveEditor/CurveToolbar.js.map +1 -1
- package/dist/esm/components/controls/CurveEditor/curvePresets.js.map +1 -1
- package/dist/esm/components/controls/CurveEditor/curveUtils.js +13 -15
- package/dist/esm/components/controls/CurveEditor/curveUtils.js.map +1 -1
- package/dist/esm/components/controls/CurveEditor/useCurveInteraction.js +72 -50
- package/dist/esm/components/controls/CurveEditor/useCurveInteraction.js.map +1 -1
- package/dist/esm/components/controls/CurveEditor/useCurveRenderer.js +11 -3
- package/dist/esm/components/controls/CurveEditor/useCurveRenderer.js.map +1 -1
- package/dist/esm/components/controls/FileTree/FileTree.css.js +9 -0
- package/dist/esm/components/controls/FileTree/FileTree.css.js.map +1 -0
- package/dist/esm/components/controls/FileTree/FileTree.js +252 -0
- package/dist/esm/components/controls/FileTree/FileTree.js.map +1 -0
- package/dist/esm/components/controls/FileTree/fileTreeIcons.js +129 -0
- package/dist/esm/components/controls/FileTree/fileTreeIcons.js.map +1 -0
- package/dist/esm/components/controls/FileTree/fileTreeLabels.js +8 -0
- package/dist/esm/components/controls/FileTree/fileTreeLabels.js.map +1 -0
- package/dist/esm/components/controls/FileTree/useFileTreeDrop.js +115 -0
- package/dist/esm/components/controls/FileTree/useFileTreeDrop.js.map +1 -0
- package/dist/esm/components/controls/FileUploader/FileUploader.js +3 -6
- package/dist/esm/components/controls/FileUploader/FileUploader.js.map +1 -1
- package/dist/esm/components/controls/MultiSelect/MultiSelect.js +46 -15
- package/dist/esm/components/controls/MultiSelect/MultiSelect.js.map +1 -1
- package/dist/esm/components/controls/NumberInput/NumberInput.js +11 -4
- package/dist/esm/components/controls/NumberInput/NumberInput.js.map +1 -1
- package/dist/esm/components/controls/NumberInput/useNumberInput.js +6 -2
- 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/Select/Select.js +44 -16
- package/dist/esm/components/controls/Select/Select.js.map +1 -1
- package/dist/esm/components/controls/Slider/Slider.js +6 -8
- package/dist/esm/components/controls/Slider/Slider.js.map +1 -1
- package/dist/esm/components/controls/TagInput/TagInput.js +4 -2
- package/dist/esm/components/controls/TagInput/TagInput.js.map +1 -1
- package/dist/esm/components/controls/TreeView/TreeNode.css.js +9 -8
- package/dist/esm/components/controls/TreeView/TreeNode.css.js.map +1 -1
- package/dist/esm/components/controls/TreeView/TreeNode.js +42 -7
- package/dist/esm/components/controls/TreeView/TreeNode.js.map +1 -1
- package/dist/esm/components/controls/TreeView/TreeView.js +18 -6
- package/dist/esm/components/controls/TreeView/TreeView.js.map +1 -1
- package/dist/esm/components/controls/TreeView/useTreeState.js +2 -6
- package/dist/esm/components/controls/TreeView/useTreeState.js.map +1 -1
- package/dist/esm/components/controls/VectorInput/VectorInput.js +13 -4
- package/dist/esm/components/controls/VectorInput/VectorInput.js.map +1 -1
- package/dist/esm/components/data/DataTable/DataTable.js +25 -8
- package/dist/esm/components/data/DataTable/DataTable.js.map +1 -1
- package/dist/esm/components/editor/AssetBrowser/AssetBrowser.css.js +46 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowser.css.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowser.js +254 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowser.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserAnnouncementLive.js +17 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserAnnouncementLive.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserBreadcrumbs.js +25 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserBreadcrumbs.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserContent.js +140 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserContent.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserContext.js +81 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserContext.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserContextMenu.js +123 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserContextMenu.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserDefaultMenus.js +136 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserDefaultMenus.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserGrid.js +137 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserGrid.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserGridItem.js +226 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserGridItem.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserList.js +189 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserList.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserRenameField.js +63 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserRenameField.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserSidebar.js +19 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserSidebar.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserStatusBar.js +24 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserStatusBar.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserStore.js +176 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserStore.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserSurface.js +120 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserSurface.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserToolbar.js +134 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserToolbar.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/assetBrowserFilter.js +90 -0
- package/dist/esm/components/editor/AssetBrowser/assetBrowserFilter.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/assetBrowserFormat.js +32 -0
- package/dist/esm/components/editor/AssetBrowser/assetBrowserFormat.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/assetBrowserGeometry.js +70 -0
- package/dist/esm/components/editor/AssetBrowser/assetBrowserGeometry.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/assetBrowserKeyboard.js +62 -0
- package/dist/esm/components/editor/AssetBrowser/assetBrowserKeyboard.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/assetBrowserLabels.js +52 -0
- package/dist/esm/components/editor/AssetBrowser/assetBrowserLabels.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/slots.js +18 -0
- package/dist/esm/components/editor/AssetBrowser/slots.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetBrowserAnnouncement.js +19 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetBrowserAnnouncement.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetBrowserHandle.js +70 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetBrowserHandle.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetBrowserViewState.js +108 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetBrowserViewState.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetDnd.js +192 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetDnd.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetGridKeyboardNav.js +91 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetGridKeyboardNav.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetGridVirtualizer.js +91 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetGridVirtualizer.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetMarqueeGesture.js +128 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetMarqueeGesture.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetMutationKeyboard.js +72 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetMutationKeyboard.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetMutations.js +141 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetMutations.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetNavigation.js +113 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetNavigation.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetSelectionController.js +174 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetSelectionController.js.map +1 -0
- package/dist/esm/components/editor/ChatPanel/ChatActionBar.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatAttachment.js +8 -2
- package/dist/esm/components/editor/ChatPanel/ChatAttachment.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatBubble.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatCodeBlock.js +20 -4
- package/dist/esm/components/editor/ChatPanel/ChatCodeBlock.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatContextChip.js +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatContextChip.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatEmptyState.js +3 -1
- package/dist/esm/components/editor/ChatPanel/ChatEmptyState.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatIcons.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatInput.js +10 -3
- package/dist/esm/components/editor/ChatPanel/ChatInput.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatInputToolbar.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatMarkdownRenderer.js +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatMarkdownRenderer.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatMessage.js +10 -3
- package/dist/esm/components/editor/ChatPanel/ChatMessage.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatMessageList.js +5 -3
- package/dist/esm/components/editor/ChatPanel/ChatMessageList.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatPanel.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatToolCall.js +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatToolCall.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatTypingIndicator.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/useChatInput.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/useChatMessages.js +7 -4
- package/dist/esm/components/editor/ChatPanel/useChatMessages.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/useChatScroll.js +6 -1
- package/dist/esm/components/editor/ChatPanel/useChatScroll.js.map +1 -1
- package/dist/esm/components/editor/Minimap/Minimap.css.js +18 -0
- package/dist/esm/components/editor/Minimap/Minimap.css.js.map +1 -0
- package/dist/esm/components/editor/Minimap/Minimap.js +257 -0
- package/dist/esm/components/editor/Minimap/Minimap.js.map +1 -0
- package/dist/esm/components/editor/Minimap/Minimap.types.js +11 -0
- package/dist/esm/components/editor/Minimap/Minimap.types.js.map +1 -0
- package/dist/esm/components/editor/Minimap/MinimapContext.js +48 -0
- package/dist/esm/components/editor/Minimap/MinimapContext.js.map +1 -0
- package/dist/esm/components/editor/Minimap/MinimapCorner.js +16 -0
- package/dist/esm/components/editor/Minimap/MinimapCorner.js.map +1 -0
- package/dist/esm/components/editor/Minimap/MinimapFooter.js +16 -0
- package/dist/esm/components/editor/Minimap/MinimapFooter.js.map +1 -0
- package/dist/esm/components/editor/Minimap/MinimapStore.js +166 -0
- package/dist/esm/components/editor/Minimap/MinimapStore.js.map +1 -0
- package/dist/esm/components/editor/Minimap/MinimapTitle.js +16 -0
- package/dist/esm/components/editor/Minimap/MinimapTitle.js.map +1 -0
- package/dist/esm/components/editor/Minimap/ViewportMinimap.js +69 -0
- package/dist/esm/components/editor/Minimap/ViewportMinimap.js.map +1 -0
- package/dist/esm/components/editor/Minimap/computeBoundsFromItems.js +65 -0
- package/dist/esm/components/editor/Minimap/computeBoundsFromItems.js.map +1 -0
- package/dist/esm/components/editor/Minimap/index.js +15 -0
- package/dist/esm/components/editor/Minimap/index.js.map +1 -0
- package/dist/esm/components/editor/Minimap/minimapCoords.js +105 -0
- package/dist/esm/components/editor/Minimap/minimapCoords.js.map +1 -0
- package/dist/esm/components/editor/Minimap/minimapDrawing.js +93 -0
- package/dist/esm/components/editor/Minimap/minimapDrawing.js.map +1 -0
- package/dist/esm/components/editor/Minimap/minimapHitTest.js +59 -0
- package/dist/esm/components/editor/Minimap/minimapHitTest.js.map +1 -0
- package/dist/esm/components/editor/Minimap/useMinimapGestures.js +299 -0
- package/dist/esm/components/editor/Minimap/useMinimapGestures.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraph.css.js +36 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraph.css.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraph.js +627 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraph.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraph.types.js +10 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraph.types.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphContext.js +54 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphContext.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphEdgeLabels.js +137 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphEdgeLabels.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphGroup.js +211 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphGroup.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphMinimap.js +122 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphMinimap.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphNode.js +170 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphNode.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphNodeContext.js +21 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphNodeContext.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphNodeParts.js +56 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphNodeParts.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphNodeSection.js +59 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphNodeSection.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphNodeSectionContext.js +17 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphNodeSectionContext.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphPin.js +35 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphPin.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphPort.js +191 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphPort.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphPortVisual.js +46 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphPortVisual.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphSlots.js +50 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphSlots.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphSpawnPalette.js +70 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphSpawnPalette.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphStore.js +543 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphStore.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphToolbar.js +100 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphToolbar.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/createTypeMatchValidator.js +37 -0
- package/dist/esm/components/editor/NodeGraph/createTypeMatchValidator.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/nodeGraphActions.js +53 -0
- package/dist/esm/components/editor/NodeGraph/nodeGraphActions.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/nodeGraphDrawing.js +461 -0
- package/dist/esm/components/editor/NodeGraph/nodeGraphDrawing.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/nodeGraphIds.js +31 -0
- package/dist/esm/components/editor/NodeGraph/nodeGraphIds.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/nodeGraphMath.js +350 -0
- package/dist/esm/components/editor/NodeGraph/nodeGraphMath.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/sortSlots.js +69 -0
- package/dist/esm/components/editor/NodeGraph/sortSlots.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/useDragGesture.js +63 -0
- package/dist/esm/components/editor/NodeGraph/useDragGesture.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraph.js +207 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraph.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraphConnection.js +334 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraphConnection.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraphEdgeInteraction.js +137 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraphEdgeInteraction.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraphGroupDrag.js +392 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraphGroupDrag.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraphKeyboard.js +164 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraphKeyboard.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraphNodeDrag.js +234 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraphNodeDrag.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/useStoreSlice.js +49 -0
- package/dist/esm/components/editor/NodeGraph/useStoreSlice.js.map +1 -0
- package/dist/esm/components/editor/PropertyInspector/PropertyGroup.js +1 -1
- package/dist/esm/components/editor/PropertyInspector/PropertyGroup.js.map +1 -1
- package/dist/esm/components/editor/PropertyInspector/PropertyPanel.css.js +4 -3
- package/dist/esm/components/editor/PropertyInspector/PropertyPanel.css.js.map +1 -1
- package/dist/esm/components/editor/PropertyInspector/PropertyPanel.js +12 -7
- package/dist/esm/components/editor/PropertyInspector/PropertyPanel.js.map +1 -1
- package/dist/esm/components/editor/PropertyInspector/PropertyRow.css.js +7 -6
- package/dist/esm/components/editor/PropertyInspector/PropertyRow.css.js.map +1 -1
- package/dist/esm/components/editor/PropertyInspector/PropertyRow.js +21 -5
- package/dist/esm/components/editor/PropertyInspector/PropertyRow.js.map +1 -1
- package/dist/esm/components/editor/PropertyInspector/PropertySection.css.js +11 -10
- package/dist/esm/components/editor/PropertyInspector/PropertySection.css.js.map +1 -1
- package/dist/esm/components/editor/PropertyInspector/PropertySection.js +32 -11
- package/dist/esm/components/editor/PropertyInspector/PropertySection.js.map +1 -1
- package/dist/esm/components/editor/PropertyInspector/usePropertyUndo.js.map +1 -1
- package/dist/esm/components/editor/Timeline/Timeline.css.js +23 -0
- package/dist/esm/components/editor/Timeline/Timeline.css.js.map +1 -0
- package/dist/esm/components/editor/Timeline/Timeline.js +450 -0
- package/dist/esm/components/editor/Timeline/Timeline.js.map +1 -0
- package/dist/esm/components/editor/Timeline/Timeline.types.js +10 -0
- package/dist/esm/components/editor/Timeline/Timeline.types.js.map +1 -0
- package/dist/esm/components/editor/Timeline/TimelineContext.js +69 -0
- package/dist/esm/components/editor/Timeline/TimelineContext.js.map +1 -0
- package/dist/esm/components/editor/Timeline/TimelineFooter.js +16 -0
- package/dist/esm/components/editor/Timeline/TimelineFooter.js.map +1 -0
- package/dist/esm/components/editor/Timeline/TimelineMinimap.js +280 -0
- package/dist/esm/components/editor/Timeline/TimelineMinimap.js.map +1 -0
- package/dist/esm/components/editor/Timeline/TimelineStore.js +289 -0
- package/dist/esm/components/editor/Timeline/TimelineStore.js.map +1 -0
- package/dist/esm/components/editor/Timeline/TimelineToolbar.js +15 -0
- package/dist/esm/components/editor/Timeline/TimelineToolbar.js.map +1 -0
- package/dist/esm/components/editor/Timeline/TimelineTrackHeaders.js +142 -0
- package/dist/esm/components/editor/Timeline/TimelineTrackHeaders.js.map +1 -0
- package/dist/esm/components/editor/Timeline/TimelineTrackScale.js +18 -0
- package/dist/esm/components/editor/Timeline/TimelineTrackScale.js.map +1 -0
- package/dist/esm/components/editor/Timeline/index.js +18 -0
- package/dist/esm/components/editor/Timeline/index.js.map +1 -0
- package/dist/esm/components/editor/Timeline/timelineCoords.js +118 -0
- package/dist/esm/components/editor/Timeline/timelineCoords.js.map +1 -0
- package/dist/esm/components/editor/Timeline/timelineDrawing.js +390 -0
- package/dist/esm/components/editor/Timeline/timelineDrawing.js.map +1 -0
- package/dist/esm/components/editor/Timeline/timelineEdits.js +323 -0
- package/dist/esm/components/editor/Timeline/timelineEdits.js.map +1 -0
- package/dist/esm/components/editor/Timeline/timelineHitTest.js +153 -0
- package/dist/esm/components/editor/Timeline/timelineHitTest.js.map +1 -0
- package/dist/esm/components/editor/Timeline/timelineLayout.js +39 -0
- package/dist/esm/components/editor/Timeline/timelineLayout.js.map +1 -0
- package/dist/esm/components/editor/Timeline/timelineSelection.js +0 -0
- package/dist/esm/components/editor/Timeline/timelineSelection.js.map +1 -0
- package/dist/esm/components/editor/Timeline/useTimelineDraw.js +156 -0
- package/dist/esm/components/editor/Timeline/useTimelineDraw.js.map +1 -0
- package/dist/esm/components/editor/Timeline/useTimelineGestures.js +587 -0
- package/dist/esm/components/editor/Timeline/useTimelineGestures.js.map +1 -0
- package/dist/esm/components/editor/Timeline/useTimelinePlayback.js +85 -0
- package/dist/esm/components/editor/Timeline/useTimelinePlayback.js.map +1 -0
- package/dist/esm/components/editor/TransformControl/TransformControl.js +4 -4
- package/dist/esm/components/editor/TransformControl/TransformControl.js.map +1 -1
- package/dist/esm/components/editor/ViewportGizmo/ViewportGizmo.js +8 -4
- package/dist/esm/components/editor/ViewportGizmo/ViewportGizmo.js.map +1 -1
- package/dist/esm/components/editor/ViewportGizmo/gizmoMath.js +6 -2
- package/dist/esm/components/editor/ViewportGizmo/gizmoMath.js.map +1 -1
- package/dist/esm/components/editor/ViewportGizmo/useGizmoInteraction.js +8 -6
- package/dist/esm/components/editor/ViewportGizmo/useGizmoInteraction.js.map +1 -1
- package/dist/esm/components/editor/ViewportGizmo/useGizmoRenderer.js +1 -2
- package/dist/esm/components/editor/ViewportGizmo/useGizmoRenderer.js.map +1 -1
- package/dist/esm/components/feedback/Alert/Alert.js +8 -8
- package/dist/esm/components/feedback/Alert/Alert.js.map +1 -1
- package/dist/esm/components/feedback/Alert/AlertActions.js.map +1 -1
- package/dist/esm/components/feedback/Alert/AlertDescription.js.map +1 -1
- package/dist/esm/components/feedback/Alert/AlertTitle.js.map +1 -1
- package/dist/esm/components/feedback/CommandPalette/CommandPalette.js +32 -22
- package/dist/esm/components/feedback/CommandPalette/CommandPalette.js.map +1 -1
- package/dist/esm/components/feedback/CommandPalette/fuzzySearch.js.map +1 -1
- package/dist/esm/components/feedback/CommandPalette/useRecentItems.js +3 -1
- package/dist/esm/components/feedback/CommandPalette/useRecentItems.js.map +1 -1
- package/dist/esm/components/feedback/Dialog/Dialog.js +6 -3
- package/dist/esm/components/feedback/Dialog/Dialog.js.map +1 -1
- package/dist/esm/components/feedback/Dialog/DialogBody.js.map +1 -1
- package/dist/esm/components/feedback/Dialog/DialogClose.js.map +1 -1
- package/dist/esm/components/feedback/Dialog/DialogFooter.js.map +1 -1
- package/dist/esm/components/feedback/Dialog/DialogHeader.js +1 -1
- package/dist/esm/components/feedback/Dialog/DialogHeader.js.map +1 -1
- package/dist/esm/components/feedback/Dialog/useDialogAnimation.js +10 -2
- package/dist/esm/components/feedback/Dialog/useDialogAnimation.js.map +1 -1
- package/dist/esm/components/feedback/Drawer/Drawer.js +4 -1
- package/dist/esm/components/feedback/Drawer/Drawer.js.map +1 -1
- package/dist/esm/components/feedback/Drawer/useDrawerAnimation.js +4 -0
- package/dist/esm/components/feedback/Drawer/useDrawerAnimation.js.map +1 -1
- package/dist/esm/components/feedback/EmptyState/EmptyState.js +1 -1
- package/dist/esm/components/feedback/EmptyState/EmptyState.js.map +1 -1
- package/dist/esm/components/feedback/LogView/LogView.css.js +35 -0
- package/dist/esm/components/feedback/LogView/LogView.css.js.map +1 -0
- package/dist/esm/components/feedback/LogView/LogView.js +297 -0
- package/dist/esm/components/feedback/LogView/LogView.js.map +1 -0
- package/dist/esm/components/feedback/LogView/LogViewBody.js +205 -0
- package/dist/esm/components/feedback/LogView/LogViewBody.js.map +1 -0
- package/dist/esm/components/feedback/LogView/LogViewContext.js +31 -0
- package/dist/esm/components/feedback/LogView/LogViewContext.js.map +1 -0
- package/dist/esm/components/feedback/LogView/LogViewParts.js +73 -0
- package/dist/esm/components/feedback/LogView/LogViewParts.js.map +1 -0
- package/dist/esm/components/feedback/LogView/LogViewStore.js +240 -0
- package/dist/esm/components/feedback/LogView/LogViewStore.js.map +1 -0
- package/dist/esm/components/feedback/LogView/logViewLabels.js +25 -0
- package/dist/esm/components/feedback/LogView/logViewLabels.js.map +1 -0
- package/dist/esm/components/feedback/LogView/logViewLevels.js +74 -0
- package/dist/esm/components/feedback/LogView/logViewLevels.js.map +1 -0
- package/dist/esm/components/feedback/LogView/logViewUtils.js +128 -0
- package/dist/esm/components/feedback/LogView/logViewUtils.js.map +1 -0
- package/dist/esm/components/feedback/LogView/useFollowTail.js +95 -0
- package/dist/esm/components/feedback/LogView/useFollowTail.js.map +1 -0
- package/dist/esm/components/feedback/LogView/useLogSelection.js +113 -0
- package/dist/esm/components/feedback/LogView/useLogSelection.js.map +1 -0
- package/dist/esm/components/feedback/ProgressBar/CircularProgress.js +1 -1
- package/dist/esm/components/feedback/ProgressBar/CircularProgress.js.map +1 -1
- package/dist/esm/components/feedback/ProgressBar/ProgressBar.js +1 -1
- package/dist/esm/components/feedback/ProgressBar/ProgressBar.js.map +1 -1
- package/dist/esm/components/feedback/Skeleton/Skeleton.js +1 -1
- package/dist/esm/components/feedback/Skeleton/Skeleton.js.map +1 -1
- package/dist/esm/components/feedback/Skeleton/SkeletonGroup.js +1 -1
- package/dist/esm/components/feedback/Skeleton/SkeletonGroup.js.map +1 -1
- package/dist/esm/components/feedback/Skeleton/SkeletonLayout.js +1 -1
- package/dist/esm/components/feedback/Skeleton/SkeletonLayout.js.map +1 -1
- package/dist/esm/components/feedback/Spinner/Spinner.js +1 -1
- package/dist/esm/components/feedback/Spinner/Spinner.js.map +1 -1
- package/dist/esm/components/feedback/Stat/Stat.js.map +1 -1
- package/dist/esm/components/feedback/Toast/ToastContainer.js +1 -1
- package/dist/esm/components/feedback/Toast/ToastContainer.js.map +1 -1
- package/dist/esm/components/feedback/Toast/ToastItem.js +7 -3
- package/dist/esm/components/feedback/Toast/ToastItem.js.map +1 -1
- package/dist/esm/components/feedback/Toast/ToastProvider.js.map +1 -1
- package/dist/esm/components/feedback/Toast/useToast.js.map +1 -1
- package/dist/esm/components/form/FormHelperText.js.map +1 -1
- package/dist/esm/components/form/FormLabel.js.map +1 -1
- package/dist/esm/components/form/InputWrapper.js.map +1 -1
- package/dist/esm/components/layout/Accordion/Accordion.js +1 -1
- package/dist/esm/components/layout/Accordion/Accordion.js.map +1 -1
- package/dist/esm/components/layout/Accordion/AccordionContent.js +1 -1
- package/dist/esm/components/layout/Accordion/AccordionContent.js.map +1 -1
- package/dist/esm/components/layout/Accordion/AccordionItem.js +1 -1
- package/dist/esm/components/layout/Accordion/AccordionItem.js.map +1 -1
- package/dist/esm/components/layout/Accordion/AccordionTrigger.js +7 -2
- package/dist/esm/components/layout/Accordion/AccordionTrigger.js.map +1 -1
- package/dist/esm/components/layout/Card/Card.js +2 -2
- package/dist/esm/components/layout/Card/Card.js.map +1 -1
- package/dist/esm/components/layout/Divider/Divider.js.map +1 -1
- package/dist/esm/components/layout/Flex/Flex.js +1 -1
- package/dist/esm/components/layout/Flex/Flex.js.map +1 -1
- package/dist/esm/components/layout/Grid/Grid.js +1 -1
- package/dist/esm/components/layout/Grid/Grid.js.map +1 -1
- package/dist/esm/components/layout/ListItem/ListItem.js +1 -1
- package/dist/esm/components/layout/ListItem/ListItem.js.map +1 -1
- package/dist/esm/components/layout/PageHeader/PageHeader.js.map +1 -1
- package/dist/esm/components/layout/PanelSurface/PanelSurface.js +3 -3
- package/dist/esm/components/layout/PanelSurface/PanelSurface.js.map +1 -1
- package/dist/esm/components/layout/ScrollArea/ScrollArea.js +91 -23
- package/dist/esm/components/layout/ScrollArea/ScrollArea.js.map +1 -1
- package/dist/esm/components/layout/Spacer/Spacer.js.map +1 -1
- package/dist/esm/components/layout/SplitPane/SplitPane.js +29 -16
- package/dist/esm/components/layout/SplitPane/SplitPane.js.map +1 -1
- package/dist/esm/components/layout/SplitPane/SplitPanePanel.js.map +1 -1
- package/dist/esm/components/layout/Stack/Stack.js +1 -1
- package/dist/esm/components/layout/Stack/Stack.js.map +1 -1
- package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbEllipsis.js +4 -0
- package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbEllipsis.js.map +1 -1
- package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbItem.js +6 -2
- package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbItem.js.map +1 -1
- package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbSeparator.js.map +1 -1
- package/dist/esm/components/navigation/Breadcrumbs/Breadcrumbs.js +13 -2
- package/dist/esm/components/navigation/Breadcrumbs/Breadcrumbs.js.map +1 -1
- package/dist/esm/components/navigation/ContextMenu/ContextMenu.js +45 -39
- package/dist/esm/components/navigation/ContextMenu/ContextMenu.js.map +1 -1
- package/dist/esm/components/navigation/Menu/Menu.css.js +9 -12
- package/dist/esm/components/navigation/Menu/Menu.css.js.map +1 -1
- package/dist/esm/components/navigation/Menu/Menu.js +97 -63
- package/dist/esm/components/navigation/Menu/Menu.js.map +1 -1
- package/dist/esm/components/navigation/Menu/MenuGapContext.js +19 -0
- package/dist/esm/components/navigation/Menu/MenuGapContext.js.map +1 -0
- package/dist/esm/components/navigation/Pagination/Pagination.js.map +1 -1
- package/dist/esm/components/navigation/Pagination/usePagination.js.map +1 -1
- package/dist/esm/components/navigation/PathBar/PathBar.css.js +6 -0
- package/dist/esm/components/navigation/PathBar/PathBar.css.js.map +1 -0
- package/dist/esm/components/navigation/PathBar/PathBar.js +184 -0
- package/dist/esm/components/navigation/PathBar/PathBar.js.map +1 -0
- package/dist/esm/components/navigation/PathBar/PathBarSiblingMenu.js +151 -0
- package/dist/esm/components/navigation/PathBar/PathBarSiblingMenu.js.map +1 -0
- package/dist/esm/components/navigation/PathBar/pathUtils.js +118 -0
- package/dist/esm/components/navigation/PathBar/pathUtils.js.map +1 -0
- package/dist/esm/components/navigation/SegmentedControl/SegmentedControl.js +16 -6
- package/dist/esm/components/navigation/SegmentedControl/SegmentedControl.js.map +1 -1
- package/dist/esm/components/navigation/SegmentedControl/SegmentedControlItem.js +1 -1
- package/dist/esm/components/navigation/SegmentedControl/SegmentedControlItem.js.map +1 -1
- package/dist/esm/components/navigation/Tabs/Tab.js +10 -3
- package/dist/esm/components/navigation/Tabs/Tab.js.map +1 -1
- package/dist/esm/components/navigation/Tabs/TabList.js +5 -2
- package/dist/esm/components/navigation/Tabs/TabList.js.map +1 -1
- package/dist/esm/components/navigation/Tabs/TabPanel.js +1 -1
- package/dist/esm/components/navigation/Tabs/TabPanel.js.map +1 -1
- package/dist/esm/components/navigation/Tabs/Tabs.js.map +1 -1
- package/dist/esm/components/primitives/Avatar/Avatar.js +11 -4
- package/dist/esm/components/primitives/Avatar/Avatar.js.map +1 -1
- package/dist/esm/components/primitives/Avatar/AvatarGroup.js +2 -2
- package/dist/esm/components/primitives/Avatar/AvatarGroup.js.map +1 -1
- package/dist/esm/components/primitives/Badge/Badge.js +10 -3
- package/dist/esm/components/primitives/Badge/Badge.js.map +1 -1
- package/dist/esm/components/primitives/Button/Button.js.map +1 -1
- package/dist/esm/components/primitives/Checkbox/Checkbox.js +6 -4
- package/dist/esm/components/primitives/Checkbox/Checkbox.js.map +1 -1
- package/dist/esm/components/primitives/Checkbox/CheckboxGroup.js +2 -2
- package/dist/esm/components/primitives/Checkbox/CheckboxGroup.js.map +1 -1
- package/dist/esm/components/primitives/Code/Code.js.map +1 -1
- package/dist/esm/components/primitives/Collapsible/Collapsible.js +2 -2
- package/dist/esm/components/primitives/Collapsible/Collapsible.js.map +1 -1
- package/dist/esm/components/primitives/HoverCard/HoverCard.js +5 -3
- package/dist/esm/components/primitives/HoverCard/HoverCard.js.map +1 -1
- package/dist/esm/components/primitives/Icon/Icon.js +1 -1
- package/dist/esm/components/primitives/Icon/Icon.js.map +1 -1
- package/dist/esm/components/primitives/IconButton/IconButton.js.map +1 -1
- package/dist/esm/components/primitives/Input/Input.js +1 -1
- package/dist/esm/components/primitives/Input/Input.js.map +1 -1
- package/dist/esm/components/primitives/Kbd/Kbd.js +1 -1
- package/dist/esm/components/primitives/Kbd/Kbd.js.map +1 -1
- package/dist/esm/components/primitives/Link/Link.js.map +1 -1
- package/dist/esm/components/primitives/Paper/Paper.js.map +1 -1
- package/dist/esm/components/primitives/Popover/Popover.js +1 -1
- package/dist/esm/components/primitives/Popover/Popover.js.map +1 -1
- package/dist/esm/components/primitives/Popover/PopoverClose.js +1 -1
- package/dist/esm/components/primitives/Popover/PopoverClose.js.map +1 -1
- package/dist/esm/components/primitives/Popover/PopoverContent.js +6 -4
- package/dist/esm/components/primitives/Popover/PopoverContent.js.map +1 -1
- package/dist/esm/components/primitives/Popover/PopoverTrigger.js.map +1 -1
- package/dist/esm/components/primitives/Radio/Radio.js +3 -3
- package/dist/esm/components/primitives/Radio/Radio.js.map +1 -1
- package/dist/esm/components/primitives/Radio/RadioGroup.js +2 -2
- package/dist/esm/components/primitives/Radio/RadioGroup.js.map +1 -1
- package/dist/esm/components/primitives/Switch/Switch.js +1 -1
- package/dist/esm/components/primitives/Switch/Switch.js.map +1 -1
- package/dist/esm/components/primitives/Text/Text.js.map +1 -1
- package/dist/esm/components/primitives/TextArea/TextArea.js +3 -4
- package/dist/esm/components/primitives/TextArea/TextArea.js.map +1 -1
- package/dist/esm/components/primitives/Tooltip/Arrow.js +1 -1
- package/dist/esm/components/primitives/Tooltip/Arrow.js.map +1 -1
- package/dist/esm/components/primitives/Tooltip/Tooltip.js +9 -7
- package/dist/esm/components/primitives/Tooltip/Tooltip.js.map +1 -1
- package/dist/esm/components/primitives/Tooltip/utils.js +1 -1
- package/dist/esm/components/primitives/Tooltip/utils.js.map +1 -1
- package/dist/esm/components/primitives/VisuallyHidden/VisuallyHidden.js.map +1 -1
- package/dist/esm/components/primitives/canvas/CanvasContainer.js +1 -1
- package/dist/esm/components/primitives/canvas/CanvasContainer.js.map +1 -1
- package/dist/esm/components/primitives/canvas/canvasCoords.js.map +1 -1
- package/dist/esm/components/primitives/canvas/canvasDrawing.js +1 -1
- package/dist/esm/components/primitives/canvas/canvasDrawing.js.map +1 -1
- package/dist/esm/components/primitives/canvas/canvasTheme.js.map +1 -1
- package/dist/esm/components/primitives/canvas/useCanvasRenderer.js +8 -2
- package/dist/esm/components/primitives/canvas/useCanvasRenderer.js.map +1 -1
- package/dist/esm/components/primitives/viewport/Viewport.css.js +12 -0
- package/dist/esm/components/primitives/viewport/Viewport.css.js.map +1 -0
- package/dist/esm/components/primitives/viewport/Viewport.js +189 -0
- package/dist/esm/components/primitives/viewport/Viewport.js.map +1 -0
- package/dist/esm/components/primitives/viewport/ViewportContext.js +47 -0
- package/dist/esm/components/primitives/viewport/ViewportContext.js.map +1 -0
- package/dist/esm/components/primitives/viewport/ViewportLayer.js +113 -0
- package/dist/esm/components/primitives/viewport/ViewportLayer.js.map +1 -0
- package/dist/esm/components/primitives/viewport/ViewportOverlay.js +47 -0
- package/dist/esm/components/primitives/viewport/ViewportOverlay.js.map +1 -0
- package/dist/esm/components/primitives/viewport/ViewportStore.js +210 -0
- package/dist/esm/components/primitives/viewport/ViewportStore.js.map +1 -0
- package/dist/esm/components/primitives/viewport/ViewportWorld.js +38 -0
- package/dist/esm/components/primitives/viewport/ViewportWorld.js.map +1 -0
- package/dist/esm/components/primitives/viewport/useViewportGestures.js +333 -0
- package/dist/esm/components/primitives/viewport/useViewportGestures.js.map +1 -0
- package/dist/esm/components/primitives/viewport/viewportCoords.js +37 -0
- package/dist/esm/components/primitives/viewport/viewportCoords.js.map +1 -0
- package/dist/esm/components/primitives/viewport/viewportMath.js +77 -0
- package/dist/esm/components/primitives/viewport/viewportMath.js.map +1 -0
- package/dist/esm/components/shell/AppShell/AppShell.js +1 -1
- package/dist/esm/components/shell/AppShell/AppShell.js.map +1 -1
- package/dist/esm/components/shell/FloatingPanel/FloatingPanel.css.js +11 -10
- package/dist/esm/components/shell/FloatingPanel/FloatingPanel.css.js.map +1 -1
- package/dist/esm/components/shell/FloatingPanel/FloatingPanel.js +60 -24
- package/dist/esm/components/shell/FloatingPanel/FloatingPanel.js.map +1 -1
- package/dist/esm/components/shell/MenuBar/MenuBar.js +23 -16
- package/dist/esm/components/shell/MenuBar/MenuBar.js.map +1 -1
- package/dist/esm/components/shell/StatusBar/StatusBar.js.map +1 -1
- package/dist/esm/components/shell/Toolbar/Toolbar.js +4 -3
- package/dist/esm/components/shell/Toolbar/Toolbar.js.map +1 -1
- package/dist/esm/context/KeyboardContext.js.map +1 -1
- package/dist/esm/hooks/useBreakpoint/useBreakpoint.js +1 -1
- package/dist/esm/hooks/useBreakpoint/useBreakpoint.js.map +1 -1
- package/dist/esm/hooks/useClickOutside/useClickOutside.js +9 -9
- package/dist/esm/hooks/useClickOutside/useClickOutside.js.map +1 -1
- package/dist/esm/hooks/useClipboard/useClipboard.js +4 -0
- package/dist/esm/hooks/useClipboard/useClipboard.js.map +1 -1
- package/dist/esm/hooks/useControlledState/useControlledState.js.map +1 -1
- package/dist/esm/hooks/useDebounced/useDebouncedCallback.js +11 -6
- package/dist/esm/hooks/useDebounced/useDebouncedCallback.js.map +1 -1
- package/dist/esm/hooks/useDebounced/useDebouncedValue.js +16 -4
- package/dist/esm/hooks/useDebounced/useDebouncedValue.js.map +1 -1
- package/dist/esm/hooks/useDisclosure/useDisclosure.js.map +1 -1
- package/dist/esm/hooks/useEventCallback/useEventCallback.js +49 -0
- package/dist/esm/hooks/useEventCallback/useEventCallback.js.map +1 -0
- package/dist/esm/hooks/useFocusTrap/useFocusTrap.js.map +1 -1
- package/dist/esm/hooks/useHotkey/useHotkey.js +7 -12
- package/dist/esm/hooks/useHotkey/useHotkey.js.map +1 -1
- package/dist/esm/hooks/useIntersectionObserver/useIntersectionObserver.js +2 -0
- package/dist/esm/hooks/useIntersectionObserver/useIntersectionObserver.js.map +1 -1
- package/dist/esm/hooks/useIsMounted/useIsMounted.js +43 -0
- package/dist/esm/hooks/useIsMounted/useIsMounted.js.map +1 -0
- package/dist/esm/hooks/useKeyboard/useKeyboard.js.map +1 -1
- package/dist/esm/hooks/useKeyboard/utils.js.map +1 -1
- package/dist/esm/hooks/useLatest/useLatest.js +31 -0
- package/dist/esm/hooks/useLatest/useLatest.js.map +1 -0
- package/dist/esm/hooks/useListboxNav/useListboxNav.js +29 -13
- package/dist/esm/hooks/useListboxNav/useListboxNav.js.map +1 -1
- package/dist/esm/hooks/useMediaQuery/useMediaQuery.js +7 -1
- package/dist/esm/hooks/useMediaQuery/useMediaQuery.js.map +1 -1
- package/dist/esm/hooks/useMergedRef/useMergedRef.js +6 -1
- package/dist/esm/hooks/useMergedRef/useMergedRef.js.map +1 -1
- package/dist/esm/hooks/useNavigationHistory/useNavigationHistory.js +146 -0
- package/dist/esm/hooks/useNavigationHistory/useNavigationHistory.js.map +1 -0
- package/dist/esm/hooks/useResizeObserver/useResizeObserver.js +6 -8
- package/dist/esm/hooks/useResizeObserver/useResizeObserver.js.map +1 -1
- package/dist/esm/hooks/useTheme/useTheme.js +6 -3
- package/dist/esm/hooks/useTheme/useTheme.js.map +1 -1
- package/dist/esm/hooks/useThrottledCallback/useThrottledCallback.js +9 -4
- package/dist/esm/hooks/useThrottledCallback/useThrottledCallback.js.map +1 -1
- package/dist/esm/index.js +63 -4
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/node_modules/tslib/tslib.es6.js +37 -0
- package/dist/esm/node_modules/tslib/tslib.es6.js.map +1 -0
- package/dist/esm/styles.js +3 -0
- package/dist/esm/styles.js.map +1 -0
- package/dist/esm/theme/ThemeProvider.js +6 -4
- package/dist/esm/theme/ThemeProvider.js.map +1 -1
- package/dist/esm/theme/VanillaThemeProvider.js.map +1 -1
- package/dist/esm/theme/breakpoints.js.map +1 -1
- package/dist/esm/theme/contract.css.js +1 -1
- package/dist/esm/theme/createCustomTheme.js +2 -2
- package/dist/esm/theme/createCustomTheme.js.map +1 -1
- package/dist/esm/theme/createLightTheme.js.map +1 -1
- package/dist/esm/theme/darkTheme.css.js +2 -2
- package/dist/esm/theme/darkThemeValues.js +1 -1
- package/dist/esm/theme/darkThemeValues.js.map +1 -1
- package/dist/esm/theme/lightTheme.css.js +1 -1
- package/dist/esm/theme/lightThemeValues.js +1 -1
- package/dist/esm/theme/lightThemeValues.js.map +1 -1
- package/dist/esm/theme/themeContractData.js +4 -4
- package/dist/esm/theme/themeContractData.js.map +1 -1
- package/dist/esm/utils/cx.js.map +1 -1
- package/dist/esm/utils/devWarn.js +1 -1
- package/dist/esm/utils/devWarn.js.map +1 -1
- package/dist/esm/utils/mathExpression.js +1 -1
- package/dist/esm/utils/mathExpression.js.map +1 -1
- package/dist/esm/utils/mathUtils.js.map +1 -1
- package/dist/esm/utils/objects.js.map +1 -1
- package/dist/esm/utils/platform.js.map +1 -1
- package/dist/tokens/tokens.dark.css +1 -1
- package/dist/tokens/tokens.json +1 -1
- package/dist/tokens/tokens.light.css +1 -1
- package/dist/types/components/Icons/AddIcon.d.ts +1 -1
- package/dist/types/components/Icons/AiChatIcon.d.ts +1 -1
- package/dist/types/components/Icons/AiSparklesIcon.d.ts +1 -1
- package/dist/types/components/Icons/ArchiveIcon.d.ts +1 -1
- package/dist/types/components/Icons/ArrowDownIcon.d.ts +1 -1
- package/dist/types/components/Icons/ArrowLeftIcon.d.ts +1 -1
- package/dist/types/components/Icons/ArrowRightIcon.d.ts +1 -1
- package/dist/types/components/Icons/ArrowUpIcon.d.ts +1 -1
- package/dist/types/components/Icons/BookmarkIcon.d.ts +1 -1
- package/dist/types/components/Icons/BugIcon.d.ts +1 -1
- package/dist/types/components/Icons/BuildingIcon.d.ts +1 -1
- package/dist/types/components/Icons/CalendarIcon.d.ts +1 -1
- package/dist/types/components/Icons/CameraIcon.d.ts +34 -0
- package/dist/types/components/Icons/CheckIcon.d.ts +1 -1
- package/dist/types/components/Icons/ChevronDownIcon.d.ts +1 -1
- package/dist/types/components/Icons/ChevronLeftIcon.d.ts +1 -1
- package/dist/types/components/Icons/ChevronRightIcon.d.ts +1 -1
- package/dist/types/components/Icons/ChevronUpIcon.d.ts +1 -1
- package/dist/types/components/Icons/CircleIcon.d.ts +1 -1
- package/dist/types/components/Icons/ClockIcon.d.ts +1 -1
- package/dist/types/components/Icons/CloseIcon.d.ts +1 -1
- package/dist/types/components/Icons/CloudUploadIcon.d.ts +1 -1
- package/dist/types/components/Icons/CodeIcon.d.ts +1 -1
- package/dist/types/components/Icons/CopyIcon.d.ts +1 -1
- package/dist/types/components/Icons/CubeIcon.d.ts +34 -0
- package/dist/types/components/Icons/CutIcon.d.ts +1 -1
- package/dist/types/components/Icons/DotsHorizontalIcon.d.ts +1 -1
- package/dist/types/components/Icons/DotsVerticalIcon.d.ts +1 -1
- package/dist/types/components/Icons/DownloadIcon.d.ts +1 -1
- package/dist/types/components/Icons/EditIcon.d.ts +1 -1
- package/dist/types/components/Icons/ErrorIcon.d.ts +1 -1
- package/dist/types/components/Icons/ExternalLinkIcon.d.ts +1 -1
- package/dist/types/components/Icons/EyeDropperIcon.d.ts +1 -1
- package/dist/types/components/Icons/EyeIcon.d.ts +1 -1
- package/dist/types/components/Icons/FileTextIcon.d.ts +1 -1
- package/dist/types/components/Icons/FilterIcon.d.ts +1 -1
- package/dist/types/components/Icons/FirstIcon.d.ts +1 -1
- package/dist/types/components/Icons/FolderCogIcon.d.ts +1 -1
- package/dist/types/components/Icons/FolderIcon.d.ts +1 -1
- package/dist/types/components/Icons/FolderOpenIcon.d.ts +1 -1
- package/dist/types/components/Icons/FullscreenIcon.d.ts +1 -1
- package/dist/types/components/Icons/GitBranchIcon.d.ts +1 -1
- package/dist/types/components/Icons/GridIcon.d.ts +1 -1
- package/dist/types/components/Icons/HeartIcon.d.ts +1 -1
- package/dist/types/components/Icons/HelpIcon.d.ts +1 -1
- package/dist/types/components/Icons/HomeIcon.d.ts +1 -1
- package/dist/types/components/Icons/ImageIcon.d.ts +34 -0
- package/dist/types/components/Icons/InfoIcon.d.ts +1 -1
- package/dist/types/components/Icons/LastIcon.d.ts +1 -1
- package/dist/types/components/Icons/LinkIcon.d.ts +1 -1
- package/dist/types/components/Icons/ListIcon.d.ts +1 -1
- package/dist/types/components/Icons/LockIcon.d.ts +1 -1
- package/dist/types/components/Icons/MaximizeIcon.d.ts +1 -1
- package/dist/types/components/Icons/MenuIcon.d.ts +1 -1
- package/dist/types/components/Icons/MinimizeIcon.d.ts +1 -1
- package/dist/types/components/Icons/MinusIcon.d.ts +1 -1
- package/dist/types/components/Icons/OrbitIcon.d.ts +34 -0
- package/dist/types/components/Icons/PasteIcon.d.ts +1 -1
- package/dist/types/components/Icons/PauseIcon.d.ts +1 -1
- package/dist/types/components/Icons/PinIcon.d.ts +1 -1
- package/dist/types/components/Icons/PlayIcon.d.ts +1 -1
- package/dist/types/components/Icons/RedoIcon.d.ts +1 -1
- package/dist/types/components/Icons/RefreshIcon.d.ts +1 -1
- package/dist/types/components/Icons/RobotIcon.d.ts +1 -1
- package/dist/types/components/Icons/RotateIcon.d.ts +35 -0
- package/dist/types/components/Icons/SaveIcon.d.ts +1 -1
- package/dist/types/components/Icons/SearchIcon.d.ts +1 -1
- package/dist/types/components/Icons/SendIcon.d.ts +1 -1
- package/dist/types/components/Icons/SettingsIcon.d.ts +1 -1
- package/dist/types/components/Icons/SortIcon.d.ts +1 -1
- package/dist/types/components/Icons/SpinIcon.d.ts +35 -0
- package/dist/types/components/Icons/StarIcon.d.ts +1 -1
- package/dist/types/components/Icons/StopIcon.d.ts +1 -1
- package/dist/types/components/Icons/SuccessIcon.d.ts +1 -1
- package/dist/types/components/Icons/TagIcon.d.ts +1 -1
- package/dist/types/components/Icons/TangentAlignedIcon.d.ts +1 -1
- package/dist/types/components/Icons/TangentAutoIcon.d.ts +1 -1
- package/dist/types/components/Icons/TangentFreeIcon.d.ts +1 -1
- package/dist/types/components/Icons/TangentLinearIcon.d.ts +1 -1
- package/dist/types/components/Icons/TangentMirroredIcon.d.ts +1 -1
- package/dist/types/components/Icons/TangentStepIcon.d.ts +1 -1
- package/dist/types/components/Icons/TerminalIcon.d.ts +1 -1
- package/dist/types/components/Icons/TrashIcon.d.ts +1 -1
- package/dist/types/components/Icons/UndoIcon.d.ts +1 -1
- package/dist/types/components/Icons/UnlinkIcon.d.ts +1 -1
- package/dist/types/components/Icons/UnlockIcon.d.ts +1 -1
- package/dist/types/components/Icons/UploadIcon.d.ts +1 -1
- package/dist/types/components/Icons/UserIcon.d.ts +1 -1
- package/dist/types/components/Icons/UsersIcon.d.ts +1 -1
- package/dist/types/components/Icons/WarningIcon.d.ts +1 -1
- package/dist/types/components/Icons/ZoomFitIcon.d.ts +35 -0
- package/dist/types/components/Icons/ZoomInIcon.d.ts +1 -1
- package/dist/types/components/Icons/ZoomOutIcon.d.ts +1 -1
- package/dist/types/components/controls/CartesianPicker/CartesianPicker.types.d.ts +3 -3
- package/dist/types/components/controls/ColorPicker/ColorPicker.types.d.ts +2 -2
- package/dist/types/components/controls/ColorPicker/EyeDropper.d.ts +1 -1
- package/dist/types/components/controls/Combobox/Combobox.types.d.ts +1 -1
- package/dist/types/components/controls/CurveEditor/CurveEditor.types.d.ts +8 -58
- package/dist/types/components/controls/CurveEditor/curveUtils.d.ts +2 -1
- package/dist/types/components/controls/FileTree/FileTree.d.ts +34 -0
- package/dist/types/components/controls/FileTree/FileTree.types.d.ts +133 -0
- package/dist/types/components/controls/FileTree/fileTreeIcons.d.ts +29 -0
- package/dist/types/components/controls/FileTree/fileTreeLabels.d.ts +19 -0
- package/dist/types/components/controls/FileUploader/FileUploader.types.d.ts +2 -2
- package/dist/types/components/controls/MultiSelect/MultiSelect.types.d.ts +1 -1
- package/dist/types/components/controls/NumberInput/NumberInput.d.ts +2 -2
- package/dist/types/components/controls/Select/Select.d.ts +1 -1
- package/dist/types/components/controls/Select/Select.types.d.ts +45 -11
- package/dist/types/components/controls/Slider/Slider.d.ts +1 -1
- package/dist/types/components/controls/TagInput/TagInput.types.d.ts +2 -2
- package/dist/types/components/controls/TreeView/TreeView.d.ts +1 -1
- package/dist/types/components/controls/TreeView/TreeView.types.d.ts +24 -2
- package/dist/types/components/controls/VectorInput/VectorInput.types.d.ts +1 -1
- package/dist/types/components/data/DataTable/DataTable.types.d.ts +2 -2
- package/dist/types/components/editor/AssetBrowser/AssetBrowser.d.ts +13 -0
- package/dist/types/components/editor/AssetBrowser/AssetBrowser.types.d.ts +241 -0
- package/dist/types/components/editor/AssetBrowser/assetBrowserLabels.d.ts +70 -0
- package/dist/types/components/editor/ChatPanel/ChatMarkdownRenderer.types.d.ts +1 -1
- package/dist/types/components/editor/ChatPanel/ChatPanel.types.d.ts +2 -2
- package/dist/types/components/editor/Minimap/Minimap.d.ts +26 -0
- package/dist/types/components/editor/Minimap/Minimap.types.d.ts +249 -0
- package/dist/types/components/editor/Minimap/MinimapContext.d.ts +27 -0
- package/dist/types/components/editor/Minimap/MinimapCorner.d.ts +8 -0
- package/dist/types/components/editor/Minimap/MinimapFooter.d.ts +8 -0
- package/dist/types/components/editor/Minimap/MinimapStore.d.ts +17 -0
- package/dist/types/components/editor/Minimap/MinimapTitle.d.ts +8 -0
- package/dist/types/components/editor/Minimap/ViewportMinimap.d.ts +52 -0
- package/dist/types/components/editor/Minimap/computeBoundsFromItems.d.ts +13 -0
- package/dist/types/components/editor/Minimap/index.d.ts +13 -0
- package/dist/types/components/editor/NodeGraph/NodeGraph.d.ts +63 -0
- package/dist/types/components/editor/NodeGraph/NodeGraph.types.d.ts +568 -0
- package/dist/types/components/editor/NodeGraph/NodeGraphContext.d.ts +30 -0
- package/dist/types/components/editor/NodeGraph/NodeGraphNodeParts.d.ts +86 -0
- package/dist/types/components/editor/NodeGraph/NodeGraphNodeSection.d.ts +47 -0
- package/dist/types/components/editor/NodeGraph/NodeGraphPin.d.ts +57 -0
- package/dist/types/components/editor/NodeGraph/NodeGraphPort.d.ts +30 -0
- package/dist/types/components/editor/NodeGraph/NodeGraphPortVisual.d.ts +46 -0
- package/dist/types/components/editor/NodeGraph/NodeGraphSlots.d.ts +16 -0
- package/dist/types/components/editor/NodeGraph/NodeGraphStore.d.ts +256 -0
- package/dist/types/components/editor/NodeGraph/NodeGraphToolbar.d.ts +54 -0
- package/dist/types/components/editor/NodeGraph/createTypeMatchValidator.d.ts +43 -0
- package/dist/types/components/editor/NodeGraph/nodeGraphActions.d.ts +39 -0
- package/dist/types/components/editor/NodeGraph/nodeGraphIds.d.ts +16 -0
- package/dist/types/components/editor/NodeGraph/useNodeGraph.d.ts +103 -0
- package/dist/types/components/editor/PropertyInspector/PropertyInspector.types.d.ts +51 -5
- package/dist/types/components/editor/Timeline/Timeline.d.ts +18 -0
- package/dist/types/components/editor/Timeline/Timeline.types.d.ts +348 -0
- package/dist/types/components/editor/Timeline/TimelineContext.d.ts +51 -0
- package/dist/types/components/editor/Timeline/TimelineFooter.d.ts +8 -0
- package/dist/types/components/editor/Timeline/TimelineMinimap.d.ts +21 -0
- package/dist/types/components/editor/Timeline/TimelineStore.d.ts +41 -0
- package/dist/types/components/editor/Timeline/TimelineToolbar.d.ts +8 -0
- package/dist/types/components/editor/Timeline/TimelineTrackScale.d.ts +8 -0
- package/dist/types/components/editor/Timeline/index.d.ts +15 -0
- package/dist/types/components/editor/Timeline/timelineCoords.d.ts +7 -0
- package/dist/types/components/editor/Timeline/timelineEdits.d.ts +18 -0
- package/dist/types/components/editor/TransformControl/TransformControl.types.d.ts +2 -2
- package/dist/types/components/editor/ViewportGizmo/ViewportGizmo.types.d.ts +1 -1
- package/dist/types/components/feedback/Alert/Alert.d.ts +2 -2
- package/dist/types/components/feedback/Alert/Alert.types.d.ts +5 -5
- package/dist/types/components/feedback/CommandPalette/CommandPalette.types.d.ts +1 -3
- package/dist/types/components/feedback/Dialog/Dialog.types.d.ts +2 -2
- package/dist/types/components/feedback/Drawer/Drawer.types.d.ts +1 -1
- package/dist/types/components/feedback/EmptyState/EmptyState.types.d.ts +2 -2
- package/dist/types/components/feedback/LogView/LogView.d.ts +58 -0
- package/dist/types/components/feedback/LogView/LogView.types.d.ts +333 -0
- package/dist/types/components/feedback/LogView/LogViewBody.d.ts +15 -0
- package/dist/types/components/feedback/LogView/LogViewContext.d.ts +9 -0
- package/dist/types/components/feedback/LogView/LogViewParts.d.ts +35 -0
- package/dist/types/components/feedback/LogView/LogViewStore.d.ts +4 -0
- package/dist/types/components/feedback/LogView/logViewLabels.d.ts +9 -0
- package/dist/types/components/feedback/LogView/logViewUtils.d.ts +41 -0
- package/dist/types/components/feedback/ProgressBar/ProgressBar.types.d.ts +3 -3
- package/dist/types/components/feedback/Skeleton/Skeleton.types.d.ts +4 -4
- package/dist/types/components/feedback/Stat/Stat.types.d.ts +2 -2
- package/dist/types/components/feedback/Toast/Toast.types.d.ts +1 -1
- package/dist/types/components/form/FormHelperText.d.ts +2 -2
- package/dist/types/components/form/FormLabel.d.ts +1 -1
- package/dist/types/components/form/InputWrapper.d.ts +2 -2
- package/dist/types/components/layout/Accordion/Accordion.types.d.ts +2 -2
- package/dist/types/components/layout/Card/Card.types.d.ts +6 -6
- package/dist/types/components/layout/Divider/Divider.types.d.ts +2 -2
- package/dist/types/components/layout/Flex/Flex.d.ts +1 -1
- package/dist/types/components/layout/Grid/Grid.d.ts +1 -1
- package/dist/types/components/layout/ListItem/ListItem.types.d.ts +2 -2
- package/dist/types/components/layout/PageHeader/PageHeader.types.d.ts +1 -1
- package/dist/types/components/layout/PanelSurface/PanelSurface.types.d.ts +6 -6
- package/dist/types/components/layout/ScrollArea/ScrollArea.types.d.ts +2 -2
- package/dist/types/components/layout/Stack/Stack.d.ts +1 -1
- package/dist/types/components/navigation/Breadcrumbs/BreadcrumbItem.d.ts +1 -0
- package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.types.d.ts +7 -0
- package/dist/types/components/navigation/ContextMenu/ContextMenu.d.ts +18 -3
- package/dist/types/components/navigation/ContextMenu/ContextMenu.types.d.ts +55 -63
- package/dist/types/components/navigation/Menu/Menu.d.ts +38 -35
- package/dist/types/components/navigation/Menu/Menu.types.d.ts +190 -71
- package/dist/types/components/navigation/Pagination/Pagination.types.d.ts +1 -1
- package/dist/types/components/navigation/PathBar/PathBar.d.ts +31 -0
- package/dist/types/components/navigation/PathBar/PathBar.types.d.ts +79 -0
- package/dist/types/components/navigation/SegmentedControl/SegmentedControl.types.d.ts +3 -3
- package/dist/types/components/navigation/Tabs/Tabs.types.d.ts +2 -2
- package/dist/types/components/primitives/Avatar/Avatar.types.d.ts +2 -2
- package/dist/types/components/primitives/Badge/Badge.types.d.ts +1 -1
- package/dist/types/components/primitives/Button/Button.d.ts +2 -2
- package/dist/types/components/primitives/Checkbox/Checkbox.types.d.ts +2 -2
- package/dist/types/components/primitives/Code/Code.types.d.ts +1 -1
- package/dist/types/components/primitives/Collapsible/Collapsible.types.d.ts +2 -2
- package/dist/types/components/primitives/HoverCard/HoverCard.types.d.ts +3 -3
- package/dist/types/components/primitives/Icon/Icon.d.ts +2 -2
- package/dist/types/components/primitives/IconButton/IconButton.d.ts +1 -1
- package/dist/types/components/primitives/Input/Input.d.ts +1 -1
- package/dist/types/components/primitives/Kbd/Kbd.types.d.ts +1 -1
- package/dist/types/components/primitives/Link/Link.types.d.ts +1 -1
- package/dist/types/components/primitives/Popover/Popover.types.d.ts +2 -2
- package/dist/types/components/primitives/Radio/Radio.types.d.ts +3 -3
- package/dist/types/components/primitives/Switch/Switch.d.ts +1 -1
- package/dist/types/components/primitives/TextArea/TextArea.types.d.ts +1 -1
- package/dist/types/components/primitives/Tooltip/Tooltip.d.ts +1 -1
- package/dist/types/components/primitives/VisuallyHidden/VisuallyHidden.types.d.ts +1 -1
- package/dist/types/components/primitives/canvas/canvas.types.d.ts +16 -1
- package/dist/types/components/primitives/viewport/Viewport.d.ts +38 -0
- package/dist/types/components/primitives/viewport/Viewport.types.d.ts +257 -0
- package/dist/types/components/primitives/viewport/ViewportContext.d.ts +23 -0
- package/dist/types/components/primitives/viewport/ViewportLayer.d.ts +26 -0
- package/dist/types/components/primitives/viewport/ViewportOverlay.d.ts +27 -0
- package/dist/types/components/primitives/viewport/ViewportWorld.d.ts +25 -0
- package/dist/types/components/primitives/viewport/viewportCoords.d.ts +25 -0
- package/dist/types/components/primitives/viewport/viewportMath.d.ts +35 -0
- package/dist/types/components/shell/AppShell/AppShell.types.d.ts +2 -2
- package/dist/types/components/shell/FloatingPanel/FloatingPanel.types.d.ts +2 -2
- package/dist/types/components/shell/MenuBar/MenuBar.types.d.ts +5 -5
- package/dist/types/components/shell/StatusBar/StatusBar.types.d.ts +3 -3
- package/dist/types/components/shell/Toolbar/Toolbar.types.d.ts +5 -5
- package/dist/types/hooks/useDebounced/useDebouncedValue.d.ts +13 -4
- package/dist/types/hooks/useEventCallback/useEventCallback.d.ts +32 -0
- package/dist/types/hooks/useIsMounted/useIsMounted.d.ts +28 -0
- package/dist/types/hooks/useKeyboard/types.d.ts +1 -1
- package/dist/types/hooks/useLatest/useLatest.d.ts +23 -0
- package/dist/types/hooks/useResizeObserver/useResizeObserver.d.ts +3 -3
- package/dist/types/index.d.ts +71 -6
- package/dist/types/theme/ThemeProvider.d.ts +5 -3
- package/dist/types/theme/contract.css.d.ts +1 -1
- package/dist/types/theme/createCustomTheme.d.ts +1 -1
- package/dist/types/theme/darkThemeValues.d.ts +1 -1
- package/dist/types/theme/lightThemeValues.d.ts +1 -1
- package/dist/types/theme/themeContractData.d.ts +4 -4
- package/dist/types/theme-values.d.ts +1 -1
- package/dist/types/types/keyframe.d.ts +64 -0
- package/package.json +34 -18
- package/dist/esm/_virtual/_commonjsHelpers.js +0 -6
- package/dist/esm/_virtual/_commonjsHelpers.js.map +0 -1
- package/dist/esm/_virtual/cjs.js +0 -4
- package/dist/esm/_virtual/cjs.js.map +0 -1
- package/dist/esm/_virtual/cssesc.js +0 -8
- package/dist/esm/_virtual/cssesc.js.map +0 -1
- package/dist/esm/_virtual/picocolors.js +0 -8
- package/dist/esm/_virtual/picocolors.js.map +0 -1
- package/dist/esm/_virtual/picocolors2.js +0 -4
- package/dist/esm/_virtual/picocolors2.js.map +0 -1
- package/dist/esm/assets/src/components/navigation/Menu/Menu.css.ts.vanilla-DD0c5D10.css +0 -67
- package/dist/esm/components/navigation/ContextMenu/useContextMenuTarget.js +0 -53
- package/dist/esm/components/navigation/ContextMenu/useContextMenuTarget.js.map +0 -1
- package/dist/esm/components/navigation/Menu/Menu.helpers.js +0 -53
- package/dist/esm/components/navigation/Menu/Menu.helpers.js.map +0 -1
- package/dist/esm/components/navigation/Menu/useMenu.js +0 -88
- package/dist/esm/components/navigation/Menu/useMenu.js.map +0 -1
- package/dist/esm/node_modules/@emotion/hash/dist/emotion-hash.esm.js +0 -56
- package/dist/esm/node_modules/@emotion/hash/dist/emotion-hash.esm.js.map +0 -1
- package/dist/esm/node_modules/@vanilla-extract/css/adapter/dist/vanilla-extract-css-adapter.esm.js +0 -46
- package/dist/esm/node_modules/@vanilla-extract/css/adapter/dist/vanilla-extract-css-adapter.esm.js.map +0 -1
- package/dist/esm/node_modules/@vanilla-extract/css/dist/taggedTemplateLiteral-10998315.esm.js +0 -13
- package/dist/esm/node_modules/@vanilla-extract/css/dist/taggedTemplateLiteral-10998315.esm.js.map +0 -1
- package/dist/esm/node_modules/@vanilla-extract/css/dist/transformCss-fd0786e1.esm.js +0 -962
- package/dist/esm/node_modules/@vanilla-extract/css/dist/transformCss-fd0786e1.esm.js.map +0 -1
- package/dist/esm/node_modules/@vanilla-extract/css/dist/vanilla-extract-css.esm.js +0 -309
- package/dist/esm/node_modules/@vanilla-extract/css/dist/vanilla-extract-css.esm.js.map +0 -1
- package/dist/esm/node_modules/@vanilla-extract/css/fileScope/dist/vanilla-extract-css-fileScope.esm.js +0 -18
- package/dist/esm/node_modules/@vanilla-extract/css/fileScope/dist/vanilla-extract-css-fileScope.esm.js.map +0 -1
- package/dist/esm/node_modules/@vanilla-extract/css/injectStyles/dist/vanilla-extract-css-injectStyles.esm.js +0 -23
- package/dist/esm/node_modules/@vanilla-extract/css/injectStyles/dist/vanilla-extract-css-injectStyles.esm.js.map +0 -1
- package/dist/esm/node_modules/@vanilla-extract/css/node_modules/lru-cache/dist/esm/index.js +0 -1543
- package/dist/esm/node_modules/@vanilla-extract/css/node_modules/lru-cache/dist/esm/index.js.map +0 -1
- package/dist/esm/node_modules/@vanilla-extract/private/dist/vanilla-extract-private.esm.js +0 -38
- package/dist/esm/node_modules/@vanilla-extract/private/dist/vanilla-extract-private.esm.js.map +0 -1
- package/dist/esm/node_modules/css-what/lib/es/parse.js +0 -424
- package/dist/esm/node_modules/css-what/lib/es/parse.js.map +0 -1
- package/dist/esm/node_modules/css-what/lib/es/types.js +0 -29
- package/dist/esm/node_modules/css-what/lib/es/types.js.map +0 -1
- package/dist/esm/node_modules/cssesc/cssesc.js +0 -120
- package/dist/esm/node_modules/cssesc/cssesc.js.map +0 -1
- package/dist/esm/node_modules/dedent/dist/dedent.js +0 -100
- package/dist/esm/node_modules/dedent/dist/dedent.js.map +0 -1
- package/dist/esm/node_modules/deep-object-diff/mjs/diff.js +0 -40
- package/dist/esm/node_modules/deep-object-diff/mjs/diff.js.map +0 -1
- package/dist/esm/node_modules/deep-object-diff/mjs/utils.js +0 -9
- package/dist/esm/node_modules/deep-object-diff/mjs/utils.js.map +0 -1
- package/dist/esm/node_modules/deepmerge/dist/cjs.js +0 -143
- package/dist/esm/node_modules/deepmerge/dist/cjs.js.map +0 -1
- package/dist/esm/node_modules/media-query-parser/dist/media-query-parser.esm.js +0 -1386
- package/dist/esm/node_modules/media-query-parser/dist/media-query-parser.esm.js.map +0 -1
- package/dist/esm/node_modules/modern-ahocorasick/dist/index.js +0 -102
- package/dist/esm/node_modules/modern-ahocorasick/dist/index.js.map +0 -1
- package/dist/esm/node_modules/picocolors/picocolors.js +0 -87
- package/dist/esm/node_modules/picocolors/picocolors.js.map +0 -1
- package/dist/types/components/navigation/ContextMenu/useContextMenuTarget.d.ts +0 -5
- package/dist/types/components/navigation/Menu/useMenu.d.ts +0 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDebouncedValue.js","sources":["
|
|
1
|
+
{"version":3,"file":"useDebouncedValue.js","sources":["src/hooks/useDebounced/useDebouncedValue.ts"],"sourcesContent":["'use client';\n\nimport { useEffect, useState } from 'react';\n\n/**\n * Returns a copy of `value` that updates only after `delay` ms have elapsed\n * without further changes (trailing-edge debounce).\n *\n * @deprecated Prefer React's `useDeferredValue` for the common case — keeping\n * an input responsive while an expensive derivation (filtering, search) lags\n * behind it. It needs no fixed delay, integrates with concurrent rendering,\n * and gives better interactivity on large lists. Reach for `useDebouncedCallback`\n * when you need to debounce a *side effect* (a network request, an analytics\n * ping) rather than a rendered value. This hook stays exported for now but\n * will not see further work.\n *\n * @example\n * ```tsx\n * // Preferred: defer the value that drives the expensive derivation.\n * const deferredQuery = useDeferredValue(query);\n * const results = useMemo(\n * () => filter(items, deferredQuery),\n * [items, deferredQuery]\n * );\n * ```\n */\nexport function useDebouncedValue<T>(value: T, delay: number): T {\n const [debounced, setDebounced] = useState<T>(value);\n\n useEffect(() => {\n if (delay <= 0) {\n // Synchronous passthrough when debouncing is disabled; this hook's whole\n // purpose is to mirror an external value into state.\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setDebounced(value);\n return;\n }\n const id = setTimeout(() => {\n setDebounced(value);\n }, delay);\n return () => {\n clearTimeout(id);\n };\n }, [value, delay]);\n\n return debounced;\n}\n"],"names":[],"mappings":";;;AAIA;;;;;;;;;;;;;;;;;;;;;AAqBG;AACG;;;AAIF;;;;;;;AAOA;;;AAGA;;AAEA;AACF;AAEA;AACF;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDisclosure.js","sources":["
|
|
1
|
+
{"version":3,"file":"useDisclosure.js","sources":["src/hooks/useDisclosure/useDisclosure.ts"],"sourcesContent":["'use client';\n\nimport { useCallback, useMemo } from 'react';\n\nimport { useControlledState } from '@/hooks/useControlledState';\n\nimport type {\n UseDisclosureOptions,\n UseDisclosureReturn,\n} from './useDisclosure.types';\n\n/**\n * Manage an open/closed state with stable `open`, `close`, `toggle` callbacks.\n *\n * Supports both controlled (driven by an `open` prop) and uncontrolled\n * (managed internally with `defaultOpen`) modes. Built on top of\n * `useControlledState` so the same controlled / uncontrolled rules apply —\n * including the development warning when switching modes mid-life.\n *\n * @example\n * ```tsx\n * const { isOpen, open, close, toggle } = useDisclosure();\n *\n * return (\n * <>\n * <Button onClick={open}>Open</Button>\n * <Dialog open={isOpen} onClose={close}>...</Dialog>\n * </>\n * );\n * ```\n */\nexport function useDisclosure(\n options: UseDisclosureOptions = {}\n): UseDisclosureReturn {\n const { defaultOpen, open: controlledOpen, onOpenChange } = options;\n\n const [isOpen, setOpenState] = useControlledState<boolean>({\n value: controlledOpen,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n fallback: false,\n });\n\n const setOpen = useCallback(\n (next: boolean) => {\n setOpenState(next);\n },\n [setOpenState]\n );\n\n const open = useCallback(() => {\n setOpenState(true);\n }, [setOpenState]);\n\n const close = useCallback(() => {\n setOpenState(false);\n }, [setOpenState]);\n\n const toggle = useCallback(() => {\n setOpenState(prev => !prev);\n }, [setOpenState]);\n\n return useMemo(\n () => ({ isOpen, open, close, toggle, setOpen }),\n [isOpen, open, close, toggle, setOpen]\n );\n}\n"],"names":[],"mappings":";;;;AAWA;;;;;;;;;;;;;;;;;;;AAmBG;AACG;;AAKJ;AACE;AACA;AACA;AACA;AACD;AAED;;AAGE;AAIF;;AAEA;AAEA;;AAEA;AAEA;;AAEA;AAEA;AAIF;;"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useRef, useInsertionEffect, useCallback } from 'react';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Wrap a callback so its identity stays stable for the component lifetime
|
|
6
|
+
* while it always invokes the most recently rendered version — the
|
|
7
|
+
* `useEffectEvent` pattern, backed by `useInsertionEffect`.
|
|
8
|
+
*
|
|
9
|
+
* The stored callback is refreshed in `useInsertionEffect`, which commits
|
|
10
|
+
* before any layout effect. So the freshness guarantee holds even for
|
|
11
|
+
* consumers that read it during the same commit: a child's
|
|
12
|
+
* `useLayoutEffect`, a synchronous external-store subscription, an
|
|
13
|
+
* imperative handle. A passively updated ref (e.g. `useLatest`, which writes
|
|
14
|
+
* in `useEffect`) would still be one render stale in those cases.
|
|
15
|
+
*
|
|
16
|
+
* Pass the result to memoized children, dependency arrays, or external
|
|
17
|
+
* subscriptions without re-subscribing — the reference never changes, yet it
|
|
18
|
+
* still closes over the latest props and state.
|
|
19
|
+
*
|
|
20
|
+
* The one rule: do not call it during render. Like an event handler it reads
|
|
21
|
+
* through a ref, so a render-phase call has no meaningful "latest" value to
|
|
22
|
+
* read. Use it in event handlers, effects, layout effects, timers, and
|
|
23
|
+
* subscriptions only.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```tsx
|
|
27
|
+
* const handleChange = useEventCallback((value: string) => {
|
|
28
|
+
* onChange?.(value, internalState);
|
|
29
|
+
* });
|
|
30
|
+
* useEffect(() => store.subscribe(handleChange), [handleChange]);
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
function useEventCallback(fn) {
|
|
34
|
+
const ref = useRef(fn);
|
|
35
|
+
// Refresh the stored callback before layout effects run. useInsertionEffect
|
|
36
|
+
// commits earlier than useEffect / useLayoutEffect, so children's layout
|
|
37
|
+
// effects and synchronous subscriptions firing in the same commit already
|
|
38
|
+
// observe the latest callback.
|
|
39
|
+
useInsertionEffect(() => {
|
|
40
|
+
ref.current = fn;
|
|
41
|
+
}, [fn]);
|
|
42
|
+
// Stable wrapper for the component lifetime. Reading `ref.current` happens
|
|
43
|
+
// only when the wrapper is invoked from an event, effect, or timer — never
|
|
44
|
+
// during render.
|
|
45
|
+
return useCallback((...args) => ref.current(...args), []);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export { useEventCallback };
|
|
49
|
+
//# sourceMappingURL=useEventCallback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useEventCallback.js","sources":["src/hooks/useEventCallback/useEventCallback.ts"],"sourcesContent":["'use client';\n\nimport { useCallback, useInsertionEffect, useRef } from 'react';\n\n/**\n * Wrap a callback so its identity stays stable for the component lifetime\n * while it always invokes the most recently rendered version — the\n * `useEffectEvent` pattern, backed by `useInsertionEffect`.\n *\n * The stored callback is refreshed in `useInsertionEffect`, which commits\n * before any layout effect. So the freshness guarantee holds even for\n * consumers that read it during the same commit: a child's\n * `useLayoutEffect`, a synchronous external-store subscription, an\n * imperative handle. A passively updated ref (e.g. `useLatest`, which writes\n * in `useEffect`) would still be one render stale in those cases.\n *\n * Pass the result to memoized children, dependency arrays, or external\n * subscriptions without re-subscribing — the reference never changes, yet it\n * still closes over the latest props and state.\n *\n * The one rule: do not call it during render. Like an event handler it reads\n * through a ref, so a render-phase call has no meaningful \"latest\" value to\n * read. Use it in event handlers, effects, layout effects, timers, and\n * subscriptions only.\n *\n * @example\n * ```tsx\n * const handleChange = useEventCallback((value: string) => {\n * onChange?.(value, internalState);\n * });\n * useEffect(() => store.subscribe(handleChange), [handleChange]);\n * ```\n */\nexport function useEventCallback<Args extends unknown[], Return>(\n fn: (...args: Args) => Return\n): (...args: Args) => Return {\n const ref = useRef(fn);\n\n // Refresh the stored callback before layout effects run. useInsertionEffect\n // commits earlier than useEffect / useLayoutEffect, so children's layout\n // effects and synchronous subscriptions firing in the same commit already\n // observe the latest callback.\n useInsertionEffect(() => {\n ref.current = fn;\n }, [fn]);\n\n // Stable wrapper for the component lifetime. Reading `ref.current` happens\n // only when the wrapper is invoked from an event, effect, or timer — never\n // during render.\n return useCallback((...args: Args): Return => ref.current(...args), []);\n}\n"],"names":[],"mappings":";;;AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BG;AACG;AAGJ;;;;;;AAOE;AACF;;;;AAKA;AACF;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFocusTrap.js","sources":["
|
|
1
|
+
{"version":3,"file":"useFocusTrap.js","sources":["src/hooks/useFocusTrap/useFocusTrap.ts"],"sourcesContent":["'use client';\n\nimport { useCallback } from 'react';\n\nimport type { KeyboardEvent, RefObject } from 'react';\n\nconst FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled])',\n 'textarea:not([disabled])',\n 'select:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(', ');\n\nexport interface UseFocusTrapOptions {\n /** Ref to the container element whose focusable descendants are trapped. */\n containerRef: RefObject<HTMLElement | null>;\n /**\n * When false, the trap is bypassed (Tab works normally). Useful for toggling\n * trap state without unmounting.\n * @default true\n */\n enabled?: boolean;\n}\n\n/**\n * Trap focus within a container element. Tab and Shift+Tab cycle through the\n * focusable descendants without escaping the container.\n *\n * Returns a keyboard event handler to attach to the container's `onKeyDown`.\n *\n * @example\n * ```tsx\n * const ref = useRef<HTMLDivElement>(null);\n * const handleKeyDown = useFocusTrap({ containerRef: ref, enabled: isOpen });\n *\n * return <div ref={ref} onKeyDown={handleKeyDown}>...</div>;\n * ```\n */\nexport function useFocusTrap({\n containerRef,\n enabled = true,\n}: UseFocusTrapOptions): (event: KeyboardEvent) => void {\n return useCallback(\n (e: KeyboardEvent) => {\n if (!enabled || e.key !== 'Tab') return;\n\n const container = containerRef.current;\n if (!container) return;\n\n const focusableElements = Array.from(\n container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)\n );\n\n if (focusableElements.length === 0) {\n e.preventDefault();\n return;\n }\n\n const firstElement = focusableElements[0] as HTMLElement;\n const lastElement = focusableElements[\n focusableElements.length - 1\n ] as HTMLElement;\n\n if (e.shiftKey) {\n if (document.activeElement === firstElement) {\n e.preventDefault();\n lastElement.focus();\n }\n } else {\n if (document.activeElement === lastElement) {\n e.preventDefault();\n firstElement.focus();\n }\n }\n },\n [enabled, containerRef]\n );\n}\n\nexport { FOCUSABLE_SELECTOR };\n"],"names":[],"mappings":";;;AAMA;;;;;;;AAOC;AAaD;;;;;;;;;;;;;AAaG;AACG;AAIJ;AAEI;;AAEA;AACA;;AAEA;AAIA;;;;AAKA;;AAKA;AACE;;;;;;AAKA;;;;;AAKJ;AAGJ;;"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
2
|
+
import { useMemo, useRef, useEffect } from 'react';
|
|
3
|
+
import { useLatest } from '../useLatest/useLatest.js';
|
|
3
4
|
import { parseShortcut, getPlatform } from '../../utils/platform.js';
|
|
4
5
|
|
|
5
6
|
function isRefObject(value) {
|
|
@@ -136,23 +137,17 @@ function matches(parsed, event) {
|
|
|
136
137
|
*/
|
|
137
138
|
function useHotkey(combo, handler, options = {}) {
|
|
138
139
|
const { enabled = true, enableInInputs = false, preventDefault = true, stopPropagation = false, target, } = options;
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
const
|
|
140
|
+
// Latest handler / options / parsed combo, refreshed after each commit so
|
|
141
|
+
// the document listener reads live values without re-subscribing.
|
|
142
|
+
const handlerRef = useLatest(handler);
|
|
143
|
+
const optionsRef = useLatest({
|
|
142
144
|
enabled,
|
|
143
145
|
enableInInputs,
|
|
144
146
|
preventDefault,
|
|
145
147
|
stopPropagation,
|
|
146
148
|
});
|
|
147
|
-
optionsRef.current = {
|
|
148
|
-
enabled,
|
|
149
|
-
enableInInputs,
|
|
150
|
-
preventDefault,
|
|
151
|
-
stopPropagation,
|
|
152
|
-
};
|
|
153
149
|
const parsed = useMemo(() => parseCombo(combo), [combo]);
|
|
154
|
-
const parsedRef =
|
|
155
|
-
parsedRef.current = parsed;
|
|
150
|
+
const parsedRef = useLatest(parsed);
|
|
156
151
|
const attachedTargetRef = useRef(null);
|
|
157
152
|
const listenerRef = useRef(null);
|
|
158
153
|
// Runs every render so a ref whose `.current` becomes available after the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useHotkey.js","sources":["
|
|
1
|
+
{"version":3,"file":"useHotkey.js","sources":["src/hooks/useHotkey/useHotkey.ts"],"sourcesContent":["'use client';\n\nimport { useEffect, useMemo, useRef } from 'react';\n\nimport { useLatest } from '@/hooks/useLatest';\nimport { getPlatform, parseShortcut } from '@/utils/platform';\n\nimport type { HotkeyTarget, UseHotkeyOptions } from './useHotkey.types';\nimport type { RefObject } from 'react';\n\nfunction isRefObject(value: unknown): value is RefObject<EventTarget | null> {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'current' in (value as Record<string, unknown>)\n );\n}\n\nfunction resolveTarget(target: HotkeyTarget | undefined): EventTarget | null {\n if (target === undefined) {\n return typeof window === 'undefined' ? null : window;\n }\n if (target === null) return null;\n if (isRefObject(target)) return target.current;\n return target;\n}\n\ninterface ParsedCombo {\n ctrl: boolean;\n meta: boolean;\n alt: boolean;\n shift: boolean;\n /** Lower-cased non-modifier key, e.g. \"s\", \"k\", \"escape\", \"arrowup\". */\n key: string;\n}\n\nconst MODIFIERS = new Set(['ctrl', 'cmd', 'meta', 'alt', 'option', 'shift']);\n\nconst KEY_ALIASES: Record<string, string> = {\n esc: 'escape',\n return: 'enter',\n space: ' ',\n spacebar: ' ',\n up: 'arrowup',\n down: 'arrowdown',\n left: 'arrowleft',\n right: 'arrowright',\n plus: '+',\n};\n\nfunction normalizeKey(key: string): string {\n const lower = key.toLowerCase();\n return KEY_ALIASES[lower] ?? lower;\n}\n\nfunction parseCombo(combo: string): ParsedCombo | null {\n const parts = parseShortcut(combo);\n if (parts.length === 0) return null;\n\n const platform = getPlatform();\n const isMac = platform === 'mac';\n\n let ctrl = false;\n let meta = false;\n let alt = false;\n let shift = false;\n let key: string | null = null;\n\n for (const raw of parts) {\n const lower = raw.toLowerCase();\n if (MODIFIERS.has(lower)) {\n switch (lower) {\n case 'ctrl':\n ctrl = true;\n break;\n case 'cmd':\n // Cmd auto-maps to Ctrl on non-Mac.\n if (isMac) {\n meta = true;\n } else {\n ctrl = true;\n }\n break;\n case 'meta':\n meta = true;\n break;\n case 'alt':\n case 'option':\n alt = true;\n break;\n case 'shift':\n shift = true;\n break;\n }\n } else {\n key = normalizeKey(raw);\n }\n }\n\n if (key === null) return null;\n return { ctrl, meta, alt, shift, key };\n}\n\nfunction isEditableTarget(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false;\n if (target.isContentEditable) return true;\n const tag = target.tagName;\n if (tag === 'INPUT') {\n const type = (target as HTMLInputElement).type.toLowerCase();\n // Buttons and similar non-text inputs should not block hotkeys.\n const nonEditable = new Set([\n 'button',\n 'submit',\n 'reset',\n 'checkbox',\n 'radio',\n 'file',\n 'image',\n 'range',\n 'color',\n ]);\n return !nonEditable.has(type);\n }\n return tag === 'TEXTAREA' || tag === 'SELECT';\n}\n\nfunction matches(parsed: ParsedCombo, event: KeyboardEvent): boolean {\n if (event.ctrlKey !== parsed.ctrl) return false;\n if (event.metaKey !== parsed.meta) return false;\n if (event.altKey !== parsed.alt) return false;\n if (event.shiftKey !== parsed.shift) return false;\n\n const eventKey = event.key.toLowerCase();\n return eventKey === parsed.key;\n}\n\n/**\n * Bind a single keyboard combo to a callback.\n *\n * Combos use the same `+`-separated string format as `MenuBar`'s `shortcut`\n * prop: `\"Ctrl+S\"`, `\"Cmd+Shift+P\"`, `\"Escape\"`. Modifiers: `Ctrl`, `Cmd`\n * (= Meta), `Alt` / `Option`, `Shift`. `Cmd` automatically maps to `Ctrl` on\n * non-Mac platforms via `getPlatform()`.\n *\n * The handler reference is stable — passing a fresh inline function on every\n * render is safe and does not re-subscribe the underlying listener.\n *\n * @example\n * ```tsx\n * useHotkey('Ctrl+S', e => save(), { preventDefault: true });\n * useHotkey('Escape', () => setOpen(false));\n * useHotkey('Cmd+K', () => openCommandPalette()); // Cmd on Mac, Ctrl elsewhere\n * ```\n */\nexport function useHotkey(\n combo: string,\n handler: (event: KeyboardEvent) => void,\n options: UseHotkeyOptions = {}\n): void {\n const {\n enabled = true,\n enableInInputs = false,\n preventDefault = true,\n stopPropagation = false,\n target,\n } = options;\n\n // Latest handler / options / parsed combo, refreshed after each commit so\n // the document listener reads live values without re-subscribing.\n const handlerRef = useLatest(handler);\n const optionsRef = useLatest({\n enabled,\n enableInInputs,\n preventDefault,\n stopPropagation,\n });\n\n const parsed = useMemo(() => parseCombo(combo), [combo]);\n const parsedRef = useLatest(parsed);\n\n const attachedTargetRef = useRef<EventTarget | null>(null);\n const listenerRef = useRef<((event: Event) => void) | null>(null);\n\n // Runs every render so a ref whose `.current` becomes available after the\n // first render (conditional rendering, lazy children) is picked up. The\n // identity check on the resolved target keeps re-attaches limited to the\n // moments the underlying element actually changes.\n useEffect(() => {\n const desired = enabled && parsed !== null ? resolveTarget(target) : null;\n if (desired === attachedTargetRef.current) return;\n\n if (attachedTargetRef.current && listenerRef.current) {\n attachedTargetRef.current.removeEventListener(\n 'keydown',\n listenerRef.current\n );\n }\n attachedTargetRef.current = desired;\n if (desired === null) {\n listenerRef.current = null;\n return;\n }\n\n const listener = (event: Event) => {\n const ke = event as KeyboardEvent;\n const opts = optionsRef.current;\n const p = parsedRef.current;\n if (p === null || !opts.enabled) return;\n if (!matches(p, ke)) return;\n if (!opts.enableInInputs && isEditableTarget(ke.target)) return;\n\n if (opts.preventDefault) ke.preventDefault();\n handlerRef.current(ke);\n if (opts.stopPropagation) ke.stopPropagation();\n };\n listenerRef.current = listener;\n desired.addEventListener('keydown', listener);\n });\n\n useEffect(\n () => () => {\n if (attachedTargetRef.current && listenerRef.current) {\n attachedTargetRef.current.removeEventListener(\n 'keydown',\n listenerRef.current\n );\n }\n attachedTargetRef.current = null;\n listenerRef.current = null;\n },\n []\n );\n}\n"],"names":[],"mappings":";;;;;AAUA;AACE;AAEE;;AAGJ;AAEA;AACE;AACE;;;AAEmB;;;AAErB;AACF;AAWA;AAEA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGF;AACE;AACA;AACF;AAEA;AACE;AACA;AAAwB;AAExB;AACA;;;;;;AAQA;AACE;AACA;;AAEI;;;AAGA;;;;;;;;;AAQA;;;AAGA;AACA;;;AAGA;;;;;;AAKF;;;;AAIc;;AAEpB;AAEA;AACE;AAAsC;;AACR;AAC9B;AACA;;;AAGE;;;;;;;;;;AAUC;AACD;;AAEF;AACF;AAEA;AACE;AAAmC;AACnC;AAAmC;AACnC;AAAiC;AACjC;AAAqC;;AAGrC;AACF;AAEA;;;;;;;;;;;;;;;;;AAiBG;AACG;;;;AAeJ;;;;;;AAMC;AAED;AACA;AAEA;AACA;;;;;;AAOE;AACA;;;;;AAQA;AACA;AACE;;;AAIF;;AAEE;AACA;AACA;;AACA;;;;;;AAIA;;;AAEF;AACA;AACA;AACF;AAEA;;;;AAQI;AACA;;AAIN;;"}
|
|
@@ -54,6 +54,8 @@ function useIntersectionObserver(options = {}) {
|
|
|
54
54
|
observerRef.current.disconnect();
|
|
55
55
|
observerRef.current = null;
|
|
56
56
|
}
|
|
57
|
+
// Sync state to the external observer being torn down when disabled.
|
|
58
|
+
// eslint-disable-next-line react-hooks/set-state-in-effect
|
|
57
59
|
setEntry(null);
|
|
58
60
|
}, [enabled]);
|
|
59
61
|
// Final cleanup on unmount.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useIntersectionObserver.js","sources":["
|
|
1
|
+
{"version":3,"file":"useIntersectionObserver.js","sources":["src/hooks/useIntersectionObserver/useIntersectionObserver.ts"],"sourcesContent":["'use client';\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport type {\n UseIntersectionObserverOptions,\n UseIntersectionObserverReturn,\n} from './useIntersectionObserver.types';\nimport type React from 'react';\n\n/**\n * Observe whether an element intersects a root (defaults to the viewport).\n * Returns a ref callback to attach to the observed element plus the latest\n * `IntersectionObserverEntry`. SSR-safe: returns a no-op ref and `null`\n * entry when `IntersectionObserver` is unavailable.\n *\n * @example\n * ```tsx\n * const { ref, isIntersecting } = useIntersectionObserver<HTMLDivElement>({\n * rootMargin: '200px',\n * });\n * useEffect(() => {\n * if (isIntersecting) loadMore();\n * }, [isIntersecting]);\n * return <div ref={ref} />;\n * ```\n */\nexport function useIntersectionObserver<T extends Element = Element>(\n options: UseIntersectionObserverOptions = {}\n): UseIntersectionObserverReturn<T> {\n const { root, rootMargin, threshold, enabled = true } = options;\n\n const [entry, setEntry] = useState<IntersectionObserverEntry | null>(null);\n const observerRef = useRef<IntersectionObserver | null>(null);\n const nodeRef = useRef<T | null>(null);\n\n const ref = useCallback<React.RefCallback<T>>(\n node => {\n if (typeof IntersectionObserver === 'undefined') {\n nodeRef.current = node;\n return;\n }\n\n if (observerRef.current) {\n observerRef.current.disconnect();\n observerRef.current = null;\n }\n\n nodeRef.current = node;\n if (!enabled || !node) {\n setEntry(null);\n return;\n }\n\n const observer = new IntersectionObserver(\n entries => {\n const next = entries[0];\n if (next) setEntry(next);\n },\n { root: root ?? null, rootMargin, threshold }\n );\n observer.observe(node);\n observerRef.current = observer;\n },\n [root, rootMargin, threshold, enabled]\n );\n\n // When toggled off via `enabled`, disconnect proactively so consumers don't\n // have to detach the ref to stop observing.\n useEffect(() => {\n if (enabled) return;\n if (observerRef.current) {\n observerRef.current.disconnect();\n observerRef.current = null;\n }\n // Sync state to the external observer being torn down when disabled.\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setEntry(null);\n }, [enabled]);\n\n // Final cleanup on unmount.\n useEffect(\n () => () => {\n observerRef.current?.disconnect();\n observerRef.current = null;\n nodeRef.current = null;\n },\n []\n );\n\n return {\n ref,\n entry,\n isIntersecting: entry?.isIntersecting ?? false,\n };\n}\n"],"names":[],"mappings":";;;AAUA;;;;;;;;;;;;;;;;AAgBG;AACG;AAGJ;;AAGA;AACA;AAEA;AAEI;AACE;;;AAIF;AACE;AACA;;AAGF;AACA;;;;AAKA;AAEI;AACA;;AACF;AAGF;AACA;;;;;AAQF;;AACA;AACE;AACA;;;;;AAKJ;;AAGA;AAEI;AACA;AACA;;;;;AAQF;;AAEJ;;"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useRef, useEffect, useCallback } from 'react';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Returns a stable getter that reports whether the component is still
|
|
6
|
+
* mounted. Call it inside async continuations (promises, timers, fetches)
|
|
7
|
+
* before committing state, so a resolution that lands after unmount becomes
|
|
8
|
+
* a no-op instead of a "set state on an unmounted component" warning.
|
|
9
|
+
*
|
|
10
|
+
* The getter identity is stable for the component lifetime, so it is safe to
|
|
11
|
+
* include in — or omit from — dependency arrays without churn. It reports
|
|
12
|
+
* `false` until the mount effect commits and `false` again after unmount,
|
|
13
|
+
* which also covers the double mount/unmount of React StrictMode.
|
|
14
|
+
*
|
|
15
|
+
* Prefer real cancellation (`AbortController`, effect cleanup) where the
|
|
16
|
+
* async source supports it; reach for this only when the source cannot be
|
|
17
|
+
* cancelled.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```tsx
|
|
21
|
+
* const isMounted = useIsMounted();
|
|
22
|
+
* useEffect(() => {
|
|
23
|
+
* void load().then(data => {
|
|
24
|
+
* if (isMounted()) setData(data);
|
|
25
|
+
* });
|
|
26
|
+
* }, [isMounted]);
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
function useIsMounted() {
|
|
30
|
+
const mountedRef = useRef(false);
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
mountedRef.current = true;
|
|
33
|
+
return () => {
|
|
34
|
+
mountedRef.current = false;
|
|
35
|
+
};
|
|
36
|
+
}, []);
|
|
37
|
+
// Reading `mountedRef.current` happens only when the getter is invoked from
|
|
38
|
+
// an async continuation or effect — never during render.
|
|
39
|
+
return useCallback(() => mountedRef.current, []);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export { useIsMounted };
|
|
43
|
+
//# sourceMappingURL=useIsMounted.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useIsMounted.js","sources":["src/hooks/useIsMounted/useIsMounted.ts"],"sourcesContent":["'use client';\n\nimport { useCallback, useEffect, useRef } from 'react';\n\n/**\n * Returns a stable getter that reports whether the component is still\n * mounted. Call it inside async continuations (promises, timers, fetches)\n * before committing state, so a resolution that lands after unmount becomes\n * a no-op instead of a \"set state on an unmounted component\" warning.\n *\n * The getter identity is stable for the component lifetime, so it is safe to\n * include in — or omit from — dependency arrays without churn. It reports\n * `false` until the mount effect commits and `false` again after unmount,\n * which also covers the double mount/unmount of React StrictMode.\n *\n * Prefer real cancellation (`AbortController`, effect cleanup) where the\n * async source supports it; reach for this only when the source cannot be\n * cancelled.\n *\n * @example\n * ```tsx\n * const isMounted = useIsMounted();\n * useEffect(() => {\n * void load().then(data => {\n * if (isMounted()) setData(data);\n * });\n * }, [isMounted]);\n * ```\n */\nexport function useIsMounted(): () => boolean {\n const mountedRef = useRef(false);\n\n useEffect(() => {\n mountedRef.current = true;\n return () => {\n mountedRef.current = false;\n };\n }, []);\n\n // Reading `mountedRef.current` happens only when the getter is invoked from\n // an async continuation or effect — never during render.\n return useCallback(() => mountedRef.current, []);\n}\n"],"names":[],"mappings":";;;AAIA;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;;AAED;;AAGE;AACA;AACE;AACF;;;;;AAMJ;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useKeyboard.js","sources":["
|
|
1
|
+
{"version":3,"file":"useKeyboard.js","sources":["src/hooks/useKeyboard/useKeyboard.tsx"],"sourcesContent":["'use client';\n\n// src/hooks/useKeyboard.ts\nimport { useEffect, useState, useCallback, useMemo } from 'react';\n\nimport { updateState, mapInnerStateToState } from './utils';\n\nimport type { KeyboardState, KeyboardInnerState, AllKeys } from './types';\n\nexport type { ModifierKeys, KeyboardState, AllKeys } from './types';\nexport { isKeyPressed, isModifierKey } from './utils';\n\n/**\n * Hook for tracking keyboard state including modifier keys and pressed keys.\n *\n * Useful for components that need to respond to keyboard modifiers like\n * Ctrl+drag for snapping, Shift+drag for precision, etc.\n * @returns Current keyboard state\n *\n * @example\n * ```tsx\n * // Track all keys and modifiers\n * const keyboard = useKeyboard();\n *\n * const handleMouseMove = (e: MouseEvent) => {\n * if (keyboard.ctrl) {\n * // Snap to grid\n * } else if (keyboard.shift) {\n * // Precision mode\n * }\n * };\n *\n * // Track only specific keys\n * const keyboard = useKeyboard({\n * trackAllKeys: false,\n * trackedKeys: ['Space', 'Enter', 'Escape']\n * });\n *\n * // Check if specific key is pressed\n * const isSpacePressed = keyboard.pressedKeys.includes('Space');\n * ```\n */\nexport const useKeyboard = (): KeyboardState => {\n const [keyboardState, setKeyboardState] = useState<KeyboardInnerState>(\n new Set<AllKeys>()\n );\n\n const handleKeyDown = useCallback((event: KeyboardEvent) => {\n setKeyboardState(prevState => updateState(prevState, event));\n }, []);\n\n const handleKeyUp = useCallback((event: KeyboardEvent) => {\n setKeyboardState(prevState => updateState(prevState, event));\n }, []);\n\n useEffect(() => {\n window.addEventListener('keydown', handleKeyDown);\n window.addEventListener('keyup', handleKeyUp);\n\n return () => {\n window.removeEventListener('keydown', handleKeyDown);\n window.removeEventListener('keyup', handleKeyUp);\n };\n }, [handleKeyDown, handleKeyUp]);\n\n return useMemo(() => mapInnerStateToState(keyboardState), [keyboardState]);\n};\n"],"names":[],"mappings":";;;;;AAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BG;AACI;AACL;AAIA;AACE;;AAGF;AACE;;;AAIA;AACA;AAEA;AACE;AACA;AACF;AACF;AAEA;AACF;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["src/hooks/useKeyboard/utils.ts"],"sourcesContent":["import { devWarn } from '@/utils/devWarn';\n\nimport {\n KeyboardState,\n KeyboardInnerState,\n AllKeys,\n ModifierKeys,\n} from './types';\n\nexport const isModifierKey = (key: string): key is ModifierKeys => {\n return ['ctrl', 'shift', 'alt', 'meta', 'control'].includes(key);\n};\n\nconst KeypressUpdate = (\n prevState: KeyboardInnerState,\n key: AllKeys\n): KeyboardInnerState => {\n if (prevState.has(key)) {\n return prevState;\n }\n const newState = new Set(prevState);\n newState.add(key);\n return newState;\n};\n\nconst KeyReleaseUpdate = (\n prevState: KeyboardInnerState,\n key: AllKeys\n): KeyboardInnerState => {\n if (!prevState.has(key)) {\n return prevState;\n }\n const newState = new Set(prevState);\n newState.delete(key);\n return newState;\n};\n\nexport const updateState = (\n prevState: KeyboardInnerState,\n event: KeyboardEvent\n): KeyboardInnerState => {\n const key = event.key.toLowerCase();\n const eventType = event.type;\n switch (eventType) {\n case 'keydown':\n return KeypressUpdate(prevState, key);\n case 'keyup':\n return KeyReleaseUpdate(prevState, key);\n default:\n devWarn(`Unhandled event type: ${eventType}`);\n return prevState;\n }\n};\n\nexport const mapInnerStateToState = (\n innerState: KeyboardInnerState\n): KeyboardState => {\n const modifiers: KeyboardState['modifiers'] = {\n control: innerState.has('control') || innerState.has('ctrl'),\n shift: innerState.has('shift'),\n alt: innerState.has('alt'),\n meta: innerState.has('meta'),\n };\n const pressedKeys = Array.from(innerState).filter(key => !isModifierKey(key));\n return {\n pressedKeys,\n modifiers,\n };\n};\n\nexport const isKeyPressed = (\n keyboardState: KeyboardState,\n key: AllKeys\n): boolean => {\n if (isModifierKey(key)) {\n return keyboardState.modifiers[key];\n }\n return keyboardState.pressedKeys.includes(key);\n};\n"],"names":[],"mappings":";;AASO,MAAM,aAAa,GAAG,CAAC,GAAW,KAAyB;AAChE,IAAA,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;AAClE;AAEA,MAAM,cAAc,GAAG,CACrB,SAA6B,EAC7B,GAAY,KACU;AACtB,IAAA,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACtB,QAAA,OAAO,SAAS;IAClB;AACA,IAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC;AACnC,IAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;AACjB,IAAA,OAAO,QAAQ;AACjB,CAAC;AAED,MAAM,gBAAgB,GAAG,CACvB,SAA6B,EAC7B,GAAY,KACU;IACtB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACvB,QAAA,OAAO,SAAS;IAClB;AACA,IAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC;AACnC,IAAA,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;AACpB,IAAA,OAAO,QAAQ;AACjB,CAAC;MAEY,WAAW,GAAG,CACzB,SAA6B,EAC7B,KAAoB,KACE;IACtB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE;AACnC,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI;IAC5B,QAAQ,SAAS;AACf,QAAA,KAAK,SAAS;AACZ,YAAA,OAAO,cAAc,CAAC,SAAS,EAAE,GAAG,CAAC;AACvC,QAAA,KAAK,OAAO;AACV,YAAA,OAAO,gBAAgB,CAAC,SAAS,EAAE,GAAG,CAAC;AACzC,QAAA;AACE,YAAA,OAAO,CAAC,CAAA,sBAAA,EAAyB,SAAS,CAAA,CAAE,CAAC;AAC7C,YAAA,OAAO,SAAS;;AAEtB;AAEO,MAAM,oBAAoB,GAAG,CAClC,UAA8B,KACb;AACjB,IAAA,MAAM,SAAS,GAA+B;AAC5C,QAAA,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;AAC5D,QAAA,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;AAC9B,QAAA,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;KAC7B;IACD,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC7E,OAAO;QACL,WAAW;QACX,SAAS;KACV;AACH;MAEa,YAAY,GAAG,CAC1B,aAA4B,EAC5B,GAAY,KACD;AACX,IAAA,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE;AACtB,QAAA,OAAO,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC;IACrC;IACA,OAAO,aAAa,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC;AAChD;;;;"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useRef, useEffect } from 'react';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Keep a ref synced to the latest value of `value` after each render.
|
|
6
|
+
*
|
|
7
|
+
* Useful for reading "live" props/state inside event handlers, timers,
|
|
8
|
+
* or external store subscriptions without re-attaching the listener on
|
|
9
|
+
* every render. The ref is updated in `useEffect` so its value reflects
|
|
10
|
+
* the most recently committed render.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* const latestOnChange = useLatest(onChange);
|
|
15
|
+
* useEffect(() => {
|
|
16
|
+
* const handler = (e: Event) => latestOnChange.current(e);
|
|
17
|
+
* target.addEventListener('change', handler);
|
|
18
|
+
* return () => target.removeEventListener('change', handler);
|
|
19
|
+
* }, [target]);
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
function useLatest(value) {
|
|
23
|
+
const ref = useRef(value);
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
ref.current = value;
|
|
26
|
+
});
|
|
27
|
+
return ref;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export { useLatest };
|
|
31
|
+
//# sourceMappingURL=useLatest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLatest.js","sources":["src/hooks/useLatest/useLatest.ts"],"sourcesContent":["'use client';\n\nimport { useEffect, useRef } from 'react';\n\nimport type { RefObject } from 'react';\n\n/**\n * Keep a ref synced to the latest value of `value` after each render.\n *\n * Useful for reading \"live\" props/state inside event handlers, timers,\n * or external store subscriptions without re-attaching the listener on\n * every render. The ref is updated in `useEffect` so its value reflects\n * the most recently committed render.\n *\n * @example\n * ```ts\n * const latestOnChange = useLatest(onChange);\n * useEffect(() => {\n * const handler = (e: Event) => latestOnChange.current(e);\n * target.addEventListener('change', handler);\n * return () => target.removeEventListener('change', handler);\n * }, [target]);\n * ```\n */\nexport function useLatest<T>(value: T): RefObject<T> {\n const ref = useRef(value);\n useEffect(() => {\n ref.current = value;\n });\n return ref;\n}\n"],"names":[],"mappings":";;;AAMA;;;;;;;;;;;;;;;;;AAiBG;AACG;AACJ;;AAEE;AACF;AACA;AACF;;"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { useState, useRef, useEffect, useCallback } from 'react';
|
|
2
|
+
import { useState, useRef, useEffect, useCallback, useMemo } from 'react';
|
|
3
|
+
import { useEventCallback } from '../useEventCallback/useEventCallback.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* Shared keyboard navigation for listbox-like surfaces (Select, MultiSelect,
|
|
@@ -28,7 +29,6 @@ function useListboxNav(options) {
|
|
|
28
29
|
const itemsRef = useRef(items);
|
|
29
30
|
const isItemDisabledRef = useRef(isItemDisabled);
|
|
30
31
|
const onSelectRef = useRef(onSelect);
|
|
31
|
-
const onEscapeRef = useRef(onEscape);
|
|
32
32
|
const loopRef = useRef(loop);
|
|
33
33
|
useEffect(() => {
|
|
34
34
|
itemsRef.current = items;
|
|
@@ -39,9 +39,6 @@ function useListboxNav(options) {
|
|
|
39
39
|
useEffect(() => {
|
|
40
40
|
onSelectRef.current = onSelect;
|
|
41
41
|
}, [onSelect]);
|
|
42
|
-
useEffect(() => {
|
|
43
|
-
onEscapeRef.current = onEscape;
|
|
44
|
-
}, [onEscape]);
|
|
45
42
|
useEffect(() => {
|
|
46
43
|
loopRef.current = loop;
|
|
47
44
|
}, [loop]);
|
|
@@ -68,6 +65,20 @@ function useListboxNav(options) {
|
|
|
68
65
|
}
|
|
69
66
|
return out;
|
|
70
67
|
}, []);
|
|
68
|
+
// Reactive navigable-index list for the returned value. Derived from the
|
|
69
|
+
// live props rather than the latest-refs above, which exist only for reads
|
|
70
|
+
// inside the event-time keyboard handlers.
|
|
71
|
+
const navigableIndices = useMemo(() => {
|
|
72
|
+
if (!isItemDisabled)
|
|
73
|
+
return items.map((_, i) => i);
|
|
74
|
+
const out = [];
|
|
75
|
+
for (let i = 0; i < items.length; i += 1) {
|
|
76
|
+
const item = items[i];
|
|
77
|
+
if (!isItemDisabled(item, i))
|
|
78
|
+
out.push(i);
|
|
79
|
+
}
|
|
80
|
+
return out;
|
|
81
|
+
}, [items, isItemDisabled]);
|
|
71
82
|
const move = useCallback((direction) => {
|
|
72
83
|
const navigable = getNavigableIndices();
|
|
73
84
|
if (navigable.length === 0) {
|
|
@@ -131,6 +142,16 @@ function useListboxNav(options) {
|
|
|
131
142
|
return current;
|
|
132
143
|
});
|
|
133
144
|
}, []);
|
|
145
|
+
// Escape handling via useEventCallback: stable identity (so handleKeyDown
|
|
146
|
+
// does not churn when callers pass an inline onEscape) while always seeing
|
|
147
|
+
// the latest onEscape and reporting whether it actually handled the key.
|
|
148
|
+
const handleEscape = useEventCallback((event) => {
|
|
149
|
+
if (!onEscape)
|
|
150
|
+
return false;
|
|
151
|
+
event.preventDefault();
|
|
152
|
+
onEscape();
|
|
153
|
+
return true;
|
|
154
|
+
});
|
|
134
155
|
const handleKeyDown = useCallback((event) => {
|
|
135
156
|
switch (event.key) {
|
|
136
157
|
case 'ArrowDown':
|
|
@@ -154,16 +175,11 @@ function useListboxNav(options) {
|
|
|
154
175
|
selectActive();
|
|
155
176
|
return true;
|
|
156
177
|
case 'Escape':
|
|
157
|
-
|
|
158
|
-
event.preventDefault();
|
|
159
|
-
onEscapeRef.current();
|
|
160
|
-
return true;
|
|
161
|
-
}
|
|
162
|
-
return false;
|
|
178
|
+
return handleEscape(event);
|
|
163
179
|
default:
|
|
164
180
|
return false;
|
|
165
181
|
}
|
|
166
|
-
}, [next, prev, first, last, selectActive]);
|
|
182
|
+
}, [next, prev, first, last, selectActive, handleEscape]);
|
|
167
183
|
return {
|
|
168
184
|
activeIndex,
|
|
169
185
|
setActiveIndex,
|
|
@@ -173,7 +189,7 @@ function useListboxNav(options) {
|
|
|
173
189
|
last,
|
|
174
190
|
selectActive,
|
|
175
191
|
handleKeyDown,
|
|
176
|
-
navigableIndices
|
|
192
|
+
navigableIndices,
|
|
177
193
|
};
|
|
178
194
|
}
|
|
179
195
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useListboxNav.js","sources":["
|
|
1
|
+
{"version":3,"file":"useListboxNav.js","sources":["src/hooks/useListboxNav/useListboxNav.ts"],"sourcesContent":["'use client';\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { useEventCallback } from '@/hooks/useEventCallback';\n\nimport type React from 'react';\n\nexport interface UseListboxNavOptions<T> {\n /** Items rendered in the listbox. The hook tracks navigation by index. */\n items: T[];\n\n /**\n * Whether a given item should be skipped during navigation and rejected by\n * `selectActive()`.\n */\n isItemDisabled?: (item: T, index: number) => boolean;\n\n /** Initial active index. Defaults to `-1` (no active item). */\n defaultActiveIndex?: number;\n\n /**\n * Wrap from last → first (and vice versa) on `next`/`prev`.\n * @default true\n */\n loop?: boolean;\n\n /**\n * Reset the active index when the items array changes by reference.\n * Useful for filtered listboxes where the previous index would be stale.\n * @default true\n */\n resetOnItemsChange?: boolean;\n\n /** Called when the active item is committed via `selectActive()`. */\n onSelect?: (item: T, index: number) => void;\n\n /** Called on `Escape`. */\n onEscape?: () => void;\n}\n\nexport interface UseListboxNavReturn {\n /** Currently active index, or `-1` when none. */\n activeIndex: number;\n /** Direct setter; the value is not validated. */\n setActiveIndex: (index: number) => void;\n /** Move to the next non-disabled item. */\n next: () => void;\n /** Move to the previous non-disabled item. */\n prev: () => void;\n /** Activate the first non-disabled item. */\n first: () => void;\n /** Activate the last non-disabled item. */\n last: () => void;\n /** Commit the active item via `onSelect`. */\n selectActive: () => void;\n /**\n * Single keyboard handler for ArrowUp/Down/Home/End/Enter/Escape. Returns\n * `true` when the event was handled (and `preventDefault` was called).\n */\n handleKeyDown: (event: KeyboardEvent | React.KeyboardEvent) => boolean;\n /** Snapshot of the navigable indices (non-disabled, in order). */\n navigableIndices: number[];\n}\n\n/**\n * Shared keyboard navigation for listbox-like surfaces (Select, MultiSelect,\n * Combobox, CommandPalette). Tracks an `activeIndex`, skips disabled items,\n * and exposes a single `handleKeyDown` covering Arrow / Home / End / Enter /\n * Escape semantics.\n *\n * The hook is purely logical — consumers render the list and bind the handler\n * to an input or the listbox container. Scroll-into-view is the consumer's\n * concern.\n *\n * @example\n * ```tsx\n * const { activeIndex, handleKeyDown } = useListboxNav({\n * items: filtered,\n * isItemDisabled: o => o.disabled ?? false,\n * onSelect: (item) => commit(item),\n * onEscape: () => close(),\n * });\n * ```\n */\nexport function useListboxNav<T>(\n options: UseListboxNavOptions<T>\n): UseListboxNavReturn {\n const {\n items,\n isItemDisabled,\n defaultActiveIndex = -1,\n loop = true,\n resetOnItemsChange = true,\n onSelect,\n onEscape,\n } = options;\n\n const [activeIndex, setActiveIndex] = useState(defaultActiveIndex);\n\n // Stable refs so handlers don't churn when callers pass inline closures.\n const itemsRef = useRef(items);\n const isItemDisabledRef = useRef(isItemDisabled);\n const onSelectRef = useRef(onSelect);\n const loopRef = useRef(loop);\n\n useEffect(() => {\n itemsRef.current = items;\n }, [items]);\n useEffect(() => {\n isItemDisabledRef.current = isItemDisabled;\n }, [isItemDisabled]);\n useEffect(() => {\n onSelectRef.current = onSelect;\n }, [onSelect]);\n useEffect(() => {\n loopRef.current = loop;\n }, [loop]);\n\n // Reset active index when items reference changes (e.g. filter).\n const prevItemsRef = useRef(items);\n useEffect(() => {\n if (!resetOnItemsChange) return;\n if (prevItemsRef.current !== items) {\n setActiveIndex(defaultActiveIndex);\n prevItemsRef.current = items;\n }\n }, [items, resetOnItemsChange, defaultActiveIndex]);\n\n const getNavigableIndices = useCallback((): number[] => {\n const list = itemsRef.current;\n const disabled = isItemDisabledRef.current;\n if (!disabled) return list.map((_, i) => i);\n const out: number[] = [];\n for (let i = 0; i < list.length; i += 1) {\n const item = list[i] as T;\n if (!disabled(item, i)) out.push(i);\n }\n return out;\n }, []);\n\n // Reactive navigable-index list for the returned value. Derived from the\n // live props rather than the latest-refs above, which exist only for reads\n // inside the event-time keyboard handlers.\n const navigableIndices = useMemo(() => {\n if (!isItemDisabled) return items.map((_, i) => i);\n const out: number[] = [];\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i] as T;\n if (!isItemDisabled(item, i)) out.push(i);\n }\n return out;\n }, [items, isItemDisabled]);\n\n const move = useCallback(\n (direction: 'next' | 'prev' | 'first' | 'last') => {\n const navigable = getNavigableIndices();\n if (navigable.length === 0) {\n setActiveIndex(-1);\n return;\n }\n\n setActiveIndex(current => {\n const currentNavIdx = navigable.indexOf(current);\n switch (direction) {\n case 'first':\n return navigable[0] ?? -1;\n case 'last':\n return navigable[navigable.length - 1] ?? -1;\n case 'next': {\n if (currentNavIdx === -1) return navigable[0] ?? -1;\n const nextIdx = currentNavIdx + 1;\n if (nextIdx >= navigable.length) {\n return loopRef.current\n ? (navigable[0] ?? -1)\n : (navigable[navigable.length - 1] ?? -1);\n }\n return navigable[nextIdx] ?? -1;\n }\n case 'prev': {\n if (currentNavIdx === -1)\n return navigable[navigable.length - 1] ?? -1;\n const prevIdx = currentNavIdx - 1;\n if (prevIdx < 0) {\n return loopRef.current\n ? (navigable[navigable.length - 1] ?? -1)\n : (navigable[0] ?? -1);\n }\n return navigable[prevIdx] ?? -1;\n }\n }\n });\n },\n [getNavigableIndices]\n );\n\n const next = useCallback(() => {\n move('next');\n }, [move]);\n const prev = useCallback(() => {\n move('prev');\n }, [move]);\n const first = useCallback(() => {\n move('first');\n }, [move]);\n const last = useCallback(() => {\n move('last');\n }, [move]);\n\n const selectActive = useCallback(() => {\n const list = itemsRef.current;\n const disabled = isItemDisabledRef.current;\n setActiveIndex(current => {\n if (current < 0 || current >= list.length) return current;\n const item = list[current] as T;\n if (disabled?.(item, current)) return current;\n onSelectRef.current?.(item, current);\n return current;\n });\n }, []);\n\n // Escape handling via useEventCallback: stable identity (so handleKeyDown\n // does not churn when callers pass an inline onEscape) while always seeing\n // the latest onEscape and reporting whether it actually handled the key.\n const handleEscape = useEventCallback(\n (event: KeyboardEvent | React.KeyboardEvent): boolean => {\n if (!onEscape) return false;\n event.preventDefault();\n onEscape();\n return true;\n }\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent | React.KeyboardEvent): boolean => {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n next();\n return true;\n case 'ArrowUp':\n event.preventDefault();\n prev();\n return true;\n case 'Home':\n event.preventDefault();\n first();\n return true;\n case 'End':\n event.preventDefault();\n last();\n return true;\n case 'Enter':\n event.preventDefault();\n selectActive();\n return true;\n case 'Escape':\n return handleEscape(event);\n default:\n return false;\n }\n },\n [next, prev, first, last, selectActive, handleEscape]\n );\n\n return {\n activeIndex,\n setActiveIndex,\n next,\n prev,\n first,\n last,\n selectActive,\n handleKeyDown,\n navigableIndices,\n };\n}\n"],"names":[],"mappings":";;;;AAiEA;;;;;;;;;;;;;;;;;;;AAmBG;AACG;;;;AAgBJ;AACA;AACA;AACA;;AAGE;AACF;;AAEE;AACF;;AAEE;AACF;;AAEE;AACF;;AAGA;;AAEE;;AACA;;AAEE;;;AAIJ;AACE;AACA;AACA;AAAe;;AAEf;AACE;AACA;AAAwB;;AAE1B;;;;;AAMF;AACE;AAAqB;;AAErB;AACE;AACA;AAA8B;;AAEhC;AACF;AAEA;AAEI;AACA;AACE;;;;;;AAOE;AACE;AACF;;;;AAG4B;AAC1B;AACA;;;AAGI;;AAEJ;;;;;AAKA;AACA;;AAEI;;;AAGJ;;;AAGN;AACF;AAIF;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AAEA;AACE;AACA;;;AAE6C;AAC3C;AACA;AAA+B;;AAE/B;AACF;;;;;AAMF;AAEI;AAAe;;AAEf;AACA;AACF;AAGF;AAEI;AACE;;AAEE;AACA;AACF;;AAEE;AACA;AACF;;AAEE;AACA;AACF;;AAEE;AACA;AACF;;AAEE;AACA;AACF;AACE;AACF;AACE;;AAEN;;;;;;;;;;;;AAeJ;;"}
|
|
@@ -31,6 +31,8 @@ function useMediaQuery(query, options = {}) {
|
|
|
31
31
|
return;
|
|
32
32
|
}
|
|
33
33
|
const mql = window.matchMedia(query);
|
|
34
|
+
// External-system sync: seed state from matchMedia on mount/query change.
|
|
35
|
+
// eslint-disable-next-line react-hooks/set-state-in-effect
|
|
34
36
|
setMatches(mql.matches);
|
|
35
37
|
const handler = (event) => {
|
|
36
38
|
setMatches(event.matches);
|
|
@@ -41,9 +43,13 @@ function useMediaQuery(query, options = {}) {
|
|
|
41
43
|
mql.removeEventListener('change', handler);
|
|
42
44
|
};
|
|
43
45
|
}
|
|
44
|
-
// Legacy Safari fallback
|
|
46
|
+
// Legacy Safari fallback, reached only when the modern addEventListener
|
|
47
|
+
// API above is unavailable. addListener/removeListener are deprecated but
|
|
48
|
+
// remain the only option on those older engines.
|
|
49
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
45
50
|
mql.addListener(handler);
|
|
46
51
|
return () => {
|
|
52
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
47
53
|
mql.removeListener(handler);
|
|
48
54
|
};
|
|
49
55
|
}, [query]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMediaQuery.js","sources":["
|
|
1
|
+
{"version":3,"file":"useMediaQuery.js","sources":["src/hooks/useMediaQuery/useMediaQuery.ts"],"sourcesContent":["'use client';\n\nimport { useEffect, useState } from 'react';\n\nimport type { UseMediaQueryOptions } from './useMediaQuery.types';\n\nfunction getInitialMatch(query: string, fallback: boolean): boolean {\n if (\n typeof window === 'undefined' ||\n typeof window.matchMedia !== 'function'\n ) {\n return fallback;\n }\n return window.matchMedia(query).matches;\n}\n\n/**\n * Reactive media query matching.\n *\n * Returns `true` when the current viewport matches the query and updates as\n * the viewport changes. SSR-safe — returns `defaultMatches` when `matchMedia`\n * is unavailable. Uses the modern `addEventListener('change')` API with a\n * fallback to the legacy `addListener` for older browsers.\n *\n * @example\n * ```tsx\n * const isWide = useMediaQuery('(min-width: 768px)');\n * return isWide ? <DesktopLayout /> : <MobileLayout />;\n * ```\n */\nexport function useMediaQuery(\n query: string,\n options: UseMediaQueryOptions = {}\n): boolean {\n const { defaultMatches = false } = options;\n\n const [matches, setMatches] = useState<boolean>(() =>\n getInitialMatch(query, defaultMatches)\n );\n\n useEffect(() => {\n if (\n typeof window === 'undefined' ||\n typeof window.matchMedia !== 'function'\n ) {\n return;\n }\n\n const mql = window.matchMedia(query);\n // External-system sync: seed state from matchMedia on mount/query change.\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setMatches(mql.matches);\n\n const handler = (event: MediaQueryListEvent): void => {\n setMatches(event.matches);\n };\n\n if (typeof mql.addEventListener === 'function') {\n mql.addEventListener('change', handler);\n return () => {\n mql.removeEventListener('change', handler);\n };\n }\n\n // Legacy Safari fallback, reached only when the modern addEventListener\n // API above is unavailable. addListener/removeListener are deprecated but\n // remain the only option on those older engines.\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n mql.addListener(handler);\n return () => {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n mql.removeListener(handler);\n };\n }, [query]);\n\n return matches;\n}\n"],"names":[],"mappings":";;;AAMA;;AAGI;AAEA;;;AAGJ;AAEA;;;;;;;;;;;;;AAaG;;AAKD;AAEA;;;AAOI;;;;;;AAQF;AAEA;AACE;AACF;AAEA;AACE;AACA;AACE;AACF;;;;;;AAOF;AACA;;AAEE;AACF;AACF;AAEA;AACF;;"}
|
|
@@ -20,7 +20,8 @@ import { useCallback } from 'react';
|
|
|
20
20
|
*/
|
|
21
21
|
function useMergedRef(...refs) {
|
|
22
22
|
// The spread of refs is intentional — the merged callback must pick up the
|
|
23
|
-
// latest set of refs the consumer is passing in
|
|
23
|
+
// latest set of refs the consumer is passing in, so the dependency list is
|
|
24
|
+
// dynamic by design (use-memo / exhaustive-deps cannot model that).
|
|
24
25
|
return useCallback((node) => {
|
|
25
26
|
for (const ref of refs) {
|
|
26
27
|
if (!ref)
|
|
@@ -29,9 +30,13 @@ function useMergedRef(...refs) {
|
|
|
29
30
|
ref(node);
|
|
30
31
|
}
|
|
31
32
|
else {
|
|
33
|
+
// Assigning a node into an object ref's `.current` is the entire point
|
|
34
|
+
// of a callback ref; it is not a forbidden mutation of hook arguments.
|
|
35
|
+
// eslint-disable-next-line react-hooks/immutability
|
|
32
36
|
ref.current = node;
|
|
33
37
|
}
|
|
34
38
|
}
|
|
39
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps, react-hooks/use-memo
|
|
35
40
|
}, refs);
|
|
36
41
|
}
|
|
37
42
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMergedRef.js","sources":["
|
|
1
|
+
{"version":3,"file":"useMergedRef.js","sources":["src/hooks/useMergedRef/useMergedRef.ts"],"sourcesContent":["'use client';\n\nimport { useCallback } from 'react';\n\nimport type { Ref, RefCallback } from 'react';\n\n/**\n * Merge multiple refs into a single callback ref. Each provided ref (object\n * ref, callback ref, or `null`/`undefined`) receives the node when the merged\n * ref fires.\n *\n * Useful when a component needs to keep an internal ref to a DOM node while\n * also forwarding the same node through an externally supplied `ref` prop\n * (ref-as-prop in React 19).\n *\n * @example\n * ```tsx\n * const internalRef = useRef<HTMLDivElement>(null);\n * const mergedRef = useMergedRef(internalRef, props.ref);\n *\n * return <div ref={mergedRef} />;\n * ```\n */\nexport function useMergedRef<T>(\n ...refs: Array<Ref<T> | undefined | null>\n): RefCallback<T> {\n // The spread of refs is intentional — the merged callback must pick up the\n // latest set of refs the consumer is passing in, so the dependency list is\n // dynamic by design (use-memo / exhaustive-deps cannot model that).\n return useCallback((node: T | null) => {\n for (const ref of refs) {\n if (!ref) continue;\n if (typeof ref === 'function') {\n ref(node);\n } else {\n // Assigning a node into an object ref's `.current` is the entire point\n // of a callback ref; it is not a forbidden mutation of hook arguments.\n // eslint-disable-next-line react-hooks/immutability\n (ref as { current: T | null }).current = node;\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps, react-hooks/use-memo\n }, refs);\n}\n"],"names":[],"mappings":";;;AAMA;;;;;;;;;;;;;;;;AAgBG;AACG;;;;AAMJ;AACE;AACE;;AACA;;;;;;;AAMG;;;;;AAKT;;"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { __classPrivateFieldGet, __classPrivateFieldSet } from '../../node_modules/tslib/tslib.es6.js';
|
|
3
|
+
import { useState, useSyncExternalStore, useCallback, useMemo } from 'react';
|
|
4
|
+
|
|
5
|
+
var _NavigationHistoryStore_instances, _NavigationHistoryStore_stack, _NavigationHistoryStore_index, _NavigationHistoryStore_listeners, _NavigationHistoryStore_notify;
|
|
6
|
+
/**
|
|
7
|
+
* Per-instance back/forward stack. Lives outside React so reads are stable
|
|
8
|
+
* across concurrent renders and so non-React handlers can mutate without
|
|
9
|
+
* scheduling extra renders for unrelated consumers.
|
|
10
|
+
*/
|
|
11
|
+
class NavigationHistoryStore {
|
|
12
|
+
constructor(initial) {
|
|
13
|
+
_NavigationHistoryStore_instances.add(this);
|
|
14
|
+
_NavigationHistoryStore_stack.set(this, void 0);
|
|
15
|
+
_NavigationHistoryStore_index.set(this, void 0);
|
|
16
|
+
_NavigationHistoryStore_listeners.set(this, new Set());
|
|
17
|
+
this.subscribe = (listener) => {
|
|
18
|
+
__classPrivateFieldGet(this, _NavigationHistoryStore_listeners, "f").add(listener);
|
|
19
|
+
return () => {
|
|
20
|
+
__classPrivateFieldGet(this, _NavigationHistoryStore_listeners, "f").delete(listener);
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
this.getCurrent = () => __classPrivateFieldGet(this, _NavigationHistoryStore_stack, "f")[__classPrivateFieldGet(this, _NavigationHistoryStore_index, "f")];
|
|
24
|
+
this.getCanGoBack = () => __classPrivateFieldGet(this, _NavigationHistoryStore_index, "f") > 0;
|
|
25
|
+
this.getCanGoForward = () => __classPrivateFieldGet(this, _NavigationHistoryStore_index, "f") < __classPrivateFieldGet(this, _NavigationHistoryStore_stack, "f").length - 1;
|
|
26
|
+
if (initial !== undefined) {
|
|
27
|
+
__classPrivateFieldSet(this, _NavigationHistoryStore_stack, [initial], "f");
|
|
28
|
+
__classPrivateFieldSet(this, _NavigationHistoryStore_index, 0, "f");
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
__classPrivateFieldSet(this, _NavigationHistoryStore_stack, [], "f");
|
|
32
|
+
__classPrivateFieldSet(this, _NavigationHistoryStore_index, -1, "f");
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
push(entry) {
|
|
36
|
+
if (__classPrivateFieldGet(this, _NavigationHistoryStore_stack, "f")[__classPrivateFieldGet(this, _NavigationHistoryStore_index, "f")] === entry)
|
|
37
|
+
return;
|
|
38
|
+
const next = __classPrivateFieldGet(this, _NavigationHistoryStore_stack, "f").slice(0, __classPrivateFieldGet(this, _NavigationHistoryStore_index, "f") + 1);
|
|
39
|
+
next.push(entry);
|
|
40
|
+
__classPrivateFieldSet(this, _NavigationHistoryStore_stack, next, "f");
|
|
41
|
+
__classPrivateFieldSet(this, _NavigationHistoryStore_index, next.length - 1, "f");
|
|
42
|
+
__classPrivateFieldGet(this, _NavigationHistoryStore_instances, "m", _NavigationHistoryStore_notify).call(this);
|
|
43
|
+
}
|
|
44
|
+
goBack() {
|
|
45
|
+
if (__classPrivateFieldGet(this, _NavigationHistoryStore_index, "f") <= 0)
|
|
46
|
+
return undefined;
|
|
47
|
+
__classPrivateFieldSet(this, _NavigationHistoryStore_index, __classPrivateFieldGet(this, _NavigationHistoryStore_index, "f") - 1, "f");
|
|
48
|
+
__classPrivateFieldGet(this, _NavigationHistoryStore_instances, "m", _NavigationHistoryStore_notify).call(this);
|
|
49
|
+
return __classPrivateFieldGet(this, _NavigationHistoryStore_stack, "f")[__classPrivateFieldGet(this, _NavigationHistoryStore_index, "f")];
|
|
50
|
+
}
|
|
51
|
+
goForward() {
|
|
52
|
+
if (__classPrivateFieldGet(this, _NavigationHistoryStore_index, "f") >= __classPrivateFieldGet(this, _NavigationHistoryStore_stack, "f").length - 1)
|
|
53
|
+
return undefined;
|
|
54
|
+
__classPrivateFieldSet(this, _NavigationHistoryStore_index, __classPrivateFieldGet(this, _NavigationHistoryStore_index, "f") + 1, "f");
|
|
55
|
+
__classPrivateFieldGet(this, _NavigationHistoryStore_instances, "m", _NavigationHistoryStore_notify).call(this);
|
|
56
|
+
return __classPrivateFieldGet(this, _NavigationHistoryStore_stack, "f")[__classPrivateFieldGet(this, _NavigationHistoryStore_index, "f")];
|
|
57
|
+
}
|
|
58
|
+
reset(entry) {
|
|
59
|
+
if (entry !== undefined) {
|
|
60
|
+
if (__classPrivateFieldGet(this, _NavigationHistoryStore_stack, "f").length === 1 &&
|
|
61
|
+
__classPrivateFieldGet(this, _NavigationHistoryStore_index, "f") === 0 &&
|
|
62
|
+
__classPrivateFieldGet(this, _NavigationHistoryStore_stack, "f")[0] === entry) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
__classPrivateFieldSet(this, _NavigationHistoryStore_stack, [entry], "f");
|
|
66
|
+
__classPrivateFieldSet(this, _NavigationHistoryStore_index, 0, "f");
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
if (__classPrivateFieldGet(this, _NavigationHistoryStore_stack, "f").length === 0)
|
|
70
|
+
return;
|
|
71
|
+
__classPrivateFieldSet(this, _NavigationHistoryStore_stack, [], "f");
|
|
72
|
+
__classPrivateFieldSet(this, _NavigationHistoryStore_index, -1, "f");
|
|
73
|
+
}
|
|
74
|
+
__classPrivateFieldGet(this, _NavigationHistoryStore_instances, "m", _NavigationHistoryStore_notify).call(this);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
_NavigationHistoryStore_stack = new WeakMap(), _NavigationHistoryStore_index = new WeakMap(), _NavigationHistoryStore_listeners = new WeakMap(), _NavigationHistoryStore_instances = new WeakSet(), _NavigationHistoryStore_notify = function _NavigationHistoryStore_notify() {
|
|
78
|
+
__classPrivateFieldGet(this, _NavigationHistoryStore_listeners, "f").forEach(l => {
|
|
79
|
+
l();
|
|
80
|
+
});
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* Back/forward history primitive. Tracks a stack of entries (`T`) with a
|
|
84
|
+
* cursor, mirrors browser semantics (pushing truncates the forward branch),
|
|
85
|
+
* and exposes the current entry plus `canGoBack` / `canGoForward` flags via
|
|
86
|
+
* `useSyncExternalStore`.
|
|
87
|
+
*
|
|
88
|
+
* Useful any time a UI needs Back/Forward controls over a finite navigation
|
|
89
|
+
* — folder browsers, wizard steps, drill-down inspectors. Generic over the
|
|
90
|
+
* entry type, so it works with ids, paths, route objects, anything stable.
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```tsx
|
|
94
|
+
* const nav = useNavigationHistory<string>({ initial: 'root' });
|
|
95
|
+
*
|
|
96
|
+
* <Toolbar>
|
|
97
|
+
* <IconButton aria-label="Back" disabled={!nav.canGoBack} onClick={nav.goBack}>
|
|
98
|
+
* <ChevronLeftIcon />
|
|
99
|
+
* </IconButton>
|
|
100
|
+
* <IconButton aria-label="Forward" disabled={!nav.canGoForward} onClick={nav.goForward}>
|
|
101
|
+
* <ChevronRightIcon />
|
|
102
|
+
* </IconButton>
|
|
103
|
+
* </Toolbar>
|
|
104
|
+
* ```
|
|
105
|
+
*/
|
|
106
|
+
function useNavigationHistory(options = {}) {
|
|
107
|
+
const { initial, enabled = true } = options;
|
|
108
|
+
// Lazy init via useState — the initial value is captured once on mount.
|
|
109
|
+
// Subsequent changes to `initial` are ignored (use `reset()` to re-seed).
|
|
110
|
+
const [store] = useState(() => new NavigationHistoryStore(initial));
|
|
111
|
+
const current = useSyncExternalStore(store.subscribe, store.getCurrent);
|
|
112
|
+
const canGoBackRaw = useSyncExternalStore(store.subscribe, store.getCanGoBack);
|
|
113
|
+
const canGoForwardRaw = useSyncExternalStore(store.subscribe, store.getCanGoForward);
|
|
114
|
+
const canGoBack = enabled && canGoBackRaw;
|
|
115
|
+
const canGoForward = enabled && canGoForwardRaw;
|
|
116
|
+
const push = useCallback((entry) => {
|
|
117
|
+
if (!enabled)
|
|
118
|
+
return;
|
|
119
|
+
store.push(entry);
|
|
120
|
+
}, [store, enabled]);
|
|
121
|
+
const goBack = useCallback(() => {
|
|
122
|
+
if (!enabled)
|
|
123
|
+
return undefined;
|
|
124
|
+
return store.goBack();
|
|
125
|
+
}, [store, enabled]);
|
|
126
|
+
const goForward = useCallback(() => {
|
|
127
|
+
if (!enabled)
|
|
128
|
+
return undefined;
|
|
129
|
+
return store.goForward();
|
|
130
|
+
}, [store, enabled]);
|
|
131
|
+
const reset = useCallback((entry) => {
|
|
132
|
+
store.reset(entry);
|
|
133
|
+
}, [store]);
|
|
134
|
+
return useMemo(() => ({
|
|
135
|
+
current,
|
|
136
|
+
canGoBack,
|
|
137
|
+
canGoForward,
|
|
138
|
+
push,
|
|
139
|
+
goBack,
|
|
140
|
+
goForward,
|
|
141
|
+
reset,
|
|
142
|
+
}), [current, canGoBack, canGoForward, push, goBack, goForward, reset]);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export { useNavigationHistory };
|
|
146
|
+
//# sourceMappingURL=useNavigationHistory.js.map
|