entangle-ui 0.2.0 → 0.4.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 +139 -7
- package/README.md +98 -52
- package/dist/esm/_virtual/cjs.js +4 -0
- package/dist/esm/_virtual/cjs.js.map +1 -0
- package/dist/esm/_virtual/cssesc.js +4 -0
- package/dist/esm/_virtual/cssesc.js.map +1 -0
- package/dist/esm/assets/src/components/controls/CartesianPicker/CartesianPicker.css.ts.vanilla-Ccao9ycw.css +23 -0
- package/dist/esm/assets/src/components/controls/ColorPicker/ColorPicker.css.ts.vanilla-Do5nbdgO.css +341 -0
- package/dist/esm/assets/src/components/controls/CurveEditor/CurveEditor.css.ts.vanilla-Vn9SOx70.css +76 -0
- package/dist/esm/assets/src/components/controls/NumberInput/NumberInput.css.ts.vanilla-uGNr81xQ.css +158 -0
- package/dist/esm/assets/src/components/controls/Select/Select.css.ts.vanilla-D4C059Ua.css +225 -0
- package/dist/esm/assets/src/components/controls/Slider/Slider.css.ts.vanilla-C5SJ_7A1.css +173 -0
- package/dist/esm/assets/src/components/controls/TreeView/TreeNode.css.ts.vanilla-D3ylUhuW.css +150 -0
- package/dist/esm/assets/src/components/controls/TreeView/TreeView.css.ts.vanilla-CsG5-rWt.css +14 -0
- package/dist/esm/assets/src/components/controls/VectorInput/VectorInput.css.ts.vanilla-BJma3iQ4.css +102 -0
- package/dist/esm/assets/src/components/editor/ChatPanel/ChatPanel.css.ts.vanilla-DPIGnZ4A.css +701 -0
- package/dist/esm/assets/src/components/editor/PropertyInspector/PropertyGroup.css.ts.vanilla-Co4n5a98.css +25 -0
- package/dist/esm/assets/src/components/editor/PropertyInspector/PropertyPanel.css.ts.vanilla-RYv_XgOu.css +46 -0
- package/dist/esm/assets/src/components/editor/PropertyInspector/PropertyRow.css.ts.vanilla-C3YZnnHb.css +75 -0
- package/dist/esm/assets/src/components/editor/PropertyInspector/PropertySection.css.ts.vanilla-DJBtY_xk.css +105 -0
- package/dist/esm/assets/src/components/editor/ViewportGizmo/ViewportGizmo.css.ts.vanilla-CEs2H-Iv.css +43 -0
- package/dist/esm/assets/src/components/feedback/Dialog/Dialog.css.ts.vanilla-BrXTOHwS.css +169 -0
- package/dist/esm/assets/src/components/feedback/Toast/ToastContainer.css.ts.vanilla-tBLsZ_70.css +13 -0
- package/dist/esm/assets/src/components/feedback/Toast/ToastItem.css.ts.vanilla-D6UuPKAj.css +152 -0
- package/dist/esm/assets/src/components/form/FormHelperText.css.ts.vanilla-CXKd9jtx.css +11 -0
- package/dist/esm/assets/src/components/form/FormLabel.css.ts.vanilla-DHn6CB2v.css +17 -0
- package/dist/esm/assets/src/components/form/InputWrapper.css.ts.vanilla-Bl7u62PI.css +44 -0
- package/dist/esm/assets/src/components/layout/Accordion/Accordion.css.ts.vanilla-Ck5Yew0e.css +118 -0
- package/dist/esm/assets/src/components/layout/Flex/Flex.css.ts.vanilla-D7wY2gY6.css +142 -0
- package/dist/esm/assets/src/components/layout/Grid/Grid.css.ts.vanilla-gqfqUi29.css +213 -0
- package/dist/esm/assets/src/components/layout/PanelSurface/PanelSurface.css.ts.vanilla-HZvObe0l.css +86 -0
- package/dist/esm/assets/src/components/layout/ScrollArea/ScrollArea.css.ts.vanilla-UsyrfXTC.css +126 -0
- package/dist/esm/assets/src/components/layout/Spacer/Spacer.css.ts.vanilla-A-7aOV46.css +14 -0
- package/dist/esm/assets/src/components/layout/SplitPane/SplitPane.css.ts.vanilla-BFxdvwyI.css +44 -0
- package/dist/esm/assets/src/components/layout/Stack/Stack.css.ts.vanilla-DNZOFYiD.css +123 -0
- package/dist/esm/assets/src/components/navigation/Menu/Menu.css.ts.vanilla-DD0c5D10.css +67 -0
- package/dist/esm/assets/src/components/navigation/Tabs/Tabs.css.ts.vanilla-D7RGpDPC.css +247 -0
- package/dist/esm/assets/src/components/primitives/Button/Button.css.ts.vanilla-CT592JL7.css +98 -0
- package/dist/esm/assets/src/components/primitives/Checkbox/Checkbox.css.ts.vanilla-dvrGPiPs.css +124 -0
- package/dist/esm/assets/src/components/primitives/Collapsible/Collapsible.css.ts.vanilla-C1rYV-JT.css +73 -0
- package/dist/esm/assets/src/components/primitives/Icon/Icon.css.ts.vanilla-DIZ6dped.css +45 -0
- package/dist/esm/assets/src/components/primitives/IconButton/IconButton.css.ts.vanilla-C-xAQoR3.css +123 -0
- package/dist/esm/assets/src/components/primitives/Input/Input.css.ts.vanilla-De5ditYa.css +74 -0
- package/dist/esm/assets/src/components/primitives/Paper/Paper.css.ts.vanilla-B_tPWU80.css +67 -0
- package/dist/esm/assets/src/components/primitives/Popover/Popover.css.ts.vanilla-DW6aAr57.css +60 -0
- package/dist/esm/assets/src/components/primitives/Switch/Switch.css.ts.vanilla-CxqwUToB.css +100 -0
- package/dist/esm/assets/src/components/primitives/Text/Text.css.ts.vanilla-qTMvgKKC.css +126 -0
- package/dist/esm/assets/src/components/primitives/Tooltip/Tooltip.css.ts.vanilla-CrEFoLBX.css +71 -0
- package/dist/esm/assets/src/components/primitives/canvas/CanvasContainer.css.ts.vanilla-DR3zkEYQ.css +32 -0
- package/dist/esm/assets/src/components/shell/AppShell/AppShell.css.ts.vanilla-BYmtU0O_.css +97 -0
- package/dist/esm/assets/src/components/shell/FloatingPanel/FloatingPanel.css.ts.vanilla-1rIAXEFp.css +88 -0
- package/dist/esm/assets/src/components/shell/MenuBar/MenuBar.css.ts.vanilla-TgPcl4yA.css +120 -0
- package/dist/esm/assets/src/components/shell/StatusBar/StatusBar.css.ts.vanilla-BwO7oAZi.css +113 -0
- package/dist/esm/assets/src/components/shell/Toolbar/Toolbar.css.ts.vanilla-DPqftT18.css +97 -0
- package/dist/esm/assets/src/theme/darkTheme.css.ts.vanilla-V8lWHaQH.css +95 -0
- package/dist/esm/components/Icons/CheckIcon.js +27 -0
- package/dist/esm/components/Icons/CheckIcon.js.map +1 -0
- package/dist/esm/components/Icons/ChevronDownIcon.js +27 -0
- package/dist/esm/components/Icons/ChevronDownIcon.js.map +1 -0
- package/dist/esm/components/Icons/ChevronUpIcon.js +27 -0
- package/dist/esm/components/Icons/ChevronUpIcon.js.map +1 -0
- package/dist/esm/components/Icons/CircleIcon.js +27 -0
- package/dist/esm/components/Icons/CircleIcon.js.map +1 -0
- package/dist/esm/components/Icons/CloseIcon.js +27 -0
- package/dist/esm/components/Icons/CloseIcon.js.map +1 -0
- package/dist/esm/components/Icons/EyeDropperIcon.js +28 -0
- package/dist/esm/components/Icons/EyeDropperIcon.js.map +1 -0
- package/dist/esm/components/Icons/TangentAlignedIcon.js +9 -0
- package/dist/esm/components/Icons/TangentAlignedIcon.js.map +1 -0
- package/dist/esm/components/Icons/TangentAutoIcon.js +9 -0
- package/dist/esm/components/Icons/TangentAutoIcon.js.map +1 -0
- package/dist/esm/components/Icons/TangentFreeIcon.js +9 -0
- package/dist/esm/components/Icons/TangentFreeIcon.js.map +1 -0
- package/dist/esm/components/Icons/TangentLinearIcon.js +9 -0
- package/dist/esm/components/Icons/TangentLinearIcon.js.map +1 -0
- package/dist/esm/components/Icons/TangentMirroredIcon.js +9 -0
- package/dist/esm/components/Icons/TangentMirroredIcon.js.map +1 -0
- package/dist/esm/components/Icons/TangentStepIcon.js +9 -0
- package/dist/esm/components/Icons/TangentStepIcon.js.map +1 -0
- package/dist/esm/components/controls/CartesianPicker/CartesianPicker.css.js +9 -0
- package/dist/esm/components/controls/CartesianPicker/CartesianPicker.css.js.map +1 -0
- package/dist/esm/components/controls/CartesianPicker/CartesianPicker.js +99 -0
- package/dist/esm/components/controls/CartesianPicker/CartesianPicker.js.map +1 -0
- package/dist/esm/components/controls/CartesianPicker/useCartesianInteraction.js +230 -0
- package/dist/esm/components/controls/CartesianPicker/useCartesianInteraction.js.map +1 -0
- package/dist/esm/components/controls/CartesianPicker/useCartesianRenderer.js +122 -0
- package/dist/esm/components/controls/CartesianPicker/useCartesianRenderer.js.map +1 -0
- package/dist/esm/components/controls/ColorPicker/AlphaSlider.js +55 -0
- package/dist/esm/components/controls/ColorPicker/AlphaSlider.js.map +1 -0
- package/dist/esm/components/controls/ColorPicker/ColorArea.js +64 -0
- package/dist/esm/components/controls/ColorPicker/ColorArea.js.map +1 -0
- package/dist/esm/components/controls/ColorPicker/ColorInputs.js +64 -0
- package/dist/esm/components/controls/ColorPicker/ColorInputs.js.map +1 -0
- package/dist/esm/components/controls/ColorPicker/ColorPalette.js +19 -0
- package/dist/esm/components/controls/ColorPicker/ColorPalette.js.map +1 -0
- package/dist/esm/components/controls/ColorPicker/ColorPicker.css.js +34 -0
- package/dist/esm/components/controls/ColorPicker/ColorPicker.css.js.map +1 -0
- package/dist/esm/components/controls/ColorPicker/ColorPicker.js +61 -0
- package/dist/esm/components/controls/ColorPicker/ColorPicker.js.map +1 -0
- package/dist/esm/components/controls/ColorPicker/ColorPresets.js +18 -0
- package/dist/esm/components/controls/ColorPicker/ColorPresets.js.map +1 -0
- package/dist/esm/components/controls/ColorPicker/ColorSwatch.js +13 -0
- package/dist/esm/components/controls/ColorPicker/ColorSwatch.js.map +1 -0
- package/dist/esm/components/controls/ColorPicker/EyeDropper.js +39 -0
- package/dist/esm/components/controls/ColorPicker/EyeDropper.js.map +1 -0
- package/dist/esm/components/controls/ColorPicker/HueSlider.js +56 -0
- package/dist/esm/components/controls/ColorPicker/HueSlider.js.map +1 -0
- package/dist/esm/components/controls/ColorPicker/colorUtils.js +220 -0
- package/dist/esm/components/controls/ColorPicker/colorUtils.js.map +1 -0
- package/dist/esm/components/controls/ColorPicker/palettes/material.js +299 -0
- package/dist/esm/components/controls/ColorPicker/palettes/material.js.map +1 -0
- package/dist/esm/components/controls/ColorPicker/palettes/professional.js +479 -0
- package/dist/esm/components/controls/ColorPicker/palettes/professional.js.map +1 -0
- package/dist/esm/components/controls/ColorPicker/palettes/tailwind.js +366 -0
- package/dist/esm/components/controls/ColorPicker/palettes/tailwind.js.map +1 -0
- package/dist/esm/components/controls/ColorPicker/useColor.js +64 -0
- package/dist/esm/components/controls/ColorPicker/useColor.js.map +1 -0
- package/dist/esm/components/controls/CurveEditor/CurveCanvas.js +62 -0
- package/dist/esm/components/controls/CurveEditor/CurveCanvas.js.map +1 -0
- package/dist/esm/components/controls/CurveEditor/CurveEditor.css.js +17 -0
- package/dist/esm/components/controls/CurveEditor/CurveEditor.css.js.map +1 -0
- package/dist/esm/components/controls/CurveEditor/CurveEditor.js +128 -0
- package/dist/esm/components/controls/CurveEditor/CurveEditor.js.map +1 -0
- package/dist/esm/components/controls/CurveEditor/CurveToolbar.js +79 -0
- package/dist/esm/components/controls/CurveEditor/CurveToolbar.js.map +1 -0
- package/dist/esm/components/controls/CurveEditor/curvePresets.js +184 -0
- package/dist/esm/components/controls/CurveEditor/curvePresets.js.map +1 -0
- package/dist/esm/components/controls/CurveEditor/curveUtils.js +329 -0
- package/dist/esm/components/controls/CurveEditor/curveUtils.js.map +1 -0
- package/dist/esm/components/controls/CurveEditor/useCurveInteraction.js +570 -0
- package/dist/esm/components/controls/CurveEditor/useCurveInteraction.js.map +1 -0
- package/dist/esm/components/controls/CurveEditor/useCurveRenderer.js +246 -0
- package/dist/esm/components/controls/CurveEditor/useCurveRenderer.js.map +1 -0
- package/dist/esm/components/controls/NumberInput/NumberInput.css.js +17 -0
- package/dist/esm/components/controls/NumberInput/NumberInput.css.js.map +1 -0
- package/dist/esm/components/controls/NumberInput/NumberInput.js +233 -0
- package/dist/esm/components/controls/NumberInput/NumberInput.js.map +1 -0
- package/dist/esm/components/controls/NumberInput/useNumberInput.js +324 -0
- package/dist/esm/components/controls/NumberInput/useNumberInput.js.map +1 -0
- package/dist/esm/components/controls/Select/Select.css.js +18 -0
- package/dist/esm/components/controls/Select/Select.css.js.map +1 -0
- package/dist/esm/components/controls/Select/Select.js +327 -0
- package/dist/esm/components/controls/Select/Select.js.map +1 -0
- package/dist/esm/components/controls/Slider/Slider.css.js +17 -0
- package/dist/esm/components/controls/Slider/Slider.css.js.map +1 -0
- package/dist/esm/components/controls/Slider/Slider.js +266 -0
- package/dist/esm/components/controls/Slider/Slider.js.map +1 -0
- package/dist/esm/components/controls/TreeView/TreeNode.css.js +15 -0
- package/dist/esm/components/controls/TreeView/TreeNode.css.js.map +1 -0
- package/dist/esm/components/controls/TreeView/TreeNode.js +117 -0
- package/dist/esm/components/controls/TreeView/TreeNode.js.map +1 -0
- package/dist/esm/components/controls/TreeView/TreeView.css.js +8 -0
- package/dist/esm/components/controls/TreeView/TreeView.css.js.map +1 -0
- package/dist/esm/components/controls/TreeView/TreeView.js +206 -0
- package/dist/esm/components/controls/TreeView/TreeView.js.map +1 -0
- package/dist/esm/components/controls/TreeView/useTreeState.js +155 -0
- package/dist/esm/components/controls/TreeView/useTreeState.js.map +1 -0
- package/dist/esm/components/controls/VectorInput/VectorInput.css.js +13 -0
- package/dist/esm/components/controls/VectorInput/VectorInput.css.js.map +1 -0
- package/dist/esm/components/controls/VectorInput/VectorInput.js +130 -0
- package/dist/esm/components/controls/VectorInput/VectorInput.js.map +1 -0
- package/dist/esm/components/editor/ChatPanel/ChatActionBar.js +13 -0
- package/dist/esm/components/editor/ChatPanel/ChatActionBar.js.map +1 -0
- package/dist/esm/components/editor/ChatPanel/ChatAttachment.js +36 -0
- package/dist/esm/components/editor/ChatPanel/ChatAttachment.js.map +1 -0
- package/dist/esm/components/editor/ChatPanel/ChatBubble.js +13 -0
- package/dist/esm/components/editor/ChatPanel/ChatBubble.js.map +1 -0
- package/dist/esm/components/editor/ChatPanel/ChatCodeBlock.js +34 -0
- package/dist/esm/components/editor/ChatPanel/ChatCodeBlock.js.map +1 -0
- package/dist/esm/components/editor/ChatPanel/ChatContextChip.js +17 -0
- package/dist/esm/components/editor/ChatPanel/ChatContextChip.js.map +1 -0
- package/dist/esm/components/editor/ChatPanel/ChatEmptyState.js +16 -0
- package/dist/esm/components/editor/ChatPanel/ChatEmptyState.js.map +1 -0
- package/dist/esm/components/editor/ChatPanel/ChatInput.js +67 -0
- package/dist/esm/components/editor/ChatPanel/ChatInput.js.map +1 -0
- package/dist/esm/components/editor/ChatPanel/ChatInputToolbar.js +13 -0
- package/dist/esm/components/editor/ChatPanel/ChatInputToolbar.js.map +1 -0
- package/dist/esm/components/editor/ChatPanel/ChatMessage.js +37 -0
- package/dist/esm/components/editor/ChatPanel/ChatMessage.js.map +1 -0
- package/dist/esm/components/editor/ChatPanel/ChatMessageList.js +32 -0
- package/dist/esm/components/editor/ChatPanel/ChatMessageList.js.map +1 -0
- package/dist/esm/components/editor/ChatPanel/ChatPanel.css.js +72 -0
- package/dist/esm/components/editor/ChatPanel/ChatPanel.css.js.map +1 -0
- package/dist/esm/components/editor/ChatPanel/ChatPanel.js +13 -0
- package/dist/esm/components/editor/ChatPanel/ChatPanel.js.map +1 -0
- package/dist/esm/components/editor/ChatPanel/ChatToolCall.js +35 -0
- package/dist/esm/components/editor/ChatPanel/ChatToolCall.js.map +1 -0
- package/dist/esm/components/editor/ChatPanel/ChatTypingIndicator.js +16 -0
- package/dist/esm/components/editor/ChatPanel/ChatTypingIndicator.js.map +1 -0
- package/dist/esm/components/editor/ChatPanel/useChatInput.js +60 -0
- package/dist/esm/components/editor/ChatPanel/useChatInput.js.map +1 -0
- package/dist/esm/components/editor/ChatPanel/useChatMessages.js +47 -0
- package/dist/esm/components/editor/ChatPanel/useChatMessages.js.map +1 -0
- package/dist/esm/components/editor/ChatPanel/useChatScroll.js +71 -0
- package/dist/esm/components/editor/ChatPanel/useChatScroll.js.map +1 -0
- package/dist/esm/components/editor/PropertyInspector/PropertyGroup.css.js +10 -0
- package/dist/esm/components/editor/PropertyInspector/PropertyGroup.css.js.map +1 -0
- package/dist/esm/components/editor/PropertyInspector/PropertyGroup.js +22 -0
- package/dist/esm/components/editor/PropertyInspector/PropertyGroup.js.map +1 -0
- package/dist/esm/components/editor/PropertyInspector/PropertyPanel.css.js +13 -0
- package/dist/esm/components/editor/PropertyInspector/PropertyPanel.css.js.map +1 -0
- package/dist/esm/components/editor/PropertyInspector/PropertyPanel.js +69 -0
- package/dist/esm/components/editor/PropertyInspector/PropertyPanel.js.map +1 -0
- package/dist/esm/components/editor/PropertyInspector/PropertyRow.css.js +15 -0
- package/dist/esm/components/editor/PropertyInspector/PropertyRow.css.js.map +1 -0
- package/dist/esm/components/editor/PropertyInspector/PropertyRow.js +74 -0
- package/dist/esm/components/editor/PropertyInspector/PropertyRow.js.map +1 -0
- package/dist/esm/components/editor/PropertyInspector/PropertySection.css.js +15 -0
- package/dist/esm/components/editor/PropertyInspector/PropertySection.css.js.map +1 -0
- package/dist/esm/components/editor/PropertyInspector/PropertySection.js +51 -0
- package/dist/esm/components/editor/PropertyInspector/PropertySection.js.map +1 -0
- package/dist/esm/components/editor/PropertyInspector/usePropertyUndo.js +87 -0
- package/dist/esm/components/editor/PropertyInspector/usePropertyUndo.js.map +1 -0
- package/dist/esm/components/editor/ViewportGizmo/ViewportGizmo.css.js +10 -0
- package/dist/esm/components/editor/ViewportGizmo/ViewportGizmo.css.js.map +1 -0
- package/dist/esm/components/editor/ViewportGizmo/ViewportGizmo.js +90 -0
- package/dist/esm/components/editor/ViewportGizmo/ViewportGizmo.js.map +1 -0
- package/dist/esm/components/editor/ViewportGizmo/gizmoMath.js +259 -0
- package/dist/esm/components/editor/ViewportGizmo/gizmoMath.js.map +1 -0
- package/dist/esm/components/editor/ViewportGizmo/useGizmoInteraction.js +250 -0
- package/dist/esm/components/editor/ViewportGizmo/useGizmoInteraction.js.map +1 -0
- package/dist/esm/components/editor/ViewportGizmo/useGizmoRenderer.js +191 -0
- package/dist/esm/components/editor/ViewportGizmo/useGizmoRenderer.js.map +1 -0
- package/dist/esm/components/feedback/Dialog/Dialog.css.js +16 -0
- package/dist/esm/components/feedback/Dialog/Dialog.css.js.map +1 -0
- package/dist/esm/components/feedback/Dialog/Dialog.js +94 -0
- package/dist/esm/components/feedback/Dialog/Dialog.js.map +1 -0
- package/dist/esm/components/feedback/Dialog/DialogBody.js +23 -0
- package/dist/esm/components/feedback/Dialog/DialogBody.js.map +1 -0
- package/dist/esm/components/feedback/Dialog/DialogClose.js +27 -0
- package/dist/esm/components/feedback/Dialog/DialogClose.js.map +1 -0
- package/dist/esm/components/feedback/Dialog/DialogFooter.js +24 -0
- package/dist/esm/components/feedback/Dialog/DialogFooter.js.map +1 -0
- package/dist/esm/components/feedback/Dialog/DialogHeader.js +26 -0
- package/dist/esm/components/feedback/Dialog/DialogHeader.js.map +1 -0
- package/dist/esm/components/feedback/Dialog/useDialogAnimation.js +71 -0
- package/dist/esm/components/feedback/Dialog/useDialogAnimation.js.map +1 -0
- package/dist/esm/components/feedback/Dialog/useFocusTrap.js +56 -0
- package/dist/esm/components/feedback/Dialog/useFocusTrap.js.map +1 -0
- package/dist/esm/components/feedback/Toast/ToastContainer.css.js +10 -0
- package/dist/esm/components/feedback/Toast/ToastContainer.css.js.map +1 -0
- package/dist/esm/components/feedback/Toast/ToastContainer.js +36 -0
- package/dist/esm/components/feedback/Toast/ToastContainer.js.map +1 -0
- package/dist/esm/components/feedback/Toast/ToastItem.css.js +16 -0
- package/dist/esm/components/feedback/Toast/ToastItem.css.js.map +1 -0
- package/dist/esm/components/feedback/Toast/ToastItem.js +84 -0
- package/dist/esm/components/feedback/Toast/ToastItem.js.map +1 -0
- package/dist/esm/components/feedback/Toast/ToastProvider.js +48 -0
- package/dist/esm/components/feedback/Toast/ToastProvider.js.map +1 -0
- package/dist/esm/components/feedback/Toast/useToast.js +61 -0
- package/dist/esm/components/feedback/Toast/useToast.js.map +1 -0
- package/dist/esm/components/form/FormHelperText.css.js +7 -0
- package/dist/esm/components/form/FormHelperText.css.js.map +1 -0
- package/dist/esm/components/form/FormHelperText.js +28 -0
- package/dist/esm/components/form/FormHelperText.js.map +1 -0
- package/dist/esm/components/form/FormLabel.css.js +8 -0
- package/dist/esm/components/form/FormLabel.css.js.map +1 -0
- package/dist/esm/components/form/FormLabel.js +27 -0
- package/dist/esm/components/form/FormLabel.js.map +1 -0
- package/dist/esm/components/form/InputWrapper.css.js +7 -0
- package/dist/esm/components/form/InputWrapper.css.js.map +1 -0
- package/dist/esm/components/form/InputWrapper.js +32 -0
- package/dist/esm/components/form/InputWrapper.js.map +1 -0
- package/dist/esm/components/layout/Accordion/Accordion.css.js +20 -0
- package/dist/esm/components/layout/Accordion/Accordion.css.js.map +1 -0
- package/dist/esm/components/layout/Accordion/Accordion.js +104 -0
- package/dist/esm/components/layout/Accordion/Accordion.js.map +1 -0
- package/dist/esm/components/layout/Accordion/AccordionContent.js +21 -0
- package/dist/esm/components/layout/Accordion/AccordionContent.js.map +1 -0
- package/dist/esm/components/layout/Accordion/AccordionItem.js +21 -0
- package/dist/esm/components/layout/Accordion/AccordionItem.js.map +1 -0
- package/dist/esm/components/layout/Accordion/AccordionTrigger.js +39 -0
- package/dist/esm/components/layout/Accordion/AccordionTrigger.js.map +1 -0
- package/dist/esm/components/layout/Flex/Flex.css.js +11 -0
- package/dist/esm/components/layout/Flex/Flex.css.js.map +1 -0
- package/dist/esm/components/layout/Flex/Flex.js +123 -0
- package/dist/esm/components/layout/Flex/Flex.js.map +1 -0
- package/dist/esm/components/layout/Grid/Grid.css.js +9 -0
- package/dist/esm/components/layout/Grid/Grid.css.js.map +1 -0
- package/dist/esm/components/layout/Grid/Grid.js +93 -0
- package/dist/esm/components/layout/Grid/Grid.js.map +1 -0
- package/dist/esm/components/layout/PanelSurface/PanelSurface.css.js +16 -0
- package/dist/esm/components/layout/PanelSurface/PanelSurface.css.js.map +1 -0
- package/dist/esm/components/layout/PanelSurface/PanelSurface.js +51 -0
- package/dist/esm/components/layout/PanelSurface/PanelSurface.js.map +1 -0
- package/dist/esm/components/layout/ScrollArea/ScrollArea.css.js +27 -0
- package/dist/esm/components/layout/ScrollArea/ScrollArea.css.js.map +1 -0
- package/dist/esm/components/layout/ScrollArea/ScrollArea.js +263 -0
- package/dist/esm/components/layout/ScrollArea/ScrollArea.js.map +1 -0
- package/dist/esm/components/layout/Spacer/Spacer.css.js +8 -0
- package/dist/esm/components/layout/Spacer/Spacer.css.js.map +1 -0
- package/dist/esm/components/layout/Spacer/Spacer.js +60 -0
- package/dist/esm/components/layout/Spacer/Spacer.js.map +1 -0
- package/dist/esm/components/layout/SplitPane/SplitPane.css.js +10 -0
- package/dist/esm/components/layout/SplitPane/SplitPane.css.js.map +1 -0
- package/dist/esm/components/layout/SplitPane/SplitPane.js +557 -0
- package/dist/esm/components/layout/SplitPane/SplitPane.js.map +1 -0
- package/dist/esm/components/layout/SplitPane/SplitPanePanel.js +26 -0
- package/dist/esm/components/layout/SplitPane/SplitPanePanel.js.map +1 -0
- package/dist/esm/components/layout/Stack/Stack.css.js +8 -0
- package/dist/esm/components/layout/Stack/Stack.css.js.map +1 -0
- package/dist/esm/components/layout/Stack/Stack.js +109 -0
- package/dist/esm/components/layout/Stack/Stack.js.map +1 -0
- package/dist/esm/components/navigation/ContextMenu/ContextMenu.js +47 -0
- package/dist/esm/components/navigation/ContextMenu/ContextMenu.js.map +1 -0
- package/dist/esm/components/navigation/ContextMenu/useContextMenuTarget.js +53 -0
- package/dist/esm/components/navigation/ContextMenu/useContextMenuTarget.js.map +1 -0
- package/dist/esm/components/navigation/Menu/Menu.css.js +16 -0
- package/dist/esm/components/navigation/Menu/Menu.css.js.map +1 -0
- package/dist/esm/components/navigation/Menu/Menu.helpers.js +54 -0
- package/dist/esm/components/navigation/Menu/Menu.helpers.js.map +1 -0
- package/dist/esm/components/navigation/Menu/Menu.js +82 -0
- package/dist/esm/components/navigation/Menu/Menu.js.map +1 -0
- package/dist/esm/components/navigation/Menu/useMenu.js +88 -0
- package/dist/esm/components/navigation/Menu/useMenu.js.map +1 -0
- package/dist/esm/components/navigation/Tabs/Tab.js +79 -0
- package/dist/esm/components/navigation/Tabs/Tab.js.map +1 -0
- package/dist/esm/components/navigation/Tabs/TabList.js +64 -0
- package/dist/esm/components/navigation/Tabs/TabList.js.map +1 -0
- package/dist/esm/components/navigation/Tabs/TabPanel.js +24 -0
- package/dist/esm/components/navigation/Tabs/TabPanel.js.map +1 -0
- package/dist/esm/components/navigation/Tabs/Tabs.css.js +26 -0
- package/dist/esm/components/navigation/Tabs/Tabs.css.js.map +1 -0
- package/dist/esm/components/navigation/Tabs/Tabs.js +70 -0
- package/dist/esm/components/navigation/Tabs/Tabs.js.map +1 -0
- package/dist/esm/components/primitives/BaseButton/BaseButton.js +18 -0
- package/dist/esm/components/primitives/BaseButton/BaseButton.js.map +1 -0
- package/dist/esm/components/primitives/Button/Button.css.js +9 -0
- package/dist/esm/components/primitives/Button/Button.css.js.map +1 -0
- package/dist/esm/components/primitives/Button/Button.js +39 -0
- package/dist/esm/components/primitives/Button/Button.js.map +1 -0
- package/dist/esm/components/primitives/Checkbox/Checkbox.css.js +14 -0
- package/dist/esm/components/primitives/Checkbox/Checkbox.css.js.map +1 -0
- package/dist/esm/components/primitives/Checkbox/Checkbox.js +113 -0
- package/dist/esm/components/primitives/Checkbox/Checkbox.js.map +1 -0
- package/dist/esm/components/primitives/Checkbox/CheckboxGroup.js +64 -0
- package/dist/esm/components/primitives/Checkbox/CheckboxGroup.js.map +1 -0
- package/dist/esm/components/primitives/Collapsible/Collapsible.css.js +18 -0
- package/dist/esm/components/primitives/Collapsible/Collapsible.css.js.map +1 -0
- package/dist/esm/components/primitives/Collapsible/Collapsible.js +78 -0
- package/dist/esm/components/primitives/Collapsible/Collapsible.js.map +1 -0
- package/dist/esm/components/primitives/Icon/Icon.css.js +7 -0
- package/dist/esm/components/primitives/Icon/Icon.css.js.map +1 -0
- package/dist/esm/components/primitives/Icon/Icon.js +31 -0
- package/dist/esm/components/primitives/Icon/Icon.js.map +1 -0
- package/dist/esm/components/primitives/IconButton/IconButton.css.js +8 -0
- package/dist/esm/components/primitives/IconButton/IconButton.css.js.map +1 -0
- package/dist/esm/components/primitives/IconButton/IconButton.js +62 -0
- package/dist/esm/components/primitives/IconButton/IconButton.js.map +1 -0
- package/dist/esm/components/primitives/Input/Input.css.js +12 -0
- package/dist/esm/components/primitives/Input/Input.css.js.map +1 -0
- package/dist/esm/components/primitives/Input/Input.js +65 -0
- package/dist/esm/components/primitives/Input/Input.js.map +1 -0
- package/dist/esm/components/primitives/Paper/Paper.css.js +7 -0
- package/dist/esm/components/primitives/Paper/Paper.css.js.map +1 -0
- package/dist/esm/components/primitives/Paper/Paper.js +74 -0
- package/dist/esm/components/primitives/Paper/Paper.js.map +1 -0
- package/dist/esm/components/primitives/Popover/Popover.css.js +8 -0
- package/dist/esm/components/primitives/Popover/Popover.css.js.map +1 -0
- package/dist/esm/components/primitives/Popover/Popover.js +122 -0
- package/dist/esm/components/primitives/Popover/Popover.js.map +1 -0
- package/dist/esm/components/primitives/Popover/PopoverClose.js +22 -0
- package/dist/esm/components/primitives/Popover/PopoverClose.js.map +1 -0
- package/dist/esm/components/primitives/Popover/PopoverContent.js +76 -0
- package/dist/esm/components/primitives/Popover/PopoverContent.js.map +1 -0
- package/dist/esm/components/primitives/Popover/PopoverTrigger.js +38 -0
- package/dist/esm/components/primitives/Popover/PopoverTrigger.js.map +1 -0
- package/dist/esm/components/primitives/Switch/Switch.css.js +15 -0
- package/dist/esm/components/primitives/Switch/Switch.css.js.map +1 -0
- package/dist/esm/components/primitives/Switch/Switch.js +77 -0
- package/dist/esm/components/primitives/Switch/Switch.js.map +1 -0
- package/dist/esm/components/primitives/Text/Text.css.js +9 -0
- package/dist/esm/components/primitives/Text/Text.css.js.map +1 -0
- package/dist/esm/components/primitives/Text/Text.js +60 -0
- package/dist/esm/components/primitives/Text/Text.js.map +1 -0
- package/dist/esm/components/primitives/Tooltip/Arrow.js +19 -0
- package/dist/esm/components/primitives/Tooltip/Arrow.js.map +1 -0
- package/dist/esm/components/primitives/Tooltip/Tooltip.css.js +9 -0
- package/dist/esm/components/primitives/Tooltip/Tooltip.css.js.map +1 -0
- package/dist/esm/components/primitives/Tooltip/Tooltip.js +160 -0
- package/dist/esm/components/primitives/Tooltip/Tooltip.js.map +1 -0
- package/dist/esm/components/primitives/Tooltip/utils.js +66 -0
- package/dist/esm/components/primitives/Tooltip/utils.js.map +1 -0
- package/dist/esm/components/primitives/canvas/CanvasContainer.css.js +10 -0
- package/dist/esm/components/primitives/canvas/CanvasContainer.css.js.map +1 -0
- package/dist/esm/components/primitives/canvas/CanvasContainer.js +32 -0
- package/dist/esm/components/primitives/canvas/CanvasContainer.js.map +1 -0
- package/dist/esm/components/primitives/canvas/canvasCoords.js +51 -0
- package/dist/esm/components/primitives/canvas/canvasCoords.js.map +1 -0
- package/dist/esm/components/primitives/canvas/canvasDrawing.js +251 -0
- package/dist/esm/components/primitives/canvas/canvasDrawing.js.map +1 -0
- package/dist/esm/components/primitives/canvas/canvasTheme.js +43 -0
- package/dist/esm/components/primitives/canvas/canvasTheme.js.map +1 -0
- package/dist/esm/components/primitives/canvas/useCanvasRenderer.js +26 -0
- package/dist/esm/components/primitives/canvas/useCanvasRenderer.js.map +1 -0
- package/dist/esm/components/shell/AppShell/AppShell.css.js +13 -0
- package/dist/esm/components/shell/AppShell/AppShell.css.js.map +1 -0
- package/dist/esm/components/shell/AppShell/AppShell.js +72 -0
- package/dist/esm/components/shell/AppShell/AppShell.js.map +1 -0
- package/dist/esm/components/shell/FloatingPanel/FloatingPanel.css.js +18 -0
- package/dist/esm/components/shell/FloatingPanel/FloatingPanel.css.js.map +1 -0
- package/dist/esm/components/shell/FloatingPanel/FloatingPanel.js +159 -0
- package/dist/esm/components/shell/FloatingPanel/FloatingPanel.js.map +1 -0
- package/dist/esm/components/shell/MenuBar/MenuBar.css.js +16 -0
- package/dist/esm/components/shell/MenuBar/MenuBar.css.js.map +1 -0
- package/dist/esm/components/shell/MenuBar/MenuBar.js +215 -0
- package/dist/esm/components/shell/MenuBar/MenuBar.js.map +1 -0
- package/dist/esm/components/shell/StatusBar/StatusBar.css.js +11 -0
- package/dist/esm/components/shell/StatusBar/StatusBar.css.js.map +1 -0
- package/dist/esm/components/shell/StatusBar/StatusBar.js +38 -0
- package/dist/esm/components/shell/StatusBar/StatusBar.js.map +1 -0
- package/dist/esm/components/shell/Toolbar/Toolbar.css.js +11 -0
- package/dist/esm/components/shell/Toolbar/Toolbar.css.js.map +1 -0
- package/dist/esm/components/shell/Toolbar/Toolbar.js +109 -0
- package/dist/esm/components/shell/Toolbar/Toolbar.js.map +1 -0
- package/dist/esm/context/KeyboardContext.js +15 -0
- package/dist/esm/context/KeyboardContext.js.map +1 -0
- package/dist/esm/index.js +101 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/node_modules/@vanilla-extract/css/adapter/dist/vanilla-extract-css-adapter.esm.js +15 -0
- package/dist/esm/node_modules/@vanilla-extract/css/adapter/dist/vanilla-extract-css-adapter.esm.js.map +1 -0
- package/dist/esm/node_modules/@vanilla-extract/css/dist/transformCss-fd0786e1.esm.js +128 -0
- package/dist/esm/node_modules/@vanilla-extract/css/dist/transformCss-fd0786e1.esm.js.map +1 -0
- package/dist/esm/node_modules/@vanilla-extract/css/dist/vanilla-extract-css.esm.js +70 -0
- package/dist/esm/node_modules/@vanilla-extract/css/dist/vanilla-extract-css.esm.js.map +1 -0
- package/dist/esm/node_modules/@vanilla-extract/css/node_modules/lru-cache/dist/esm/index.js +1543 -0
- package/dist/esm/node_modules/@vanilla-extract/css/node_modules/lru-cache/dist/esm/index.js.map +1 -0
- package/dist/esm/node_modules/@vanilla-extract/dynamic/dist/vanilla-extract-dynamic.esm.js +25 -0
- package/dist/esm/node_modules/@vanilla-extract/dynamic/dist/vanilla-extract-dynamic.esm.js.map +1 -0
- package/dist/esm/node_modules/@vanilla-extract/private/dist/vanilla-extract-private.esm.js +10 -0
- package/dist/esm/node_modules/@vanilla-extract/private/dist/vanilla-extract-private.esm.js.map +1 -0
- package/dist/esm/node_modules/@vanilla-extract/recipes/dist/createRuntimeFn-62c9670f.esm.js +112 -0
- package/dist/esm/node_modules/@vanilla-extract/recipes/dist/createRuntimeFn-62c9670f.esm.js.map +1 -0
- package/dist/esm/node_modules/cssesc/cssesc.js +120 -0
- package/dist/esm/node_modules/cssesc/cssesc.js.map +1 -0
- package/dist/esm/node_modules/dedent/dist/dedent.js +98 -0
- package/dist/esm/node_modules/dedent/dist/dedent.js.map +1 -0
- package/dist/esm/node_modules/deepmerge/dist/cjs.js +143 -0
- package/dist/esm/node_modules/deepmerge/dist/cjs.js.map +1 -0
- package/dist/esm/palettes.js +4 -0
- package/dist/esm/palettes.js.map +1 -0
- package/dist/esm/theme/ThemeProvider.js +18 -0
- package/dist/esm/theme/ThemeProvider.js.map +1 -0
- package/dist/esm/theme/VanillaThemeProvider.js +26 -0
- package/dist/esm/theme/VanillaThemeProvider.js.map +1 -0
- package/dist/esm/theme/contract.css.js +4 -0
- package/dist/esm/theme/contract.css.js.map +1 -0
- package/dist/esm/theme/darkTheme.css.js +6 -0
- package/dist/esm/theme/darkTheme.css.js.map +1 -0
- package/dist/esm/utils/cn.js +6 -0
- package/dist/esm/utils/cn.js.map +1 -0
- package/dist/esm/utils/cx.js +14 -0
- package/dist/esm/utils/cx.js.map +1 -0
- package/dist/esm/utils/mathExpression.js +275 -0
- package/dist/esm/utils/mathExpression.js.map +1 -0
- package/dist/esm/utils/mathUtils.js +18 -0
- package/dist/esm/utils/mathUtils.js.map +1 -0
- package/dist/types/components/controls/CartesianPicker/CartesianPicker.d.ts +6 -0
- package/dist/types/components/controls/CartesianPicker/CartesianPicker.types.d.ts +163 -0
- package/dist/types/components/controls/ColorPicker/ColorPalette.d.ts +16 -0
- package/dist/types/components/controls/ColorPicker/ColorPicker.d.ts +6 -0
- package/dist/types/components/controls/ColorPicker/ColorPicker.types.d.ts +120 -0
- package/dist/types/components/controls/ColorPicker/ColorSwatch.d.ts +6 -0
- package/dist/types/components/controls/ColorPicker/EyeDropper.d.ts +28 -0
- package/dist/types/components/controls/ColorPicker/colorUtils.d.ts +3 -0
- package/dist/types/components/controls/ColorPicker/palettes/material.d.ts +24 -0
- package/dist/types/components/controls/ColorPicker/palettes/professional.d.ts +19 -0
- package/dist/types/components/controls/ColorPicker/palettes/tailwind.d.ts +12 -0
- package/dist/types/components/controls/CurveEditor/CurveEditor.d.ts +6 -0
- package/dist/types/components/controls/CurveEditor/CurveEditor.types.d.ts +289 -0
- package/dist/types/components/controls/CurveEditor/curvePresets.d.ts +5 -0
- package/dist/types/components/controls/CurveEditor/curveUtils.d.ts +30 -0
- package/dist/types/components/controls/NumberInput/NumberInput.d.ts +150 -0
- package/dist/types/components/controls/NumberInput/useNumberInput.d.ts +65 -0
- package/dist/types/components/controls/Select/Select.d.ts +29 -0
- package/dist/types/components/controls/Select/Select.types.d.ts +131 -0
- package/dist/types/components/controls/Slider/Slider.d.ts +178 -0
- package/dist/types/components/controls/TreeView/TreeView.d.ts +27 -0
- package/dist/types/components/controls/TreeView/TreeView.types.d.ts +135 -0
- package/dist/types/components/controls/VectorInput/VectorInput.d.ts +26 -0
- package/dist/types/components/controls/VectorInput/VectorInput.types.d.ts +158 -0
- package/dist/types/components/editor/ChatPanel/ChatActionBar.d.ts +288 -0
- package/dist/types/components/editor/ChatPanel/ChatAttachment.d.ts +292 -0
- package/dist/types/components/editor/ChatPanel/ChatBubble.d.ts +289 -0
- package/dist/types/components/editor/ChatPanel/ChatCodeBlock.d.ts +294 -0
- package/dist/types/components/editor/ChatPanel/ChatContextChip.d.ts +292 -0
- package/dist/types/components/editor/ChatPanel/ChatEmptyState.d.ts +292 -0
- package/dist/types/components/editor/ChatPanel/ChatInput.d.ts +300 -0
- package/dist/types/components/editor/ChatPanel/ChatInputToolbar.d.ts +288 -0
- package/dist/types/components/editor/ChatPanel/ChatMessage.d.ts +294 -0
- package/dist/types/components/editor/ChatPanel/ChatMessageList.d.ts +293 -0
- package/dist/types/components/editor/ChatPanel/ChatPanel.d.ts +290 -0
- package/dist/types/components/editor/ChatPanel/ChatPanel.types.d.ts +409 -0
- package/dist/types/components/editor/ChatPanel/ChatToolCall.d.ts +294 -0
- package/dist/types/components/editor/ChatPanel/ChatTypingIndicator.d.ts +291 -0
- package/dist/types/components/editor/ChatPanel/useChatInput.d.ts +5 -0
- package/dist/types/components/editor/ChatPanel/useChatMessages.d.ts +5 -0
- package/dist/types/components/editor/ChatPanel/useChatScroll.d.ts +5 -0
- package/dist/types/components/editor/PropertyInspector/PropertyGroup.d.ts +6 -0
- package/dist/types/components/editor/PropertyInspector/PropertyInspector.types.d.ts +238 -0
- package/dist/types/components/editor/PropertyInspector/PropertyPanel.d.ts +6 -0
- package/dist/types/components/editor/PropertyInspector/PropertyRow.d.ts +6 -0
- package/dist/types/components/editor/PropertyInspector/PropertySection.d.ts +6 -0
- package/dist/types/components/editor/PropertyInspector/usePropertyUndo.d.ts +9 -0
- package/dist/types/components/editor/ViewportGizmo/ViewportGizmo.d.ts +6 -0
- package/dist/types/components/editor/ViewportGizmo/ViewportGizmo.types.d.ts +146 -0
- package/dist/types/components/editor/ViewportGizmo/gizmoMath.d.ts +73 -0
- package/dist/types/components/feedback/Dialog/Dialog.d.ts +25 -0
- package/dist/types/components/feedback/Dialog/Dialog.types.d.ts +55 -0
- package/dist/types/components/feedback/Dialog/DialogBody.d.ts +16 -0
- package/dist/types/components/feedback/Dialog/DialogClose.d.ts +21 -0
- package/dist/types/components/feedback/Dialog/DialogFooter.d.ts +17 -0
- package/dist/types/components/feedback/Dialog/DialogHeader.d.ts +17 -0
- package/dist/types/components/feedback/Toast/Toast.types.d.ts +39 -0
- package/dist/types/components/feedback/Toast/ToastProvider.d.ts +19 -0
- package/dist/types/components/feedback/Toast/useToast.d.ts +22 -0
- package/dist/types/components/form/FormHelperText.d.ts +319 -0
- package/dist/types/components/form/FormLabel.d.ts +329 -0
- package/dist/types/components/form/InputWrapper.d.ts +344 -0
- package/dist/types/components/layout/Accordion/Accordion.d.ts +23 -0
- package/dist/types/components/layout/Accordion/Accordion.types.d.ts +109 -0
- package/dist/types/components/layout/Accordion/AccordionContent.d.ts +6 -0
- package/dist/types/components/layout/Accordion/AccordionItem.d.ts +6 -0
- package/dist/types/components/layout/Accordion/AccordionTrigger.d.ts +6 -0
- package/dist/types/components/layout/Flex/Flex.d.ts +215 -0
- package/dist/types/components/layout/Grid/Grid.d.ts +113 -0
- package/dist/types/components/layout/PanelSurface/PanelSurface.d.ts +1148 -0
- package/dist/types/components/layout/PanelSurface/PanelSurface.types.d.ts +64 -0
- package/dist/types/components/layout/ScrollArea/ScrollArea.d.ts +6 -0
- package/dist/types/components/layout/ScrollArea/ScrollArea.types.d.ts +93 -0
- package/dist/types/components/layout/Spacer/Spacer.d.ts +327 -0
- package/dist/types/components/layout/SplitPane/SplitPane.d.ts +21 -0
- package/dist/types/components/layout/SplitPane/SplitPane.types.d.ts +87 -0
- package/dist/types/components/layout/SplitPane/SplitPanePanel.d.ts +20 -0
- package/dist/types/components/layout/Stack/Stack.d.ts +166 -0
- package/dist/types/components/navigation/ContextMenu/ContextMenu.d.ts +6 -0
- package/dist/types/components/navigation/ContextMenu/ContextMenu.types.d.ts +74 -0
- package/dist/types/components/navigation/ContextMenu/useContextMenuTarget.d.ts +5 -0
- package/dist/types/components/navigation/Menu/Menu.d.ts +42 -0
- package/dist/types/components/navigation/Menu/Menu.types.d.ts +94 -0
- package/dist/types/components/navigation/Menu/useMenu.d.ts +16 -0
- package/dist/types/components/navigation/Tabs/Tab.d.ts +6 -0
- package/dist/types/components/navigation/Tabs/TabList.d.ts +6 -0
- package/dist/types/components/navigation/Tabs/TabPanel.d.ts +6 -0
- package/dist/types/components/navigation/Tabs/Tabs.d.ts +23 -0
- package/dist/types/components/navigation/Tabs/Tabs.types.d.ts +117 -0
- package/dist/types/components/primitives/Button/Button.d.ts +404 -0
- package/dist/types/components/primitives/Checkbox/Checkbox.d.ts +20 -0
- package/dist/types/components/primitives/Checkbox/Checkbox.types.d.ts +156 -0
- package/dist/types/components/primitives/Checkbox/CheckboxGroup.d.ts +25 -0
- package/dist/types/components/primitives/Collapsible/Collapsible.d.ts +6 -0
- package/dist/types/components/primitives/Collapsible/Collapsible.types.d.ts +28 -0
- package/dist/types/components/primitives/Icon/Icon.d.ts +33 -0
- package/dist/types/components/primitives/IconButton/IconButton.d.ts +361 -0
- package/dist/types/components/primitives/Input/Input.d.ts +139 -0
- package/dist/types/components/primitives/Paper/Paper.d.ts +421 -0
- package/dist/types/components/primitives/Popover/Popover.d.ts +25 -0
- package/dist/types/components/primitives/Popover/Popover.types.d.ts +99 -0
- package/dist/types/components/primitives/Popover/PopoverClose.d.ts +6 -0
- package/dist/types/components/primitives/Popover/PopoverContent.d.ts +6 -0
- package/dist/types/components/primitives/Popover/PopoverTrigger.d.ts +10 -0
- package/dist/types/components/primitives/Switch/Switch.d.ts +83 -0
- package/dist/types/components/primitives/Text/Text.d.ts +444 -0
- package/dist/types/components/primitives/Tooltip/Tooltip.d.ts +179 -0
- package/dist/types/components/primitives/Tooltip/types.d.ts +82 -0
- package/dist/types/components/primitives/canvas/canvas.types.d.ts +27 -0
- package/dist/types/components/shell/AppShell/AppShell.d.ts +1431 -0
- package/dist/types/components/shell/AppShell/AppShell.types.d.ts +48 -0
- package/dist/types/components/shell/FloatingPanel/FloatingPanel.d.ts +7 -0
- package/dist/types/components/shell/FloatingPanel/FloatingPanel.types.d.ts +61 -0
- package/dist/types/components/shell/MenuBar/MenuBar.d.ts +1435 -0
- package/dist/types/components/shell/MenuBar/MenuBar.types.d.ts +48 -0
- package/dist/types/components/shell/StatusBar/StatusBar.d.ts +864 -0
- package/dist/types/components/shell/StatusBar/StatusBar.types.d.ts +40 -0
- package/dist/types/components/shell/Toolbar/Toolbar.d.ts +1721 -0
- package/dist/types/components/shell/Toolbar/Toolbar.types.d.ts +59 -0
- package/dist/types/index.d.ts +124 -0
- package/dist/types/palettes.d.ts +3 -0
- package/dist/types/theme/ThemeProvider.d.ts +18 -0
- package/dist/types/theme/VanillaThemeProvider.d.ts +34 -0
- package/dist/types/theme/contract.css.d.ts +164 -0
- package/dist/types/theme/darkTheme.css.d.ts +151 -0
- package/dist/types/types/common.d.ts +17 -0
- package/dist/types/types/utilities.d.ts +72 -0
- package/dist/types/utils/cn.d.ts +3 -0
- package/dist/types/utils/cx.d.ts +11 -0
- package/package.json +55 -35
- package/dist/index.d.ts +0 -12
- package/dist/index.esm.js +0 -13962
- package/dist/index.esm.js.map +0 -1
- package/dist/index.js +0 -14048
- package/dist/index.js.map +0 -1
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useRef, useCallback, useEffect } from 'react';
|
|
3
|
+
import { drawGrid, drawDomainBounds, drawAxisLabels } from '../../primitives/canvas/canvasDrawing.js';
|
|
4
|
+
import { resolveCanvasTheme, resolveVarValue } from '../../primitives/canvas/canvasTheme.js';
|
|
5
|
+
import '../../primitives/canvas/CanvasContainer.js';
|
|
6
|
+
import { sampleCurve, domainToCanvas } from './curveUtils.js';
|
|
7
|
+
|
|
8
|
+
// CanvasThemeColors and resolveCanvasTheme are now imported from shared canvas primitives
|
|
9
|
+
function useCurveRenderer(options) {
|
|
10
|
+
const rafRef = useRef(0);
|
|
11
|
+
const draw = useCallback(() => {
|
|
12
|
+
const canvas = options.canvasRef.current;
|
|
13
|
+
if (!canvas)
|
|
14
|
+
return;
|
|
15
|
+
const ctx = canvas.getContext('2d');
|
|
16
|
+
if (!ctx)
|
|
17
|
+
return;
|
|
18
|
+
const theme = resolveCanvasTheme(canvas);
|
|
19
|
+
const dpr = typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1;
|
|
20
|
+
const rect = canvas.getBoundingClientRect();
|
|
21
|
+
const w = rect.width;
|
|
22
|
+
const h = rect.height;
|
|
23
|
+
// Set canvas resolution for retina
|
|
24
|
+
if (canvas.width !== w * dpr || canvas.height !== h * dpr) {
|
|
25
|
+
canvas.width = w * dpr;
|
|
26
|
+
canvas.height = h * dpr;
|
|
27
|
+
ctx.scale(dpr, dpr);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
|
|
31
|
+
}
|
|
32
|
+
const { curve, viewport, showGrid, gridSubdivisions, showAxisLabels, labelX, labelY, curveColor: rawCurveColor, curveWidth, renderBackground, selectedIds, hoveredElement, selectionBox, disabled, } = options;
|
|
33
|
+
// Resolve curveColor if it's a CSS variable reference
|
|
34
|
+
const curveColor = rawCurveColor.startsWith('var(')
|
|
35
|
+
? resolveVarValue(canvas, rawCurveColor)
|
|
36
|
+
: rawCurveColor;
|
|
37
|
+
const opacity = disabled ? 0.4 : 1;
|
|
38
|
+
// 1. Clear background
|
|
39
|
+
ctx.globalAlpha = 1;
|
|
40
|
+
ctx.fillStyle = theme.backgroundSecondary;
|
|
41
|
+
ctx.fillRect(0, 0, w, h);
|
|
42
|
+
// 1b. Custom background (histograms, gradients, etc.)
|
|
43
|
+
if (renderBackground) {
|
|
44
|
+
ctx.save();
|
|
45
|
+
renderBackground(ctx, {
|
|
46
|
+
width: w,
|
|
47
|
+
height: h,
|
|
48
|
+
viewport,
|
|
49
|
+
domainX: curve.domainX,
|
|
50
|
+
domainY: curve.domainY,
|
|
51
|
+
});
|
|
52
|
+
ctx.restore();
|
|
53
|
+
}
|
|
54
|
+
// 2. Grid lines -- based on domain values, not viewport
|
|
55
|
+
if (showGrid) {
|
|
56
|
+
drawGrid(ctx, w, h, theme, {
|
|
57
|
+
subdivisions: gridSubdivisions,
|
|
58
|
+
domain: { domainX: curve.domainX, domainY: curve.domainY },
|
|
59
|
+
viewport,
|
|
60
|
+
opacity,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
// 3. Domain boundary axes (stronger lines at domain min/max)
|
|
64
|
+
drawDomainBounds(ctx, w, h, theme, { domainX: curve.domainX, domainY: curve.domainY }, viewport, opacity);
|
|
65
|
+
// 4. Axis labels -- based on domain values
|
|
66
|
+
if (showAxisLabels) {
|
|
67
|
+
drawAxisLabels(ctx, w, h, theme, {
|
|
68
|
+
subdivisions: gridSubdivisions,
|
|
69
|
+
domain: { domainX: curve.domainX, domainY: curve.domainY },
|
|
70
|
+
viewport,
|
|
71
|
+
opacity,
|
|
72
|
+
labelX,
|
|
73
|
+
labelY,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
// 5. Curve line
|
|
77
|
+
ctx.globalAlpha = opacity;
|
|
78
|
+
drawCurveLine(ctx, curve, viewport, w, h, curveColor, curveWidth);
|
|
79
|
+
// 6. Tangent handles (for selected keyframes)
|
|
80
|
+
if (!options.lockTangents) {
|
|
81
|
+
drawTangentHandles(ctx, curve, viewport, w, h, selectedIds, hoveredElement, theme, opacity);
|
|
82
|
+
}
|
|
83
|
+
// 7. Keyframe points
|
|
84
|
+
drawKeyframes(ctx, curve, viewport, w, h, curveColor, selectedIds, hoveredElement, theme, opacity);
|
|
85
|
+
// 8. Selection box
|
|
86
|
+
if (selectionBox) {
|
|
87
|
+
drawSelectionBox(ctx, selectionBox, curveColor);
|
|
88
|
+
}
|
|
89
|
+
ctx.globalAlpha = 1;
|
|
90
|
+
}, [options]);
|
|
91
|
+
// Redraw on state changes
|
|
92
|
+
useEffect(() => {
|
|
93
|
+
if (options.isDragging) {
|
|
94
|
+
// Use rAF for smooth updates during drag
|
|
95
|
+
const render = () => {
|
|
96
|
+
draw();
|
|
97
|
+
rafRef.current = requestAnimationFrame(render);
|
|
98
|
+
};
|
|
99
|
+
rafRef.current = requestAnimationFrame(render);
|
|
100
|
+
return () => cancelAnimationFrame(rafRef.current);
|
|
101
|
+
}
|
|
102
|
+
draw();
|
|
103
|
+
return undefined;
|
|
104
|
+
}, [draw, options.isDragging]);
|
|
105
|
+
}
|
|
106
|
+
// drawGrid, drawDomainBounds, drawAxisLabels, and formatLabel are now
|
|
107
|
+
// provided by shared canvas primitives and called in the draw() function above.
|
|
108
|
+
function drawCurveLine(ctx, curve, viewport, w, h, curveColor, lineWidth) {
|
|
109
|
+
if (curve.keyframes.length < 2)
|
|
110
|
+
return;
|
|
111
|
+
const samples = sampleCurve(curve, Math.max(200, w));
|
|
112
|
+
if (samples.length === 0)
|
|
113
|
+
return;
|
|
114
|
+
ctx.strokeStyle = curveColor;
|
|
115
|
+
ctx.lineWidth = lineWidth;
|
|
116
|
+
ctx.lineJoin = 'round';
|
|
117
|
+
ctx.lineCap = 'round';
|
|
118
|
+
ctx.beginPath();
|
|
119
|
+
const first = samples[0];
|
|
120
|
+
if (!first)
|
|
121
|
+
return;
|
|
122
|
+
const firstCanvas = domainToCanvas(first.x, first.y, viewport, w, h);
|
|
123
|
+
ctx.moveTo(firstCanvas.px, firstCanvas.py);
|
|
124
|
+
for (let i = 1; i < samples.length; i++) {
|
|
125
|
+
const s = samples[i];
|
|
126
|
+
if (!s)
|
|
127
|
+
continue;
|
|
128
|
+
const sCanvas = domainToCanvas(s.x, s.y, viewport, w, h);
|
|
129
|
+
ctx.lineTo(sCanvas.px, sCanvas.py);
|
|
130
|
+
}
|
|
131
|
+
ctx.stroke();
|
|
132
|
+
}
|
|
133
|
+
function drawTangentHandles(ctx, curve, viewport, w, h, selectedIds, hoveredElement, theme, opacity) {
|
|
134
|
+
const { keyframes } = curve;
|
|
135
|
+
for (let i = 0; i < keyframes.length; i++) {
|
|
136
|
+
const kf = keyframes[i];
|
|
137
|
+
if (!kf)
|
|
138
|
+
continue;
|
|
139
|
+
if (!kf.id || !selectedIds.has(kf.id))
|
|
140
|
+
continue;
|
|
141
|
+
if (kf.tangentMode === 'linear' || kf.tangentMode === 'step')
|
|
142
|
+
continue;
|
|
143
|
+
const isAutoMode = kf.tangentMode === 'auto';
|
|
144
|
+
const kfCanvas = domainToCanvas(kf.x, kf.y, viewport, w, h);
|
|
145
|
+
// Handle In
|
|
146
|
+
const hIn = domainToCanvas(kf.x + kf.handleIn.x, kf.y + kf.handleIn.y, viewport, w, h);
|
|
147
|
+
ctx.globalAlpha = opacity * (isAutoMode ? 0.4 : 0.7);
|
|
148
|
+
ctx.strokeStyle = theme.textMuted;
|
|
149
|
+
ctx.lineWidth = 1;
|
|
150
|
+
ctx.setLineDash([3, 3]);
|
|
151
|
+
ctx.beginPath();
|
|
152
|
+
ctx.moveTo(kfCanvas.px, kfCanvas.py);
|
|
153
|
+
ctx.lineTo(hIn.px, hIn.py);
|
|
154
|
+
ctx.stroke();
|
|
155
|
+
ctx.setLineDash([]);
|
|
156
|
+
// Handle In point
|
|
157
|
+
const hInRadius = isAutoMode ? 3 : 4;
|
|
158
|
+
const isHInHovered = hoveredElement?.type === 'handleIn' && hoveredElement.keyframeIndex === i;
|
|
159
|
+
ctx.globalAlpha = opacity;
|
|
160
|
+
ctx.fillStyle = isHInHovered ? theme.textPrimary : theme.textSecondary;
|
|
161
|
+
ctx.beginPath();
|
|
162
|
+
ctx.arc(hIn.px, hIn.py, isHInHovered ? hInRadius + 1 : hInRadius, 0, Math.PI * 2);
|
|
163
|
+
ctx.fill();
|
|
164
|
+
// Handle Out
|
|
165
|
+
const hOut = domainToCanvas(kf.x + kf.handleOut.x, kf.y + kf.handleOut.y, viewport, w, h);
|
|
166
|
+
ctx.globalAlpha = opacity * (isAutoMode ? 0.4 : 0.7);
|
|
167
|
+
ctx.strokeStyle = theme.textMuted;
|
|
168
|
+
ctx.lineWidth = 1;
|
|
169
|
+
ctx.setLineDash([3, 3]);
|
|
170
|
+
ctx.beginPath();
|
|
171
|
+
ctx.moveTo(kfCanvas.px, kfCanvas.py);
|
|
172
|
+
ctx.lineTo(hOut.px, hOut.py);
|
|
173
|
+
ctx.stroke();
|
|
174
|
+
ctx.setLineDash([]);
|
|
175
|
+
// Handle Out point
|
|
176
|
+
const hOutRadius = isAutoMode ? 3 : 4;
|
|
177
|
+
const isHOutHovered = hoveredElement?.type === 'handleOut' &&
|
|
178
|
+
hoveredElement.keyframeIndex === i;
|
|
179
|
+
ctx.globalAlpha = opacity;
|
|
180
|
+
ctx.fillStyle = isHOutHovered ? theme.textPrimary : theme.textSecondary;
|
|
181
|
+
ctx.beginPath();
|
|
182
|
+
ctx.arc(hOut.px, hOut.py, isHOutHovered ? hOutRadius + 1 : hOutRadius, 0, Math.PI * 2);
|
|
183
|
+
ctx.fill();
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
function drawKeyframes(ctx, curve, viewport, w, h, curveColor, selectedIds, hoveredElement, theme, opacity) {
|
|
187
|
+
const { keyframes } = curve;
|
|
188
|
+
for (let i = 0; i < keyframes.length; i++) {
|
|
189
|
+
const kf = keyframes[i];
|
|
190
|
+
if (!kf)
|
|
191
|
+
continue;
|
|
192
|
+
const isSelected = kf.id ? selectedIds.has(kf.id) : false;
|
|
193
|
+
const isHovered = hoveredElement?.type === 'keyframe' && hoveredElement.keyframeIndex === i;
|
|
194
|
+
const isEndpoint = i === 0 || i === keyframes.length - 1;
|
|
195
|
+
const { px, py } = domainToCanvas(kf.x, kf.y, viewport, w, h);
|
|
196
|
+
ctx.globalAlpha = opacity;
|
|
197
|
+
if (isEndpoint) {
|
|
198
|
+
// Diamond shape for endpoints
|
|
199
|
+
const size = isHovered ? 8 : isSelected ? 7 : 6;
|
|
200
|
+
ctx.beginPath();
|
|
201
|
+
ctx.moveTo(px, py - size);
|
|
202
|
+
ctx.lineTo(px + size, py);
|
|
203
|
+
ctx.lineTo(px, py + size);
|
|
204
|
+
ctx.lineTo(px - size, py);
|
|
205
|
+
ctx.closePath();
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
// Circle for middle keyframes
|
|
209
|
+
const radius = isHovered ? 8 : isSelected ? 7 : 6;
|
|
210
|
+
ctx.beginPath();
|
|
211
|
+
ctx.arc(px, py, radius, 0, Math.PI * 2);
|
|
212
|
+
}
|
|
213
|
+
if (isSelected) {
|
|
214
|
+
ctx.fillStyle = curveColor;
|
|
215
|
+
ctx.fill();
|
|
216
|
+
ctx.strokeStyle = theme.textPrimary;
|
|
217
|
+
ctx.lineWidth = 2;
|
|
218
|
+
ctx.stroke();
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
ctx.fillStyle = theme.textPrimary;
|
|
222
|
+
ctx.fill();
|
|
223
|
+
ctx.strokeStyle = curveColor;
|
|
224
|
+
ctx.lineWidth = 1.5;
|
|
225
|
+
ctx.stroke();
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
function drawSelectionBox(ctx, box, curveColor) {
|
|
230
|
+
const x = Math.min(box.x1, box.x2);
|
|
231
|
+
const y = Math.min(box.y1, box.y2);
|
|
232
|
+
const bw = Math.abs(box.x2 - box.x1);
|
|
233
|
+
const bh = Math.abs(box.y2 - box.y1);
|
|
234
|
+
ctx.globalAlpha = 0.1;
|
|
235
|
+
ctx.fillStyle = curveColor;
|
|
236
|
+
ctx.fillRect(x, y, bw, bh);
|
|
237
|
+
ctx.globalAlpha = 0.5;
|
|
238
|
+
ctx.strokeStyle = curveColor;
|
|
239
|
+
ctx.lineWidth = 1;
|
|
240
|
+
ctx.setLineDash([4, 4]);
|
|
241
|
+
ctx.strokeRect(x, y, bw, bh);
|
|
242
|
+
ctx.setLineDash([]);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
export { useCurveRenderer };
|
|
246
|
+
//# sourceMappingURL=useCurveRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCurveRenderer.js","sources":["../../../../../../src/components/controls/CurveEditor/useCurveRenderer.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;AAiDA;AAEM;AACJ;AAEA;AACE;AACA;;;AAGA;;AAEA;AAEA;AAEA;AACA;AACA;;AAGA;AACE;AACA;AACA;;;AAEA;;AAGF;;AAkBA;AACE;;;;AAMF;AACA;;;;;;AAOI;AACA;;;;AAID;;;;;;AAOC;AACA;;;AAGD;;;;;;;AAiBC;AACA;;;;;AAKD;;;AAIH;AACA;;AAGA;AACE;;;;;;AA6BA;;AAGF;AACF;;;AAIE;;;AAGI;AACA;AACF;AACA;;;AAIF;AACA;;AAEJ;AAEA;AACA;AAEA;AASE;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAGA;AACA;;AACA;;AAGA;AACE;AACA;;AACA;;;;AAKJ;AAEA;AAWE;AAEA;AACE;AACA;;AACA;;;;AAGA;AACA;;AAGA;AAQA;AACA;AACA;;;;;;AAMA;;;AAIA;AAEA;AACA;;AAEA;;;AAUA;AAQA;AACA;AACA;;;;;;AAMA;;;AAIA;AAEE;AACF;AACA;;AAEA;;;AASJ;AAEA;AAYE;AAEA;AACE;AACA;;;AAEA;AAEA;;AAIA;;;AAIE;;;;;;;;;;AASA;;AAEA;;;AAIA;;AAEA;AACA;;;;AAGA;;AAEA;AACA;;;;AAIN;AAEA;AAKE;AACA;AACA;AACA;AAEA;AACA;;AAGA;AACA;AACA;;;AAGA;AACF;;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import './../../../assets/src/components/controls/NumberInput/NumberInput.css.ts.vanilla-uGNr81xQ.css';
|
|
2
|
+
import { c as createRuntimeFn } from '../../../node_modules/@vanilla-extract/recipes/dist/createRuntimeFn-62c9670f.esm.js';
|
|
3
|
+
|
|
4
|
+
var containerDraggingStyle = 'NumberInput_containerDraggingStyle__1l9csw2';
|
|
5
|
+
var containerHoveredStyle = 'NumberInput_containerHoveredStyle__1l9csw1';
|
|
6
|
+
var helperTextRecipe = createRuntimeFn({defaultClassName:'NumberInput_helperTextRecipe__1l9cswv',variantClassNames:{error:{true:'NumberInput_helperTextRecipe_error_true__1l9csww',false:'NumberInput_helperTextRecipe_error_false__1l9cswx'}},defaultVariants:{error:false},compoundVariants:[]});
|
|
7
|
+
var inputRecipe = createRuntimeFn({defaultClassName:'NumberInput_inputRecipe__1l9cswh',variantClassNames:{size:{sm:'NumberInput_inputRecipe_size_sm__1l9cswi',md:'NumberInput_inputRecipe_size_md__1l9cswj',lg:'NumberInput_inputRecipe_size_lg__1l9cswk'}},defaultVariants:{size:'md'},compoundVariants:[]});
|
|
8
|
+
var labelRecipe = createRuntimeFn({defaultClassName:'NumberInput_labelRecipe__1l9csw3',variantClassNames:{disabled:{true:'NumberInput_labelRecipe_disabled_true__1l9csw4',false:'NumberInput_labelRecipe_disabled_false__1l9csw5'}},defaultVariants:{disabled:false},compoundVariants:[]});
|
|
9
|
+
var numberInputContainerStyle = 'NumberInput_numberInputContainerStyle__1l9csw0';
|
|
10
|
+
var stepButtonIconLeftStyle = 'NumberInput_stepButtonIconLeftStyle__1l9cswf';
|
|
11
|
+
var stepButtonIconRightStyle = 'NumberInput_stepButtonIconRightStyle__1l9cswg';
|
|
12
|
+
var stepButtonRecipe = createRuntimeFn({defaultClassName:'NumberInput_stepButtonBase__1l9csw6',variantClassNames:{position:{left:'NumberInput_stepButtonRecipe_position_left__1l9csw8',right:'NumberInput_stepButtonRecipe_position_right__1l9csw9'},size:{sm:'NumberInput_stepButtonRecipe_size_sm__1l9cswa',md:'NumberInput_stepButtonRecipe_size_md__1l9cswb',lg:'NumberInput_stepButtonRecipe_size_lg__1l9cswc'},visible:{true:'NumberInput_stepButtonRecipe_visible_true__1l9cswd',false:'NumberInput_stepButtonRecipe_visible_false__1l9cswe'}},defaultVariants:{position:'left',size:'md',visible:false},compoundVariants:[]});
|
|
13
|
+
var unitLabelStyle = 'NumberInput_unitLabelStyle__1l9cswu';
|
|
14
|
+
var valueDisplayRecipe = createRuntimeFn({defaultClassName:'NumberInput_valueDisplayRecipe__1l9cswl',variantClassNames:{size:{sm:'NumberInput_valueDisplayRecipe_size_sm__1l9cswm',md:'NumberInput_valueDisplayRecipe_size_md__1l9cswn',lg:'NumberInput_valueDisplayRecipe_size_lg__1l9cswo'},hasStepButtons:{true:'NumberInput_valueDisplayRecipe_hasStepButtons_true__1l9cswp',false:'NumberInput_valueDisplayRecipe_hasStepButtons_false__1l9cswq'}},defaultVariants:{size:'md',hasStepButtons:false},compoundVariants:[[{hasStepButtons:true,size:'sm'},'NumberInput_valueDisplayRecipe_compound_0__1l9cswr'],[{hasStepButtons:true,size:'md'},'NumberInput_valueDisplayRecipe_compound_1__1l9csws'],[{hasStepButtons:true,size:'lg'},'NumberInput_valueDisplayRecipe_compound_2__1l9cswt']]});
|
|
15
|
+
|
|
16
|
+
export { containerDraggingStyle, containerHoveredStyle, helperTextRecipe, inputRecipe, labelRecipe, numberInputContainerStyle, stepButtonIconLeftStyle, stepButtonIconRightStyle, stepButtonRecipe, unitLabelStyle, valueDisplayRecipe };
|
|
17
|
+
//# sourceMappingURL=NumberInput.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NumberInput.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
|
+
import React, { useRef, useEffect } from 'react';
|
|
4
|
+
import { inputWrapperRecipe } from '../../form/InputWrapper.css.js';
|
|
5
|
+
import { ChevronDownIcon } from '../../Icons/ChevronDownIcon.js';
|
|
6
|
+
import { useNumberInput } from './useNumberInput.js';
|
|
7
|
+
import { cx } from '../../../utils/cx.js';
|
|
8
|
+
import { labelRecipe, stepButtonIconLeftStyle, stepButtonRecipe, inputRecipe, unitLabelStyle, valueDisplayRecipe, stepButtonIconRightStyle, helperTextRecipe, containerDraggingStyle, containerHoveredStyle, numberInputContainerStyle } from './NumberInput.css.js';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* A specialized number input component with Blender-like functionality.
|
|
12
|
+
*
|
|
13
|
+
* Features:
|
|
14
|
+
* - Drag left/right to change values with mouse
|
|
15
|
+
* - Click chevron buttons to increment/decrement
|
|
16
|
+
* - Keyboard input with mathematical expression support
|
|
17
|
+
* - Modifier keys: Ctrl (large steps), Shift (precision), Minus (negate)
|
|
18
|
+
* - Soft and hard value limits
|
|
19
|
+
* - Unit display support
|
|
20
|
+
* - Expression evaluation (pi, sqrt, sin, etc.)
|
|
21
|
+
* - Custom validation and formatting
|
|
22
|
+
* - Centered value and unit display
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```tsx
|
|
26
|
+
* // Basic number input
|
|
27
|
+
* <NumberInput
|
|
28
|
+
* value={rotation}
|
|
29
|
+
* onChange={setRotation}
|
|
30
|
+
* unit="°"
|
|
31
|
+
* step={1}
|
|
32
|
+
* />
|
|
33
|
+
*
|
|
34
|
+
* // With limits and precision
|
|
35
|
+
* <NumberInput
|
|
36
|
+
* value={opacity}
|
|
37
|
+
* onChange={setOpacity}
|
|
38
|
+
* min={0}
|
|
39
|
+
* max={1}
|
|
40
|
+
* step={0.1}
|
|
41
|
+
* precision={2}
|
|
42
|
+
* unit="%"
|
|
43
|
+
* />
|
|
44
|
+
*
|
|
45
|
+
* // With custom validation
|
|
46
|
+
* <NumberInput
|
|
47
|
+
* value={dimension}
|
|
48
|
+
* onChange={setDimension}
|
|
49
|
+
* validate={(v) => v <= 0 ? "Must be positive" : undefined}
|
|
50
|
+
* placeholder="Enter value or expression"
|
|
51
|
+
* />
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
const NumberInput = ({
|
|
55
|
+
// Value props
|
|
56
|
+
value, onChange,
|
|
57
|
+
// NumberInput specific props
|
|
58
|
+
unit, showStepButtons = true, validate, formatValue, parseValue,
|
|
59
|
+
// UseNumberInput options
|
|
60
|
+
min, max, softMin, softMax, step, precisionStep, largeStep, precision, allowExpressions = true, dragSensitivity = 1,
|
|
61
|
+
// Input props
|
|
62
|
+
size = 'md', disabled = false, readOnly = false, errorMessage, placeholder, label, helperText, required = false, className, testId, onFocus, onBlur, onKeyDown, ref, ...props }) => {
|
|
63
|
+
const containerRef = useRef(null);
|
|
64
|
+
const inputRef = useRef(null);
|
|
65
|
+
const [focused, setFocused] = React.useState(false);
|
|
66
|
+
// Track mouse state for distinguishing click vs drag
|
|
67
|
+
const mouseDownRef = useRef(null);
|
|
68
|
+
const dragThreshold = 3; // pixels
|
|
69
|
+
const clickTimeThreshold = 200; // milliseconds
|
|
70
|
+
// Combine refs
|
|
71
|
+
React.useImperativeHandle(ref, () => inputRef.current, [
|
|
72
|
+
inputRef,
|
|
73
|
+
]);
|
|
74
|
+
const { displayValue, isEditing, isDragging, isHovered, error: internalError, increment, decrement, startDrag, updateDrag, endDrag, startEditing, endEditing, updateDisplayValue, setHovered, handleKeyDown, } = useNumberInput({
|
|
75
|
+
value,
|
|
76
|
+
onChange,
|
|
77
|
+
...(min !== undefined && { min }),
|
|
78
|
+
...(max !== undefined && { max }),
|
|
79
|
+
...(softMin !== undefined && { softMin }),
|
|
80
|
+
...(softMax !== undefined && { softMax }),
|
|
81
|
+
...(step !== undefined && { step }),
|
|
82
|
+
...(precisionStep !== undefined && { precisionStep }),
|
|
83
|
+
...(largeStep !== undefined && { largeStep }),
|
|
84
|
+
...(precision !== undefined && { precision }),
|
|
85
|
+
...(allowExpressions !== undefined && { allowExpressions }),
|
|
86
|
+
disabled: disabled || readOnly,
|
|
87
|
+
...(dragSensitivity !== undefined && { dragSensitivity }),
|
|
88
|
+
...(formatValue !== undefined && { formatValue }),
|
|
89
|
+
...(parseValue !== undefined && { parseValue }),
|
|
90
|
+
});
|
|
91
|
+
// External validation
|
|
92
|
+
const externalError = validate ? validate(value) : undefined;
|
|
93
|
+
const effectiveError = !!errorMessage || !!externalError || !!internalError;
|
|
94
|
+
const effectiveErrorMessage = errorMessage ?? externalError ?? internalError;
|
|
95
|
+
// Mouse event handlers for dragging vs clicking
|
|
96
|
+
const handleMouseDown = (event) => {
|
|
97
|
+
if (disabled || readOnly)
|
|
98
|
+
return;
|
|
99
|
+
// Only handle left mouse button
|
|
100
|
+
if (event.button !== 0)
|
|
101
|
+
return;
|
|
102
|
+
// Don't handle if clicking on step buttons
|
|
103
|
+
const target = event.target;
|
|
104
|
+
if (target.tagName === 'BUTTON' || target.closest('button'))
|
|
105
|
+
return;
|
|
106
|
+
// Record mouse down state
|
|
107
|
+
mouseDownRef.current = {
|
|
108
|
+
x: event.clientX,
|
|
109
|
+
time: Date.now(),
|
|
110
|
+
hasMoved: false,
|
|
111
|
+
};
|
|
112
|
+
event.preventDefault();
|
|
113
|
+
};
|
|
114
|
+
const handleMouseMove = (event) => {
|
|
115
|
+
if (!mouseDownRef.current || disabled || readOnly)
|
|
116
|
+
return;
|
|
117
|
+
const deltaX = Math.abs(event.clientX - mouseDownRef.current.x);
|
|
118
|
+
// If we've moved beyond threshold and not already dragging, start drag
|
|
119
|
+
if (deltaX > dragThreshold &&
|
|
120
|
+
!mouseDownRef.current.hasMoved &&
|
|
121
|
+
!isDragging) {
|
|
122
|
+
mouseDownRef.current.hasMoved = true;
|
|
123
|
+
startDrag(mouseDownRef.current.x);
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
const handleMouseUp = () => {
|
|
127
|
+
if (!mouseDownRef.current || disabled || readOnly)
|
|
128
|
+
return;
|
|
129
|
+
const timeDelta = Date.now() - mouseDownRef.current.time;
|
|
130
|
+
const wasClick = !mouseDownRef.current.hasMoved && timeDelta < clickTimeThreshold;
|
|
131
|
+
// If it was a click (not drag), start editing
|
|
132
|
+
if (wasClick && !isEditing) {
|
|
133
|
+
startEditing();
|
|
134
|
+
// Focus the input after a short delay to ensure it's visible
|
|
135
|
+
setTimeout(() => {
|
|
136
|
+
inputRef.current?.focus();
|
|
137
|
+
}, 0);
|
|
138
|
+
}
|
|
139
|
+
mouseDownRef.current = null;
|
|
140
|
+
};
|
|
141
|
+
// Global mouse move and up handlers for dragging
|
|
142
|
+
useEffect(() => {
|
|
143
|
+
if (!isDragging)
|
|
144
|
+
return;
|
|
145
|
+
const handleGlobalMouseMove = (event) => {
|
|
146
|
+
updateDrag(event.clientX);
|
|
147
|
+
};
|
|
148
|
+
const handleGlobalMouseUp = () => {
|
|
149
|
+
endDrag();
|
|
150
|
+
mouseDownRef.current = null;
|
|
151
|
+
};
|
|
152
|
+
document.addEventListener('mousemove', handleGlobalMouseMove);
|
|
153
|
+
document.addEventListener('mouseup', handleGlobalMouseUp);
|
|
154
|
+
return () => {
|
|
155
|
+
document.removeEventListener('mousemove', handleGlobalMouseMove);
|
|
156
|
+
document.removeEventListener('mouseup', handleGlobalMouseUp);
|
|
157
|
+
};
|
|
158
|
+
}, [isDragging, updateDrag, endDrag]);
|
|
159
|
+
// Input event handlers
|
|
160
|
+
const handleInputChange = (event) => {
|
|
161
|
+
updateDisplayValue(event.target.value);
|
|
162
|
+
};
|
|
163
|
+
const handleInputFocus = (event) => {
|
|
164
|
+
setFocused(true);
|
|
165
|
+
onFocus?.(event);
|
|
166
|
+
};
|
|
167
|
+
const handleInputBlur = (event) => {
|
|
168
|
+
setFocused(false);
|
|
169
|
+
endEditing();
|
|
170
|
+
onBlur?.(event);
|
|
171
|
+
};
|
|
172
|
+
const handleInputKeyDown = (event) => {
|
|
173
|
+
handleKeyDown(event);
|
|
174
|
+
onKeyDown?.(event);
|
|
175
|
+
};
|
|
176
|
+
// Container event handlers
|
|
177
|
+
const handleContainerMouseEnter = () => {
|
|
178
|
+
if (!disabled && !readOnly) {
|
|
179
|
+
setHovered(true);
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
const handleContainerMouseLeave = () => {
|
|
183
|
+
setHovered(false);
|
|
184
|
+
// Reset mouse state if leaving container
|
|
185
|
+
mouseDownRef.current = null;
|
|
186
|
+
};
|
|
187
|
+
// Step button handlers
|
|
188
|
+
const handleIncrementClick = (event) => {
|
|
189
|
+
event.preventDefault();
|
|
190
|
+
event.stopPropagation();
|
|
191
|
+
increment();
|
|
192
|
+
// Don't focus input after step button click
|
|
193
|
+
};
|
|
194
|
+
const handleDecrementClick = (event) => {
|
|
195
|
+
event.preventDefault();
|
|
196
|
+
event.stopPropagation();
|
|
197
|
+
decrement();
|
|
198
|
+
// Don't focus input after step button click
|
|
199
|
+
};
|
|
200
|
+
// Show step buttons when appropriate
|
|
201
|
+
const shouldShowStepButtons = showStepButtons && isHovered && !isEditing && !disabled && !readOnly;
|
|
202
|
+
// Format unit display
|
|
203
|
+
const unitDisplay = typeof unit === 'function' ? unit(value) : unit;
|
|
204
|
+
// Format display value
|
|
205
|
+
const formattedValue = formatValue ? formatValue(value) : displayValue;
|
|
206
|
+
const inputId = React.useId();
|
|
207
|
+
return (jsxs("div", { ref: containerRef, className: cx(numberInputContainerStyle, isHovered && !disabled && !isDragging && containerHoveredStyle, isDragging && containerDraggingStyle, className), onMouseEnter: handleContainerMouseEnter, onMouseLeave: handleContainerMouseLeave, onMouseDown: handleMouseDown, onMouseMove: handleMouseMove, onMouseUp: handleMouseUp, "data-testid": testId, children: [label && (jsxs("label", { htmlFor: inputId, className: labelRecipe({ disabled }), children: [label, required && jsx("span", { style: { color: 'var(--accent-error)' }, children: " *" })] })), jsxs("div", { className: inputWrapperRecipe({
|
|
208
|
+
size,
|
|
209
|
+
error: effectiveError,
|
|
210
|
+
disabled,
|
|
211
|
+
focused,
|
|
212
|
+
}), children: [showStepButtons && (jsx("button", { type: "button", className: stepButtonRecipe({
|
|
213
|
+
position: 'left',
|
|
214
|
+
size,
|
|
215
|
+
visible: shouldShowStepButtons,
|
|
216
|
+
}), onClick: handleDecrementClick, disabled: disabled, tabIndex: -1, "aria-label": "Decrement value", children: jsx("span", { className: stepButtonIconLeftStyle, children: jsx(ChevronDownIcon, { size: size === 'sm' ? 'sm' : 'md' }) }) })), jsx("input", { ...props, ref: inputRef, id: inputId, type: "text", value: isEditing ? displayValue : '', onChange: handleInputChange, onFocus: handleInputFocus, onBlur: handleInputBlur, onKeyDown: handleInputKeyDown, placeholder: isEditing ? placeholder : '', disabled: disabled, required: required, readOnly: readOnly, className: inputRecipe({ size }), style: {
|
|
217
|
+
opacity: isEditing ? 1 : 0,
|
|
218
|
+
pointerEvents: isEditing ? 'auto' : 'none',
|
|
219
|
+
} }), !isEditing && (jsxs("div", { className: valueDisplayRecipe({
|
|
220
|
+
size,
|
|
221
|
+
hasStepButtons: shouldShowStepButtons,
|
|
222
|
+
}), children: [jsx("span", { children: formattedValue }), unitDisplay && (jsx("span", { className: unitLabelStyle, children: unitDisplay }))] })), showStepButtons && (jsx("button", { type: "button", className: stepButtonRecipe({
|
|
223
|
+
position: 'right',
|
|
224
|
+
size,
|
|
225
|
+
visible: shouldShowStepButtons,
|
|
226
|
+
}), onClick: handleIncrementClick, disabled: disabled, tabIndex: -1, "aria-label": "Increment value", children: jsx("span", { className: stepButtonIconRightStyle, children: jsx(ChevronDownIcon, { size: size === 'sm' ? 'sm' : 'md' }) }) }))] }), (helperText ?? (effectiveError && effectiveErrorMessage)) && (jsx("div", { className: helperTextRecipe({ error: effectiveError }), children: effectiveError && effectiveErrorMessage
|
|
227
|
+
? effectiveErrorMessage
|
|
228
|
+
: helperText }))] }));
|
|
229
|
+
};
|
|
230
|
+
NumberInput.displayName = 'NumberInput';
|
|
231
|
+
|
|
232
|
+
export { NumberInput };
|
|
233
|
+
//# sourceMappingURL=NumberInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NumberInput.js","sources":["../../../../../../src/components/controls/NumberInput/NumberInput.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;AAyIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CG;AACI;AACL;AACA;AAGA;AACA;AAMA;AACA;AAWA;AACA;AAgBA;AACA;AACA;;AAGA;AAKA;AACA;;;;AAKC;AAED;;;;;;;;;;;;;;;;AAgCC;;AAGD;AACA;AACA;;AAGA;;;;AAIE;;;AAGA;;;;;;AAME;AACA;;;AAIJ;AAEA;AACE;;AAEA;;;AAKE;;AAGA;AACA;;AAEJ;;AAGE;;AAEA;AACA;;AAIA;AACE;;;AAGE;;;AAIJ;AACF;;;AAIE;;AAEA;AACE;AACF;;AAGE;AACA;AACF;AAEA;AACA;AAEA;AACE;AACA;AACF;;;AAIF;AACE;AACF;AAEA;;AAEE;AACF;AAEA;;AAEE;AACA;AACF;AAEA;;AAEE;AACF;;;AAIE;;;AAGF;;;;AAKE;AACF;;AAGA;;;AAGE;;AAEF;AAEA;;;AAGE;;AAEF;;AAGA;;AAIA;;AAGA;AAEA;AAEA;;AA0BQ;;;AAGD;AAOK;;AAEA;;;;;;AAwCA;AACD;AAcC;;AAEA;AACD;AAgBD;AACA;AAKZ;AAEA;;"}
|