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,10 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
3
|
-
import { useId, useRef, useState, useEffect, useMemo, useCallback } from 'react';
|
|
3
|
+
import { useId, useRef, useState, useDeferredValue, useEffect, useMemo, useCallback } from 'react';
|
|
4
4
|
import { createPortal } from 'react-dom';
|
|
5
5
|
import { SearchIcon } from '../../Icons/SearchIcon.js';
|
|
6
6
|
import { Kbd } from '../../primitives/Kbd/Kbd.js';
|
|
7
|
-
import { useDebouncedValue } from '../../../hooks/useDebounced/useDebouncedValue.js';
|
|
8
7
|
import { cx } from '../../../utils/cx.js';
|
|
9
8
|
import { overlayStyle, inputWrapperStyle, searchIconStyle, inputStyle, emptyStyle, listStyle, groupHeaderStyle, itemSelectedStyle, itemStyle, panelStyle, itemIconStyle, itemTextStyle, itemLabelStyle, itemDescriptionStyle, itemShortcutStyle } from './CommandPalette.css.js';
|
|
10
9
|
import { fuzzyFilter } from './fuzzySearch.js';
|
|
@@ -43,7 +42,7 @@ function getItemSearchStrings(item) {
|
|
|
43
42
|
* />
|
|
44
43
|
* ```
|
|
45
44
|
*/
|
|
46
|
-
const CommandPalette = ({ open, onClose, items, onSelect, placeholder = 'Type a command or search...', emptyState, recentLabel = 'Recent', recentKey, maxRecent = 5,
|
|
45
|
+
const CommandPalette = ({ open, onClose, items, onSelect, placeholder = 'Type a command or search...', emptyState, recentLabel = 'Recent', recentKey, maxRecent = 5, renderItem, portal = true, maxHeight = 400, width = 640, className, style, testId, id, ...rest }) => {
|
|
47
46
|
const autoId = useId();
|
|
48
47
|
const inputId = id ?? `command-palette-${autoId}`;
|
|
49
48
|
const listboxId = `${inputId}-listbox`;
|
|
@@ -51,14 +50,20 @@ const CommandPalette = ({ open, onClose, items, onSelect, placeholder = 'Type a
|
|
|
51
50
|
const listRef = useRef(null);
|
|
52
51
|
const [query, setQuery] = useState('');
|
|
53
52
|
const [activeIndex, setActiveIndex] = useState(0);
|
|
54
|
-
|
|
53
|
+
// Defer the query that drives fuzzy filtering so the input stays responsive
|
|
54
|
+
// while a large command list re-filters and re-sorts. The immediate `query`
|
|
55
|
+
// still drives the input value.
|
|
56
|
+
const deferredQuery = useDeferredValue(query);
|
|
55
57
|
const { recentIds, pushRecent } = useRecentItems({
|
|
56
58
|
storageKey: recentKey,
|
|
57
59
|
maxRecent,
|
|
58
60
|
});
|
|
59
|
-
// Reset state
|
|
61
|
+
// Reset state on each open transition. This reacts to the `open` prop
|
|
62
|
+
// toggling rather than synchronizing continuous state, so the one-shot
|
|
63
|
+
// setState in the effect is intentional.
|
|
60
64
|
useEffect(() => {
|
|
61
65
|
if (open) {
|
|
66
|
+
// eslint-disable-next-line react-hooks/set-state-in-effect
|
|
62
67
|
setQuery('');
|
|
63
68
|
setActiveIndex(0);
|
|
64
69
|
}
|
|
@@ -79,7 +84,7 @@ const CommandPalette = ({ open, onClose, items, onSelect, placeholder = 'Type a
|
|
|
79
84
|
const { rows, selectableItems } = useMemo(() => {
|
|
80
85
|
const groupOrder = [];
|
|
81
86
|
const groupMap = new Map();
|
|
82
|
-
if (
|
|
87
|
+
if (deferredQuery === '' && recentIds.length > 0) {
|
|
83
88
|
const byId = new Map(items.map(it => [it.id, it]));
|
|
84
89
|
const recent = [];
|
|
85
90
|
for (const id of recentIds) {
|
|
@@ -92,7 +97,7 @@ const CommandPalette = ({ open, onClose, items, onSelect, placeholder = 'Type a
|
|
|
92
97
|
groupMap.set(RECENT_GROUP, recent);
|
|
93
98
|
}
|
|
94
99
|
}
|
|
95
|
-
const filtered = fuzzyFilter(
|
|
100
|
+
const filtered = fuzzyFilter(deferredQuery, items, getItemSearchStrings);
|
|
96
101
|
const filteredItems = filtered.map(r => r.item);
|
|
97
102
|
for (const item of filteredItems) {
|
|
98
103
|
const g = item.group ?? DEFAULT_GROUP;
|
|
@@ -134,17 +139,17 @@ const CommandPalette = ({ open, onClose, items, onSelect, placeholder = 'Type a
|
|
|
134
139
|
}
|
|
135
140
|
}
|
|
136
141
|
return { rows, selectableItems: flat };
|
|
137
|
-
}, [items,
|
|
138
|
-
// Clamp
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
}
|
|
142
|
+
}, [items, deferredQuery, recentIds, recentLabel]);
|
|
143
|
+
// Clamp the active index during render when the result list shrinks. This is
|
|
144
|
+
// React's documented adjust-state-during-render pattern — it avoids an extra
|
|
145
|
+
// commit, and the guards make it self-terminating.
|
|
146
|
+
if (selectableItems.length === 0) {
|
|
147
|
+
if (activeIndex !== 0)
|
|
148
|
+
setActiveIndex(0);
|
|
149
|
+
}
|
|
150
|
+
else if (activeIndex >= selectableItems.length) {
|
|
151
|
+
setActiveIndex(selectableItems.length - 1);
|
|
152
|
+
}
|
|
148
153
|
const moveActive = useCallback((delta) => {
|
|
149
154
|
setActiveIndex(prev => {
|
|
150
155
|
const len = selectableItems.length;
|
|
@@ -226,10 +231,10 @@ const CommandPalette = ({ open, onClose, items, onSelect, placeholder = 'Type a
|
|
|
226
231
|
const activeId = activeIndex < selectableItems.length
|
|
227
232
|
? `${listboxId}-item-${String(activeIndex)}`
|
|
228
233
|
: undefined;
|
|
229
|
-
const content = (jsxs(Fragment, { children: [jsx("div", { className: overlayStyle, "data-testid": testId ? `${testId}-overlay` : undefined, onClick: handleOverlayClick }), jsxs("div", { role: "dialog", "aria-modal": "true", "aria-label": "Command palette", className: cx(panelStyle, className), style: { width: widthCss, ...style }, "data-testid": testId, onKeyDown: handleKeyDown, ...rest, children: [jsxs("div", { className: inputWrapperStyle, children: [jsx("span", { className: searchIconStyle, "aria-hidden": "true", children: jsx(SearchIcon, {}) }), jsx("input", { ref: inputRef, id: inputId, type: "text", role: "combobox", "aria-expanded": "true", "aria-controls": listboxId, "aria-activedescendant": activeId, "aria-autocomplete": "list", className: inputStyle, placeholder: placeholder, value: query, onChange: e => {
|
|
234
|
+
const content = (jsxs(Fragment, { children: [jsx("div", { "aria-hidden": "true", className: overlayStyle, "data-testid": testId ? `${testId}-overlay` : undefined, onClick: handleOverlayClick }), jsxs("div", { role: "dialog", "aria-modal": "true", "aria-label": "Command palette", className: cx(panelStyle, className), style: { width: widthCss, ...style }, "data-testid": testId, onKeyDown: handleKeyDown, ...rest, children: [jsxs("div", { className: inputWrapperStyle, children: [jsx("span", { className: searchIconStyle, "aria-hidden": "true", children: jsx(SearchIcon, {}) }), jsx("input", { ref: inputRef, id: inputId, type: "text", role: "combobox", "aria-expanded": "true", "aria-controls": listboxId, "aria-activedescendant": activeId, "aria-autocomplete": "list", className: inputStyle, placeholder: placeholder, value: query, onChange: e => {
|
|
230
235
|
setQuery(e.target.value);
|
|
231
236
|
setActiveIndex(0);
|
|
232
|
-
}, "data-testid": testId ? `${testId}-input` : undefined })] }), selectableItems.length === 0 ? (jsx("div", { className: emptyStyle, "data-testid": testId ? `${testId}-empty` : undefined, children: emptyState ?? `No matches for "${
|
|
237
|
+
}, "data-testid": testId ? `${testId}-input` : undefined })] }), selectableItems.length === 0 ? (jsx("div", { className: emptyStyle, "data-testid": testId ? `${testId}-empty` : undefined, children: emptyState ?? `No matches for "${deferredQuery}"` })) : (jsx("ul", { ref: listRef, id: listboxId, role: "listbox", className: listStyle, style: { maxHeight }, children: rows.map((row, rowIndex) => {
|
|
233
238
|
if (row.type === 'header') {
|
|
234
239
|
return (jsx("li", { role: "presentation", className: groupHeaderStyle, children: row.groupLabel }, `hdr-${row.group}-${String(rowIndex)}`));
|
|
235
240
|
}
|
|
@@ -239,14 +244,19 @@ const CommandPalette = ({ open, onClose, items, onSelect, placeholder = 'Type a
|
|
|
239
244
|
return null;
|
|
240
245
|
const isSelected = itemIndex === activeIndex;
|
|
241
246
|
const itemDomId = `${listboxId}-item-${String(itemIndex)}`;
|
|
242
|
-
return (
|
|
247
|
+
return (
|
|
248
|
+
// Keyboard selection is handled centrally via the
|
|
249
|
+
// aria-activedescendant model on the dialog (Enter selects the
|
|
250
|
+
// active option); the click is a pointer-only convenience.
|
|
251
|
+
// eslint-disable-next-line jsx-a11y/click-events-have-key-events
|
|
252
|
+
jsx("li", { id: itemDomId, role: "option", "aria-selected": isSelected, "aria-disabled": item.disabled ? true : undefined, className: cx(itemStyle, isSelected && itemSelectedStyle), "data-disabled": item.disabled ? 'true' : undefined, "data-row-index": itemIndex, "data-testid": testId ? `${testId}-item-${item.id}` : undefined, onMouseEnter: () => {
|
|
243
253
|
if (!item.disabled)
|
|
244
254
|
setActiveIndex(itemIndex);
|
|
245
255
|
}, onClick: () => {
|
|
246
256
|
runSelect(item);
|
|
247
257
|
}, children: renderItem ? (renderItem(item, {
|
|
248
258
|
selected: isSelected,
|
|
249
|
-
query:
|
|
259
|
+
query: deferredQuery,
|
|
250
260
|
})) : (jsx(DefaultItemContent, { item: item })) }, `${row.group}-${item.id}`));
|
|
251
261
|
}) }))] })] }));
|
|
252
262
|
if (portal && typeof document !== 'undefined') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandPalette.js","sources":["../../../../../../src/components/feedback/CommandPalette/CommandPalette.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;AAoCA;AACA;AAUA;AACE;;AACsB;;;AAEtB;AACF;AAEA;;;;;;;;;;;;;;;;;;;;;;AAsBG;AACI;AAqBL;AACA;AACA;AAEA;AACA;;;;AAMA;AACE;;AAED;;;;;;;AAQD;;;;AAKI;AACE;;AAEF;;AAEA;;AAEF;AACF;;;;AAKE;;;;AAKE;;AAEE;AAAwB;;AAE1B;AACE;AACA;;;;AAKJ;AAEA;AACE;;AAEE;AACA;;;;;;;AASJ;;AAEE;;AACA;AAEI;;AAEE;;;;AAIF;AACA;;AAED;;AAEH;AACE;;AAEE;AACA;;;;AAID;AACD;;;AAIJ;;;;;AAME;AAAkC;AAClC;AAAoC;AACpC;AACF;AACF;AAEA;;AAGM;;AACe;AACf;;AACc;;;AAEd;AACF;AACF;AAIF;;;AAGI;AACA;;;;AAGE;;AAEF;;AAKJ;AAEI;;AAEE;;;AAGF;;;;;AAKA;;AAEE;;;AAGF;;;;;AAKA;;AAEE;;;AAGF;;AAEE;AACA;;;AAEJ;;;AAMA;;AACA;AACA;;AACA;;;;AAMF;AAEA;;AAGM;;AAEJ;AAIF;AAAW;AAEX;AACA;;;;AAuCY;;AAEF;AAqBE;;;AAWA;AACA;AACA;AAAsC;AACtC;;AAEA;;;AAaI;;;AAOI;AACA;;AAOV;AAOV;;;AAGA;AACF;AAEA;AAEA;;"}
|
|
1
|
+
{"version":3,"file":"CommandPalette.js","sources":["src/components/feedback/CommandPalette/CommandPalette.tsx"],"sourcesContent":["'use client';\n\nimport React, {\n useCallback,\n useDeferredValue,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { SearchIcon } from '@/components/Icons/SearchIcon';\nimport { Kbd } from '@/components/primitives/Kbd';\nimport { cx } from '@/utils/cx';\n\nimport {\n emptyStyle,\n groupHeaderStyle,\n inputStyle,\n inputWrapperStyle,\n itemDescriptionStyle,\n itemIconStyle,\n itemLabelStyle,\n itemSelectedStyle,\n itemShortcutStyle,\n itemStyle,\n itemTextStyle,\n listStyle,\n overlayStyle,\n panelStyle,\n searchIconStyle,\n} from './CommandPalette.css';\nimport { fuzzyFilter } from './fuzzySearch';\nimport { useRecentItems } from './useRecentItems';\n\nimport type { CommandItem, CommandPaletteProps } from './CommandPalette.types';\n\nconst DEFAULT_GROUP = 'default';\nconst RECENT_GROUP = '__recent__';\n\ninterface ResolvedRow {\n type: 'header' | 'item';\n group: string;\n groupLabel: string;\n item?: CommandItem;\n index?: number; // index into the flat selectable items list\n}\n\nfunction getItemSearchStrings(item: CommandItem): string[] {\n const out = [item.label];\n if (item.description) out.push(item.description);\n if (item.keywords) out.push(...item.keywords);\n return out;\n}\n\n/**\n * Search-driven command list shown as a centred floating dialog. Type to\n * fuzzy-filter, ArrowUp/ArrowDown to navigate, Enter to select, Escape to\n * close. Recent selections are tracked in localStorage when `recentKey` is\n * set. The component does not bind a global hotkey — wire `useHotkey` in\n * the consumer.\n *\n * @example\n * ```tsx\n * useHotkey('Mod+K', () => { setOpen(true); });\n *\n * <CommandPalette\n * open={open}\n * onClose={() => setOpen(false)}\n * items={[\n * { id: 'open', label: 'Open File', shortcut: 'Cmd+O', group: 'File' },\n * { id: 'save', label: 'Save', shortcut: 'Cmd+S', group: 'File' },\n * ]}\n * onSelect={(item) => runCommand(item.id)}\n * recentKey=\"myapp:command-palette\"\n * />\n * ```\n */\nexport const CommandPalette: React.FC<CommandPaletteProps> = ({\n open,\n onClose,\n items,\n onSelect,\n placeholder = 'Type a command or search...',\n emptyState,\n recentLabel = 'Recent',\n recentKey,\n maxRecent = 5,\n renderItem,\n portal = true,\n maxHeight = 400,\n width = 640,\n className,\n style,\n testId,\n id,\n ...rest\n}) => {\n const autoId = useId();\n const inputId = id ?? `command-palette-${autoId}`;\n const listboxId = `${inputId}-listbox`;\n\n const inputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLUListElement>(null);\n\n const [query, setQuery] = useState('');\n const [activeIndex, setActiveIndex] = useState(0);\n // Defer the query that drives fuzzy filtering so the input stays responsive\n // while a large command list re-filters and re-sorts. The immediate `query`\n // still drives the input value.\n const deferredQuery = useDeferredValue(query);\n\n const { recentIds, pushRecent } = useRecentItems({\n storageKey: recentKey,\n maxRecent,\n });\n\n // Reset state on each open transition. This reacts to the `open` prop\n // toggling rather than synchronizing continuous state, so the one-shot\n // setState in the effect is intentional.\n useEffect(() => {\n if (open) {\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setQuery('');\n setActiveIndex(0);\n }\n }, [open]);\n\n // Focus the input on open.\n useEffect(() => {\n if (open) {\n const t = setTimeout(() => {\n inputRef.current?.focus();\n }, 0);\n return () => {\n clearTimeout(t);\n };\n }\n return undefined;\n }, [open]);\n\n // Resolve groups + filtering.\n const { rows, selectableItems } = useMemo(() => {\n const groupOrder: string[] = [];\n const groupMap = new Map<string, CommandItem[]>();\n\n if (deferredQuery === '' && recentIds.length > 0) {\n const byId = new Map(items.map(it => [it.id, it]));\n const recent: CommandItem[] = [];\n for (const id of recentIds) {\n const it = byId.get(id);\n if (it && !it.disabled) recent.push(it);\n }\n if (recent.length > 0) {\n groupOrder.push(RECENT_GROUP);\n groupMap.set(RECENT_GROUP, recent);\n }\n }\n\n const filtered = fuzzyFilter(deferredQuery, items, getItemSearchStrings);\n const filteredItems = filtered.map(r => r.item);\n\n for (const item of filteredItems) {\n const g = item.group ?? DEFAULT_GROUP;\n if (!groupMap.has(g)) {\n groupOrder.push(g);\n groupMap.set(g, []);\n }\n groupMap.get(g)?.push(item);\n }\n\n const rows: ResolvedRow[] = [];\n const flat: CommandItem[] = [];\n let nextIndex = 0;\n\n for (const groupKey of groupOrder) {\n const list = groupMap.get(groupKey);\n if (!list || list.length === 0) continue;\n const groupLabel =\n groupKey === RECENT_GROUP\n ? recentLabel\n : groupKey === DEFAULT_GROUP\n ? ''\n : groupKey;\n if (groupLabel) {\n rows.push({\n type: 'header',\n group: groupKey,\n groupLabel,\n });\n }\n for (const item of list) {\n const index = nextIndex++;\n rows.push({\n type: 'item',\n group: groupKey,\n groupLabel,\n item,\n index,\n });\n flat.push(item);\n }\n }\n\n return { rows, selectableItems: flat };\n }, [items, deferredQuery, recentIds, recentLabel]);\n\n // Clamp the active index during render when the result list shrinks. This is\n // React's documented adjust-state-during-render pattern — it avoids an extra\n // commit, and the guards make it self-terminating.\n if (selectableItems.length === 0) {\n if (activeIndex !== 0) setActiveIndex(0);\n } else if (activeIndex >= selectableItems.length) {\n setActiveIndex(selectableItems.length - 1);\n }\n\n const moveActive = useCallback(\n (delta: number) => {\n setActiveIndex(prev => {\n const len = selectableItems.length;\n if (len === 0) return 0;\n let next = prev + delta;\n if (next < 0) next = len - 1;\n if (next >= len) next = 0;\n return next;\n });\n },\n [selectableItems.length]\n );\n\n const runSelect = useCallback(\n (item: CommandItem) => {\n if (item.disabled) return;\n pushRecent(item.id);\n if (item.onSelect) {\n item.onSelect();\n } else {\n onSelect?.(item);\n }\n onClose();\n },\n [onClose, onSelect, pushRecent]\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n onClose();\n return;\n }\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n moveActive(1);\n return;\n }\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n moveActive(-1);\n return;\n }\n if (e.key === 'Home') {\n e.preventDefault();\n setActiveIndex(0);\n return;\n }\n if (e.key === 'End') {\n e.preventDefault();\n setActiveIndex(Math.max(0, selectableItems.length - 1));\n return;\n }\n if (e.key === 'Enter') {\n e.preventDefault();\n const item = selectableItems[activeIndex];\n if (item) runSelect(item);\n }\n },\n [activeIndex, moveActive, onClose, runSelect, selectableItems]\n );\n\n // Scroll active item into view when it changes.\n useEffect(() => {\n if (!open) return;\n const list = listRef.current;\n if (!list) return;\n const el = list.querySelector<HTMLElement>(\n `[data-row-index=\"${String(activeIndex)}\"]`\n );\n if (el && typeof el.scrollIntoView === 'function') {\n el.scrollIntoView({ block: 'nearest' });\n }\n }, [activeIndex, open]);\n\n const handleOverlayClick = useCallback(\n (e: React.MouseEvent) => {\n if (e.target === e.currentTarget) {\n onClose();\n }\n },\n [onClose]\n );\n\n if (!open) return null;\n\n const widthCss = typeof width === 'number' ? `${String(width)}px` : width;\n const activeId =\n activeIndex < selectableItems.length\n ? `${listboxId}-item-${String(activeIndex)}`\n : undefined;\n\n const content = (\n <>\n {/* Decorative backdrop: pointer users can click to dismiss, while\n keyboard users dismiss via Escape handled on the dialog panel. */}\n <div\n aria-hidden=\"true\"\n className={overlayStyle}\n data-testid={testId ? `${testId}-overlay` : undefined}\n onClick={handleOverlayClick}\n />\n {/* The dialog panel needs a keydown handler for Escape-to-close and\n listbox navigation; this is required dialog behavior, not a static\n element repurposed as interactive. */}\n {/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions */}\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Command palette\"\n className={cx(panelStyle, className)}\n style={{ width: widthCss, ...style }}\n data-testid={testId}\n onKeyDown={handleKeyDown}\n {...rest}\n >\n <div className={inputWrapperStyle}>\n <span className={searchIconStyle} aria-hidden=\"true\">\n <SearchIcon />\n </span>\n <input\n ref={inputRef}\n id={inputId}\n type=\"text\"\n role=\"combobox\"\n aria-expanded=\"true\"\n aria-controls={listboxId}\n aria-activedescendant={activeId}\n aria-autocomplete=\"list\"\n className={inputStyle}\n placeholder={placeholder}\n value={query}\n onChange={e => {\n setQuery(e.target.value);\n setActiveIndex(0);\n }}\n data-testid={testId ? `${testId}-input` : undefined}\n />\n </div>\n\n {selectableItems.length === 0 ? (\n <div\n className={emptyStyle}\n data-testid={testId ? `${testId}-empty` : undefined}\n >\n {emptyState ?? `No matches for \"${deferredQuery}\"`}\n </div>\n ) : (\n <ul\n ref={listRef}\n id={listboxId}\n role=\"listbox\"\n className={listStyle}\n style={{ maxHeight }}\n >\n {rows.map((row, rowIndex) => {\n if (row.type === 'header') {\n return (\n <li\n key={`hdr-${row.group}-${String(rowIndex)}`}\n role=\"presentation\"\n className={groupHeaderStyle}\n >\n {row.groupLabel}\n </li>\n );\n }\n const item = row.item;\n const itemIndex = row.index;\n if (!item || itemIndex === undefined) return null;\n const isSelected = itemIndex === activeIndex;\n const itemDomId = `${listboxId}-item-${String(itemIndex)}`;\n return (\n // Keyboard selection is handled centrally via the\n // aria-activedescendant model on the dialog (Enter selects the\n // active option); the click is a pointer-only convenience.\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events\n <li\n key={`${row.group}-${item.id}`}\n id={itemDomId}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={item.disabled ? true : undefined}\n className={cx(itemStyle, isSelected && itemSelectedStyle)}\n data-disabled={item.disabled ? 'true' : undefined}\n data-row-index={itemIndex}\n data-testid={testId ? `${testId}-item-${item.id}` : undefined}\n onMouseEnter={() => {\n if (!item.disabled) setActiveIndex(itemIndex);\n }}\n onClick={() => {\n runSelect(item);\n }}\n >\n {renderItem ? (\n renderItem(item, {\n selected: isSelected,\n query: deferredQuery,\n })\n ) : (\n <DefaultItemContent item={item} />\n )}\n </li>\n );\n })}\n </ul>\n )}\n </div>\n </>\n );\n\n if (portal && typeof document !== 'undefined') {\n return createPortal(content, document.body);\n }\n return content;\n};\n\nCommandPalette.displayName = 'CommandPalette';\n\nconst DefaultItemContent: React.FC<{ item: CommandItem }> = ({ item }) => (\n <>\n {item.icon && <span className={itemIconStyle}>{item.icon}</span>}\n <span className={itemTextStyle}>\n <span className={itemLabelStyle}>{item.label}</span>\n {item.description && (\n <span className={itemDescriptionStyle}>{item.description}</span>\n )}\n </span>\n {item.shortcut && (\n <span className={itemShortcutStyle}>\n <Kbd size=\"sm\">{item.shortcut}</Kbd>\n </span>\n )}\n </>\n);\n"],"names":[],"mappings":";;;;;;;;;;;AAuCA;AACA;AAUA;AACE;;AACsB;;;AAEtB;AACF;AAEA;;;;;;;;;;;;;;;;;;;;;;AAsBG;AACI;AAoBL;AACA;AACA;AAEA;AACA;;;;;;AAOA;AAEA;AACE;;AAED;;;;;;;;;;AAWD;;;;AAKI;AACE;;AAEF;;AAEA;;AAEF;AACF;;;;AAKE;;;;AAKE;;AAEE;AAAwB;;AAE1B;AACE;AACA;;;;AAKJ;AAEA;AACE;;AAEE;AACA;;;;;;;AASJ;;AAEE;;AACA;AAEI;;AAEE;;;;AAIF;AACA;;AAED;;AAEH;AACE;;AAEE;AACA;;;;AAID;AACD;;;AAIJ;;;;;AAMF;;;;AAEO;AACL;;AAGF;;AAGM;;AACe;AACf;;AACc;;;AAEd;AACF;AACF;AAIF;;;AAGI;AACA;;;;AAGE;;AAEF;;AAKJ;AAEI;;AAEE;;;AAGF;;;;;AAKA;;AAEE;;;AAGF;;;;;AAKA;;AAEE;;;AAGF;;AAEE;AACA;;;AAEJ;;;AAMA;;AACA;AACA;;AACA;;;;AAMF;AAEA;;AAGM;;AAEJ;AAIF;AAAW;AAEX;AACA;;;;AA8CY;;AAEF;AAqBE;;;AAWA;AACA;AACA;AAAsC;AACtC;;;;;;;AAOE;;;AAYE;;;AAOI;AACA;;AAOV;AAOV;;;AAGA;AACF;AAEA;AAEA;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fuzzySearch.js","sources":["
|
|
1
|
+
{"version":3,"file":"fuzzySearch.js","sources":["src/components/feedback/CommandPalette/fuzzySearch.ts"],"sourcesContent":["/**\n * Score how well `query` matches `target`. Higher = better. Zero = no match.\n *\n * Heuristics, in priority order:\n * 1. Exact case-insensitive match (1000).\n * 2. Target starts with the query (800 + length bonus).\n * 3. Target contains the query as a contiguous substring (500 + position bonus).\n * 4. Subsequence match: every query char appears in target in order; bonuses\n * for consecutive matches, word-boundary matches, and earlier positions.\n *\n * @example\n * ```ts\n * fuzzyScore('opn', 'open file') // > 0, subsequence match\n * fuzzyScore('zzz', 'open file') // 0\n * ```\n */\nexport function fuzzyScore(query: string, target: string): number {\n if (query === '') return 1;\n if (target === '') return 0;\n\n const q = query.toLowerCase();\n const t = target.toLowerCase();\n\n if (q === t) return 1000;\n if (t.startsWith(q)) return 800 + Math.max(0, 50 - target.length);\n const containsAt = t.indexOf(q);\n if (containsAt !== -1)\n return 500 - containsAt + Math.max(0, 30 - target.length);\n\n let score = 0;\n let qi = 0;\n let lastMatch = -2;\n for (let ti = 0; ti < t.length && qi < q.length; ti++) {\n const ch = t[ti];\n if (ch === q[qi]) {\n // Earlier matches contribute more.\n score += Math.max(1, 30 - ti);\n if (lastMatch === ti - 1) {\n score += 25;\n }\n // Bonus when the match begins a \"word\" (after space/-/_/.)\n const prev = ti > 0 ? t[ti - 1] : '';\n if (\n ti === 0 ||\n prev === ' ' ||\n prev === '-' ||\n prev === '_' ||\n prev === '.'\n ) {\n score += 20;\n }\n lastMatch = ti;\n qi++;\n }\n }\n\n if (qi !== q.length) return 0;\n return score;\n}\n\nexport interface FuzzyMatch<T> {\n item: T;\n score: number;\n}\n\n/**\n * Score a list of items against a query. Items with score 0 are dropped, the\n * rest are sorted by descending score. The `getStrings` accessor returns one\n * or more strings per item to score against; the highest-scoring string wins.\n */\nexport function fuzzyFilter<T>(\n query: string,\n items: readonly T[],\n getStrings: (item: T) => readonly string[]\n): FuzzyMatch<T>[] {\n if (query === '') {\n return items.map(item => ({ item, score: 1 }));\n }\n const result: FuzzyMatch<T>[] = [];\n for (const item of items) {\n const strings = getStrings(item);\n let best = 0;\n for (const s of strings) {\n const score = fuzzyScore(query, s);\n if (score > best) best = score;\n }\n if (best > 0) {\n result.push({ item, score: best });\n }\n }\n result.sort((a, b) => b.score - a.score);\n return result;\n}\n"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;AAeG;AACG,SAAU,UAAU,CAAC,KAAa,EAAE,MAAc,EAAA;IACtD,IAAI,KAAK,KAAK,EAAE;AAAE,QAAA,OAAO,CAAC;IAC1B,IAAI,MAAM,KAAK,EAAE;AAAE,QAAA,OAAO,CAAC;AAE3B,IAAA,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE;AAC7B,IAAA,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE;IAE9B,IAAI,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,IAAI;AACxB,IAAA,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;IACjE,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/B,IAAI,UAAU,KAAK,EAAE;AACnB,QAAA,OAAO,GAAG,GAAG,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;IAE3D,IAAI,KAAK,GAAG,CAAC;IACb,IAAI,EAAE,GAAG,CAAC;AACV,IAAA,IAAI,SAAS,GAAG,EAAE;IAClB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;AACrD,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;AAChB,QAAA,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE;;YAEhB,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC;AAC7B,YAAA,IAAI,SAAS,KAAK,EAAE,GAAG,CAAC,EAAE;gBACxB,KAAK,IAAI,EAAE;YACb;;AAEA,YAAA,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE;YACpC,IACE,EAAE,KAAK,CAAC;AACR,gBAAA,IAAI,KAAK,GAAG;AACZ,gBAAA,IAAI,KAAK,GAAG;AACZ,gBAAA,IAAI,KAAK,GAAG;gBACZ,IAAI,KAAK,GAAG,EACZ;gBACA,KAAK,IAAI,EAAE;YACb;YACA,SAAS,GAAG,EAAE;AACd,YAAA,EAAE,EAAE;QACN;IACF;AAEA,IAAA,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM;AAAE,QAAA,OAAO,CAAC;AAC7B,IAAA,OAAO,KAAK;AACd;AAOA;;;;AAIG;SACa,WAAW,CACzB,KAAa,EACb,KAAmB,EACnB,UAA0C,EAAA;AAE1C,IAAA,IAAI,KAAK,KAAK,EAAE,EAAE;AAChB,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAChD;IACA,MAAM,MAAM,GAAoB,EAAE;AAClC,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC;QAChC,IAAI,IAAI,GAAG,CAAC;AACZ,QAAA,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;YACvB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;YAClC,IAAI,KAAK,GAAG,IAAI;gBAAE,IAAI,GAAG,KAAK;QAChC;AACA,QAAA,IAAI,IAAI,GAAG,CAAC,EAAE;YACZ,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACpC;IACF;AACA,IAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;AACxC,IAAA,OAAO,MAAM;AACf;;;;"}
|
|
@@ -34,9 +34,11 @@ function writeStorage(key, ids) {
|
|
|
34
34
|
*/
|
|
35
35
|
function useRecentItems({ storageKey, maxRecent = 5, }) {
|
|
36
36
|
const [recentIds, setRecentIds] = useState(() => storageKey ? readStorage(storageKey).slice(0, maxRecent) : []);
|
|
37
|
-
// Re-read storage if the key changes after mount.
|
|
37
|
+
// Re-read storage if the key changes after mount. External-system sync
|
|
38
|
+
// (localStorage), so setState in the effect is the correct pattern.
|
|
38
39
|
useEffect(() => {
|
|
39
40
|
if (storageKey) {
|
|
41
|
+
// eslint-disable-next-line react-hooks/set-state-in-effect
|
|
40
42
|
setRecentIds(readStorage(storageKey).slice(0, maxRecent));
|
|
41
43
|
}
|
|
42
44
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRecentItems.js","sources":["
|
|
1
|
+
{"version":3,"file":"useRecentItems.js","sources":["src/components/feedback/CommandPalette/useRecentItems.ts"],"sourcesContent":["'use client';\n\nimport { useCallback, useEffect, useState } from 'react';\n\ninterface UseRecentItemsOptions {\n /** localStorage key (component does not bind/store unless this is set). */\n storageKey?: string;\n /** Maximum number of recent ids to keep. @default 5 */\n maxRecent?: number;\n}\n\ninterface UseRecentItemsReturn {\n recentIds: string[];\n pushRecent: (id: string) => void;\n clearRecent: () => void;\n}\n\nfunction readStorage(key: string): string[] {\n if (typeof window === 'undefined') return [];\n try {\n const raw = window.localStorage.getItem(key);\n if (!raw) return [];\n const parsed: unknown = JSON.parse(raw);\n if (Array.isArray(parsed)) {\n return parsed.filter((v): v is string => typeof v === 'string');\n }\n return [];\n } catch {\n return [];\n }\n}\n\nfunction writeStorage(key: string, ids: string[]): void {\n if (typeof window === 'undefined') return;\n try {\n window.localStorage.setItem(key, JSON.stringify(ids));\n } catch {\n // localStorage may be unavailable (private mode, full quota); silently ignore.\n }\n}\n\n/**\n * Track recently selected command ids. Backed by localStorage when\n * `storageKey` is provided; otherwise the list is in-memory only.\n */\nexport function useRecentItems({\n storageKey,\n maxRecent = 5,\n}: UseRecentItemsOptions): UseRecentItemsReturn {\n const [recentIds, setRecentIds] = useState<string[]>(() =>\n storageKey ? readStorage(storageKey).slice(0, maxRecent) : []\n );\n\n // Re-read storage if the key changes after mount. External-system sync\n // (localStorage), so setState in the effect is the correct pattern.\n useEffect(() => {\n if (storageKey) {\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setRecentIds(readStorage(storageKey).slice(0, maxRecent));\n } else {\n setRecentIds([]);\n }\n }, [storageKey, maxRecent]);\n\n const pushRecent = useCallback(\n (id: string) => {\n setRecentIds(prev => {\n const next = [id, ...prev.filter(v => v !== id)].slice(0, maxRecent);\n if (storageKey) writeStorage(storageKey, next);\n return next;\n });\n },\n [storageKey, maxRecent]\n );\n\n const clearRecent = useCallback(() => {\n setRecentIds([]);\n if (storageKey) writeStorage(storageKey, []);\n }, [storageKey]);\n\n return { recentIds, pushRecent, clearRecent };\n}\n"],"names":[],"mappings":";;;AAiBA;;AACqC;AACnC;;AAEE;AAAU;;AAEV;AACE;;AAEF;;AACA;AACA;;AAEJ;AAEA;;;AAEE;AACE;;AACA;;;AAGJ;AAEA;;;AAGG;AACG;AAIJ;;;;;;AASI;;;;;AAIJ;AAEA;;;AAIM;AAAgB;AAChB;AACF;AACF;AAIF;;AAEE;AAAgB;AAClB;AAEA;AACF;;"}
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
3
|
import { useId, useRef, useCallback, createContext, useContext } from 'react';
|
|
4
4
|
import { createPortal } from 'react-dom';
|
|
5
|
-
import { overlayRecipe, dialogPanelRecipe } from './Dialog.css.js';
|
|
6
|
-
import { useDialogAnimation } from './useDialogAnimation.js';
|
|
7
5
|
import { useFocusTrap } from '../../../hooks/useFocusTrap/useFocusTrap.js';
|
|
8
6
|
import { useMergedRef } from '../../../hooks/useMergedRef/useMergedRef.js';
|
|
9
7
|
import { cx } from '../../../utils/cx.js';
|
|
8
|
+
import { overlayRecipe, dialogPanelRecipe } from './Dialog.css.js';
|
|
9
|
+
import { useDialogAnimation } from './useDialogAnimation.js';
|
|
10
10
|
|
|
11
11
|
// --- Context ---
|
|
12
12
|
const DialogContext = /*#__PURE__*/ createContext(null);
|
|
@@ -74,7 +74,10 @@ const Dialog = ({ open, onClose, size = 'md', title, description, closeOnOverlay
|
|
|
74
74
|
titleId,
|
|
75
75
|
descriptionId,
|
|
76
76
|
};
|
|
77
|
-
const dialogContent = (jsxs(DialogContext.Provider, { value: contextValue, children: [showOverlay && (
|
|
77
|
+
const dialogContent = (jsxs(DialogContext.Provider, { value: contextValue, children: [showOverlay && (
|
|
78
|
+
// Decorative backdrop: pointer users can click to dismiss, while
|
|
79
|
+
// keyboard users dismiss via Escape handled on the dialog panel.
|
|
80
|
+
jsx("div", { "aria-hidden": "true", className: overlayRecipe({ closing }), onClick: handleOverlayClick, "data-testid": testId ? `${testId}-overlay` : undefined })), jsxs("div", { ref: setPanelRef, role: "dialog", "aria-modal": "true", "aria-labelledby": title ? titleId : undefined, "aria-describedby": description ? descriptionId : undefined, tabIndex: -1, className: cx(dialogPanelRecipe({ size, closing }), className), style: style, id: id, "data-testid": testId, onKeyDown: handleKeyDown, ...rest, children: [title && (jsx("span", { id: titleId, style: { display: 'none' }, children: title })), description && (jsx("span", { id: descriptionId, style: { display: 'none' }, children: description })), children] })] }));
|
|
78
81
|
if (portal) {
|
|
79
82
|
return createPortal(dialogContent, document.body);
|
|
80
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dialog.js","sources":["
|
|
1
|
+
{"version":3,"file":"Dialog.js","sources":["src/components/feedback/Dialog/Dialog.tsx"],"sourcesContent":["'use client';\n\nimport React, {\n createContext,\n useCallback,\n useContext,\n useId,\n useRef,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { useFocusTrap } from '@/hooks/useFocusTrap';\nimport { useMergedRef } from '@/hooks/useMergedRef';\nimport { cx } from '@/utils/cx';\n\nimport { overlayRecipe, dialogPanelRecipe } from './Dialog.css';\nimport { useDialogAnimation } from './useDialogAnimation';\n\nimport type { DialogContextValue, DialogProps } from './Dialog.types';\n\n// --- Context ---\n\nconst DialogContext = /*#__PURE__*/ createContext<DialogContextValue | null>(\n null\n);\n\nexport function useDialogContext(): DialogContextValue {\n const ctx = useContext(DialogContext);\n if (!ctx) {\n throw new Error(\n 'Dialog sub-components must be used within a <Dialog> component'\n );\n }\n return ctx;\n}\n\n// --- Component ---\n\n/**\n * Dialog component for modal overlays in editor interfaces.\n *\n * Renders an accessible modal dialog with overlay, focus trap,\n * and keyboard support. Compound component pattern: use with\n * DialogHeader, DialogBody, DialogFooter, and DialogClose.\n *\n * @example\n * ```tsx\n * <Dialog open={isOpen} onClose={() => setIsOpen(false)} title=\"Confirm\">\n * <DialogHeader>Confirm Action</DialogHeader>\n * <DialogBody>Are you sure?</DialogBody>\n * <DialogFooter align=\"right\">\n * <Button onClick={() => setIsOpen(false)}>Cancel</Button>\n * <Button variant=\"filled\">Confirm</Button>\n * </DialogFooter>\n * </Dialog>\n * ```\n */\nexport const Dialog: React.FC<DialogProps> = ({\n open,\n onClose,\n size = 'md',\n title,\n description,\n closeOnOverlayClick = true,\n closeOnEscape = true,\n showOverlay = true,\n trapFocus = true,\n initialFocusRef,\n portal = true,\n children,\n className,\n style,\n testId,\n id,\n ref,\n ...rest\n}) => {\n const autoId = useId();\n const titleId = `dialog-title-${autoId}`;\n const descriptionId = `dialog-desc-${autoId}`;\n const panelRef = useRef<HTMLDivElement>(null);\n\n const { mounted, closing } = useDialogAnimation({\n open,\n panelRef,\n initialFocusRef,\n });\n\n const handleFocusTrap = useFocusTrap({\n containerRef: panelRef,\n enabled: trapFocus,\n });\n\n const setPanelRef = useMergedRef<HTMLDivElement>(panelRef, ref);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n // Escape handler — inline instead of global document listener\n if (closeOnEscape && e.key === 'Escape') {\n e.stopPropagation();\n onClose();\n return;\n }\n // Focus trap\n handleFocusTrap(e);\n },\n [closeOnEscape, onClose, handleFocusTrap]\n );\n\n const handleOverlayClick = useCallback(\n (e: React.MouseEvent) => {\n if (closeOnOverlayClick && e.target === e.currentTarget) {\n onClose();\n }\n },\n [closeOnOverlayClick, onClose]\n );\n\n if (!mounted) return null;\n\n const contextValue: DialogContextValue = {\n onClose,\n titleId,\n descriptionId,\n };\n\n const dialogContent = (\n <DialogContext.Provider value={contextValue}>\n {showOverlay && (\n // Decorative backdrop: pointer users can click to dismiss, while\n // keyboard users dismiss via Escape handled on the dialog panel.\n <div\n aria-hidden=\"true\"\n className={overlayRecipe({ closing })}\n onClick={handleOverlayClick}\n data-testid={testId ? `${testId}-overlay` : undefined}\n />\n )}\n {/* The dialog panel needs a keydown handler for Escape-to-close and\n focus trapping; this is required modal-dialog behavior, not a static\n element repurposed as interactive. */}\n {/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions */}\n <div\n ref={setPanelRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n aria-describedby={description ? descriptionId : undefined}\n tabIndex={-1}\n className={cx(dialogPanelRecipe({ size, closing }), className)}\n style={style}\n id={id}\n data-testid={testId}\n onKeyDown={handleKeyDown}\n {...rest}\n >\n {/* Hidden elements for ARIA references when using title/description props */}\n {title && (\n <span id={titleId} style={{ display: 'none' }}>\n {title}\n </span>\n )}\n {description && (\n <span id={descriptionId} style={{ display: 'none' }}>\n {description}\n </span>\n )}\n {children}\n </div>\n </DialogContext.Provider>\n );\n\n if (portal) {\n return createPortal(dialogContent, document.body);\n }\n\n return dialogContent;\n};\n\nDialog.displayName = 'Dialog';\n"],"names":[],"mappings":";;;;;;;;;;AAoBA;AAEA;;AAKE;;AAEE;;AAIF;AACF;AAEA;AAEA;;;;;;;;;;;;;;;;;;AAkBG;AACI;AAoBL;AACA;AACA;AACA;AAEA;;;;AAIC;;AAGC;AACA;AACD;;AAID;;;;AAKM;;;;;;AASN;;AAGM;;AAEJ;AAIF;AAAc;AAEd;;;;;AAMA;;;AAKM;;;;AA6CN;AACF;AAEA;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DialogBody.js","sources":["
|
|
1
|
+
{"version":3,"file":"DialogBody.js","sources":["src/components/feedback/Dialog/DialogBody.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport { cx } from '@/utils/cx';\n\nimport { dialogBodyStyle } from './Dialog.css';\n\nimport type { DialogBodyProps } from './Dialog.types';\n\n// --- Component ---\n\n/**\n * DialogBody renders the scrollable content area of a Dialog.\n *\n * @example\n * ```tsx\n * <DialogBody>\n * <p>Dialog content goes here.</p>\n * </DialogBody>\n * ```\n */\nexport const DialogBody: React.FC<DialogBodyProps> = ({\n children,\n className,\n style,\n testId,\n ref,\n ...rest\n}) => {\n return (\n <div\n ref={ref}\n className={cx(dialogBodyStyle, className)}\n style={style}\n data-testid={testId}\n {...rest}\n >\n {children}\n </div>\n );\n};\n\nDialogBody.displayName = 'DialogBody';\n"],"names":[],"mappings":";;;;;AAUA;AAEA;;;;;;;;;AASG;;;AAoBH;AAEA;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DialogClose.js","sources":["
|
|
1
|
+
{"version":3,"file":"DialogClose.js","sources":["src/components/feedback/Dialog/DialogClose.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport { useDialogContext } from './Dialog';\n\ninterface DialogCloseProps {\n /** The element to wrap with close behavior */\n children: React.ReactElement<{ onClick?: React.MouseEventHandler }>;\n}\n\n/**\n * DialogClose wraps a child element and adds onClick to close the dialog.\n *\n * @example\n * ```tsx\n * <DialogClose>\n * <Button>Cancel</Button>\n * </DialogClose>\n * ```\n */\nexport const DialogClose: React.FC<DialogCloseProps> = ({ children }) => {\n const { onClose } = useDialogContext();\n\n return React.cloneElement(children, {\n onClick: (e: React.MouseEvent) => {\n children.props.onClick?.(e);\n onClose();\n },\n });\n};\n\nDialogClose.displayName = 'DialogClose';\n"],"names":[],"mappings":";;;;AAWA;;;;;;;;;AASG;;AAED;AAEA;AACE;;AAEE;;AAEH;AACH;AAEA;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DialogFooter.js","sources":["
|
|
1
|
+
{"version":3,"file":"DialogFooter.js","sources":["src/components/feedback/Dialog/DialogFooter.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport { cx } from '@/utils/cx';\n\nimport { dialogFooterRecipe } from './Dialog.css';\n\nimport type { DialogFooterProps } from './Dialog.types';\n\n// --- Component ---\n\n/**\n * DialogFooter renders the action area at the bottom of a Dialog.\n *\n * @example\n * ```tsx\n * <DialogFooter align=\"right\">\n * <Button onClick={onCancel}>Cancel</Button>\n * <Button variant=\"filled\" onClick={onConfirm}>Confirm</Button>\n * </DialogFooter>\n * ```\n */\nexport const DialogFooter: React.FC<DialogFooterProps> = ({\n children,\n align = 'right',\n className,\n style,\n testId,\n ref,\n ...rest\n}) => {\n return (\n <div\n ref={ref}\n className={cx(dialogFooterRecipe({ align }), className)}\n style={style}\n data-testid={testId}\n {...rest}\n >\n {children}\n </div>\n );\n};\n\nDialogFooter.displayName = 'DialogFooter';\n"],"names":[],"mappings":";;;;;AAUA;AAEA;;;;;;;;;;AAUG;AACI;AASL;AAWF;AAEA;;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
3
|
import { CloseIcon } from '../../Icons/CloseIcon.js';
|
|
4
|
-
import { useDialogContext } from './Dialog.js';
|
|
5
4
|
import { cx } from '../../../utils/cx.js';
|
|
5
|
+
import { useDialogContext } from './Dialog.js';
|
|
6
6
|
import { dialogHeaderContentStyle, dialogTitleStyle, dialogDescriptionStyle, dialogCloseButtonStyle, dialogHeaderStyle } from './Dialog.css.js';
|
|
7
7
|
|
|
8
8
|
// --- Component ---
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DialogHeader.js","sources":["
|
|
1
|
+
{"version":3,"file":"DialogHeader.js","sources":["src/components/feedback/Dialog/DialogHeader.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport { CloseIcon } from '@/components/Icons/CloseIcon';\nimport { cx } from '@/utils/cx';\n\nimport { useDialogContext } from './Dialog';\nimport {\n dialogHeaderStyle,\n dialogHeaderContentStyle,\n dialogTitleStyle,\n dialogDescriptionStyle,\n dialogCloseButtonStyle,\n} from './Dialog.css';\n\nimport type { DialogHeaderProps } from './Dialog.types';\n\n// --- Component ---\n\n/**\n * DialogHeader renders the title, optional description, and close button\n * for a Dialog.\n *\n * @example\n * ```tsx\n * <DialogHeader description=\"This cannot be undone\">\n * Delete Item\n * </DialogHeader>\n * ```\n */\nexport const DialogHeader: React.FC<DialogHeaderProps> = ({\n children,\n showClose = true,\n description,\n className,\n style,\n testId,\n ref,\n ...rest\n}) => {\n const { onClose, titleId, descriptionId } = useDialogContext();\n\n return (\n <div\n ref={ref}\n className={cx(dialogHeaderStyle, className)}\n style={style}\n data-testid={testId}\n {...rest}\n >\n <div className={dialogHeaderContentStyle}>\n <div id={titleId} className={dialogTitleStyle}>\n {children}\n </div>\n {description && (\n <div id={descriptionId} className={dialogDescriptionStyle}>\n {description}\n </div>\n )}\n </div>\n {showClose && (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close dialog\"\n className={dialogCloseButtonStyle}\n data-testid={testId ? `${testId}-close` : undefined}\n >\n <CloseIcon size=\"sm\" decorative />\n </button>\n )}\n </div>\n );\n};\n\nDialogHeader.displayName = 'DialogHeader';\n"],"names":[],"mappings":";;;;;;;AAkBA;AAEA;;;;;;;;;;AAUG;AACI;;;AA2CP;AAEA;;"}
|
|
@@ -20,6 +20,10 @@ function useDialogAnimation({ open, panelRef, initialFocusRef, }) {
|
|
|
20
20
|
if (open) {
|
|
21
21
|
// Opening: capture previous focus, mount immediately
|
|
22
22
|
previousFocusRef.current = document.activeElement;
|
|
23
|
+
// Mount/closing state is driven by the `open` prop and gates a timed
|
|
24
|
+
// enter/exit animation (delayed unmount below), so it must live in an
|
|
25
|
+
// effect rather than be derived during render.
|
|
26
|
+
// eslint-disable-next-line react-hooks/set-state-in-effect
|
|
23
27
|
setClosing(false);
|
|
24
28
|
setMounted(true);
|
|
25
29
|
wasOpenRef.current = true;
|
|
@@ -44,7 +48,9 @@ function useDialogAnimation({ open, panelRef, initialFocusRef, }) {
|
|
|
44
48
|
previousFocusRef.current = null;
|
|
45
49
|
}
|
|
46
50
|
}, delay);
|
|
47
|
-
return () =>
|
|
51
|
+
return () => {
|
|
52
|
+
clearTimeout(timer);
|
|
53
|
+
};
|
|
48
54
|
}
|
|
49
55
|
return undefined;
|
|
50
56
|
}, [open]);
|
|
@@ -69,7 +75,9 @@ function useDialogAnimation({ open, panelRef, initialFocusRef, }) {
|
|
|
69
75
|
}
|
|
70
76
|
}
|
|
71
77
|
}, 0);
|
|
72
|
-
return () =>
|
|
78
|
+
return () => {
|
|
79
|
+
clearTimeout(timer);
|
|
80
|
+
};
|
|
73
81
|
}, [open, mounted, initialFocusRef, panelRef]);
|
|
74
82
|
return { mounted, closing };
|
|
75
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDialogAnimation.js","sources":["
|
|
1
|
+
{"version":3,"file":"useDialogAnimation.js","sources":["src/components/feedback/Dialog/useDialogAnimation.ts"],"sourcesContent":["'use client';\n\nimport { useEffect, useRef, useState } from 'react';\n\nimport { FOCUSABLE_SELECTOR } from '@/hooks/useFocusTrap';\n\nimport { DIALOG_ANIMATION_MS } from './Dialog.css';\n\nimport type { RefObject } from 'react';\n\ninterface UseDialogAnimationOptions {\n open: boolean;\n panelRef: RefObject<HTMLElement | null>;\n initialFocusRef?: RefObject<HTMLElement | null>;\n}\n\ninterface UseDialogAnimationReturn {\n mounted: boolean;\n closing: boolean;\n}\n\n/**\n * Manages Dialog mount/unmount animation lifecycle and focus management.\n *\n * Combines three concerns into a single hook:\n * 1. Mount/unmount with closing animation delay\n * 2. Initial focus on open (respects initialFocusRef)\n * 3. Return focus to previously focused element on close\n */\nexport function useDialogAnimation({\n open,\n panelRef,\n initialFocusRef,\n}: UseDialogAnimationOptions): UseDialogAnimationReturn {\n const [mounted, setMounted] = useState(false);\n const [closing, setClosing] = useState(false);\n const previousFocusRef = useRef<HTMLElement | null>(null);\n const wasOpenRef = useRef(false);\n\n useEffect(() => {\n if (open) {\n // Opening: capture previous focus, mount immediately\n previousFocusRef.current = document.activeElement as HTMLElement;\n // Mount/closing state is driven by the `open` prop and gates a timed\n // enter/exit animation (delayed unmount below), so it must live in an\n // effect rather than be derived during render.\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setClosing(false);\n setMounted(true);\n wasOpenRef.current = true;\n } else if (wasOpenRef.current) {\n // Closing: start close animation, unmount after delay. Under\n // prefers-reduced-motion: reduce, the close animation is suppressed\n // (Dialog.css.ts), so honor that here too — snap the unmount to\n // 0 ms instead of holding the dialog focus-trapped for nothing.\n wasOpenRef.current = false;\n setClosing(true);\n const prefersReducedMotion =\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n const delay = prefersReducedMotion ? 0 : DIALOG_ANIMATION_MS;\n const timer = setTimeout(() => {\n setMounted(false);\n setClosing(false);\n\n // Return focus after unmount\n if (previousFocusRef.current) {\n previousFocusRef.current.focus();\n previousFocusRef.current = null;\n }\n }, delay);\n return () => {\n clearTimeout(timer);\n };\n }\n return undefined;\n }, [open]);\n\n // Initial focus after mount\n useEffect(() => {\n if (!open || !mounted) return;\n\n const timer = setTimeout(() => {\n if (initialFocusRef?.current) {\n initialFocusRef.current.focus();\n } else {\n const panel = panelRef.current;\n if (panel) {\n const firstFocusable =\n panel.querySelector<HTMLElement>(FOCUSABLE_SELECTOR);\n if (firstFocusable) {\n firstFocusable.focus();\n } else {\n panel.focus();\n }\n }\n }\n }, 0);\n return () => {\n clearTimeout(timer);\n };\n }, [open, mounted, initialFocusRef, panelRef]);\n\n return { mounted, closing };\n}\n"],"names":[],"mappings":";;;;;AAqBA;;;;;;;AAOG;AACG;;;AAOJ;AACA;;;;AAKI;;;;;;;AAOA;;AACK;;;;;AAKL;;AAEA;AAEE;AACA;;AAEF;;;;AAKE;AACE;AACA;;;AAGJ;;AAEA;;AAEF;AACF;;;AAIE;;AAEA;AACE;AACE;;;AAEA;;;;;;;;;;;;AAYJ;;AAEA;;AAGF;AACF;;"}
|
|
@@ -88,7 +88,10 @@ const DrawerRoot = ({ open, onClose, anchor = 'right', size = 'md', modal = true
|
|
|
88
88
|
descriptionId,
|
|
89
89
|
};
|
|
90
90
|
const sizeStyle = resolveSize(size, anchor);
|
|
91
|
-
const drawerContent = (jsxs(DrawerContext.Provider, { value: contextValue, children: [modal && (
|
|
91
|
+
const drawerContent = (jsxs(DrawerContext.Provider, { value: contextValue, children: [modal && (
|
|
92
|
+
// Decorative backdrop: pointer users can click to dismiss, while
|
|
93
|
+
// keyboard users dismiss via Escape handled on the drawer panel.
|
|
94
|
+
jsx("div", { "aria-hidden": "true", className: overlayRecipe({ closing }), onClick: handleOverlayClick, "data-testid": testId ? `${testId}-overlay` : undefined })), jsxs("div", { ref: setPanelRef, role: "dialog", "aria-modal": modal ? 'true' : undefined, "aria-labelledby": title ? titleId : undefined, "aria-describedby": description ? descriptionId : undefined, tabIndex: -1, className: cx(drawerPanelRecipe({ anchor, state: closing ? 'closing' : 'open' }), className), style: { ...sizeStyle, ...style }, id: id, "data-testid": testId, "data-anchor": anchor, onKeyDown: handleKeyDown, ...rest, children: [title && (jsx("span", { id: titleId, style: { display: 'none' }, children: title })), description && (jsx("span", { id: descriptionId, style: { display: 'none' }, children: description })), children] })] }));
|
|
92
95
|
if (portal && typeof document !== 'undefined') {
|
|
93
96
|
return createPortal(drawerContent, document.body);
|
|
94
97
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Drawer.js","sources":["
|
|
1
|
+
{"version":3,"file":"Drawer.js","sources":["src/components/feedback/Drawer/Drawer.tsx"],"sourcesContent":["'use client';\n\nimport React, {\n createContext,\n useCallback,\n useContext,\n useId,\n useRef,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { CloseIcon } from '@/components/Icons/CloseIcon';\nimport { useFocusTrap } from '@/hooks/useFocusTrap';\nimport { useMergedRef } from '@/hooks/useMergedRef';\nimport { cx } from '@/utils/cx';\n\nimport {\n DRAWER_SIZE_MAP,\n drawerBodyStyle,\n drawerCloseButtonStyle,\n drawerDescriptionStyle,\n drawerFooterRecipe,\n drawerHeaderContentStyle,\n drawerHeaderStyle,\n drawerPanelRecipe,\n drawerTitleStyle,\n overlayRecipe,\n} from './Drawer.css';\nimport { useDrawerAnimation } from './useDrawerAnimation';\n\nimport type {\n DrawerBodyProps,\n DrawerCloseButtonProps,\n DrawerContextValue,\n DrawerFooterProps,\n DrawerHeaderProps,\n DrawerProps,\n DrawerSize,\n} from './Drawer.types';\n\nconst DrawerContext = /*#__PURE__*/ createContext<DrawerContextValue | null>(\n null\n);\n\nfunction useDrawerContext(): DrawerContextValue {\n const ctx = useContext(DrawerContext);\n if (!ctx) {\n throw new Error('Drawer sub-components must be used within <Drawer>');\n }\n return ctx;\n}\n\nfunction resolveSize(\n size: DrawerSize,\n anchor: 'left' | 'right' | 'top' | 'bottom'\n) {\n const isHorizontal = anchor === 'left' || anchor === 'right';\n const dimension = isHorizontal ? 'width' : 'height';\n let value: string;\n if (typeof size === 'number') {\n value = `${String(size)}px`;\n } else {\n value = DRAWER_SIZE_MAP[size] ?? size;\n }\n return {\n [dimension]: value,\n maxWidth: '100vw',\n maxHeight: '100vh',\n } as React.CSSProperties;\n}\n\n/**\n * Anchored sliding panel for secondary navigation, filters, or detail views.\n * Modal mode renders an overlay backdrop and traps focus; non-modal mode\n * leaves the rest of the page interactive.\n *\n * @example\n * ```tsx\n * <Drawer open={isOpen} onClose={close} anchor=\"right\" size=\"md\">\n * <Drawer.Header>Filters</Drawer.Header>\n * <Drawer.Body>...</Drawer.Body>\n * <Drawer.Footer>\n * <Button onClick={close}>Cancel</Button>\n * <Button variant=\"filled\">Apply</Button>\n * </Drawer.Footer>\n * </Drawer>\n * ```\n */\nconst DrawerRoot: React.FC<DrawerProps> = ({\n open,\n onClose,\n anchor = 'right',\n size = 'md',\n modal = true,\n closeOnOverlayClick = true,\n closeOnEscape = true,\n trapFocus,\n initialFocusRef,\n portal = true,\n title,\n description,\n className,\n style,\n testId,\n id,\n children,\n ref,\n ...rest\n}) => {\n const autoId = useId();\n const titleId = `drawer-title-${autoId}`;\n const descriptionId = `drawer-desc-${autoId}`;\n const panelRef = useRef<HTMLDivElement>(null);\n\n const shouldTrapFocus = trapFocus ?? modal;\n\n const { mounted, closing } = useDrawerAnimation({\n open,\n panelRef,\n initialFocusRef,\n shouldFocus: shouldTrapFocus,\n });\n\n const handleFocusTrap = useFocusTrap({\n containerRef: panelRef,\n enabled: shouldTrapFocus,\n });\n\n const setPanelRef = useMergedRef<HTMLDivElement>(panelRef, ref);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (closeOnEscape && e.key === 'Escape') {\n e.stopPropagation();\n onClose();\n return;\n }\n handleFocusTrap(e);\n },\n [closeOnEscape, onClose, handleFocusTrap]\n );\n\n const handleOverlayClick = useCallback(\n (e: React.MouseEvent) => {\n if (closeOnOverlayClick && e.target === e.currentTarget) {\n onClose();\n }\n },\n [closeOnOverlayClick, onClose]\n );\n\n if (!mounted) return null;\n\n const contextValue: DrawerContextValue = {\n onClose,\n titleId,\n descriptionId,\n };\n\n const sizeStyle = resolveSize(size, anchor);\n\n const drawerContent = (\n <DrawerContext.Provider value={contextValue}>\n {modal && (\n // Decorative backdrop: pointer users can click to dismiss, while\n // keyboard users dismiss via Escape handled on the drawer panel.\n <div\n aria-hidden=\"true\"\n className={overlayRecipe({ closing })}\n onClick={handleOverlayClick}\n data-testid={testId ? `${testId}-overlay` : undefined}\n />\n )}\n {/* The drawer panel needs a keydown handler for Escape-to-close and\n focus trapping; this is required modal-dialog behavior, not a static\n element repurposed as interactive. */}\n {/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions */}\n <div\n ref={setPanelRef}\n role=\"dialog\"\n aria-modal={modal ? 'true' : undefined}\n aria-labelledby={title ? titleId : undefined}\n aria-describedby={description ? descriptionId : undefined}\n tabIndex={-1}\n className={cx(\n drawerPanelRecipe({ anchor, state: closing ? 'closing' : 'open' }),\n className\n )}\n style={{ ...sizeStyle, ...style }}\n id={id}\n data-testid={testId}\n data-anchor={anchor}\n onKeyDown={handleKeyDown}\n {...rest}\n >\n {title && (\n <span id={titleId} style={{ display: 'none' }}>\n {title}\n </span>\n )}\n {description && (\n <span id={descriptionId} style={{ display: 'none' }}>\n {description}\n </span>\n )}\n {children}\n </div>\n </DrawerContext.Provider>\n );\n\n if (portal && typeof document !== 'undefined') {\n return createPortal(drawerContent, document.body);\n }\n return drawerContent;\n};\n\nDrawerRoot.displayName = 'Drawer';\n\nconst DrawerHeader: React.FC<DrawerHeaderProps> = ({\n children,\n showClose = true,\n description,\n className,\n style,\n testId,\n ref,\n ...rest\n}) => {\n const { onClose, titleId, descriptionId } = useDrawerContext();\n return (\n <div\n ref={ref}\n className={cx(drawerHeaderStyle, className)}\n style={style}\n data-testid={testId}\n {...rest}\n >\n <div className={drawerHeaderContentStyle}>\n <div id={titleId} className={drawerTitleStyle}>\n {children}\n </div>\n {description && (\n <div id={descriptionId} className={drawerDescriptionStyle}>\n {description}\n </div>\n )}\n </div>\n {showClose && (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close drawer\"\n className={drawerCloseButtonStyle}\n data-testid={testId ? `${testId}-close` : undefined}\n >\n <CloseIcon size=\"sm\" decorative />\n </button>\n )}\n </div>\n );\n};\n\nDrawerHeader.displayName = 'Drawer.Header';\n\nconst DrawerBody: React.FC<DrawerBodyProps> = ({\n children,\n className,\n style,\n testId,\n ref,\n ...rest\n}) => (\n <div\n ref={ref}\n className={cx(drawerBodyStyle, className)}\n style={style}\n data-testid={testId}\n {...rest}\n >\n {children}\n </div>\n);\n\nDrawerBody.displayName = 'Drawer.Body';\n\nconst DrawerFooter: React.FC<DrawerFooterProps> = ({\n children,\n align = 'right',\n className,\n style,\n testId,\n ref,\n ...rest\n}) => (\n <div\n ref={ref}\n className={cx(drawerFooterRecipe({ align }), className)}\n style={style}\n data-testid={testId}\n {...rest}\n >\n {children}\n </div>\n);\n\nDrawerFooter.displayName = 'Drawer.Footer';\n\nconst DrawerCloseButton: React.FC<DrawerCloseButtonProps> = ({\n children,\n className,\n style,\n testId,\n 'aria-label': ariaLabel = 'Close drawer',\n ref,\n ...rest\n}) => {\n const { onClose } = useDrawerContext();\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={onClose}\n aria-label={ariaLabel}\n className={cx(drawerCloseButtonStyle, className)}\n style={style}\n data-testid={testId}\n {...rest}\n >\n {children ?? <CloseIcon size=\"sm\" decorative />}\n </button>\n );\n};\n\nDrawerCloseButton.displayName = 'Drawer.CloseButton';\n\ninterface DrawerComponent extends React.FC<DrawerProps> {\n Header: React.FC<DrawerHeaderProps>;\n Body: React.FC<DrawerBodyProps>;\n Footer: React.FC<DrawerFooterProps>;\n CloseButton: React.FC<DrawerCloseButtonProps>;\n}\n\nexport const Drawer = Object.assign(DrawerRoot, {\n Header: DrawerHeader,\n Body: DrawerBody,\n Footer: DrawerFooter,\n CloseButton: DrawerCloseButton,\n}) as DrawerComponent;\n"],"names":[],"mappings":";;;;;;;;;;;AAwCA;AAIA;AACE;;AAEE;;AAEF;AACF;AAEA;;;AAME;AACA;AACE;;;AAEA;;;;AAIA;AACA;;AAEJ;AAEA;;;;;;;;;;;;;;;;AAgBG;AACH;AAqBE;AACA;AACA;AACA;AAEA;AAEA;;;;AAIE;AACD;;AAGC;AACA;AACD;;AAID;;;AAIM;;;;;AAQN;;AAGM;;AAEJ;AAIF;AAAc;AAEd;;;;;;AAQA;;;AAKM;AA4CN;;;AAGA;AACF;AAEA;AAEA;;;AA0CA;AAEA;AAEA;AAmBA;AAEA;AAoBA;AAEA;AASE;;AAeF;AAEA;;AAUE;AACA;AACA;AACA;AACD;;"}
|
|
@@ -18,6 +18,10 @@ function useDrawerAnimation({ open, panelRef, initialFocusRef, shouldFocus, }) {
|
|
|
18
18
|
useEffect(() => {
|
|
19
19
|
if (open) {
|
|
20
20
|
previousFocusRef.current = document.activeElement;
|
|
21
|
+
// Mount/closing state is driven by the `open` prop and gates a timed
|
|
22
|
+
// enter/exit animation (delayed unmount below), so it must live in an
|
|
23
|
+
// effect rather than be derived during render.
|
|
24
|
+
// eslint-disable-next-line react-hooks/set-state-in-effect
|
|
21
25
|
setClosing(false);
|
|
22
26
|
setMounted(true);
|
|
23
27
|
wasOpenRef.current = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDrawerAnimation.js","sources":["
|
|
1
|
+
{"version":3,"file":"useDrawerAnimation.js","sources":["src/components/feedback/Drawer/useDrawerAnimation.ts"],"sourcesContent":["'use client';\n\nimport { useEffect, useRef, useState } from 'react';\n\nimport { FOCUSABLE_SELECTOR } from '@/hooks/useFocusTrap';\n\nimport { DRAWER_ANIMATION_MS } from './Drawer.css';\n\nimport type { RefObject } from 'react';\n\ninterface UseDrawerAnimationOptions {\n open: boolean;\n panelRef: RefObject<HTMLElement | null>;\n initialFocusRef?: RefObject<HTMLElement | null>;\n shouldFocus: boolean;\n}\n\ninterface UseDrawerAnimationReturn {\n mounted: boolean;\n closing: boolean;\n}\n\n/**\n * Mount/unmount animation lifecycle plus focus management for Drawer.\n * Mirrors the Dialog hook so behavior stays consistent: mount on open,\n * delay unmount on close to play the slide-out, return focus to the\n * previously focused element. `prefers-reduced-motion: reduce` collapses\n * the animation delay to zero.\n */\nexport function useDrawerAnimation({\n open,\n panelRef,\n initialFocusRef,\n shouldFocus,\n}: UseDrawerAnimationOptions): UseDrawerAnimationReturn {\n const [mounted, setMounted] = useState(false);\n const [closing, setClosing] = useState(false);\n const previousFocusRef = useRef<HTMLElement | null>(null);\n const wasOpenRef = useRef(false);\n\n useEffect(() => {\n if (open) {\n previousFocusRef.current = document.activeElement as HTMLElement;\n // Mount/closing state is driven by the `open` prop and gates a timed\n // enter/exit animation (delayed unmount below), so it must live in an\n // effect rather than be derived during render.\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setClosing(false);\n setMounted(true);\n wasOpenRef.current = true;\n return undefined;\n }\n if (wasOpenRef.current) {\n wasOpenRef.current = false;\n setClosing(true);\n const prefersReducedMotion =\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n const delay = prefersReducedMotion ? 0 : DRAWER_ANIMATION_MS;\n const timer = setTimeout(() => {\n setMounted(false);\n setClosing(false);\n if (previousFocusRef.current) {\n previousFocusRef.current.focus();\n previousFocusRef.current = null;\n }\n }, delay);\n return () => {\n clearTimeout(timer);\n };\n }\n return undefined;\n }, [open]);\n\n useEffect(() => {\n if (!open || !mounted || !shouldFocus) return undefined;\n const timer = setTimeout(() => {\n if (initialFocusRef?.current) {\n initialFocusRef.current.focus();\n return;\n }\n const panel = panelRef.current;\n if (!panel) return;\n const firstFocusable =\n panel.querySelector<HTMLElement>(FOCUSABLE_SELECTOR);\n if (firstFocusable) {\n firstFocusable.focus();\n } else {\n panel.focus();\n }\n }, 0);\n return () => {\n clearTimeout(timer);\n };\n }, [open, mounted, initialFocusRef, panelRef, shouldFocus]);\n\n return { mounted, closing };\n}\n"],"names":[],"mappings":";;;;;AAsBA;;;;;;AAMG;AACG;;;AAQJ;AACA;;;AAII;;;;;;;AAOA;AACA;;AAEF;AACE;;AAEA;AAEE;AACA;;AAEF;;;AAGE;AACE;AACA;;;AAGJ;;AAEA;;AAEF;AACF;;AAGE;AAAuC;AACvC;AACE;AACE;;;AAGF;AACA;;;;;;;;;;AASF;;AAEA;AACF;AAEA;AACF;;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
3
|
import React from 'react';
|
|
4
|
-
import { cx } from '../../../utils/cx.js';
|
|
5
4
|
import { Spinner } from '../Spinner/Spinner.js';
|
|
5
|
+
import { cx } from '../../../utils/cx.js';
|
|
6
6
|
import { emptyStateIconStyle, emptyStateTextColumnCompactStyle, emptyStateTextColumnStyle, emptyStateTitleStyle, emptyStateDescriptionStyle, emptyStateActionStyle, emptyStateRecipe } from './EmptyState.css.js';
|
|
7
7
|
|
|
8
8
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmptyState.js","sources":["
|
|
1
|
+
{"version":3,"file":"EmptyState.js","sources":["src/components/feedback/EmptyState/EmptyState.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport { Spinner } from '@/components/feedback/Spinner';\nimport { cx } from '@/utils/cx';\n\nimport {\n emptyStateActionStyle,\n emptyStateDescriptionStyle,\n emptyStateIconStyle,\n emptyStateRecipe,\n emptyStateTextColumnCompactStyle,\n emptyStateTextColumnStyle,\n emptyStateTitleStyle,\n} from './EmptyState.css';\n\nimport type { EmptyStateProps } from './EmptyState.types';\n\n/**\n * Generic empty / loading state surface.\n *\n * Use for empty lists, filtered-out results, or \"not yet started\"\n * placeholders. When `loading` is `true`, a `Spinner` is rendered in\n * place of the icon and the root uses `role=\"status\"`.\n *\n * @example\n * ```tsx\n * <EmptyState\n * icon={<SearchIcon size=\"lg\" />}\n * title=\"No results\"\n * description=\"Try a different search term.\"\n * action={<Button>Reset filters</Button>}\n * />\n *\n * <EmptyState loading title=\"Loading conversation...\" />\n * ```\n */\nexport const EmptyState = /*#__PURE__*/ React.memo<EmptyStateProps>(\n ({\n icon,\n title,\n description,\n action,\n variant = 'default',\n loading = false,\n className,\n style,\n testId,\n ref,\n ...rest\n }) => {\n const textColumnClass =\n variant === 'compact'\n ? emptyStateTextColumnCompactStyle\n : emptyStateTextColumnStyle;\n\n const statusAttrs = loading\n ? {\n role: 'status' as const,\n 'aria-live': 'polite' as const,\n }\n : {};\n\n return (\n <div\n ref={ref}\n className={cx(emptyStateRecipe({ variant }), className)}\n style={style}\n data-testid={testId}\n {...statusAttrs}\n {...rest}\n >\n {loading ? (\n <span className={emptyStateIconStyle}>\n <Spinner size=\"lg\" />\n </span>\n ) : (\n icon && <span className={emptyStateIconStyle}>{icon}</span>\n )}\n\n {(title !== undefined && title !== null) ||\n (description !== undefined && description !== null) ? (\n <div className={textColumnClass}>\n {title !== undefined && title !== null && (\n <h3 className={emptyStateTitleStyle}>{title}</h3>\n )}\n {description !== undefined && description !== null && (\n <p className={emptyStateDescriptionStyle}>{description}</p>\n )}\n </div>\n ) : null}\n\n {action && <div className={emptyStateActionStyle}>{action}</div>}\n </div>\n );\n }\n);\n\nEmptyState.displayName = 'EmptyState';\n"],"names":[],"mappings":";;;;;;;AAmBA;;;;;;;;;;;;;;;;;;AAkBG;AACI;AAcH;AAEI;;;AAIF;AACI;AACA;AACD;;AAGL;AAkBI;AAcN;AAGF;;"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import './../../../assets/src/components/feedback/LogView/LogView.css.ts.vanilla-nB5ENOpw.css';
|
|
2
|
+
import { createRuntimeFn } from '@vanilla-extract/recipes/createRuntimeFn';
|
|
3
|
+
|
|
4
|
+
var DENSITY_ROW_HEIGHT = {comfortable:30,compact:26,dense:22};
|
|
5
|
+
var bodyDensityRecipe = createRuntimeFn({defaultClassName:'LogView__1koarpap',variantClassNames:{density:{comfortable:'LogView_bodyDensityRecipe_density_comfortable__1koarpaq',compact:'LogView_bodyDensityRecipe_density_compact__1koarpar',dense:'LogView_bodyDensityRecipe_density_dense__1koarpas'}},defaultVariants:{density:'compact'},compoundVariants:[]});
|
|
6
|
+
var bodyStyle = 'LogView_bodyStyle__1koarpan';
|
|
7
|
+
var chipCountStyle = 'LogView_chipCountStyle__1koarpam';
|
|
8
|
+
var copyLineButtonStyle = 'LogView_copyLineButtonStyle__1koarpa1e';
|
|
9
|
+
var emptyStateStyle = 'LogView_emptyStateStyle__1koarpa1f';
|
|
10
|
+
var footerStyle = 'LogView_footerStyle__1koarpa9';
|
|
11
|
+
var highlightStyle = 'LogView_highlightStyle__1koarpa1d';
|
|
12
|
+
var jumpBadgeStyle = 'LogView_jumpBadgeStyle__1koarpa1j';
|
|
13
|
+
var jumpButtonRecipe = createRuntimeFn({defaultClassName:'LogView_jumpButtonRecipe__1koarpa1g',variantClassNames:{visible:{true:'LogView_jumpButtonRecipe_visible_true__1koarpa1h',false:'LogView_jumpButtonRecipe_visible_false__1koarpa1i'}},defaultVariants:{visible:false},compoundVariants:[]});
|
|
14
|
+
var levelChipRecipe = createRuntimeFn({defaultClassName:'LogView_levelChipRecipe__1koarpac',variantClassNames:{level:{debug:'LogView_levelChipRecipe_level_debug__1koarpad',info:'LogView_levelChipRecipe_level_info__1koarpae',warn:'LogView_levelChipRecipe_level_warn__1koarpaf',error:'LogView_levelChipRecipe_level_error__1koarpag',custom:'LogView_levelChipRecipe_level_custom__1koarpah'},active:{true:'LogView_levelChipRecipe_active_true__1koarpai',false:'LogView_levelChipRecipe_active_false__1koarpaj'}},defaultVariants:{active:true},compoundVariants:[]});
|
|
15
|
+
var levelColorVar = 'var(--levelColorVar__1koarpa2)';
|
|
16
|
+
var levelDotStyle = 'LogView_levelDotStyle__1koarpal';
|
|
17
|
+
var levelFilterStyle = 'LogView_levelFilterStyle__1koarpab';
|
|
18
|
+
var levelGlyphStyle = 'LogView_levelGlyphStyle__1koarpak';
|
|
19
|
+
var messageRecipe = createRuntimeFn({defaultClassName:'LogView_messageRecipe__1koarpa1a',variantClassNames:{wrap:{true:'LogView_messageRecipe_wrap_true__1koarpa1b',false:'LogView_messageRecipe_wrap_false__1koarpa1c'}},defaultVariants:{wrap:false},compoundVariants:[]});
|
|
20
|
+
var plainBodyStyle = 'LogView_plainBodyStyle__1koarpau';
|
|
21
|
+
var rootRecipe = createRuntimeFn({defaultClassName:'LogView_rootRecipe__1koarpa3',variantClassNames:{density:{comfortable:'LogView_rootRecipe_density_comfortable__1koarpa4',compact:'LogView_rootRecipe_density_compact__1koarpa5',dense:'LogView_rootRecipe_density_dense__1koarpa6'}},defaultVariants:{density:'compact'},compoundVariants:[]});
|
|
22
|
+
var rowGlyphStyle = 'LogView_rowGlyphStyle__1koarpa17';
|
|
23
|
+
var rowRecipe = createRuntimeFn({defaultClassName:'LogView_rowRecipe__1koarpav',variantClassNames:{level:{debug:'LogView_rowRecipe_level_debug__1koarpaw',info:'LogView_rowRecipe_level_info__1koarpax',warn:'LogView_rowRecipe_level_warn__1koarpay',error:'LogView_rowRecipe_level_error__1koarpaz',custom:'LogView_rowRecipe_level_custom__1koarpa10'},virtualized:{true:'LogView_rowRecipe_virtualized_true__1koarpa11'},interactive:{true:'LogView_rowRecipe_interactive_true__1koarpa12'},selected:{true:'LogView_rowRecipe_selected_true__1koarpa13'},align:{center:'LogView_rowRecipe_align_center__1koarpa14',start:'LogView_rowRecipe_align_start__1koarpa15'}},defaultVariants:{align:'center'},compoundVariants:[]});
|
|
24
|
+
var scrollViewportStyle = 'LogView_scrollViewportStyle__1koarpao';
|
|
25
|
+
var searchWrapperStyle = 'LogView_searchWrapperStyle__1koarpaa';
|
|
26
|
+
var sourceCellStyle = 'LogView_sourceCellStyle__1koarpa18';
|
|
27
|
+
var sourceTagStyle = 'LogView_sourceTagStyle__1koarpa19';
|
|
28
|
+
var timestampStyle = 'LogView_timestampStyle__1koarpa16';
|
|
29
|
+
var toolbarSpacerStyle = 'LogView_toolbarSpacerStyle__1koarpa8';
|
|
30
|
+
var toolbarStyle = 'LogView_toolbarStyle__1koarpa7';
|
|
31
|
+
var totalHeightVar = 'var(--totalHeightVar__1koarpa0)';
|
|
32
|
+
var virtualBodyStyle = 'LogView_virtualBodyStyle__1koarpat';
|
|
33
|
+
|
|
34
|
+
export { DENSITY_ROW_HEIGHT, bodyDensityRecipe, bodyStyle, chipCountStyle, copyLineButtonStyle, emptyStateStyle, footerStyle, highlightStyle, jumpBadgeStyle, jumpButtonRecipe, levelChipRecipe, levelColorVar, levelDotStyle, levelFilterStyle, levelGlyphStyle, messageRecipe, plainBodyStyle, rootRecipe, rowGlyphStyle, rowRecipe, scrollViewportStyle, searchWrapperStyle, sourceCellStyle, sourceTagStyle, timestampStyle, toolbarSpacerStyle, toolbarStyle, totalHeightVar, virtualBodyStyle };
|
|
35
|
+
//# sourceMappingURL=LogView.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LogView.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|