entangle-ui 0.9.0 → 0.10.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 +694 -0
- package/README.md +1 -1
- package/dist/esm/assets/src/components/controls/FileTree/FileTree.css.ts.vanilla-YmktPvnr.css +48 -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/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/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/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/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/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/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/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/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 +246 -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.js +31 -11
- 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 +36 -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 +7 -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 +134 -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 +130 -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 +220 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserGridItem.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserList.js +183 -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 +114 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserSurface.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserToolbar.js +128 -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 +14 -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/ChatInput.js +4 -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 +4 -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.js +8 -4
- package/dist/esm/components/editor/PropertyInspector/PropertyPanel.js.map +1 -1
- package/dist/esm/components/editor/PropertyInspector/PropertyRow.js +3 -2
- package/dist/esm/components/editor/PropertyInspector/PropertyRow.js.map +1 -1
- package/dist/esm/components/editor/PropertyInspector/PropertySection.js +15 -2
- 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/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/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/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/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 +7 -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 +178 -0
- package/dist/esm/components/navigation/PathBar/PathBar.js.map +1 -0
- package/dist/esm/components/navigation/PathBar/PathBarSiblingMenu.js +145 -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 +5 -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 +4 -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/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/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 +5 -2
- 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 +57 -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/theme/ThemeProvider.js +1 -1
- package/dist/esm/theme/ThemeProvider.js.map +1 -1
- package/dist/esm/theme/contract.css.js +1 -1
- package/dist/esm/theme/createCustomTheme.js +1 -1
- package/dist/esm/theme/createCustomTheme.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/devWarn.js +1 -1
- package/dist/esm/utils/mathExpression.js +1 -1
- package/dist/esm/utils/mathExpression.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/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/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/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/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/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/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.types.d.ts +2 -2
- 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 +2 -2
- 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 +1 -1
- 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/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 +65 -6
- 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 +29 -17
- 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/types/components/navigation/ContextMenu/useContextMenuTarget.d.ts +0 -5
- package/dist/types/components/navigation/Menu/useMenu.d.ts +0 -16
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,699 @@
|
|
|
1
1
|
# entangle-ui
|
|
2
2
|
|
|
3
|
+
## 0.10.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#85](https://github.com/SebastianWebdev/entangle-ui/pull/85) [`9eabab7`](https://github.com/SebastianWebdev/entangle-ui/commit/9eabab77e2a1dc95a6c4a66cbf556a68b1365ff1) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add the `AssetBrowser` flagship component — a controlled content browser for
|
|
8
|
+
files and folders. Toggle between a virtualized thumbnail grid and a
|
|
9
|
+
`DataTable`-backed list, navigate folders via a breadcrumb bar and a `TreeView`
|
|
10
|
+
sidebar, and search, filter, sort, and select assets. Supports single/multiple
|
|
11
|
+
selection with marquee and keyboard navigation, drag-to-folder move, external
|
|
12
|
+
file import, and drag-out payloads, plus `renderThumbnail` / `renderItem` /
|
|
13
|
+
context-menu render props.
|
|
14
|
+
|
|
15
|
+
- [#85](https://github.com/SebastianWebdev/entangle-ui/pull/85) [`9eabab7`](https://github.com/SebastianWebdev/entangle-ui/commit/9eabab77e2a1dc95a6c4a66cbf556a68b1365ff1) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Tighten the React peer dependency to `>=19.2.0` so the library can use the
|
|
16
|
+
now-stable `useEffectEvent` and `<Activity>` APIs. Internal AssetBrowser
|
|
17
|
+
refactor lands on top:
|
|
18
|
+
- Replace `useLatest + useCallback` pairs in `useAssetNavigation`,
|
|
19
|
+
`useAssetSelectionController`, `useAssetDnd`, `useAssetMarqueeGesture`, and
|
|
20
|
+
`useAssetBrowserHandle` with `useEffectEvent`. Handlers keep stable
|
|
21
|
+
identity but always see the latest closures, with significantly less code.
|
|
22
|
+
- Stabilize `renderThumbnail` / `renderItem` / `renderItemContextMenu` /
|
|
23
|
+
`renderEmptyContextMenu` through a new internal `useStableRenderFn`
|
|
24
|
+
helper, so a consumer passing an inline render-prop no longer busts the
|
|
25
|
+
item context (which would re-render every grid cell).
|
|
26
|
+
- Extract grid keyboard navigation into a new `useAssetGridKeyboardNav`
|
|
27
|
+
hook (mirrors the gesture / virtualizer hooks).
|
|
28
|
+
- `AssetBrowserStatusBar` now takes `view` as a prop instead of reading the
|
|
29
|
+
chrome context, and an `AssetBrowserAnnouncementLive` subcomponent reads
|
|
30
|
+
the polite-live announcement directly via a new
|
|
31
|
+
`useAssetBrowserAnnouncement` slice hook — the root no longer computes
|
|
32
|
+
it.
|
|
33
|
+
- Memoize the `useAssetBrowserViewState` return so callers that capture it
|
|
34
|
+
whole keep a stable identity across renders.
|
|
35
|
+
|
|
36
|
+
- [#85](https://github.com/SebastianWebdev/entangle-ui/pull/85) [`9eabab7`](https://github.com/SebastianWebdev/entangle-ui/commit/9eabab77e2a1dc95a6c4a66cbf556a68b1365ff1) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - AssetBrowser: add mutation operations — inline rename, delete, create-folder,
|
|
37
|
+
and duplicate.
|
|
38
|
+
|
|
39
|
+
AssetBrowser stays controlled and presentational: each operation provides the
|
|
40
|
+
affordance (inline editor, keyboard shortcut, menu action) and reports **intent**
|
|
41
|
+
through a callback — you apply the change and pass back fresh `items`. Presence
|
|
42
|
+
of a callback enables its affordance.
|
|
43
|
+
|
|
44
|
+
New props:
|
|
45
|
+
- `onItemRename(item, newName)` — inline rename. Enables an inline label editor
|
|
46
|
+
(swap the cell label for a text field), the `F2` shortcut, the `Rename`
|
|
47
|
+
default action, and `handle.beginRename(id)`. Commits on Enter / blur with a
|
|
48
|
+
changed, non-empty value; cancels on Escape. Return / resolve `false` to
|
|
49
|
+
reject the name and keep the editor open (e.g. failed validation).
|
|
50
|
+
- `onItemsDelete(items)` — delete the acted-on items. Enables the `Delete` key
|
|
51
|
+
(and `⌘⌫` on macOS; plain `Backspace` stays reserved for parent-nav) and the
|
|
52
|
+
`Delete` action. Roving focus moves to a survivor before deletion.
|
|
53
|
+
- `onCreateFolder(parentFolderId)` — enables the empty-area `New folder` action.
|
|
54
|
+
Pair with `handle.beginRename(newId)` for the create-then-rename flow.
|
|
55
|
+
- `onItemsDuplicate(items)` — enables `Ctrl/⌘ + D` and the `Duplicate` action.
|
|
56
|
+
- `defaultItemActions` — auto-populate the item / empty-area context menus with
|
|
57
|
+
Rename / Duplicate / Delete / New-folder entries for whichever callbacks are
|
|
58
|
+
present (labels come from the `labels` prop, so they localize).
|
|
59
|
+
|
|
60
|
+
API additions:
|
|
61
|
+
- `renderItemContextMenu(items, actions)` now receives an `actions` object
|
|
62
|
+
(`rename` / `delete` / `duplicate`, bound to the acted-on items) so a custom
|
|
63
|
+
menu can wire the built-in flows without a ref.
|
|
64
|
+
- `AssetBrowserHandle.beginRename(id)` enters inline-rename imperatively
|
|
65
|
+
(scrolls the item into view first).
|
|
66
|
+
- New exported types `AssetItemActions` and `AssetRenameResult`; new `labels`
|
|
67
|
+
keys `rename` / `delete` / `duplicate` / `newFolder`.
|
|
68
|
+
|
|
69
|
+
Notes:
|
|
70
|
+
- All mutation affordances work in **both** the grid and list views: inline
|
|
71
|
+
rename, the `F2` / `Delete` / `Ctrl+D` shortcuts, and the right-click menus.
|
|
72
|
+
A single view-agnostic context-menu layer detects the target item from
|
|
73
|
+
`data-asset-id` (grid cells) / `data-row-key` (list rows), and the mutation
|
|
74
|
+
keyboard handler is shared by both scrollers — DataTable itself is unchanged.
|
|
75
|
+
- The "is editing" flag lives in the store as a per-id slice
|
|
76
|
+
(`useAssetEditing`), so a rename re-renders only the affected cell/row and can
|
|
77
|
+
be started from the keyboard, a menu, or the imperative handle. In the list,
|
|
78
|
+
`F2` targets the sole selected row (the list has no roving focus).
|
|
79
|
+
|
|
80
|
+
Docs: new Mutations section + a live demo (rename / duplicate / delete / new
|
|
81
|
+
folder); the Context menus, Keyboard reference, and API tables are updated.
|
|
82
|
+
|
|
83
|
+
- [#85](https://github.com/SebastianWebdev/entangle-ui/pull/85) [`9eabab7`](https://github.com/SebastianWebdev/entangle-ui/commit/9eabab77e2a1dc95a6c4a66cbf556a68b1365ff1) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - AssetBrowser: production hardening — wire up dead APIs, add error/i18n/a11y, fix
|
|
84
|
+
controlled-history and store identity.
|
|
85
|
+
|
|
86
|
+
New features:
|
|
87
|
+
- **Context menus now work.** `renderItemContextMenu` / `renderEmptyContextMenu`
|
|
88
|
+
were typed, documented, and demoed but never rendered — right-click only
|
|
89
|
+
updated selection. Cells (and the empty surface) are now real `ContextMenu`
|
|
90
|
+
triggers. The item callback receives the whole selection when you right-click
|
|
91
|
+
a selected item, otherwise just the item under the cursor. Opt-in, so unused
|
|
92
|
+
menus add zero cost.
|
|
93
|
+
- **Loading skeletons.** `loadingItemCount` is no longer dead: grid-view loading
|
|
94
|
+
renders that many skeleton cells (sized to the current thumbnail) instead of a
|
|
95
|
+
lone spinner.
|
|
96
|
+
- **Error state.** New `error` (`true` → built-in message, or a custom node) and
|
|
97
|
+
`onErrorRetry` (adds a Retry button) props. Takes precedence over loading/empty.
|
|
98
|
+
- **Internationalization.** New `labels` prop overrides every built-in UI string
|
|
99
|
+
(search, sort/filter menus, view tooltips, empty/loading/error, list headers,
|
|
100
|
+
the live announcement). Merged onto English defaults, exported as
|
|
101
|
+
`DEFAULT_ASSET_BROWSER_LABELS` / `AssetBrowserLabels`.
|
|
102
|
+
- **Type-aware fallback icons** for files without a thumbnail (material/audio/
|
|
103
|
+
video/scene/text), and a **broken-image fallback** — a failed `thumbnailUrl`
|
|
104
|
+
now shows the type icon instead of the browser's broken-image glyph.
|
|
105
|
+
|
|
106
|
+
Fixes:
|
|
107
|
+
- **Controlled `currentFolderId` now stays in sync with the back/forward stack.**
|
|
108
|
+
An out-of-band change (deep link, "reveal in browser") is pushed onto history,
|
|
109
|
+
so `canGoBack`/Back resolve correctly instead of going stale.
|
|
110
|
+
- **Store identity** is created with `useState(() => …)` instead of `useMemo`,
|
|
111
|
+
guaranteeing stable slice subscriptions for the component's lifetime.
|
|
112
|
+
- **Marquee** gains an `onPointerCancel` handler so an interrupted/touch-cancelled
|
|
113
|
+
drag no longer leaves the rubber-band rect stuck active.
|
|
114
|
+
|
|
115
|
+
Accessibility:
|
|
116
|
+
- The virtualized grid now exposes true `aria-rowcount`/`aria-colcount` and
|
|
117
|
+
per-cell 1-based `aria-rowindex`/`aria-colindex`, and announces roving focus
|
|
118
|
+
via `aria-activedescendant` (works under windowing without moving DOM focus).
|
|
119
|
+
|
|
120
|
+
Docs: new Context menus, History, Internationalization, Error-state, Recipes, and
|
|
121
|
+
Tips & gotchas sections, plus four new live demos.
|
|
122
|
+
|
|
123
|
+
- [#100](https://github.com/SebastianWebdev/entangle-ui/pull/100) [`3ff903f`](https://github.com/SebastianWebdev/entangle-ui/commit/3ff903f5e8603e6bc763daac73c789945afa383a) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add two public hooks, move filter-heavy components to `useDeferredValue`, and
|
|
124
|
+
deprecate `useDebouncedValue`.
|
|
125
|
+
- **New hook `useEventCallback`** — a stable callback identity for the
|
|
126
|
+
component lifetime that always invokes the most recently rendered version
|
|
127
|
+
(the `useEffectEvent` pattern). Backed by `useInsertionEffect`, so the
|
|
128
|
+
freshness guarantee holds even for consumers that read it during the same
|
|
129
|
+
commit — a child's `useLayoutEffect`, a synchronous store subscription, an
|
|
130
|
+
imperative handle. Now used internally by `useResizeObserver`,
|
|
131
|
+
`useDebouncedCallback`, `useThrottledCallback`, and `useListboxNav`.
|
|
132
|
+
- **New hook `useIsMounted`** — a stable getter reporting whether the
|
|
133
|
+
component is still mounted, for guarding state writes inside async
|
|
134
|
+
continuations that may resolve after unmount.
|
|
135
|
+
- **`useDeferredValue` pass** on the filter-heavy components: `CommandPalette`,
|
|
136
|
+
`Combobox`, `MultiSelect`, and `PropertyPanel` defer the query that drives
|
|
137
|
+
filtering, so the inputs stay controlled and responsive while large lists
|
|
138
|
+
re-filter.
|
|
139
|
+
- **`Combobox` fix:** the "create" row and exact-match detection now run off
|
|
140
|
+
the same deferred query as the filtered list, so editing toward an exact
|
|
141
|
+
match no longer briefly flashes a stray create row or skews the keyboard
|
|
142
|
+
navigation / `aria-activedescendant` indices.
|
|
143
|
+
|
|
144
|
+
**Breaking:** `CommandPalette` no longer accepts the `debounceMs` prop. Query
|
|
145
|
+
filtering is deferred through React's `useDeferredValue` instead of a fixed
|
|
146
|
+
debounce window — better interactivity on large command lists, with no tuning
|
|
147
|
+
needed. Remove any `debounceMs={…}` from `<CommandPalette>` usages.
|
|
148
|
+
|
|
149
|
+
**Deprecated:** `useDebouncedValue` is deprecated in favour of
|
|
150
|
+
`useDeferredValue` for keeping an input responsive while an expensive
|
|
151
|
+
derivation (filtering, search) lags behind it. It remains exported; use
|
|
152
|
+
`useDebouncedCallback` to debounce a _side effect_ rather than a rendered value.
|
|
153
|
+
|
|
154
|
+
- [#90](https://github.com/SebastianWebdev/entangle-ui/pull/90) [`1cdce9c`](https://github.com/SebastianWebdev/entangle-ui/commit/1cdce9c92cb3bf6aa3705d814178045bf14951d4) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - FileTree: a file-system-flavored specialization of `TreeView` with automatic
|
|
155
|
+
file-type icons and drag-and-drop import of OS files.
|
|
156
|
+
|
|
157
|
+
`FileTree` renders a `TreeView` internally and feeds it derived nodes — it does
|
|
158
|
+
**not** reimplement expansion, selection, or keyboard navigation. It takes a
|
|
159
|
+
nested `FileTreeNode[]` (`{ id, name, kind: 'file' | 'folder', ext?, path?,
|
|
160
|
+
children?, … }`), auto-assigns file-type icons by extension (image / media /
|
|
161
|
+
code / archive / text) plus open/closed folder glyphs, and exposes the same
|
|
162
|
+
controlled/uncontrolled expansion + selection model as `TreeView`.
|
|
163
|
+
|
|
164
|
+
New component + API:
|
|
165
|
+
- `<FileTree nodes={…} />` — `expandedIds` / `defaultExpandedIds` /
|
|
166
|
+
`onExpandedChange`, `selectedIds` / `defaultSelectedIds` / `selectionMode` /
|
|
167
|
+
`onSelectionChange`, `size`, `indent`, `showChevrons`, `showGuideLines`,
|
|
168
|
+
`maxHeight`, `emptyContent`, and `onNodeClick` / `onNodeDoubleClick` /
|
|
169
|
+
`onNodeContextMenu` (all mapped to `FileTreeNode`).
|
|
170
|
+
- `onImport({ files, targetFolder })` — fired when OS files are dropped onto a
|
|
171
|
+
folder (or the root, `targetFolder: null`). Presence enables the import drop
|
|
172
|
+
zone; the active target folder is highlighted while dragging. `FileTree`
|
|
173
|
+
reports intent only — apply the change and pass back fresh `nodes`.
|
|
174
|
+
- `resolveIcon(node, { expanded })` — per-node icon override; return `undefined`
|
|
175
|
+
to fall back to the built-in extension map. `renderNode` / `renderActions`
|
|
176
|
+
give full content control. Built-in icons follow the theme, and any icon takes
|
|
177
|
+
a `color` prop, so icons are fully colorable.
|
|
178
|
+
- `expandOnClick` (default `true`) — clicking anywhere on a folder row toggles
|
|
179
|
+
it open/closed, not just the chevron. Set `false` to require the chevron.
|
|
180
|
+
- `labels` (`Partial<FileTreeLabels>`) + exported `DEFAULT_FILE_TREE_LABELS` —
|
|
181
|
+
full i18n for the two built-in strings (`treeLabel` → the `role="tree"`
|
|
182
|
+
accessible name; `emptyLabel` → empty-state text). An explicit `aria-label` /
|
|
183
|
+
`emptyContent` still wins. `aria-label` / `aria-labelledby` are forwarded to
|
|
184
|
+
the tree element.
|
|
185
|
+
- Exported helpers `getFileIconKind` / `classifyExtension` / `getFileExtension`
|
|
186
|
+
and types `FileTreeNode`, `FileTreeNodeKind`, `FileTreeNodeState`,
|
|
187
|
+
`FileTreeImportPayload`, `FileTreeLabels`, `FileIconKind`.
|
|
188
|
+
|
|
189
|
+
Internal move / reorder is intentionally deferred for v1 (external import only);
|
|
190
|
+
the heavyweight internal-move case is covered by `AssetBrowser`.
|
|
191
|
+
|
|
192
|
+
TreeView (additive, backwards-compatible): new generic drop-target props
|
|
193
|
+
`dropTargetId` and `onNodeDragOver` / `onNodeDragLeave` / `onNodeDrop` (these
|
|
194
|
+
finally wire up the long-declared-but-unused `droppable` field on
|
|
195
|
+
`TreeNodeData`), plus `expandOnClick` (toggle a parent node on row click). All
|
|
196
|
+
usable on a plain `TreeView`, not just `FileTree`.
|
|
197
|
+
|
|
198
|
+
Icons: add `ImageIcon` (no image glyph existed; `AssetBrowser` relied on
|
|
199
|
+
thumbnails, but a tree has none). Fix `FolderOpenIcon` geometry — it occupied a
|
|
200
|
+
smaller area of the 24×24 viewBox than `FolderIcon`, so the open folder rendered
|
|
201
|
+
visibly smaller than the closed one; it now shares the closed folder's footprint.
|
|
202
|
+
|
|
203
|
+
Docs: new FileTree page with live demos (project tree, drag-and-drop import,
|
|
204
|
+
icon resolution, colored icons, selection, sizes, token re-skin, localized
|
|
205
|
+
labels) plus `## Styling` (theme-token + targeting-hook tables) and
|
|
206
|
+
`## Internationalization` sections.
|
|
207
|
+
|
|
208
|
+
- [#92](https://github.com/SebastianWebdev/entangle-ui/pull/92) [`98cbbfd`](https://github.com/SebastianWebdev/entangle-ui/commit/98cbbfdb9fa2658568822ef8a49a0f409ccb40f4) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add the `LogView` flagship component — a virtualized console / log output panel
|
|
209
|
+
for editor and IDE-style apps. Renders a large, append-only entry stream
|
|
210
|
+
efficiently via `@tanstack/react-virtual`, with per-level coloring (built-in
|
|
211
|
+
`debug | info | warn | error` plus an extensible `levelConfig`), level filter
|
|
212
|
+
chips with live counts, text search with `useDeferredValue` and match
|
|
213
|
+
highlighting, follow-tail auto-scroll with a jump-to-bottom affordance,
|
|
214
|
+
optional timestamps and source tags, and per-line / copy-all support. Optional
|
|
215
|
+
row selection (`selectionMode="multiple"`) with click / Cmd-click / Shift-click,
|
|
216
|
+
keyboard shortcuts (Cmd/Ctrl+A, Cmd/Ctrl+C, Escape), and selection-aware copy.
|
|
217
|
+
|
|
218
|
+
Supports two data-flow models: a controlled `entries` prop, or an uncontrolled
|
|
219
|
+
imperative handle (`ref.append` / `appendMany` / `clear`) whose writes are
|
|
220
|
+
rAF-batched so high-frequency streaming collapses to one render per frame.
|
|
221
|
+
Use it batteries-included with the default toolbar, or compose the slots
|
|
222
|
+
(`LogView.Toolbar`, `LogView.Search`, `LogView.LevelFilter`, `LogView.Copy`,
|
|
223
|
+
`LogView.Clear`, `LogView.Body`). Single-line rows by default with an opt-in
|
|
224
|
+
`wrap` mode for measured variable-height lines.
|
|
225
|
+
|
|
226
|
+
- [#92](https://github.com/SebastianWebdev/entangle-ui/pull/92) [`98cbbfd`](https://github.com/SebastianWebdev/entangle-ui/commit/98cbbfdb9fa2658568822ef8a49a0f409ccb40f4) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - LogView: add a `labels` prop for internationalization. Every built-in UI string
|
|
227
|
+
— the search placeholder and label, the level-filter group label, the clear /
|
|
228
|
+
copy / per-line copy labels, the jump-to-bottom button, the new-line counter,
|
|
229
|
+
the empty state, and the region label — is now overridable via `labels`, a
|
|
230
|
+
`Partial<LogViewLabels>`, so omitted keys keep their English default. The
|
|
231
|
+
new-line counter is a function (`(count) => string`) for per-locale
|
|
232
|
+
pluralization and word order. Explicit per-slot props (a slot's `aria-label`,
|
|
233
|
+
the search `placeholder`, `emptyState`, the root `aria-label`) still take
|
|
234
|
+
precedence. The English defaults are exported as `DEFAULT_LOG_VIEW_LABELS`.
|
|
235
|
+
|
|
236
|
+
- [#92](https://github.com/SebastianWebdev/entangle-ui/pull/92) [`98cbbfd`](https://github.com/SebastianWebdev/entangle-ui/commit/98cbbfdb9fa2658568822ef8a49a0f409ccb40f4) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - LogView: add `slotProps` for the default composition. Pass per-slot props
|
|
237
|
+
(`toolbar`, `search`, `levelFilter`, `copy`, `clear`, `body`, `footer`) to
|
|
238
|
+
restyle or reconfigure a single slot of the batteries-included layout without
|
|
239
|
+
rebuilding it from `children` — each entry is typed as that slot's props and its
|
|
240
|
+
`className` / `style` merge with the slot's own styles. Ignored when you provide
|
|
241
|
+
your own `children`. Establishes the library-wide `slotProps` convention
|
|
242
|
+
documented in `docs/component-patterns.md` (§15).
|
|
243
|
+
|
|
244
|
+
- [#81](https://github.com/SebastianWebdev/entangle-ui/pull/81) [`36b7f72`](https://github.com/SebastianWebdev/entangle-ui/commit/36b7f72968049aff57189f093bd7d892368fa7f1) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Migrate `Menu` and `ContextMenu` from a configuration object to a composition API.
|
|
245
|
+
|
|
246
|
+
**Breaking change.** The `config`, `selectedItems`, `onChange`, `checkboxIcon`, `radioIcon` props (and the `useMenu` / `useContextMenuTarget` hooks, plus the `MenuConfig` / `MenuItem` / `MenuSelection` / `ContextMenuConfig` / `ContextMenuTargetDetails` types) are removed. Menus are now built by composing child components.
|
|
247
|
+
- **Menu** — `Menu.Trigger`, `Menu.Content`, `Menu.Item`, `Menu.Group`, `Menu.Separator`, `Menu.RadioGroup`, `Menu.RadioItem`, `Menu.CheckboxItem`, `Menu.Sub`, `Menu.SubTrigger`, `Menu.SubContent`.
|
|
248
|
+
- **Menu.Item** lays out as icon (left) · label (center) · `shortcut` / `endContent` (right), like MUI's `MenuItem`.
|
|
249
|
+
- **ContextMenu** — `ContextMenu`, `ContextMenu.Trigger`, `ContextMenu.Content`. The dynamic `config(context)` resolver and `payload` are gone: scope menus by giving each area its own `ContextMenu`, and pass any custom node (tabs, search, custom panels) into `ContextMenu.Content`. Items reuse the shared `Menu.*` primitives.
|
|
250
|
+
|
|
251
|
+
```tsx
|
|
252
|
+
<Menu>
|
|
253
|
+
<Menu.Trigger>Options</Menu.Trigger>
|
|
254
|
+
<Menu.Content>
|
|
255
|
+
<Menu.Item icon={<CopyIcon />} shortcut="⌘C" onClick={copy}>
|
|
256
|
+
Copy
|
|
257
|
+
</Menu.Item>
|
|
258
|
+
</Menu.Content>
|
|
259
|
+
</Menu>
|
|
260
|
+
|
|
261
|
+
<ContextMenu>
|
|
262
|
+
<ContextMenu.Trigger>
|
|
263
|
+
<Canvas />
|
|
264
|
+
</ContextMenu.Trigger>
|
|
265
|
+
<ContextMenu.Content>
|
|
266
|
+
<Menu.Item onClick={addNode}>Add Node</Menu.Item>
|
|
267
|
+
</ContextMenu.Content>
|
|
268
|
+
</ContextMenu>
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
- [#82](https://github.com/SebastianWebdev/entangle-ui/pull/82) [`d5c1c65`](https://github.com/SebastianWebdev/entangle-ui/commit/d5c1c651c159e07fe2d0d90f536c702743478404) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Polish `Menu` and `ContextMenu` after code review.
|
|
272
|
+
- Pass `onOpenChange`, `onValueChange` and `onCheckedChange` straight through to Base UI instead of wrapping them in inline arrows, so Base UI can keep its subscribers memoized (the `value as string` cast was pure overhead — Base UI already provides the value).
|
|
273
|
+
- Type the item components against `HTMLElement` and drop the four `ref as React.Ref<HTMLElement>` casts, restoring ref type-safety.
|
|
274
|
+
- Enforce `closeOnClick` defaults (`Menu.Item` `true`, `Menu.RadioItem` / `Menu.CheckboxItem` `false`) in the components so the documented defaults are authoritative rather than inherited.
|
|
275
|
+
- Add an `onSelect` activation alias to `Menu.Item`, `Menu.RadioItem` and `Menu.CheckboxItem` (runs alongside `onClick` via one stable handler).
|
|
276
|
+
- Expose an imperative `ref` handle (`MenuHandle`) on the `Menu` / `ContextMenu` root with a `close()` method.
|
|
277
|
+
- Add a `render` prop to `ContextMenu.Trigger` so the trigger can render as your own element instead of a `display: contents` wrapper.
|
|
278
|
+
- Animate the popup on open/close (opacity + scale via Base UI's `data-starting-style` / `data-ending-style`).
|
|
279
|
+
- Render `Menu.Group` labels with typography on the label element itself, removing the extra `Text` wrapper.
|
|
280
|
+
- Wrap the row components (`Item`, `RadioItem`, `CheckboxItem`, `SubTrigger`, `Separator`) in `React.memo` to avoid re-rendering every row when the parent re-renders.
|
|
281
|
+
- Document why `ContextMenu.Content` exposes no `side` / `align` / `sideOffset` (it anchors to the pointer), and add integration tests that exercise the real Base UI primitives.
|
|
282
|
+
|
|
283
|
+
- [#76](https://github.com/SebastianWebdev/entangle-ui/pull/76) [`676658b`](https://github.com/SebastianWebdev/entangle-ui/commit/676658b4e9b06a754ac24aff9ffdc446dc6b5b90) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add `Minimap` component — shared navigation widget for editor viewports (NodeGraph, Timeline, custom 2D editor surfaces).
|
|
284
|
+
|
|
285
|
+
**Core primitive (`<Minimap>`)** — fully controlled:
|
|
286
|
+
- Controlled API: pass `items`, `worldBounds`, current `transform`, and `viewportSize` from your `<Viewport>`; translate `onNavigate.worldPoint` into a `viewport.centerOn(...)` call.
|
|
287
|
+
- Item shapes: `rect`, `circle`, `line`, plus `custom` for caller-drawn shapes (each with per-item color and hover hit-testing).
|
|
288
|
+
- Aspect-driven sizing: explicit `width`, height auto-derived from `worldBounds` aspect ratio and clamped — wide-thin bounds give a Timeline strip, square bounds give a NodeGraph box.
|
|
289
|
+
- Three pointer gestures (click, drag from empty, drag the rect) + tab-focusable keyboard navigation with arrow keys (Shift × 5 step). Each gesture independently toggleable.
|
|
290
|
+
- Single `onNavigate` callback with phase metadata (`'click' | 'drag-start' | 'drag' | 'drag-end'`) — enough to drive undo groups, smooth-follow, or analytics without multiple handlers.
|
|
291
|
+
- `renderOverlay(ctx, info)` escape hatch for global canvas annotations (playheads, selection regions, debug markers) drawn after items and before the viewport-rect shroud.
|
|
292
|
+
|
|
293
|
+
**Slot subcomponents** for chrome around the canvas body:
|
|
294
|
+
- `<Minimap.Title>` — `'top-outside'` or `'top-inside'` placement.
|
|
295
|
+
- `<Minimap.Footer>` — `'bottom-outside'` or `'bottom-inside'` placement.
|
|
296
|
+
- `<Minimap.Corner side="…">` — anchored in any of the four corners.
|
|
297
|
+
|
|
298
|
+
Non-marker children render as a free-form absolute overlay above the canvas. All children have access to live state via `useMinimapContext()` — exposes hover world point, hovered item id, transform, drag state — enabling coordinate readouts, zoom chips, tooltips with built-in hit-testing.
|
|
299
|
+
|
|
300
|
+
**Compound `<ViewportMinimap>`** — drop-in inside a `<Viewport>`:
|
|
301
|
+
- Reads live `transform` / `size` from `useViewportContext()`.
|
|
302
|
+
- Default `onNavigate` wires to the viewport handle's `centerOn`.
|
|
303
|
+
- `placement` accepts four corner presets or a custom anchor object.
|
|
304
|
+
- `responsive` prop tracks wrapper width via `ResizeObserver`.
|
|
305
|
+
- Recognized by `<Viewport>` as an overlay slot — no explicit `<ViewportOverlay>` wrapper needed.
|
|
306
|
+
|
|
307
|
+
**Helpers exported**:
|
|
308
|
+
- `computeBoundsFromItems(items, padding?)` — tight bbox of an items array.
|
|
309
|
+
- `useMinimapContext()` — children of `<Minimap>` read live state without re-implementing hit-testing.
|
|
310
|
+
|
|
311
|
+
Plus a comprehensive docs page with interactive demo composing all of the above.
|
|
312
|
+
|
|
313
|
+
- [#79](https://github.com/SebastianWebdev/entangle-ui/pull/79) [`64cc7a0`](https://github.com/SebastianWebdev/entangle-ui/commit/64cc7a06ddbb57b12d0ae9bc28677ada627c4f85) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add `NodeGraph` component — flagship data-driven node editor surface for building visual programming, signal processing, shader, ML pipeline, and similar interactive graph UIs. Composes the `Viewport` primitive for pan/zoom plus perf-isolated canvas layers, and `Minimap` for the optional overview slot.
|
|
314
|
+
|
|
315
|
+
**Core component (`<NodeGraph>`)** — fully controlled or uncontrolled across four data dimensions:
|
|
316
|
+
- `nodes`, `edges`, `groups`, and `selection` each emit the full next array via dedicated `onXChange` callbacks — no patches, no reducers, plain-`useState` compatible.
|
|
317
|
+
- HTML node bodies positioned in world space via `renderNode(node, ctx)`. The render context exposes `selected`, `dragging`, `hovered`, and the current `zoom` for LOD swaps.
|
|
318
|
+
- Bézier edges drawn on a perf-isolated canvas layer with control points oriented by port side. Each port resolves its position evenly across its side when no explicit `offset` is set.
|
|
319
|
+
- Marquee selection on empty drag, click selects, Shift/Cmd/Ctrl + click toggles, marquee with the additive modifier unions.
|
|
320
|
+
- Drag-to-move (single + multi). The clicked node defines the drag set: if it's in the current selection, all selected nodes move together; otherwise just the clicked node. Optional `snapToGrid={N}` snaps drag deltas and keyboard nudges to a world-unit grid.
|
|
321
|
+
- Connection drag from a port: live preview Bézier follows the cursor, candidates highlight, `isValidConnection(source, target, info)` rejects invalid drops (preview goes dashed + red). Default policy refuses same-node connections when no validator is supplied.
|
|
322
|
+
- `onContextMenu(info)` emits a discriminated `target` (`node` / `edge` / `port` / `group` / `empty`) plus screen / world points — drop in any popover or Menu component as the consumer prefers.
|
|
323
|
+
- Visual `groups` rendered as backdrop rectangles with optional labels under nodes and edges.
|
|
324
|
+
|
|
325
|
+
**Keyboard** — tab-focusable surface with:
|
|
326
|
+
|
|
327
|
+
| Keys | Action |
|
|
328
|
+
| ---------------------- | ---------------------------------------------------- |
|
|
329
|
+
| `←` `↑` `↓` `→` | Nudge selected nodes by 1 grid step (or 1 unit) |
|
|
330
|
+
| `Shift` + arrows | Nudge by 10× step |
|
|
331
|
+
| `Delete` / `Backspace` | Emit `onDelete(selection)` |
|
|
332
|
+
| `Enter` | Emit `onActivate(node)` for a single selection |
|
|
333
|
+
| `Cmd/Ctrl + A` | Select all nodes |
|
|
334
|
+
| `Esc` | Cancel an in-flight connection, else clear selection |
|
|
335
|
+
|
|
336
|
+
Focus inside editable descendants (`<input>`, `<textarea>`, `contentEditable`) bypasses the graph handler so typing in custom node bodies works as expected.
|
|
337
|
+
|
|
338
|
+
**Slot subcomponents** identified by a unique Symbol marker (`NODE_GRAPH_SLOT`) so they survive `React.memo`, HOCs, and minification:
|
|
339
|
+
- `<NodeGraph.Background variant="dots" | "grid" gap={...} />` — adaptive background canvas layer.
|
|
340
|
+
- `<NodeGraph.Minimap placement={...} width={...} title={...} />` — pre-wired overview, mirrors nodes into rect items, wires `centerOn` automatically.
|
|
341
|
+
|
|
342
|
+
**Imperative handle** (`NodeGraphHandle`):
|
|
343
|
+
- `fitToContent(padding?)`, `fitToSelection(padding?)`, `focusNode(id)`
|
|
344
|
+
- Viewport delegation: `centerOn`, `zoomToRect`, `getTransform`, `getSize`, `worldToScreen`, `screenToWorld`, `invalidate(layerName?)`
|
|
345
|
+
|
|
346
|
+
**Slice subscription hooks** for advanced consumers inside the `<NodeGraph>` subtree — `useNodeGraphData`, `useNodeGraphSelection`, `useNodeGraphInteraction`, `useNodeGraphHover`, and the raw `useNodeGraphStore` escape hatch. Hot-path state (drag deltas, connection preview, hover, marquee) lives in a class-based store consumed via `useSyncExternalStore` with shallow-equal no-op guards — each node body only re-renders when its own state changes, and canvas layers are invalidated independently per slice.
|
|
347
|
+
|
|
348
|
+
**Helpers exported**:
|
|
349
|
+
- `computeNodeGraphBounds`, `getNodeBox`, `getPortPosition`, `getBezierControlPoints`, `evaluateBezier`, `isPointNearBezier`, `resolvePortRef`, `resolveEdgeEndpoints`, `sideVector`, `snapDelta` — the same math used internally.
|
|
350
|
+
|
|
351
|
+
Ships with a comprehensive docs page including a multi-node signal-processing demo, the data model, connection validation recipes, slot integrations, keyboard shortcuts, and the full props table.
|
|
352
|
+
|
|
353
|
+
- [#79](https://github.com/SebastianWebdev/entangle-ui/pull/79) [`64cc7a0`](https://github.com/SebastianWebdev/entangle-ui/commit/64cc7a06ddbb57b12d0ae9bc28677ada627c4f85) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add out-of-the-box defaults and ergonomics helpers for `NodeGraph`, so consumers stop re-implementing the same boilerplate the demo used to carry.
|
|
354
|
+
|
|
355
|
+
**Typed port handles + auto-connected state** — `<NodeGraph.Port>` now renders a built-in handle from `shape` (`'circle' | 'triangle' | 'diamond' | 'square'`) and `color` props when no `children` are supplied, so the common "coloured ring for data pins, exec arrow for flow pins" no longer needs a hand-rolled SVG. The handle fills automatically while the port is referenced by an edge (the library derives the connected set in the store and exposes it via `data-port-connected`), removing the consumer-side "which ports are wired" index. The shape is also exported standalone as `<NodeGraph.PortVisual>`.
|
|
356
|
+
|
|
357
|
+
**`<NodeGraph.Pin>`** — a one-liner for the ubiquitous "handle + label" row. Renders a `<NodeGraph.PinRow>` containing a `<NodeGraph.Port>` and a label, ordered so the handle hugs the node edge (port → label on the left, label → port on the right). `<NodeGraph.PinRow>` + `<NodeGraph.Port>` remain available for custom layouts.
|
|
358
|
+
|
|
359
|
+
**`useNodeGraph()`** — owns nodes / edges / groups / selection plus the mutations every editor re-implements: `addNode`, `connect` (de-duped), `removeNodes` / `removeSelection` (with edge cascade + selection pruning), `duplicateNodes`, `addGroup`, `removeGroups`, `clearSelection`. Spread the returned `bind` onto `<NodeGraph>` to wire all four controlled props at once. Uncontrolled by design; for external stores keep wiring the `onChange` props yourself. The pure helpers `duplicateNodes(nodes, ids)`, `generateNodeId`, and `generateEdgeId` are now exported too.
|
|
360
|
+
|
|
361
|
+
**`createTypeMatchValidator()`** — a factory for the common `isValidConnection` rule (match `dataType`, in an allowed direction, with a configurable `anyType` wildcard and `allowSameNode`). Override `match` for richer subtype rules.
|
|
362
|
+
|
|
363
|
+
The Blueprint demo now uses all four, dropping its hand-rolled pin visual, connected-ports `useMemo`, manual delete/duplicate handlers, and four `useState` calls.
|
|
364
|
+
|
|
365
|
+
- [#79](https://github.com/SebastianWebdev/entangle-ui/pull/79) [`64cc7a0`](https://github.com/SebastianWebdev/entangle-ui/commit/64cc7a06ddbb57b12d0ae9bc28677ada627c4f85) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Round out `NodeGraph` interaction and node-authoring ergonomics, from a second pass over the demo's friction.
|
|
366
|
+
|
|
367
|
+
**Interactive edges** — edges are drawn on a canvas, so they used to be inert. They now hit-test against the pointer: hovering paints the hover accent (`useNodeGraphHover().hoveredEdgeId`), clicking selects the edge, and right-clicking reports a `{ kind: 'edge' }` target via `onContextMenu`. A selected edge is removed by Delete like any other selection. Adds the `findEdgeAtPoint` helper and a `removeEdges` action on `useNodeGraph`.
|
|
368
|
+
|
|
369
|
+
**Reconnect & detach** — grab an existing edge near one of its endpoints and drag it: drop on a valid port to move that endpoint, or drop on empty space to detach (delete) the edge. The fixed end stays anchored and the dragged end runs through `isValidConnection`; the edge being re-dragged is hidden from the edge layer so only the preview shows. A click on an endpoint (no drag) selects the edge instead, so a click never deletes a wire. Built in — no new props.
|
|
370
|
+
|
|
371
|
+
**Colourable minimap mini-nodes** — `<NodeGraph.Minimap>` gains a `nodeStyle` prop. Return `{ color }` to tint a node's rect, or `{ color, headerColor }` to draw a two-tone "header strip + body" mini-node that mirrors the real node at a glance. Selection tint still wins.
|
|
372
|
+
|
|
373
|
+
**Collapsible node sections** — `<NodeGraph.NodeSection>` is a collapsible section inside a node body for hiding advanced / overflow pins. The collapse is purely visual: children never unmount (state preserved, no remount cost), and `<NodeGraph.Port>` slots inside a collapsed section unregister their position so the pins' edges hide with them and snap back on expand — no dangling wires. Controlled or uncontrolled (`collapsed` / `defaultCollapsed` / `onCollapsedChange`); `collapsible={false}` gives a static labelled group.
|
|
374
|
+
|
|
375
|
+
- [#79](https://github.com/SebastianWebdev/entangle-ui/pull/79) [`64cc7a0`](https://github.com/SebastianWebdev/entangle-ui/commit/64cc7a06ddbb57b12d0ae9bc28677ada627c4f85) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - **Breaking:** redesign `NodeGraph` port API to slot-based composition.
|
|
376
|
+
|
|
377
|
+
Connection endpoints are now declared inline inside the node body via a new
|
|
378
|
+
`<NodeGraph.Port>` compound, not as a data field on the node. The library
|
|
379
|
+
measures the slot's DOM position and registers it as the anchor for any
|
|
380
|
+
edge that references the port id — the same DOM element the user clicks
|
|
381
|
+
is the exact point edges connect to, eliminating the previous "fake label
|
|
382
|
+
dot + outer port handle" double rendering.
|
|
383
|
+
|
|
384
|
+
**New**
|
|
385
|
+
- `<NodeGraph.Port id side dataType>` — slot rendered anywhere inside
|
|
386
|
+
`renderNode`. Mounts an inline `<span>` (default UE-style 12 px circle
|
|
387
|
+
/ exec triangle), measures its center on mount + every layout shift,
|
|
388
|
+
feeds the position to the store, and wires connection-drag pointer
|
|
389
|
+
events. Pass `children` to replace the default chrome — `data-port-*`
|
|
390
|
+
attributes carry the live state (`source` / `candidate` / `invalid` /
|
|
391
|
+
`hovered`) for consumer CSS.
|
|
392
|
+
- Hover state is now actually wired: `<NodeGraph.Port>` emits
|
|
393
|
+
`hoveredPort` on enter/leave; `NodeGraphNodeView` emits `hoveredNodeId`.
|
|
394
|
+
Previously these fields existed on `NodeGraphHoverState` but no code
|
|
395
|
+
dispatched them, so `ctx.hovered` / `ctx.isHovered` were always
|
|
396
|
+
`false`.
|
|
397
|
+
- Node auto-sizing: when `node.width`/`height` are omitted, the library
|
|
398
|
+
reads the rendered DOM size for hit-testing, marquee, fitToContent,
|
|
399
|
+
and minimap geometry. Override per-node by setting `width`/`height`
|
|
400
|
+
explicitly.
|
|
401
|
+
- `NodeGraphConnectionValidationInfo` now exposes `sourceDataType` and
|
|
402
|
+
`targetDataType` populated from the registered slot metadata — no
|
|
403
|
+
consumer-side port index needed for type-matched validation.
|
|
404
|
+
- `NodeGraphStore` adds two new slices with subscribe/get APIs:
|
|
405
|
+
`portPositions` (`getPortPosition`, `setPortPosition`,
|
|
406
|
+
`removePortPosition`, `subscribePortPositions`) and `measuredSizes`
|
|
407
|
+
(`getMeasuredSize`, `setMeasuredSize`, `clearMeasuredSize`,
|
|
408
|
+
`subscribeMeasuredSizes`). Both auto-GC on `setData` when the
|
|
409
|
+
corresponding node is removed.
|
|
410
|
+
|
|
411
|
+
**Removed**
|
|
412
|
+
- `NodeGraphNode.ports` field. Declare ports as `<NodeGraph.Port>`
|
|
413
|
+
children inside `renderNode` instead.
|
|
414
|
+
- `NodeGraphPort` type, `NodeGraphRenderPort`, `NodeGraphPortRenderCtx`,
|
|
415
|
+
and the `renderPort` prop. Replaced by the slot — `children` of
|
|
416
|
+
`<NodeGraph.Port>` are the consumer-supplied visual.
|
|
417
|
+
- `resolvePortOffsets` and the offset-based `getPortPosition` math
|
|
418
|
+
helpers. Port positions are now DOM-measured.
|
|
419
|
+
|
|
420
|
+
**Migration**
|
|
421
|
+
|
|
422
|
+
```diff
|
|
423
|
+
- const nodes = [{
|
|
424
|
+
- id: 'a', position: { x: 0, y: 0 },
|
|
425
|
+
- ports: [
|
|
426
|
+
- { id: 'in', side: 'left', dataType: 'exec', offset: 0.3 },
|
|
427
|
+
- { id: 'out', side: 'right', dataType: 'float' },
|
|
428
|
+
- ],
|
|
429
|
+
- }];
|
|
430
|
+
|
|
431
|
+
- <NodeGraph
|
|
432
|
+
- nodes={nodes}
|
|
433
|
+
- renderPort={(port, node, ctx) => <MyPin port={port} ctx={ctx} />}
|
|
434
|
+
- />
|
|
435
|
+
|
|
436
|
+
+ const nodes = [{ id: 'a', position: { x: 0, y: 0 } }];
|
|
437
|
+
|
|
438
|
+
+ <NodeGraph
|
|
439
|
+
+ nodes={nodes}
|
|
440
|
+
+ renderNode={(node, ctx) => (
|
|
441
|
+
+ <MyBody>
|
|
442
|
+
+ <Row>
|
|
443
|
+
+ <NodeGraph.Port id="in" side="left" dataType="exec" />
|
|
444
|
+
+ Execute
|
|
445
|
+
+ </Row>
|
|
446
|
+
+ <Row reverse>
|
|
447
|
+
+ Result
|
|
448
|
+
+ <NodeGraph.Port id="out" side="right" dataType="float" />
|
|
449
|
+
+ </Row>
|
|
450
|
+
+ </MyBody>
|
|
451
|
+
+ )}
|
|
452
|
+
+ />
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
`NodeGraphEdge` shape is unchanged (`{ id, source: { node, port }, target }`).
|
|
456
|
+
|
|
457
|
+
- [#79](https://github.com/SebastianWebdev/entangle-ui/pull/79) [`64cc7a0`](https://github.com/SebastianWebdev/entangle-ui/commit/64cc7a06ddbb57b12d0ae9bc28677ada627c4f85) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - `NodeGraph` socket-level edge actions and a drop point on the connection event.
|
|
458
|
+
|
|
459
|
+
**Socket actions** — right-clicking a port already reported a `{ kind: 'port' }` context target; now there are batch helpers to act on a socket's wires: a pure `edgesConnectedToPort(edges, ref)` (ids of every edge on a socket) and a `disconnectPort(node, port)` action on `useNodeGraph` (detach them all, pruning the selection). The demo gives sockets a "Select connected edges" context menu.
|
|
460
|
+
|
|
461
|
+
**Drop point on `onConnectEnd`** — the event now carries `worldPoint` and `screenPoint` (the release position). A drop on empty space (`cancelled` + `target === null`) is the hook for the classic "drag a wire onto the canvas → open a create-node menu there → wire the new node straight up" flow; the consumer positions the menu at `screenPoint`, spawns at `worldPoint`, and `connect`s to `source`. The demo wires this end to end.
|
|
462
|
+
|
|
463
|
+
- [#94](https://github.com/SebastianWebdev/entangle-ui/pull/94) [`eb35203`](https://github.com/SebastianWebdev/entangle-ui/commit/eb35203d7bb00a85ca0fb7d32b35339411250320) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add the `PathBar` flagship component — file-path breadcrumbs like the VS Code
|
|
464
|
+
editor bar. It specializes `Breadcrumbs`: pass a delimited string or a
|
|
465
|
+
structured `PathSegment[]` and it renders clickable segments, leaning on
|
|
466
|
+
Breadcrumbs for separators, overflow collapsing, and accessibility. Folder
|
|
467
|
+
crumbs navigate via `onNavigate(path, segment, index)` and the final segment is
|
|
468
|
+
the current location (`aria-current`). The current path is controllable
|
|
469
|
+
(`value` / `defaultValue`); uncontrolled, clicking an ancestor truncates the
|
|
470
|
+
trail. Provide `getSiblings` to add a VS-Code-style dropdown that swaps a
|
|
471
|
+
segment for one of its siblings, plus `rootIcon`, per-segment icons, and a
|
|
472
|
+
`delimiter` for non-`/` paths. Path splitting/joining lives in a pure,
|
|
473
|
+
unit-tested `pathUtils` module.
|
|
474
|
+
|
|
475
|
+
Extend `BreadcrumbItem` with an `endContent` slot — content rendered after the
|
|
476
|
+
label, outside the navigable link/button, so a trailing affordance (such as
|
|
477
|
+
PathBar's sibling-dropdown caret) can attach without breaking the crumb's
|
|
478
|
+
click target or the Breadcrumbs collapse logic.
|
|
479
|
+
|
|
480
|
+
- [#84](https://github.com/SebastianWebdev/entangle-ui/pull/84) [`6683aa6`](https://github.com/SebastianWebdev/entangle-ui/commit/6683aa69850d269fad2af638a813f5c9049fc1a7) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add the `Timeline` flagship component — a horizontal, multi-track animation timeline / dope sheet for editor UIs.
|
|
481
|
+
- Frame-based time axis with an `fps`-driven `HH:MM:SS:FF` ruler and snap-to-frame. `frame` (playhead), `view` (zoom/pan window), `selection`, `mode`, and `playing` are each controlled or uncontrolled.
|
|
482
|
+
- Tracks hold keyframes using the shared `CurveKeyframe` model — promoted to `@/types/keyframe` and re-exported from `CurveEditor` unchanged — so Timeline and CurveEditor speak the same language.
|
|
483
|
+
- Canvas-rendered keyframes with DOM chrome, drawn from a per-slice `useSyncExternalStore` store with the theme resolved per frame.
|
|
484
|
+
- Interactions: scrub (ruler/playhead drag + click), wheel zoom-at-cursor, shift-wheel / middle-drag pan, click / shift-click / box-select, drag-move (snapped + clamped), double-click add, Delete remove, copy/paste (Ctrl/Cmd + C / V at the playhead), and arrow / Home / End keyboard scrubbing.
|
|
485
|
+
- Dope-sheet and graph (value-curve) modes; graph mode reuses CurveEditor's curve evaluation and edits keyframes in both time and value, with draggable bezier tangent handles. Individual tracks can expand to an in-place graph lane (`track.expanded`) without leaving the dope sheet.
|
|
486
|
+
- Collapsible track groups (a flat `groupId` on tracks + a controlled/uncontrolled `groups` prop), header-drag track reorder, vertical scrolling for overflowing tracks, and a draggable loop region (edges + body).
|
|
487
|
+
- Optional built-in playback loop (rAF advancing `frame` at `fps`, with `loop`), driven via the imperative handle (`seek` / `play` / `pause` / `toggle` / `zoomToFit` / `zoomToSelection` / `frameToX` / `xToFrame`).
|
|
488
|
+
- Data-driven track-header column with a `renderTrackHeader` override, `Timeline.Toolbar` / `Timeline.Footer` slots, a `renderOverlay` canvas pass, and an accessibility baseline (focusable `role="group"`, keyboard equivalents, polite live region).
|
|
489
|
+
- Also exports `framesToTimecode`, the `TimelineGroup` type, and the `useTimelineContext` / `useTimelineGeometry` / `useTimelinePlayhead` / `useTimelineSelection` hooks.
|
|
490
|
+
|
|
491
|
+
- [#84](https://github.com/SebastianWebdev/entangle-ui/pull/84) [`6683aa6`](https://github.com/SebastianWebdev/entangle-ui/commit/6683aa69850d269fad2af638a813f5c9049fc1a7) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Refactor `Timeline` for React 19.2 — performance, dead-code cleanup, API tweaks.
|
|
492
|
+
- Bump peer `react` / `react-dom` to `>=19.2.0`. Internal `useLatest`-ref swarms in `useTimelineGestures`, `useTimelinePlayback`, `useTimelineDraw` (new) and `TimelineMinimap` are replaced with `useEffectEvent`. Handler identities are stable for the component's lifetime; the rAF playback loop now only re-runs when `playing` flips.
|
|
493
|
+
- `TimelineMinimap` subscribes to the geometry + playhead slices instead of the full `useTimelineContext()` snapshot, so it stops re-rendering on unrelated store changes (selection / hover / drag / mode).
|
|
494
|
+
- Consolidate keyframe-key helpers into one `timelineSelection` module (`selectionKey` / `selectionKeySet` / `sameRef`) — removes three near-duplicate implementations across `Timeline`, `timelineEdits`, and `TimelineStore`.
|
|
495
|
+
- Cache each track's resolved value range on `TrackGeometry` / `TimelineTrackRow` (`row.range`) so drawing, hit-testing and graph-mode edits stop recomputing `autoValueRange` per call.
|
|
496
|
+
- Extract `useTimelineDraw` from `Timeline.tsx` — encapsulates canvas DPR setup, theme-token resolution and the scheduled draw, and reads consumer `renderOverlay` / `formatTime` through `useEffectEvent` so inline functions no longer invalidate the schedule.
|
|
497
|
+
- Drop dead exports: `framesPerPixel`, `trackTop`, `yToTrackIndex` (`timelineCoords`), `rowIndexAtY` (`timelineLayout`), and the unimplemented `minKeyframeDistance` prop on `TimelineProps`.
|
|
498
|
+
- Replace `Math.hypot` in the hit-test hot path with squared-distance comparisons; replace `Math.min(...spread)` in copy with a reduce loop; rewrite `zoomToSelection` to walk the selection (O(|selection|)) instead of every keyframe in every track.
|
|
499
|
+
- New `trackScale` prop on `<Timeline>` — pass `{ position, format, showMidpoint, gridlines, color }` directly. The `<Timeline.TrackScale />` slot still works as a deprecated alias; the new prop wins when both are provided.
|
|
500
|
+
|
|
501
|
+
- [#85](https://github.com/SebastianWebdev/entangle-ui/pull/85) [`9eabab7`](https://github.com/SebastianWebdev/entangle-ui/commit/9eabab77e2a1dc95a6c4a66cbf556a68b1365ff1) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add `useNavigationHistory<T>` — a generic back/forward stack primitive backed
|
|
502
|
+
by `useSyncExternalStore`. Tracks a concurrent-safe cursor over an arbitrary
|
|
503
|
+
entry type, exposes `canGoBack` / `canGoForward` flags, mirrors browser
|
|
504
|
+
semantics (push truncates the forward branch), and supports an `enabled`
|
|
505
|
+
toggle for opt-in history UIs. `AssetBrowser`'s `history` feature is now
|
|
506
|
+
composed on top of it through an internal `useAssetNavigation` hook that
|
|
507
|
+
encapsulates the parent-folder keyboard shortcut and the `onNavigate` /
|
|
508
|
+
`onItemOpen` plumbing.
|
|
509
|
+
|
|
510
|
+
- [#73](https://github.com/SebastianWebdev/entangle-ui/pull/73) [`9dd25ae`](https://github.com/SebastianWebdev/entangle-ui/commit/9dd25ae9821cd943025f90a9c1b9bc751cd7329c) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add `Viewport` primitive — pan/zoom canvas + HTML container for editor-style surfaces (node graphs, timelines, 2D world editors).
|
|
511
|
+
- `Viewport` with controlled/uncontrolled transform (`{ x, y, zoom }`), configurable pan (button + space-key), wheel/pinch zoom-toward-cursor, and optional marquee selection.
|
|
512
|
+
- `ViewportLayer` — perf-isolated canvas layers with per-layer `invalidateOn` deps and `handle.invalidate(name)`.
|
|
513
|
+
- `ViewportWorld` — HTML children positioned in world coordinates (follow pan/zoom).
|
|
514
|
+
- `ViewportOverlay` — HTML children pinned to the viewport (toolbars, minimap slot).
|
|
515
|
+
- `useViewportContext()` for live `transform` / `size` / `handle` access from any child.
|
|
516
|
+
- Imperative `ViewportHandle` — `fitToContent`, `zoomToRect`, `centerOn`, `getTransform`, `getSize`, `invalidate`.
|
|
517
|
+
- Pure helpers: `worldToScreen`, `screenToWorld`, `getViewportPointerPosition`, `computeFitTransform`, `computeCenterTransform`, `computeZoomTowardPivot`, `normalizeRect`.
|
|
518
|
+
- Pan lifecycle events (`onPanStart`, `onPanEnd` with end velocity) and zoom lifecycle events for inertia/idle recipes.
|
|
519
|
+
- Docs include recipes for snap-to-zoom, minimap, and inertia on top of the v1 surface.
|
|
520
|
+
|
|
521
|
+
### Patch Changes
|
|
522
|
+
|
|
523
|
+
- [#85](https://github.com/SebastianWebdev/entangle-ui/pull/85) [`9eabab7`](https://github.com/SebastianWebdev/entangle-ui/commit/9eabab77e2a1dc95a6c4a66cbf556a68b1365ff1) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Refactor `AssetBrowser` internals into focused hooks and subcomponents. The
|
|
524
|
+
root file goes from ~470 → ~370 lines and the grid from ~300 → ~225, with no
|
|
525
|
+
public API changes:
|
|
526
|
+
- `useAssetMarqueeGesture` — pointer-down/move/up + RAF throttling + hit-test
|
|
527
|
+
for rubber-band selection (lifted out of `AssetBrowserGrid`).
|
|
528
|
+
- `useAssetBrowserViewState` — owns the five `useControlledState` pairs plus
|
|
529
|
+
derived `displayed` / `filterableTypes` / `thumbnailSizePx` / `marqueeEnabled`.
|
|
530
|
+
- `useAssetBrowserHandle` — wires `useImperativeHandle` and folds in the
|
|
531
|
+
`scrollToItem` fallback logic.
|
|
532
|
+
- `AssetBrowserContent` — loading / empty / grid / list switch.
|
|
533
|
+
- `AssetBrowserStatusBar` — the optional bottom bar with the thumbnail-size
|
|
534
|
+
control.
|
|
535
|
+
- `DEFAULT_LIST_COLUMNS` is now a module-level constant in `AssetBrowserList`
|
|
536
|
+
instead of a function rebuilt inside `useMemo`.
|
|
537
|
+
|
|
538
|
+
- [#85](https://github.com/SebastianWebdev/entangle-ui/pull/85) [`9eabab7`](https://github.com/SebastianWebdev/entangle-ui/commit/9eabab77e2a1dc95a6c4a66cbf556a68b1365ff1) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Refine the `AssetBrowser` component. Live selection, roving focus, and
|
|
539
|
+
drop-target state now flow through per-id store slices, so selecting an item or
|
|
540
|
+
moving focus re-renders only the affected cells instead of the whole grid, and
|
|
541
|
+
search/sort/filter chrome no longer re-renders cells on every keystroke. Wire up
|
|
542
|
+
the previously inert `marquee` and `history` props (Back/Forward controls plus
|
|
543
|
+
`Backspace` / `Alt+ArrowUp` to navigate to the parent folder), keep grid cells
|
|
544
|
+
interactive when a custom `renderItem` is supplied, make `scrollToItem` work
|
|
545
|
+
under virtualization, track shift-range anchors by id so ranges survive a
|
|
546
|
+
re-sort, and honour `prefers-reduced-motion`.
|
|
547
|
+
|
|
548
|
+
- [#85](https://github.com/SebastianWebdev/entangle-ui/pull/85) [`9eabab7`](https://github.com/SebastianWebdev/entangle-ui/commit/9eabab77e2a1dc95a6c4a66cbf556a68b1365ff1) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - AssetBrowser: conform to the hardened ESLint setup (react-hooks v7,
|
|
549
|
+
strict-type-checked, import-x, jsx-a11y) introduced in #87.
|
|
550
|
+
- The selection, navigation, drag-and-drop, marquee, grid-keyboard and
|
|
551
|
+
imperative-handle hooks built their stable handlers with `useEffectEvent`
|
|
552
|
+
and then returned them / listed them in dependency arrays — both forbidden
|
|
553
|
+
by the Compiler-aware rule set. They now read live props/state through
|
|
554
|
+
`useLatest` refs and expose genuinely stable `useCallback`s, matching
|
|
555
|
+
`component-patterns.md` rules #3/#11 and the Timeline migration.
|
|
556
|
+
- Removed the `useStableRenderFn` helper: its render-phase ref write violated
|
|
557
|
+
`react-hooks/refs`. Render-props are forwarded through the item context as-is
|
|
558
|
+
(memoize them, like `TreeView`, to avoid per-cell re-renders).
|
|
559
|
+
- The root carries `role="region"` and grid cells keep `role="gridcell"`;
|
|
560
|
+
keyboard interaction stays centralized at the grid level.
|
|
561
|
+
|
|
562
|
+
No public API or behavior change.
|
|
563
|
+
|
|
564
|
+
- [#87](https://github.com/SebastianWebdev/entangle-ui/pull/87) [`9445dfc`](https://github.com/SebastianWebdev/entangle-ui/commit/9445dfc6689baceed1c552579cd0eebed0427619) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - ESLint hardening across the library and the correctness fixes it surfaced.
|
|
565
|
+
|
|
566
|
+
Tooling: enabled `eslint-plugin-react-hooks` v7 (full Compiler-aware
|
|
567
|
+
`recommended`), `typescript-eslint` `strict-type-checked`,
|
|
568
|
+
`eslint-plugin-import-x` (no-cycle, order, no-duplicates, type-specifier
|
|
569
|
+
style), `eslint-plugin-jsx-a11y`, and enforcement of the mandated `@/` import
|
|
570
|
+
alias. `restrict-template-expressions` is tuned with `allowNumber: true`. Rules
|
|
571
|
+
apply to `src` only; test files keep the prior type-checked baseline. See
|
|
572
|
+
`docs/component-patterns.md` §14.
|
|
573
|
+
|
|
574
|
+
Behavior-affecting fixes (no public API changes):
|
|
575
|
+
- Refs read during render are now reactive state, so values driven by them
|
|
576
|
+
update correctly: `ScrollArea` scrollbar `aria-valuenow` and thumb dragging
|
|
577
|
+
state, `CartesianPicker` / `ViewportGizmo` / `CurveEditor` `isDragging`,
|
|
578
|
+
`Combobox` filtering while editing, `MenuBar` registered-menu tracking, and
|
|
579
|
+
`useListboxNav` navigable indices.
|
|
580
|
+
- `Tooltip` no longer mutates the caller-provided `rootProps` object.
|
|
581
|
+
- Accessibility: interactive elements that had only pointer handlers now expose
|
|
582
|
+
keyboard handlers, focusability, and valid ARIA across controls, editor,
|
|
583
|
+
navigation, feedback, layout, and primitive components.
|
|
584
|
+
- Removed dead conditional branches and redundant optional chaining flagged by
|
|
585
|
+
`no-unnecessary-condition`, and replaced deprecated APIs.
|
|
586
|
+
|
|
587
|
+
- [#87](https://github.com/SebastianWebdev/entangle-ui/pull/87) [`9445dfc`](https://github.com/SebastianWebdev/entangle-ui/commit/9445dfc6689baceed1c552579cd0eebed0427619) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Fix ViewportGizmo z-up rendering and FloatingPanel positioning.
|
|
588
|
+
- **ViewportGizmo `upAxis="z-up"`** now actually renders the z-up convention
|
|
589
|
+
(Blender/Unreal/CAD): the Z arm points up and Y points into the scene.
|
|
590
|
+
Previously `upAxis` only affected which preset view an axis click snapped to,
|
|
591
|
+
so `y-up` and `z-up` looked identical.
|
|
592
|
+
- **FloatingPanel** is now positioned `absolute` within its `FloatingManager`
|
|
593
|
+
region instead of `fixed` to the viewport. `FloatingManager` renders a
|
|
594
|
+
relative, full-size, pointer-events-pass-through container, and dragging is
|
|
595
|
+
delta-based and clamped to that container. This fixes panels from multiple
|
|
596
|
+
managers stacking at the same viewport coordinates and escaping their
|
|
597
|
+
container.
|
|
598
|
+
|
|
599
|
+
- [#92](https://github.com/SebastianWebdev/entangle-ui/pull/92) [`98cbbfd`](https://github.com/SebastianWebdev/entangle-ui/commit/98cbbfdb9fa2658568822ef8a49a0f409ccb40f4) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - LogView: align the message text into a fixed gutter. The timestamp, level
|
|
600
|
+
icon, and source tag render as fixed-width columns so the message starts at the
|
|
601
|
+
same x on every row instead of shifting with the source-tag width — it reads
|
|
602
|
+
like a table / terminal log.
|
|
603
|
+
|
|
604
|
+
A column is only reserved when its field is actually present in the data: if
|
|
605
|
+
nothing has a timestamp or source there is no column at all (the message sits
|
|
606
|
+
right after the icon, as before), but once at least one entry uses the field
|
|
607
|
+
every row reserves it — including rows that omit it — so they stay aligned. The
|
|
608
|
+
timestamp and source column widths default to `88px` and `52px` and are
|
|
609
|
+
overridable via the `--etui-logview-timestamp-col-width` /
|
|
610
|
+
`--etui-logview-source-col-width` CSS custom properties on the root.
|
|
611
|
+
|
|
612
|
+
- [#92](https://github.com/SebastianWebdev/entangle-ui/pull/92) [`98cbbfd`](https://github.com/SebastianWebdev/entangle-ui/commit/98cbbfdb9fa2658568822ef8a49a0f409ccb40f4) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - LogView code-review fixes:
|
|
613
|
+
- **Stable auto-assigned ids.** Id-less entries now keep their key across a
|
|
614
|
+
controlled `entries` re-mirror — the store caches an id per entry object
|
|
615
|
+
instead of minting a fresh monotonic id on every `setEntries`. Rows no longer
|
|
616
|
+
remount and id-based selection survives updates. Removed the unused `seq`
|
|
617
|
+
field from `ResolvedLogEntry`.
|
|
618
|
+
- **Levels added at runtime are visible by default.** Visibility is tracked as
|
|
619
|
+
the set of _hidden_ levels, so a level introduced later via `levelConfig`
|
|
620
|
+
shows up active, while an explicit toggle-off persists across `levelOrder`
|
|
621
|
+
changes.
|
|
622
|
+
- **Cheaper rows.** Per-level definitions are resolved through a memoized cache
|
|
623
|
+
so the memoized `LogRow` is no longer invalidated by a fresh definition object
|
|
624
|
+
each render.
|
|
625
|
+
- **Scoped text-selection guard.** A row click / copy shortcut is only
|
|
626
|
+
suppressed by a text selection inside the log body, not one elsewhere on the
|
|
627
|
+
page.
|
|
628
|
+
- **Internal cleanup.** Row selection + keyboard handling moved into a
|
|
629
|
+
`useLogSelection` hook; the shared recipe `level` variant is derived via a
|
|
630
|
+
single `levelVariant` helper.
|
|
631
|
+
|
|
632
|
+
- [#79](https://github.com/SebastianWebdev/entangle-ui/pull/79) [`64cc7a0`](https://github.com/SebastianWebdev/entangle-ui/commit/64cc7a06ddbb57b12d0ae9bc28677ada627c4f85) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Fix `<NodeGraph.Minimap>` rendering off-screen. The slot applied `position: absolute` to the inner `<Minimap>`, but `ViewportMinimap` already pins it via its own absolutely-positioned wrapper. The duplicate positioning pulled the minimap out of the wrapper's flow, collapsing the wrapper to a zero-size box at the viewport's bottom-right corner and pushing the minimap off-screen. The slot class now only re-enables pointer events.
|
|
633
|
+
|
|
634
|
+
- [#79](https://github.com/SebastianWebdev/entangle-ui/pull/79) [`64cc7a0`](https://github.com/SebastianWebdev/entangle-ui/commit/64cc7a06ddbb57b12d0ae9bc28677ada627c4f85) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - `NodeGraph` internal performance + refactor pass (no public API change).
|
|
635
|
+
|
|
636
|
+
**Performance**
|
|
637
|
+
- Edge labels now subscribe to the interaction slice through a per-edge selector + equality (the same pattern node bodies use), so a drag only re-renders the labels whose endpoints actually move instead of every label on every gesture tick.
|
|
638
|
+
- Edge / group canvas layers build a `Set` of the selected ids once per frame instead of a linear `selection.includes` per item — the per-frame selected check is now O(1).
|
|
639
|
+
- Edge hit-testing (`findEdgeAtPoint`) rejects edges with a control-point bounding-box test before the 24-sample Bézier distance test, so hover / click / right-click stay cheap on large graphs.
|
|
640
|
+
- The background dots/grid pattern tile is cached across frames (keyed by size + radius + colour, bounded with FIFO eviction), so a pan no longer rebuilds an off-screen canvas every frame.
|
|
641
|
+
|
|
642
|
+
**Refactor**
|
|
643
|
+
- Extracted a shared `useDragGesture` primitive (pointer capture, document listener attach/detach, per-pointer guard, unmount cleanup) used by both the node-drag and group-drag controllers, removing the duplicated gesture lifecycle.
|
|
644
|
+
- Extracted edge hover + endpoint-grab handling out of `NodeGraph` into `useNodeGraphEdgeInteraction`.
|
|
645
|
+
- De-duplicated the additive-selection toggle (`toggleSelected`) across the node / group / edge click paths and the connection accept/reject check across the hover + both drop paths.
|
|
646
|
+
|
|
647
|
+
- [#84](https://github.com/SebastianWebdev/entangle-ui/pull/84) [`6683aa6`](https://github.com/SebastianWebdev/entangle-ui/commit/6683aa69850d269fad2af638a813f5c9049fc1a7) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Timeline: replace `useEffectEvent` misuse with the `useLatest` + `useCallback`
|
|
648
|
+
pattern. Effect Events are only valid when called from inside an Effect; the
|
|
649
|
+
Timeline was using them as DOM/JSX event handlers and store callbacks, relying
|
|
650
|
+
on a stable identity that `useEffectEvent` does not guarantee (its identity
|
|
651
|
+
intentionally changes every render). Gesture handlers, the minimap pointer/draw
|
|
652
|
+
handlers, and the `Timeline` track/seek/zoom callbacks now read live state
|
|
653
|
+
through `useLatest` refs and expose genuinely stable `useCallback`s, matching
|
|
654
|
+
`component-patterns.md` rules #3/#11 and the `useViewportGestures` reference.
|
|
655
|
+
The playback rAF loop keeps `useEffectEvent` — the one place it is correct
|
|
656
|
+
(called only from inside the effect's timer). Also reuse the shared `clamp` and
|
|
657
|
+
`valueInset` helpers instead of duplicated inline math, and align the minimap
|
|
658
|
+
wrapper with the library's `cx` + `role="region"` conventions. No public API
|
|
659
|
+
change.
|
|
660
|
+
|
|
661
|
+
- [#84](https://github.com/SebastianWebdev/entangle-ui/pull/84) [`6683aa6`](https://github.com/SebastianWebdev/entangle-ui/commit/6683aa69850d269fad2af638a813f5c9049fc1a7) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - `Timeline`:
|
|
662
|
+
- The expand-track caret in the track-header column now shows in graph mode too. In dope-sheet mode it still expands the track into an in-place graph lane; in graph mode it just makes the lane taller (`expandedTrackHeight`), so you can spotlight one curve without leaving graph view.
|
|
663
|
+
- Alt + drag on the ruler creates / narrows the loop region (works even when looping was previously off — the drag turns it on). A bare Alt-click without dragging clears the loop. Existing loop-edge / body drags are unchanged.
|
|
664
|
+
|
|
665
|
+
- [#84](https://github.com/SebastianWebdev/entangle-ui/pull/84) [`6683aa6`](https://github.com/SebastianWebdev/entangle-ui/commit/6683aa69850d269fad2af638a813f5c9049fc1a7) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - `Timeline` — loop / playhead / track-scale UX fixes:
|
|
666
|
+
- The **playhead line is now grabbable along its whole height**. Previously a
|
|
667
|
+
grab landed as `group` over a group-header row and was swallowed by the
|
|
668
|
+
`loop-body` region on the ruler; the hit-test now returns `playhead` on its
|
|
669
|
+
thin pick band over group rows and on the ruler (it beats the wide loop body,
|
|
670
|
+
while loop edges still win). The head also glows + shows an `ew-resize`
|
|
671
|
+
cursor on hover there.
|
|
672
|
+
- **Loop region edges and body highlight on hover** — the hovered edge thickens
|
|
673
|
+
with a glow (cursor `ew-resize`), the body brightens (cursor `grab`), so the
|
|
674
|
+
draggable affordances are discoverable. Backed by a new `hoverLoop` store
|
|
675
|
+
slice. Alt+drag on the ruler keeps creating / re-drawing the loop (now also
|
|
676
|
+
when the drag starts on the playhead line).
|
|
677
|
+
- `trackScale` gains **`minLaneHeight`** (default `48`): lanes shorter than this
|
|
678
|
+
skip the scale entirely, so a collapsed graph-mode track no longer renders
|
|
679
|
+
overlapping min/mid/max labels.
|
|
680
|
+
|
|
681
|
+
- [#84](https://github.com/SebastianWebdev/entangle-ui/pull/84) [`6683aa6`](https://github.com/SebastianWebdev/entangle-ui/commit/6683aa69850d269fad2af638a813f5c9049fc1a7) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - `Timeline` — two new opt-in props that tune the loop region's chrome:
|
|
682
|
+
- **`loopStrip`** (default `false`) — adds a thin dedicated band directly
|
|
683
|
+
under the time ruler. A plain drag on the strip creates / re-draws the
|
|
684
|
+
loop region, no Alt needed. The main ruler keeps its scrub behaviour, so
|
|
685
|
+
scrub vs loop-create stop fighting on a single zone.
|
|
686
|
+
- **`loopHandles`** (default `'edges'`) — `'edges'` keeps the existing
|
|
687
|
+
full-height vertical bars on each loop edge; `'brackets'` draws compact
|
|
688
|
+
`[ ]` markers with serifs in the chrome (ruler + strip) area instead. No
|
|
689
|
+
full-height bars across the track area, and the edge pick zone widens so
|
|
690
|
+
the markers are easier to grab.
|
|
691
|
+
|
|
692
|
+
Both compose: the Animation Editor showcase enables them together. Drawing
|
|
693
|
+
and hit-test now resolve a unified `chromeHeight = rulerHeight +
|
|
694
|
+
loopStripHeight` so screen↔content Y conversions stay correct for marquee
|
|
695
|
+
selection, double-click add, tangent drags and scrolling.
|
|
696
|
+
|
|
3
697
|
## 0.9.0
|
|
4
698
|
|
|
5
699
|
### Minor Changes
|