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,461 @@
|
|
|
1
|
+
import { applyGroupResize, resolveEdgeEndpoints, getBezierControlPoints } from './nodeGraphMath.js';
|
|
2
|
+
|
|
3
|
+
/** Stroke widths in *screen* pixels — independent of zoom. */
|
|
4
|
+
const EDGE_STROKE_WIDTH = 1.5;
|
|
5
|
+
const EDGE_STROKE_WIDTH_SELECTED = 2.5;
|
|
6
|
+
const EDGE_STROKE_WIDTH_HOVERED = 2;
|
|
7
|
+
const PREVIEW_STROKE_WIDTH = 2;
|
|
8
|
+
const GROUP_STROKE_WIDTH = 1;
|
|
9
|
+
/**
|
|
10
|
+
* Stroke a cubic Bézier to the given context. The control points are in
|
|
11
|
+
* screen coordinates (already transformed by the caller).
|
|
12
|
+
*/
|
|
13
|
+
function strokeBezier(ctx, cp) {
|
|
14
|
+
ctx.beginPath();
|
|
15
|
+
ctx.moveTo(cp.p0.x, cp.p0.y);
|
|
16
|
+
ctx.bezierCurveTo(cp.c1.x, cp.c1.y, cp.c2.x, cp.c2.y, cp.p3.x, cp.p3.y);
|
|
17
|
+
ctx.stroke();
|
|
18
|
+
}
|
|
19
|
+
function toScreenCp(cp, worldToScreen) {
|
|
20
|
+
return {
|
|
21
|
+
p0: worldToScreen(cp.p0),
|
|
22
|
+
c1: worldToScreen(cp.c1),
|
|
23
|
+
c2: worldToScreen(cp.c2),
|
|
24
|
+
p3: worldToScreen(cp.p3),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Margin (screen px) added around the viewport before culling an edge.
|
|
29
|
+
* Covers the stroke half-width + round line-cap overshoot for the default
|
|
30
|
+
* styles, plus headroom for moderately wider consumer `edgeStyle` widths.
|
|
31
|
+
* A curve whose control-point bbox is more than this far outside the
|
|
32
|
+
* viewport cannot paint a visible pixel inside it.
|
|
33
|
+
*/
|
|
34
|
+
const EDGE_CULL_MARGIN_PX = 32;
|
|
35
|
+
/**
|
|
36
|
+
* True when a cubic Bézier (given by its screen-space control points)
|
|
37
|
+
* cannot intersect the viewport. The curve lies within the convex hull of
|
|
38
|
+
* its control points, so an axis-aligned bbox of the four points is a
|
|
39
|
+
* conservative bound — if that bbox is entirely past one viewport edge
|
|
40
|
+
* (plus {@link EDGE_CULL_MARGIN_PX}), the curve is off-screen.
|
|
41
|
+
*/
|
|
42
|
+
function bezierOutsideViewport(cp, width, height) {
|
|
43
|
+
const minX = Math.min(cp.p0.x, cp.c1.x, cp.c2.x, cp.p3.x);
|
|
44
|
+
if (minX > width + EDGE_CULL_MARGIN_PX)
|
|
45
|
+
return true;
|
|
46
|
+
const maxX = Math.max(cp.p0.x, cp.c1.x, cp.c2.x, cp.p3.x);
|
|
47
|
+
if (maxX < -EDGE_CULL_MARGIN_PX)
|
|
48
|
+
return true;
|
|
49
|
+
const minY = Math.min(cp.p0.y, cp.c1.y, cp.c2.y, cp.p3.y);
|
|
50
|
+
if (minY > height + EDGE_CULL_MARGIN_PX)
|
|
51
|
+
return true;
|
|
52
|
+
const maxY = Math.max(cp.p0.y, cp.c1.y, cp.c2.y, cp.p3.y);
|
|
53
|
+
if (maxY < -EDGE_CULL_MARGIN_PX)
|
|
54
|
+
return true;
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
/** Draw all edges in the graph. */
|
|
58
|
+
function drawEdges(ctx, info, data, selection, hoveredEdgeId, interaction, getNodeById, getPortPosition, edgeStyle, theme) {
|
|
59
|
+
// Either a node-drag (`drag-nodes`) or a group-drag carrying contained
|
|
60
|
+
// nodes (`drag-groups.containedNodeIds`) shifts edge endpoints live —
|
|
61
|
+
// resolve to a single (ids, delta) shape so the loop below stays simple.
|
|
62
|
+
// The interaction state already exposes `nodeIds` / `containedNodeIds` as
|
|
63
|
+
// ReadonlySet, so no per-frame Set construction is needed here.
|
|
64
|
+
let dragSet = null;
|
|
65
|
+
if (interaction.kind === 'drag-nodes') {
|
|
66
|
+
dragSet = {
|
|
67
|
+
ids: interaction.nodeIds,
|
|
68
|
+
delta: interaction.delta,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
else if (interaction.kind === 'drag-groups') {
|
|
72
|
+
dragSet = {
|
|
73
|
+
ids: interaction.containedNodeIds,
|
|
74
|
+
delta: interaction.delta,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
// While an endpoint is being re-dragged, hide the edge from this layer so
|
|
78
|
+
// only the connection preview is shown (the wire "detaches" and follows
|
|
79
|
+
// the cursor).
|
|
80
|
+
const reconnectingId = interaction.kind === 'connect' ? interaction.reconnectEdgeId : undefined;
|
|
81
|
+
// O(1) membership for the per-edge selected check below — this layer
|
|
82
|
+
// redraws every frame during a drag, so a linear `selection.edges.includes`
|
|
83
|
+
// per edge would be O(edges × selected) each frame.
|
|
84
|
+
const selectedEdgeIds = new Set(selection.edges);
|
|
85
|
+
for (const edge of data.edges) {
|
|
86
|
+
if (edge.id === reconnectingId)
|
|
87
|
+
continue;
|
|
88
|
+
const endpoints = resolveEdgeEndpoints(edge, getNodeById, getPortPosition);
|
|
89
|
+
if (!endpoints)
|
|
90
|
+
continue;
|
|
91
|
+
// Apply the in-flight drag delta so edges follow nodes 1:1 during a drag,
|
|
92
|
+
// instead of snapping to the new position on pointerup.
|
|
93
|
+
const source = dragSet?.ids.has(edge.source.node)
|
|
94
|
+
? {
|
|
95
|
+
x: endpoints.source.x + dragSet.delta.x,
|
|
96
|
+
y: endpoints.source.y + dragSet.delta.y,
|
|
97
|
+
}
|
|
98
|
+
: endpoints.source;
|
|
99
|
+
const target = dragSet?.ids.has(edge.target.node)
|
|
100
|
+
? {
|
|
101
|
+
x: endpoints.target.x + dragSet.delta.x,
|
|
102
|
+
y: endpoints.target.y + dragSet.delta.y,
|
|
103
|
+
}
|
|
104
|
+
: endpoints.target;
|
|
105
|
+
const cpWorld = getBezierControlPoints(source, endpoints.srcSide, target, endpoints.tgtSide);
|
|
106
|
+
const cpScreen = toScreenCp(cpWorld, p => info.worldToScreen(p));
|
|
107
|
+
// Frustum cull: a cubic Bézier is fully contained in the convex hull of
|
|
108
|
+
// its four control points, so if the screen-space bbox of those points
|
|
109
|
+
// lies entirely outside the viewport (plus a margin) the curve can't be
|
|
110
|
+
// visible — skip the style callback + stroke entirely. This bounds the
|
|
111
|
+
// per-frame edge cost by what's on screen rather than total edge count,
|
|
112
|
+
// which is the dominant cost when zoomed in on a large graph.
|
|
113
|
+
if (bezierOutsideViewport(cpScreen, info.size.width, info.size.height)) {
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
const isSelected = selectedEdgeIds.has(edge.id);
|
|
117
|
+
const isHovered = hoveredEdgeId === edge.id;
|
|
118
|
+
// Resolve consumer override for this edge. Source/target ports
|
|
119
|
+
// come from the store — `dataType` and `side` are already there,
|
|
120
|
+
// no parallel index needed on the consumer side.
|
|
121
|
+
const srcPos = getPortPosition(edge.source.node, edge.source.port);
|
|
122
|
+
const tgtPos = getPortPosition(edge.target.node, edge.target.port);
|
|
123
|
+
const customStyle = edgeStyle?.(edge, {
|
|
124
|
+
selected: isSelected,
|
|
125
|
+
hovered: isHovered,
|
|
126
|
+
sourcePort: srcPos
|
|
127
|
+
? srcPos.dataType !== undefined
|
|
128
|
+
? { side: srcPos.side, dataType: srcPos.dataType }
|
|
129
|
+
: { side: srcPos.side }
|
|
130
|
+
: null,
|
|
131
|
+
targetPort: tgtPos
|
|
132
|
+
? tgtPos.dataType !== undefined
|
|
133
|
+
? { side: tgtPos.side, dataType: tgtPos.dataType }
|
|
134
|
+
: { side: tgtPos.side }
|
|
135
|
+
: null,
|
|
136
|
+
});
|
|
137
|
+
// State-driven defaults; consumer overrides via `customStyle` take
|
|
138
|
+
// precedence when they're not undefined. Selected / hovered still
|
|
139
|
+
// win over a plain `edge.color` so the interaction state stays
|
|
140
|
+
// visible — but consumer can override even that with `edgeStyle`.
|
|
141
|
+
const defaultColor = isSelected
|
|
142
|
+
? theme.edgeStrokeSelected
|
|
143
|
+
: isHovered
|
|
144
|
+
? theme.edgeStrokeHovered
|
|
145
|
+
: (edge.color ?? theme.edgeStroke);
|
|
146
|
+
const defaultWidth = isSelected
|
|
147
|
+
? EDGE_STROKE_WIDTH_SELECTED
|
|
148
|
+
: isHovered
|
|
149
|
+
? EDGE_STROKE_WIDTH_HOVERED
|
|
150
|
+
: EDGE_STROKE_WIDTH;
|
|
151
|
+
ctx.strokeStyle = customStyle?.color ?? defaultColor;
|
|
152
|
+
ctx.lineWidth = customStyle?.width ?? defaultWidth;
|
|
153
|
+
ctx.lineCap = 'round';
|
|
154
|
+
if (customStyle?.dash != null && customStyle.dash.length > 0) {
|
|
155
|
+
ctx.setLineDash(customStyle.dash);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
ctx.setLineDash([]);
|
|
159
|
+
}
|
|
160
|
+
strokeBezier(ctx, cpScreen);
|
|
161
|
+
}
|
|
162
|
+
// Reset shared state mutated above so subsequent layers (groups,
|
|
163
|
+
// preview) don't inherit a stale dash pattern.
|
|
164
|
+
ctx.setLineDash([]);
|
|
165
|
+
}
|
|
166
|
+
/** Draw group backdrops (under nodes, under edges). */
|
|
167
|
+
function drawGroups(ctx, info, data, selection, interaction, theme) {
|
|
168
|
+
// Live drag / resize support — mirror what the HTML overlay shows so the
|
|
169
|
+
// canvas backdrop stays glued to the user's cursor during gestures.
|
|
170
|
+
const dragSet = interaction.kind === 'drag-groups'
|
|
171
|
+
? { ids: interaction.groupIds, delta: interaction.delta }
|
|
172
|
+
: null;
|
|
173
|
+
const resizing = interaction.kind === 'resize-group' ? interaction : null;
|
|
174
|
+
const selectedGroupIds = new Set(selection.groups);
|
|
175
|
+
for (const group of data.groups) {
|
|
176
|
+
let bx = group.bounds.x;
|
|
177
|
+
let by = group.bounds.y;
|
|
178
|
+
let bw = group.bounds.width;
|
|
179
|
+
let bh = group.bounds.height;
|
|
180
|
+
if (dragSet?.ids.has(group.id)) {
|
|
181
|
+
bx += dragSet.delta.x;
|
|
182
|
+
by += dragSet.delta.y;
|
|
183
|
+
}
|
|
184
|
+
else if (resizing?.groupId === group.id) {
|
|
185
|
+
const next = applyGroupResize(resizing.startBounds, resizing.handle, resizing.delta);
|
|
186
|
+
bx = next.x;
|
|
187
|
+
by = next.y;
|
|
188
|
+
bw = next.width;
|
|
189
|
+
bh = next.height;
|
|
190
|
+
}
|
|
191
|
+
const tl = info.worldToScreen({ x: bx, y: by });
|
|
192
|
+
const br = info.worldToScreen({ x: bx + bw, y: by + bh });
|
|
193
|
+
const width = br.x - tl.x;
|
|
194
|
+
const height = br.y - tl.y;
|
|
195
|
+
if (width <= 0 || height <= 0)
|
|
196
|
+
continue;
|
|
197
|
+
const isSelected = selectedGroupIds.has(group.id);
|
|
198
|
+
ctx.fillStyle =
|
|
199
|
+
group.color ?? (isSelected ? theme.groupFillSelected : theme.groupFill);
|
|
200
|
+
ctx.fillRect(tl.x, tl.y, width, height);
|
|
201
|
+
ctx.strokeStyle = group.color ?? theme.groupStroke;
|
|
202
|
+
ctx.lineWidth = GROUP_STROKE_WIDTH;
|
|
203
|
+
ctx.strokeRect(tl.x + 0.5, tl.y + 0.5, width - 1, height - 1);
|
|
204
|
+
// The label is rendered by the HTML overlay (`NodeGraphGroupView`) so
|
|
205
|
+
// it stays editable on click and scales with the world transform like
|
|
206
|
+
// the rest of the group body. Canvas no longer paints it — avoids the
|
|
207
|
+
// duplicate-title artefact where a screen-space canvas label and a
|
|
208
|
+
// world-space HTML label drifted apart at non-1 zoom.
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Draw the in-flight connection preview — a Bézier from the source port to
|
|
213
|
+
* the current pointer position, styled to indicate validity.
|
|
214
|
+
*/
|
|
215
|
+
function drawConnectionPreview(ctx, info, interaction, resolveSourcePort, theme) {
|
|
216
|
+
if (interaction.kind !== 'connect')
|
|
217
|
+
return;
|
|
218
|
+
const src = resolveSourcePort(interaction.source);
|
|
219
|
+
if (!src)
|
|
220
|
+
return;
|
|
221
|
+
// The "target" side for the preview curve mirrors the source so the curve
|
|
222
|
+
// pulls toward the cursor naturally even when the cursor is free-floating.
|
|
223
|
+
const tgtSide = oppositeSide(src.side);
|
|
224
|
+
const cpWorld = getBezierControlPoints(src.position, src.side, interaction.currentWorld, tgtSide);
|
|
225
|
+
const cpScreen = toScreenCp(cpWorld, p => info.worldToScreen(p));
|
|
226
|
+
ctx.strokeStyle = interaction.invalid
|
|
227
|
+
? theme.previewStrokeInvalid
|
|
228
|
+
: theme.previewStroke;
|
|
229
|
+
ctx.lineWidth = PREVIEW_STROKE_WIDTH;
|
|
230
|
+
ctx.lineCap = 'round';
|
|
231
|
+
ctx.setLineDash(interaction.invalid ? [6, 4] : []);
|
|
232
|
+
strokeBezier(ctx, cpScreen);
|
|
233
|
+
ctx.setLineDash([]);
|
|
234
|
+
// Endpoint marker at the cursor — small circle so the user sees the
|
|
235
|
+
// pointer-snap target.
|
|
236
|
+
const cursorScreen = info.worldToScreen(interaction.currentWorld);
|
|
237
|
+
ctx.beginPath();
|
|
238
|
+
ctx.arc(cursorScreen.x, cursorScreen.y, 4, 0, Math.PI * 2);
|
|
239
|
+
ctx.fillStyle = interaction.invalid
|
|
240
|
+
? theme.previewStrokeInvalid
|
|
241
|
+
: theme.previewStroke;
|
|
242
|
+
ctx.fill();
|
|
243
|
+
}
|
|
244
|
+
function oppositeSide(side) {
|
|
245
|
+
switch (side) {
|
|
246
|
+
case 'left':
|
|
247
|
+
return 'right';
|
|
248
|
+
case 'right':
|
|
249
|
+
return 'left';
|
|
250
|
+
case 'top':
|
|
251
|
+
return 'bottom';
|
|
252
|
+
case 'bottom':
|
|
253
|
+
return 'top';
|
|
254
|
+
default: {
|
|
255
|
+
const _unreached = side;
|
|
256
|
+
return _unreached;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
/** Resolved canvas-drawing theme assembled from the base theme + overrides. */
|
|
261
|
+
function buildDrawTheme(base) {
|
|
262
|
+
return {
|
|
263
|
+
...base,
|
|
264
|
+
edgeStroke: base.textMuted,
|
|
265
|
+
edgeStrokeSelected: base.accentPrimary,
|
|
266
|
+
edgeStrokeHovered: base.textSecondary,
|
|
267
|
+
previewStroke: base.accentPrimary,
|
|
268
|
+
previewStrokeInvalid: 'rgba(220, 38, 38, 0.9)',
|
|
269
|
+
groupFill: 'rgba(255, 255, 255, 0.03)',
|
|
270
|
+
groupFillSelected: 'rgba(255, 255, 255, 0.05)',
|
|
271
|
+
groupStroke: base.borderDefault,
|
|
272
|
+
groupLabel: base.textSecondary,
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Minimum on-screen distance (in CSS pixels) between adjacent dots / grid
|
|
277
|
+
* lines. When the base `gap × zoom` falls below this, the renderer drops
|
|
278
|
+
* down to a coarser LOD level (effective gap × 2, × 4, …) so the screen
|
|
279
|
+
* never carries more than `viewportArea / (TARGET_SCREEN_GAP²)` elements.
|
|
280
|
+
*
|
|
281
|
+
* Acts like a mip-map level for the background pattern — keeps perf
|
|
282
|
+
* constant under zoom-out instead of scaling quadratically with the world
|
|
283
|
+
* area exposed.
|
|
284
|
+
*/
|
|
285
|
+
const TARGET_SCREEN_GAP = 18;
|
|
286
|
+
/**
|
|
287
|
+
* Lower hard cutoff: when even the coarsest pattern would be denser than
|
|
288
|
+
* this on screen, skip the pattern entirely. Without this, an
|
|
289
|
+
* extreme-zoom-out (e.g. fitting a 100k-node graph in 800px) would still
|
|
290
|
+
* fire pattern-fill operations that the GPU can't sample meaningfully.
|
|
291
|
+
*/
|
|
292
|
+
const MIN_VISIBLE_SCREEN_GAP = 3;
|
|
293
|
+
/**
|
|
294
|
+
* Draw a uniform background pattern across the entire visible viewport.
|
|
295
|
+
* Used by `NodeGraph.Background`.
|
|
296
|
+
*
|
|
297
|
+
* Performance strategy:
|
|
298
|
+
*
|
|
299
|
+
* 1. **LOD** — when zoomed out the world gap is multiplied by the
|
|
300
|
+
* smallest power-of-two that keeps the on-screen spacing ≥
|
|
301
|
+
* `TARGET_SCREEN_GAP`. The number of dots/lines drawn per frame is
|
|
302
|
+
* therefore bounded by `viewportArea / TARGET_SCREEN_GAP²` regardless
|
|
303
|
+
* of how far the user zooms out.
|
|
304
|
+
* 2. **Pattern fill** — a single off-screen tile is built (one dot or
|
|
305
|
+
* one crosshair of lines) and used as `ctx.createPattern(…, 'repeat')`.
|
|
306
|
+
* A single `fillRect` covers the whole viewport, replacing what was
|
|
307
|
+
* previously O(n) `arc()`/`stroke()` calls. The pattern's origin is
|
|
308
|
+
* translated so the tile aligns with the world grid.
|
|
309
|
+
*/
|
|
310
|
+
function drawBackground(ctx, info, theme, options) {
|
|
311
|
+
const background = options.background ?? theme.backgroundSecondary;
|
|
312
|
+
ctx.fillStyle = background;
|
|
313
|
+
ctx.fillRect(0, 0, info.size.width, info.size.height);
|
|
314
|
+
if (options.variant === 'none' || options.gap <= 0)
|
|
315
|
+
return;
|
|
316
|
+
// Resolve the on-screen spacing the user-supplied world gap would yield
|
|
317
|
+
// at the current zoom, then step up the world gap in powers of two
|
|
318
|
+
// until each cell is at least TARGET_SCREEN_GAP pixels apart on screen.
|
|
319
|
+
const baseScreenGap = options.gap * info.transform.zoom;
|
|
320
|
+
if (baseScreenGap <= 0)
|
|
321
|
+
return;
|
|
322
|
+
let lodMultiplier = 1;
|
|
323
|
+
while (baseScreenGap * lodMultiplier < TARGET_SCREEN_GAP) {
|
|
324
|
+
lodMultiplier *= 2;
|
|
325
|
+
// Safety: cap LOD at a sensible upper bound so a pathological zoom
|
|
326
|
+
// (e.g. 1e-12) doesn't spin here forever.
|
|
327
|
+
if (lodMultiplier > 1 << 20)
|
|
328
|
+
break;
|
|
329
|
+
}
|
|
330
|
+
const screenGap = baseScreenGap * lodMultiplier;
|
|
331
|
+
if (screenGap < MIN_VISIBLE_SCREEN_GAP)
|
|
332
|
+
return;
|
|
333
|
+
const color = options.color ?? theme.borderDefault;
|
|
334
|
+
// World-space origin in screen pixels — the pattern's tile (0,0) must
|
|
335
|
+
// land here so the dots/lines line up with the world grid. Modulo by
|
|
336
|
+
// the tile size to keep the translation in `[0, tileSize)`.
|
|
337
|
+
const origin = info.worldToScreen({ x: 0, y: 0 });
|
|
338
|
+
const alignedTileSize = screenGap;
|
|
339
|
+
const offsetX = ((origin.x % alignedTileSize) + alignedTileSize) % alignedTileSize;
|
|
340
|
+
const offsetY = ((origin.y % alignedTileSize) + alignedTileSize) % alignedTileSize;
|
|
341
|
+
// Snap the world origin offset to keep dots crisply pixel-aligned at
|
|
342
|
+
// pan time. Sub-pixel pattern positions blur the rendered tile.
|
|
343
|
+
const tx = Math.round(offsetX);
|
|
344
|
+
const ty = Math.round(offsetY);
|
|
345
|
+
const tileSize = Math.max(1, Math.round(alignedTileSize));
|
|
346
|
+
if (options.variant === 'dots') {
|
|
347
|
+
const dotRadius = Math.max(0.75, Math.min(1.75, screenGap / 24));
|
|
348
|
+
const tile = getCachedTile(`dots:${tileSize}:${dotRadius}:${color}`, () => buildDotTile(alignedTileSize, dotRadius, color));
|
|
349
|
+
if (!tile)
|
|
350
|
+
return;
|
|
351
|
+
fillWithPattern(ctx, tile, info.size.width, info.size.height, tx, ty);
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
const tile = getCachedTile(`grid:${tileSize}:${color}`, () => buildGridTile(alignedTileSize, color));
|
|
355
|
+
if (!tile)
|
|
356
|
+
return;
|
|
357
|
+
ctx.globalAlpha = 0.6;
|
|
358
|
+
fillWithPattern(ctx, tile, info.size.width, info.size.height, tx, ty);
|
|
359
|
+
ctx.globalAlpha = 1;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
// Off-screen pattern tile cache. A pan keeps zoom (hence tile size, dot
|
|
363
|
+
// radius, and colour) constant, so without this every panned frame would
|
|
364
|
+
// allocate a fresh OffscreenCanvas and redraw the dot/grid. Keyed by every
|
|
365
|
+
// input that affects the rendered pixels; bounded with FIFO eviction so a
|
|
366
|
+
// continuous zoom (which varies the tile size per frame) can't grow it
|
|
367
|
+
// without limit. Colour is in the key, so a theme switch produces a new tile
|
|
368
|
+
// rather than a stale one.
|
|
369
|
+
const TILE_CACHE_LIMIT = 16;
|
|
370
|
+
const tileCache = new Map();
|
|
371
|
+
function getCachedTile(key, build) {
|
|
372
|
+
const cached = tileCache.get(key);
|
|
373
|
+
if (cached)
|
|
374
|
+
return cached;
|
|
375
|
+
const tile = build();
|
|
376
|
+
if (!tile)
|
|
377
|
+
return null;
|
|
378
|
+
tileCache.set(key, tile);
|
|
379
|
+
if (tileCache.size > TILE_CACHE_LIMIT) {
|
|
380
|
+
const oldest = tileCache.keys().next().value;
|
|
381
|
+
if (oldest !== undefined)
|
|
382
|
+
tileCache.delete(oldest);
|
|
383
|
+
}
|
|
384
|
+
return tile;
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Build a single-cell repeating tile with one dot centred inside it.
|
|
388
|
+
* Returns `null` when the environment has no `OffscreenCanvas`/`<canvas>`
|
|
389
|
+
* (e.g. some SSR test runners) so the caller can bail without throwing.
|
|
390
|
+
*/
|
|
391
|
+
function buildDotTile(tileSize, dotRadius, color) {
|
|
392
|
+
const c = createTileCanvas(tileSize);
|
|
393
|
+
if (!c)
|
|
394
|
+
return null;
|
|
395
|
+
const tctx = c.getContext('2d');
|
|
396
|
+
if (!tctx)
|
|
397
|
+
return null;
|
|
398
|
+
tctx.clearRect(0, 0, tileSize, tileSize);
|
|
399
|
+
tctx.fillStyle = color;
|
|
400
|
+
tctx.beginPath();
|
|
401
|
+
tctx.arc(tileSize / 2, tileSize / 2, dotRadius, 0, Math.PI * 2);
|
|
402
|
+
tctx.fill();
|
|
403
|
+
return c;
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Build a single-cell repeating tile carrying one vertical + one
|
|
407
|
+
* horizontal line at the right/bottom edge — when tiled this forms a
|
|
408
|
+
* full grid without overlap. Lines are at `tileSize - 0.5` so they fall
|
|
409
|
+
* on whole pixels after the integer-snapped `setTransform` below.
|
|
410
|
+
*/
|
|
411
|
+
function buildGridTile(tileSize, color) {
|
|
412
|
+
const c = createTileCanvas(tileSize);
|
|
413
|
+
if (!c)
|
|
414
|
+
return null;
|
|
415
|
+
const tctx = c.getContext('2d');
|
|
416
|
+
if (!tctx)
|
|
417
|
+
return null;
|
|
418
|
+
tctx.clearRect(0, 0, tileSize, tileSize);
|
|
419
|
+
tctx.strokeStyle = color;
|
|
420
|
+
tctx.lineWidth = 1;
|
|
421
|
+
// Right edge → vertical line; bottom edge → horizontal line.
|
|
422
|
+
tctx.beginPath();
|
|
423
|
+
tctx.moveTo(tileSize - 0.5, 0);
|
|
424
|
+
tctx.lineTo(tileSize - 0.5, tileSize);
|
|
425
|
+
tctx.moveTo(0, tileSize - 0.5);
|
|
426
|
+
tctx.lineTo(tileSize, tileSize - 0.5);
|
|
427
|
+
tctx.stroke();
|
|
428
|
+
return c;
|
|
429
|
+
}
|
|
430
|
+
function createTileCanvas(size) {
|
|
431
|
+
const rounded = Math.max(1, Math.round(size));
|
|
432
|
+
if (typeof OffscreenCanvas !== 'undefined') {
|
|
433
|
+
return new OffscreenCanvas(rounded, rounded);
|
|
434
|
+
}
|
|
435
|
+
if (typeof document === 'undefined')
|
|
436
|
+
return null;
|
|
437
|
+
const c = document.createElement('canvas');
|
|
438
|
+
c.width = rounded;
|
|
439
|
+
c.height = rounded;
|
|
440
|
+
return c;
|
|
441
|
+
}
|
|
442
|
+
/**
|
|
443
|
+
* Fill the entire viewport with a repeating pattern, translating the
|
|
444
|
+
* pattern origin to `(tx, ty)` so the tile aligns with the world grid.
|
|
445
|
+
* Single canvas call — independent of the number of dots/lines drawn.
|
|
446
|
+
*/
|
|
447
|
+
function fillWithPattern(ctx, tile, width, height, tx, ty) {
|
|
448
|
+
const pattern = ctx.createPattern(tile, 'repeat');
|
|
449
|
+
if (!pattern)
|
|
450
|
+
return;
|
|
451
|
+
ctx.save();
|
|
452
|
+
// Move the pattern origin so the first tile starts at (tx, ty) instead
|
|
453
|
+
// of (0, 0). The canvas tracks pattern origin via the current transform.
|
|
454
|
+
ctx.translate(tx, ty);
|
|
455
|
+
ctx.fillStyle = pattern;
|
|
456
|
+
ctx.fillRect(-tx, -ty, width, height);
|
|
457
|
+
ctx.restore();
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
export { bezierOutsideViewport, buildDrawTheme, drawBackground, drawConnectionPreview, drawEdges, drawGroups };
|
|
461
|
+
//# sourceMappingURL=nodeGraphDrawing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodeGraphDrawing.js","sources":["src/components/editor/NodeGraph/nodeGraphDrawing.ts"],"sourcesContent":["import {\n applyGroupResize,\n getBezierControlPoints,\n resolveEdgeEndpoints,\n} from './nodeGraphMath';\n\nimport type {\n NodeGraphEdgeStyleFn,\n NodeGraphPortRef,\n NodeGraphPortSide,\n NodeGraphSelection,\n} from './NodeGraph.types';\nimport type {\n BezierControlPoints,\n NodeLookup,\n PortPositionLookup,\n} from './nodeGraphMath';\nimport type {\n NodeGraphDataState,\n NodeGraphInteractionState,\n} from './NodeGraphStore';\nimport type {\n CanvasThemeColors,\n Point2D,\n} from '@/components/primitives/canvas/canvas.types';\nimport type { ViewportLayerDrawInfo } from '@/components/primitives/viewport';\n\nexport interface NodeGraphDrawTheme extends CanvasThemeColors {\n /** Colour of an unselected, non-hovered edge. */\n edgeStroke: string;\n /** Colour of a selected edge. */\n edgeStrokeSelected: string;\n /** Colour of the hovered edge. */\n edgeStrokeHovered: string;\n /** Colour of the in-flight connection preview. */\n previewStroke: string;\n /** Colour of an in-flight connection rejected by `isValidConnection`. */\n previewStrokeInvalid: string;\n /** Group backdrop fill. */\n groupFill: string;\n /** Group backdrop fill when selected. */\n groupFillSelected: string;\n /** Group outline colour. */\n groupStroke: string;\n /** Group label colour. */\n groupLabel: string;\n}\n\n/** Stroke widths in *screen* pixels — independent of zoom. */\nconst EDGE_STROKE_WIDTH = 1.5;\nconst EDGE_STROKE_WIDTH_SELECTED = 2.5;\nconst EDGE_STROKE_WIDTH_HOVERED = 2;\nconst PREVIEW_STROKE_WIDTH = 2;\nconst GROUP_STROKE_WIDTH = 1;\n\n/**\n * Stroke a cubic Bézier to the given context. The control points are in\n * screen coordinates (already transformed by the caller).\n */\nfunction strokeBezier(\n ctx: CanvasRenderingContext2D,\n cp: BezierControlPoints\n): void {\n ctx.beginPath();\n ctx.moveTo(cp.p0.x, cp.p0.y);\n ctx.bezierCurveTo(cp.c1.x, cp.c1.y, cp.c2.x, cp.c2.y, cp.p3.x, cp.p3.y);\n ctx.stroke();\n}\n\nfunction toScreenCp(\n cp: BezierControlPoints,\n worldToScreen: (p: Point2D) => Point2D\n): BezierControlPoints {\n return {\n p0: worldToScreen(cp.p0),\n c1: worldToScreen(cp.c1),\n c2: worldToScreen(cp.c2),\n p3: worldToScreen(cp.p3),\n };\n}\n\n/**\n * Margin (screen px) added around the viewport before culling an edge.\n * Covers the stroke half-width + round line-cap overshoot for the default\n * styles, plus headroom for moderately wider consumer `edgeStyle` widths.\n * A curve whose control-point bbox is more than this far outside the\n * viewport cannot paint a visible pixel inside it.\n */\nconst EDGE_CULL_MARGIN_PX = 32;\n\n/**\n * True when a cubic Bézier (given by its screen-space control points)\n * cannot intersect the viewport. The curve lies within the convex hull of\n * its control points, so an axis-aligned bbox of the four points is a\n * conservative bound — if that bbox is entirely past one viewport edge\n * (plus {@link EDGE_CULL_MARGIN_PX}), the curve is off-screen.\n */\nexport function bezierOutsideViewport(\n cp: BezierControlPoints,\n width: number,\n height: number\n): boolean {\n const minX = Math.min(cp.p0.x, cp.c1.x, cp.c2.x, cp.p3.x);\n if (minX > width + EDGE_CULL_MARGIN_PX) return true;\n const maxX = Math.max(cp.p0.x, cp.c1.x, cp.c2.x, cp.p3.x);\n if (maxX < -EDGE_CULL_MARGIN_PX) return true;\n const minY = Math.min(cp.p0.y, cp.c1.y, cp.c2.y, cp.p3.y);\n if (minY > height + EDGE_CULL_MARGIN_PX) return true;\n const maxY = Math.max(cp.p0.y, cp.c1.y, cp.c2.y, cp.p3.y);\n if (maxY < -EDGE_CULL_MARGIN_PX) return true;\n return false;\n}\n\n/** Draw all edges in the graph. */\nexport function drawEdges(\n ctx: CanvasRenderingContext2D,\n info: ViewportLayerDrawInfo,\n data: NodeGraphDataState,\n selection: NodeGraphSelection,\n hoveredEdgeId: string | null,\n interaction: NodeGraphInteractionState,\n getNodeById: NodeLookup,\n getPortPosition: PortPositionLookup,\n edgeStyle: NodeGraphEdgeStyleFn | undefined,\n theme: NodeGraphDrawTheme\n): void {\n // Either a node-drag (`drag-nodes`) or a group-drag carrying contained\n // nodes (`drag-groups.containedNodeIds`) shifts edge endpoints live —\n // resolve to a single (ids, delta) shape so the loop below stays simple.\n // The interaction state already exposes `nodeIds` / `containedNodeIds` as\n // ReadonlySet, so no per-frame Set construction is needed here.\n let dragSet: { ids: ReadonlySet<string>; delta: Point2D } | null = null;\n if (interaction.kind === 'drag-nodes') {\n dragSet = {\n ids: interaction.nodeIds,\n delta: interaction.delta,\n };\n } else if (interaction.kind === 'drag-groups') {\n dragSet = {\n ids: interaction.containedNodeIds,\n delta: interaction.delta,\n };\n }\n // While an endpoint is being re-dragged, hide the edge from this layer so\n // only the connection preview is shown (the wire \"detaches\" and follows\n // the cursor).\n const reconnectingId =\n interaction.kind === 'connect' ? interaction.reconnectEdgeId : undefined;\n // O(1) membership for the per-edge selected check below — this layer\n // redraws every frame during a drag, so a linear `selection.edges.includes`\n // per edge would be O(edges × selected) each frame.\n const selectedEdgeIds = new Set(selection.edges);\n for (const edge of data.edges) {\n if (edge.id === reconnectingId) continue;\n const endpoints = resolveEdgeEndpoints(edge, getNodeById, getPortPosition);\n if (!endpoints) continue;\n\n // Apply the in-flight drag delta so edges follow nodes 1:1 during a drag,\n // instead of snapping to the new position on pointerup.\n const source = dragSet?.ids.has(edge.source.node)\n ? {\n x: endpoints.source.x + dragSet.delta.x,\n y: endpoints.source.y + dragSet.delta.y,\n }\n : endpoints.source;\n const target = dragSet?.ids.has(edge.target.node)\n ? {\n x: endpoints.target.x + dragSet.delta.x,\n y: endpoints.target.y + dragSet.delta.y,\n }\n : endpoints.target;\n\n const cpWorld = getBezierControlPoints(\n source,\n endpoints.srcSide,\n target,\n endpoints.tgtSide\n );\n const cpScreen = toScreenCp(cpWorld, p => info.worldToScreen(p));\n\n // Frustum cull: a cubic Bézier is fully contained in the convex hull of\n // its four control points, so if the screen-space bbox of those points\n // lies entirely outside the viewport (plus a margin) the curve can't be\n // visible — skip the style callback + stroke entirely. This bounds the\n // per-frame edge cost by what's on screen rather than total edge count,\n // which is the dominant cost when zoomed in on a large graph.\n if (bezierOutsideViewport(cpScreen, info.size.width, info.size.height)) {\n continue;\n }\n\n const isSelected = selectedEdgeIds.has(edge.id);\n const isHovered = hoveredEdgeId === edge.id;\n\n // Resolve consumer override for this edge. Source/target ports\n // come from the store — `dataType` and `side` are already there,\n // no parallel index needed on the consumer side.\n const srcPos = getPortPosition(edge.source.node, edge.source.port);\n const tgtPos = getPortPosition(edge.target.node, edge.target.port);\n const customStyle = edgeStyle?.(edge, {\n selected: isSelected,\n hovered: isHovered,\n sourcePort: srcPos\n ? srcPos.dataType !== undefined\n ? { side: srcPos.side, dataType: srcPos.dataType }\n : { side: srcPos.side }\n : null,\n targetPort: tgtPos\n ? tgtPos.dataType !== undefined\n ? { side: tgtPos.side, dataType: tgtPos.dataType }\n : { side: tgtPos.side }\n : null,\n });\n\n // State-driven defaults; consumer overrides via `customStyle` take\n // precedence when they're not undefined. Selected / hovered still\n // win over a plain `edge.color` so the interaction state stays\n // visible — but consumer can override even that with `edgeStyle`.\n const defaultColor = isSelected\n ? theme.edgeStrokeSelected\n : isHovered\n ? theme.edgeStrokeHovered\n : (edge.color ?? theme.edgeStroke);\n const defaultWidth = isSelected\n ? EDGE_STROKE_WIDTH_SELECTED\n : isHovered\n ? EDGE_STROKE_WIDTH_HOVERED\n : EDGE_STROKE_WIDTH;\n\n ctx.strokeStyle = customStyle?.color ?? defaultColor;\n ctx.lineWidth = customStyle?.width ?? defaultWidth;\n ctx.lineCap = 'round';\n if (customStyle?.dash != null && customStyle.dash.length > 0) {\n ctx.setLineDash(customStyle.dash as number[]);\n } else {\n ctx.setLineDash([]);\n }\n\n strokeBezier(ctx, cpScreen);\n }\n // Reset shared state mutated above so subsequent layers (groups,\n // preview) don't inherit a stale dash pattern.\n ctx.setLineDash([]);\n}\n\n/** Draw group backdrops (under nodes, under edges). */\nexport function drawGroups(\n ctx: CanvasRenderingContext2D,\n info: ViewportLayerDrawInfo,\n data: NodeGraphDataState,\n selection: NodeGraphSelection,\n interaction: NodeGraphInteractionState,\n theme: NodeGraphDrawTheme\n): void {\n // Live drag / resize support — mirror what the HTML overlay shows so the\n // canvas backdrop stays glued to the user's cursor during gestures.\n const dragSet =\n interaction.kind === 'drag-groups'\n ? { ids: interaction.groupIds, delta: interaction.delta }\n : null;\n const resizing = interaction.kind === 'resize-group' ? interaction : null;\n const selectedGroupIds = new Set(selection.groups);\n\n for (const group of data.groups) {\n let bx = group.bounds.x;\n let by = group.bounds.y;\n let bw = group.bounds.width;\n let bh = group.bounds.height;\n if (dragSet?.ids.has(group.id)) {\n bx += dragSet.delta.x;\n by += dragSet.delta.y;\n } else if (resizing?.groupId === group.id) {\n const next = applyGroupResize(\n resizing.startBounds,\n resizing.handle,\n resizing.delta\n );\n bx = next.x;\n by = next.y;\n bw = next.width;\n bh = next.height;\n }\n\n const tl = info.worldToScreen({ x: bx, y: by });\n const br = info.worldToScreen({ x: bx + bw, y: by + bh });\n const width = br.x - tl.x;\n const height = br.y - tl.y;\n if (width <= 0 || height <= 0) continue;\n\n const isSelected = selectedGroupIds.has(group.id);\n\n ctx.fillStyle =\n group.color ?? (isSelected ? theme.groupFillSelected : theme.groupFill);\n ctx.fillRect(tl.x, tl.y, width, height);\n\n ctx.strokeStyle = group.color ?? theme.groupStroke;\n ctx.lineWidth = GROUP_STROKE_WIDTH;\n ctx.strokeRect(tl.x + 0.5, tl.y + 0.5, width - 1, height - 1);\n // The label is rendered by the HTML overlay (`NodeGraphGroupView`) so\n // it stays editable on click and scales with the world transform like\n // the rest of the group body. Canvas no longer paints it — avoids the\n // duplicate-title artefact where a screen-space canvas label and a\n // world-space HTML label drifted apart at non-1 zoom.\n }\n}\n\n/**\n * Draw the in-flight connection preview — a Bézier from the source port to\n * the current pointer position, styled to indicate validity.\n */\nexport function drawConnectionPreview(\n ctx: CanvasRenderingContext2D,\n info: ViewportLayerDrawInfo,\n interaction: NodeGraphInteractionState,\n resolveSourcePort: (\n ref: NodeGraphPortRef\n ) => { position: Point2D; side: NodeGraphPortSide } | null,\n theme: NodeGraphDrawTheme\n): void {\n if (interaction.kind !== 'connect') return;\n const src = resolveSourcePort(interaction.source);\n if (!src) return;\n\n // The \"target\" side for the preview curve mirrors the source so the curve\n // pulls toward the cursor naturally even when the cursor is free-floating.\n const tgtSide = oppositeSide(src.side);\n const cpWorld = getBezierControlPoints(\n src.position,\n src.side,\n interaction.currentWorld,\n tgtSide\n );\n const cpScreen = toScreenCp(cpWorld, p => info.worldToScreen(p));\n\n ctx.strokeStyle = interaction.invalid\n ? theme.previewStrokeInvalid\n : theme.previewStroke;\n ctx.lineWidth = PREVIEW_STROKE_WIDTH;\n ctx.lineCap = 'round';\n ctx.setLineDash(interaction.invalid ? [6, 4] : []);\n\n strokeBezier(ctx, cpScreen);\n\n ctx.setLineDash([]);\n\n // Endpoint marker at the cursor — small circle so the user sees the\n // pointer-snap target.\n const cursorScreen = info.worldToScreen(interaction.currentWorld);\n ctx.beginPath();\n ctx.arc(cursorScreen.x, cursorScreen.y, 4, 0, Math.PI * 2);\n ctx.fillStyle = interaction.invalid\n ? theme.previewStrokeInvalid\n : theme.previewStroke;\n ctx.fill();\n}\n\nfunction oppositeSide(side: NodeGraphPortSide): NodeGraphPortSide {\n switch (side) {\n case 'left':\n return 'right';\n case 'right':\n return 'left';\n case 'top':\n return 'bottom';\n case 'bottom':\n return 'top';\n default: {\n const _unreached: never = side;\n return _unreached;\n }\n }\n}\n\n/** Resolved canvas-drawing theme assembled from the base theme + overrides. */\nexport function buildDrawTheme(base: CanvasThemeColors): NodeGraphDrawTheme {\n return {\n ...base,\n edgeStroke: base.textMuted,\n edgeStrokeSelected: base.accentPrimary,\n edgeStrokeHovered: base.textSecondary,\n previewStroke: base.accentPrimary,\n previewStrokeInvalid: 'rgba(220, 38, 38, 0.9)',\n groupFill: 'rgba(255, 255, 255, 0.03)',\n groupFillSelected: 'rgba(255, 255, 255, 0.05)',\n groupStroke: base.borderDefault,\n groupLabel: base.textSecondary,\n };\n}\n\n// ─── Background pattern (dots / grid) ───\n\nexport interface BackgroundDrawOptions {\n variant: 'dots' | 'grid' | 'none';\n /** Grid spacing in world units. */\n gap: number;\n /** Override pattern colour (defaults to theme.borderDefault). */\n color?: string;\n /** Override background fill (defaults to theme.backgroundSecondary). */\n background?: string;\n}\n\n/**\n * Minimum on-screen distance (in CSS pixels) between adjacent dots / grid\n * lines. When the base `gap × zoom` falls below this, the renderer drops\n * down to a coarser LOD level (effective gap × 2, × 4, …) so the screen\n * never carries more than `viewportArea / (TARGET_SCREEN_GAP²)` elements.\n *\n * Acts like a mip-map level for the background pattern — keeps perf\n * constant under zoom-out instead of scaling quadratically with the world\n * area exposed.\n */\nconst TARGET_SCREEN_GAP = 18;\n\n/**\n * Lower hard cutoff: when even the coarsest pattern would be denser than\n * this on screen, skip the pattern entirely. Without this, an\n * extreme-zoom-out (e.g. fitting a 100k-node graph in 800px) would still\n * fire pattern-fill operations that the GPU can't sample meaningfully.\n */\nconst MIN_VISIBLE_SCREEN_GAP = 3;\n\n/**\n * Draw a uniform background pattern across the entire visible viewport.\n * Used by `NodeGraph.Background`.\n *\n * Performance strategy:\n *\n * 1. **LOD** — when zoomed out the world gap is multiplied by the\n * smallest power-of-two that keeps the on-screen spacing ≥\n * `TARGET_SCREEN_GAP`. The number of dots/lines drawn per frame is\n * therefore bounded by `viewportArea / TARGET_SCREEN_GAP²` regardless\n * of how far the user zooms out.\n * 2. **Pattern fill** — a single off-screen tile is built (one dot or\n * one crosshair of lines) and used as `ctx.createPattern(…, 'repeat')`.\n * A single `fillRect` covers the whole viewport, replacing what was\n * previously O(n) `arc()`/`stroke()` calls. The pattern's origin is\n * translated so the tile aligns with the world grid.\n */\nexport function drawBackground(\n ctx: CanvasRenderingContext2D,\n info: ViewportLayerDrawInfo,\n theme: NodeGraphDrawTheme,\n options: BackgroundDrawOptions\n): void {\n const background = options.background ?? theme.backgroundSecondary;\n ctx.fillStyle = background;\n ctx.fillRect(0, 0, info.size.width, info.size.height);\n\n if (options.variant === 'none' || options.gap <= 0) return;\n\n // Resolve the on-screen spacing the user-supplied world gap would yield\n // at the current zoom, then step up the world gap in powers of two\n // until each cell is at least TARGET_SCREEN_GAP pixels apart on screen.\n const baseScreenGap = options.gap * info.transform.zoom;\n if (baseScreenGap <= 0) return;\n let lodMultiplier = 1;\n while (baseScreenGap * lodMultiplier < TARGET_SCREEN_GAP) {\n lodMultiplier *= 2;\n // Safety: cap LOD at a sensible upper bound so a pathological zoom\n // (e.g. 1e-12) doesn't spin here forever.\n if (lodMultiplier > 1 << 20) break;\n }\n const screenGap = baseScreenGap * lodMultiplier;\n if (screenGap < MIN_VISIBLE_SCREEN_GAP) return;\n\n const color = options.color ?? theme.borderDefault;\n\n // World-space origin in screen pixels — the pattern's tile (0,0) must\n // land here so the dots/lines line up with the world grid. Modulo by\n // the tile size to keep the translation in `[0, tileSize)`.\n const origin = info.worldToScreen({ x: 0, y: 0 });\n const alignedTileSize = screenGap;\n const offsetX =\n ((origin.x % alignedTileSize) + alignedTileSize) % alignedTileSize;\n const offsetY =\n ((origin.y % alignedTileSize) + alignedTileSize) % alignedTileSize;\n\n // Snap the world origin offset to keep dots crisply pixel-aligned at\n // pan time. Sub-pixel pattern positions blur the rendered tile.\n const tx = Math.round(offsetX);\n const ty = Math.round(offsetY);\n\n const tileSize = Math.max(1, Math.round(alignedTileSize));\n if (options.variant === 'dots') {\n const dotRadius = Math.max(0.75, Math.min(1.75, screenGap / 24));\n const tile = getCachedTile(`dots:${tileSize}:${dotRadius}:${color}`, () =>\n buildDotTile(alignedTileSize, dotRadius, color)\n );\n if (!tile) return;\n fillWithPattern(ctx, tile, info.size.width, info.size.height, tx, ty);\n } else {\n const tile = getCachedTile(`grid:${tileSize}:${color}`, () =>\n buildGridTile(alignedTileSize, color)\n );\n if (!tile) return;\n ctx.globalAlpha = 0.6;\n fillWithPattern(ctx, tile, info.size.width, info.size.height, tx, ty);\n ctx.globalAlpha = 1;\n }\n}\n\n// Off-screen pattern tile cache. A pan keeps zoom (hence tile size, dot\n// radius, and colour) constant, so without this every panned frame would\n// allocate a fresh OffscreenCanvas and redraw the dot/grid. Keyed by every\n// input that affects the rendered pixels; bounded with FIFO eviction so a\n// continuous zoom (which varies the tile size per frame) can't grow it\n// without limit. Colour is in the key, so a theme switch produces a new tile\n// rather than a stale one.\nconst TILE_CACHE_LIMIT = 16;\nconst tileCache = new Map<string, HTMLCanvasElement | OffscreenCanvas>();\n\nfunction getCachedTile(\n key: string,\n build: () => HTMLCanvasElement | OffscreenCanvas | null\n): HTMLCanvasElement | OffscreenCanvas | null {\n const cached = tileCache.get(key);\n if (cached) return cached;\n const tile = build();\n if (!tile) return null;\n tileCache.set(key, tile);\n if (tileCache.size > TILE_CACHE_LIMIT) {\n const oldest = tileCache.keys().next().value;\n if (oldest !== undefined) tileCache.delete(oldest);\n }\n return tile;\n}\n\n/**\n * Build a single-cell repeating tile with one dot centred inside it.\n * Returns `null` when the environment has no `OffscreenCanvas`/`<canvas>`\n * (e.g. some SSR test runners) so the caller can bail without throwing.\n */\nfunction buildDotTile(\n tileSize: number,\n dotRadius: number,\n color: string\n): HTMLCanvasElement | OffscreenCanvas | null {\n const c = createTileCanvas(tileSize);\n if (!c) return null;\n const tctx = c.getContext('2d');\n if (!tctx) return null;\n tctx.clearRect(0, 0, tileSize, tileSize);\n tctx.fillStyle = color;\n tctx.beginPath();\n tctx.arc(tileSize / 2, tileSize / 2, dotRadius, 0, Math.PI * 2);\n tctx.fill();\n return c;\n}\n\n/**\n * Build a single-cell repeating tile carrying one vertical + one\n * horizontal line at the right/bottom edge — when tiled this forms a\n * full grid without overlap. Lines are at `tileSize - 0.5` so they fall\n * on whole pixels after the integer-snapped `setTransform` below.\n */\nfunction buildGridTile(\n tileSize: number,\n color: string\n): HTMLCanvasElement | OffscreenCanvas | null {\n const c = createTileCanvas(tileSize);\n if (!c) return null;\n const tctx = c.getContext('2d');\n if (!tctx) return null;\n tctx.clearRect(0, 0, tileSize, tileSize);\n tctx.strokeStyle = color;\n tctx.lineWidth = 1;\n // Right edge → vertical line; bottom edge → horizontal line.\n tctx.beginPath();\n tctx.moveTo(tileSize - 0.5, 0);\n tctx.lineTo(tileSize - 0.5, tileSize);\n tctx.moveTo(0, tileSize - 0.5);\n tctx.lineTo(tileSize, tileSize - 0.5);\n tctx.stroke();\n return c;\n}\n\nfunction createTileCanvas(\n size: number\n): HTMLCanvasElement | OffscreenCanvas | null {\n const rounded = Math.max(1, Math.round(size));\n if (typeof OffscreenCanvas !== 'undefined') {\n return new OffscreenCanvas(rounded, rounded);\n }\n if (typeof document === 'undefined') return null;\n const c = document.createElement('canvas');\n c.width = rounded;\n c.height = rounded;\n return c;\n}\n\n/**\n * Fill the entire viewport with a repeating pattern, translating the\n * pattern origin to `(tx, ty)` so the tile aligns with the world grid.\n * Single canvas call — independent of the number of dots/lines drawn.\n */\nfunction fillWithPattern(\n ctx: CanvasRenderingContext2D,\n tile: HTMLCanvasElement | OffscreenCanvas,\n width: number,\n height: number,\n tx: number,\n ty: number\n): void {\n const pattern = ctx.createPattern(tile, 'repeat');\n if (!pattern) return;\n ctx.save();\n // Move the pattern origin so the first tile starts at (tx, ty) instead\n // of (0, 0). The canvas tracks pattern origin via the current transform.\n ctx.translate(tx, ty);\n ctx.fillStyle = pattern;\n ctx.fillRect(-tx, -ty, width, height);\n ctx.restore();\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// Module-scoped monotonic counter — guarantees uniqueness within a single
|
|
2
|
+
// session even when `Date.now()` collides (tight bursts of connections,
|
|
3
|
+
// fake timers in tests). Combined with a short random tail it gives a
|
|
4
|
+
// near-zero collision risk without pulling in `crypto.randomUUID`, which
|
|
5
|
+
// isn't available in every browser / runtime the library targets.
|
|
6
|
+
let idCounter = 0;
|
|
7
|
+
function uniqueSuffix() {
|
|
8
|
+
const t = Date.now().toString(36);
|
|
9
|
+
const c = (idCounter++).toString(36);
|
|
10
|
+
const r = Math.random().toString(36).slice(2, 6);
|
|
11
|
+
return `${t}-${c}-${r}`;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Generate a unique-enough id for a freshly-spawned node from a template.
|
|
15
|
+
* Format: `${templateId}-${timestamp36}-${counter36}-${random36}`.
|
|
16
|
+
*/
|
|
17
|
+
function generateNodeId(templateId) {
|
|
18
|
+
return `${templateId}-${uniqueSuffix()}`;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Generate a unique edge id from its endpoints. Includes source/target
|
|
22
|
+
* port refs in the id so it's somewhat readable in devtools, plus the
|
|
23
|
+
* standard timestamp + counter + random tail to guarantee uniqueness
|
|
24
|
+
* across rapid back-to-back connections.
|
|
25
|
+
*/
|
|
26
|
+
function generateEdgeId(source, target) {
|
|
27
|
+
return `edge-${source.node}.${source.port}-${target.node}.${target.port}-${uniqueSuffix()}`;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export { generateEdgeId, generateNodeId };
|
|
31
|
+
//# sourceMappingURL=nodeGraphIds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodeGraphIds.js","sources":["src/components/editor/NodeGraph/nodeGraphIds.ts"],"sourcesContent":["import type { NodeGraphPortRef } from './NodeGraph.types';\n\n// Module-scoped monotonic counter — guarantees uniqueness within a single\n// session even when `Date.now()` collides (tight bursts of connections,\n// fake timers in tests). Combined with a short random tail it gives a\n// near-zero collision risk without pulling in `crypto.randomUUID`, which\n// isn't available in every browser / runtime the library targets.\nlet idCounter = 0;\n\nfunction uniqueSuffix(): string {\n const t = Date.now().toString(36);\n const c = (idCounter++).toString(36);\n const r = Math.random().toString(36).slice(2, 6);\n return `${t}-${c}-${r}`;\n}\n\n/**\n * Generate a unique-enough id for a freshly-spawned node from a template.\n * Format: `${templateId}-${timestamp36}-${counter36}-${random36}`.\n */\nexport function generateNodeId(templateId: string): string {\n return `${templateId}-${uniqueSuffix()}`;\n}\n\n/**\n * Generate a unique edge id from its endpoints. Includes source/target\n * port refs in the id so it's somewhat readable in devtools, plus the\n * standard timestamp + counter + random tail to guarantee uniqueness\n * across rapid back-to-back connections.\n */\nexport function generateEdgeId(\n source: NodeGraphPortRef,\n target: NodeGraphPortRef\n): string {\n return `edge-${source.node}.${source.port}-${target.node}.${target.port}-${uniqueSuffix()}`;\n}\n"],"names":[],"mappings":"AAEA;AACA;AACA;AACA;AACA;AACA,IAAI,SAAS,GAAG,CAAC;AAEjB,SAAS,YAAY,GAAA;IACnB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;IACjC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC;AACpC,IAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAChD,IAAA,OAAO,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,CAAC,EAAE;AACzB;AAEA;;;AAGG;AACG,SAAU,cAAc,CAAC,UAAkB,EAAA;AAC/C,IAAA,OAAO,GAAG,UAAU,CAAA,CAAA,EAAI,YAAY,EAAE,EAAE;AAC1C;AAEA;;;;;AAKG;AACG,SAAU,cAAc,CAC5B,MAAwB,EACxB,MAAwB,EAAA;IAExB,OAAO,CAAA,KAAA,EAAQ,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,IAAI,YAAY,EAAE,EAAE;AAC7F;;;;"}
|