entangle-ui 0.9.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +766 -0
- package/README.md +8 -6
- package/dist/esm/assets/src/components/controls/FileTree/FileTree.css.ts.vanilla-YmktPvnr.css +48 -0
- package/dist/esm/assets/src/components/controls/Select/{Select.css.ts.vanilla-oZnFUorL.css → Select.css.ts.vanilla-Cpu2BvWL.css} +3 -0
- package/dist/esm/assets/src/components/controls/TreeView/{TreeNode.css.ts.vanilla-B_f8pUb8.css → TreeNode.css.ts.vanilla-DXPJRWZZ.css} +31 -24
- package/dist/esm/assets/src/components/editor/AssetBrowser/AssetBrowser.css.ts.vanilla-B2S4cEiY.css +262 -0
- package/dist/esm/assets/src/components/editor/Minimap/Minimap.css.ts.vanilla--rNdWQwy.css +133 -0
- package/dist/esm/assets/src/components/editor/NodeGraph/NodeGraph.css.ts.vanilla-ClF4YZvl.css +401 -0
- package/dist/esm/assets/src/components/editor/PropertyInspector/{PropertyPanel.css.ts.vanilla-RYv_XgOu.css → PropertyPanel.css.ts.vanilla-Dpr_k5I3.css} +4 -1
- package/dist/esm/assets/src/components/editor/PropertyInspector/{PropertyRow.css.ts.vanilla-C3YZnnHb.css → PropertyRow.css.ts.vanilla-pq1Uhd2a.css} +15 -8
- package/dist/esm/assets/src/components/editor/PropertyInspector/{PropertySection.css.ts.vanilla-DK12opZc.css → PropertySection.css.ts.vanilla-6MWWAqyd.css} +50 -32
- package/dist/esm/assets/src/components/editor/Timeline/Timeline.css.ts.vanilla-DDX6Zalo.css +203 -0
- package/dist/esm/assets/src/components/feedback/LogView/LogView.css.ts.vanilla-nB5ENOpw.css +312 -0
- package/dist/esm/assets/src/components/navigation/Menu/Menu.css.ts.vanilla-B5iVe5S2.css +88 -0
- package/dist/esm/assets/src/components/navigation/PathBar/PathBar.css.ts.vanilla-BIEzQQOf.css +10 -0
- package/dist/esm/assets/src/components/primitives/viewport/Viewport.css.ts.vanilla-CkFBJ7Vo.css +65 -0
- package/dist/esm/assets/src/components/shell/FloatingPanel/{FloatingPanel.css.ts.vanilla-1rIAXEFp.css → FloatingPanel.css.ts.vanilla-CRaeYJ2b.css} +20 -13
- package/dist/esm/assets/src/theme/{darkTheme.css.ts.vanilla-ab1WD4dr.css → darkTheme.css.ts.vanilla-BHZ3ecRn.css} +3 -3
- package/dist/esm/assets/src/theme/{lightTheme.css.ts.vanilla-OaRI_wIc.css → lightTheme.css.ts.vanilla-Ct6f9Iym.css} +3 -3
- package/dist/esm/components/Icons/AddIcon.js.map +1 -1
- package/dist/esm/components/Icons/AiChatIcon.js.map +1 -1
- package/dist/esm/components/Icons/AiSparklesIcon.js.map +1 -1
- package/dist/esm/components/Icons/ArchiveIcon.js.map +1 -1
- package/dist/esm/components/Icons/ArrowDownIcon.js.map +1 -1
- package/dist/esm/components/Icons/ArrowLeftIcon.js.map +1 -1
- package/dist/esm/components/Icons/ArrowRightIcon.js.map +1 -1
- package/dist/esm/components/Icons/ArrowUpIcon.js.map +1 -1
- package/dist/esm/components/Icons/BookmarkIcon.js.map +1 -1
- package/dist/esm/components/Icons/BugIcon.js.map +1 -1
- package/dist/esm/components/Icons/BuildingIcon.js.map +1 -1
- package/dist/esm/components/Icons/CalendarIcon.js.map +1 -1
- package/dist/esm/components/Icons/CameraIcon.js +31 -0
- package/dist/esm/components/Icons/CameraIcon.js.map +1 -0
- package/dist/esm/components/Icons/CheckIcon.js.map +1 -1
- package/dist/esm/components/Icons/ChevronDownIcon.js.map +1 -1
- package/dist/esm/components/Icons/ChevronLeftIcon.js.map +1 -1
- package/dist/esm/components/Icons/ChevronRightIcon.js.map +1 -1
- package/dist/esm/components/Icons/ChevronUpIcon.js.map +1 -1
- package/dist/esm/components/Icons/CircleIcon.js.map +1 -1
- package/dist/esm/components/Icons/ClockIcon.js.map +1 -1
- package/dist/esm/components/Icons/CloseIcon.js.map +1 -1
- package/dist/esm/components/Icons/CloudUploadIcon.js.map +1 -1
- package/dist/esm/components/Icons/CodeIcon.js.map +1 -1
- package/dist/esm/components/Icons/CopyIcon.js.map +1 -1
- package/dist/esm/components/Icons/CubeIcon.js +31 -0
- package/dist/esm/components/Icons/CubeIcon.js.map +1 -0
- package/dist/esm/components/Icons/CutIcon.js.map +1 -1
- package/dist/esm/components/Icons/DotsHorizontalIcon.js.map +1 -1
- package/dist/esm/components/Icons/DotsVerticalIcon.js.map +1 -1
- package/dist/esm/components/Icons/DownloadIcon.js.map +1 -1
- package/dist/esm/components/Icons/EditIcon.js.map +1 -1
- package/dist/esm/components/Icons/ErrorIcon.js.map +1 -1
- package/dist/esm/components/Icons/ExternalLinkIcon.js.map +1 -1
- package/dist/esm/components/Icons/EyeDropperIcon.js.map +1 -1
- package/dist/esm/components/Icons/EyeIcon.js.map +1 -1
- package/dist/esm/components/Icons/FileTextIcon.js.map +1 -1
- package/dist/esm/components/Icons/FilterIcon.js.map +1 -1
- package/dist/esm/components/Icons/FirstIcon.js.map +1 -1
- package/dist/esm/components/Icons/FolderCogIcon.js.map +1 -1
- package/dist/esm/components/Icons/FolderIcon.js.map +1 -1
- package/dist/esm/components/Icons/FolderOpenIcon.js +2 -2
- package/dist/esm/components/Icons/FolderOpenIcon.js.map +1 -1
- package/dist/esm/components/Icons/FullscreenIcon.js.map +1 -1
- package/dist/esm/components/Icons/GitBranchIcon.js.map +1 -1
- package/dist/esm/components/Icons/GridIcon.js.map +1 -1
- package/dist/esm/components/Icons/HeartIcon.js.map +1 -1
- package/dist/esm/components/Icons/HelpIcon.js.map +1 -1
- package/dist/esm/components/Icons/HomeIcon.js.map +1 -1
- package/dist/esm/components/Icons/ImageIcon.js +31 -0
- package/dist/esm/components/Icons/ImageIcon.js.map +1 -0
- package/dist/esm/components/Icons/InfoIcon.js.map +1 -1
- package/dist/esm/components/Icons/LastIcon.js.map +1 -1
- package/dist/esm/components/Icons/LinkIcon.js.map +1 -1
- package/dist/esm/components/Icons/ListIcon.js.map +1 -1
- package/dist/esm/components/Icons/LockIcon.js.map +1 -1
- package/dist/esm/components/Icons/MaximizeIcon.js.map +1 -1
- package/dist/esm/components/Icons/MenuIcon.js.map +1 -1
- package/dist/esm/components/Icons/MinimizeIcon.js.map +1 -1
- package/dist/esm/components/Icons/MinusIcon.js.map +1 -1
- package/dist/esm/components/Icons/OrbitIcon.js +31 -0
- package/dist/esm/components/Icons/OrbitIcon.js.map +1 -0
- package/dist/esm/components/Icons/PasteIcon.js.map +1 -1
- package/dist/esm/components/Icons/PauseIcon.js +2 -2
- package/dist/esm/components/Icons/PauseIcon.js.map +1 -1
- package/dist/esm/components/Icons/PinIcon.js.map +1 -1
- package/dist/esm/components/Icons/PlayIcon.js.map +1 -1
- package/dist/esm/components/Icons/RedoIcon.js.map +1 -1
- package/dist/esm/components/Icons/RefreshIcon.js.map +1 -1
- package/dist/esm/components/Icons/RobotIcon.js.map +1 -1
- package/dist/esm/components/Icons/RotateIcon.js +32 -0
- package/dist/esm/components/Icons/RotateIcon.js.map +1 -0
- package/dist/esm/components/Icons/SaveIcon.js.map +1 -1
- package/dist/esm/components/Icons/SearchIcon.js.map +1 -1
- package/dist/esm/components/Icons/SendIcon.js.map +1 -1
- package/dist/esm/components/Icons/SettingsIcon.js.map +1 -1
- package/dist/esm/components/Icons/SortIcon.js.map +1 -1
- package/dist/esm/components/Icons/SpinIcon.js +32 -0
- package/dist/esm/components/Icons/SpinIcon.js.map +1 -0
- package/dist/esm/components/Icons/StarIcon.js.map +1 -1
- package/dist/esm/components/Icons/StopIcon.js.map +1 -1
- package/dist/esm/components/Icons/SuccessIcon.js.map +1 -1
- package/dist/esm/components/Icons/TagIcon.js.map +1 -1
- package/dist/esm/components/Icons/TangentAlignedIcon.js.map +1 -1
- package/dist/esm/components/Icons/TangentAutoIcon.js.map +1 -1
- package/dist/esm/components/Icons/TangentFreeIcon.js.map +1 -1
- package/dist/esm/components/Icons/TangentLinearIcon.js.map +1 -1
- package/dist/esm/components/Icons/TangentMirroredIcon.js.map +1 -1
- package/dist/esm/components/Icons/TangentStepIcon.js.map +1 -1
- package/dist/esm/components/Icons/TerminalIcon.js.map +1 -1
- package/dist/esm/components/Icons/TrashIcon.js.map +1 -1
- package/dist/esm/components/Icons/UndoIcon.js.map +1 -1
- package/dist/esm/components/Icons/UnlinkIcon.js.map +1 -1
- package/dist/esm/components/Icons/UnlockIcon.js.map +1 -1
- package/dist/esm/components/Icons/UploadIcon.js.map +1 -1
- package/dist/esm/components/Icons/UserIcon.js.map +1 -1
- package/dist/esm/components/Icons/UsersIcon.js.map +1 -1
- package/dist/esm/components/Icons/WarningIcon.js.map +1 -1
- package/dist/esm/components/Icons/ZoomFitIcon.js +32 -0
- package/dist/esm/components/Icons/ZoomFitIcon.js.map +1 -0
- package/dist/esm/components/Icons/ZoomInIcon.js.map +1 -1
- package/dist/esm/components/Icons/ZoomOutIcon.js.map +1 -1
- package/dist/esm/components/controls/CartesianPicker/CartesianPicker.js +3 -3
- package/dist/esm/components/controls/CartesianPicker/CartesianPicker.js.map +1 -1
- package/dist/esm/components/controls/CartesianPicker/useCartesianInteraction.js +7 -5
- package/dist/esm/components/controls/CartesianPicker/useCartesianInteraction.js.map +1 -1
- package/dist/esm/components/controls/CartesianPicker/useCartesianRenderer.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/AlphaSlider.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/ColorArea.js +2 -2
- package/dist/esm/components/controls/ColorPicker/ColorArea.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/ColorInputs.js +16 -2
- package/dist/esm/components/controls/ColorPicker/ColorInputs.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/ColorPalette.js +3 -1
- package/dist/esm/components/controls/ColorPicker/ColorPalette.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/ColorPicker.js +6 -6
- package/dist/esm/components/controls/ColorPicker/ColorPicker.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/ColorPresets.js +3 -1
- package/dist/esm/components/controls/ColorPicker/ColorPresets.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/ColorSwatch.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/EyeDropper.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/HueSlider.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/colorUtils.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/palettes/material.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/palettes/professional.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/palettes/tailwind.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/useColor.js.map +1 -1
- package/dist/esm/components/controls/Combobox/Combobox.js +46 -23
- package/dist/esm/components/controls/Combobox/Combobox.js.map +1 -1
- package/dist/esm/components/controls/CurveEditor/CurveCanvas.js +11 -4
- package/dist/esm/components/controls/CurveEditor/CurveCanvas.js.map +1 -1
- package/dist/esm/components/controls/CurveEditor/CurveEditor.js +4 -4
- package/dist/esm/components/controls/CurveEditor/CurveEditor.js.map +1 -1
- package/dist/esm/components/controls/CurveEditor/CurveToolbar.js +7 -5
- package/dist/esm/components/controls/CurveEditor/CurveToolbar.js.map +1 -1
- package/dist/esm/components/controls/CurveEditor/curvePresets.js.map +1 -1
- package/dist/esm/components/controls/CurveEditor/curveUtils.js +13 -15
- package/dist/esm/components/controls/CurveEditor/curveUtils.js.map +1 -1
- package/dist/esm/components/controls/CurveEditor/useCurveInteraction.js +72 -50
- package/dist/esm/components/controls/CurveEditor/useCurveInteraction.js.map +1 -1
- package/dist/esm/components/controls/CurveEditor/useCurveRenderer.js +11 -3
- package/dist/esm/components/controls/CurveEditor/useCurveRenderer.js.map +1 -1
- package/dist/esm/components/controls/FileTree/FileTree.css.js +9 -0
- package/dist/esm/components/controls/FileTree/FileTree.css.js.map +1 -0
- package/dist/esm/components/controls/FileTree/FileTree.js +252 -0
- package/dist/esm/components/controls/FileTree/FileTree.js.map +1 -0
- package/dist/esm/components/controls/FileTree/fileTreeIcons.js +129 -0
- package/dist/esm/components/controls/FileTree/fileTreeIcons.js.map +1 -0
- package/dist/esm/components/controls/FileTree/fileTreeLabels.js +8 -0
- package/dist/esm/components/controls/FileTree/fileTreeLabels.js.map +1 -0
- package/dist/esm/components/controls/FileTree/useFileTreeDrop.js +115 -0
- package/dist/esm/components/controls/FileTree/useFileTreeDrop.js.map +1 -0
- package/dist/esm/components/controls/FileUploader/FileUploader.js +3 -6
- package/dist/esm/components/controls/FileUploader/FileUploader.js.map +1 -1
- package/dist/esm/components/controls/MultiSelect/MultiSelect.js +46 -15
- package/dist/esm/components/controls/MultiSelect/MultiSelect.js.map +1 -1
- package/dist/esm/components/controls/NumberInput/NumberInput.js +11 -4
- package/dist/esm/components/controls/NumberInput/NumberInput.js.map +1 -1
- package/dist/esm/components/controls/NumberInput/useNumberInput.js +6 -2
- package/dist/esm/components/controls/NumberInput/useNumberInput.js.map +1 -1
- package/dist/esm/components/controls/Select/Select.css.js +1 -1
- package/dist/esm/components/controls/Select/Select.js +44 -16
- package/dist/esm/components/controls/Select/Select.js.map +1 -1
- package/dist/esm/components/controls/Slider/Slider.js +6 -8
- package/dist/esm/components/controls/Slider/Slider.js.map +1 -1
- package/dist/esm/components/controls/TagInput/TagInput.js +4 -2
- package/dist/esm/components/controls/TagInput/TagInput.js.map +1 -1
- package/dist/esm/components/controls/TreeView/TreeNode.css.js +9 -8
- package/dist/esm/components/controls/TreeView/TreeNode.css.js.map +1 -1
- package/dist/esm/components/controls/TreeView/TreeNode.js +42 -7
- package/dist/esm/components/controls/TreeView/TreeNode.js.map +1 -1
- package/dist/esm/components/controls/TreeView/TreeView.js +18 -6
- package/dist/esm/components/controls/TreeView/TreeView.js.map +1 -1
- package/dist/esm/components/controls/TreeView/useTreeState.js +2 -6
- package/dist/esm/components/controls/TreeView/useTreeState.js.map +1 -1
- package/dist/esm/components/controls/VectorInput/VectorInput.js +13 -4
- package/dist/esm/components/controls/VectorInput/VectorInput.js.map +1 -1
- package/dist/esm/components/data/DataTable/DataTable.js +25 -8
- package/dist/esm/components/data/DataTable/DataTable.js.map +1 -1
- package/dist/esm/components/editor/AssetBrowser/AssetBrowser.css.js +46 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowser.css.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowser.js +254 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowser.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserAnnouncementLive.js +17 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserAnnouncementLive.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserBreadcrumbs.js +25 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserBreadcrumbs.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserContent.js +140 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserContent.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserContext.js +81 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserContext.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserContextMenu.js +123 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserContextMenu.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserDefaultMenus.js +136 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserDefaultMenus.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserGrid.js +137 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserGrid.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserGridItem.js +226 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserGridItem.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserList.js +189 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserList.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserRenameField.js +63 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserRenameField.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserSidebar.js +19 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserSidebar.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserStatusBar.js +24 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserStatusBar.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserStore.js +176 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserStore.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserSurface.js +120 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserSurface.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserToolbar.js +134 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserToolbar.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/assetBrowserFilter.js +90 -0
- package/dist/esm/components/editor/AssetBrowser/assetBrowserFilter.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/assetBrowserFormat.js +32 -0
- package/dist/esm/components/editor/AssetBrowser/assetBrowserFormat.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/assetBrowserGeometry.js +70 -0
- package/dist/esm/components/editor/AssetBrowser/assetBrowserGeometry.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/assetBrowserKeyboard.js +62 -0
- package/dist/esm/components/editor/AssetBrowser/assetBrowserKeyboard.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/assetBrowserLabels.js +52 -0
- package/dist/esm/components/editor/AssetBrowser/assetBrowserLabels.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/slots.js +18 -0
- package/dist/esm/components/editor/AssetBrowser/slots.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetBrowserAnnouncement.js +19 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetBrowserAnnouncement.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetBrowserHandle.js +70 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetBrowserHandle.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetBrowserViewState.js +108 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetBrowserViewState.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetDnd.js +192 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetDnd.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetGridKeyboardNav.js +91 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetGridKeyboardNav.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetGridVirtualizer.js +91 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetGridVirtualizer.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetMarqueeGesture.js +128 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetMarqueeGesture.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetMutationKeyboard.js +72 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetMutationKeyboard.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetMutations.js +141 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetMutations.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetNavigation.js +113 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetNavigation.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetSelectionController.js +174 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetSelectionController.js.map +1 -0
- package/dist/esm/components/editor/ChatPanel/ChatActionBar.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatAttachment.js +8 -2
- package/dist/esm/components/editor/ChatPanel/ChatAttachment.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatBubble.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatCodeBlock.js +20 -4
- package/dist/esm/components/editor/ChatPanel/ChatCodeBlock.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatContextChip.js +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatContextChip.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatEmptyState.js +3 -1
- package/dist/esm/components/editor/ChatPanel/ChatEmptyState.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatIcons.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatInput.js +10 -3
- package/dist/esm/components/editor/ChatPanel/ChatInput.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatInputToolbar.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatMarkdownRenderer.js +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatMarkdownRenderer.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatMessage.js +10 -3
- package/dist/esm/components/editor/ChatPanel/ChatMessage.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatMessageList.js +5 -3
- package/dist/esm/components/editor/ChatPanel/ChatMessageList.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatPanel.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatToolCall.js +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatToolCall.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatTypingIndicator.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/useChatInput.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/useChatMessages.js +7 -4
- package/dist/esm/components/editor/ChatPanel/useChatMessages.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/useChatScroll.js +6 -1
- package/dist/esm/components/editor/ChatPanel/useChatScroll.js.map +1 -1
- package/dist/esm/components/editor/Minimap/Minimap.css.js +18 -0
- package/dist/esm/components/editor/Minimap/Minimap.css.js.map +1 -0
- package/dist/esm/components/editor/Minimap/Minimap.js +257 -0
- package/dist/esm/components/editor/Minimap/Minimap.js.map +1 -0
- package/dist/esm/components/editor/Minimap/Minimap.types.js +11 -0
- package/dist/esm/components/editor/Minimap/Minimap.types.js.map +1 -0
- package/dist/esm/components/editor/Minimap/MinimapContext.js +48 -0
- package/dist/esm/components/editor/Minimap/MinimapContext.js.map +1 -0
- package/dist/esm/components/editor/Minimap/MinimapCorner.js +16 -0
- package/dist/esm/components/editor/Minimap/MinimapCorner.js.map +1 -0
- package/dist/esm/components/editor/Minimap/MinimapFooter.js +16 -0
- package/dist/esm/components/editor/Minimap/MinimapFooter.js.map +1 -0
- package/dist/esm/components/editor/Minimap/MinimapStore.js +166 -0
- package/dist/esm/components/editor/Minimap/MinimapStore.js.map +1 -0
- package/dist/esm/components/editor/Minimap/MinimapTitle.js +16 -0
- package/dist/esm/components/editor/Minimap/MinimapTitle.js.map +1 -0
- package/dist/esm/components/editor/Minimap/ViewportMinimap.js +69 -0
- package/dist/esm/components/editor/Minimap/ViewportMinimap.js.map +1 -0
- package/dist/esm/components/editor/Minimap/computeBoundsFromItems.js +65 -0
- package/dist/esm/components/editor/Minimap/computeBoundsFromItems.js.map +1 -0
- package/dist/esm/components/editor/Minimap/index.js +15 -0
- package/dist/esm/components/editor/Minimap/index.js.map +1 -0
- package/dist/esm/components/editor/Minimap/minimapCoords.js +105 -0
- package/dist/esm/components/editor/Minimap/minimapCoords.js.map +1 -0
- package/dist/esm/components/editor/Minimap/minimapDrawing.js +93 -0
- package/dist/esm/components/editor/Minimap/minimapDrawing.js.map +1 -0
- package/dist/esm/components/editor/Minimap/minimapHitTest.js +59 -0
- package/dist/esm/components/editor/Minimap/minimapHitTest.js.map +1 -0
- package/dist/esm/components/editor/Minimap/useMinimapGestures.js +299 -0
- package/dist/esm/components/editor/Minimap/useMinimapGestures.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraph.css.js +36 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraph.css.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraph.js +627 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraph.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraph.types.js +10 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraph.types.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphContext.js +54 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphContext.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphEdgeLabels.js +137 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphEdgeLabels.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphGroup.js +211 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphGroup.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphMinimap.js +122 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphMinimap.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphNode.js +170 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphNode.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphNodeContext.js +21 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphNodeContext.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphNodeParts.js +56 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphNodeParts.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphNodeSection.js +59 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphNodeSection.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphNodeSectionContext.js +17 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphNodeSectionContext.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphPin.js +35 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphPin.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphPort.js +191 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphPort.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphPortVisual.js +46 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphPortVisual.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphSlots.js +50 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphSlots.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphSpawnPalette.js +70 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphSpawnPalette.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphStore.js +543 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphStore.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphToolbar.js +100 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphToolbar.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/createTypeMatchValidator.js +37 -0
- package/dist/esm/components/editor/NodeGraph/createTypeMatchValidator.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/nodeGraphActions.js +53 -0
- package/dist/esm/components/editor/NodeGraph/nodeGraphActions.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/nodeGraphDrawing.js +461 -0
- package/dist/esm/components/editor/NodeGraph/nodeGraphDrawing.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/nodeGraphIds.js +31 -0
- package/dist/esm/components/editor/NodeGraph/nodeGraphIds.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/nodeGraphMath.js +350 -0
- package/dist/esm/components/editor/NodeGraph/nodeGraphMath.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/sortSlots.js +69 -0
- package/dist/esm/components/editor/NodeGraph/sortSlots.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/useDragGesture.js +63 -0
- package/dist/esm/components/editor/NodeGraph/useDragGesture.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraph.js +207 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraph.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraphConnection.js +334 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraphConnection.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraphEdgeInteraction.js +137 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraphEdgeInteraction.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraphGroupDrag.js +392 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraphGroupDrag.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraphKeyboard.js +164 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraphKeyboard.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraphNodeDrag.js +234 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraphNodeDrag.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/useStoreSlice.js +49 -0
- package/dist/esm/components/editor/NodeGraph/useStoreSlice.js.map +1 -0
- package/dist/esm/components/editor/PropertyInspector/PropertyGroup.js +1 -1
- package/dist/esm/components/editor/PropertyInspector/PropertyGroup.js.map +1 -1
- package/dist/esm/components/editor/PropertyInspector/PropertyPanel.css.js +4 -3
- package/dist/esm/components/editor/PropertyInspector/PropertyPanel.css.js.map +1 -1
- package/dist/esm/components/editor/PropertyInspector/PropertyPanel.js +12 -7
- package/dist/esm/components/editor/PropertyInspector/PropertyPanel.js.map +1 -1
- package/dist/esm/components/editor/PropertyInspector/PropertyRow.css.js +7 -6
- package/dist/esm/components/editor/PropertyInspector/PropertyRow.css.js.map +1 -1
- package/dist/esm/components/editor/PropertyInspector/PropertyRow.js +21 -5
- package/dist/esm/components/editor/PropertyInspector/PropertyRow.js.map +1 -1
- package/dist/esm/components/editor/PropertyInspector/PropertySection.css.js +11 -10
- package/dist/esm/components/editor/PropertyInspector/PropertySection.css.js.map +1 -1
- package/dist/esm/components/editor/PropertyInspector/PropertySection.js +32 -11
- package/dist/esm/components/editor/PropertyInspector/PropertySection.js.map +1 -1
- package/dist/esm/components/editor/PropertyInspector/usePropertyUndo.js.map +1 -1
- package/dist/esm/components/editor/Timeline/Timeline.css.js +23 -0
- package/dist/esm/components/editor/Timeline/Timeline.css.js.map +1 -0
- package/dist/esm/components/editor/Timeline/Timeline.js +450 -0
- package/dist/esm/components/editor/Timeline/Timeline.js.map +1 -0
- package/dist/esm/components/editor/Timeline/Timeline.types.js +10 -0
- package/dist/esm/components/editor/Timeline/Timeline.types.js.map +1 -0
- package/dist/esm/components/editor/Timeline/TimelineContext.js +69 -0
- package/dist/esm/components/editor/Timeline/TimelineContext.js.map +1 -0
- package/dist/esm/components/editor/Timeline/TimelineFooter.js +16 -0
- package/dist/esm/components/editor/Timeline/TimelineFooter.js.map +1 -0
- package/dist/esm/components/editor/Timeline/TimelineMinimap.js +280 -0
- package/dist/esm/components/editor/Timeline/TimelineMinimap.js.map +1 -0
- package/dist/esm/components/editor/Timeline/TimelineStore.js +289 -0
- package/dist/esm/components/editor/Timeline/TimelineStore.js.map +1 -0
- package/dist/esm/components/editor/Timeline/TimelineToolbar.js +15 -0
- package/dist/esm/components/editor/Timeline/TimelineToolbar.js.map +1 -0
- package/dist/esm/components/editor/Timeline/TimelineTrackHeaders.js +142 -0
- package/dist/esm/components/editor/Timeline/TimelineTrackHeaders.js.map +1 -0
- package/dist/esm/components/editor/Timeline/TimelineTrackScale.js +18 -0
- package/dist/esm/components/editor/Timeline/TimelineTrackScale.js.map +1 -0
- package/dist/esm/components/editor/Timeline/index.js +18 -0
- package/dist/esm/components/editor/Timeline/index.js.map +1 -0
- package/dist/esm/components/editor/Timeline/timelineCoords.js +118 -0
- package/dist/esm/components/editor/Timeline/timelineCoords.js.map +1 -0
- package/dist/esm/components/editor/Timeline/timelineDrawing.js +390 -0
- package/dist/esm/components/editor/Timeline/timelineDrawing.js.map +1 -0
- package/dist/esm/components/editor/Timeline/timelineEdits.js +323 -0
- package/dist/esm/components/editor/Timeline/timelineEdits.js.map +1 -0
- package/dist/esm/components/editor/Timeline/timelineHitTest.js +153 -0
- package/dist/esm/components/editor/Timeline/timelineHitTest.js.map +1 -0
- package/dist/esm/components/editor/Timeline/timelineLayout.js +39 -0
- package/dist/esm/components/editor/Timeline/timelineLayout.js.map +1 -0
- package/dist/esm/components/editor/Timeline/timelineSelection.js +0 -0
- package/dist/esm/components/editor/Timeline/timelineSelection.js.map +1 -0
- package/dist/esm/components/editor/Timeline/useTimelineDraw.js +156 -0
- package/dist/esm/components/editor/Timeline/useTimelineDraw.js.map +1 -0
- package/dist/esm/components/editor/Timeline/useTimelineGestures.js +587 -0
- package/dist/esm/components/editor/Timeline/useTimelineGestures.js.map +1 -0
- package/dist/esm/components/editor/Timeline/useTimelinePlayback.js +85 -0
- package/dist/esm/components/editor/Timeline/useTimelinePlayback.js.map +1 -0
- package/dist/esm/components/editor/TransformControl/TransformControl.js +4 -4
- package/dist/esm/components/editor/TransformControl/TransformControl.js.map +1 -1
- package/dist/esm/components/editor/ViewportGizmo/ViewportGizmo.js +8 -4
- package/dist/esm/components/editor/ViewportGizmo/ViewportGizmo.js.map +1 -1
- package/dist/esm/components/editor/ViewportGizmo/gizmoMath.js +6 -2
- package/dist/esm/components/editor/ViewportGizmo/gizmoMath.js.map +1 -1
- package/dist/esm/components/editor/ViewportGizmo/useGizmoInteraction.js +8 -6
- package/dist/esm/components/editor/ViewportGizmo/useGizmoInteraction.js.map +1 -1
- package/dist/esm/components/editor/ViewportGizmo/useGizmoRenderer.js +1 -2
- package/dist/esm/components/editor/ViewportGizmo/useGizmoRenderer.js.map +1 -1
- package/dist/esm/components/feedback/Alert/Alert.js +8 -8
- package/dist/esm/components/feedback/Alert/Alert.js.map +1 -1
- package/dist/esm/components/feedback/Alert/AlertActions.js.map +1 -1
- package/dist/esm/components/feedback/Alert/AlertDescription.js.map +1 -1
- package/dist/esm/components/feedback/Alert/AlertTitle.js.map +1 -1
- package/dist/esm/components/feedback/CommandPalette/CommandPalette.js +32 -22
- package/dist/esm/components/feedback/CommandPalette/CommandPalette.js.map +1 -1
- package/dist/esm/components/feedback/CommandPalette/fuzzySearch.js.map +1 -1
- package/dist/esm/components/feedback/CommandPalette/useRecentItems.js +3 -1
- package/dist/esm/components/feedback/CommandPalette/useRecentItems.js.map +1 -1
- package/dist/esm/components/feedback/Dialog/Dialog.js +6 -3
- package/dist/esm/components/feedback/Dialog/Dialog.js.map +1 -1
- package/dist/esm/components/feedback/Dialog/DialogBody.js.map +1 -1
- package/dist/esm/components/feedback/Dialog/DialogClose.js.map +1 -1
- package/dist/esm/components/feedback/Dialog/DialogFooter.js.map +1 -1
- package/dist/esm/components/feedback/Dialog/DialogHeader.js +1 -1
- package/dist/esm/components/feedback/Dialog/DialogHeader.js.map +1 -1
- package/dist/esm/components/feedback/Dialog/useDialogAnimation.js +10 -2
- package/dist/esm/components/feedback/Dialog/useDialogAnimation.js.map +1 -1
- package/dist/esm/components/feedback/Drawer/Drawer.js +4 -1
- package/dist/esm/components/feedback/Drawer/Drawer.js.map +1 -1
- package/dist/esm/components/feedback/Drawer/useDrawerAnimation.js +4 -0
- package/dist/esm/components/feedback/Drawer/useDrawerAnimation.js.map +1 -1
- package/dist/esm/components/feedback/EmptyState/EmptyState.js +1 -1
- package/dist/esm/components/feedback/EmptyState/EmptyState.js.map +1 -1
- package/dist/esm/components/feedback/LogView/LogView.css.js +35 -0
- package/dist/esm/components/feedback/LogView/LogView.css.js.map +1 -0
- package/dist/esm/components/feedback/LogView/LogView.js +297 -0
- package/dist/esm/components/feedback/LogView/LogView.js.map +1 -0
- package/dist/esm/components/feedback/LogView/LogViewBody.js +205 -0
- package/dist/esm/components/feedback/LogView/LogViewBody.js.map +1 -0
- package/dist/esm/components/feedback/LogView/LogViewContext.js +31 -0
- package/dist/esm/components/feedback/LogView/LogViewContext.js.map +1 -0
- package/dist/esm/components/feedback/LogView/LogViewParts.js +73 -0
- package/dist/esm/components/feedback/LogView/LogViewParts.js.map +1 -0
- package/dist/esm/components/feedback/LogView/LogViewStore.js +240 -0
- package/dist/esm/components/feedback/LogView/LogViewStore.js.map +1 -0
- package/dist/esm/components/feedback/LogView/logViewLabels.js +25 -0
- package/dist/esm/components/feedback/LogView/logViewLabels.js.map +1 -0
- package/dist/esm/components/feedback/LogView/logViewLevels.js +74 -0
- package/dist/esm/components/feedback/LogView/logViewLevels.js.map +1 -0
- package/dist/esm/components/feedback/LogView/logViewUtils.js +128 -0
- package/dist/esm/components/feedback/LogView/logViewUtils.js.map +1 -0
- package/dist/esm/components/feedback/LogView/useFollowTail.js +95 -0
- package/dist/esm/components/feedback/LogView/useFollowTail.js.map +1 -0
- package/dist/esm/components/feedback/LogView/useLogSelection.js +113 -0
- package/dist/esm/components/feedback/LogView/useLogSelection.js.map +1 -0
- package/dist/esm/components/feedback/ProgressBar/CircularProgress.js +1 -1
- package/dist/esm/components/feedback/ProgressBar/CircularProgress.js.map +1 -1
- package/dist/esm/components/feedback/ProgressBar/ProgressBar.js +1 -1
- package/dist/esm/components/feedback/ProgressBar/ProgressBar.js.map +1 -1
- package/dist/esm/components/feedback/Skeleton/Skeleton.js +1 -1
- package/dist/esm/components/feedback/Skeleton/Skeleton.js.map +1 -1
- package/dist/esm/components/feedback/Skeleton/SkeletonGroup.js +1 -1
- package/dist/esm/components/feedback/Skeleton/SkeletonGroup.js.map +1 -1
- package/dist/esm/components/feedback/Skeleton/SkeletonLayout.js +1 -1
- package/dist/esm/components/feedback/Skeleton/SkeletonLayout.js.map +1 -1
- package/dist/esm/components/feedback/Spinner/Spinner.js +1 -1
- package/dist/esm/components/feedback/Spinner/Spinner.js.map +1 -1
- package/dist/esm/components/feedback/Stat/Stat.js.map +1 -1
- package/dist/esm/components/feedback/Toast/ToastContainer.js +1 -1
- package/dist/esm/components/feedback/Toast/ToastContainer.js.map +1 -1
- package/dist/esm/components/feedback/Toast/ToastItem.js +7 -3
- package/dist/esm/components/feedback/Toast/ToastItem.js.map +1 -1
- package/dist/esm/components/feedback/Toast/ToastProvider.js.map +1 -1
- package/dist/esm/components/feedback/Toast/useToast.js.map +1 -1
- package/dist/esm/components/form/FormHelperText.js.map +1 -1
- package/dist/esm/components/form/FormLabel.js.map +1 -1
- package/dist/esm/components/form/InputWrapper.js.map +1 -1
- package/dist/esm/components/layout/Accordion/Accordion.js +1 -1
- package/dist/esm/components/layout/Accordion/Accordion.js.map +1 -1
- package/dist/esm/components/layout/Accordion/AccordionContent.js +1 -1
- package/dist/esm/components/layout/Accordion/AccordionContent.js.map +1 -1
- package/dist/esm/components/layout/Accordion/AccordionItem.js +1 -1
- package/dist/esm/components/layout/Accordion/AccordionItem.js.map +1 -1
- package/dist/esm/components/layout/Accordion/AccordionTrigger.js +7 -2
- package/dist/esm/components/layout/Accordion/AccordionTrigger.js.map +1 -1
- package/dist/esm/components/layout/Card/Card.js +2 -2
- package/dist/esm/components/layout/Card/Card.js.map +1 -1
- package/dist/esm/components/layout/Divider/Divider.js.map +1 -1
- package/dist/esm/components/layout/Flex/Flex.js +1 -1
- package/dist/esm/components/layout/Flex/Flex.js.map +1 -1
- package/dist/esm/components/layout/Grid/Grid.js +1 -1
- package/dist/esm/components/layout/Grid/Grid.js.map +1 -1
- package/dist/esm/components/layout/ListItem/ListItem.js +1 -1
- package/dist/esm/components/layout/ListItem/ListItem.js.map +1 -1
- package/dist/esm/components/layout/PageHeader/PageHeader.js.map +1 -1
- package/dist/esm/components/layout/PanelSurface/PanelSurface.js +3 -3
- package/dist/esm/components/layout/PanelSurface/PanelSurface.js.map +1 -1
- package/dist/esm/components/layout/ScrollArea/ScrollArea.js +91 -23
- package/dist/esm/components/layout/ScrollArea/ScrollArea.js.map +1 -1
- package/dist/esm/components/layout/Spacer/Spacer.js.map +1 -1
- package/dist/esm/components/layout/SplitPane/SplitPane.js +29 -16
- package/dist/esm/components/layout/SplitPane/SplitPane.js.map +1 -1
- package/dist/esm/components/layout/SplitPane/SplitPanePanel.js.map +1 -1
- package/dist/esm/components/layout/Stack/Stack.js +1 -1
- package/dist/esm/components/layout/Stack/Stack.js.map +1 -1
- package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbEllipsis.js +4 -0
- package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbEllipsis.js.map +1 -1
- package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbItem.js +6 -2
- package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbItem.js.map +1 -1
- package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbSeparator.js.map +1 -1
- package/dist/esm/components/navigation/Breadcrumbs/Breadcrumbs.js +13 -2
- package/dist/esm/components/navigation/Breadcrumbs/Breadcrumbs.js.map +1 -1
- package/dist/esm/components/navigation/ContextMenu/ContextMenu.js +45 -39
- package/dist/esm/components/navigation/ContextMenu/ContextMenu.js.map +1 -1
- package/dist/esm/components/navigation/Menu/Menu.css.js +9 -12
- package/dist/esm/components/navigation/Menu/Menu.css.js.map +1 -1
- package/dist/esm/components/navigation/Menu/Menu.js +97 -63
- package/dist/esm/components/navigation/Menu/Menu.js.map +1 -1
- package/dist/esm/components/navigation/Menu/MenuGapContext.js +19 -0
- package/dist/esm/components/navigation/Menu/MenuGapContext.js.map +1 -0
- package/dist/esm/components/navigation/Pagination/Pagination.js.map +1 -1
- package/dist/esm/components/navigation/Pagination/usePagination.js.map +1 -1
- package/dist/esm/components/navigation/PathBar/PathBar.css.js +6 -0
- package/dist/esm/components/navigation/PathBar/PathBar.css.js.map +1 -0
- package/dist/esm/components/navigation/PathBar/PathBar.js +184 -0
- package/dist/esm/components/navigation/PathBar/PathBar.js.map +1 -0
- package/dist/esm/components/navigation/PathBar/PathBarSiblingMenu.js +151 -0
- package/dist/esm/components/navigation/PathBar/PathBarSiblingMenu.js.map +1 -0
- package/dist/esm/components/navigation/PathBar/pathUtils.js +118 -0
- package/dist/esm/components/navigation/PathBar/pathUtils.js.map +1 -0
- package/dist/esm/components/navigation/SegmentedControl/SegmentedControl.js +16 -6
- package/dist/esm/components/navigation/SegmentedControl/SegmentedControl.js.map +1 -1
- package/dist/esm/components/navigation/SegmentedControl/SegmentedControlItem.js +1 -1
- package/dist/esm/components/navigation/SegmentedControl/SegmentedControlItem.js.map +1 -1
- package/dist/esm/components/navigation/Tabs/Tab.js +10 -3
- package/dist/esm/components/navigation/Tabs/Tab.js.map +1 -1
- package/dist/esm/components/navigation/Tabs/TabList.js +5 -2
- package/dist/esm/components/navigation/Tabs/TabList.js.map +1 -1
- package/dist/esm/components/navigation/Tabs/TabPanel.js +1 -1
- package/dist/esm/components/navigation/Tabs/TabPanel.js.map +1 -1
- package/dist/esm/components/navigation/Tabs/Tabs.js.map +1 -1
- package/dist/esm/components/primitives/Avatar/Avatar.js +11 -4
- package/dist/esm/components/primitives/Avatar/Avatar.js.map +1 -1
- package/dist/esm/components/primitives/Avatar/AvatarGroup.js +2 -2
- package/dist/esm/components/primitives/Avatar/AvatarGroup.js.map +1 -1
- package/dist/esm/components/primitives/Badge/Badge.js +10 -3
- package/dist/esm/components/primitives/Badge/Badge.js.map +1 -1
- package/dist/esm/components/primitives/Button/Button.js.map +1 -1
- package/dist/esm/components/primitives/Checkbox/Checkbox.js +6 -4
- package/dist/esm/components/primitives/Checkbox/Checkbox.js.map +1 -1
- package/dist/esm/components/primitives/Checkbox/CheckboxGroup.js +2 -2
- package/dist/esm/components/primitives/Checkbox/CheckboxGroup.js.map +1 -1
- package/dist/esm/components/primitives/Code/Code.js.map +1 -1
- package/dist/esm/components/primitives/Collapsible/Collapsible.js +2 -2
- package/dist/esm/components/primitives/Collapsible/Collapsible.js.map +1 -1
- package/dist/esm/components/primitives/HoverCard/HoverCard.js +5 -3
- package/dist/esm/components/primitives/HoverCard/HoverCard.js.map +1 -1
- package/dist/esm/components/primitives/Icon/Icon.js +1 -1
- package/dist/esm/components/primitives/Icon/Icon.js.map +1 -1
- package/dist/esm/components/primitives/IconButton/IconButton.js.map +1 -1
- package/dist/esm/components/primitives/Input/Input.js +1 -1
- package/dist/esm/components/primitives/Input/Input.js.map +1 -1
- package/dist/esm/components/primitives/Kbd/Kbd.js +1 -1
- package/dist/esm/components/primitives/Kbd/Kbd.js.map +1 -1
- package/dist/esm/components/primitives/Link/Link.js.map +1 -1
- package/dist/esm/components/primitives/Paper/Paper.js.map +1 -1
- package/dist/esm/components/primitives/Popover/Popover.js +1 -1
- package/dist/esm/components/primitives/Popover/Popover.js.map +1 -1
- package/dist/esm/components/primitives/Popover/PopoverClose.js +1 -1
- package/dist/esm/components/primitives/Popover/PopoverClose.js.map +1 -1
- package/dist/esm/components/primitives/Popover/PopoverContent.js +6 -4
- package/dist/esm/components/primitives/Popover/PopoverContent.js.map +1 -1
- package/dist/esm/components/primitives/Popover/PopoverTrigger.js.map +1 -1
- package/dist/esm/components/primitives/Radio/Radio.js +3 -3
- package/dist/esm/components/primitives/Radio/Radio.js.map +1 -1
- package/dist/esm/components/primitives/Radio/RadioGroup.js +2 -2
- package/dist/esm/components/primitives/Radio/RadioGroup.js.map +1 -1
- package/dist/esm/components/primitives/Switch/Switch.js +1 -1
- package/dist/esm/components/primitives/Switch/Switch.js.map +1 -1
- package/dist/esm/components/primitives/Text/Text.js.map +1 -1
- package/dist/esm/components/primitives/TextArea/TextArea.js +3 -4
- package/dist/esm/components/primitives/TextArea/TextArea.js.map +1 -1
- package/dist/esm/components/primitives/Tooltip/Arrow.js +1 -1
- package/dist/esm/components/primitives/Tooltip/Arrow.js.map +1 -1
- package/dist/esm/components/primitives/Tooltip/Tooltip.js +9 -7
- package/dist/esm/components/primitives/Tooltip/Tooltip.js.map +1 -1
- package/dist/esm/components/primitives/Tooltip/utils.js +1 -1
- package/dist/esm/components/primitives/Tooltip/utils.js.map +1 -1
- package/dist/esm/components/primitives/VisuallyHidden/VisuallyHidden.js.map +1 -1
- package/dist/esm/components/primitives/canvas/CanvasContainer.js +1 -1
- package/dist/esm/components/primitives/canvas/CanvasContainer.js.map +1 -1
- package/dist/esm/components/primitives/canvas/canvasCoords.js.map +1 -1
- package/dist/esm/components/primitives/canvas/canvasDrawing.js +1 -1
- package/dist/esm/components/primitives/canvas/canvasDrawing.js.map +1 -1
- package/dist/esm/components/primitives/canvas/canvasTheme.js.map +1 -1
- package/dist/esm/components/primitives/canvas/useCanvasRenderer.js +8 -2
- package/dist/esm/components/primitives/canvas/useCanvasRenderer.js.map +1 -1
- package/dist/esm/components/primitives/viewport/Viewport.css.js +12 -0
- package/dist/esm/components/primitives/viewport/Viewport.css.js.map +1 -0
- package/dist/esm/components/primitives/viewport/Viewport.js +189 -0
- package/dist/esm/components/primitives/viewport/Viewport.js.map +1 -0
- package/dist/esm/components/primitives/viewport/ViewportContext.js +47 -0
- package/dist/esm/components/primitives/viewport/ViewportContext.js.map +1 -0
- package/dist/esm/components/primitives/viewport/ViewportLayer.js +113 -0
- package/dist/esm/components/primitives/viewport/ViewportLayer.js.map +1 -0
- package/dist/esm/components/primitives/viewport/ViewportOverlay.js +47 -0
- package/dist/esm/components/primitives/viewport/ViewportOverlay.js.map +1 -0
- package/dist/esm/components/primitives/viewport/ViewportStore.js +210 -0
- package/dist/esm/components/primitives/viewport/ViewportStore.js.map +1 -0
- package/dist/esm/components/primitives/viewport/ViewportWorld.js +38 -0
- package/dist/esm/components/primitives/viewport/ViewportWorld.js.map +1 -0
- package/dist/esm/components/primitives/viewport/useViewportGestures.js +333 -0
- package/dist/esm/components/primitives/viewport/useViewportGestures.js.map +1 -0
- package/dist/esm/components/primitives/viewport/viewportCoords.js +37 -0
- package/dist/esm/components/primitives/viewport/viewportCoords.js.map +1 -0
- package/dist/esm/components/primitives/viewport/viewportMath.js +77 -0
- package/dist/esm/components/primitives/viewport/viewportMath.js.map +1 -0
- package/dist/esm/components/shell/AppShell/AppShell.js +1 -1
- package/dist/esm/components/shell/AppShell/AppShell.js.map +1 -1
- package/dist/esm/components/shell/FloatingPanel/FloatingPanel.css.js +11 -10
- package/dist/esm/components/shell/FloatingPanel/FloatingPanel.css.js.map +1 -1
- package/dist/esm/components/shell/FloatingPanel/FloatingPanel.js +60 -24
- package/dist/esm/components/shell/FloatingPanel/FloatingPanel.js.map +1 -1
- package/dist/esm/components/shell/MenuBar/MenuBar.js +23 -16
- package/dist/esm/components/shell/MenuBar/MenuBar.js.map +1 -1
- package/dist/esm/components/shell/StatusBar/StatusBar.js.map +1 -1
- package/dist/esm/components/shell/Toolbar/Toolbar.js +4 -3
- package/dist/esm/components/shell/Toolbar/Toolbar.js.map +1 -1
- package/dist/esm/context/KeyboardContext.js.map +1 -1
- package/dist/esm/hooks/useBreakpoint/useBreakpoint.js +1 -1
- package/dist/esm/hooks/useBreakpoint/useBreakpoint.js.map +1 -1
- package/dist/esm/hooks/useClickOutside/useClickOutside.js +9 -9
- package/dist/esm/hooks/useClickOutside/useClickOutside.js.map +1 -1
- package/dist/esm/hooks/useClipboard/useClipboard.js +4 -0
- package/dist/esm/hooks/useClipboard/useClipboard.js.map +1 -1
- package/dist/esm/hooks/useControlledState/useControlledState.js.map +1 -1
- package/dist/esm/hooks/useDebounced/useDebouncedCallback.js +11 -6
- package/dist/esm/hooks/useDebounced/useDebouncedCallback.js.map +1 -1
- package/dist/esm/hooks/useDebounced/useDebouncedValue.js +16 -4
- package/dist/esm/hooks/useDebounced/useDebouncedValue.js.map +1 -1
- package/dist/esm/hooks/useDisclosure/useDisclosure.js.map +1 -1
- package/dist/esm/hooks/useEventCallback/useEventCallback.js +49 -0
- package/dist/esm/hooks/useEventCallback/useEventCallback.js.map +1 -0
- package/dist/esm/hooks/useFocusTrap/useFocusTrap.js.map +1 -1
- package/dist/esm/hooks/useHotkey/useHotkey.js +7 -12
- package/dist/esm/hooks/useHotkey/useHotkey.js.map +1 -1
- package/dist/esm/hooks/useIntersectionObserver/useIntersectionObserver.js +2 -0
- package/dist/esm/hooks/useIntersectionObserver/useIntersectionObserver.js.map +1 -1
- package/dist/esm/hooks/useIsMounted/useIsMounted.js +43 -0
- package/dist/esm/hooks/useIsMounted/useIsMounted.js.map +1 -0
- package/dist/esm/hooks/useKeyboard/useKeyboard.js.map +1 -1
- package/dist/esm/hooks/useKeyboard/utils.js.map +1 -1
- package/dist/esm/hooks/useLatest/useLatest.js +31 -0
- package/dist/esm/hooks/useLatest/useLatest.js.map +1 -0
- package/dist/esm/hooks/useListboxNav/useListboxNav.js +29 -13
- package/dist/esm/hooks/useListboxNav/useListboxNav.js.map +1 -1
- package/dist/esm/hooks/useMediaQuery/useMediaQuery.js +7 -1
- package/dist/esm/hooks/useMediaQuery/useMediaQuery.js.map +1 -1
- package/dist/esm/hooks/useMergedRef/useMergedRef.js +6 -1
- package/dist/esm/hooks/useMergedRef/useMergedRef.js.map +1 -1
- package/dist/esm/hooks/useNavigationHistory/useNavigationHistory.js +146 -0
- package/dist/esm/hooks/useNavigationHistory/useNavigationHistory.js.map +1 -0
- package/dist/esm/hooks/useResizeObserver/useResizeObserver.js +6 -8
- package/dist/esm/hooks/useResizeObserver/useResizeObserver.js.map +1 -1
- package/dist/esm/hooks/useTheme/useTheme.js +6 -3
- package/dist/esm/hooks/useTheme/useTheme.js.map +1 -1
- package/dist/esm/hooks/useThrottledCallback/useThrottledCallback.js +9 -4
- package/dist/esm/hooks/useThrottledCallback/useThrottledCallback.js.map +1 -1
- package/dist/esm/index.js +63 -4
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/node_modules/tslib/tslib.es6.js +37 -0
- package/dist/esm/node_modules/tslib/tslib.es6.js.map +1 -0
- package/dist/esm/styles.js +3 -0
- package/dist/esm/styles.js.map +1 -0
- package/dist/esm/theme/ThemeProvider.js +6 -4
- package/dist/esm/theme/ThemeProvider.js.map +1 -1
- package/dist/esm/theme/VanillaThemeProvider.js.map +1 -1
- package/dist/esm/theme/breakpoints.js.map +1 -1
- package/dist/esm/theme/contract.css.js +1 -1
- package/dist/esm/theme/createCustomTheme.js +2 -2
- package/dist/esm/theme/createCustomTheme.js.map +1 -1
- package/dist/esm/theme/createLightTheme.js.map +1 -1
- package/dist/esm/theme/darkTheme.css.js +2 -2
- package/dist/esm/theme/darkThemeValues.js +1 -1
- package/dist/esm/theme/darkThemeValues.js.map +1 -1
- package/dist/esm/theme/lightTheme.css.js +1 -1
- package/dist/esm/theme/lightThemeValues.js +1 -1
- package/dist/esm/theme/lightThemeValues.js.map +1 -1
- package/dist/esm/theme/themeContractData.js +4 -4
- package/dist/esm/theme/themeContractData.js.map +1 -1
- package/dist/esm/utils/cx.js.map +1 -1
- package/dist/esm/utils/devWarn.js +1 -1
- package/dist/esm/utils/devWarn.js.map +1 -1
- package/dist/esm/utils/mathExpression.js +1 -1
- package/dist/esm/utils/mathExpression.js.map +1 -1
- package/dist/esm/utils/mathUtils.js.map +1 -1
- package/dist/esm/utils/objects.js.map +1 -1
- package/dist/esm/utils/platform.js.map +1 -1
- package/dist/tokens/tokens.dark.css +1 -1
- package/dist/tokens/tokens.json +1 -1
- package/dist/tokens/tokens.light.css +1 -1
- package/dist/types/components/Icons/AddIcon.d.ts +1 -1
- package/dist/types/components/Icons/AiChatIcon.d.ts +1 -1
- package/dist/types/components/Icons/AiSparklesIcon.d.ts +1 -1
- package/dist/types/components/Icons/ArchiveIcon.d.ts +1 -1
- package/dist/types/components/Icons/ArrowDownIcon.d.ts +1 -1
- package/dist/types/components/Icons/ArrowLeftIcon.d.ts +1 -1
- package/dist/types/components/Icons/ArrowRightIcon.d.ts +1 -1
- package/dist/types/components/Icons/ArrowUpIcon.d.ts +1 -1
- package/dist/types/components/Icons/BookmarkIcon.d.ts +1 -1
- package/dist/types/components/Icons/BugIcon.d.ts +1 -1
- package/dist/types/components/Icons/BuildingIcon.d.ts +1 -1
- package/dist/types/components/Icons/CalendarIcon.d.ts +1 -1
- package/dist/types/components/Icons/CameraIcon.d.ts +34 -0
- package/dist/types/components/Icons/CheckIcon.d.ts +1 -1
- package/dist/types/components/Icons/ChevronDownIcon.d.ts +1 -1
- package/dist/types/components/Icons/ChevronLeftIcon.d.ts +1 -1
- package/dist/types/components/Icons/ChevronRightIcon.d.ts +1 -1
- package/dist/types/components/Icons/ChevronUpIcon.d.ts +1 -1
- package/dist/types/components/Icons/CircleIcon.d.ts +1 -1
- package/dist/types/components/Icons/ClockIcon.d.ts +1 -1
- package/dist/types/components/Icons/CloseIcon.d.ts +1 -1
- package/dist/types/components/Icons/CloudUploadIcon.d.ts +1 -1
- package/dist/types/components/Icons/CodeIcon.d.ts +1 -1
- package/dist/types/components/Icons/CopyIcon.d.ts +1 -1
- package/dist/types/components/Icons/CubeIcon.d.ts +34 -0
- package/dist/types/components/Icons/CutIcon.d.ts +1 -1
- package/dist/types/components/Icons/DotsHorizontalIcon.d.ts +1 -1
- package/dist/types/components/Icons/DotsVerticalIcon.d.ts +1 -1
- package/dist/types/components/Icons/DownloadIcon.d.ts +1 -1
- package/dist/types/components/Icons/EditIcon.d.ts +1 -1
- package/dist/types/components/Icons/ErrorIcon.d.ts +1 -1
- package/dist/types/components/Icons/ExternalLinkIcon.d.ts +1 -1
- package/dist/types/components/Icons/EyeDropperIcon.d.ts +1 -1
- package/dist/types/components/Icons/EyeIcon.d.ts +1 -1
- package/dist/types/components/Icons/FileTextIcon.d.ts +1 -1
- package/dist/types/components/Icons/FilterIcon.d.ts +1 -1
- package/dist/types/components/Icons/FirstIcon.d.ts +1 -1
- package/dist/types/components/Icons/FolderCogIcon.d.ts +1 -1
- package/dist/types/components/Icons/FolderIcon.d.ts +1 -1
- package/dist/types/components/Icons/FolderOpenIcon.d.ts +1 -1
- package/dist/types/components/Icons/FullscreenIcon.d.ts +1 -1
- package/dist/types/components/Icons/GitBranchIcon.d.ts +1 -1
- package/dist/types/components/Icons/GridIcon.d.ts +1 -1
- package/dist/types/components/Icons/HeartIcon.d.ts +1 -1
- package/dist/types/components/Icons/HelpIcon.d.ts +1 -1
- package/dist/types/components/Icons/HomeIcon.d.ts +1 -1
- package/dist/types/components/Icons/ImageIcon.d.ts +34 -0
- package/dist/types/components/Icons/InfoIcon.d.ts +1 -1
- package/dist/types/components/Icons/LastIcon.d.ts +1 -1
- package/dist/types/components/Icons/LinkIcon.d.ts +1 -1
- package/dist/types/components/Icons/ListIcon.d.ts +1 -1
- package/dist/types/components/Icons/LockIcon.d.ts +1 -1
- package/dist/types/components/Icons/MaximizeIcon.d.ts +1 -1
- package/dist/types/components/Icons/MenuIcon.d.ts +1 -1
- package/dist/types/components/Icons/MinimizeIcon.d.ts +1 -1
- package/dist/types/components/Icons/MinusIcon.d.ts +1 -1
- package/dist/types/components/Icons/OrbitIcon.d.ts +34 -0
- package/dist/types/components/Icons/PasteIcon.d.ts +1 -1
- package/dist/types/components/Icons/PauseIcon.d.ts +1 -1
- package/dist/types/components/Icons/PinIcon.d.ts +1 -1
- package/dist/types/components/Icons/PlayIcon.d.ts +1 -1
- package/dist/types/components/Icons/RedoIcon.d.ts +1 -1
- package/dist/types/components/Icons/RefreshIcon.d.ts +1 -1
- package/dist/types/components/Icons/RobotIcon.d.ts +1 -1
- package/dist/types/components/Icons/RotateIcon.d.ts +35 -0
- package/dist/types/components/Icons/SaveIcon.d.ts +1 -1
- package/dist/types/components/Icons/SearchIcon.d.ts +1 -1
- package/dist/types/components/Icons/SendIcon.d.ts +1 -1
- package/dist/types/components/Icons/SettingsIcon.d.ts +1 -1
- package/dist/types/components/Icons/SortIcon.d.ts +1 -1
- package/dist/types/components/Icons/SpinIcon.d.ts +35 -0
- package/dist/types/components/Icons/StarIcon.d.ts +1 -1
- package/dist/types/components/Icons/StopIcon.d.ts +1 -1
- package/dist/types/components/Icons/SuccessIcon.d.ts +1 -1
- package/dist/types/components/Icons/TagIcon.d.ts +1 -1
- package/dist/types/components/Icons/TangentAlignedIcon.d.ts +1 -1
- package/dist/types/components/Icons/TangentAutoIcon.d.ts +1 -1
- package/dist/types/components/Icons/TangentFreeIcon.d.ts +1 -1
- package/dist/types/components/Icons/TangentLinearIcon.d.ts +1 -1
- package/dist/types/components/Icons/TangentMirroredIcon.d.ts +1 -1
- package/dist/types/components/Icons/TangentStepIcon.d.ts +1 -1
- package/dist/types/components/Icons/TerminalIcon.d.ts +1 -1
- package/dist/types/components/Icons/TrashIcon.d.ts +1 -1
- package/dist/types/components/Icons/UndoIcon.d.ts +1 -1
- package/dist/types/components/Icons/UnlinkIcon.d.ts +1 -1
- package/dist/types/components/Icons/UnlockIcon.d.ts +1 -1
- package/dist/types/components/Icons/UploadIcon.d.ts +1 -1
- package/dist/types/components/Icons/UserIcon.d.ts +1 -1
- package/dist/types/components/Icons/UsersIcon.d.ts +1 -1
- package/dist/types/components/Icons/WarningIcon.d.ts +1 -1
- package/dist/types/components/Icons/ZoomFitIcon.d.ts +35 -0
- package/dist/types/components/Icons/ZoomInIcon.d.ts +1 -1
- package/dist/types/components/Icons/ZoomOutIcon.d.ts +1 -1
- package/dist/types/components/controls/CartesianPicker/CartesianPicker.types.d.ts +3 -3
- package/dist/types/components/controls/ColorPicker/ColorPicker.types.d.ts +2 -2
- package/dist/types/components/controls/ColorPicker/EyeDropper.d.ts +1 -1
- package/dist/types/components/controls/Combobox/Combobox.types.d.ts +1 -1
- package/dist/types/components/controls/CurveEditor/CurveEditor.types.d.ts +8 -58
- package/dist/types/components/controls/CurveEditor/curveUtils.d.ts +2 -1
- package/dist/types/components/controls/FileTree/FileTree.d.ts +34 -0
- package/dist/types/components/controls/FileTree/FileTree.types.d.ts +133 -0
- package/dist/types/components/controls/FileTree/fileTreeIcons.d.ts +29 -0
- package/dist/types/components/controls/FileTree/fileTreeLabels.d.ts +19 -0
- package/dist/types/components/controls/FileUploader/FileUploader.types.d.ts +2 -2
- package/dist/types/components/controls/MultiSelect/MultiSelect.types.d.ts +1 -1
- package/dist/types/components/controls/NumberInput/NumberInput.d.ts +2 -2
- package/dist/types/components/controls/Select/Select.d.ts +1 -1
- package/dist/types/components/controls/Select/Select.types.d.ts +45 -11
- package/dist/types/components/controls/Slider/Slider.d.ts +1 -1
- package/dist/types/components/controls/TagInput/TagInput.types.d.ts +2 -2
- package/dist/types/components/controls/TreeView/TreeView.d.ts +1 -1
- package/dist/types/components/controls/TreeView/TreeView.types.d.ts +24 -2
- package/dist/types/components/controls/VectorInput/VectorInput.types.d.ts +1 -1
- package/dist/types/components/data/DataTable/DataTable.types.d.ts +2 -2
- package/dist/types/components/editor/AssetBrowser/AssetBrowser.d.ts +13 -0
- package/dist/types/components/editor/AssetBrowser/AssetBrowser.types.d.ts +241 -0
- package/dist/types/components/editor/AssetBrowser/assetBrowserLabels.d.ts +70 -0
- package/dist/types/components/editor/ChatPanel/ChatMarkdownRenderer.types.d.ts +1 -1
- package/dist/types/components/editor/ChatPanel/ChatPanel.types.d.ts +2 -2
- package/dist/types/components/editor/Minimap/Minimap.d.ts +26 -0
- package/dist/types/components/editor/Minimap/Minimap.types.d.ts +249 -0
- package/dist/types/components/editor/Minimap/MinimapContext.d.ts +27 -0
- package/dist/types/components/editor/Minimap/MinimapCorner.d.ts +8 -0
- package/dist/types/components/editor/Minimap/MinimapFooter.d.ts +8 -0
- package/dist/types/components/editor/Minimap/MinimapStore.d.ts +17 -0
- package/dist/types/components/editor/Minimap/MinimapTitle.d.ts +8 -0
- package/dist/types/components/editor/Minimap/ViewportMinimap.d.ts +52 -0
- package/dist/types/components/editor/Minimap/computeBoundsFromItems.d.ts +13 -0
- package/dist/types/components/editor/Minimap/index.d.ts +13 -0
- package/dist/types/components/editor/NodeGraph/NodeGraph.d.ts +63 -0
- package/dist/types/components/editor/NodeGraph/NodeGraph.types.d.ts +568 -0
- package/dist/types/components/editor/NodeGraph/NodeGraphContext.d.ts +30 -0
- package/dist/types/components/editor/NodeGraph/NodeGraphNodeParts.d.ts +86 -0
- package/dist/types/components/editor/NodeGraph/NodeGraphNodeSection.d.ts +47 -0
- package/dist/types/components/editor/NodeGraph/NodeGraphPin.d.ts +57 -0
- package/dist/types/components/editor/NodeGraph/NodeGraphPort.d.ts +30 -0
- package/dist/types/components/editor/NodeGraph/NodeGraphPortVisual.d.ts +46 -0
- package/dist/types/components/editor/NodeGraph/NodeGraphSlots.d.ts +16 -0
- package/dist/types/components/editor/NodeGraph/NodeGraphStore.d.ts +256 -0
- package/dist/types/components/editor/NodeGraph/NodeGraphToolbar.d.ts +54 -0
- package/dist/types/components/editor/NodeGraph/createTypeMatchValidator.d.ts +43 -0
- package/dist/types/components/editor/NodeGraph/nodeGraphActions.d.ts +39 -0
- package/dist/types/components/editor/NodeGraph/nodeGraphIds.d.ts +16 -0
- package/dist/types/components/editor/NodeGraph/useNodeGraph.d.ts +103 -0
- package/dist/types/components/editor/PropertyInspector/PropertyInspector.types.d.ts +51 -5
- package/dist/types/components/editor/Timeline/Timeline.d.ts +18 -0
- package/dist/types/components/editor/Timeline/Timeline.types.d.ts +348 -0
- package/dist/types/components/editor/Timeline/TimelineContext.d.ts +51 -0
- package/dist/types/components/editor/Timeline/TimelineFooter.d.ts +8 -0
- package/dist/types/components/editor/Timeline/TimelineMinimap.d.ts +21 -0
- package/dist/types/components/editor/Timeline/TimelineStore.d.ts +41 -0
- package/dist/types/components/editor/Timeline/TimelineToolbar.d.ts +8 -0
- package/dist/types/components/editor/Timeline/TimelineTrackScale.d.ts +8 -0
- package/dist/types/components/editor/Timeline/index.d.ts +15 -0
- package/dist/types/components/editor/Timeline/timelineCoords.d.ts +7 -0
- package/dist/types/components/editor/Timeline/timelineEdits.d.ts +18 -0
- package/dist/types/components/editor/TransformControl/TransformControl.types.d.ts +2 -2
- package/dist/types/components/editor/ViewportGizmo/ViewportGizmo.types.d.ts +1 -1
- package/dist/types/components/feedback/Alert/Alert.d.ts +2 -2
- package/dist/types/components/feedback/Alert/Alert.types.d.ts +5 -5
- package/dist/types/components/feedback/CommandPalette/CommandPalette.types.d.ts +1 -3
- package/dist/types/components/feedback/Dialog/Dialog.types.d.ts +2 -2
- package/dist/types/components/feedback/Drawer/Drawer.types.d.ts +1 -1
- package/dist/types/components/feedback/EmptyState/EmptyState.types.d.ts +2 -2
- package/dist/types/components/feedback/LogView/LogView.d.ts +58 -0
- package/dist/types/components/feedback/LogView/LogView.types.d.ts +333 -0
- package/dist/types/components/feedback/LogView/LogViewBody.d.ts +15 -0
- package/dist/types/components/feedback/LogView/LogViewContext.d.ts +9 -0
- package/dist/types/components/feedback/LogView/LogViewParts.d.ts +35 -0
- package/dist/types/components/feedback/LogView/LogViewStore.d.ts +4 -0
- package/dist/types/components/feedback/LogView/logViewLabels.d.ts +9 -0
- package/dist/types/components/feedback/LogView/logViewUtils.d.ts +41 -0
- package/dist/types/components/feedback/ProgressBar/ProgressBar.types.d.ts +3 -3
- package/dist/types/components/feedback/Skeleton/Skeleton.types.d.ts +4 -4
- package/dist/types/components/feedback/Stat/Stat.types.d.ts +2 -2
- package/dist/types/components/feedback/Toast/Toast.types.d.ts +1 -1
- package/dist/types/components/form/FormHelperText.d.ts +2 -2
- package/dist/types/components/form/FormLabel.d.ts +1 -1
- package/dist/types/components/form/InputWrapper.d.ts +2 -2
- package/dist/types/components/layout/Accordion/Accordion.types.d.ts +2 -2
- package/dist/types/components/layout/Card/Card.types.d.ts +6 -6
- package/dist/types/components/layout/Divider/Divider.types.d.ts +2 -2
- package/dist/types/components/layout/Flex/Flex.d.ts +1 -1
- package/dist/types/components/layout/Grid/Grid.d.ts +1 -1
- package/dist/types/components/layout/ListItem/ListItem.types.d.ts +2 -2
- package/dist/types/components/layout/PageHeader/PageHeader.types.d.ts +1 -1
- package/dist/types/components/layout/PanelSurface/PanelSurface.types.d.ts +6 -6
- package/dist/types/components/layout/ScrollArea/ScrollArea.types.d.ts +2 -2
- package/dist/types/components/layout/Stack/Stack.d.ts +1 -1
- package/dist/types/components/navigation/Breadcrumbs/BreadcrumbItem.d.ts +1 -0
- package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.types.d.ts +7 -0
- package/dist/types/components/navigation/ContextMenu/ContextMenu.d.ts +18 -3
- package/dist/types/components/navigation/ContextMenu/ContextMenu.types.d.ts +55 -63
- package/dist/types/components/navigation/Menu/Menu.d.ts +38 -35
- package/dist/types/components/navigation/Menu/Menu.types.d.ts +190 -71
- package/dist/types/components/navigation/Pagination/Pagination.types.d.ts +1 -1
- package/dist/types/components/navigation/PathBar/PathBar.d.ts +31 -0
- package/dist/types/components/navigation/PathBar/PathBar.types.d.ts +79 -0
- package/dist/types/components/navigation/SegmentedControl/SegmentedControl.types.d.ts +3 -3
- package/dist/types/components/navigation/Tabs/Tabs.types.d.ts +2 -2
- package/dist/types/components/primitives/Avatar/Avatar.types.d.ts +2 -2
- package/dist/types/components/primitives/Badge/Badge.types.d.ts +1 -1
- package/dist/types/components/primitives/Button/Button.d.ts +2 -2
- package/dist/types/components/primitives/Checkbox/Checkbox.types.d.ts +2 -2
- package/dist/types/components/primitives/Code/Code.types.d.ts +1 -1
- package/dist/types/components/primitives/Collapsible/Collapsible.types.d.ts +2 -2
- package/dist/types/components/primitives/HoverCard/HoverCard.types.d.ts +3 -3
- package/dist/types/components/primitives/Icon/Icon.d.ts +2 -2
- package/dist/types/components/primitives/IconButton/IconButton.d.ts +1 -1
- package/dist/types/components/primitives/Input/Input.d.ts +1 -1
- package/dist/types/components/primitives/Kbd/Kbd.types.d.ts +1 -1
- package/dist/types/components/primitives/Link/Link.types.d.ts +1 -1
- package/dist/types/components/primitives/Popover/Popover.types.d.ts +2 -2
- package/dist/types/components/primitives/Radio/Radio.types.d.ts +3 -3
- package/dist/types/components/primitives/Switch/Switch.d.ts +1 -1
- package/dist/types/components/primitives/TextArea/TextArea.types.d.ts +1 -1
- package/dist/types/components/primitives/Tooltip/Tooltip.d.ts +1 -1
- package/dist/types/components/primitives/VisuallyHidden/VisuallyHidden.types.d.ts +1 -1
- package/dist/types/components/primitives/canvas/canvas.types.d.ts +16 -1
- package/dist/types/components/primitives/viewport/Viewport.d.ts +38 -0
- package/dist/types/components/primitives/viewport/Viewport.types.d.ts +257 -0
- package/dist/types/components/primitives/viewport/ViewportContext.d.ts +23 -0
- package/dist/types/components/primitives/viewport/ViewportLayer.d.ts +26 -0
- package/dist/types/components/primitives/viewport/ViewportOverlay.d.ts +27 -0
- package/dist/types/components/primitives/viewport/ViewportWorld.d.ts +25 -0
- package/dist/types/components/primitives/viewport/viewportCoords.d.ts +25 -0
- package/dist/types/components/primitives/viewport/viewportMath.d.ts +35 -0
- package/dist/types/components/shell/AppShell/AppShell.types.d.ts +2 -2
- package/dist/types/components/shell/FloatingPanel/FloatingPanel.types.d.ts +2 -2
- package/dist/types/components/shell/MenuBar/MenuBar.types.d.ts +5 -5
- package/dist/types/components/shell/StatusBar/StatusBar.types.d.ts +3 -3
- package/dist/types/components/shell/Toolbar/Toolbar.types.d.ts +5 -5
- package/dist/types/hooks/useDebounced/useDebouncedValue.d.ts +13 -4
- package/dist/types/hooks/useEventCallback/useEventCallback.d.ts +32 -0
- package/dist/types/hooks/useIsMounted/useIsMounted.d.ts +28 -0
- package/dist/types/hooks/useKeyboard/types.d.ts +1 -1
- package/dist/types/hooks/useLatest/useLatest.d.ts +23 -0
- package/dist/types/hooks/useResizeObserver/useResizeObserver.d.ts +3 -3
- package/dist/types/index.d.ts +71 -6
- package/dist/types/theme/ThemeProvider.d.ts +5 -3
- package/dist/types/theme/contract.css.d.ts +1 -1
- package/dist/types/theme/createCustomTheme.d.ts +1 -1
- package/dist/types/theme/darkThemeValues.d.ts +1 -1
- package/dist/types/theme/lightThemeValues.d.ts +1 -1
- package/dist/types/theme/themeContractData.d.ts +4 -4
- package/dist/types/theme-values.d.ts +1 -1
- package/dist/types/types/keyframe.d.ts +64 -0
- package/package.json +34 -18
- package/dist/esm/_virtual/_commonjsHelpers.js +0 -6
- package/dist/esm/_virtual/_commonjsHelpers.js.map +0 -1
- package/dist/esm/_virtual/cjs.js +0 -4
- package/dist/esm/_virtual/cjs.js.map +0 -1
- package/dist/esm/_virtual/cssesc.js +0 -8
- package/dist/esm/_virtual/cssesc.js.map +0 -1
- package/dist/esm/_virtual/picocolors.js +0 -8
- package/dist/esm/_virtual/picocolors.js.map +0 -1
- package/dist/esm/_virtual/picocolors2.js +0 -4
- package/dist/esm/_virtual/picocolors2.js.map +0 -1
- package/dist/esm/assets/src/components/navigation/Menu/Menu.css.ts.vanilla-DD0c5D10.css +0 -67
- package/dist/esm/components/navigation/ContextMenu/useContextMenuTarget.js +0 -53
- package/dist/esm/components/navigation/ContextMenu/useContextMenuTarget.js.map +0 -1
- package/dist/esm/components/navigation/Menu/Menu.helpers.js +0 -53
- package/dist/esm/components/navigation/Menu/Menu.helpers.js.map +0 -1
- package/dist/esm/components/navigation/Menu/useMenu.js +0 -88
- package/dist/esm/components/navigation/Menu/useMenu.js.map +0 -1
- package/dist/esm/node_modules/@emotion/hash/dist/emotion-hash.esm.js +0 -56
- package/dist/esm/node_modules/@emotion/hash/dist/emotion-hash.esm.js.map +0 -1
- package/dist/esm/node_modules/@vanilla-extract/css/adapter/dist/vanilla-extract-css-adapter.esm.js +0 -46
- package/dist/esm/node_modules/@vanilla-extract/css/adapter/dist/vanilla-extract-css-adapter.esm.js.map +0 -1
- package/dist/esm/node_modules/@vanilla-extract/css/dist/taggedTemplateLiteral-10998315.esm.js +0 -13
- package/dist/esm/node_modules/@vanilla-extract/css/dist/taggedTemplateLiteral-10998315.esm.js.map +0 -1
- package/dist/esm/node_modules/@vanilla-extract/css/dist/transformCss-fd0786e1.esm.js +0 -962
- package/dist/esm/node_modules/@vanilla-extract/css/dist/transformCss-fd0786e1.esm.js.map +0 -1
- package/dist/esm/node_modules/@vanilla-extract/css/dist/vanilla-extract-css.esm.js +0 -309
- package/dist/esm/node_modules/@vanilla-extract/css/dist/vanilla-extract-css.esm.js.map +0 -1
- package/dist/esm/node_modules/@vanilla-extract/css/fileScope/dist/vanilla-extract-css-fileScope.esm.js +0 -18
- package/dist/esm/node_modules/@vanilla-extract/css/fileScope/dist/vanilla-extract-css-fileScope.esm.js.map +0 -1
- package/dist/esm/node_modules/@vanilla-extract/css/injectStyles/dist/vanilla-extract-css-injectStyles.esm.js +0 -23
- package/dist/esm/node_modules/@vanilla-extract/css/injectStyles/dist/vanilla-extract-css-injectStyles.esm.js.map +0 -1
- package/dist/esm/node_modules/@vanilla-extract/css/node_modules/lru-cache/dist/esm/index.js +0 -1543
- package/dist/esm/node_modules/@vanilla-extract/css/node_modules/lru-cache/dist/esm/index.js.map +0 -1
- package/dist/esm/node_modules/@vanilla-extract/private/dist/vanilla-extract-private.esm.js +0 -38
- package/dist/esm/node_modules/@vanilla-extract/private/dist/vanilla-extract-private.esm.js.map +0 -1
- package/dist/esm/node_modules/css-what/lib/es/parse.js +0 -424
- package/dist/esm/node_modules/css-what/lib/es/parse.js.map +0 -1
- package/dist/esm/node_modules/css-what/lib/es/types.js +0 -29
- package/dist/esm/node_modules/css-what/lib/es/types.js.map +0 -1
- package/dist/esm/node_modules/cssesc/cssesc.js +0 -120
- package/dist/esm/node_modules/cssesc/cssesc.js.map +0 -1
- package/dist/esm/node_modules/dedent/dist/dedent.js +0 -100
- package/dist/esm/node_modules/dedent/dist/dedent.js.map +0 -1
- package/dist/esm/node_modules/deep-object-diff/mjs/diff.js +0 -40
- package/dist/esm/node_modules/deep-object-diff/mjs/diff.js.map +0 -1
- package/dist/esm/node_modules/deep-object-diff/mjs/utils.js +0 -9
- package/dist/esm/node_modules/deep-object-diff/mjs/utils.js.map +0 -1
- package/dist/esm/node_modules/deepmerge/dist/cjs.js +0 -143
- package/dist/esm/node_modules/deepmerge/dist/cjs.js.map +0 -1
- package/dist/esm/node_modules/media-query-parser/dist/media-query-parser.esm.js +0 -1386
- package/dist/esm/node_modules/media-query-parser/dist/media-query-parser.esm.js.map +0 -1
- package/dist/esm/node_modules/modern-ahocorasick/dist/index.js +0 -102
- package/dist/esm/node_modules/modern-ahocorasick/dist/index.js.map +0 -1
- package/dist/esm/node_modules/picocolors/picocolors.js +0 -87
- package/dist/esm/node_modules/picocolors/picocolors.js.map +0 -1
- package/dist/types/components/navigation/ContextMenu/useContextMenuTarget.d.ts +0 -5
- package/dist/types/components/navigation/Menu/useMenu.d.ts +0 -16
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fallback size used when a node has no measured DOM size yet (first paint
|
|
3
|
+
* before `ResizeObserver` has fired) and no explicit `node.width`/`height`.
|
|
4
|
+
*/
|
|
5
|
+
const DEFAULT_NODE_WIDTH = 180;
|
|
6
|
+
const DEFAULT_NODE_HEIGHT = 80;
|
|
7
|
+
/**
|
|
8
|
+
* Resolve a node's effective bounding box.
|
|
9
|
+
*
|
|
10
|
+
* Priority: explicit `node.width`/`node.height` > measured DOM size >
|
|
11
|
+
* `defaults`. This keeps consumer-controlled fixed-size nodes deterministic
|
|
12
|
+
* while letting auto-sized nodes pick up their real dimensions for
|
|
13
|
+
* hit-testing, marquee selection, and `fitToContent`.
|
|
14
|
+
*/
|
|
15
|
+
function getNodeBox(node, measuredSize, defaults = {
|
|
16
|
+
width: DEFAULT_NODE_WIDTH,
|
|
17
|
+
height: DEFAULT_NODE_HEIGHT,
|
|
18
|
+
}) {
|
|
19
|
+
return {
|
|
20
|
+
x: node.position.x,
|
|
21
|
+
y: node.position.y,
|
|
22
|
+
width: node.width ?? measuredSize?.width ?? defaults.width,
|
|
23
|
+
height: node.height ?? measuredSize?.height ?? defaults.height,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Unit vector pointing away from a port along its side. Used as the
|
|
28
|
+
* tangent direction for the Bézier handle on that endpoint.
|
|
29
|
+
*/
|
|
30
|
+
function sideVector(side) {
|
|
31
|
+
switch (side) {
|
|
32
|
+
case 'left':
|
|
33
|
+
return { x: -1, y: 0 };
|
|
34
|
+
case 'right':
|
|
35
|
+
return { x: 1, y: 0 };
|
|
36
|
+
case 'top':
|
|
37
|
+
return { x: 0, y: -1 };
|
|
38
|
+
case 'bottom':
|
|
39
|
+
return { x: 0, y: 1 };
|
|
40
|
+
default: {
|
|
41
|
+
const _unreached = side;
|
|
42
|
+
return _unreached;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Compute control points for a Cubic Bézier connecting `source` (on side
|
|
48
|
+
* `srcSide`) to `target` (on side `tgtSide`). The handle length scales
|
|
49
|
+
* with the distance between the endpoints, with a floor so short edges
|
|
50
|
+
* still curve visibly.
|
|
51
|
+
*/
|
|
52
|
+
function getBezierControlPoints(source, srcSide, target, tgtSide) {
|
|
53
|
+
const dx = target.x - source.x;
|
|
54
|
+
const dy = target.y - source.y;
|
|
55
|
+
const dist = Math.hypot(dx, dy);
|
|
56
|
+
const srcHorizontal = srcSide === 'left' || srcSide === 'right';
|
|
57
|
+
const tgtHorizontal = tgtSide === 'left' || tgtSide === 'right';
|
|
58
|
+
const srcAxis = srcHorizontal ? Math.abs(dx) : Math.abs(dy);
|
|
59
|
+
const tgtAxis = tgtHorizontal ? Math.abs(dx) : Math.abs(dy);
|
|
60
|
+
const minHandle = 32;
|
|
61
|
+
const srcLen = Math.max(minHandle, srcAxis * 0.5, dist * 0.25);
|
|
62
|
+
const tgtLen = Math.max(minHandle, tgtAxis * 0.5, dist * 0.25);
|
|
63
|
+
const srcVec = sideVector(srcSide);
|
|
64
|
+
const tgtVec = sideVector(tgtSide);
|
|
65
|
+
return {
|
|
66
|
+
p0: source,
|
|
67
|
+
c1: { x: source.x + srcVec.x * srcLen, y: source.y + srcVec.y * srcLen },
|
|
68
|
+
c2: { x: target.x + tgtVec.x * tgtLen, y: target.y + tgtVec.y * tgtLen },
|
|
69
|
+
p3: target,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Evaluate a Cubic Bézier at parameter `t` in `[0, 1]`.
|
|
74
|
+
*/
|
|
75
|
+
function evaluateBezier(cp, t) {
|
|
76
|
+
const it = 1 - t;
|
|
77
|
+
const it2 = it * it;
|
|
78
|
+
const t2 = t * t;
|
|
79
|
+
const w0 = it2 * it;
|
|
80
|
+
const w1 = 3 * it2 * t;
|
|
81
|
+
const w2 = 3 * it * t2;
|
|
82
|
+
const w3 = t2 * t;
|
|
83
|
+
return {
|
|
84
|
+
x: cp.p0.x * w0 + cp.c1.x * w1 + cp.c2.x * w2 + cp.p3.x * w3,
|
|
85
|
+
y: cp.p0.y * w0 + cp.c1.y * w1 + cp.c2.y * w2 + cp.p3.y * w3,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Test whether a world point is within `threshold` world units of the
|
|
90
|
+
* Bézier curve. Samples the curve at fixed intervals and measures
|
|
91
|
+
* point-to-segment distance.
|
|
92
|
+
*/
|
|
93
|
+
function isPointNearBezier(point, cp, threshold, samples = 24) {
|
|
94
|
+
let prev = cp.p0;
|
|
95
|
+
for (let i = 1; i <= samples; i++) {
|
|
96
|
+
const t = i / samples;
|
|
97
|
+
const curr = evaluateBezier(cp, t);
|
|
98
|
+
if (pointToSegmentDistance(point, prev, curr) <= threshold)
|
|
99
|
+
return true;
|
|
100
|
+
prev = curr;
|
|
101
|
+
}
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Test whether a world point is inside (or on the edge of) a node box.
|
|
106
|
+
*/
|
|
107
|
+
function isPointInNode(point, node, measuredSize, defaults) {
|
|
108
|
+
const box = getNodeBox(node, measuredSize, defaults);
|
|
109
|
+
return (point.x >= box.x &&
|
|
110
|
+
point.x <= box.x + box.width &&
|
|
111
|
+
point.y >= box.y &&
|
|
112
|
+
point.y <= box.y + box.height);
|
|
113
|
+
}
|
|
114
|
+
/** True when a rectangle contains a point. */
|
|
115
|
+
function isPointInRect(point, rect) {
|
|
116
|
+
return (point.x >= rect.x &&
|
|
117
|
+
point.x <= rect.x + rect.width &&
|
|
118
|
+
point.y >= rect.y &&
|
|
119
|
+
point.y <= rect.y + rect.height);
|
|
120
|
+
}
|
|
121
|
+
/** True when two axis-aligned rectangles overlap (non-strict). */
|
|
122
|
+
function rectsIntersect(a, b) {
|
|
123
|
+
return (a.x < b.x + b.width &&
|
|
124
|
+
a.x + a.width > b.x &&
|
|
125
|
+
a.y < b.y + b.height &&
|
|
126
|
+
a.y + a.height > b.y);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* True when `inner` is fully contained inside `outer` (closed comparison —
|
|
130
|
+
* a rectangle that touches the outer's edge counts as contained). Used by
|
|
131
|
+
* the group-drag controller to decide which nodes ride along with their
|
|
132
|
+
* enclosing group.
|
|
133
|
+
*/
|
|
134
|
+
function rectContains(outer, inner) {
|
|
135
|
+
return (inner.x >= outer.x &&
|
|
136
|
+
inner.y >= outer.y &&
|
|
137
|
+
inner.x + inner.width <= outer.x + outer.width &&
|
|
138
|
+
inner.y + inner.height <= outer.y + outer.height);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Compute the tight bounding box of a node list, factoring in measured /
|
|
142
|
+
* default sizes. Returns a zero-width rect at the origin when the list
|
|
143
|
+
* is empty.
|
|
144
|
+
*/
|
|
145
|
+
function computeNodesBounds(nodes, measuredSizes, defaults) {
|
|
146
|
+
if (nodes.length === 0)
|
|
147
|
+
return { x: 0, y: 0, width: 0, height: 0 };
|
|
148
|
+
let minX = Infinity;
|
|
149
|
+
let minY = Infinity;
|
|
150
|
+
let maxX = -Infinity;
|
|
151
|
+
let maxY = -Infinity;
|
|
152
|
+
for (const node of nodes) {
|
|
153
|
+
const box = getNodeBox(node, measuredSizes?.(node.id), defaults);
|
|
154
|
+
if (box.x < minX)
|
|
155
|
+
minX = box.x;
|
|
156
|
+
if (box.y < minY)
|
|
157
|
+
minY = box.y;
|
|
158
|
+
if (box.x + box.width > maxX)
|
|
159
|
+
maxX = box.x + box.width;
|
|
160
|
+
if (box.y + box.height > maxY)
|
|
161
|
+
maxY = box.y + box.height;
|
|
162
|
+
}
|
|
163
|
+
return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Snap a world-space delta to the nearest grid increment. Pass `false`
|
|
167
|
+
* for `grid` to return the delta unchanged.
|
|
168
|
+
*/
|
|
169
|
+
function snapDelta(delta, grid) {
|
|
170
|
+
if (grid === false || grid <= 0)
|
|
171
|
+
return delta;
|
|
172
|
+
return {
|
|
173
|
+
x: Math.round(delta.x / grid) * grid,
|
|
174
|
+
y: Math.round(delta.y / grid) * grid,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Resolve the next selection for a click on `id`, honouring the additive
|
|
179
|
+
* modifier (shift / cmd / ctrl). Non-additive replaces the selection with
|
|
180
|
+
* just `id`; additive toggles `id` in/out of the current set. Shared by the
|
|
181
|
+
* node-drag, group-drag, and edge-click paths so the toggle semantics stay
|
|
182
|
+
* identical everywhere.
|
|
183
|
+
*/
|
|
184
|
+
function toggleSelected(ids, id, additive) {
|
|
185
|
+
if (!additive)
|
|
186
|
+
return [id];
|
|
187
|
+
return ids.includes(id)
|
|
188
|
+
? ids.filter(existing => existing !== id)
|
|
189
|
+
: [...ids, id];
|
|
190
|
+
}
|
|
191
|
+
/** Minimum size (in world units) a group can be resized down to. */
|
|
192
|
+
const MIN_GROUP_SIZE = 32;
|
|
193
|
+
/**
|
|
194
|
+
* Compute the new group bounds during a resize gesture, given the
|
|
195
|
+
* original bounds, the cumulative drag delta, and which handle is being
|
|
196
|
+
* dragged. Enforces a minimum size on each axis so the group doesn't
|
|
197
|
+
* collapse to zero.
|
|
198
|
+
*/
|
|
199
|
+
function applyGroupResize(start, handle, delta, minSize = MIN_GROUP_SIZE) {
|
|
200
|
+
let { x, y, width, height } = start;
|
|
201
|
+
const movesLeft = handle === 'nw' || handle === 'w' || handle === 'sw';
|
|
202
|
+
const movesRight = handle === 'ne' || handle === 'e' || handle === 'se';
|
|
203
|
+
const movesTop = handle === 'nw' || handle === 'n' || handle === 'ne';
|
|
204
|
+
const movesBottom = handle === 'sw' || handle === 's' || handle === 'se';
|
|
205
|
+
if (movesLeft) {
|
|
206
|
+
const dx = Math.min(delta.x, start.width - minSize);
|
|
207
|
+
x = start.x + dx;
|
|
208
|
+
width = start.width - dx;
|
|
209
|
+
}
|
|
210
|
+
else if (movesRight) {
|
|
211
|
+
width = Math.max(minSize, start.width + delta.x);
|
|
212
|
+
}
|
|
213
|
+
if (movesTop) {
|
|
214
|
+
const dy = Math.min(delta.y, start.height - minSize);
|
|
215
|
+
y = start.y + dy;
|
|
216
|
+
height = start.height - dy;
|
|
217
|
+
}
|
|
218
|
+
else if (movesBottom) {
|
|
219
|
+
height = Math.max(minSize, start.height + delta.y);
|
|
220
|
+
}
|
|
221
|
+
return { x, y, width, height };
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Resolve a port reference to its **world-space** position + side using
|
|
225
|
+
* the slot-registered port position lookup. Returns `null` when the node
|
|
226
|
+
* is missing or the port hasn't been measured yet (the slot's
|
|
227
|
+
* `useLayoutEffect` hasn't run).
|
|
228
|
+
*/
|
|
229
|
+
function resolvePortRef(ref, getNodeById, getPortPosition) {
|
|
230
|
+
const node = getNodeById(ref.node);
|
|
231
|
+
if (!node)
|
|
232
|
+
return null;
|
|
233
|
+
const portPos = getPortPosition(ref.node, ref.port);
|
|
234
|
+
if (!portPos)
|
|
235
|
+
return null;
|
|
236
|
+
return {
|
|
237
|
+
node,
|
|
238
|
+
position: {
|
|
239
|
+
x: node.position.x + portPos.x,
|
|
240
|
+
y: node.position.y + portPos.y,
|
|
241
|
+
},
|
|
242
|
+
side: portPos.side,
|
|
243
|
+
...(portPos.dataType !== undefined ? { dataType: portPos.dataType } : {}),
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Resolve both endpoints of an edge to world-space positions + sides.
|
|
248
|
+
* Returns `null` when either endpoint can't be resolved (missing node or
|
|
249
|
+
* not-yet-measured port).
|
|
250
|
+
*/
|
|
251
|
+
function resolveEdgeEndpoints(edge, getNodeById, getPortPosition) {
|
|
252
|
+
const src = resolvePortRef(edge.source, getNodeById, getPortPosition);
|
|
253
|
+
if (!src)
|
|
254
|
+
return null;
|
|
255
|
+
const tgt = resolvePortRef(edge.target, getNodeById, getPortPosition);
|
|
256
|
+
if (!tgt)
|
|
257
|
+
return null;
|
|
258
|
+
return {
|
|
259
|
+
source: src.position,
|
|
260
|
+
srcSide: src.side,
|
|
261
|
+
target: tgt.position,
|
|
262
|
+
tgtSide: tgt.side,
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Apply a selection-driven cascade delete to a graph snapshot. Removes
|
|
267
|
+
* the selected nodes / edges / groups and additionally drops any edge
|
|
268
|
+
* whose source or target node was removed — eliminates the classic
|
|
269
|
+
* "orphan edge dangling off a deleted node" bug. Pure function; returns
|
|
270
|
+
* the same array references when nothing was removed.
|
|
271
|
+
*
|
|
272
|
+
* Used internally by `<NodeGraph>` when no `onDelete` is supplied, and
|
|
273
|
+
* exported so consumers who DO supply `onDelete` (e.g. to snapshot for
|
|
274
|
+
* undo, log telemetry, show confirmations) can reuse the same logic
|
|
275
|
+
* without rewriting the filter.
|
|
276
|
+
*/
|
|
277
|
+
function applyCascadeDelete(input, selection) {
|
|
278
|
+
const removedNodeIds = new Set(selection.nodes);
|
|
279
|
+
const removedEdgeIds = new Set(selection.edges);
|
|
280
|
+
const removedGroupIds = new Set(selection.groups);
|
|
281
|
+
const nodes = removedNodeIds.size > 0
|
|
282
|
+
? input.nodes.filter(n => !removedNodeIds.has(n.id))
|
|
283
|
+
: input.nodes;
|
|
284
|
+
const edges = input.edges.filter(e => !removedEdgeIds.has(e.id) &&
|
|
285
|
+
!removedNodeIds.has(e.source.node) &&
|
|
286
|
+
!removedNodeIds.has(e.target.node));
|
|
287
|
+
const groups = removedGroupIds.size > 0
|
|
288
|
+
? input.groups.filter(g => !removedGroupIds.has(g.id))
|
|
289
|
+
: input.groups;
|
|
290
|
+
return {
|
|
291
|
+
nodes,
|
|
292
|
+
// Keep the input array reference when nothing changed — lets the
|
|
293
|
+
// consumer skip an unnecessary `setEdges` if they want to.
|
|
294
|
+
edges: edges.length === input.edges.length ? input.edges : edges,
|
|
295
|
+
groups,
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Find the topmost edge whose Bézier passes within `threshold` world units
|
|
300
|
+
* of `point`. Iterates in reverse so the last-drawn edge wins, matching what
|
|
301
|
+
* the user sees on top. Returns the edge id, or `null` when none is hit.
|
|
302
|
+
*
|
|
303
|
+
* Used for pointer hover + click selection + right-click targeting of edges,
|
|
304
|
+
* which are drawn on a canvas (no DOM to hit-test against).
|
|
305
|
+
*/
|
|
306
|
+
function findEdgeAtPoint(point, edges, getNodeById, getPortPosition, threshold) {
|
|
307
|
+
for (let i = edges.length - 1; i >= 0; i--) {
|
|
308
|
+
const edge = edges[i];
|
|
309
|
+
if (!edge)
|
|
310
|
+
continue;
|
|
311
|
+
const ends = resolveEdgeEndpoints(edge, getNodeById, getPortPosition);
|
|
312
|
+
if (!ends)
|
|
313
|
+
continue;
|
|
314
|
+
const cp = getBezierControlPoints(ends.source, ends.srcSide, ends.target, ends.tgtSide);
|
|
315
|
+
// Broad-phase rejection: a cubic Bézier is contained within the convex
|
|
316
|
+
// hull of its control points, so a point outside their bounding box
|
|
317
|
+
// (expanded by `threshold`) can never be within `threshold` of the curve.
|
|
318
|
+
// Skips the 24-sample distance test for the vast majority of edges on
|
|
319
|
+
// large graphs — turns hover/click hit-testing from O(edges × 24) into a
|
|
320
|
+
// couple of comparisons per non-candidate edge.
|
|
321
|
+
if (point.x < Math.min(cp.p0.x, cp.c1.x, cp.c2.x, cp.p3.x) - threshold)
|
|
322
|
+
continue;
|
|
323
|
+
if (point.x > Math.max(cp.p0.x, cp.c1.x, cp.c2.x, cp.p3.x) + threshold)
|
|
324
|
+
continue;
|
|
325
|
+
if (point.y < Math.min(cp.p0.y, cp.c1.y, cp.c2.y, cp.p3.y) - threshold)
|
|
326
|
+
continue;
|
|
327
|
+
if (point.y > Math.max(cp.p0.y, cp.c1.y, cp.c2.y, cp.p3.y) + threshold)
|
|
328
|
+
continue;
|
|
329
|
+
if (isPointNearBezier(point, cp, threshold))
|
|
330
|
+
return edge.id;
|
|
331
|
+
}
|
|
332
|
+
return null;
|
|
333
|
+
}
|
|
334
|
+
// ─── Internals ───
|
|
335
|
+
function pointToSegmentDistance(p, a, b) {
|
|
336
|
+
const abx = b.x - a.x;
|
|
337
|
+
const aby = b.y - a.y;
|
|
338
|
+
const lenSq = abx * abx + aby * aby;
|
|
339
|
+
if (lenSq === 0)
|
|
340
|
+
return Math.hypot(p.x - a.x, p.y - a.y);
|
|
341
|
+
let t = ((p.x - a.x) * abx + (p.y - a.y) * aby) / lenSq;
|
|
342
|
+
if (t < 0)
|
|
343
|
+
t = 0;
|
|
344
|
+
else if (t > 1)
|
|
345
|
+
t = 1;
|
|
346
|
+
return Math.hypot(p.x - (a.x + t * abx), p.y - (a.y + t * aby));
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
export { DEFAULT_NODE_HEIGHT, DEFAULT_NODE_WIDTH, MIN_GROUP_SIZE, applyCascadeDelete, applyGroupResize, computeNodesBounds, evaluateBezier, findEdgeAtPoint, getBezierControlPoints, getNodeBox, isPointInNode, isPointInRect, isPointNearBezier, rectContains, rectsIntersect, resolveEdgeEndpoints, resolvePortRef, sideVector, snapDelta, toggleSelected };
|
|
350
|
+
//# sourceMappingURL=nodeGraphMath.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodeGraphMath.js","sources":["src/components/editor/NodeGraph/nodeGraphMath.ts"],"sourcesContent":["import type {\n NodeGraphEdge,\n NodeGraphNode,\n NodeGraphPortRef,\n NodeGraphPortSide,\n} from './NodeGraph.types';\nimport type {\n NodeGraphMeasuredSize,\n NodeGraphPortPosition,\n} from './NodeGraphStore';\nimport type { Point2D } from '@/components/primitives/canvas/canvas.types';\nimport type { WorldRect } from '@/components/primitives/viewport';\n\n/**\n * Fallback size used when a node has no measured DOM size yet (first paint\n * before `ResizeObserver` has fired) and no explicit `node.width`/`height`.\n */\nexport const DEFAULT_NODE_WIDTH = 180;\nexport const DEFAULT_NODE_HEIGHT = 80;\n\ninterface NodeBox {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/**\n * Read the function used to look up the registered port position. Pure\n * resolver — the math module takes this as an argument so it stays free\n * of a store dependency.\n */\nexport type PortPositionLookup = (\n nodeId: string,\n portId: string\n) => NodeGraphPortPosition | null;\n\n/** Read the measured size of a node wrapper (or null if not measured yet). */\nexport type MeasuredSizeLookup = (\n nodeId: string\n) => NodeGraphMeasuredSize | null;\n\n/**\n * O(1) node-by-id lookup. Hot resolvers ({@link resolvePortRef},\n * {@link resolveEdgeEndpoints}) take this instead of an array to keep edge\n * drawing at `O(edges)` rather than `O(edges × nodes)`.\n */\nexport type NodeLookup = (id: string) => NodeGraphNode | undefined;\n\n/**\n * Resolve a node's effective bounding box.\n *\n * Priority: explicit `node.width`/`node.height` > measured DOM size >\n * `defaults`. This keeps consumer-controlled fixed-size nodes deterministic\n * while letting auto-sized nodes pick up their real dimensions for\n * hit-testing, marquee selection, and `fitToContent`.\n */\nexport function getNodeBox(\n node: NodeGraphNode,\n measuredSize?: NodeGraphMeasuredSize | null,\n defaults: { width: number; height: number } = {\n width: DEFAULT_NODE_WIDTH,\n height: DEFAULT_NODE_HEIGHT,\n }\n): NodeBox {\n return {\n x: node.position.x,\n y: node.position.y,\n width: node.width ?? measuredSize?.width ?? defaults.width,\n height: node.height ?? measuredSize?.height ?? defaults.height,\n };\n}\n\n/**\n * Unit vector pointing away from a port along its side. Used as the\n * tangent direction for the Bézier handle on that endpoint.\n */\nexport function sideVector(side: NodeGraphPortSide): Point2D {\n switch (side) {\n case 'left':\n return { x: -1, y: 0 };\n case 'right':\n return { x: 1, y: 0 };\n case 'top':\n return { x: 0, y: -1 };\n case 'bottom':\n return { x: 0, y: 1 };\n default: {\n const _unreached: never = side;\n return _unreached;\n }\n }\n}\n\nexport interface BezierControlPoints {\n /** Source endpoint. */\n p0: Point2D;\n /** Source-side control point. */\n c1: Point2D;\n /** Target-side control point. */\n c2: Point2D;\n /** Target endpoint. */\n p3: Point2D;\n}\n\n/**\n * Compute control points for a Cubic Bézier connecting `source` (on side\n * `srcSide`) to `target` (on side `tgtSide`). The handle length scales\n * with the distance between the endpoints, with a floor so short edges\n * still curve visibly.\n */\nexport function getBezierControlPoints(\n source: Point2D,\n srcSide: NodeGraphPortSide,\n target: Point2D,\n tgtSide: NodeGraphPortSide\n): BezierControlPoints {\n const dx = target.x - source.x;\n const dy = target.y - source.y;\n const dist = Math.hypot(dx, dy);\n\n const srcHorizontal = srcSide === 'left' || srcSide === 'right';\n const tgtHorizontal = tgtSide === 'left' || tgtSide === 'right';\n const srcAxis = srcHorizontal ? Math.abs(dx) : Math.abs(dy);\n const tgtAxis = tgtHorizontal ? Math.abs(dx) : Math.abs(dy);\n const minHandle = 32;\n const srcLen = Math.max(minHandle, srcAxis * 0.5, dist * 0.25);\n const tgtLen = Math.max(minHandle, tgtAxis * 0.5, dist * 0.25);\n\n const srcVec = sideVector(srcSide);\n const tgtVec = sideVector(tgtSide);\n\n return {\n p0: source,\n c1: { x: source.x + srcVec.x * srcLen, y: source.y + srcVec.y * srcLen },\n c2: { x: target.x + tgtVec.x * tgtLen, y: target.y + tgtVec.y * tgtLen },\n p3: target,\n };\n}\n\n/**\n * Evaluate a Cubic Bézier at parameter `t` in `[0, 1]`.\n */\nexport function evaluateBezier(cp: BezierControlPoints, t: number): Point2D {\n const it = 1 - t;\n const it2 = it * it;\n const t2 = t * t;\n const w0 = it2 * it;\n const w1 = 3 * it2 * t;\n const w2 = 3 * it * t2;\n const w3 = t2 * t;\n return {\n x: cp.p0.x * w0 + cp.c1.x * w1 + cp.c2.x * w2 + cp.p3.x * w3,\n y: cp.p0.y * w0 + cp.c1.y * w1 + cp.c2.y * w2 + cp.p3.y * w3,\n };\n}\n\n/**\n * Test whether a world point is within `threshold` world units of the\n * Bézier curve. Samples the curve at fixed intervals and measures\n * point-to-segment distance.\n */\nexport function isPointNearBezier(\n point: Point2D,\n cp: BezierControlPoints,\n threshold: number,\n samples = 24\n): boolean {\n let prev = cp.p0;\n for (let i = 1; i <= samples; i++) {\n const t = i / samples;\n const curr = evaluateBezier(cp, t);\n if (pointToSegmentDistance(point, prev, curr) <= threshold) return true;\n prev = curr;\n }\n return false;\n}\n\n/**\n * Test whether a world point is inside (or on the edge of) a node box.\n */\nexport function isPointInNode(\n point: Point2D,\n node: NodeGraphNode,\n measuredSize?: NodeGraphMeasuredSize | null,\n defaults?: { width: number; height: number }\n): boolean {\n const box = getNodeBox(node, measuredSize, defaults);\n return (\n point.x >= box.x &&\n point.x <= box.x + box.width &&\n point.y >= box.y &&\n point.y <= box.y + box.height\n );\n}\n\n/** True when a rectangle contains a point. */\nexport function isPointInRect(point: Point2D, rect: WorldRect): boolean {\n return (\n point.x >= rect.x &&\n point.x <= rect.x + rect.width &&\n point.y >= rect.y &&\n point.y <= rect.y + rect.height\n );\n}\n\n/** True when two axis-aligned rectangles overlap (non-strict). */\nexport function rectsIntersect(a: WorldRect, b: WorldRect): boolean {\n return (\n a.x < b.x + b.width &&\n a.x + a.width > b.x &&\n a.y < b.y + b.height &&\n a.y + a.height > b.y\n );\n}\n\n/**\n * True when `inner` is fully contained inside `outer` (closed comparison —\n * a rectangle that touches the outer's edge counts as contained). Used by\n * the group-drag controller to decide which nodes ride along with their\n * enclosing group.\n */\nexport function rectContains(outer: WorldRect, inner: WorldRect): boolean {\n return (\n inner.x >= outer.x &&\n inner.y >= outer.y &&\n inner.x + inner.width <= outer.x + outer.width &&\n inner.y + inner.height <= outer.y + outer.height\n );\n}\n\n/**\n * Compute the tight bounding box of a node list, factoring in measured /\n * default sizes. Returns a zero-width rect at the origin when the list\n * is empty.\n */\nexport function computeNodesBounds(\n nodes: ReadonlyArray<NodeGraphNode>,\n measuredSizes?: MeasuredSizeLookup,\n defaults?: { width: number; height: number }\n): WorldRect {\n if (nodes.length === 0) return { x: 0, y: 0, width: 0, height: 0 };\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const node of nodes) {\n const box = getNodeBox(node, measuredSizes?.(node.id), defaults);\n if (box.x < minX) minX = box.x;\n if (box.y < minY) minY = box.y;\n if (box.x + box.width > maxX) maxX = box.x + box.width;\n if (box.y + box.height > maxY) maxY = box.y + box.height;\n }\n return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };\n}\n\n/**\n * Snap a world-space delta to the nearest grid increment. Pass `false`\n * for `grid` to return the delta unchanged.\n */\nexport function snapDelta(delta: Point2D, grid: number | false): Point2D {\n if (grid === false || grid <= 0) return delta;\n return {\n x: Math.round(delta.x / grid) * grid,\n y: Math.round(delta.y / grid) * grid,\n };\n}\n\n/**\n * Resolve the next selection for a click on `id`, honouring the additive\n * modifier (shift / cmd / ctrl). Non-additive replaces the selection with\n * just `id`; additive toggles `id` in/out of the current set. Shared by the\n * node-drag, group-drag, and edge-click paths so the toggle semantics stay\n * identical everywhere.\n */\nexport function toggleSelected(\n ids: ReadonlyArray<string>,\n id: string,\n additive: boolean\n): string[] {\n if (!additive) return [id];\n return ids.includes(id)\n ? ids.filter(existing => existing !== id)\n : [...ids, id];\n}\n\n/** Minimum size (in world units) a group can be resized down to. */\nexport const MIN_GROUP_SIZE = 32;\n\n/**\n * Compute the new group bounds during a resize gesture, given the\n * original bounds, the cumulative drag delta, and which handle is being\n * dragged. Enforces a minimum size on each axis so the group doesn't\n * collapse to zero.\n */\nexport function applyGroupResize(\n start: WorldRect,\n handle: 'nw' | 'n' | 'ne' | 'e' | 'se' | 's' | 'sw' | 'w',\n delta: Point2D,\n minSize = MIN_GROUP_SIZE\n): WorldRect {\n let { x, y, width, height } = start;\n\n const movesLeft = handle === 'nw' || handle === 'w' || handle === 'sw';\n const movesRight = handle === 'ne' || handle === 'e' || handle === 'se';\n const movesTop = handle === 'nw' || handle === 'n' || handle === 'ne';\n const movesBottom = handle === 'sw' || handle === 's' || handle === 'se';\n\n if (movesLeft) {\n const dx = Math.min(delta.x, start.width - minSize);\n x = start.x + dx;\n width = start.width - dx;\n } else if (movesRight) {\n width = Math.max(minSize, start.width + delta.x);\n }\n if (movesTop) {\n const dy = Math.min(delta.y, start.height - minSize);\n y = start.y + dy;\n height = start.height - dy;\n } else if (movesBottom) {\n height = Math.max(minSize, start.height + delta.y);\n }\n return { x, y, width, height };\n}\n\n/**\n * Resolve a port reference to its **world-space** position + side using\n * the slot-registered port position lookup. Returns `null` when the node\n * is missing or the port hasn't been measured yet (the slot's\n * `useLayoutEffect` hasn't run).\n */\nexport function resolvePortRef(\n ref: NodeGraphPortRef,\n getNodeById: NodeLookup,\n getPortPosition: PortPositionLookup\n): {\n node: NodeGraphNode;\n position: Point2D;\n side: NodeGraphPortSide;\n dataType?: string;\n} | null {\n const node = getNodeById(ref.node);\n if (!node) return null;\n const portPos = getPortPosition(ref.node, ref.port);\n if (!portPos) return null;\n return {\n node,\n position: {\n x: node.position.x + portPos.x,\n y: node.position.y + portPos.y,\n },\n side: portPos.side,\n ...(portPos.dataType !== undefined ? { dataType: portPos.dataType } : {}),\n };\n}\n\n/**\n * Resolve both endpoints of an edge to world-space positions + sides.\n * Returns `null` when either endpoint can't be resolved (missing node or\n * not-yet-measured port).\n */\nexport function resolveEdgeEndpoints(\n edge: NodeGraphEdge,\n getNodeById: NodeLookup,\n getPortPosition: PortPositionLookup\n): {\n source: Point2D;\n srcSide: NodeGraphPortSide;\n target: Point2D;\n tgtSide: NodeGraphPortSide;\n} | null {\n const src = resolvePortRef(edge.source, getNodeById, getPortPosition);\n if (!src) return null;\n const tgt = resolvePortRef(edge.target, getNodeById, getPortPosition);\n if (!tgt) return null;\n return {\n source: src.position,\n srcSide: src.side,\n target: tgt.position,\n tgtSide: tgt.side,\n };\n}\n\n/**\n * Apply a selection-driven cascade delete to a graph snapshot. Removes\n * the selected nodes / edges / groups and additionally drops any edge\n * whose source or target node was removed — eliminates the classic\n * \"orphan edge dangling off a deleted node\" bug. Pure function; returns\n * the same array references when nothing was removed.\n *\n * Used internally by `<NodeGraph>` when no `onDelete` is supplied, and\n * exported so consumers who DO supply `onDelete` (e.g. to snapshot for\n * undo, log telemetry, show confirmations) can reuse the same logic\n * without rewriting the filter.\n */\nexport function applyCascadeDelete<TNode extends { id: string }>(\n input: {\n nodes: ReadonlyArray<TNode>;\n edges: ReadonlyArray<NodeGraphEdge>;\n groups: ReadonlyArray<{ id: string }>;\n },\n selection: {\n nodes: ReadonlyArray<string>;\n edges: ReadonlyArray<string>;\n groups: ReadonlyArray<string>;\n }\n): {\n nodes: TNode[] | ReadonlyArray<TNode>;\n edges: NodeGraphEdge[] | ReadonlyArray<NodeGraphEdge>;\n groups: typeof input.groups;\n} {\n const removedNodeIds = new Set(selection.nodes);\n const removedEdgeIds = new Set(selection.edges);\n const removedGroupIds = new Set(selection.groups);\n\n const nodes =\n removedNodeIds.size > 0\n ? input.nodes.filter(n => !removedNodeIds.has(n.id))\n : input.nodes;\n const edges = input.edges.filter(\n e =>\n !removedEdgeIds.has(e.id) &&\n !removedNodeIds.has(e.source.node) &&\n !removedNodeIds.has(e.target.node)\n );\n const groups =\n removedGroupIds.size > 0\n ? input.groups.filter(g => !removedGroupIds.has(g.id))\n : input.groups;\n\n return {\n nodes,\n // Keep the input array reference when nothing changed — lets the\n // consumer skip an unnecessary `setEdges` if they want to.\n edges: edges.length === input.edges.length ? input.edges : edges,\n groups,\n };\n}\n\n/**\n * Find the topmost edge whose Bézier passes within `threshold` world units\n * of `point`. Iterates in reverse so the last-drawn edge wins, matching what\n * the user sees on top. Returns the edge id, or `null` when none is hit.\n *\n * Used for pointer hover + click selection + right-click targeting of edges,\n * which are drawn on a canvas (no DOM to hit-test against).\n */\nexport function findEdgeAtPoint(\n point: Point2D,\n edges: ReadonlyArray<NodeGraphEdge>,\n getNodeById: NodeLookup,\n getPortPosition: PortPositionLookup,\n threshold: number\n): string | null {\n for (let i = edges.length - 1; i >= 0; i--) {\n const edge = edges[i];\n if (!edge) continue;\n const ends = resolveEdgeEndpoints(edge, getNodeById, getPortPosition);\n if (!ends) continue;\n const cp = getBezierControlPoints(\n ends.source,\n ends.srcSide,\n ends.target,\n ends.tgtSide\n );\n // Broad-phase rejection: a cubic Bézier is contained within the convex\n // hull of its control points, so a point outside their bounding box\n // (expanded by `threshold`) can never be within `threshold` of the curve.\n // Skips the 24-sample distance test for the vast majority of edges on\n // large graphs — turns hover/click hit-testing from O(edges × 24) into a\n // couple of comparisons per non-candidate edge.\n if (point.x < Math.min(cp.p0.x, cp.c1.x, cp.c2.x, cp.p3.x) - threshold)\n continue;\n if (point.x > Math.max(cp.p0.x, cp.c1.x, cp.c2.x, cp.p3.x) + threshold)\n continue;\n if (point.y < Math.min(cp.p0.y, cp.c1.y, cp.c2.y, cp.p3.y) - threshold)\n continue;\n if (point.y > Math.max(cp.p0.y, cp.c1.y, cp.c2.y, cp.p3.y) + threshold)\n continue;\n if (isPointNearBezier(point, cp, threshold)) return edge.id;\n }\n return null;\n}\n\n// ─── Internals ───\n\nfunction pointToSegmentDistance(p: Point2D, a: Point2D, b: Point2D): number {\n const abx = b.x - a.x;\n const aby = b.y - a.y;\n const lenSq = abx * abx + aby * aby;\n if (lenSq === 0) return Math.hypot(p.x - a.x, p.y - a.y);\n let t = ((p.x - a.x) * abx + (p.y - a.y) * aby) / lenSq;\n if (t < 0) t = 0;\n else if (t > 1) t = 1;\n return Math.hypot(p.x - (a.x + t * abx), p.y - (a.y + t * aby));\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { devWarn } from '../../../utils/devWarn.js';
|
|
3
|
+
import { NODE_GRAPH_SLOT } from './NodeGraph.types.js';
|
|
4
|
+
|
|
5
|
+
function getSlotKind(el) {
|
|
6
|
+
if (typeof el.type !== 'function' && typeof el.type !== 'object') {
|
|
7
|
+
return null;
|
|
8
|
+
}
|
|
9
|
+
const marker = el.type[NODE_GRAPH_SLOT];
|
|
10
|
+
return marker ?? null;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Walk `<NodeGraph>` children, recognise the compound slot subcomponents
|
|
14
|
+
* (`<NodeGraph.Background>`, `<NodeGraph.Minimap>`, `<NodeGraph.Toolbar>`,
|
|
15
|
+
* `<NodeGraph.SpawnPalette>`), and collect their props. Anything else
|
|
16
|
+
* triggers a dev-time warning — the main component never renders raw
|
|
17
|
+
* children, only the recognised slots in the right places of its tree.
|
|
18
|
+
*/
|
|
19
|
+
function sortSlots(children) {
|
|
20
|
+
// `null as T | null` (rather than `: T | null = null`) keeps the flow type a
|
|
21
|
+
// nullable union: these are only ever assigned inside the `forEach` callback
|
|
22
|
+
// below, and TypeScript can't see closure mutations, so a plain `= null`
|
|
23
|
+
// would narrow them to `null` and make the `!== null` checks below look dead.
|
|
24
|
+
let backgroundProps = null;
|
|
25
|
+
let minimapProps = null;
|
|
26
|
+
let spawnPaletteProps = null;
|
|
27
|
+
const toolbars = [];
|
|
28
|
+
React.Children.forEach(children, child => {
|
|
29
|
+
if (!React.isValidElement(child)) {
|
|
30
|
+
if (child != null && child !== false) {
|
|
31
|
+
devWarn('[NodeGraph] children must be slot subcomponents (<NodeGraph.Background />, <NodeGraph.Minimap />, <NodeGraph.Toolbar />, <NodeGraph.SpawnPalette />).');
|
|
32
|
+
}
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const kind = getSlotKind(child);
|
|
36
|
+
if (kind === 'background') {
|
|
37
|
+
backgroundProps = child.props;
|
|
38
|
+
}
|
|
39
|
+
else if (kind === 'minimap') {
|
|
40
|
+
minimapProps = child.props;
|
|
41
|
+
}
|
|
42
|
+
else if (kind === 'toolbar') {
|
|
43
|
+
toolbars.push(child.props);
|
|
44
|
+
}
|
|
45
|
+
else if (kind === 'spawn-palette') {
|
|
46
|
+
spawnPaletteProps = child.props;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
const dn = child.type
|
|
50
|
+
?.displayName;
|
|
51
|
+
if (dn?.startsWith('NodeGraph.')) {
|
|
52
|
+
devWarn(`[NodeGraph] child "${dn}" looks like a slot subcomponent but lacks the ` +
|
|
53
|
+
'NODE_GRAPH_SLOT marker. If you wrapped it in React.memo or HOCs, copy the ' +
|
|
54
|
+
'marker symbol over to the wrapper.');
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
return {
|
|
59
|
+
hasBackground: backgroundProps !== null,
|
|
60
|
+
backgroundProps,
|
|
61
|
+
hasMinimap: minimapProps !== null,
|
|
62
|
+
minimapProps,
|
|
63
|
+
toolbars,
|
|
64
|
+
spawnPaletteProps,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export { sortSlots };
|
|
69
|
+
//# sourceMappingURL=sortSlots.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sortSlots.js","sources":["src/components/editor/NodeGraph/sortSlots.ts"],"sourcesContent":["import React from 'react';\n\nimport { devWarn } from '@/utils/devWarn';\n\nimport { NODE_GRAPH_SLOT } from './NodeGraph.types';\nimport {\n NodeGraphBackground,\n NodeGraphMinimap,\n NodeGraphSpawnPalette,\n NodeGraphToolbar,\n} from './NodeGraphSlots';\n\nimport type { NodeGraphSlotKind, NodeGraphSlotMarker } from './NodeGraph.types';\n\ntype NodeGraphBackgroundProps = React.ComponentProps<\n typeof NodeGraphBackground\n>;\ntype NodeGraphMinimapProps = React.ComponentProps<typeof NodeGraphMinimap>;\ntype NodeGraphToolbarProps = React.ComponentProps<typeof NodeGraphToolbar>;\ntype NodeGraphSpawnPaletteProps = React.ComponentProps<\n typeof NodeGraphSpawnPalette\n>;\n\nexport interface SortedSlots {\n hasBackground: boolean;\n backgroundProps: NodeGraphBackgroundProps | null;\n hasMinimap: boolean;\n minimapProps: NodeGraphMinimapProps | null;\n /** Multiple toolbars can co-exist (e.g. top-left + top-right). */\n toolbars: ReadonlyArray<NodeGraphToolbarProps>;\n spawnPaletteProps: NodeGraphSpawnPaletteProps | null;\n}\n\nfunction getSlotKind(el: React.ReactElement): NodeGraphSlotKind | null {\n if (typeof el.type !== 'function' && typeof el.type !== 'object') {\n return null;\n }\n const marker = (el.type as Partial<NodeGraphSlotMarker>)[NODE_GRAPH_SLOT];\n return marker ?? null;\n}\n\n/**\n * Walk `<NodeGraph>` children, recognise the compound slot subcomponents\n * (`<NodeGraph.Background>`, `<NodeGraph.Minimap>`, `<NodeGraph.Toolbar>`,\n * `<NodeGraph.SpawnPalette>`), and collect their props. Anything else\n * triggers a dev-time warning — the main component never renders raw\n * children, only the recognised slots in the right places of its tree.\n */\nexport function sortSlots(children: React.ReactNode): SortedSlots {\n // `null as T | null` (rather than `: T | null = null`) keeps the flow type a\n // nullable union: these are only ever assigned inside the `forEach` callback\n // below, and TypeScript can't see closure mutations, so a plain `= null`\n // would narrow them to `null` and make the `!== null` checks below look dead.\n let backgroundProps = null as NodeGraphBackgroundProps | null;\n let minimapProps = null as NodeGraphMinimapProps | null;\n let spawnPaletteProps = null as NodeGraphSpawnPaletteProps | null;\n const toolbars: NodeGraphToolbarProps[] = [];\n React.Children.forEach(children, child => {\n if (!React.isValidElement(child)) {\n if (child != null && child !== false) {\n devWarn(\n '[NodeGraph] children must be slot subcomponents (<NodeGraph.Background />, <NodeGraph.Minimap />, <NodeGraph.Toolbar />, <NodeGraph.SpawnPalette />).'\n );\n }\n return;\n }\n const kind = getSlotKind(child);\n if (kind === 'background') {\n backgroundProps = child.props as NodeGraphBackgroundProps;\n } else if (kind === 'minimap') {\n minimapProps = child.props as NodeGraphMinimapProps;\n } else if (kind === 'toolbar') {\n toolbars.push(child.props as NodeGraphToolbarProps);\n } else if (kind === 'spawn-palette') {\n spawnPaletteProps = child.props as NodeGraphSpawnPaletteProps;\n } else {\n const dn = (child.type as { displayName?: string } | undefined)\n ?.displayName;\n if (dn?.startsWith('NodeGraph.')) {\n devWarn(\n `[NodeGraph] child \"${dn}\" looks like a slot subcomponent but lacks the ` +\n 'NODE_GRAPH_SLOT marker. If you wrapped it in React.memo or HOCs, copy the ' +\n 'marker symbol over to the wrapper.'\n );\n }\n }\n });\n return {\n hasBackground: backgroundProps !== null,\n backgroundProps,\n hasMinimap: minimapProps !== null,\n minimapProps,\n toolbars,\n spawnPaletteProps,\n };\n}\n"],"names":[],"mappings":";;;;AAiCA,SAAS,WAAW,CAAC,EAAsB,EAAA;AACzC,IAAA,IAAI,OAAO,EAAE,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,EAAE;AAChE,QAAA,OAAO,IAAI;IACb;IACA,MAAM,MAAM,GAAI,EAAE,CAAC,IAAqC,CAAC,eAAe,CAAC;IACzE,OAAO,MAAM,IAAI,IAAI;AACvB;AAEA;;;;;;AAMG;AACG,SAAU,SAAS,CAAC,QAAyB,EAAA;;;;;IAKjD,IAAI,eAAe,GAAG,IAAuC;IAC7D,IAAI,YAAY,GAAG,IAAoC;IACvD,IAAI,iBAAiB,GAAG,IAAyC;IACjE,MAAM,QAAQ,GAA4B,EAAE;IAC5C,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,IAAG;QACvC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;YAChC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,EAAE;gBACpC,OAAO,CACL,uJAAuJ,CACxJ;YACH;YACA;QACF;AACA,QAAA,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC;AAC/B,QAAA,IAAI,IAAI,KAAK,YAAY,EAAE;AACzB,YAAA,eAAe,GAAG,KAAK,CAAC,KAAiC;QAC3D;AAAO,aAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AAC7B,YAAA,YAAY,GAAG,KAAK,CAAC,KAA8B;QACrD;AAAO,aAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AAC7B,YAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAA8B,CAAC;QACrD;AAAO,aAAA,IAAI,IAAI,KAAK,eAAe,EAAE;AACnC,YAAA,iBAAiB,GAAG,KAAK,CAAC,KAAmC;QAC/D;aAAO;AACL,YAAA,MAAM,EAAE,GAAI,KAAK,CAAC;AAChB,kBAAE,WAAW;AACf,YAAA,IAAI,EAAE,EAAE,UAAU,CAAC,YAAY,CAAC,EAAE;gBAChC,OAAO,CACL,CAAA,mBAAA,EAAsB,EAAE,CAAA,+CAAA,CAAiD;oBACvE,4EAA4E;AAC5E,oBAAA,oCAAoC,CACvC;YACH;QACF;AACF,IAAA,CAAC,CAAC;IACF,OAAO;QACL,aAAa,EAAE,eAAe,KAAK,IAAI;QACvC,eAAe;QACf,UAAU,EAAE,YAAY,KAAK,IAAI;QACjC,YAAY;QACZ,QAAQ;QACR,iBAAiB;KAClB;AACH;;;;"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useRef, useLayoutEffect, useCallback } from 'react';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Mechanical lifecycle for a pointer-capture drag gesture, shared by the node
|
|
6
|
+
* and group drag controllers. Owns pointer capture, document listener
|
|
7
|
+
* attach/detach, the per-pointer id guard, and cleanup on unmount — leaving
|
|
8
|
+
* each hook to supply only its own move / cancel / up business logic. Document
|
|
9
|
+
* listeners exist only while a gesture is in flight, so there's zero
|
|
10
|
+
* pointermove cost between drags.
|
|
11
|
+
*/
|
|
12
|
+
function useDragGesture() {
|
|
13
|
+
const activeRef = useRef(null);
|
|
14
|
+
// Release in-flight document listeners if the component unmounts mid-drag.
|
|
15
|
+
useLayoutEffect(() => {
|
|
16
|
+
return () => {
|
|
17
|
+
activeRef.current?.teardown();
|
|
18
|
+
activeRef.current = null;
|
|
19
|
+
};
|
|
20
|
+
}, []);
|
|
21
|
+
const begin = useCallback((event, handlers) => {
|
|
22
|
+
activeRef.current?.teardown();
|
|
23
|
+
const pointerId = event.pointerId;
|
|
24
|
+
event.currentTarget.setPointerCapture(pointerId);
|
|
25
|
+
const handleMove = (e) => {
|
|
26
|
+
if (e.pointerId !== pointerId)
|
|
27
|
+
return;
|
|
28
|
+
handlers.onMove(e);
|
|
29
|
+
};
|
|
30
|
+
const handleCancel = (e) => {
|
|
31
|
+
if (e.pointerId !== pointerId)
|
|
32
|
+
return;
|
|
33
|
+
teardown();
|
|
34
|
+
handlers.onCancel();
|
|
35
|
+
};
|
|
36
|
+
// Function declaration (hoisted) so the handlers above can close over it.
|
|
37
|
+
function teardown() {
|
|
38
|
+
document.removeEventListener('pointermove', handleMove);
|
|
39
|
+
document.removeEventListener('pointercancel', handleCancel);
|
|
40
|
+
if (activeRef.current?.pointerId === pointerId) {
|
|
41
|
+
activeRef.current = null;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
document.addEventListener('pointermove', handleMove);
|
|
45
|
+
document.addEventListener('pointercancel', handleCancel);
|
|
46
|
+
activeRef.current = { pointerId, teardown };
|
|
47
|
+
}, []);
|
|
48
|
+
const finish = useCallback((event) => {
|
|
49
|
+
const active = activeRef.current;
|
|
50
|
+
if (active?.pointerId !== event.pointerId)
|
|
51
|
+
return false;
|
|
52
|
+
const target = event.currentTarget;
|
|
53
|
+
if (target.hasPointerCapture(event.pointerId)) {
|
|
54
|
+
target.releasePointerCapture(event.pointerId);
|
|
55
|
+
}
|
|
56
|
+
active.teardown();
|
|
57
|
+
return true;
|
|
58
|
+
}, []);
|
|
59
|
+
return { begin, finish };
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export { useDragGesture };
|
|
63
|
+
//# sourceMappingURL=useDragGesture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDragGesture.js","sources":["src/components/editor/NodeGraph/useDragGesture.ts"],"sourcesContent":["'use client';\n\nimport { useCallback, useLayoutEffect, useRef } from 'react';\n\nimport type React from 'react';\n\ninterface ActiveGesture {\n pointerId: number;\n teardown: () => void;\n}\n\nexport interface DragGestureHandlers {\n /** Fired on each document `pointermove` for the captured pointer. */\n onMove: (event: PointerEvent) => void;\n /**\n * Fired on `pointercancel` for the captured pointer. Document listeners are\n * already detached by the time this runs — just reset business state.\n */\n onCancel: () => void;\n}\n\nexport interface DragGestureControls {\n /**\n * Begin a pointer-drag on `event.currentTarget`: capture the pointer, attach\n * document `pointermove` / `pointercancel` listeners, and remember the\n * gesture so `finish` (or unmount) can release it. Any gesture still in\n * flight is torn down first — defensive against a lost `pointercancel`\n * (e.g. pointer capture dropped on alt-tab between moves).\n */\n begin: (\n event: React.PointerEvent<HTMLElement>,\n handlers: DragGestureHandlers\n ) => void;\n /**\n * Finish from a `pointerup` handler: release pointer capture and detach the\n * document listeners. Returns `false` when the up doesn't belong to the\n * active gesture (stale or secondary pointer) so the caller can bail.\n */\n finish: (event: React.PointerEvent<HTMLElement>) => boolean;\n}\n\n/**\n * Mechanical lifecycle for a pointer-capture drag gesture, shared by the node\n * and group drag controllers. Owns pointer capture, document listener\n * attach/detach, the per-pointer id guard, and cleanup on unmount — leaving\n * each hook to supply only its own move / cancel / up business logic. Document\n * listeners exist only while a gesture is in flight, so there's zero\n * pointermove cost between drags.\n */\nexport function useDragGesture(): DragGestureControls {\n const activeRef = useRef<ActiveGesture | null>(null);\n\n // Release in-flight document listeners if the component unmounts mid-drag.\n useLayoutEffect(() => {\n return () => {\n activeRef.current?.teardown();\n activeRef.current = null;\n };\n }, []);\n\n const begin = useCallback(\n (\n event: React.PointerEvent<HTMLElement>,\n handlers: DragGestureHandlers\n ): void => {\n activeRef.current?.teardown();\n\n const pointerId = event.pointerId;\n event.currentTarget.setPointerCapture(pointerId);\n\n const handleMove = (e: PointerEvent): void => {\n if (e.pointerId !== pointerId) return;\n handlers.onMove(e);\n };\n const handleCancel = (e: PointerEvent): void => {\n if (e.pointerId !== pointerId) return;\n teardown();\n handlers.onCancel();\n };\n // Function declaration (hoisted) so the handlers above can close over it.\n function teardown(): void {\n document.removeEventListener('pointermove', handleMove);\n document.removeEventListener('pointercancel', handleCancel);\n if (activeRef.current?.pointerId === pointerId) {\n activeRef.current = null;\n }\n }\n\n document.addEventListener('pointermove', handleMove);\n document.addEventListener('pointercancel', handleCancel);\n activeRef.current = { pointerId, teardown };\n },\n []\n );\n\n const finish = useCallback(\n (event: React.PointerEvent<HTMLElement>): boolean => {\n const active = activeRef.current;\n if (active?.pointerId !== event.pointerId) return false;\n const target = event.currentTarget;\n if (target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n }\n active.teardown();\n return true;\n },\n []\n );\n\n return { begin, finish };\n}\n"],"names":[],"mappings":";;;AAyCA;;;;;;;AAOG;;AAED;;;AAIE;AACE;AACA;AACF;;;AAQE;AAEA;AACA;AAEA;AACE;;AACA;AACF;AACA;AACE;;AACA;;AAEF;;AAEA;AACE;AACA;;AAEE;;;AAIJ;AACA;;;AAMJ;AAEI;AACA;AAA2C;AAC3C;;AAEE;;;AAGF;;AAKJ;AACF;;"}
|