entangle-ui 0.9.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +766 -0
- package/README.md +8 -6
- package/dist/esm/assets/src/components/controls/FileTree/FileTree.css.ts.vanilla-YmktPvnr.css +48 -0
- package/dist/esm/assets/src/components/controls/Select/{Select.css.ts.vanilla-oZnFUorL.css → Select.css.ts.vanilla-Cpu2BvWL.css} +3 -0
- package/dist/esm/assets/src/components/controls/TreeView/{TreeNode.css.ts.vanilla-B_f8pUb8.css → TreeNode.css.ts.vanilla-DXPJRWZZ.css} +31 -24
- package/dist/esm/assets/src/components/editor/AssetBrowser/AssetBrowser.css.ts.vanilla-B2S4cEiY.css +262 -0
- package/dist/esm/assets/src/components/editor/Minimap/Minimap.css.ts.vanilla--rNdWQwy.css +133 -0
- package/dist/esm/assets/src/components/editor/NodeGraph/NodeGraph.css.ts.vanilla-ClF4YZvl.css +401 -0
- package/dist/esm/assets/src/components/editor/PropertyInspector/{PropertyPanel.css.ts.vanilla-RYv_XgOu.css → PropertyPanel.css.ts.vanilla-Dpr_k5I3.css} +4 -1
- package/dist/esm/assets/src/components/editor/PropertyInspector/{PropertyRow.css.ts.vanilla-C3YZnnHb.css → PropertyRow.css.ts.vanilla-pq1Uhd2a.css} +15 -8
- package/dist/esm/assets/src/components/editor/PropertyInspector/{PropertySection.css.ts.vanilla-DK12opZc.css → PropertySection.css.ts.vanilla-6MWWAqyd.css} +50 -32
- package/dist/esm/assets/src/components/editor/Timeline/Timeline.css.ts.vanilla-DDX6Zalo.css +203 -0
- package/dist/esm/assets/src/components/feedback/LogView/LogView.css.ts.vanilla-nB5ENOpw.css +312 -0
- package/dist/esm/assets/src/components/navigation/Menu/Menu.css.ts.vanilla-B5iVe5S2.css +88 -0
- package/dist/esm/assets/src/components/navigation/PathBar/PathBar.css.ts.vanilla-BIEzQQOf.css +10 -0
- package/dist/esm/assets/src/components/primitives/viewport/Viewport.css.ts.vanilla-CkFBJ7Vo.css +65 -0
- package/dist/esm/assets/src/components/shell/FloatingPanel/{FloatingPanel.css.ts.vanilla-1rIAXEFp.css → FloatingPanel.css.ts.vanilla-CRaeYJ2b.css} +20 -13
- package/dist/esm/assets/src/theme/{darkTheme.css.ts.vanilla-ab1WD4dr.css → darkTheme.css.ts.vanilla-BHZ3ecRn.css} +3 -3
- package/dist/esm/assets/src/theme/{lightTheme.css.ts.vanilla-OaRI_wIc.css → lightTheme.css.ts.vanilla-Ct6f9Iym.css} +3 -3
- package/dist/esm/components/Icons/AddIcon.js.map +1 -1
- package/dist/esm/components/Icons/AiChatIcon.js.map +1 -1
- package/dist/esm/components/Icons/AiSparklesIcon.js.map +1 -1
- package/dist/esm/components/Icons/ArchiveIcon.js.map +1 -1
- package/dist/esm/components/Icons/ArrowDownIcon.js.map +1 -1
- package/dist/esm/components/Icons/ArrowLeftIcon.js.map +1 -1
- package/dist/esm/components/Icons/ArrowRightIcon.js.map +1 -1
- package/dist/esm/components/Icons/ArrowUpIcon.js.map +1 -1
- package/dist/esm/components/Icons/BookmarkIcon.js.map +1 -1
- package/dist/esm/components/Icons/BugIcon.js.map +1 -1
- package/dist/esm/components/Icons/BuildingIcon.js.map +1 -1
- package/dist/esm/components/Icons/CalendarIcon.js.map +1 -1
- package/dist/esm/components/Icons/CameraIcon.js +31 -0
- package/dist/esm/components/Icons/CameraIcon.js.map +1 -0
- package/dist/esm/components/Icons/CheckIcon.js.map +1 -1
- package/dist/esm/components/Icons/ChevronDownIcon.js.map +1 -1
- package/dist/esm/components/Icons/ChevronLeftIcon.js.map +1 -1
- package/dist/esm/components/Icons/ChevronRightIcon.js.map +1 -1
- package/dist/esm/components/Icons/ChevronUpIcon.js.map +1 -1
- package/dist/esm/components/Icons/CircleIcon.js.map +1 -1
- package/dist/esm/components/Icons/ClockIcon.js.map +1 -1
- package/dist/esm/components/Icons/CloseIcon.js.map +1 -1
- package/dist/esm/components/Icons/CloudUploadIcon.js.map +1 -1
- package/dist/esm/components/Icons/CodeIcon.js.map +1 -1
- package/dist/esm/components/Icons/CopyIcon.js.map +1 -1
- package/dist/esm/components/Icons/CubeIcon.js +31 -0
- package/dist/esm/components/Icons/CubeIcon.js.map +1 -0
- package/dist/esm/components/Icons/CutIcon.js.map +1 -1
- package/dist/esm/components/Icons/DotsHorizontalIcon.js.map +1 -1
- package/dist/esm/components/Icons/DotsVerticalIcon.js.map +1 -1
- package/dist/esm/components/Icons/DownloadIcon.js.map +1 -1
- package/dist/esm/components/Icons/EditIcon.js.map +1 -1
- package/dist/esm/components/Icons/ErrorIcon.js.map +1 -1
- package/dist/esm/components/Icons/ExternalLinkIcon.js.map +1 -1
- package/dist/esm/components/Icons/EyeDropperIcon.js.map +1 -1
- package/dist/esm/components/Icons/EyeIcon.js.map +1 -1
- package/dist/esm/components/Icons/FileTextIcon.js.map +1 -1
- package/dist/esm/components/Icons/FilterIcon.js.map +1 -1
- package/dist/esm/components/Icons/FirstIcon.js.map +1 -1
- package/dist/esm/components/Icons/FolderCogIcon.js.map +1 -1
- package/dist/esm/components/Icons/FolderIcon.js.map +1 -1
- package/dist/esm/components/Icons/FolderOpenIcon.js +2 -2
- package/dist/esm/components/Icons/FolderOpenIcon.js.map +1 -1
- package/dist/esm/components/Icons/FullscreenIcon.js.map +1 -1
- package/dist/esm/components/Icons/GitBranchIcon.js.map +1 -1
- package/dist/esm/components/Icons/GridIcon.js.map +1 -1
- package/dist/esm/components/Icons/HeartIcon.js.map +1 -1
- package/dist/esm/components/Icons/HelpIcon.js.map +1 -1
- package/dist/esm/components/Icons/HomeIcon.js.map +1 -1
- package/dist/esm/components/Icons/ImageIcon.js +31 -0
- package/dist/esm/components/Icons/ImageIcon.js.map +1 -0
- package/dist/esm/components/Icons/InfoIcon.js.map +1 -1
- package/dist/esm/components/Icons/LastIcon.js.map +1 -1
- package/dist/esm/components/Icons/LinkIcon.js.map +1 -1
- package/dist/esm/components/Icons/ListIcon.js.map +1 -1
- package/dist/esm/components/Icons/LockIcon.js.map +1 -1
- package/dist/esm/components/Icons/MaximizeIcon.js.map +1 -1
- package/dist/esm/components/Icons/MenuIcon.js.map +1 -1
- package/dist/esm/components/Icons/MinimizeIcon.js.map +1 -1
- package/dist/esm/components/Icons/MinusIcon.js.map +1 -1
- package/dist/esm/components/Icons/OrbitIcon.js +31 -0
- package/dist/esm/components/Icons/OrbitIcon.js.map +1 -0
- package/dist/esm/components/Icons/PasteIcon.js.map +1 -1
- package/dist/esm/components/Icons/PauseIcon.js +2 -2
- package/dist/esm/components/Icons/PauseIcon.js.map +1 -1
- package/dist/esm/components/Icons/PinIcon.js.map +1 -1
- package/dist/esm/components/Icons/PlayIcon.js.map +1 -1
- package/dist/esm/components/Icons/RedoIcon.js.map +1 -1
- package/dist/esm/components/Icons/RefreshIcon.js.map +1 -1
- package/dist/esm/components/Icons/RobotIcon.js.map +1 -1
- package/dist/esm/components/Icons/RotateIcon.js +32 -0
- package/dist/esm/components/Icons/RotateIcon.js.map +1 -0
- package/dist/esm/components/Icons/SaveIcon.js.map +1 -1
- package/dist/esm/components/Icons/SearchIcon.js.map +1 -1
- package/dist/esm/components/Icons/SendIcon.js.map +1 -1
- package/dist/esm/components/Icons/SettingsIcon.js.map +1 -1
- package/dist/esm/components/Icons/SortIcon.js.map +1 -1
- package/dist/esm/components/Icons/SpinIcon.js +32 -0
- package/dist/esm/components/Icons/SpinIcon.js.map +1 -0
- package/dist/esm/components/Icons/StarIcon.js.map +1 -1
- package/dist/esm/components/Icons/StopIcon.js.map +1 -1
- package/dist/esm/components/Icons/SuccessIcon.js.map +1 -1
- package/dist/esm/components/Icons/TagIcon.js.map +1 -1
- package/dist/esm/components/Icons/TangentAlignedIcon.js.map +1 -1
- package/dist/esm/components/Icons/TangentAutoIcon.js.map +1 -1
- package/dist/esm/components/Icons/TangentFreeIcon.js.map +1 -1
- package/dist/esm/components/Icons/TangentLinearIcon.js.map +1 -1
- package/dist/esm/components/Icons/TangentMirroredIcon.js.map +1 -1
- package/dist/esm/components/Icons/TangentStepIcon.js.map +1 -1
- package/dist/esm/components/Icons/TerminalIcon.js.map +1 -1
- package/dist/esm/components/Icons/TrashIcon.js.map +1 -1
- package/dist/esm/components/Icons/UndoIcon.js.map +1 -1
- package/dist/esm/components/Icons/UnlinkIcon.js.map +1 -1
- package/dist/esm/components/Icons/UnlockIcon.js.map +1 -1
- package/dist/esm/components/Icons/UploadIcon.js.map +1 -1
- package/dist/esm/components/Icons/UserIcon.js.map +1 -1
- package/dist/esm/components/Icons/UsersIcon.js.map +1 -1
- package/dist/esm/components/Icons/WarningIcon.js.map +1 -1
- package/dist/esm/components/Icons/ZoomFitIcon.js +32 -0
- package/dist/esm/components/Icons/ZoomFitIcon.js.map +1 -0
- package/dist/esm/components/Icons/ZoomInIcon.js.map +1 -1
- package/dist/esm/components/Icons/ZoomOutIcon.js.map +1 -1
- package/dist/esm/components/controls/CartesianPicker/CartesianPicker.js +3 -3
- package/dist/esm/components/controls/CartesianPicker/CartesianPicker.js.map +1 -1
- package/dist/esm/components/controls/CartesianPicker/useCartesianInteraction.js +7 -5
- package/dist/esm/components/controls/CartesianPicker/useCartesianInteraction.js.map +1 -1
- package/dist/esm/components/controls/CartesianPicker/useCartesianRenderer.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/AlphaSlider.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/ColorArea.js +2 -2
- package/dist/esm/components/controls/ColorPicker/ColorArea.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/ColorInputs.js +16 -2
- package/dist/esm/components/controls/ColorPicker/ColorInputs.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/ColorPalette.js +3 -1
- package/dist/esm/components/controls/ColorPicker/ColorPalette.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/ColorPicker.js +6 -6
- package/dist/esm/components/controls/ColorPicker/ColorPicker.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/ColorPresets.js +3 -1
- package/dist/esm/components/controls/ColorPicker/ColorPresets.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/ColorSwatch.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/EyeDropper.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/HueSlider.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/colorUtils.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/palettes/material.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/palettes/professional.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/palettes/tailwind.js.map +1 -1
- package/dist/esm/components/controls/ColorPicker/useColor.js.map +1 -1
- package/dist/esm/components/controls/Combobox/Combobox.js +46 -23
- package/dist/esm/components/controls/Combobox/Combobox.js.map +1 -1
- package/dist/esm/components/controls/CurveEditor/CurveCanvas.js +11 -4
- package/dist/esm/components/controls/CurveEditor/CurveCanvas.js.map +1 -1
- package/dist/esm/components/controls/CurveEditor/CurveEditor.js +4 -4
- package/dist/esm/components/controls/CurveEditor/CurveEditor.js.map +1 -1
- package/dist/esm/components/controls/CurveEditor/CurveToolbar.js +7 -5
- package/dist/esm/components/controls/CurveEditor/CurveToolbar.js.map +1 -1
- package/dist/esm/components/controls/CurveEditor/curvePresets.js.map +1 -1
- package/dist/esm/components/controls/CurveEditor/curveUtils.js +13 -15
- package/dist/esm/components/controls/CurveEditor/curveUtils.js.map +1 -1
- package/dist/esm/components/controls/CurveEditor/useCurveInteraction.js +72 -50
- package/dist/esm/components/controls/CurveEditor/useCurveInteraction.js.map +1 -1
- package/dist/esm/components/controls/CurveEditor/useCurveRenderer.js +11 -3
- package/dist/esm/components/controls/CurveEditor/useCurveRenderer.js.map +1 -1
- package/dist/esm/components/controls/FileTree/FileTree.css.js +9 -0
- package/dist/esm/components/controls/FileTree/FileTree.css.js.map +1 -0
- package/dist/esm/components/controls/FileTree/FileTree.js +252 -0
- package/dist/esm/components/controls/FileTree/FileTree.js.map +1 -0
- package/dist/esm/components/controls/FileTree/fileTreeIcons.js +129 -0
- package/dist/esm/components/controls/FileTree/fileTreeIcons.js.map +1 -0
- package/dist/esm/components/controls/FileTree/fileTreeLabels.js +8 -0
- package/dist/esm/components/controls/FileTree/fileTreeLabels.js.map +1 -0
- package/dist/esm/components/controls/FileTree/useFileTreeDrop.js +115 -0
- package/dist/esm/components/controls/FileTree/useFileTreeDrop.js.map +1 -0
- package/dist/esm/components/controls/FileUploader/FileUploader.js +3 -6
- package/dist/esm/components/controls/FileUploader/FileUploader.js.map +1 -1
- package/dist/esm/components/controls/MultiSelect/MultiSelect.js +46 -15
- package/dist/esm/components/controls/MultiSelect/MultiSelect.js.map +1 -1
- package/dist/esm/components/controls/NumberInput/NumberInput.js +11 -4
- package/dist/esm/components/controls/NumberInput/NumberInput.js.map +1 -1
- package/dist/esm/components/controls/NumberInput/useNumberInput.js +6 -2
- package/dist/esm/components/controls/NumberInput/useNumberInput.js.map +1 -1
- package/dist/esm/components/controls/Select/Select.css.js +1 -1
- package/dist/esm/components/controls/Select/Select.js +44 -16
- package/dist/esm/components/controls/Select/Select.js.map +1 -1
- package/dist/esm/components/controls/Slider/Slider.js +6 -8
- package/dist/esm/components/controls/Slider/Slider.js.map +1 -1
- package/dist/esm/components/controls/TagInput/TagInput.js +4 -2
- package/dist/esm/components/controls/TagInput/TagInput.js.map +1 -1
- package/dist/esm/components/controls/TreeView/TreeNode.css.js +9 -8
- package/dist/esm/components/controls/TreeView/TreeNode.css.js.map +1 -1
- package/dist/esm/components/controls/TreeView/TreeNode.js +42 -7
- package/dist/esm/components/controls/TreeView/TreeNode.js.map +1 -1
- package/dist/esm/components/controls/TreeView/TreeView.js +18 -6
- package/dist/esm/components/controls/TreeView/TreeView.js.map +1 -1
- package/dist/esm/components/controls/TreeView/useTreeState.js +2 -6
- package/dist/esm/components/controls/TreeView/useTreeState.js.map +1 -1
- package/dist/esm/components/controls/VectorInput/VectorInput.js +13 -4
- package/dist/esm/components/controls/VectorInput/VectorInput.js.map +1 -1
- package/dist/esm/components/data/DataTable/DataTable.js +25 -8
- package/dist/esm/components/data/DataTable/DataTable.js.map +1 -1
- package/dist/esm/components/editor/AssetBrowser/AssetBrowser.css.js +46 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowser.css.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowser.js +254 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowser.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserAnnouncementLive.js +17 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserAnnouncementLive.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserBreadcrumbs.js +25 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserBreadcrumbs.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserContent.js +140 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserContent.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserContext.js +81 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserContext.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserContextMenu.js +123 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserContextMenu.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserDefaultMenus.js +136 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserDefaultMenus.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserGrid.js +137 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserGrid.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserGridItem.js +226 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserGridItem.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserList.js +189 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserList.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserRenameField.js +63 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserRenameField.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserSidebar.js +19 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserSidebar.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserStatusBar.js +24 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserStatusBar.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserStore.js +176 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserStore.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserSurface.js +120 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserSurface.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserToolbar.js +134 -0
- package/dist/esm/components/editor/AssetBrowser/AssetBrowserToolbar.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/assetBrowserFilter.js +90 -0
- package/dist/esm/components/editor/AssetBrowser/assetBrowserFilter.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/assetBrowserFormat.js +32 -0
- package/dist/esm/components/editor/AssetBrowser/assetBrowserFormat.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/assetBrowserGeometry.js +70 -0
- package/dist/esm/components/editor/AssetBrowser/assetBrowserGeometry.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/assetBrowserKeyboard.js +62 -0
- package/dist/esm/components/editor/AssetBrowser/assetBrowserKeyboard.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/assetBrowserLabels.js +52 -0
- package/dist/esm/components/editor/AssetBrowser/assetBrowserLabels.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/slots.js +18 -0
- package/dist/esm/components/editor/AssetBrowser/slots.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetBrowserAnnouncement.js +19 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetBrowserAnnouncement.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetBrowserHandle.js +70 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetBrowserHandle.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetBrowserViewState.js +108 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetBrowserViewState.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetDnd.js +192 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetDnd.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetGridKeyboardNav.js +91 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetGridKeyboardNav.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetGridVirtualizer.js +91 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetGridVirtualizer.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetMarqueeGesture.js +128 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetMarqueeGesture.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetMutationKeyboard.js +72 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetMutationKeyboard.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetMutations.js +141 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetMutations.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetNavigation.js +113 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetNavigation.js.map +1 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetSelectionController.js +174 -0
- package/dist/esm/components/editor/AssetBrowser/useAssetSelectionController.js.map +1 -0
- package/dist/esm/components/editor/ChatPanel/ChatActionBar.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatAttachment.js +8 -2
- package/dist/esm/components/editor/ChatPanel/ChatAttachment.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatBubble.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatCodeBlock.js +20 -4
- package/dist/esm/components/editor/ChatPanel/ChatCodeBlock.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatContextChip.js +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatContextChip.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatEmptyState.js +3 -1
- package/dist/esm/components/editor/ChatPanel/ChatEmptyState.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatIcons.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatInput.js +10 -3
- package/dist/esm/components/editor/ChatPanel/ChatInput.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatInputToolbar.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatMarkdownRenderer.js +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatMarkdownRenderer.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatMessage.js +10 -3
- package/dist/esm/components/editor/ChatPanel/ChatMessage.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatMessageList.js +5 -3
- package/dist/esm/components/editor/ChatPanel/ChatMessageList.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatPanel.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatToolCall.js +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatToolCall.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatTypingIndicator.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/useChatInput.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/useChatMessages.js +7 -4
- package/dist/esm/components/editor/ChatPanel/useChatMessages.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/useChatScroll.js +6 -1
- package/dist/esm/components/editor/ChatPanel/useChatScroll.js.map +1 -1
- package/dist/esm/components/editor/Minimap/Minimap.css.js +18 -0
- package/dist/esm/components/editor/Minimap/Minimap.css.js.map +1 -0
- package/dist/esm/components/editor/Minimap/Minimap.js +257 -0
- package/dist/esm/components/editor/Minimap/Minimap.js.map +1 -0
- package/dist/esm/components/editor/Minimap/Minimap.types.js +11 -0
- package/dist/esm/components/editor/Minimap/Minimap.types.js.map +1 -0
- package/dist/esm/components/editor/Minimap/MinimapContext.js +48 -0
- package/dist/esm/components/editor/Minimap/MinimapContext.js.map +1 -0
- package/dist/esm/components/editor/Minimap/MinimapCorner.js +16 -0
- package/dist/esm/components/editor/Minimap/MinimapCorner.js.map +1 -0
- package/dist/esm/components/editor/Minimap/MinimapFooter.js +16 -0
- package/dist/esm/components/editor/Minimap/MinimapFooter.js.map +1 -0
- package/dist/esm/components/editor/Minimap/MinimapStore.js +166 -0
- package/dist/esm/components/editor/Minimap/MinimapStore.js.map +1 -0
- package/dist/esm/components/editor/Minimap/MinimapTitle.js +16 -0
- package/dist/esm/components/editor/Minimap/MinimapTitle.js.map +1 -0
- package/dist/esm/components/editor/Minimap/ViewportMinimap.js +69 -0
- package/dist/esm/components/editor/Minimap/ViewportMinimap.js.map +1 -0
- package/dist/esm/components/editor/Minimap/computeBoundsFromItems.js +65 -0
- package/dist/esm/components/editor/Minimap/computeBoundsFromItems.js.map +1 -0
- package/dist/esm/components/editor/Minimap/index.js +15 -0
- package/dist/esm/components/editor/Minimap/index.js.map +1 -0
- package/dist/esm/components/editor/Minimap/minimapCoords.js +105 -0
- package/dist/esm/components/editor/Minimap/minimapCoords.js.map +1 -0
- package/dist/esm/components/editor/Minimap/minimapDrawing.js +93 -0
- package/dist/esm/components/editor/Minimap/minimapDrawing.js.map +1 -0
- package/dist/esm/components/editor/Minimap/minimapHitTest.js +59 -0
- package/dist/esm/components/editor/Minimap/minimapHitTest.js.map +1 -0
- package/dist/esm/components/editor/Minimap/useMinimapGestures.js +299 -0
- package/dist/esm/components/editor/Minimap/useMinimapGestures.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraph.css.js +36 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraph.css.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraph.js +627 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraph.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraph.types.js +10 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraph.types.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphContext.js +54 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphContext.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphEdgeLabels.js +137 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphEdgeLabels.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphGroup.js +211 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphGroup.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphMinimap.js +122 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphMinimap.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphNode.js +170 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphNode.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphNodeContext.js +21 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphNodeContext.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphNodeParts.js +56 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphNodeParts.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphNodeSection.js +59 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphNodeSection.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphNodeSectionContext.js +17 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphNodeSectionContext.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphPin.js +35 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphPin.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphPort.js +191 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphPort.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphPortVisual.js +46 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphPortVisual.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphSlots.js +50 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphSlots.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphSpawnPalette.js +70 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphSpawnPalette.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphStore.js +543 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphStore.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphToolbar.js +100 -0
- package/dist/esm/components/editor/NodeGraph/NodeGraphToolbar.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/createTypeMatchValidator.js +37 -0
- package/dist/esm/components/editor/NodeGraph/createTypeMatchValidator.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/nodeGraphActions.js +53 -0
- package/dist/esm/components/editor/NodeGraph/nodeGraphActions.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/nodeGraphDrawing.js +461 -0
- package/dist/esm/components/editor/NodeGraph/nodeGraphDrawing.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/nodeGraphIds.js +31 -0
- package/dist/esm/components/editor/NodeGraph/nodeGraphIds.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/nodeGraphMath.js +350 -0
- package/dist/esm/components/editor/NodeGraph/nodeGraphMath.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/sortSlots.js +69 -0
- package/dist/esm/components/editor/NodeGraph/sortSlots.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/useDragGesture.js +63 -0
- package/dist/esm/components/editor/NodeGraph/useDragGesture.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraph.js +207 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraph.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraphConnection.js +334 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraphConnection.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraphEdgeInteraction.js +137 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraphEdgeInteraction.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraphGroupDrag.js +392 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraphGroupDrag.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraphKeyboard.js +164 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraphKeyboard.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraphNodeDrag.js +234 -0
- package/dist/esm/components/editor/NodeGraph/useNodeGraphNodeDrag.js.map +1 -0
- package/dist/esm/components/editor/NodeGraph/useStoreSlice.js +49 -0
- package/dist/esm/components/editor/NodeGraph/useStoreSlice.js.map +1 -0
- package/dist/esm/components/editor/PropertyInspector/PropertyGroup.js +1 -1
- package/dist/esm/components/editor/PropertyInspector/PropertyGroup.js.map +1 -1
- package/dist/esm/components/editor/PropertyInspector/PropertyPanel.css.js +4 -3
- package/dist/esm/components/editor/PropertyInspector/PropertyPanel.css.js.map +1 -1
- package/dist/esm/components/editor/PropertyInspector/PropertyPanel.js +12 -7
- package/dist/esm/components/editor/PropertyInspector/PropertyPanel.js.map +1 -1
- package/dist/esm/components/editor/PropertyInspector/PropertyRow.css.js +7 -6
- package/dist/esm/components/editor/PropertyInspector/PropertyRow.css.js.map +1 -1
- package/dist/esm/components/editor/PropertyInspector/PropertyRow.js +21 -5
- package/dist/esm/components/editor/PropertyInspector/PropertyRow.js.map +1 -1
- package/dist/esm/components/editor/PropertyInspector/PropertySection.css.js +11 -10
- package/dist/esm/components/editor/PropertyInspector/PropertySection.css.js.map +1 -1
- package/dist/esm/components/editor/PropertyInspector/PropertySection.js +32 -11
- package/dist/esm/components/editor/PropertyInspector/PropertySection.js.map +1 -1
- package/dist/esm/components/editor/PropertyInspector/usePropertyUndo.js.map +1 -1
- package/dist/esm/components/editor/Timeline/Timeline.css.js +23 -0
- package/dist/esm/components/editor/Timeline/Timeline.css.js.map +1 -0
- package/dist/esm/components/editor/Timeline/Timeline.js +450 -0
- package/dist/esm/components/editor/Timeline/Timeline.js.map +1 -0
- package/dist/esm/components/editor/Timeline/Timeline.types.js +10 -0
- package/dist/esm/components/editor/Timeline/Timeline.types.js.map +1 -0
- package/dist/esm/components/editor/Timeline/TimelineContext.js +69 -0
- package/dist/esm/components/editor/Timeline/TimelineContext.js.map +1 -0
- package/dist/esm/components/editor/Timeline/TimelineFooter.js +16 -0
- package/dist/esm/components/editor/Timeline/TimelineFooter.js.map +1 -0
- package/dist/esm/components/editor/Timeline/TimelineMinimap.js +280 -0
- package/dist/esm/components/editor/Timeline/TimelineMinimap.js.map +1 -0
- package/dist/esm/components/editor/Timeline/TimelineStore.js +289 -0
- package/dist/esm/components/editor/Timeline/TimelineStore.js.map +1 -0
- package/dist/esm/components/editor/Timeline/TimelineToolbar.js +15 -0
- package/dist/esm/components/editor/Timeline/TimelineToolbar.js.map +1 -0
- package/dist/esm/components/editor/Timeline/TimelineTrackHeaders.js +142 -0
- package/dist/esm/components/editor/Timeline/TimelineTrackHeaders.js.map +1 -0
- package/dist/esm/components/editor/Timeline/TimelineTrackScale.js +18 -0
- package/dist/esm/components/editor/Timeline/TimelineTrackScale.js.map +1 -0
- package/dist/esm/components/editor/Timeline/index.js +18 -0
- package/dist/esm/components/editor/Timeline/index.js.map +1 -0
- package/dist/esm/components/editor/Timeline/timelineCoords.js +118 -0
- package/dist/esm/components/editor/Timeline/timelineCoords.js.map +1 -0
- package/dist/esm/components/editor/Timeline/timelineDrawing.js +390 -0
- package/dist/esm/components/editor/Timeline/timelineDrawing.js.map +1 -0
- package/dist/esm/components/editor/Timeline/timelineEdits.js +323 -0
- package/dist/esm/components/editor/Timeline/timelineEdits.js.map +1 -0
- package/dist/esm/components/editor/Timeline/timelineHitTest.js +153 -0
- package/dist/esm/components/editor/Timeline/timelineHitTest.js.map +1 -0
- package/dist/esm/components/editor/Timeline/timelineLayout.js +39 -0
- package/dist/esm/components/editor/Timeline/timelineLayout.js.map +1 -0
- package/dist/esm/components/editor/Timeline/timelineSelection.js +0 -0
- package/dist/esm/components/editor/Timeline/timelineSelection.js.map +1 -0
- package/dist/esm/components/editor/Timeline/useTimelineDraw.js +156 -0
- package/dist/esm/components/editor/Timeline/useTimelineDraw.js.map +1 -0
- package/dist/esm/components/editor/Timeline/useTimelineGestures.js +587 -0
- package/dist/esm/components/editor/Timeline/useTimelineGestures.js.map +1 -0
- package/dist/esm/components/editor/Timeline/useTimelinePlayback.js +85 -0
- package/dist/esm/components/editor/Timeline/useTimelinePlayback.js.map +1 -0
- package/dist/esm/components/editor/TransformControl/TransformControl.js +4 -4
- package/dist/esm/components/editor/TransformControl/TransformControl.js.map +1 -1
- package/dist/esm/components/editor/ViewportGizmo/ViewportGizmo.js +8 -4
- package/dist/esm/components/editor/ViewportGizmo/ViewportGizmo.js.map +1 -1
- package/dist/esm/components/editor/ViewportGizmo/gizmoMath.js +6 -2
- package/dist/esm/components/editor/ViewportGizmo/gizmoMath.js.map +1 -1
- package/dist/esm/components/editor/ViewportGizmo/useGizmoInteraction.js +8 -6
- package/dist/esm/components/editor/ViewportGizmo/useGizmoInteraction.js.map +1 -1
- package/dist/esm/components/editor/ViewportGizmo/useGizmoRenderer.js +1 -2
- package/dist/esm/components/editor/ViewportGizmo/useGizmoRenderer.js.map +1 -1
- package/dist/esm/components/feedback/Alert/Alert.js +8 -8
- package/dist/esm/components/feedback/Alert/Alert.js.map +1 -1
- package/dist/esm/components/feedback/Alert/AlertActions.js.map +1 -1
- package/dist/esm/components/feedback/Alert/AlertDescription.js.map +1 -1
- package/dist/esm/components/feedback/Alert/AlertTitle.js.map +1 -1
- package/dist/esm/components/feedback/CommandPalette/CommandPalette.js +32 -22
- package/dist/esm/components/feedback/CommandPalette/CommandPalette.js.map +1 -1
- package/dist/esm/components/feedback/CommandPalette/fuzzySearch.js.map +1 -1
- package/dist/esm/components/feedback/CommandPalette/useRecentItems.js +3 -1
- package/dist/esm/components/feedback/CommandPalette/useRecentItems.js.map +1 -1
- package/dist/esm/components/feedback/Dialog/Dialog.js +6 -3
- package/dist/esm/components/feedback/Dialog/Dialog.js.map +1 -1
- package/dist/esm/components/feedback/Dialog/DialogBody.js.map +1 -1
- package/dist/esm/components/feedback/Dialog/DialogClose.js.map +1 -1
- package/dist/esm/components/feedback/Dialog/DialogFooter.js.map +1 -1
- package/dist/esm/components/feedback/Dialog/DialogHeader.js +1 -1
- package/dist/esm/components/feedback/Dialog/DialogHeader.js.map +1 -1
- package/dist/esm/components/feedback/Dialog/useDialogAnimation.js +10 -2
- package/dist/esm/components/feedback/Dialog/useDialogAnimation.js.map +1 -1
- package/dist/esm/components/feedback/Drawer/Drawer.js +4 -1
- package/dist/esm/components/feedback/Drawer/Drawer.js.map +1 -1
- package/dist/esm/components/feedback/Drawer/useDrawerAnimation.js +4 -0
- package/dist/esm/components/feedback/Drawer/useDrawerAnimation.js.map +1 -1
- package/dist/esm/components/feedback/EmptyState/EmptyState.js +1 -1
- package/dist/esm/components/feedback/EmptyState/EmptyState.js.map +1 -1
- package/dist/esm/components/feedback/LogView/LogView.css.js +35 -0
- package/dist/esm/components/feedback/LogView/LogView.css.js.map +1 -0
- package/dist/esm/components/feedback/LogView/LogView.js +297 -0
- package/dist/esm/components/feedback/LogView/LogView.js.map +1 -0
- package/dist/esm/components/feedback/LogView/LogViewBody.js +205 -0
- package/dist/esm/components/feedback/LogView/LogViewBody.js.map +1 -0
- package/dist/esm/components/feedback/LogView/LogViewContext.js +31 -0
- package/dist/esm/components/feedback/LogView/LogViewContext.js.map +1 -0
- package/dist/esm/components/feedback/LogView/LogViewParts.js +73 -0
- package/dist/esm/components/feedback/LogView/LogViewParts.js.map +1 -0
- package/dist/esm/components/feedback/LogView/LogViewStore.js +240 -0
- package/dist/esm/components/feedback/LogView/LogViewStore.js.map +1 -0
- package/dist/esm/components/feedback/LogView/logViewLabels.js +25 -0
- package/dist/esm/components/feedback/LogView/logViewLabels.js.map +1 -0
- package/dist/esm/components/feedback/LogView/logViewLevels.js +74 -0
- package/dist/esm/components/feedback/LogView/logViewLevels.js.map +1 -0
- package/dist/esm/components/feedback/LogView/logViewUtils.js +128 -0
- package/dist/esm/components/feedback/LogView/logViewUtils.js.map +1 -0
- package/dist/esm/components/feedback/LogView/useFollowTail.js +95 -0
- package/dist/esm/components/feedback/LogView/useFollowTail.js.map +1 -0
- package/dist/esm/components/feedback/LogView/useLogSelection.js +113 -0
- package/dist/esm/components/feedback/LogView/useLogSelection.js.map +1 -0
- package/dist/esm/components/feedback/ProgressBar/CircularProgress.js +1 -1
- package/dist/esm/components/feedback/ProgressBar/CircularProgress.js.map +1 -1
- package/dist/esm/components/feedback/ProgressBar/ProgressBar.js +1 -1
- package/dist/esm/components/feedback/ProgressBar/ProgressBar.js.map +1 -1
- package/dist/esm/components/feedback/Skeleton/Skeleton.js +1 -1
- package/dist/esm/components/feedback/Skeleton/Skeleton.js.map +1 -1
- package/dist/esm/components/feedback/Skeleton/SkeletonGroup.js +1 -1
- package/dist/esm/components/feedback/Skeleton/SkeletonGroup.js.map +1 -1
- package/dist/esm/components/feedback/Skeleton/SkeletonLayout.js +1 -1
- package/dist/esm/components/feedback/Skeleton/SkeletonLayout.js.map +1 -1
- package/dist/esm/components/feedback/Spinner/Spinner.js +1 -1
- package/dist/esm/components/feedback/Spinner/Spinner.js.map +1 -1
- package/dist/esm/components/feedback/Stat/Stat.js.map +1 -1
- package/dist/esm/components/feedback/Toast/ToastContainer.js +1 -1
- package/dist/esm/components/feedback/Toast/ToastContainer.js.map +1 -1
- package/dist/esm/components/feedback/Toast/ToastItem.js +7 -3
- package/dist/esm/components/feedback/Toast/ToastItem.js.map +1 -1
- package/dist/esm/components/feedback/Toast/ToastProvider.js.map +1 -1
- package/dist/esm/components/feedback/Toast/useToast.js.map +1 -1
- package/dist/esm/components/form/FormHelperText.js.map +1 -1
- package/dist/esm/components/form/FormLabel.js.map +1 -1
- package/dist/esm/components/form/InputWrapper.js.map +1 -1
- package/dist/esm/components/layout/Accordion/Accordion.js +1 -1
- package/dist/esm/components/layout/Accordion/Accordion.js.map +1 -1
- package/dist/esm/components/layout/Accordion/AccordionContent.js +1 -1
- package/dist/esm/components/layout/Accordion/AccordionContent.js.map +1 -1
- package/dist/esm/components/layout/Accordion/AccordionItem.js +1 -1
- package/dist/esm/components/layout/Accordion/AccordionItem.js.map +1 -1
- package/dist/esm/components/layout/Accordion/AccordionTrigger.js +7 -2
- package/dist/esm/components/layout/Accordion/AccordionTrigger.js.map +1 -1
- package/dist/esm/components/layout/Card/Card.js +2 -2
- package/dist/esm/components/layout/Card/Card.js.map +1 -1
- package/dist/esm/components/layout/Divider/Divider.js.map +1 -1
- package/dist/esm/components/layout/Flex/Flex.js +1 -1
- package/dist/esm/components/layout/Flex/Flex.js.map +1 -1
- package/dist/esm/components/layout/Grid/Grid.js +1 -1
- package/dist/esm/components/layout/Grid/Grid.js.map +1 -1
- package/dist/esm/components/layout/ListItem/ListItem.js +1 -1
- package/dist/esm/components/layout/ListItem/ListItem.js.map +1 -1
- package/dist/esm/components/layout/PageHeader/PageHeader.js.map +1 -1
- package/dist/esm/components/layout/PanelSurface/PanelSurface.js +3 -3
- package/dist/esm/components/layout/PanelSurface/PanelSurface.js.map +1 -1
- package/dist/esm/components/layout/ScrollArea/ScrollArea.js +91 -23
- package/dist/esm/components/layout/ScrollArea/ScrollArea.js.map +1 -1
- package/dist/esm/components/layout/Spacer/Spacer.js.map +1 -1
- package/dist/esm/components/layout/SplitPane/SplitPane.js +29 -16
- package/dist/esm/components/layout/SplitPane/SplitPane.js.map +1 -1
- package/dist/esm/components/layout/SplitPane/SplitPanePanel.js.map +1 -1
- package/dist/esm/components/layout/Stack/Stack.js +1 -1
- package/dist/esm/components/layout/Stack/Stack.js.map +1 -1
- package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbEllipsis.js +4 -0
- package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbEllipsis.js.map +1 -1
- package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbItem.js +6 -2
- package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbItem.js.map +1 -1
- package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbSeparator.js.map +1 -1
- package/dist/esm/components/navigation/Breadcrumbs/Breadcrumbs.js +13 -2
- package/dist/esm/components/navigation/Breadcrumbs/Breadcrumbs.js.map +1 -1
- package/dist/esm/components/navigation/ContextMenu/ContextMenu.js +45 -39
- package/dist/esm/components/navigation/ContextMenu/ContextMenu.js.map +1 -1
- package/dist/esm/components/navigation/Menu/Menu.css.js +9 -12
- package/dist/esm/components/navigation/Menu/Menu.css.js.map +1 -1
- package/dist/esm/components/navigation/Menu/Menu.js +97 -63
- package/dist/esm/components/navigation/Menu/Menu.js.map +1 -1
- package/dist/esm/components/navigation/Menu/MenuGapContext.js +19 -0
- package/dist/esm/components/navigation/Menu/MenuGapContext.js.map +1 -0
- package/dist/esm/components/navigation/Pagination/Pagination.js.map +1 -1
- package/dist/esm/components/navigation/Pagination/usePagination.js.map +1 -1
- package/dist/esm/components/navigation/PathBar/PathBar.css.js +6 -0
- package/dist/esm/components/navigation/PathBar/PathBar.css.js.map +1 -0
- package/dist/esm/components/navigation/PathBar/PathBar.js +184 -0
- package/dist/esm/components/navigation/PathBar/PathBar.js.map +1 -0
- package/dist/esm/components/navigation/PathBar/PathBarSiblingMenu.js +151 -0
- package/dist/esm/components/navigation/PathBar/PathBarSiblingMenu.js.map +1 -0
- package/dist/esm/components/navigation/PathBar/pathUtils.js +118 -0
- package/dist/esm/components/navigation/PathBar/pathUtils.js.map +1 -0
- package/dist/esm/components/navigation/SegmentedControl/SegmentedControl.js +16 -6
- package/dist/esm/components/navigation/SegmentedControl/SegmentedControl.js.map +1 -1
- package/dist/esm/components/navigation/SegmentedControl/SegmentedControlItem.js +1 -1
- package/dist/esm/components/navigation/SegmentedControl/SegmentedControlItem.js.map +1 -1
- package/dist/esm/components/navigation/Tabs/Tab.js +10 -3
- package/dist/esm/components/navigation/Tabs/Tab.js.map +1 -1
- package/dist/esm/components/navigation/Tabs/TabList.js +5 -2
- package/dist/esm/components/navigation/Tabs/TabList.js.map +1 -1
- package/dist/esm/components/navigation/Tabs/TabPanel.js +1 -1
- package/dist/esm/components/navigation/Tabs/TabPanel.js.map +1 -1
- package/dist/esm/components/navigation/Tabs/Tabs.js.map +1 -1
- package/dist/esm/components/primitives/Avatar/Avatar.js +11 -4
- package/dist/esm/components/primitives/Avatar/Avatar.js.map +1 -1
- package/dist/esm/components/primitives/Avatar/AvatarGroup.js +2 -2
- package/dist/esm/components/primitives/Avatar/AvatarGroup.js.map +1 -1
- package/dist/esm/components/primitives/Badge/Badge.js +10 -3
- package/dist/esm/components/primitives/Badge/Badge.js.map +1 -1
- package/dist/esm/components/primitives/Button/Button.js.map +1 -1
- package/dist/esm/components/primitives/Checkbox/Checkbox.js +6 -4
- package/dist/esm/components/primitives/Checkbox/Checkbox.js.map +1 -1
- package/dist/esm/components/primitives/Checkbox/CheckboxGroup.js +2 -2
- package/dist/esm/components/primitives/Checkbox/CheckboxGroup.js.map +1 -1
- package/dist/esm/components/primitives/Code/Code.js.map +1 -1
- package/dist/esm/components/primitives/Collapsible/Collapsible.js +2 -2
- package/dist/esm/components/primitives/Collapsible/Collapsible.js.map +1 -1
- package/dist/esm/components/primitives/HoverCard/HoverCard.js +5 -3
- package/dist/esm/components/primitives/HoverCard/HoverCard.js.map +1 -1
- package/dist/esm/components/primitives/Icon/Icon.js +1 -1
- package/dist/esm/components/primitives/Icon/Icon.js.map +1 -1
- package/dist/esm/components/primitives/IconButton/IconButton.js.map +1 -1
- package/dist/esm/components/primitives/Input/Input.js +1 -1
- package/dist/esm/components/primitives/Input/Input.js.map +1 -1
- package/dist/esm/components/primitives/Kbd/Kbd.js +1 -1
- package/dist/esm/components/primitives/Kbd/Kbd.js.map +1 -1
- package/dist/esm/components/primitives/Link/Link.js.map +1 -1
- package/dist/esm/components/primitives/Paper/Paper.js.map +1 -1
- package/dist/esm/components/primitives/Popover/Popover.js +1 -1
- package/dist/esm/components/primitives/Popover/Popover.js.map +1 -1
- package/dist/esm/components/primitives/Popover/PopoverClose.js +1 -1
- package/dist/esm/components/primitives/Popover/PopoverClose.js.map +1 -1
- package/dist/esm/components/primitives/Popover/PopoverContent.js +6 -4
- package/dist/esm/components/primitives/Popover/PopoverContent.js.map +1 -1
- package/dist/esm/components/primitives/Popover/PopoverTrigger.js.map +1 -1
- package/dist/esm/components/primitives/Radio/Radio.js +3 -3
- package/dist/esm/components/primitives/Radio/Radio.js.map +1 -1
- package/dist/esm/components/primitives/Radio/RadioGroup.js +2 -2
- package/dist/esm/components/primitives/Radio/RadioGroup.js.map +1 -1
- package/dist/esm/components/primitives/Switch/Switch.js +1 -1
- package/dist/esm/components/primitives/Switch/Switch.js.map +1 -1
- package/dist/esm/components/primitives/Text/Text.js.map +1 -1
- package/dist/esm/components/primitives/TextArea/TextArea.js +3 -4
- package/dist/esm/components/primitives/TextArea/TextArea.js.map +1 -1
- package/dist/esm/components/primitives/Tooltip/Arrow.js +1 -1
- package/dist/esm/components/primitives/Tooltip/Arrow.js.map +1 -1
- package/dist/esm/components/primitives/Tooltip/Tooltip.js +9 -7
- package/dist/esm/components/primitives/Tooltip/Tooltip.js.map +1 -1
- package/dist/esm/components/primitives/Tooltip/utils.js +1 -1
- package/dist/esm/components/primitives/Tooltip/utils.js.map +1 -1
- package/dist/esm/components/primitives/VisuallyHidden/VisuallyHidden.js.map +1 -1
- package/dist/esm/components/primitives/canvas/CanvasContainer.js +1 -1
- package/dist/esm/components/primitives/canvas/CanvasContainer.js.map +1 -1
- package/dist/esm/components/primitives/canvas/canvasCoords.js.map +1 -1
- package/dist/esm/components/primitives/canvas/canvasDrawing.js +1 -1
- package/dist/esm/components/primitives/canvas/canvasDrawing.js.map +1 -1
- package/dist/esm/components/primitives/canvas/canvasTheme.js.map +1 -1
- package/dist/esm/components/primitives/canvas/useCanvasRenderer.js +8 -2
- package/dist/esm/components/primitives/canvas/useCanvasRenderer.js.map +1 -1
- package/dist/esm/components/primitives/viewport/Viewport.css.js +12 -0
- package/dist/esm/components/primitives/viewport/Viewport.css.js.map +1 -0
- package/dist/esm/components/primitives/viewport/Viewport.js +189 -0
- package/dist/esm/components/primitives/viewport/Viewport.js.map +1 -0
- package/dist/esm/components/primitives/viewport/ViewportContext.js +47 -0
- package/dist/esm/components/primitives/viewport/ViewportContext.js.map +1 -0
- package/dist/esm/components/primitives/viewport/ViewportLayer.js +113 -0
- package/dist/esm/components/primitives/viewport/ViewportLayer.js.map +1 -0
- package/dist/esm/components/primitives/viewport/ViewportOverlay.js +47 -0
- package/dist/esm/components/primitives/viewport/ViewportOverlay.js.map +1 -0
- package/dist/esm/components/primitives/viewport/ViewportStore.js +210 -0
- package/dist/esm/components/primitives/viewport/ViewportStore.js.map +1 -0
- package/dist/esm/components/primitives/viewport/ViewportWorld.js +38 -0
- package/dist/esm/components/primitives/viewport/ViewportWorld.js.map +1 -0
- package/dist/esm/components/primitives/viewport/useViewportGestures.js +333 -0
- package/dist/esm/components/primitives/viewport/useViewportGestures.js.map +1 -0
- package/dist/esm/components/primitives/viewport/viewportCoords.js +37 -0
- package/dist/esm/components/primitives/viewport/viewportCoords.js.map +1 -0
- package/dist/esm/components/primitives/viewport/viewportMath.js +77 -0
- package/dist/esm/components/primitives/viewport/viewportMath.js.map +1 -0
- package/dist/esm/components/shell/AppShell/AppShell.js +1 -1
- package/dist/esm/components/shell/AppShell/AppShell.js.map +1 -1
- package/dist/esm/components/shell/FloatingPanel/FloatingPanel.css.js +11 -10
- package/dist/esm/components/shell/FloatingPanel/FloatingPanel.css.js.map +1 -1
- package/dist/esm/components/shell/FloatingPanel/FloatingPanel.js +60 -24
- package/dist/esm/components/shell/FloatingPanel/FloatingPanel.js.map +1 -1
- package/dist/esm/components/shell/MenuBar/MenuBar.js +23 -16
- package/dist/esm/components/shell/MenuBar/MenuBar.js.map +1 -1
- package/dist/esm/components/shell/StatusBar/StatusBar.js.map +1 -1
- package/dist/esm/components/shell/Toolbar/Toolbar.js +4 -3
- package/dist/esm/components/shell/Toolbar/Toolbar.js.map +1 -1
- package/dist/esm/context/KeyboardContext.js.map +1 -1
- package/dist/esm/hooks/useBreakpoint/useBreakpoint.js +1 -1
- package/dist/esm/hooks/useBreakpoint/useBreakpoint.js.map +1 -1
- package/dist/esm/hooks/useClickOutside/useClickOutside.js +9 -9
- package/dist/esm/hooks/useClickOutside/useClickOutside.js.map +1 -1
- package/dist/esm/hooks/useClipboard/useClipboard.js +4 -0
- package/dist/esm/hooks/useClipboard/useClipboard.js.map +1 -1
- package/dist/esm/hooks/useControlledState/useControlledState.js.map +1 -1
- package/dist/esm/hooks/useDebounced/useDebouncedCallback.js +11 -6
- package/dist/esm/hooks/useDebounced/useDebouncedCallback.js.map +1 -1
- package/dist/esm/hooks/useDebounced/useDebouncedValue.js +16 -4
- package/dist/esm/hooks/useDebounced/useDebouncedValue.js.map +1 -1
- package/dist/esm/hooks/useDisclosure/useDisclosure.js.map +1 -1
- package/dist/esm/hooks/useEventCallback/useEventCallback.js +49 -0
- package/dist/esm/hooks/useEventCallback/useEventCallback.js.map +1 -0
- package/dist/esm/hooks/useFocusTrap/useFocusTrap.js.map +1 -1
- package/dist/esm/hooks/useHotkey/useHotkey.js +7 -12
- package/dist/esm/hooks/useHotkey/useHotkey.js.map +1 -1
- package/dist/esm/hooks/useIntersectionObserver/useIntersectionObserver.js +2 -0
- package/dist/esm/hooks/useIntersectionObserver/useIntersectionObserver.js.map +1 -1
- package/dist/esm/hooks/useIsMounted/useIsMounted.js +43 -0
- package/dist/esm/hooks/useIsMounted/useIsMounted.js.map +1 -0
- package/dist/esm/hooks/useKeyboard/useKeyboard.js.map +1 -1
- package/dist/esm/hooks/useKeyboard/utils.js.map +1 -1
- package/dist/esm/hooks/useLatest/useLatest.js +31 -0
- package/dist/esm/hooks/useLatest/useLatest.js.map +1 -0
- package/dist/esm/hooks/useListboxNav/useListboxNav.js +29 -13
- package/dist/esm/hooks/useListboxNav/useListboxNav.js.map +1 -1
- package/dist/esm/hooks/useMediaQuery/useMediaQuery.js +7 -1
- package/dist/esm/hooks/useMediaQuery/useMediaQuery.js.map +1 -1
- package/dist/esm/hooks/useMergedRef/useMergedRef.js +6 -1
- package/dist/esm/hooks/useMergedRef/useMergedRef.js.map +1 -1
- package/dist/esm/hooks/useNavigationHistory/useNavigationHistory.js +146 -0
- package/dist/esm/hooks/useNavigationHistory/useNavigationHistory.js.map +1 -0
- package/dist/esm/hooks/useResizeObserver/useResizeObserver.js +6 -8
- package/dist/esm/hooks/useResizeObserver/useResizeObserver.js.map +1 -1
- package/dist/esm/hooks/useTheme/useTheme.js +6 -3
- package/dist/esm/hooks/useTheme/useTheme.js.map +1 -1
- package/dist/esm/hooks/useThrottledCallback/useThrottledCallback.js +9 -4
- package/dist/esm/hooks/useThrottledCallback/useThrottledCallback.js.map +1 -1
- package/dist/esm/index.js +63 -4
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/node_modules/tslib/tslib.es6.js +37 -0
- package/dist/esm/node_modules/tslib/tslib.es6.js.map +1 -0
- package/dist/esm/styles.js +3 -0
- package/dist/esm/styles.js.map +1 -0
- package/dist/esm/theme/ThemeProvider.js +6 -4
- package/dist/esm/theme/ThemeProvider.js.map +1 -1
- package/dist/esm/theme/VanillaThemeProvider.js.map +1 -1
- package/dist/esm/theme/breakpoints.js.map +1 -1
- package/dist/esm/theme/contract.css.js +1 -1
- package/dist/esm/theme/createCustomTheme.js +2 -2
- package/dist/esm/theme/createCustomTheme.js.map +1 -1
- package/dist/esm/theme/createLightTheme.js.map +1 -1
- package/dist/esm/theme/darkTheme.css.js +2 -2
- package/dist/esm/theme/darkThemeValues.js +1 -1
- package/dist/esm/theme/darkThemeValues.js.map +1 -1
- package/dist/esm/theme/lightTheme.css.js +1 -1
- package/dist/esm/theme/lightThemeValues.js +1 -1
- package/dist/esm/theme/lightThemeValues.js.map +1 -1
- package/dist/esm/theme/themeContractData.js +4 -4
- package/dist/esm/theme/themeContractData.js.map +1 -1
- package/dist/esm/utils/cx.js.map +1 -1
- package/dist/esm/utils/devWarn.js +1 -1
- package/dist/esm/utils/devWarn.js.map +1 -1
- package/dist/esm/utils/mathExpression.js +1 -1
- package/dist/esm/utils/mathExpression.js.map +1 -1
- package/dist/esm/utils/mathUtils.js.map +1 -1
- package/dist/esm/utils/objects.js.map +1 -1
- package/dist/esm/utils/platform.js.map +1 -1
- package/dist/tokens/tokens.dark.css +1 -1
- package/dist/tokens/tokens.json +1 -1
- package/dist/tokens/tokens.light.css +1 -1
- package/dist/types/components/Icons/AddIcon.d.ts +1 -1
- package/dist/types/components/Icons/AiChatIcon.d.ts +1 -1
- package/dist/types/components/Icons/AiSparklesIcon.d.ts +1 -1
- package/dist/types/components/Icons/ArchiveIcon.d.ts +1 -1
- package/dist/types/components/Icons/ArrowDownIcon.d.ts +1 -1
- package/dist/types/components/Icons/ArrowLeftIcon.d.ts +1 -1
- package/dist/types/components/Icons/ArrowRightIcon.d.ts +1 -1
- package/dist/types/components/Icons/ArrowUpIcon.d.ts +1 -1
- package/dist/types/components/Icons/BookmarkIcon.d.ts +1 -1
- package/dist/types/components/Icons/BugIcon.d.ts +1 -1
- package/dist/types/components/Icons/BuildingIcon.d.ts +1 -1
- package/dist/types/components/Icons/CalendarIcon.d.ts +1 -1
- package/dist/types/components/Icons/CameraIcon.d.ts +34 -0
- package/dist/types/components/Icons/CheckIcon.d.ts +1 -1
- package/dist/types/components/Icons/ChevronDownIcon.d.ts +1 -1
- package/dist/types/components/Icons/ChevronLeftIcon.d.ts +1 -1
- package/dist/types/components/Icons/ChevronRightIcon.d.ts +1 -1
- package/dist/types/components/Icons/ChevronUpIcon.d.ts +1 -1
- package/dist/types/components/Icons/CircleIcon.d.ts +1 -1
- package/dist/types/components/Icons/ClockIcon.d.ts +1 -1
- package/dist/types/components/Icons/CloseIcon.d.ts +1 -1
- package/dist/types/components/Icons/CloudUploadIcon.d.ts +1 -1
- package/dist/types/components/Icons/CodeIcon.d.ts +1 -1
- package/dist/types/components/Icons/CopyIcon.d.ts +1 -1
- package/dist/types/components/Icons/CubeIcon.d.ts +34 -0
- package/dist/types/components/Icons/CutIcon.d.ts +1 -1
- package/dist/types/components/Icons/DotsHorizontalIcon.d.ts +1 -1
- package/dist/types/components/Icons/DotsVerticalIcon.d.ts +1 -1
- package/dist/types/components/Icons/DownloadIcon.d.ts +1 -1
- package/dist/types/components/Icons/EditIcon.d.ts +1 -1
- package/dist/types/components/Icons/ErrorIcon.d.ts +1 -1
- package/dist/types/components/Icons/ExternalLinkIcon.d.ts +1 -1
- package/dist/types/components/Icons/EyeDropperIcon.d.ts +1 -1
- package/dist/types/components/Icons/EyeIcon.d.ts +1 -1
- package/dist/types/components/Icons/FileTextIcon.d.ts +1 -1
- package/dist/types/components/Icons/FilterIcon.d.ts +1 -1
- package/dist/types/components/Icons/FirstIcon.d.ts +1 -1
- package/dist/types/components/Icons/FolderCogIcon.d.ts +1 -1
- package/dist/types/components/Icons/FolderIcon.d.ts +1 -1
- package/dist/types/components/Icons/FolderOpenIcon.d.ts +1 -1
- package/dist/types/components/Icons/FullscreenIcon.d.ts +1 -1
- package/dist/types/components/Icons/GitBranchIcon.d.ts +1 -1
- package/dist/types/components/Icons/GridIcon.d.ts +1 -1
- package/dist/types/components/Icons/HeartIcon.d.ts +1 -1
- package/dist/types/components/Icons/HelpIcon.d.ts +1 -1
- package/dist/types/components/Icons/HomeIcon.d.ts +1 -1
- package/dist/types/components/Icons/ImageIcon.d.ts +34 -0
- package/dist/types/components/Icons/InfoIcon.d.ts +1 -1
- package/dist/types/components/Icons/LastIcon.d.ts +1 -1
- package/dist/types/components/Icons/LinkIcon.d.ts +1 -1
- package/dist/types/components/Icons/ListIcon.d.ts +1 -1
- package/dist/types/components/Icons/LockIcon.d.ts +1 -1
- package/dist/types/components/Icons/MaximizeIcon.d.ts +1 -1
- package/dist/types/components/Icons/MenuIcon.d.ts +1 -1
- package/dist/types/components/Icons/MinimizeIcon.d.ts +1 -1
- package/dist/types/components/Icons/MinusIcon.d.ts +1 -1
- package/dist/types/components/Icons/OrbitIcon.d.ts +34 -0
- package/dist/types/components/Icons/PasteIcon.d.ts +1 -1
- package/dist/types/components/Icons/PauseIcon.d.ts +1 -1
- package/dist/types/components/Icons/PinIcon.d.ts +1 -1
- package/dist/types/components/Icons/PlayIcon.d.ts +1 -1
- package/dist/types/components/Icons/RedoIcon.d.ts +1 -1
- package/dist/types/components/Icons/RefreshIcon.d.ts +1 -1
- package/dist/types/components/Icons/RobotIcon.d.ts +1 -1
- package/dist/types/components/Icons/RotateIcon.d.ts +35 -0
- package/dist/types/components/Icons/SaveIcon.d.ts +1 -1
- package/dist/types/components/Icons/SearchIcon.d.ts +1 -1
- package/dist/types/components/Icons/SendIcon.d.ts +1 -1
- package/dist/types/components/Icons/SettingsIcon.d.ts +1 -1
- package/dist/types/components/Icons/SortIcon.d.ts +1 -1
- package/dist/types/components/Icons/SpinIcon.d.ts +35 -0
- package/dist/types/components/Icons/StarIcon.d.ts +1 -1
- package/dist/types/components/Icons/StopIcon.d.ts +1 -1
- package/dist/types/components/Icons/SuccessIcon.d.ts +1 -1
- package/dist/types/components/Icons/TagIcon.d.ts +1 -1
- package/dist/types/components/Icons/TangentAlignedIcon.d.ts +1 -1
- package/dist/types/components/Icons/TangentAutoIcon.d.ts +1 -1
- package/dist/types/components/Icons/TangentFreeIcon.d.ts +1 -1
- package/dist/types/components/Icons/TangentLinearIcon.d.ts +1 -1
- package/dist/types/components/Icons/TangentMirroredIcon.d.ts +1 -1
- package/dist/types/components/Icons/TangentStepIcon.d.ts +1 -1
- package/dist/types/components/Icons/TerminalIcon.d.ts +1 -1
- package/dist/types/components/Icons/TrashIcon.d.ts +1 -1
- package/dist/types/components/Icons/UndoIcon.d.ts +1 -1
- package/dist/types/components/Icons/UnlinkIcon.d.ts +1 -1
- package/dist/types/components/Icons/UnlockIcon.d.ts +1 -1
- package/dist/types/components/Icons/UploadIcon.d.ts +1 -1
- package/dist/types/components/Icons/UserIcon.d.ts +1 -1
- package/dist/types/components/Icons/UsersIcon.d.ts +1 -1
- package/dist/types/components/Icons/WarningIcon.d.ts +1 -1
- package/dist/types/components/Icons/ZoomFitIcon.d.ts +35 -0
- package/dist/types/components/Icons/ZoomInIcon.d.ts +1 -1
- package/dist/types/components/Icons/ZoomOutIcon.d.ts +1 -1
- package/dist/types/components/controls/CartesianPicker/CartesianPicker.types.d.ts +3 -3
- package/dist/types/components/controls/ColorPicker/ColorPicker.types.d.ts +2 -2
- package/dist/types/components/controls/ColorPicker/EyeDropper.d.ts +1 -1
- package/dist/types/components/controls/Combobox/Combobox.types.d.ts +1 -1
- package/dist/types/components/controls/CurveEditor/CurveEditor.types.d.ts +8 -58
- package/dist/types/components/controls/CurveEditor/curveUtils.d.ts +2 -1
- package/dist/types/components/controls/FileTree/FileTree.d.ts +34 -0
- package/dist/types/components/controls/FileTree/FileTree.types.d.ts +133 -0
- package/dist/types/components/controls/FileTree/fileTreeIcons.d.ts +29 -0
- package/dist/types/components/controls/FileTree/fileTreeLabels.d.ts +19 -0
- package/dist/types/components/controls/FileUploader/FileUploader.types.d.ts +2 -2
- package/dist/types/components/controls/MultiSelect/MultiSelect.types.d.ts +1 -1
- package/dist/types/components/controls/NumberInput/NumberInput.d.ts +2 -2
- package/dist/types/components/controls/Select/Select.d.ts +1 -1
- package/dist/types/components/controls/Select/Select.types.d.ts +45 -11
- package/dist/types/components/controls/Slider/Slider.d.ts +1 -1
- package/dist/types/components/controls/TagInput/TagInput.types.d.ts +2 -2
- package/dist/types/components/controls/TreeView/TreeView.d.ts +1 -1
- package/dist/types/components/controls/TreeView/TreeView.types.d.ts +24 -2
- package/dist/types/components/controls/VectorInput/VectorInput.types.d.ts +1 -1
- package/dist/types/components/data/DataTable/DataTable.types.d.ts +2 -2
- package/dist/types/components/editor/AssetBrowser/AssetBrowser.d.ts +13 -0
- package/dist/types/components/editor/AssetBrowser/AssetBrowser.types.d.ts +241 -0
- package/dist/types/components/editor/AssetBrowser/assetBrowserLabels.d.ts +70 -0
- package/dist/types/components/editor/ChatPanel/ChatMarkdownRenderer.types.d.ts +1 -1
- package/dist/types/components/editor/ChatPanel/ChatPanel.types.d.ts +2 -2
- package/dist/types/components/editor/Minimap/Minimap.d.ts +26 -0
- package/dist/types/components/editor/Minimap/Minimap.types.d.ts +249 -0
- package/dist/types/components/editor/Minimap/MinimapContext.d.ts +27 -0
- package/dist/types/components/editor/Minimap/MinimapCorner.d.ts +8 -0
- package/dist/types/components/editor/Minimap/MinimapFooter.d.ts +8 -0
- package/dist/types/components/editor/Minimap/MinimapStore.d.ts +17 -0
- package/dist/types/components/editor/Minimap/MinimapTitle.d.ts +8 -0
- package/dist/types/components/editor/Minimap/ViewportMinimap.d.ts +52 -0
- package/dist/types/components/editor/Minimap/computeBoundsFromItems.d.ts +13 -0
- package/dist/types/components/editor/Minimap/index.d.ts +13 -0
- package/dist/types/components/editor/NodeGraph/NodeGraph.d.ts +63 -0
- package/dist/types/components/editor/NodeGraph/NodeGraph.types.d.ts +568 -0
- package/dist/types/components/editor/NodeGraph/NodeGraphContext.d.ts +30 -0
- package/dist/types/components/editor/NodeGraph/NodeGraphNodeParts.d.ts +86 -0
- package/dist/types/components/editor/NodeGraph/NodeGraphNodeSection.d.ts +47 -0
- package/dist/types/components/editor/NodeGraph/NodeGraphPin.d.ts +57 -0
- package/dist/types/components/editor/NodeGraph/NodeGraphPort.d.ts +30 -0
- package/dist/types/components/editor/NodeGraph/NodeGraphPortVisual.d.ts +46 -0
- package/dist/types/components/editor/NodeGraph/NodeGraphSlots.d.ts +16 -0
- package/dist/types/components/editor/NodeGraph/NodeGraphStore.d.ts +256 -0
- package/dist/types/components/editor/NodeGraph/NodeGraphToolbar.d.ts +54 -0
- package/dist/types/components/editor/NodeGraph/createTypeMatchValidator.d.ts +43 -0
- package/dist/types/components/editor/NodeGraph/nodeGraphActions.d.ts +39 -0
- package/dist/types/components/editor/NodeGraph/nodeGraphIds.d.ts +16 -0
- package/dist/types/components/editor/NodeGraph/useNodeGraph.d.ts +103 -0
- package/dist/types/components/editor/PropertyInspector/PropertyInspector.types.d.ts +51 -5
- package/dist/types/components/editor/Timeline/Timeline.d.ts +18 -0
- package/dist/types/components/editor/Timeline/Timeline.types.d.ts +348 -0
- package/dist/types/components/editor/Timeline/TimelineContext.d.ts +51 -0
- package/dist/types/components/editor/Timeline/TimelineFooter.d.ts +8 -0
- package/dist/types/components/editor/Timeline/TimelineMinimap.d.ts +21 -0
- package/dist/types/components/editor/Timeline/TimelineStore.d.ts +41 -0
- package/dist/types/components/editor/Timeline/TimelineToolbar.d.ts +8 -0
- package/dist/types/components/editor/Timeline/TimelineTrackScale.d.ts +8 -0
- package/dist/types/components/editor/Timeline/index.d.ts +15 -0
- package/dist/types/components/editor/Timeline/timelineCoords.d.ts +7 -0
- package/dist/types/components/editor/Timeline/timelineEdits.d.ts +18 -0
- package/dist/types/components/editor/TransformControl/TransformControl.types.d.ts +2 -2
- package/dist/types/components/editor/ViewportGizmo/ViewportGizmo.types.d.ts +1 -1
- package/dist/types/components/feedback/Alert/Alert.d.ts +2 -2
- package/dist/types/components/feedback/Alert/Alert.types.d.ts +5 -5
- package/dist/types/components/feedback/CommandPalette/CommandPalette.types.d.ts +1 -3
- package/dist/types/components/feedback/Dialog/Dialog.types.d.ts +2 -2
- package/dist/types/components/feedback/Drawer/Drawer.types.d.ts +1 -1
- package/dist/types/components/feedback/EmptyState/EmptyState.types.d.ts +2 -2
- package/dist/types/components/feedback/LogView/LogView.d.ts +58 -0
- package/dist/types/components/feedback/LogView/LogView.types.d.ts +333 -0
- package/dist/types/components/feedback/LogView/LogViewBody.d.ts +15 -0
- package/dist/types/components/feedback/LogView/LogViewContext.d.ts +9 -0
- package/dist/types/components/feedback/LogView/LogViewParts.d.ts +35 -0
- package/dist/types/components/feedback/LogView/LogViewStore.d.ts +4 -0
- package/dist/types/components/feedback/LogView/logViewLabels.d.ts +9 -0
- package/dist/types/components/feedback/LogView/logViewUtils.d.ts +41 -0
- package/dist/types/components/feedback/ProgressBar/ProgressBar.types.d.ts +3 -3
- package/dist/types/components/feedback/Skeleton/Skeleton.types.d.ts +4 -4
- package/dist/types/components/feedback/Stat/Stat.types.d.ts +2 -2
- package/dist/types/components/feedback/Toast/Toast.types.d.ts +1 -1
- package/dist/types/components/form/FormHelperText.d.ts +2 -2
- package/dist/types/components/form/FormLabel.d.ts +1 -1
- package/dist/types/components/form/InputWrapper.d.ts +2 -2
- package/dist/types/components/layout/Accordion/Accordion.types.d.ts +2 -2
- package/dist/types/components/layout/Card/Card.types.d.ts +6 -6
- package/dist/types/components/layout/Divider/Divider.types.d.ts +2 -2
- package/dist/types/components/layout/Flex/Flex.d.ts +1 -1
- package/dist/types/components/layout/Grid/Grid.d.ts +1 -1
- package/dist/types/components/layout/ListItem/ListItem.types.d.ts +2 -2
- package/dist/types/components/layout/PageHeader/PageHeader.types.d.ts +1 -1
- package/dist/types/components/layout/PanelSurface/PanelSurface.types.d.ts +6 -6
- package/dist/types/components/layout/ScrollArea/ScrollArea.types.d.ts +2 -2
- package/dist/types/components/layout/Stack/Stack.d.ts +1 -1
- package/dist/types/components/navigation/Breadcrumbs/BreadcrumbItem.d.ts +1 -0
- package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.types.d.ts +7 -0
- package/dist/types/components/navigation/ContextMenu/ContextMenu.d.ts +18 -3
- package/dist/types/components/navigation/ContextMenu/ContextMenu.types.d.ts +55 -63
- package/dist/types/components/navigation/Menu/Menu.d.ts +38 -35
- package/dist/types/components/navigation/Menu/Menu.types.d.ts +190 -71
- package/dist/types/components/navigation/Pagination/Pagination.types.d.ts +1 -1
- package/dist/types/components/navigation/PathBar/PathBar.d.ts +31 -0
- package/dist/types/components/navigation/PathBar/PathBar.types.d.ts +79 -0
- package/dist/types/components/navigation/SegmentedControl/SegmentedControl.types.d.ts +3 -3
- package/dist/types/components/navigation/Tabs/Tabs.types.d.ts +2 -2
- package/dist/types/components/primitives/Avatar/Avatar.types.d.ts +2 -2
- package/dist/types/components/primitives/Badge/Badge.types.d.ts +1 -1
- package/dist/types/components/primitives/Button/Button.d.ts +2 -2
- package/dist/types/components/primitives/Checkbox/Checkbox.types.d.ts +2 -2
- package/dist/types/components/primitives/Code/Code.types.d.ts +1 -1
- package/dist/types/components/primitives/Collapsible/Collapsible.types.d.ts +2 -2
- package/dist/types/components/primitives/HoverCard/HoverCard.types.d.ts +3 -3
- package/dist/types/components/primitives/Icon/Icon.d.ts +2 -2
- package/dist/types/components/primitives/IconButton/IconButton.d.ts +1 -1
- package/dist/types/components/primitives/Input/Input.d.ts +1 -1
- package/dist/types/components/primitives/Kbd/Kbd.types.d.ts +1 -1
- package/dist/types/components/primitives/Link/Link.types.d.ts +1 -1
- package/dist/types/components/primitives/Popover/Popover.types.d.ts +2 -2
- package/dist/types/components/primitives/Radio/Radio.types.d.ts +3 -3
- package/dist/types/components/primitives/Switch/Switch.d.ts +1 -1
- package/dist/types/components/primitives/TextArea/TextArea.types.d.ts +1 -1
- package/dist/types/components/primitives/Tooltip/Tooltip.d.ts +1 -1
- package/dist/types/components/primitives/VisuallyHidden/VisuallyHidden.types.d.ts +1 -1
- package/dist/types/components/primitives/canvas/canvas.types.d.ts +16 -1
- package/dist/types/components/primitives/viewport/Viewport.d.ts +38 -0
- package/dist/types/components/primitives/viewport/Viewport.types.d.ts +257 -0
- package/dist/types/components/primitives/viewport/ViewportContext.d.ts +23 -0
- package/dist/types/components/primitives/viewport/ViewportLayer.d.ts +26 -0
- package/dist/types/components/primitives/viewport/ViewportOverlay.d.ts +27 -0
- package/dist/types/components/primitives/viewport/ViewportWorld.d.ts +25 -0
- package/dist/types/components/primitives/viewport/viewportCoords.d.ts +25 -0
- package/dist/types/components/primitives/viewport/viewportMath.d.ts +35 -0
- package/dist/types/components/shell/AppShell/AppShell.types.d.ts +2 -2
- package/dist/types/components/shell/FloatingPanel/FloatingPanel.types.d.ts +2 -2
- package/dist/types/components/shell/MenuBar/MenuBar.types.d.ts +5 -5
- package/dist/types/components/shell/StatusBar/StatusBar.types.d.ts +3 -3
- package/dist/types/components/shell/Toolbar/Toolbar.types.d.ts +5 -5
- package/dist/types/hooks/useDebounced/useDebouncedValue.d.ts +13 -4
- package/dist/types/hooks/useEventCallback/useEventCallback.d.ts +32 -0
- package/dist/types/hooks/useIsMounted/useIsMounted.d.ts +28 -0
- package/dist/types/hooks/useKeyboard/types.d.ts +1 -1
- package/dist/types/hooks/useLatest/useLatest.d.ts +23 -0
- package/dist/types/hooks/useResizeObserver/useResizeObserver.d.ts +3 -3
- package/dist/types/index.d.ts +71 -6
- package/dist/types/theme/ThemeProvider.d.ts +5 -3
- package/dist/types/theme/contract.css.d.ts +1 -1
- package/dist/types/theme/createCustomTheme.d.ts +1 -1
- package/dist/types/theme/darkThemeValues.d.ts +1 -1
- package/dist/types/theme/lightThemeValues.d.ts +1 -1
- package/dist/types/theme/themeContractData.d.ts +4 -4
- package/dist/types/theme-values.d.ts +1 -1
- package/dist/types/types/keyframe.d.ts +64 -0
- package/package.json +34 -18
- package/dist/esm/_virtual/_commonjsHelpers.js +0 -6
- package/dist/esm/_virtual/_commonjsHelpers.js.map +0 -1
- package/dist/esm/_virtual/cjs.js +0 -4
- package/dist/esm/_virtual/cjs.js.map +0 -1
- package/dist/esm/_virtual/cssesc.js +0 -8
- package/dist/esm/_virtual/cssesc.js.map +0 -1
- package/dist/esm/_virtual/picocolors.js +0 -8
- package/dist/esm/_virtual/picocolors.js.map +0 -1
- package/dist/esm/_virtual/picocolors2.js +0 -4
- package/dist/esm/_virtual/picocolors2.js.map +0 -1
- package/dist/esm/assets/src/components/navigation/Menu/Menu.css.ts.vanilla-DD0c5D10.css +0 -67
- package/dist/esm/components/navigation/ContextMenu/useContextMenuTarget.js +0 -53
- package/dist/esm/components/navigation/ContextMenu/useContextMenuTarget.js.map +0 -1
- package/dist/esm/components/navigation/Menu/Menu.helpers.js +0 -53
- package/dist/esm/components/navigation/Menu/Menu.helpers.js.map +0 -1
- package/dist/esm/components/navigation/Menu/useMenu.js +0 -88
- package/dist/esm/components/navigation/Menu/useMenu.js.map +0 -1
- package/dist/esm/node_modules/@emotion/hash/dist/emotion-hash.esm.js +0 -56
- package/dist/esm/node_modules/@emotion/hash/dist/emotion-hash.esm.js.map +0 -1
- package/dist/esm/node_modules/@vanilla-extract/css/adapter/dist/vanilla-extract-css-adapter.esm.js +0 -46
- package/dist/esm/node_modules/@vanilla-extract/css/adapter/dist/vanilla-extract-css-adapter.esm.js.map +0 -1
- package/dist/esm/node_modules/@vanilla-extract/css/dist/taggedTemplateLiteral-10998315.esm.js +0 -13
- package/dist/esm/node_modules/@vanilla-extract/css/dist/taggedTemplateLiteral-10998315.esm.js.map +0 -1
- package/dist/esm/node_modules/@vanilla-extract/css/dist/transformCss-fd0786e1.esm.js +0 -962
- package/dist/esm/node_modules/@vanilla-extract/css/dist/transformCss-fd0786e1.esm.js.map +0 -1
- package/dist/esm/node_modules/@vanilla-extract/css/dist/vanilla-extract-css.esm.js +0 -309
- package/dist/esm/node_modules/@vanilla-extract/css/dist/vanilla-extract-css.esm.js.map +0 -1
- package/dist/esm/node_modules/@vanilla-extract/css/fileScope/dist/vanilla-extract-css-fileScope.esm.js +0 -18
- package/dist/esm/node_modules/@vanilla-extract/css/fileScope/dist/vanilla-extract-css-fileScope.esm.js.map +0 -1
- package/dist/esm/node_modules/@vanilla-extract/css/injectStyles/dist/vanilla-extract-css-injectStyles.esm.js +0 -23
- package/dist/esm/node_modules/@vanilla-extract/css/injectStyles/dist/vanilla-extract-css-injectStyles.esm.js.map +0 -1
- package/dist/esm/node_modules/@vanilla-extract/css/node_modules/lru-cache/dist/esm/index.js +0 -1543
- package/dist/esm/node_modules/@vanilla-extract/css/node_modules/lru-cache/dist/esm/index.js.map +0 -1
- package/dist/esm/node_modules/@vanilla-extract/private/dist/vanilla-extract-private.esm.js +0 -38
- package/dist/esm/node_modules/@vanilla-extract/private/dist/vanilla-extract-private.esm.js.map +0 -1
- package/dist/esm/node_modules/css-what/lib/es/parse.js +0 -424
- package/dist/esm/node_modules/css-what/lib/es/parse.js.map +0 -1
- package/dist/esm/node_modules/css-what/lib/es/types.js +0 -29
- package/dist/esm/node_modules/css-what/lib/es/types.js.map +0 -1
- package/dist/esm/node_modules/cssesc/cssesc.js +0 -120
- package/dist/esm/node_modules/cssesc/cssesc.js.map +0 -1
- package/dist/esm/node_modules/dedent/dist/dedent.js +0 -100
- package/dist/esm/node_modules/dedent/dist/dedent.js.map +0 -1
- package/dist/esm/node_modules/deep-object-diff/mjs/diff.js +0 -40
- package/dist/esm/node_modules/deep-object-diff/mjs/diff.js.map +0 -1
- package/dist/esm/node_modules/deep-object-diff/mjs/utils.js +0 -9
- package/dist/esm/node_modules/deep-object-diff/mjs/utils.js.map +0 -1
- package/dist/esm/node_modules/deepmerge/dist/cjs.js +0 -143
- package/dist/esm/node_modules/deepmerge/dist/cjs.js.map +0 -1
- package/dist/esm/node_modules/media-query-parser/dist/media-query-parser.esm.js +0 -1386
- package/dist/esm/node_modules/media-query-parser/dist/media-query-parser.esm.js.map +0 -1
- package/dist/esm/node_modules/modern-ahocorasick/dist/index.js +0 -102
- package/dist/esm/node_modules/modern-ahocorasick/dist/index.js.map +0 -1
- package/dist/esm/node_modules/picocolors/picocolors.js +0 -87
- package/dist/esm/node_modules/picocolors/picocolors.js.map +0 -1
- package/dist/types/components/navigation/ContextMenu/useContextMenuTarget.d.ts +0 -5
- package/dist/types/components/navigation/Menu/useMenu.d.ts +0 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Switch.js","sources":["
|
|
1
|
+
{"version":3,"file":"Switch.js","sources":["src/components/primitives/Switch/Switch.tsx"],"sourcesContent":["'use client';\n\nimport { assignInlineVars } from '@vanilla-extract/dynamic';\nimport React, { useCallback, useId, useState } from 'react';\n\nimport { FormHelperText } from '@/components/form/FormHelperText';\nimport { cx } from '@/utils/cx';\n\nimport {\n switchContainerStyle,\n switchRowRecipe,\n trackRecipe,\n trackWidthVar,\n trackHeightVar,\n thumbRecipe,\n thumbDiameterVar,\n thumbTranslateVar,\n labelTextStyle,\n} from './Switch.css';\n\nimport type { Size } from '@/types/common';\nimport type { Prettify } from '@/types/utilities';\n\n// --- Types ---\n\nexport type SwitchSize = Size;\n\nexport interface SwitchBaseProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n 'onChange' | 'css'\n> {\n /**\n * Whether the switch is on (controlled)\n */\n checked?: boolean;\n\n /**\n * Default on/off state (uncontrolled)\n * @default false\n */\n defaultChecked?: boolean;\n\n /**\n * Switch label text\n */\n label?: string;\n\n /**\n * Position of the label relative to the switch\n * @default \"right\"\n */\n labelPosition?: 'left' | 'right';\n\n /**\n * Switch size\n * - `sm`: 28x14px track, compact toolbars\n * - `md`: 34x18px track, standard for panels\n * - `lg`: 42x22px track, prominent settings\n * @default \"md\"\n */\n size?: SwitchSize;\n\n /**\n * Whether the switch is disabled\n * @default false\n */\n disabled?: boolean;\n\n /**\n * Helper text displayed below the switch\n */\n helperText?: string;\n\n /**\n * Error state\n * @default false\n */\n error?: boolean;\n\n /**\n * Error message displayed when error is true\n */\n errorMessage?: string;\n\n /**\n * Name attribute for form submission\n */\n name?: string;\n\n /**\n * Change event handler\n * @param checked - The new on/off state\n */\n onChange?: (checked: boolean) => void;\n\n /**\n * Test identifier for automated testing\n */\n testId?: string;\n\n ref?: React.Ref<HTMLButtonElement>;\n}\n\nexport type SwitchProps = Prettify<SwitchBaseProps>;\n\n// --- Size maps ---\n\ninterface SizeConfig {\n trackW: number;\n trackH: number;\n thumbDiameter: number;\n offset: number;\n}\n\nconst SIZE_MAP: Record<SwitchSize, SizeConfig> = {\n sm: { trackW: 28, trackH: 14, thumbDiameter: 10, offset: 2 },\n md: { trackW: 34, trackH: 18, thumbDiameter: 14, offset: 2 },\n lg: { trackW: 42, trackH: 22, thumbDiameter: 18, offset: 2 },\n};\n\n/**\n * Switch component for boolean on/off states in editor toolbars,\n * settings panels, and property inspectors.\n *\n * More space-efficient than Checkbox for toggle options like\n * \"Show Grid\", \"Snap to Grid\", \"Auto-Save\".\n *\n * @example\n * ```tsx\n * <Switch label=\"Show Grid\" />\n * <Switch checked={value} onChange={setValue} label=\"Auto-save\" />\n * ```\n */\nexport const Switch: React.FC<SwitchProps> = ({\n checked: checkedProp,\n defaultChecked = false,\n label,\n labelPosition = 'right',\n size = 'md',\n disabled = false,\n helperText,\n error = false,\n errorMessage,\n name,\n onChange,\n className,\n style,\n testId,\n ref,\n id: idProp,\n ...rest\n}) => {\n const autoId = useId();\n const switchId = idProp ?? autoId;\n const helperId = `${switchId}-helper`;\n\n const [internalChecked, setInternalChecked] = useState(defaultChecked);\n const isControlled = checkedProp !== undefined;\n const resolvedChecked = isControlled ? checkedProp : internalChecked;\n\n const handleClick = useCallback(() => {\n if (disabled) return;\n\n const newChecked = !resolvedChecked;\n\n if (!isControlled) {\n setInternalChecked(newChecked);\n }\n\n onChange?.(newChecked);\n }, [disabled, resolvedChecked, isControlled, onChange]);\n\n const showHelperText = error && errorMessage ? errorMessage : helperText;\n\n const config = SIZE_MAP[size];\n const translateX = config.trackW - config.thumbDiameter - config.offset * 2;\n\n const trackInlineVars = assignInlineVars({\n [trackWidthVar]: `${config.trackW}px`,\n [trackHeightVar]: `${config.trackH}px`,\n });\n\n const thumbInlineVars = assignInlineVars({\n [thumbDiameterVar]: `${config.thumbDiameter}px`,\n [thumbTranslateVar]: `${translateX}px`,\n });\n\n const thumbStyle: React.CSSProperties = !resolvedChecked\n ? { transform: `translateX(${config.offset}px)` }\n : {};\n\n const track = (\n <button\n ref={ref}\n type=\"button\"\n role=\"switch\"\n aria-checked={resolvedChecked}\n aria-disabled={disabled || undefined}\n aria-describedby={showHelperText ? helperId : undefined}\n disabled={disabled}\n onClick={handleClick}\n className={trackRecipe({\n checked: resolvedChecked || undefined,\n disabled: disabled || undefined,\n error: error || undefined,\n })}\n style={trackInlineVars}\n data-testid={testId}\n {...rest}\n >\n <span\n className={thumbRecipe({\n checked: resolvedChecked || undefined,\n })}\n style={{ ...thumbInlineVars, ...thumbStyle }}\n />\n {name && (\n <input type=\"hidden\" name={name} value={resolvedChecked ? 'on' : ''} />\n )}\n </button>\n );\n\n if (!label && !showHelperText) {\n return track;\n }\n\n return (\n <div className={cx(switchContainerStyle, className)} style={style}>\n <label\n className={switchRowRecipe({\n size,\n disabled: disabled || undefined,\n })}\n >\n {labelPosition === 'left' && label && (\n <span className={labelTextStyle}>{label}</span>\n )}\n {track}\n {labelPosition === 'right' && label && (\n <span className={labelTextStyle}>{label}</span>\n )}\n </label>\n {showHelperText && (\n <FormHelperText id={helperId} error={error}>\n {showHelperText}\n </FormHelperText>\n )}\n </div>\n );\n};\n\nSwitch.displayName = 'Switch';\n"],"names":[],"mappings":";;;;;;;;AAkHA;AACE;AACA;AACA;;AAGF;;;;;;;;;;;;AAYG;AACI;AAmBL;AACA;AACA;;AAGA;;AAGA;AACE;;AAEA;;;;AAMA;;AAGF;AAEA;AACA;;AAGE;AACA;AACD;;AAGC;AACA;AACD;;;;AAMD;;;;AAcK;;AAQE;AASP;AACE;;AAGF;;;;AAuBF;AAEA;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Text.js","sources":["
|
|
1
|
+
{"version":3,"file":"Text.js","sources":["src/components/primitives/Text/Text.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport { cx } from '@/utils/cx';\n\nimport {\n textRecipe,\n truncateSingleLineStyle,\n truncateMultiLineStyle,\n} from './Text.css';\n\nimport type { Prettify } from '@/types/utilities';\n\n/**\n * HTML element types that Text component can render as\n */\nexport type TextElement =\n | 'h1'\n | 'h2'\n | 'h3'\n | 'h4'\n | 'h5'\n | 'h6'\n | 'p'\n | 'span'\n | 'div'\n | 'label'\n | 'strong'\n | 'em'\n | 'small';\n\n/**\n * Semantic text variants optimized for editor interfaces\n */\nexport type TextVariant =\n | 'display' // Large headings, titles\n | 'heading' // Section headings\n | 'subheading' // Subsection headings\n | 'body' // Standard body text\n | 'caption' // Small descriptive text\n | 'code' // Inline code text\n | 'inherit'; // Inherit from parent\n\n/**\n * Text size using theme typography tokens\n */\nexport type TextSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Text weight using theme typography tokens\n */\nexport type TextWeight = 'normal' | 'medium' | 'semibold';\n\n/**\n * Text color using theme color tokens\n */\nexport type TextColor =\n | 'primary'\n | 'secondary'\n | 'muted'\n | 'disabled'\n | 'accent'\n | 'success'\n | 'warning'\n | 'error';\n\n/**\n * Text alignment options\n */\nexport type TextAlign = 'left' | 'center' | 'right' | 'justify';\n\n/**\n * Line height using theme typography tokens\n */\nexport type TextLineHeight = 'tight' | 'normal' | 'relaxed';\n\n/**\n * Base props for Text component\n */\nexport interface TextBaseProps extends Omit<\n React.HTMLAttributes<HTMLElement>,\n 'css' | 'color'\n> {\n /**\n * Text content\n */\n children: React.ReactNode;\n\n /**\n * HTML element to render as\n * @default \"span\"\n */\n as?: TextElement;\n\n /**\n * Semantic variant with predefined styling\n * - `display`: Large text for main titles (xl size, semibold weight)\n * - `heading`: Section headings (lg size, medium weight)\n * - `subheading`: Subsection headings (md size, medium weight)\n * - `body`: Standard body text (sm size, normal weight)\n * - `caption`: Small descriptive text (xs size, normal weight)\n * - `code`: Monospace text for code (sm size, mono font)\n * - `inherit`: Inherit typography from parent\n * @default \"body\"\n */\n variant?: TextVariant;\n\n /**\n * Text size using theme typography tokens\n * Overrides variant size if specified\n */\n size?: TextSize;\n\n /**\n * Text weight using theme typography tokens\n * Overrides variant weight if specified\n */\n weight?: TextWeight;\n\n /**\n * Text color using theme color tokens\n * @default \"primary\"\n */\n color?: TextColor;\n\n /**\n * Line height using theme typography tokens\n * Overrides variant line height if specified\n */\n lineHeight?: TextLineHeight;\n\n /**\n * Text alignment\n */\n align?: TextAlign;\n\n /**\n * Whether to truncate text with ellipsis on overflow\n * @default false\n */\n truncate?: boolean;\n\n /**\n * Maximum number of lines before truncating (requires truncate=true)\n * Single line truncation if not specified\n */\n maxLines?: number;\n\n /**\n * Whether text should not wrap to next line\n * @default false\n */\n nowrap?: boolean;\n\n /**\n * Whether to use monospace font family\n * Automatically true for 'code' variant\n * @default false\n */\n mono?: boolean;\n\n /**\n * Additional CSS class name\n */\n className?: string;\n\n /**\n * Test identifier for automated testing\n */\n testId?: string;\n\n ref?: React.Ref<HTMLElement>;\n}\n\n/**\n * Props for the Text component with prettified type for better IntelliSense\n */\nexport type TextProps = Prettify<TextBaseProps>;\n\n/**\n * A versatile text component for consistent typography in editor interfaces.\n *\n * Provides semantic variants, flexible sizing, and comprehensive text styling\n * options optimized for professional editor UIs. Uses theme typography tokens\n * for consistent spacing and sizing across the application.\n *\n * @example\n * ```tsx\n * // Semantic variants\n * <Text variant=\"display\">Main Title</Text>\n * <Text variant=\"heading\">Section Heading</Text>\n * <Text variant=\"body\">Regular paragraph text</Text>\n * <Text variant=\"caption\">Small helper text</Text>\n * <Text variant=\"code\">console.log('hello')</Text>\n *\n * // Custom sizing and colors\n * <Text size=\"lg\" weight=\"semibold\" color=\"accent\">\n * Custom styled text\n * </Text>\n *\n * // With truncation\n * <Text truncate maxLines={2}>\n * Long text that will be truncated after two lines...\n * </Text>\n *\n * // Different HTML elements\n * <Text as=\"h1\" variant=\"display\">Page Title</Text>\n * <Text as=\"p\" variant=\"body\">Paragraph content</Text>\n * <Text as=\"label\" variant=\"caption\">Form label</Text>\n * ```\n */\nexport const Text = /*#__PURE__*/ React.memo<TextProps>(\n ({\n children,\n as: Component = 'span',\n variant = 'body',\n size,\n weight,\n color = 'primary',\n lineHeight,\n align,\n truncate = false,\n maxLines,\n nowrap = false,\n mono = false,\n className,\n style,\n testId,\n ref,\n ...rest\n }) => {\n // Only pass size/weight/lineHeight overrides when variant is not 'inherit'\n const sizeVariant = size && variant !== 'inherit' ? size : undefined;\n const weightVariant = weight && variant !== 'inherit' ? weight : undefined;\n const lineHeightVariant =\n lineHeight && variant !== 'inherit' ? lineHeight : undefined;\n\n const truncateStyle =\n truncate && maxLines ? { WebkitLineClamp: maxLines } : undefined;\n\n return (\n <Component\n ref={ref as React.Ref<never>}\n className={cx(\n textRecipe({\n variant,\n color,\n size: sizeVariant,\n weight: weightVariant,\n lineHeight: lineHeightVariant,\n align,\n nowrap: nowrap || undefined,\n mono: mono || variant === 'code' ? true : undefined,\n truncate: truncate || undefined,\n }),\n truncate && !maxLines && truncateSingleLineStyle,\n truncate && maxLines ? truncateMultiLineStyle : undefined,\n className\n )}\n style={{ ...truncateStyle, ...style }}\n data-testid={testId}\n {...rest}\n >\n {children}\n </Component>\n );\n }\n);\n\nText.displayName = 'Text';\n"],"names":[],"mappings":";;;;;;AAoLA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BG;AACI;;AAqBH;AACA;AACA;AAGA;AAGA;;;AAOQ;AACA;AACA;;;AAGA;;AAED;AAYT;AAGF;;"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
3
|
import React, { useRef, useId, useCallback, useEffect } from 'react';
|
|
4
|
-
import { cx } from '../../../utils/cx.js';
|
|
5
4
|
import { FormHelperText } from '../../form/FormHelperText.js';
|
|
6
5
|
import { FormLabel } from '../../form/FormLabel.js';
|
|
6
|
+
import { cx } from '../../../utils/cx.js';
|
|
7
7
|
import { textAreaRecipe, textAreaWrapperRecipe, textAreaFooterStyle, textAreaContainerStyle } from './TextArea.css.js';
|
|
8
8
|
|
|
9
9
|
/**
|
|
@@ -41,8 +41,7 @@ const TextArea = ({ value, defaultValue, placeholder, size = 'md', disabled = fa
|
|
|
41
41
|
if (typeof ref === 'function')
|
|
42
42
|
ref(node);
|
|
43
43
|
else if (ref)
|
|
44
|
-
ref.current =
|
|
45
|
-
node;
|
|
44
|
+
ref.current = node;
|
|
46
45
|
}, [ref]);
|
|
47
46
|
const autoResize = useCallback(() => {
|
|
48
47
|
if (!autoSizeEnabled)
|
|
@@ -79,7 +78,7 @@ const TextArea = ({ value, defaultValue, placeholder, size = 'md', disabled = fa
|
|
|
79
78
|
onChange?.(next);
|
|
80
79
|
};
|
|
81
80
|
const effectiveHelper = error && errorMessage ? errorMessage : helperText;
|
|
82
|
-
const count = currentValue
|
|
81
|
+
const count = currentValue.length;
|
|
83
82
|
return (jsxs("div", { className: cx(textAreaContainerStyle, className), style: style, children: [label && (jsx(FormLabel, { htmlFor: inputId, disabled: disabled, required: required, children: label })), jsx("div", { className: textAreaWrapperRecipe({ size, error, disabled, focused }), children: jsx("textarea", { ref: setRef, id: inputId, name: name, placeholder: placeholder, disabled: disabled, required: required, readOnly: readOnly, value: isControlled ? value : undefined, defaultValue: isControlled ? undefined : defaultValue, rows: autoSizeEnabled ? (minRows ?? rows) : rows, maxLength: maxLength, className: textAreaRecipe({
|
|
84
83
|
size,
|
|
85
84
|
monospace: monospace || undefined,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextArea.js","sources":["
|
|
1
|
+
{"version":3,"file":"TextArea.js","sources":["src/components/primitives/TextArea/TextArea.tsx"],"sourcesContent":["'use client';\n\nimport React, { useCallback, useEffect, useId, useRef } from 'react';\n\nimport { FormHelperText } from '@/components/form/FormHelperText';\nimport { FormLabel } from '@/components/form/FormLabel';\nimport { cx } from '@/utils/cx';\n\nimport {\n textAreaContainerStyle,\n textAreaFooterStyle,\n textAreaRecipe,\n textAreaWrapperRecipe,\n} from './TextArea.css';\n\nimport type { TextAreaProps } from './TextArea.types';\n\n/**\n * Multi-line text input with optional auto-resize.\n *\n * Visual parity with `Input` — uses the same border, focus ring, and error\n * states. Auto-resize activates when `minRows` or `maxRows` is set and\n * disables the native resize handle.\n *\n * @example\n * ```tsx\n * <TextArea\n * label=\"Description\"\n * minRows={3}\n * maxRows={8}\n * value={value}\n * onChange={setValue}\n * showCount\n * maxLength={500}\n * />\n * ```\n */\nexport const TextArea: React.FC<TextAreaProps> = ({\n value,\n defaultValue,\n placeholder,\n size = 'md',\n disabled = false,\n error = false,\n required = false,\n readOnly = false,\n label,\n helperText,\n errorMessage,\n resize = 'vertical',\n rows = 3,\n minRows,\n maxRows,\n monospace = false,\n maxLength,\n showCount = false,\n className,\n style,\n onChange,\n onFocus,\n onBlur,\n onKeyDown,\n testId,\n ref,\n id,\n name,\n ...rest\n}) => {\n const [focused, setFocused] = React.useState(false);\n const [internalValue, setInternalValue] = React.useState(defaultValue ?? '');\n const textareaRef = useRef<HTMLTextAreaElement | null>(null);\n const autoId = useId();\n const inputId = id ?? autoId;\n\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : internalValue;\n\n const autoSizeEnabled = minRows !== undefined || maxRows !== undefined;\n const effectiveResize = autoSizeEnabled ? 'none' : resize;\n\n const setRef = useCallback(\n (node: HTMLTextAreaElement | null) => {\n textareaRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n },\n [ref]\n );\n\n const autoResize = useCallback(() => {\n if (!autoSizeEnabled) return;\n const el = textareaRef.current;\n if (!el) return;\n\n el.style.height = 'auto';\n\n const measuredLineHeight = parseFloat(getComputedStyle(el).lineHeight);\n const lineHeight = Number.isFinite(measuredLineHeight)\n ? measuredLineHeight\n : 18;\n const minHeight = (minRows ?? 1) * lineHeight;\n const maxHeight = maxRows ? maxRows * lineHeight : Infinity;\n\n const next = Math.min(Math.max(el.scrollHeight, minHeight), maxHeight);\n el.style.height = `${next}px`;\n el.style.overflowY = el.scrollHeight > maxHeight ? 'auto' : 'hidden';\n }, [autoSizeEnabled, minRows, maxRows]);\n\n useEffect(() => {\n autoResize();\n }, [currentValue, autoResize]);\n\n const handleFocus = (event: React.FocusEvent<HTMLTextAreaElement>) => {\n setFocused(true);\n onFocus?.(event);\n };\n const handleBlur = (event: React.FocusEvent<HTMLTextAreaElement>) => {\n setFocused(false);\n onBlur?.(event);\n };\n const handleChange = (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n const next = event.target.value;\n if (!isControlled) setInternalValue(next);\n onChange?.(next);\n };\n\n const effectiveHelper = error && errorMessage ? errorMessage : helperText;\n const count = currentValue.length;\n\n return (\n <div className={cx(textAreaContainerStyle, className)} style={style}>\n {label && (\n <FormLabel htmlFor={inputId} disabled={disabled} required={required}>\n {label}\n </FormLabel>\n )}\n\n <div\n className={textAreaWrapperRecipe({ size, error, disabled, focused })}\n >\n <textarea\n ref={setRef}\n id={inputId}\n name={name}\n placeholder={placeholder}\n disabled={disabled}\n required={required}\n readOnly={readOnly}\n value={isControlled ? value : undefined}\n defaultValue={isControlled ? undefined : defaultValue}\n rows={autoSizeEnabled ? (minRows ?? rows) : rows}\n maxLength={maxLength}\n className={textAreaRecipe({\n size,\n monospace: monospace || undefined,\n })}\n style={{ resize: effectiveResize }}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={onKeyDown}\n data-testid={testId}\n aria-invalid={error || undefined}\n {...rest}\n />\n </div>\n\n {(effectiveHelper !== undefined && effectiveHelper !== '') ||\n showCount ? (\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'flex-start',\n gap: 8,\n }}\n >\n {effectiveHelper !== undefined && effectiveHelper !== '' ? (\n <FormHelperText error={error}>{effectiveHelper}</FormHelperText>\n ) : (\n <span />\n )}\n {showCount && (\n <div className={textAreaFooterStyle}>\n {maxLength !== undefined ? `${count}/${maxLength}` : count}\n </div>\n )}\n </div>\n ) : null}\n </div>\n );\n};\n\nTextArea.displayName = 'TextArea';\n"],"names":[],"mappings":";;;;;;;;AAiBA;;;;;;;;;;;;;;;;;;;AAmBG;AACI;AA+BL;AACA;AACA;AACA;AACA;AAEA;;;;AAMA;AAEI;;;AAEK;AAAS;AAChB;AAIF;AACE;;AACA;AACA;;AAEA;;AAGA;AACE;;;AAGF;AAEA;;AAEA;;;AAIA;AACF;AAEA;;AAEE;AACF;AACA;;AAEE;AACF;AACA;AACE;AACA;;AACA;AACF;AAEA;AACA;AAEA;;;AA0BS;AAaL;AAGM;AACA;AACA;AACA;AACD;AAgBX;AAEA;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx } from 'react/jsx-runtime';
|
|
3
|
-
import React from 'react';
|
|
4
3
|
import { Tooltip } from '@base-ui/react/tooltip';
|
|
4
|
+
import React from 'react';
|
|
5
5
|
import { cx } from '../../../utils/cx.js';
|
|
6
6
|
import { tooltipArrowStyle, arrowFillStyle } from './Tooltip.css.js';
|
|
7
7
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Arrow.js","sources":["
|
|
1
|
+
{"version":3,"file":"Arrow.js","sources":["src/components/primitives/Tooltip/Arrow.tsx"],"sourcesContent":["'use client';\n\nimport { Tooltip } from '@base-ui/react/tooltip';\nimport React from 'react';\n\nimport { cx } from '@/utils/cx';\n\nimport { arrowFillStyle, tooltipArrowStyle } from './Tooltip.css';\n\nexport const ArrowSvg = (props: React.ComponentProps<'svg'>) => {\n return (\n <svg\n width=\"20\"\n height=\"10\"\n viewBox=\"0 0 20 10\"\n fill=\"none\"\n style={{\n // Improve SVG rendering quality\n shapeRendering: 'geometricPrecision',\n imageRendering: 'crisp-edges',\n }}\n {...props}\n >\n <path\n className={arrowFillStyle}\n d=\"M9.66437 2.60207L4.80758 6.97318C4.07308 7.63423 3.11989 8 2.13172 8H0V10H20V8H18.5349C17.5468 8 16.5936 7.63423 15.8591 6.97318L11.0023 2.60207C10.622 2.2598 10.0447 2.25979 9.66437 2.60207Z\"\n />\n </svg>\n );\n};\n\nexport const StyledTooltipArrow = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof Tooltip.Arrow>\n>(({ className, ...props }, ref) => (\n <Tooltip.Arrow\n ref={ref}\n className={cx(\n tooltipArrowStyle,\n typeof className === 'string' ? className : undefined\n )}\n {...props}\n />\n));\n\nStyledTooltipArrow.displayName = 'StyledTooltipArrow';\n"],"names":[],"mappings":";;;;;;;AASO;AACL;;AAQM;AACA;AACD;AASP;AAEO;AAcP;;"}
|
|
@@ -3,8 +3,8 @@ import { jsx, jsxs } from 'react/jsx-runtime';
|
|
|
3
3
|
import { Tooltip as Tooltip$1 } from '@base-ui/react/tooltip';
|
|
4
4
|
import { cx } from '../../../utils/cx.js';
|
|
5
5
|
import { StyledTooltipArrow, ArrowSvg } from './Arrow.js';
|
|
6
|
-
import { parsePlacement, parseCollisionStrategy } from './utils.js';
|
|
7
6
|
import { tooltipTriggerStyle, tooltipContentStyle } from './Tooltip.css.js';
|
|
7
|
+
import { parsePlacement, parseCollisionStrategy } from './utils.js';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* A tooltip component that displays contextual information on hover.
|
|
@@ -135,9 +135,11 @@ const Tooltip = ({ children, title, placement = 'top', collision = 'smart', coll
|
|
|
135
135
|
finalPositionerProps.collisionBoundary = boundary;
|
|
136
136
|
}
|
|
137
137
|
}
|
|
138
|
-
// Handle cursor tracking
|
|
138
|
+
// Handle cursor tracking. Copy into a local object instead of mutating the
|
|
139
|
+
// caller-owned `rootProps` prop.
|
|
140
|
+
const finalRootProps = { ...rootProps };
|
|
139
141
|
if (trackCursor) {
|
|
140
|
-
|
|
142
|
+
finalRootProps.trackCursorAxis = trackCursor;
|
|
141
143
|
}
|
|
142
144
|
// Build animation transition style. Honors `prefers-reduced-motion: reduce`
|
|
143
145
|
// by collapsing to `transition: none` regardless of caller-passed config —
|
|
@@ -145,15 +147,15 @@ const Tooltip = ({ children, title, placement = 'top', collision = 'smart', coll
|
|
|
145
147
|
const prefersReducedMotion = typeof window !== 'undefined' &&
|
|
146
148
|
typeof window.matchMedia === 'function' &&
|
|
147
149
|
window.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
|
148
|
-
const animated = animation
|
|
149
|
-
const duration = animation
|
|
150
|
-
const easing = animation
|
|
150
|
+
const animated = animation.animated !== false && !prefersReducedMotion;
|
|
151
|
+
const duration = animation.duration ?? 200;
|
|
152
|
+
const easing = animation.easing ?? 'ease-out';
|
|
151
153
|
const animationStyle = animated
|
|
152
154
|
? {
|
|
153
155
|
transition: `opacity ${duration}ms ${easing}, transform ${duration}ms ${easing}`,
|
|
154
156
|
}
|
|
155
157
|
: { transition: 'none' };
|
|
156
|
-
return (jsx(Tooltip$1.Provider, { delay: delay, closeDelay: closeDelay, ...
|
|
158
|
+
return (jsx(Tooltip$1.Provider, { delay: delay, closeDelay: closeDelay, ...finalRootProps, children: jsxs(Tooltip$1.Root, { children: [jsx(Tooltip$1.Trigger, { render: props => (jsx("div", { ...props, className: cx(tooltipTriggerStyle, props.className) })), children: children }), jsx(Tooltip$1.Portal, { children: jsx(Tooltip$1.Positioner, { ...finalPositionerProps, children: jsx(Tooltip$1.Popup, { render: props => (jsxs("div", { ...props, className: cx(tooltipContentStyle, className, props.className), "data-testid": testId, id: id, style: {
|
|
157
159
|
...animationStyle,
|
|
158
160
|
...style,
|
|
159
161
|
...props.style,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tooltip.js","sources":["
|
|
1
|
+
{"version":3,"file":"Tooltip.js","sources":["src/components/primitives/Tooltip/Tooltip.tsx"],"sourcesContent":["'use client';\n\n// src/components/primitives/Tooltip/Tooltip.tsx\nimport { Tooltip as BaseTooltip } from '@base-ui/react/tooltip';\nimport React from 'react';\n\nimport { cx } from '@/utils/cx';\n\nimport { ArrowSvg, StyledTooltipArrow } from './Arrow';\nimport { tooltipContentStyle, tooltipTriggerStyle } from './Tooltip.css';\nimport {\n CollisionAvoidance,\n TooltipAnimation,\n TooltipCollisionConfig,\n TooltipCollisionStrategy,\n TooltipPlacement,\n TooltipPositioner,\n BaseTooltipPositionerProps,\n BaseTooltipRootProps,\n} from './types';\nimport { parseCollisionStrategy, parsePlacement } from './utils';\n\nimport type { Prettify } from '@/types/utilities';\n\ninterface TooltipBaseProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'css' | 'title'\n> {\n /**\n * The trigger element that will show the tooltip on hover.\n * Must be a single React element or component.\n *\n * @example\n * <Button>Hover me</Button>\n * <IconButton><SaveIcon /></IconButton>\n */\n children: React.ReactElement;\n\n /**\n * The content to display in the tooltip.\n * Can be simple text or a complex React node for advanced customization.\n *\n * @example\n * \"Save file\"\n * <div><strong>Save</strong><br />Ctrl+S</div>\n */\n title: React.ReactNode;\n\n /**\n * Intuitive placement similar to MUI\n * @default \"top\"\n */\n placement?: TooltipPlacement;\n\n /**\n * Collision handling strategy\n * @default \"smart\"\n */\n collision?: TooltipCollisionStrategy;\n\n /**\n * Advanced collision configuration for power users\n * When provided, overrides the collision strategy\n */\n collisionConfig?: TooltipCollisionConfig;\n\n /**\n * Advanced positioning configuration\n */\n positioner?: TooltipPositioner;\n\n /**\n * Animation configuration\n */\n animation?: TooltipAnimation;\n\n /**\n * Delay in milliseconds before showing the tooltip\n * @default 600\n */\n delay?: number;\n\n /**\n * Delay in milliseconds before hiding the tooltip\n * @default 0\n */\n closeDelay?: number;\n\n /**\n * Whether to show the arrow pointing to the trigger\n * @default true\n */\n arrow?: boolean;\n\n /**\n * Whether the tooltip is disabled\n * When true, tooltip will not appear\n * @default false\n */\n disabled?: boolean;\n\n /**\n * Direct props passed to Base UI Root component\n * For power users who need full control\n */\n rootProps?: Partial<BaseTooltipRootProps>;\n\n /**\n * Direct props passed to Base UI Positioner component\n * For power users who need full control\n */\n positionerProps?: Partial<BaseTooltipPositionerProps>;\n\n /**\n * Test identifier for automated testing\n */\n testId?: string;\n\n ref?: React.Ref<HTMLDivElement>;\n}\n\n/**\n * Props for the Tooltip component with prettified type for better IntelliSense\n */\nexport type TooltipProps = Prettify<TooltipBaseProps>;\n\n/**\n * A tooltip component that displays contextual information on hover.\n *\n * Built on @base-ui/react for robust accessibility and positioning.\n * Provides an intuitive API similar to MUI with advanced positioning and collision handling.\n * Supports both simple text and complex React nodes for advanced tooltip content.\n *\n * @example\n * ```tsx\n * // Simple text tooltip\n * <Tooltip title=\"Save your work\">\n * <Button>Save</Button>\n * </Tooltip>\n *\n * // Intuitive positioning (MUI-style)\n * <Tooltip placement=\"bottom-start\" title=\"Menu options\">\n * <IconButton><MenuIcon /></IconButton>\n * </Tooltip>\n *\n * // Intelligent collision handling (new default)\n * <Tooltip collision=\"smart\" title=\"Intelligent positioning\">\n * <Button>Smart tooltip</Button>\n * </Tooltip>\n *\n * // Advanced collision configuration\n * <Tooltip\n * collisionConfig={{\n * side: 'flip',\n * align: 'shift',\n * fallbackAxisSide: 'start',\n * hideWhenDetached: true\n * }}\n * title=\"Custom collision handling\"\n * >\n * <Button>Advanced collision</Button>\n * </Tooltip>\n *\n * // Advanced positioning\n * <Tooltip\n * positioner={{\n * offset: 12,\n * padding: 10,\n * sticky: true,\n * boundary: '#container'\n * }}\n * title=\"Advanced positioning\"\n * >\n * <Button>Advanced</Button>\n * </Tooltip>\n *\n * // Custom animations\n * <Tooltip\n * animation={{\n * animated: true,\n * duration: 300,\n * easing: 'ease-in-out'\n * }}\n * title=\"Custom animation\"\n * >\n * <Button>Animated</Button>\n * </Tooltip>\n *\n * // Interactive tooltip\n * <Tooltip\n * hoverable={true}\n * closeDelay={300}\n * title={\n * <div>\n * <strong>Interactive Content</strong>\n * <br />\n * <button>Click me</button>\n * </div>\n * }\n * >\n * <Button>Hoverable tooltip</Button>\n * </Tooltip>\n *\n * // Full control with raw props\n * <Tooltip\n * arrow={false}\n * rootProps={{ trackCursorAxis: 'x' }}\n * positionerProps={{ arrowPadding: 20 }}\n * title=\"Full control\"\n * >\n * <Button>Power user</Button>\n * </Tooltip>\n * ```\n */\nexport const Tooltip: React.FC<TooltipProps> = ({\n children,\n title,\n placement = 'top',\n collision = 'smart',\n collisionConfig,\n positioner = {},\n animation = {},\n delay = 600,\n closeDelay = 0,\n arrow = true,\n disabled = false,\n rootProps = {},\n positionerProps = {},\n className,\n testId,\n id,\n style,\n ref,\n ...htmlProps\n}) => {\n // If disabled, return just the children without tooltip\n if (disabled) {\n return children;\n }\n\n // Parse placement into side and align\n const { side, align } = parsePlacement(placement);\n\n // Parse collision strategy or use custom config\n const collisionSettings = collisionConfig\n ? {\n collisionAvoidance: {\n side: collisionConfig.side ?? 'flip',\n align: collisionConfig.align ?? 'shift',\n fallbackAxisSide: collisionConfig.fallbackAxisSide ?? 'none',\n } as CollisionAvoidance,\n }\n : parseCollisionStrategy(collision);\n\n // Prepare positioner configuration\n const {\n offset = 8,\n padding = 8,\n sticky = false,\n boundary,\n trackCursor,\n } = positioner;\n\n // Prepare final positioner props\n const finalPositionerProps: Partial<BaseTooltipPositionerProps> = {\n side,\n align,\n sideOffset: offset,\n collisionPadding: padding,\n sticky,\n collisionAvoidance: collisionSettings.collisionAvoidance,\n ...positionerProps,\n };\n\n // Handle boundary if specified\n if (boundary) {\n if (typeof boundary === 'string') {\n const boundaryElement = document.querySelector(boundary);\n if (boundaryElement) {\n finalPositionerProps.collisionBoundary = boundaryElement;\n }\n } else {\n finalPositionerProps.collisionBoundary = boundary;\n }\n }\n\n // Handle cursor tracking. Copy into a local object instead of mutating the\n // caller-owned `rootProps` prop.\n const finalRootProps: Partial<BaseTooltipRootProps> = { ...rootProps };\n if (trackCursor) {\n finalRootProps.trackCursorAxis = trackCursor;\n }\n\n // Build animation transition style. Honors `prefers-reduced-motion: reduce`\n // by collapsing to `transition: none` regardless of caller-passed config —\n // user OS-level preference always wins over component config.\n const prefersReducedMotion =\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n const animated = animation.animated !== false && !prefersReducedMotion;\n const duration = animation.duration ?? 200;\n const easing = animation.easing ?? 'ease-out';\n\n const animationStyle: React.CSSProperties = animated\n ? {\n transition: `opacity ${duration}ms ${easing}, transform ${duration}ms ${easing}`,\n }\n : { transition: 'none' };\n\n return (\n <BaseTooltip.Provider\n delay={delay}\n closeDelay={closeDelay}\n {...finalRootProps}\n >\n <BaseTooltip.Root>\n <BaseTooltip.Trigger\n render={props => (\n <div\n {...props}\n className={cx(tooltipTriggerStyle, props.className)}\n />\n )}\n >\n {children}\n </BaseTooltip.Trigger>\n\n <BaseTooltip.Portal>\n <BaseTooltip.Positioner {...finalPositionerProps}>\n <BaseTooltip.Popup\n render={props => (\n <div\n {...props}\n className={cx(\n tooltipContentStyle,\n className,\n props.className\n )}\n data-testid={testId}\n id={id}\n style={{\n ...animationStyle,\n ...style,\n ...props.style,\n }}\n ref={ref}\n {...htmlProps}\n >\n {title}\n {arrow && (\n <StyledTooltipArrow>\n <ArrowSvg />\n </StyledTooltipArrow>\n )}\n </div>\n )}\n />\n </BaseTooltip.Positioner>\n </BaseTooltip.Portal>\n </BaseTooltip.Root>\n </BaseTooltip.Provider>\n );\n};\n\nTooltip.displayName = 'Tooltip';\n"],"names":[],"mappings":";;;;;;;;AA8HA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuFG;AACI;;;AAuBH;;;;;;AAQA;AACI;AACE;AACA;AACA;AACqB;AACxB;AACH;;AAGF;;AASA;;;AAGE;AACA;;;AAGA;;;;AAKA;;;AAGI;;;;AAGF;;;;;AAMJ;;AAEE;;;;;AAMF;AAEE;AACA;;AAEF;AACA;;AAGE;;AAEG;AACH;;AAkCgB;AACA;;;AAoBpB;AAEA;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["src/components/primitives/Tooltip/utils.ts"],"sourcesContent":["import type {\n TooltipPlacement,\n TooltipCollisionStrategy,\n BaseTooltipPositionerProps,\n CollisionAvoidance,\n} from './types';\n\n/**\n * Convert our placement prop to Base UI side and align\n */\nexport const parsePlacement = (placement: TooltipPlacement) => {\n const [side, align = 'center'] = placement.split('-') as [\n BaseTooltipPositionerProps['side'],\n BaseTooltipPositionerProps['align']?,\n ];\n return { side, align };\n};\n\n/**\n * Convert collision strategy to Base UI CollisionAvoidance config\n */\nexport const parseCollisionStrategy = (\n strategy: TooltipCollisionStrategy\n): {\n collisionAvoidance: CollisionAvoidance;\n hideWhenDetached?: boolean;\n} => {\n switch (strategy) {\n case 'flip':\n return {\n collisionAvoidance: {\n side: 'flip',\n align: 'none',\n fallbackAxisSide: 'none',\n },\n };\n\n case 'shift':\n return {\n collisionAvoidance: {\n side: 'shift',\n align: 'shift',\n fallbackAxisSide: 'none',\n },\n };\n\n case 'hide':\n return {\n collisionAvoidance: undefined,\n hideWhenDetached: true,\n };\n\n case 'flip-shift':\n return {\n collisionAvoidance: {\n side: 'flip',\n align: 'shift',\n fallbackAxisSide: 'none',\n },\n };\n\n case 'smart':\n return {\n collisionAvoidance: {\n side: 'flip',\n align: 'shift',\n fallbackAxisSide: 'start',\n },\n };\n\n case 'none':\n return {\n collisionAvoidance: undefined,\n };\n\n default:\n return {\n collisionAvoidance: {\n side: 'flip',\n align: 'shift',\n fallbackAxisSide: 'start',\n },\n };\n }\n};\n"],"names":[],"mappings":"AAOA;;AAEG;AACI,MAAM,cAAc,GAAG,CAAC,SAA2B,KAAI;AAC5D,IAAA,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAGnD;AACD,IAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE;AACxB;AAEA;;AAEG;AACI,MAAM,sBAAsB,GAAG,CACpC,QAAkC,KAIhC;IACF,QAAQ,QAAQ;AACd,QAAA,KAAK,MAAM;YACT,OAAO;AACL,gBAAA,kBAAkB,EAAE;AAClB,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,gBAAgB,EAAE,MAAM;AACzB,iBAAA;aACF;AAEH,QAAA,KAAK,OAAO;YACV,OAAO;AACL,gBAAA,kBAAkB,EAAE;AAClB,oBAAA,IAAI,EAAE,OAAO;AACb,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,gBAAgB,EAAE,MAAM;AACzB,iBAAA;aACF;AAEH,QAAA,KAAK,MAAM;YACT,OAAO;AACL,gBAAA,kBAAkB,EAAE,SAAS;AAC7B,gBAAA,gBAAgB,EAAE,IAAI;aACvB;AAEH,QAAA,KAAK,YAAY;YACf,OAAO;AACL,gBAAA,kBAAkB,EAAE;AAClB,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,gBAAgB,EAAE,MAAM;AACzB,iBAAA;aACF;AAEH,QAAA,KAAK,OAAO;YACV,OAAO;AACL,gBAAA,kBAAkB,EAAE;AAClB,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,gBAAgB,EAAE,OAAO;AAC1B,iBAAA;aACF;AAEH,QAAA,KAAK,MAAM;YACT,OAAO;AACL,gBAAA,kBAAkB,EAAE,SAAS;aAC9B;AAEH,QAAA;YACE,OAAO;AACL,gBAAA,kBAAkB,EAAE;AAClB,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,gBAAgB,EAAE,OAAO;AAC1B,iBAAA;aACF;;AAEP;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VisuallyHidden.js","sources":["
|
|
1
|
+
{"version":3,"file":"VisuallyHidden.js","sources":["src/components/primitives/VisuallyHidden/VisuallyHidden.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport { cx } from '@/utils/cx';\n\nimport {\n visuallyHiddenStyle,\n visuallyHiddenFocusableStyle,\n} from './VisuallyHidden.css';\n\nimport type { VisuallyHiddenProps } from './VisuallyHidden.types';\n\n/**\n * Hides content visually while keeping it accessible to screen readers.\n *\n * Implements the canonical `sr-only` / `visually-hidden` pattern. Use it for\n * screen-reader-only labels, additional context next to icons, and\n * skip-to-content links (with `focusable`).\n *\n * Don't use this to hide content from sighted users for layout reasons —\n * that's `display: none`. This component keeps content in the accessibility\n * tree on purpose.\n *\n * @example\n * ```tsx\n * // SR-only label next to an icon-only button\n * <button>\n * <SearchIcon />\n * <VisuallyHidden>Search</VisuallyHidden>\n * </button>\n *\n * // Skip link revealed on focus\n * <VisuallyHidden as=\"a\" href=\"#main\" focusable>\n * Skip to content\n * </VisuallyHidden>\n * ```\n */\nexport const VisuallyHidden = /*#__PURE__*/ React.memo<VisuallyHiddenProps>(\n ({\n as: Component = 'span',\n focusable = false,\n children,\n className,\n style,\n testId,\n ref,\n ...rest\n }) => {\n return (\n <Component\n ref={ref as React.Ref<never>}\n className={cx(\n focusable ? visuallyHiddenFocusableStyle : visuallyHiddenStyle,\n className\n )}\n style={style}\n data-testid={testId}\n {...rest}\n >\n {children}\n </Component>\n );\n }\n);\n\nVisuallyHidden.displayName = 'VisuallyHidden';\n"],"names":[],"mappings":";;;;;;AAaA;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;AACI;AAWH;AAcF;AAGF;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
|
-
import { useRef } from 'react';
|
|
4
3
|
import { assignInlineVars } from '@vanilla-extract/dynamic';
|
|
4
|
+
import { useRef } from 'react';
|
|
5
5
|
import { canvasRecipe, ariaLiveRegionStyle, canvasContainerHeightVar, canvasContainerRecipe } from './CanvasContainer.css.js';
|
|
6
6
|
|
|
7
7
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CanvasContainer.js","sources":["
|
|
1
|
+
{"version":3,"file":"CanvasContainer.js","sources":["src/components/primitives/canvas/CanvasContainer.tsx"],"sourcesContent":["'use client';\n\nimport { assignInlineVars } from '@vanilla-extract/dynamic';\nimport React, { useRef } from 'react';\n\nimport {\n canvasContainerRecipe,\n canvasContainerHeightVar,\n canvasRecipe,\n ariaLiveRegionStyle,\n} from './CanvasContainer.css';\n\nimport type { CanvasContainerProps } from './canvas.types';\n\n/**\n * Styled container + canvas + a11y live region.\n *\n * Provides the boilerplate every canvas control needs:\n * - Responsive or fixed-height container\n * - Canvas element with proper styling\n * - Screen reader announcements region\n * - Disabled opacity\n * - Focus-visible ring\n *\n * Does NOT manage rendering — consumers use useCanvasSetup + useCanvasRenderer.\n */\nexport const CanvasContainer: React.FC<CanvasContainerProps> = ({\n canvasRef,\n height = 200,\n responsive = false,\n disabled = false,\n role = 'application',\n ariaLabel,\n ariaRoledescription,\n liveAnnouncement,\n handlers,\n className,\n style,\n testId,\n id,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n\n return (\n <div\n ref={containerRef}\n className={`${canvasContainerRecipe({ responsive })}${className ? ` ${className}` : ''}`}\n style={{\n ...style,\n ...assignInlineVars({\n [canvasContainerHeightVar]: `${height}px`,\n }),\n minHeight: `${height}px`,\n }}\n id={id}\n data-testid={testId}\n >\n <canvas\n ref={canvasRef}\n className={canvasRecipe({ disabled })}\n role={role}\n aria-label={ariaLabel}\n aria-roledescription={ariaRoledescription}\n tabIndex={disabled ? -1 : 0}\n onPointerDown={handlers?.onPointerDown}\n onPointerMove={handlers?.onPointerMove}\n onPointerUp={handlers?.onPointerUp}\n onDoubleClick={handlers?.onDoubleClick}\n onKeyDown={handlers?.onKeyDown}\n />\n <div className={ariaLiveRegionStyle} aria-live=\"polite\" role=\"status\">\n {liveAnnouncement}\n </div>\n </div>\n );\n};\n\nCanvasContainer.displayName = 'CanvasContainer';\n"],"names":[],"mappings":";;;;;;AAcA;;;;;;;;;;;AAWG;AACI;AAeL;AAEA;AAKM;AACA;AACE;;;AAGH;AAsBP;AAEA;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasCoords.js","sources":["
|
|
1
|
+
{"version":3,"file":"canvasCoords.js","sources":["src/components/primitives/canvas/canvasCoords.ts"],"sourcesContent":["import type { CanvasViewport, Point2D } from './canvas.types';\n\n/**\n * Convert domain coordinates to canvas pixel coordinates.\n *\n * Y axis is flipped: domain Y goes up, canvas Y goes down.\n */\nexport function domainToCanvas(\n domainX: number,\n domainY: number,\n viewport: CanvasViewport,\n canvasWidth: number,\n canvasHeight: number\n): { px: number; py: number } {\n const [vxMin, vxMax] = viewport.viewX;\n const [vyMin, vyMax] = viewport.viewY;\n\n const vw = vxMax - vxMin || 1;\n const vh = vyMax - vyMin || 1;\n\n const px = ((domainX - vxMin) / vw) * canvasWidth;\n const py = ((vyMax - domainY) / vh) * canvasHeight;\n\n return { px, py };\n}\n\n/**\n * Convert canvas pixel coordinates to domain coordinates.\n *\n * Inverse of domainToCanvas — Y axis is flipped.\n */\nexport function canvasToDomain(\n px: number,\n py: number,\n viewport: CanvasViewport,\n canvasWidth: number,\n canvasHeight: number\n): Point2D {\n const [vxMin, vxMax] = viewport.viewX;\n const [vyMin, vyMax] = viewport.viewY;\n\n const vw = vxMax - vxMin || 1;\n const vh = vyMax - vyMin || 1;\n\n const x = vxMin + (px / canvasWidth) * vw;\n const y = vyMax - (py / canvasHeight) * vh;\n\n return { x, y };\n}\n\n/**\n * Test whether a canvas pixel position is within tolerance of a domain point.\n *\n * @returns Distance in pixels, or Infinity if outside tolerance\n */\nexport function hitTestPoint(\n px: number,\n py: number,\n point: Point2D,\n viewport: CanvasViewport,\n canvasWidth: number,\n canvasHeight: number,\n tolerancePx: number = 10\n): number {\n const target = domainToCanvas(\n point.x,\n point.y,\n viewport,\n canvasWidth,\n canvasHeight\n );\n const dist = Math.sqrt((px - target.px) ** 2 + (py - target.py) ** 2);\n return dist <= tolerancePx ? dist : Infinity;\n}\n\n/**\n * Get the canvas-pixel position of a pointer event relative to the canvas.\n */\nexport function getCanvasPointerPosition(\n e: { clientX: number; clientY: number },\n canvas: HTMLCanvasElement\n): { px: number; py: number } {\n const rect = canvas.getBoundingClientRect();\n return {\n px: e.clientX - rect.left,\n py: e.clientY - rect.top,\n };\n}\n"],"names":[],"mappings":"AAEA;;;;AAIG;AACG,SAAU,cAAc,CAC5B,OAAe,EACf,OAAe,EACf,QAAwB,EACxB,WAAmB,EACnB,YAAoB,EAAA;IAEpB,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK;IACrC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK;AAErC,IAAA,MAAM,EAAE,GAAG,KAAK,GAAG,KAAK,IAAI,CAAC;AAC7B,IAAA,MAAM,EAAE,GAAG,KAAK,GAAG,KAAK,IAAI,CAAC;AAE7B,IAAA,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,GAAG,KAAK,IAAI,EAAE,IAAI,WAAW;AACjD,IAAA,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,GAAG,OAAO,IAAI,EAAE,IAAI,YAAY;AAElD,IAAA,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE;AACnB;AAEA;;;;AAIG;AACG,SAAU,cAAc,CAC5B,EAAU,EACV,EAAU,EACV,QAAwB,EACxB,WAAmB,EACnB,YAAoB,EAAA;IAEpB,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK;IACrC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK;AAErC,IAAA,MAAM,EAAE,GAAG,KAAK,GAAG,KAAK,IAAI,CAAC;AAC7B,IAAA,MAAM,EAAE,GAAG,KAAK,GAAG,KAAK,IAAI,CAAC;IAE7B,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,GAAG,WAAW,IAAI,EAAE;IACzC,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,GAAG,YAAY,IAAI,EAAE;AAE1C,IAAA,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE;AACjB;AAEA;;;;AAIG;SACa,YAAY,CAC1B,EAAU,EACV,EAAU,EACV,KAAc,EACd,QAAwB,EACxB,WAAmB,EACnB,YAAoB,EACpB,cAAsB,EAAE,EAAA;AAExB,IAAA,MAAM,MAAM,GAAG,cAAc,CAC3B,KAAK,CAAC,CAAC,EACP,KAAK,CAAC,CAAC,EACP,QAAQ,EACR,WAAW,EACX,YAAY,CACb;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;IACrE,OAAO,IAAI,IAAI,WAAW,GAAG,IAAI,GAAG,QAAQ;AAC9C;AAEA;;AAEG;AACG,SAAU,wBAAwB,CACtC,CAAuC,EACvC,MAAyB,EAAA;AAEzB,IAAA,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE;IAC3C,OAAO;AACL,QAAA,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI;AACzB,QAAA,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG;KACzB;AACH;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasDrawing.js","sources":["../../../../../../src/components/primitives/canvas/canvasDrawing.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"canvasDrawing.js","sources":["src/components/primitives/canvas/canvasDrawing.ts"],"sourcesContent":["import { clamp } from '@/utils/mathUtils';\n\nimport { domainToCanvas } from './canvasCoords';\n\nimport type {\n CanvasViewport,\n DomainBounds,\n CanvasThemeColors,\n GridOptions,\n AxisLabelOptions,\n CrosshairOptions,\n PointMarkerOptions,\n} from './canvas.types';\n\n/**\n * Format a number for axis labels.\n * Integers show as \"0\", \"1\". Clean fractions show as \"0.25\", \"0.5\".\n * Others show with minimal decimals needed.\n */\nexport function formatLabel(value: number, domainRange: number): string {\n const rounded = Math.round(value * 1e10) / 1e10;\n if (Number.isInteger(rounded)) return rounded.toFixed(0);\n\n if (domainRange <= 1) {\n const str = rounded.toFixed(2);\n if (str.endsWith('0')) return rounded.toFixed(1);\n return str;\n }\n\n if (domainRange <= 10) return rounded.toFixed(1);\n return rounded.toFixed(0);\n}\n\n/**\n * Draw grid lines at clean domain values.\n * Grid lines subdivide the domain range into equal parts.\n *\n * Extracted from CurveEditor's drawGrid — identical visual output.\n */\nexport function drawGrid(\n ctx: CanvasRenderingContext2D,\n w: number,\n h: number,\n theme: CanvasThemeColors,\n options: GridOptions\n): void {\n const { subdivisions, domain, viewport, opacity = 1 } = options;\n const { domainX, domainY } = domain;\n const dxRange = domainX[1] - domainX[0] || 1;\n const dyRange = domainY[1] - domainY[0] || 1;\n\n ctx.lineWidth = 1;\n\n // Vertical grid lines (subdivide domain X)\n const xStep = dxRange / subdivisions;\n for (let i = 0; i <= subdivisions; i++) {\n const domX = domainX[0] + i * xStep;\n const { px } = domainToCanvas(domX, 0, viewport, w, h);\n const isBound = i === 0 || i === subdivisions;\n ctx.globalAlpha = opacity * (isBound ? 0.25 : 0.12);\n ctx.strokeStyle = theme.borderDefault;\n ctx.beginPath();\n ctx.moveTo(Math.round(px) + 0.5, 0);\n ctx.lineTo(Math.round(px) + 0.5, h);\n ctx.stroke();\n }\n\n // Horizontal grid lines (subdivide domain Y)\n const yStep = dyRange / subdivisions;\n for (let i = 0; i <= subdivisions; i++) {\n const domY = domainY[0] + i * yStep;\n const { py } = domainToCanvas(0, domY, viewport, w, h);\n const isBound = i === 0 || i === subdivisions;\n ctx.globalAlpha = opacity * (isBound ? 0.25 : 0.12);\n ctx.strokeStyle = theme.borderDefault;\n ctx.beginPath();\n ctx.moveTo(0, Math.round(py) + 0.5);\n ctx.lineTo(w, Math.round(py) + 0.5);\n ctx.stroke();\n }\n}\n\n/**\n * Draw stronger lines at the domain boundaries (min/max on both axes).\n */\nexport function drawDomainBounds(\n ctx: CanvasRenderingContext2D,\n w: number,\n h: number,\n theme: CanvasThemeColors,\n domain: DomainBounds,\n viewport: CanvasViewport,\n opacity: number = 1\n): void {\n const { domainX, domainY } = domain;\n\n ctx.globalAlpha = opacity * 0.35;\n ctx.strokeStyle = theme.borderDefault;\n ctx.lineWidth = 1.5;\n\n const { px: pxMin } = domainToCanvas(domainX[0], 0, viewport, w, h);\n ctx.beginPath();\n ctx.moveTo(Math.round(pxMin) + 0.5, 0);\n ctx.lineTo(Math.round(pxMin) + 0.5, h);\n ctx.stroke();\n\n const { px: pxMax } = domainToCanvas(domainX[1], 0, viewport, w, h);\n ctx.beginPath();\n ctx.moveTo(Math.round(pxMax) + 0.5, 0);\n ctx.lineTo(Math.round(pxMax) + 0.5, h);\n ctx.stroke();\n\n const { py: pyMin } = domainToCanvas(0, domainY[0], viewport, w, h);\n ctx.beginPath();\n ctx.moveTo(0, Math.round(pyMin) + 0.5);\n ctx.lineTo(w, Math.round(pyMin) + 0.5);\n ctx.stroke();\n\n const { py: pyMax } = domainToCanvas(0, domainY[1], viewport, w, h);\n ctx.beginPath();\n ctx.moveTo(0, Math.round(pyMax) + 0.5);\n ctx.lineTo(w, Math.round(pyMax) + 0.5);\n ctx.stroke();\n}\n\n/**\n * Draw axis labels at clean domain values.\n *\n * Y labels on the left side, X labels at the bottom.\n * Extracted from CurveEditor's drawAxisLabels — identical layout algorithm.\n */\nexport function drawAxisLabels(\n ctx: CanvasRenderingContext2D,\n w: number,\n h: number,\n theme: CanvasThemeColors,\n options: AxisLabelOptions\n): void {\n const {\n subdivisions,\n domain,\n viewport,\n opacity = 1,\n labelX,\n labelY,\n } = options;\n const { domainX, domainY } = domain;\n const dxRange = domainX[1] - domainX[0] || 1;\n const dyRange = domainY[1] - domainY[0] || 1;\n\n const fontSize = theme.fontSizeXs;\n ctx.globalAlpha = opacity * 0.7;\n ctx.fillStyle = theme.textMuted;\n ctx.font = `${fontSize}px sans-serif`;\n\n const sidePadding = 4;\n const axisGap = 6;\n\n const { px: xAxisMin } = domainToCanvas(domainX[0], 0, viewport, w, h);\n const { px: xAxisMax } = domainToCanvas(domainX[1], 0, viewport, w, h);\n const { py: yAxisMin } = domainToCanvas(0, domainY[0], viewport, w, h);\n const { py: yAxisMax } = domainToCanvas(0, domainY[1], viewport, w, h);\n\n const xTickTop = clamp(\n yAxisMin + axisGap,\n yAxisMax + 2,\n h - fontSize - (labelX ? fontSize + 8 : 2)\n );\n const xAxisLabelTop = labelX\n ? clamp(xTickTop + fontSize + 4, 0, h - fontSize - 1)\n : 0;\n\n const yTickAnchorX = clamp(\n xAxisMin - axisGap,\n sidePadding + 1,\n w - sidePadding\n );\n const yTickMinY = fontSize / 2 + 2;\n const yTickMaxY = Math.max(yTickMinY, xTickTop - 2);\n const yAxisLabelTop = clamp(\n yAxisMax - fontSize - 4,\n sidePadding,\n Math.max(sidePadding, xTickTop - fontSize - 6)\n );\n\n // X axis labels (bottom, aligned to domain subdivisions)\n ctx.textBaseline = 'top';\n const xStep = dxRange / subdivisions;\n for (let i = 0; i <= subdivisions; i++) {\n const domX = domainX[0] + i * xStep;\n const { px } = domainToCanvas(domX, 0, viewport, w, h);\n const label = formatLabel(domX, dxRange);\n\n if (i === 0) {\n ctx.textAlign = 'left';\n ctx.fillText(label, xAxisMin + 2, xTickTop);\n } else if (i === subdivisions) {\n ctx.textAlign = 'right';\n ctx.fillText(label, xAxisMax - 2, xTickTop);\n } else {\n ctx.textAlign = 'center';\n ctx.fillText(label, clamp(px, xAxisMin + 2, xAxisMax - 2), xTickTop);\n }\n }\n\n // Y axis labels (left side, aligned to domain subdivisions)\n ctx.textAlign = 'right';\n ctx.textBaseline = 'middle';\n const yStep = dyRange / subdivisions;\n for (let i = 0; i <= subdivisions; i++) {\n const domY = domainY[0] + i * yStep;\n const { py } = domainToCanvas(0, domY, viewport, w, h);\n const label = formatLabel(domY, dyRange);\n\n const clampedPy = clamp(py, yTickMinY, yTickMaxY);\n ctx.fillText(label, yTickAnchorX, clampedPy);\n }\n\n // Axis name labels\n if (labelX) {\n const textWidth = ctx.measureText(labelX).width;\n const x = clamp(\n xAxisMax + axisGap,\n sidePadding,\n w - sidePadding - textWidth\n );\n ctx.textAlign = 'left';\n ctx.textBaseline = 'top';\n ctx.fillText(labelX, x, xAxisLabelTop);\n }\n if (labelY) {\n const x = clamp(xAxisMin + axisGap, sidePadding, w - sidePadding);\n ctx.textAlign = 'left';\n ctx.textBaseline = 'top';\n ctx.fillText(labelY, x, yAxisLabelTop);\n }\n}\n\n/**\n * Draw crosshair lines through a point.\n *\n * Used by CartesianPicker to show the current selection.\n * Can be solid or dashed, full-span or limited to domain bounds.\n */\nexport function drawCrosshair(\n ctx: CanvasRenderingContext2D,\n w: number,\n h: number,\n theme: CanvasThemeColors,\n options: CrosshairOptions\n): void {\n const {\n point,\n viewport,\n lineStyle = 'dashed',\n lineWidth = 1,\n fullSpan = true,\n opacity = 1,\n } = options;\n\n const { px, py } = domainToCanvas(point.x, point.y, viewport, w, h);\n\n ctx.globalAlpha = opacity * 0.6;\n ctx.strokeStyle = theme.accentPrimary;\n ctx.lineWidth = lineWidth;\n\n if (lineStyle === 'dashed') {\n ctx.setLineDash([4, 4]);\n } else {\n ctx.setLineDash([]);\n }\n\n // Vertical line through point\n ctx.beginPath();\n ctx.moveTo(Math.round(px) + 0.5, fullSpan ? 0 : py - 20);\n ctx.lineTo(Math.round(px) + 0.5, fullSpan ? h : py + 20);\n ctx.stroke();\n\n // Horizontal line through point\n ctx.beginPath();\n ctx.moveTo(fullSpan ? 0 : px - 20, Math.round(py) + 0.5);\n ctx.lineTo(fullSpan ? w : px + 20, Math.round(py) + 0.5);\n ctx.stroke();\n\n ctx.setLineDash([]);\n}\n\n/**\n * Draw a circular point marker.\n *\n * Used by CartesianPicker for the selected point.\n * Supports hover and drag visual states.\n */\nexport function drawPointMarker(\n ctx: CanvasRenderingContext2D,\n w: number,\n h: number,\n theme: CanvasThemeColors,\n options: PointMarkerOptions\n): void {\n const {\n point,\n viewport,\n radius = 6,\n hovered = false,\n dragging = false,\n opacity = 1,\n } = options;\n\n const { px, py } = domainToCanvas(point.x, point.y, viewport, w, h);\n const effectiveRadius = hovered || dragging ? radius + 2 : radius;\n\n ctx.globalAlpha = opacity;\n\n // Outer ring\n ctx.beginPath();\n ctx.arc(px, py, effectiveRadius, 0, Math.PI * 2);\n ctx.fillStyle = dragging ? theme.accentPrimary : theme.backgroundSecondary;\n ctx.fill();\n ctx.strokeStyle = theme.accentPrimary;\n ctx.lineWidth = 2;\n ctx.stroke();\n\n // Inner dot\n ctx.beginPath();\n ctx.arc(px, py, 2, 0, Math.PI * 2);\n ctx.fillStyle = theme.accentPrimary;\n ctx.fill();\n}\n\n/**\n * Draw axis origin lines (X=0 and Y=0 if visible within viewport).\n *\n * Useful for CartesianPicker where domain is centered on origin.\n */\nexport function drawOriginAxes(\n ctx: CanvasRenderingContext2D,\n w: number,\n h: number,\n theme: CanvasThemeColors,\n viewport: CanvasViewport,\n opacity: number = 1\n): void {\n const [vxMin, vxMax] = viewport.viewX;\n const [vyMin, vyMax] = viewport.viewY;\n\n ctx.globalAlpha = opacity * 0.5;\n ctx.strokeStyle = theme.textMuted;\n ctx.lineWidth = 1;\n\n // Y axis (x = 0) if in viewport\n if (vxMin <= 0 && vxMax >= 0) {\n const { px } = domainToCanvas(0, 0, viewport, w, h);\n ctx.beginPath();\n ctx.moveTo(Math.round(px) + 0.5, 0);\n ctx.lineTo(Math.round(px) + 0.5, h);\n ctx.stroke();\n }\n\n // X axis (y = 0) if in viewport\n if (vyMin <= 0 && vyMax >= 0) {\n const { py } = domainToCanvas(0, 0, viewport, w, h);\n ctx.beginPath();\n ctx.moveTo(0, Math.round(py) + 0.5);\n ctx.lineTo(w, Math.round(py) + 0.5);\n ctx.stroke();\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasTheme.js","sources":["
|
|
1
|
+
{"version":3,"file":"canvasTheme.js","sources":["src/components/primitives/canvas/canvasTheme.ts"],"sourcesContent":["import { vars } from '@/theme/contract.css';\n\nimport type { CanvasThemeColors } from './canvas.types';\n\n/**\n * Resolve CSS variable references (e.g., `var(--etui-color-text-primary)`)\n * to their computed values via getComputedStyle.\n */\nfunction resolveVar(element: Element, cssVar: string): string {\n const match = cssVar.match(/var\\(([^)]+)\\)/);\n if (!match) return cssVar;\n const varName = match[1];\n if (!varName) return cssVar;\n return getComputedStyle(element).getPropertyValue(varName).trim() || cssVar;\n}\n\n/**\n * Resolve Vanilla Extract CSS variables from a canvas element to\n * actual color values for canvas 2D drawing.\n *\n * Canvas 2D contexts cannot read CSS variables — this resolves them\n * via getComputedStyle.\n */\nexport function resolveCanvasTheme(\n canvas: HTMLCanvasElement\n): CanvasThemeColors {\n return {\n backgroundSecondary: resolveVar(canvas, vars.colors.background.secondary),\n borderDefault: resolveVar(canvas, vars.colors.border.default),\n textMuted: resolveVar(canvas, vars.colors.text.muted),\n textPrimary: resolveVar(canvas, vars.colors.text.primary),\n textSecondary: resolveVar(canvas, vars.colors.text.secondary),\n accentPrimary: resolveVar(canvas, vars.colors.accent.primary),\n fontSizeXs:\n parseFloat(resolveVar(canvas, vars.typography.fontSize.xs)) || 10,\n };\n}\n\n/**\n * Resolve a single CSS variable reference string (e.g. `var(--etui-color-accent-primary)`)\n * to its computed value.\n */\nexport function resolveVarValue(element: Element, cssVar: string): string {\n return resolveVar(element, cssVar);\n}\n"],"names":[],"mappings":";;AAIA;;;AAGG;AACH,SAAS,UAAU,CAAC,OAAgB,EAAE,MAAc,EAAA;IAClD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC;AAC5C,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,MAAM;AACzB,IAAA,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC;AACxB,IAAA,IAAI,CAAC,OAAO;AAAE,QAAA,OAAO,MAAM;AAC3B,IAAA,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,MAAM;AAC7E;AAEA;;;;;;AAMG;AACG,SAAU,kBAAkB,CAChC,MAAyB,EAAA;IAEzB,OAAO;AACL,QAAA,mBAAmB,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC;AACzE,QAAA,aAAa,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;AAC7D,QAAA,SAAS,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACrD,QAAA,WAAW,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AACzD,QAAA,aAAa,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;AAC7D,QAAA,aAAa,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;AAC7D,QAAA,UAAU,EACR,UAAU,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE;KACpE;AACH;AAEA;;;AAGG;AACG,SAAU,eAAe,CAAC,OAAgB,EAAE,MAAc,EAAA;AAC9D,IAAA,OAAO,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;AACpC;;;;"}
|
|
@@ -12,13 +12,19 @@ import { useRef, useCallback, useEffect } from 'react';
|
|
|
12
12
|
function useCanvasRenderer(options) {
|
|
13
13
|
const { draw, deps, paused = false } = options;
|
|
14
14
|
const rafRef = useRef(0);
|
|
15
|
-
|
|
15
|
+
// This hook's contract is to re-run an arbitrary `draw` when caller-supplied
|
|
16
|
+
// `deps` change, so the dependency list is intentionally dynamic rather than
|
|
17
|
+
// a literal — the two rules below cannot model that generic pass-through.
|
|
18
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps, react-hooks/use-memo
|
|
19
|
+
const stableDraw = useCallback(draw, deps);
|
|
16
20
|
useEffect(() => {
|
|
17
21
|
if (paused)
|
|
18
22
|
return;
|
|
19
23
|
cancelAnimationFrame(rafRef.current);
|
|
20
24
|
rafRef.current = requestAnimationFrame(stableDraw);
|
|
21
|
-
return () =>
|
|
25
|
+
return () => {
|
|
26
|
+
cancelAnimationFrame(rafRef.current);
|
|
27
|
+
};
|
|
22
28
|
}, [stableDraw, paused]);
|
|
23
29
|
}
|
|
24
30
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCanvasRenderer.js","sources":["
|
|
1
|
+
{"version":3,"file":"useCanvasRenderer.js","sources":["src/components/primitives/canvas/useCanvasRenderer.ts"],"sourcesContent":["'use client';\n\nimport { useEffect, useRef, useCallback } from 'react';\n\ninterface UseCanvasRendererOptions {\n /** The draw function to call each frame. */\n draw: () => void;\n /** Dependencies array — when these change, the canvas re-renders */\n deps: unknown[];\n /** Whether rendering is paused @default false */\n paused?: boolean;\n}\n\n/**\n * Hook that manages a rAF-based render loop for canvas drawing.\n *\n * Calls the provided draw function whenever deps change.\n * Does NOT run continuously — only re-renders when deps trigger a change.\n *\n * Extracted from CurveEditor's useCurveRenderer rAF pattern.\n */\nexport function useCanvasRenderer(options: UseCanvasRendererOptions): void {\n const { draw, deps, paused = false } = options;\n const rafRef = useRef<number>(0);\n\n // This hook's contract is to re-run an arbitrary `draw` when caller-supplied\n // `deps` change, so the dependency list is intentionally dynamic rather than\n // a literal — the two rules below cannot model that generic pass-through.\n // eslint-disable-next-line react-hooks/exhaustive-deps, react-hooks/use-memo\n const stableDraw = useCallback(draw, deps);\n\n useEffect(() => {\n if (paused) return;\n\n cancelAnimationFrame(rafRef.current);\n rafRef.current = requestAnimationFrame(stableDraw);\n\n return () => {\n cancelAnimationFrame(rafRef.current);\n };\n }, [stableDraw, paused]);\n}\n"],"names":[],"mappings":";;;AAaA;;;;;;;AAOG;AACG;;AAEJ;;;;;;;AASE;;AAEA;AACA;AAEA;AACE;AACF;AACF;AACF;;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import './../../../assets/src/components/primitives/viewport/Viewport.css.ts.vanilla-CkFBJ7Vo.css';
|
|
2
|
+
import { createRuntimeFn } from '@vanilla-extract/recipes/createRuntimeFn';
|
|
3
|
+
|
|
4
|
+
var layerCanvasStyle = 'Viewport_layerCanvasStyle__4kgrsw8';
|
|
5
|
+
var marqueeRectStyle = 'Viewport_marqueeRectStyle__4kgrswb';
|
|
6
|
+
var overlayLayerStyle = 'Viewport_overlayLayerStyle__4kgrswa';
|
|
7
|
+
var viewportHeightVar = 'var(--viewportHeightVar__4kgrsw0)';
|
|
8
|
+
var viewportRootRecipe = createRuntimeFn({defaultClassName:'Viewport_viewportRootRecipe__4kgrsw1',variantClassNames:{responsive:{true:'Viewport_viewportRootRecipe_responsive_true__4kgrsw2',false:'Viewport_viewportRootRecipe_responsive_false__4kgrsw3'},disabled:{true:'Viewport_viewportRootRecipe_disabled_true__4kgrsw4',false:'Viewport_viewportRootRecipe_disabled_false__4kgrsw5'},panning:{true:'Viewport_viewportRootRecipe_panning_true__4kgrsw6',false:'Viewport_viewportRootRecipe_panning_false__4kgrsw7'}},defaultVariants:{responsive:false,disabled:false,panning:false},compoundVariants:[]});
|
|
9
|
+
var worldLayerStyle = 'Viewport_worldLayerStyle__4kgrsw9';
|
|
10
|
+
|
|
11
|
+
export { layerCanvasStyle, marqueeRectStyle, overlayLayerStyle, viewportHeightVar, viewportRootRecipe, worldLayerStyle };
|
|
12
|
+
//# sourceMappingURL=Viewport.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Viewport.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
3
|
+
import { assignInlineVars } from '@vanilla-extract/dynamic';
|
|
4
|
+
import React, { useRef, useMemo, useCallback, useLayoutEffect, useImperativeHandle, useSyncExternalStore } from 'react';
|
|
5
|
+
import '../../../utils/devWarn.js';
|
|
6
|
+
import { useControlledState } from '../../../hooks/useControlledState/useControlledState.js';
|
|
7
|
+
import { useResizeObserver } from '../../../hooks/useResizeObserver/useResizeObserver.js';
|
|
8
|
+
import '../../../hooks/useBreakpoint/useBreakpoint.js';
|
|
9
|
+
import './../../../assets/src/theme/lightTheme.css.ts.vanilla-Ct6f9Iym.css';
|
|
10
|
+
import '@vanilla-extract/css';
|
|
11
|
+
import './../../../assets/src/theme/darkTheme.css.ts.vanilla-BHZ3ecRn.css';
|
|
12
|
+
import './../../../assets/src/theme/globalScrollbars.css.ts.vanilla-BAJwnUEJ.css';
|
|
13
|
+
import '../../../hooks/useNavigationHistory/useNavigationHistory.js';
|
|
14
|
+
import { cx } from '../../../utils/cx.js';
|
|
15
|
+
import { clamp } from '../../../utils/mathUtils.js';
|
|
16
|
+
import { useViewportGestures } from './useViewportGestures.js';
|
|
17
|
+
import { viewportHeightVar, viewportRootRecipe, marqueeRectStyle } from './Viewport.css.js';
|
|
18
|
+
import { ViewportStoreContext, useViewportStore } from './ViewportContext.js';
|
|
19
|
+
import { ViewportStore } from './ViewportStore.js';
|
|
20
|
+
|
|
21
|
+
const IDENTITY_TRANSFORM = { x: 0, y: 0, zoom: 1 };
|
|
22
|
+
// Stable empty defaults so `useViewportGestures` does not re-compute config
|
|
23
|
+
// objects on every render when the consumer passes nothing.
|
|
24
|
+
const EMPTY_PAN = {};
|
|
25
|
+
const EMPTY_ZOOM = {};
|
|
26
|
+
const EMPTY_SELECTION = {};
|
|
27
|
+
function getSlotKind(child) {
|
|
28
|
+
const displayName = child.type
|
|
29
|
+
?.displayName;
|
|
30
|
+
if (displayName === 'ViewportLayer')
|
|
31
|
+
return 'layer';
|
|
32
|
+
if (displayName === 'ViewportWorld')
|
|
33
|
+
return 'world';
|
|
34
|
+
if (displayName === 'ViewportOverlay')
|
|
35
|
+
return 'overlay';
|
|
36
|
+
// Compound components rendered in the overlay slot (e.g. <ViewportMinimap />).
|
|
37
|
+
if (displayName === 'ViewportMinimap')
|
|
38
|
+
return 'overlay';
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
function categorizeChildren(children) {
|
|
42
|
+
const layers = [];
|
|
43
|
+
const worldChildren = [];
|
|
44
|
+
const overlayChildren = [];
|
|
45
|
+
React.Children.forEach(children, child => {
|
|
46
|
+
if (!React.isValidElement(child))
|
|
47
|
+
return;
|
|
48
|
+
const kind = getSlotKind(child);
|
|
49
|
+
if (kind === 'layer')
|
|
50
|
+
layers.push(child);
|
|
51
|
+
else if (kind === 'world')
|
|
52
|
+
worldChildren.push(child);
|
|
53
|
+
else if (kind === 'overlay')
|
|
54
|
+
overlayChildren.push(child);
|
|
55
|
+
});
|
|
56
|
+
return { layers, worldChildren, overlayChildren };
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Viewport — pan/zoom canvas + HTML container for editor-style surfaces
|
|
60
|
+
* such as node graphs, timelines, and 2D world editors.
|
|
61
|
+
*
|
|
62
|
+
* Composes:
|
|
63
|
+
* - Multiple perf-isolated `<ViewportLayer>` canvases (one draw cycle each).
|
|
64
|
+
* - `<ViewportWorld>` for HTML positioned in world coordinates.
|
|
65
|
+
* - `<ViewportOverlay>` for HTML pinned to the viewport (toolbars, minimap).
|
|
66
|
+
*
|
|
67
|
+
* Owns pan/zoom gestures (drag-to-pan, wheel-zoom-toward-cursor, optional
|
|
68
|
+
* pinch and space-to-pan) and optional marquee selection. Transform is
|
|
69
|
+
* controlled or uncontrolled (`useControlledState`-style) and mirrored
|
|
70
|
+
* into an internal `ViewportStore` that powers slice-level subscriptions
|
|
71
|
+
* for layers, world, and overlay children.
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```tsx
|
|
75
|
+
* <Viewport responsive selectionRect={{ enabled: true }}>
|
|
76
|
+
* <ViewportLayer name="grid" draw={drawGrid} invalidateOn={[gridStep]} />
|
|
77
|
+
* <ViewportLayer name="content" draw={drawNodes} invalidateOn={[nodes]} />
|
|
78
|
+
* <ViewportWorld>
|
|
79
|
+
* <NodeView style={{ position: 'absolute', left: 100, top: 200 }} />
|
|
80
|
+
* </ViewportWorld>
|
|
81
|
+
* <ViewportOverlay>
|
|
82
|
+
* <Toolbar />
|
|
83
|
+
* </ViewportOverlay>
|
|
84
|
+
* </Viewport>
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
const Viewport = ({ transform: transformProp, defaultTransform, onTransformChange, minZoom = 0.1, maxZoom = 8, pan, zoom, selectionRect, onSelectionChange, onPanStart, onPanEnd, onZoomStart, onZoomEnd, responsive = false, height = 300, disabled = false, role = 'application', ariaLabel, ariaRoledescription, className, style, testId, id, children, ref, ...rest }) => {
|
|
88
|
+
const rootRef = useRef(null);
|
|
89
|
+
// One store per <Viewport> instance, stable for the lifetime of the component.
|
|
90
|
+
const store = useMemo(() => new ViewportStore(), []);
|
|
91
|
+
// ── Controlled / uncontrolled transform (React state) ──
|
|
92
|
+
const clampTransform = useCallback((t) => ({
|
|
93
|
+
x: t.x,
|
|
94
|
+
y: t.y,
|
|
95
|
+
zoom: clamp(t.zoom, minZoom, maxZoom),
|
|
96
|
+
}), [minZoom, maxZoom]);
|
|
97
|
+
const [transformRaw, setTransformRaw] = useControlledState({
|
|
98
|
+
value: transformProp,
|
|
99
|
+
defaultValue: defaultTransform,
|
|
100
|
+
onChange: onTransformChange,
|
|
101
|
+
fallback: IDENTITY_TRANSFORM,
|
|
102
|
+
});
|
|
103
|
+
const transform = useMemo(() => clampTransform(transformRaw), [transformRaw, clampTransform]);
|
|
104
|
+
const setTransform = useCallback((next) => {
|
|
105
|
+
setTransformRaw(clampTransform(next));
|
|
106
|
+
}, [setTransformRaw, clampTransform]);
|
|
107
|
+
// Mirror React state → store before paint so layer/world subscribers see the
|
|
108
|
+
// latest transform in the same frame.
|
|
109
|
+
useLayoutEffect(() => {
|
|
110
|
+
store.setTransform(transform);
|
|
111
|
+
}, [store, transform]);
|
|
112
|
+
// Wire the store's imperative methods (fitToContent etc.) to React's
|
|
113
|
+
// setTransform and current zoom limits.
|
|
114
|
+
useLayoutEffect(() => {
|
|
115
|
+
store.configureImperative({ setTransform, minZoom, maxZoom });
|
|
116
|
+
}, [store, setTransform, minZoom, maxZoom]);
|
|
117
|
+
// ── Size tracking ──
|
|
118
|
+
useResizeObserver(rootRef, entry => {
|
|
119
|
+
store.setSize({
|
|
120
|
+
width: entry.contentRect.width,
|
|
121
|
+
height: entry.contentRect.height,
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
// Seed size on mount in case ResizeObserver fires asynchronously.
|
|
125
|
+
useLayoutEffect(() => {
|
|
126
|
+
const el = rootRef.current;
|
|
127
|
+
if (!el)
|
|
128
|
+
return;
|
|
129
|
+
const rect = el.getBoundingClientRect();
|
|
130
|
+
store.setSize({ width: rect.width, height: rect.height });
|
|
131
|
+
}, [store]);
|
|
132
|
+
// ── Imperative ref ──
|
|
133
|
+
useImperativeHandle(ref, () => store.handle, [store]);
|
|
134
|
+
// ── Gestures ──
|
|
135
|
+
const { handlers } = useViewportGestures({
|
|
136
|
+
viewportRef: rootRef,
|
|
137
|
+
store,
|
|
138
|
+
setTransform,
|
|
139
|
+
disabled,
|
|
140
|
+
minZoom,
|
|
141
|
+
maxZoom,
|
|
142
|
+
pan: pan ?? EMPTY_PAN,
|
|
143
|
+
zoom: zoom ?? EMPTY_ZOOM,
|
|
144
|
+
selectionRect: selectionRect ?? EMPTY_SELECTION,
|
|
145
|
+
callbacks: {
|
|
146
|
+
onPanStart,
|
|
147
|
+
onPanEnd,
|
|
148
|
+
onZoomStart,
|
|
149
|
+
onZoomEnd,
|
|
150
|
+
onSelectionChange,
|
|
151
|
+
},
|
|
152
|
+
});
|
|
153
|
+
// Subscribe to isPanning only — drives the cursor class on the wrapper.
|
|
154
|
+
const isPanning = useSyncExternalStore(store.subscribeIsPanning, store.getIsPanning);
|
|
155
|
+
// ── Children categorization ──
|
|
156
|
+
const { layers, worldChildren, overlayChildren } = useMemo(() => categorizeChildren(children), [children]);
|
|
157
|
+
const rootStyle = useMemo(() => ({
|
|
158
|
+
...style,
|
|
159
|
+
...(!responsive
|
|
160
|
+
? assignInlineVars({ [viewportHeightVar]: `${height}px` })
|
|
161
|
+
: {}),
|
|
162
|
+
}), [style, responsive, height]);
|
|
163
|
+
return (jsx("div", { ref: rootRef, id: id, "data-testid": testId, role: role, "aria-label": ariaLabel, "aria-roledescription": ariaRoledescription, tabIndex: disabled ? -1 : 0, className: cx(viewportRootRecipe({
|
|
164
|
+
responsive,
|
|
165
|
+
disabled,
|
|
166
|
+
panning: isPanning,
|
|
167
|
+
}), className), style: rootStyle, onPointerDown: handlers.onPointerDown, onPointerMove: handlers.onPointerMove, onPointerUp: handlers.onPointerUp, onPointerCancel: handlers.onPointerCancel, onPointerEnter: handlers.onPointerEnter, onPointerLeave: handlers.onPointerLeave, onContextMenu: handlers.onContextMenu, ...rest, children: jsxs(ViewportStoreContext.Provider, { value: store, children: [layers, worldChildren, overlayChildren, jsx(MarqueeRect, {})] }) }));
|
|
168
|
+
};
|
|
169
|
+
Viewport.displayName = 'Viewport';
|
|
170
|
+
/**
|
|
171
|
+
* Internal — renders the marquee selection rectangle. Subscribes only to
|
|
172
|
+
* the marquee slice so it re-renders only when the rectangle changes,
|
|
173
|
+
* never on transform/size/isPanning mutations.
|
|
174
|
+
*/
|
|
175
|
+
const MarqueeRect = () => {
|
|
176
|
+
const store = useViewportStore();
|
|
177
|
+
const rect = useSyncExternalStore(store.subscribeMarquee, store.getMarqueeRect);
|
|
178
|
+
if (!rect)
|
|
179
|
+
return null;
|
|
180
|
+
return (jsx("div", { className: marqueeRectStyle, style: {
|
|
181
|
+
left: rect.x,
|
|
182
|
+
top: rect.y,
|
|
183
|
+
width: rect.width,
|
|
184
|
+
height: rect.height,
|
|
185
|
+
}, "data-viewport-marquee": "" }));
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
export { Viewport };
|
|
189
|
+
//# sourceMappingURL=Viewport.js.map
|