entangle-ui 0.1.0 → 0.3.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 +54 -0
- package/README.md +129 -75
- 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/ColorPicker/AlphaSlider.js +92 -0
- package/dist/esm/components/controls/ColorPicker/AlphaSlider.js.map +1 -0
- package/dist/esm/components/controls/ColorPicker/ColorArea.js +93 -0
- package/dist/esm/components/controls/ColorPicker/ColorArea.js.map +1 -0
- package/dist/esm/components/controls/ColorPicker/ColorInputs.js +129 -0
- package/dist/esm/components/controls/ColorPicker/ColorInputs.js.map +1 -0
- package/dist/esm/components/controls/ColorPicker/ColorPalette.js +89 -0
- package/dist/esm/components/controls/ColorPicker/ColorPalette.js.map +1 -0
- package/dist/esm/components/controls/ColorPicker/ColorPicker.js +75 -0
- package/dist/esm/components/controls/ColorPicker/ColorPicker.js.map +1 -0
- package/dist/esm/components/controls/ColorPicker/ColorPresets.js +57 -0
- package/dist/esm/components/controls/ColorPicker/ColorPresets.js.map +1 -0
- package/dist/esm/components/controls/ColorPicker/ColorSwatch.js +67 -0
- package/dist/esm/components/controls/ColorPicker/ColorSwatch.js.map +1 -0
- package/dist/esm/components/controls/ColorPicker/EyeDropper.js +85 -0
- package/dist/esm/components/controls/ColorPicker/EyeDropper.js.map +1 -0
- package/dist/esm/components/controls/ColorPicker/HueSlider.js +85 -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 +63 -0
- package/dist/esm/components/controls/ColorPicker/useColor.js.map +1 -0
- package/dist/esm/components/controls/CurveEditor/CurveCanvas.js +84 -0
- package/dist/esm/components/controls/CurveEditor/CurveCanvas.js.map +1 -0
- package/dist/esm/components/controls/CurveEditor/CurveEditor.js +134 -0
- package/dist/esm/components/controls/CurveEditor/CurveEditor.js.map +1 -0
- package/dist/esm/components/controls/CurveEditor/CurveToolbar.js +96 -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 +338 -0
- package/dist/esm/components/controls/CurveEditor/curveUtils.js.map +1 -0
- package/dist/esm/components/controls/CurveEditor/useCurveInteraction.js +569 -0
- package/dist/esm/components/controls/CurveEditor/useCurveInteraction.js.map +1 -0
- package/dist/esm/components/controls/CurveEditor/useCurveRenderer.js +400 -0
- package/dist/esm/components/controls/CurveEditor/useCurveRenderer.js.map +1 -0
- package/dist/esm/components/controls/NumberInput/NumberInput.js +377 -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.js +533 -0
- package/dist/esm/components/controls/Select/Select.js.map +1 -0
- package/dist/esm/components/controls/Slider/Slider.js +413 -0
- package/dist/esm/components/controls/Slider/Slider.js.map +1 -0
- package/dist/esm/components/controls/TreeView/TreeNode.js +189 -0
- package/dist/esm/components/controls/TreeView/TreeNode.js.map +1 -0
- package/dist/esm/components/controls/TreeView/TreeView.js +213 -0
- package/dist/esm/components/controls/TreeView/TreeView.js.map +1 -0
- package/dist/esm/components/controls/TreeView/useTreeState.js +154 -0
- package/dist/esm/components/controls/TreeView/useTreeState.js.map +1 -0
- package/dist/esm/components/controls/VectorInput/VectorInput.js +202 -0
- package/dist/esm/components/controls/VectorInput/VectorInput.js.map +1 -0
- package/dist/esm/components/editor/PropertyInspector/PropertyGroup.js +42 -0
- package/dist/esm/components/editor/PropertyInspector/PropertyGroup.js.map +1 -0
- package/dist/esm/components/editor/PropertyInspector/PropertyPanel.js +98 -0
- package/dist/esm/components/editor/PropertyInspector/PropertyPanel.js.map +1 -0
- package/dist/esm/components/editor/PropertyInspector/PropertyRow.js +154 -0
- package/dist/esm/components/editor/PropertyInspector/PropertyRow.js.map +1 -0
- package/dist/esm/components/editor/PropertyInspector/PropertySection.js +136 -0
- package/dist/esm/components/editor/PropertyInspector/PropertySection.js.map +1 -0
- package/dist/esm/components/editor/PropertyInspector/usePropertyUndo.js +86 -0
- package/dist/esm/components/editor/PropertyInspector/usePropertyUndo.js.map +1 -0
- package/dist/esm/components/feedback/Dialog/Dialog.js +92 -0
- package/dist/esm/components/feedback/Dialog/Dialog.js.map +1 -0
- package/dist/esm/components/feedback/Dialog/Dialog.styled.js +80 -0
- package/dist/esm/components/feedback/Dialog/Dialog.styled.js.map +1 -0
- package/dist/esm/components/feedback/Dialog/DialogBody.js +33 -0
- package/dist/esm/components/feedback/Dialog/DialogBody.js.map +1 -0
- package/dist/esm/components/feedback/Dialog/DialogClose.js +26 -0
- package/dist/esm/components/feedback/Dialog/DialogClose.js.map +1 -0
- package/dist/esm/components/feedback/Dialog/DialogFooter.js +43 -0
- package/dist/esm/components/feedback/Dialog/DialogFooter.js.map +1 -0
- package/dist/esm/components/feedback/Dialog/DialogHeader.js +84 -0
- package/dist/esm/components/feedback/Dialog/DialogHeader.js.map +1 -0
- package/dist/esm/components/feedback/Dialog/useDialogAnimation.js +70 -0
- package/dist/esm/components/feedback/Dialog/useDialogAnimation.js.map +1 -0
- package/dist/esm/components/feedback/Dialog/useFocusTrap.js +55 -0
- package/dist/esm/components/feedback/Dialog/useFocusTrap.js.map +1 -0
- package/dist/esm/components/feedback/Toast/ToastContainer.js +34 -0
- package/dist/esm/components/feedback/Toast/ToastContainer.js.map +1 -0
- package/dist/esm/components/feedback/Toast/ToastItem.js +214 -0
- package/dist/esm/components/feedback/Toast/ToastItem.js.map +1 -0
- package/dist/esm/components/feedback/Toast/ToastProvider.js +47 -0
- package/dist/esm/components/feedback/Toast/ToastProvider.js.map +1 -0
- package/dist/esm/components/feedback/Toast/useToast.js +60 -0
- package/dist/esm/components/feedback/Toast/useToast.js.map +1 -0
- package/dist/esm/components/form/FormHelperText.js +38 -0
- package/dist/esm/components/form/FormHelperText.js.map +1 -0
- package/dist/esm/components/form/FormLabel.js +43 -0
- package/dist/esm/components/form/FormLabel.js.map +1 -0
- package/dist/esm/components/form/InputWrapper.js +100 -0
- package/dist/esm/components/form/InputWrapper.js.map +1 -0
- package/dist/esm/components/layout/Accordion/Accordion.js +103 -0
- package/dist/esm/components/layout/Accordion/Accordion.js.map +1 -0
- package/dist/esm/components/layout/Accordion/AccordionContent.js +37 -0
- package/dist/esm/components/layout/Accordion/AccordionContent.js.map +1 -0
- package/dist/esm/components/layout/Accordion/AccordionItem.js +24 -0
- package/dist/esm/components/layout/Accordion/AccordionItem.js.map +1 -0
- package/dist/esm/components/layout/Accordion/AccordionTrigger.js +123 -0
- package/dist/esm/components/layout/Accordion/AccordionTrigger.js.map +1 -0
- package/dist/esm/components/layout/Flex/Flex.js +149 -0
- package/dist/esm/components/layout/Flex/Flex.js.map +1 -0
- package/dist/esm/components/layout/Grid/Grid.js +118 -0
- package/dist/esm/components/layout/Grid/Grid.js.map +1 -0
- package/dist/esm/components/layout/PanelSurface/PanelSurface.js +106 -0
- package/dist/esm/components/layout/PanelSurface/PanelSurface.js.map +1 -0
- package/dist/esm/components/layout/ScrollArea/ScrollArea.js +362 -0
- package/dist/esm/components/layout/ScrollArea/ScrollArea.js.map +1 -0
- package/dist/esm/components/layout/Spacer/Spacer.js +78 -0
- package/dist/esm/components/layout/Spacer/Spacer.js.map +1 -0
- package/dist/esm/components/layout/SplitPane/SplitPane.js +581 -0
- package/dist/esm/components/layout/SplitPane/SplitPane.js.map +1 -0
- package/dist/esm/components/layout/SplitPane/SplitPanePanel.js +29 -0
- package/dist/esm/components/layout/SplitPane/SplitPanePanel.js.map +1 -0
- package/dist/esm/components/layout/Stack/Stack.js +138 -0
- package/dist/esm/components/layout/Stack/Stack.js.map +1 -0
- package/dist/esm/components/navigation/ContextMenu/ContextMenu.js +45 -0
- package/dist/esm/components/navigation/ContextMenu/ContextMenu.js.map +1 -0
- package/dist/esm/components/navigation/ContextMenu/useContextMenuTarget.js +52 -0
- package/dist/esm/components/navigation/ContextMenu/useContextMenuTarget.js.map +1 -0
- package/dist/esm/components/navigation/Menu/Menu.helpers.js +52 -0
- package/dist/esm/components/navigation/Menu/Menu.helpers.js.map +1 -0
- package/dist/esm/components/navigation/Menu/Menu.js +80 -0
- package/dist/esm/components/navigation/Menu/Menu.js.map +1 -0
- package/dist/esm/components/navigation/Menu/Menu.styled.js +83 -0
- package/dist/esm/components/navigation/Menu/Menu.styled.js.map +1 -0
- package/dist/esm/components/navigation/Menu/useMenu.js +87 -0
- package/dist/esm/components/navigation/Menu/useMenu.js.map +1 -0
- package/dist/esm/components/navigation/Tabs/Tab.js +222 -0
- package/dist/esm/components/navigation/Tabs/Tab.js.map +1 -0
- package/dist/esm/components/navigation/Tabs/TabList.js +115 -0
- package/dist/esm/components/navigation/Tabs/TabList.js.map +1 -0
- package/dist/esm/components/navigation/Tabs/TabPanel.js +32 -0
- package/dist/esm/components/navigation/Tabs/TabPanel.js.map +1 -0
- package/dist/esm/components/navigation/Tabs/Tabs.js +77 -0
- package/dist/esm/components/navigation/Tabs/Tabs.js.map +1 -0
- package/dist/esm/components/primitives/BaseButton/BaseButton.js +17 -0
- package/dist/esm/components/primitives/BaseButton/BaseButton.js.map +1 -0
- package/dist/esm/components/primitives/Button/Button.js +183 -0
- package/dist/esm/components/primitives/Button/Button.js.map +1 -0
- package/dist/esm/components/primitives/Checkbox/Checkbox.js +205 -0
- package/dist/esm/components/primitives/Checkbox/Checkbox.js.map +1 -0
- package/dist/esm/components/primitives/Checkbox/CheckboxGroup.js +71 -0
- package/dist/esm/components/primitives/Checkbox/CheckboxGroup.js.map +1 -0
- package/dist/esm/components/primitives/Collapsible/Collapsible.js +116 -0
- package/dist/esm/components/primitives/Collapsible/Collapsible.js.map +1 -0
- package/dist/esm/components/primitives/Icon/Icon.js +63 -0
- package/dist/esm/components/primitives/Icon/Icon.js.map +1 -0
- package/dist/esm/components/primitives/IconButton/IconButton.js +222 -0
- package/dist/esm/components/primitives/IconButton/IconButton.js.map +1 -0
- package/dist/esm/components/primitives/Input/Input.js +133 -0
- package/dist/esm/components/primitives/Input/Input.js.map +1 -0
- package/dist/esm/components/primitives/Paper/Paper.js +146 -0
- package/dist/esm/components/primitives/Paper/Paper.js.map +1 -0
- package/dist/esm/components/primitives/Popover/Popover.js +121 -0
- package/dist/esm/components/primitives/Popover/Popover.js.map +1 -0
- package/dist/esm/components/primitives/Popover/PopoverClose.js +50 -0
- package/dist/esm/components/primitives/Popover/PopoverClose.js.map +1 -0
- package/dist/esm/components/primitives/Popover/PopoverContent.js +102 -0
- package/dist/esm/components/primitives/Popover/PopoverContent.js.map +1 -0
- package/dist/esm/components/primitives/Popover/PopoverTrigger.js +37 -0
- package/dist/esm/components/primitives/Popover/PopoverTrigger.js.map +1 -0
- package/dist/esm/components/primitives/Switch/Switch.js +170 -0
- package/dist/esm/components/primitives/Switch/Switch.js.map +1 -0
- package/dist/esm/components/primitives/Text/Text.js +166 -0
- package/dist/esm/components/primitives/Text/Text.js.map +1 -0
- package/dist/esm/components/primitives/Tooltip/Arrow.js +52 -0
- package/dist/esm/components/primitives/Tooltip/Arrow.js.map +1 -0
- package/dist/esm/components/primitives/Tooltip/Tooltip.js +219 -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/shell/AppShell/AppShell.js +157 -0
- package/dist/esm/components/shell/AppShell/AppShell.js.map +1 -0
- package/dist/esm/components/shell/FloatingPanel/FloatingPanel.js +236 -0
- package/dist/esm/components/shell/FloatingPanel/FloatingPanel.js.map +1 -0
- package/dist/esm/components/shell/MenuBar/MenuBar.js +340 -0
- package/dist/esm/components/shell/MenuBar/MenuBar.js.map +1 -0
- package/dist/esm/components/shell/StatusBar/StatusBar.js +134 -0
- package/dist/esm/components/shell/StatusBar/StatusBar.js.map +1 -0
- package/dist/esm/components/shell/Toolbar/Toolbar.js +185 -0
- package/dist/esm/components/shell/Toolbar/Toolbar.js.map +1 -0
- package/dist/esm/context/KeyboardContext.js +14 -0
- package/dist/esm/context/KeyboardContext.js.map +1 -0
- package/dist/esm/index.js +78 -0
- package/dist/esm/index.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 +12 -0
- package/dist/esm/theme/ThemeProvider.js.map +1 -0
- package/dist/esm/theme/createTheme.js +10 -0
- package/dist/esm/theme/createTheme.js.map +1 -0
- package/dist/esm/theme/tokens.js +144 -0
- package/dist/esm/theme/tokens.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/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/esm/utils/objects.js +22 -0
- package/dist/esm/utils/objects.js.map +1 -0
- package/dist/esm/utils/styledUtils.js +81 -0
- package/dist/esm/utils/styledUtils.js.map +1 -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 +297 -0
- package/dist/types/components/controls/CurveEditor/curvePresets.d.ts +5 -0
- package/dist/types/components/controls/CurveEditor/curveUtils.d.ts +28 -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/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/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 +321 -0
- package/dist/types/components/form/FormLabel.d.ts +331 -0
- package/dist/types/components/form/InputWrapper.d.ts +346 -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 +1153 -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 +329 -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 +392 -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 +40 -0
- package/dist/types/components/primitives/IconButton/IconButton.d.ts +354 -0
- package/dist/types/components/primitives/Input/Input.d.ts +134 -0
- package/dist/types/components/primitives/Paper/Paper.d.ts +419 -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 +78 -0
- package/dist/types/components/primitives/Text/Text.d.ts +442 -0
- package/dist/types/components/primitives/Tooltip/Tooltip.d.ts +175 -0
- package/dist/types/components/primitives/Tooltip/types.d.ts +82 -0
- package/dist/types/components/shell/AppShell/AppShell.d.ts +1437 -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 +1441 -0
- package/dist/types/components/shell/MenuBar/MenuBar.types.d.ts +48 -0
- package/dist/types/components/shell/StatusBar/StatusBar.d.ts +868 -0
- package/dist/types/components/shell/StatusBar/StatusBar.types.d.ts +40 -0
- package/dist/types/components/shell/Toolbar/Toolbar.d.ts +1728 -0
- package/dist/types/components/shell/Toolbar/Toolbar.types.d.ts +59 -0
- package/dist/types/index.d.ts +101 -0
- package/dist/types/palettes.d.ts +3 -0
- package/dist/types/theme/ThemeProvider.d.ts +11 -0
- package/dist/types/theme/createTheme.d.ts +6 -0
- package/dist/types/theme/tokens.d.ts +147 -0
- package/dist/types/theme/types.d.ts +7 -0
- package/dist/types/types/common.d.ts +24 -0
- package/dist/types/types/utilities.d.ts +72 -0
- package/dist/types/utils/cn.d.ts +3 -0
- package/package.json +23 -7
- package/dist/index.d.ts +0 -11
- package/dist/index.esm.js +0 -12149
- package/dist/index.esm.js.map +0 -1
- package/dist/index.js +0 -12223
- package/dist/index.js.map +0 -1
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import styled from '@emotion/styled';
|
|
4
|
+
import { processCss } from '../../../utils/styledUtils.js';
|
|
5
|
+
|
|
6
|
+
const StyledButton = styled.button `
|
|
7
|
+
/* Reset */
|
|
8
|
+
margin: 0;
|
|
9
|
+
font-family: inherit;
|
|
10
|
+
cursor: ${props => (props.disabled ? 'not-allowed' : 'pointer')};
|
|
11
|
+
user-select: none;
|
|
12
|
+
|
|
13
|
+
/* Layout */
|
|
14
|
+
display: inline-flex;
|
|
15
|
+
align-items: center;
|
|
16
|
+
justify-content: center;
|
|
17
|
+
font-weight: ${props => props.theme.typography.fontWeight.medium};
|
|
18
|
+
border-radius: ${props => props.theme.borderRadius.md}px;
|
|
19
|
+
transition: all ${props => props.theme.transitions.normal};
|
|
20
|
+
outline: none;
|
|
21
|
+
|
|
22
|
+
/* Size variants */
|
|
23
|
+
${props => {
|
|
24
|
+
const sizes = {
|
|
25
|
+
sm: {
|
|
26
|
+
height: '20px',
|
|
27
|
+
padding: `0 ${props.theme.spacing.sm}px`,
|
|
28
|
+
fontSize: `${props.theme.typography.fontSize.md}px`,
|
|
29
|
+
gap: `${props.theme.spacing.xs}px`,
|
|
30
|
+
},
|
|
31
|
+
md: {
|
|
32
|
+
height: '24px',
|
|
33
|
+
padding: `0 ${props.theme.spacing.md}px`,
|
|
34
|
+
fontSize: `${props.theme.typography.fontSize.md}px`,
|
|
35
|
+
gap: `${props.theme.spacing.sm}px`,
|
|
36
|
+
},
|
|
37
|
+
lg: {
|
|
38
|
+
height: '32px',
|
|
39
|
+
padding: `0 ${props.theme.spacing.xl}px`,
|
|
40
|
+
fontSize: `${props.theme.typography.fontSize.lg}px`,
|
|
41
|
+
gap: `${props.theme.spacing.md}px`,
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
const size = sizes[props.$size];
|
|
45
|
+
return `
|
|
46
|
+
height: ${size.height};
|
|
47
|
+
padding: ${size.padding};
|
|
48
|
+
font-size: ${size.fontSize};
|
|
49
|
+
gap: ${size.gap};
|
|
50
|
+
`;
|
|
51
|
+
}}
|
|
52
|
+
|
|
53
|
+
/* Variant styles */
|
|
54
|
+
${props => {
|
|
55
|
+
const { colors } = props.theme;
|
|
56
|
+
switch (props.$variant) {
|
|
57
|
+
case 'default':
|
|
58
|
+
return `
|
|
59
|
+
background: transparent;
|
|
60
|
+
border: 1px solid ${colors.border.default};
|
|
61
|
+
color: ${colors.text.primary};
|
|
62
|
+
|
|
63
|
+
&:hover:not(:disabled) {
|
|
64
|
+
background: ${colors.surface.hover};
|
|
65
|
+
border-color: transparent;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
&:active:not(:disabled) {
|
|
69
|
+
background: ${colors.surface.active};
|
|
70
|
+
}
|
|
71
|
+
`;
|
|
72
|
+
case 'ghost':
|
|
73
|
+
return `
|
|
74
|
+
background: transparent;
|
|
75
|
+
border: 1px solid transparent;
|
|
76
|
+
color: ${colors.text.secondary};
|
|
77
|
+
|
|
78
|
+
&:hover:not(:disabled) {
|
|
79
|
+
background: ${colors.surface.hover};
|
|
80
|
+
color: ${colors.text.primary};
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
&:active:not(:disabled) {
|
|
84
|
+
background: ${colors.surface.active};
|
|
85
|
+
}
|
|
86
|
+
`;
|
|
87
|
+
case 'filled':
|
|
88
|
+
return `
|
|
89
|
+
background: ${colors.accent.primary};
|
|
90
|
+
border: 1px solid ${colors.accent.primary};
|
|
91
|
+
color: white;
|
|
92
|
+
|
|
93
|
+
&:hover:not(:disabled) {
|
|
94
|
+
background: ${colors.accent.secondary};
|
|
95
|
+
border-color: ${colors.accent.secondary};
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
&:active:not(:disabled) {
|
|
99
|
+
background: ${colors.accent.secondary};
|
|
100
|
+
}
|
|
101
|
+
`;
|
|
102
|
+
default:
|
|
103
|
+
return '';
|
|
104
|
+
}
|
|
105
|
+
}}
|
|
106
|
+
|
|
107
|
+
/* Full width */
|
|
108
|
+
${props => props.$fullWidth && 'width: 100%;'}
|
|
109
|
+
|
|
110
|
+
/* Disabled state */
|
|
111
|
+
&:disabled {
|
|
112
|
+
opacity: 0.5;
|
|
113
|
+
cursor: not-allowed;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/* Focus visible */
|
|
117
|
+
&:focus-visible {
|
|
118
|
+
box-shadow: ${props => props.theme.shadows.focus};
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/* Custom CSS */
|
|
122
|
+
${props => processCss(props.$css, props.theme)}
|
|
123
|
+
`;
|
|
124
|
+
/**
|
|
125
|
+
* Loading spinner component
|
|
126
|
+
*/
|
|
127
|
+
const LoadingSpinner = styled.div `
|
|
128
|
+
width: 16px;
|
|
129
|
+
height: 16px;
|
|
130
|
+
border: 2px solid currentColor;
|
|
131
|
+
border-top-color: transparent;
|
|
132
|
+
border-radius: 50%;
|
|
133
|
+
animation: spin 1s linear infinite;
|
|
134
|
+
|
|
135
|
+
@keyframes spin {
|
|
136
|
+
to {
|
|
137
|
+
transform: rotate(360deg);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
`;
|
|
141
|
+
/**
|
|
142
|
+
* Icon wrapper
|
|
143
|
+
*/
|
|
144
|
+
const IconWrapper = styled.span `
|
|
145
|
+
width: 16px;
|
|
146
|
+
height: 16px;
|
|
147
|
+
display: flex;
|
|
148
|
+
align-items: center;
|
|
149
|
+
justify-content: center;
|
|
150
|
+
`;
|
|
151
|
+
/**
|
|
152
|
+
* Versatile button component for editor interfaces.
|
|
153
|
+
*
|
|
154
|
+
* Supports multiple variants, sizes, and states. Optimized for professional
|
|
155
|
+
* editor interfaces with compact dimensions and precise interactions.
|
|
156
|
+
*
|
|
157
|
+
* @example
|
|
158
|
+
* ```tsx
|
|
159
|
+
* // Basic usage
|
|
160
|
+
* <Button variant="default" size="md">Save</Button>
|
|
161
|
+
*
|
|
162
|
+
* // With icon and loading state
|
|
163
|
+
* <Button
|
|
164
|
+
* icon={<SaveIcon />}
|
|
165
|
+
* loading={isSaving}
|
|
166
|
+
* onClick={handleSave}
|
|
167
|
+
* >
|
|
168
|
+
* Save Project
|
|
169
|
+
* </Button>
|
|
170
|
+
*
|
|
171
|
+
* // Full width button
|
|
172
|
+
* <Button variant="filled" fullWidth>
|
|
173
|
+
* Confirm
|
|
174
|
+
* </Button>
|
|
175
|
+
* ```
|
|
176
|
+
*/
|
|
177
|
+
const Button = /*#__PURE__*/ React.memo(({ children, className, size = 'md', variant = 'default', disabled = false, loading = false, icon, fullWidth = false, onClick, testId, style, css, ref, ...props }) => {
|
|
178
|
+
return (jsxs(StyledButton, { ref: ref, className: className, "$size": size, "$variant": variant, "$loading": loading, "$fullWidth": fullWidth, "$css": css, disabled: disabled || loading, onClick: onClick, "data-testid": testId, style: style, ...props, children: [loading ? (jsx(LoadingSpinner, {})) : icon ? (jsx(IconWrapper, { children: icon })) : null, children && jsx("span", { children: children })] }));
|
|
179
|
+
});
|
|
180
|
+
Button.displayName = 'Button';
|
|
181
|
+
|
|
182
|
+
export { Button };
|
|
183
|
+
//# sourceMappingURL=Button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button.js","sources":["../../../../../../src/components/primitives/Button/Button.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":"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"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useContext, useId, useState, useCallback } from 'react';
|
|
3
|
+
import styled from '@emotion/styled';
|
|
4
|
+
import { processCss } from '../../../utils/styledUtils.js';
|
|
5
|
+
import '../../form/FormLabel.js';
|
|
6
|
+
import { FormHelperText } from '../../form/FormHelperText.js';
|
|
7
|
+
import '../../form/InputWrapper.js';
|
|
8
|
+
import { CheckboxGroupContext } from './CheckboxGroup.js';
|
|
9
|
+
|
|
10
|
+
// --- Size maps ---
|
|
11
|
+
const BOX_SIZES = {
|
|
12
|
+
sm: 14,
|
|
13
|
+
md: 16,
|
|
14
|
+
lg: 20,
|
|
15
|
+
};
|
|
16
|
+
const ICON_SIZES = {
|
|
17
|
+
sm: 10,
|
|
18
|
+
md: 12,
|
|
19
|
+
lg: 14,
|
|
20
|
+
};
|
|
21
|
+
const FONT_SIZE_MAP = {
|
|
22
|
+
sm: 'xs',
|
|
23
|
+
md: 'sm',
|
|
24
|
+
lg: 'md',
|
|
25
|
+
};
|
|
26
|
+
// --- Styled components ---
|
|
27
|
+
const StyledCheckboxContainer = styled.div `
|
|
28
|
+
display: flex;
|
|
29
|
+
flex-direction: column;
|
|
30
|
+
`;
|
|
31
|
+
const StyledCheckboxLabel = styled.label `
|
|
32
|
+
display: inline-flex;
|
|
33
|
+
align-items: center;
|
|
34
|
+
gap: ${props => props.theme.spacing.sm}px;
|
|
35
|
+
cursor: ${props => (props.$disabled ? 'not-allowed' : 'pointer')};
|
|
36
|
+
flex-direction: ${props => props.$labelPosition === 'left' ? 'row-reverse' : 'row'};
|
|
37
|
+
font-size: ${props => props.theme.typography.fontSize[FONT_SIZE_MAP[props.$size]]}px;
|
|
38
|
+
color: ${props => props.$disabled
|
|
39
|
+
? props.theme.colors.text.disabled
|
|
40
|
+
: props.theme.colors.text.secondary};
|
|
41
|
+
line-height: ${props => props.theme.typography.lineHeight.normal};
|
|
42
|
+
user-select: none;
|
|
43
|
+
`;
|
|
44
|
+
const StyledCheckboxBox = styled.button `
|
|
45
|
+
/* Reset */
|
|
46
|
+
padding: 0;
|
|
47
|
+
margin: 0;
|
|
48
|
+
border: none;
|
|
49
|
+
font: inherit;
|
|
50
|
+
outline: none;
|
|
51
|
+
cursor: ${props => (props.$disabled ? 'not-allowed' : 'pointer')};
|
|
52
|
+
|
|
53
|
+
/* Layout */
|
|
54
|
+
display: inline-flex;
|
|
55
|
+
align-items: center;
|
|
56
|
+
justify-content: center;
|
|
57
|
+
flex-shrink: 0;
|
|
58
|
+
|
|
59
|
+
/* Sizing */
|
|
60
|
+
width: ${props => BOX_SIZES[props.$size]}px;
|
|
61
|
+
height: ${props => BOX_SIZES[props.$size]}px;
|
|
62
|
+
border-radius: ${props => props.theme.borderRadius.sm}px;
|
|
63
|
+
transition: all ${props => props.theme.transitions.fast};
|
|
64
|
+
|
|
65
|
+
/* Variant + State styles */
|
|
66
|
+
${props => {
|
|
67
|
+
const { colors } = props.theme;
|
|
68
|
+
const isActive = props.$checked || props.$indeterminate;
|
|
69
|
+
if (props.$disabled) {
|
|
70
|
+
return `
|
|
71
|
+
opacity: 0.5;
|
|
72
|
+
background: ${isActive ? colors.accent.primary : props.$variant === 'filled' ? colors.surface.default : 'transparent'};
|
|
73
|
+
border: 1px solid ${isActive ? colors.accent.primary : colors.border.default};
|
|
74
|
+
`;
|
|
75
|
+
}
|
|
76
|
+
if (props.$error) {
|
|
77
|
+
return `
|
|
78
|
+
background: ${isActive ? colors.accent.error : 'transparent'};
|
|
79
|
+
border: 1px solid ${colors.accent.error};
|
|
80
|
+
&:hover {
|
|
81
|
+
border-color: ${colors.accent.error};
|
|
82
|
+
background: ${isActive ? colors.accent.error : 'transparent'};
|
|
83
|
+
}
|
|
84
|
+
`;
|
|
85
|
+
}
|
|
86
|
+
if (isActive) {
|
|
87
|
+
return `
|
|
88
|
+
background: ${colors.accent.primary};
|
|
89
|
+
border: 1px solid ${colors.accent.primary};
|
|
90
|
+
&:hover {
|
|
91
|
+
background: ${colors.accent.secondary};
|
|
92
|
+
border-color: ${colors.accent.secondary};
|
|
93
|
+
}
|
|
94
|
+
`;
|
|
95
|
+
}
|
|
96
|
+
if (props.$variant === 'filled') {
|
|
97
|
+
return `
|
|
98
|
+
background: ${colors.surface.default};
|
|
99
|
+
border: 1px solid ${colors.border.default};
|
|
100
|
+
&:hover {
|
|
101
|
+
border-color: ${colors.border.focus};
|
|
102
|
+
}
|
|
103
|
+
`;
|
|
104
|
+
}
|
|
105
|
+
return `
|
|
106
|
+
background: transparent;
|
|
107
|
+
border: 1px solid ${colors.border.default};
|
|
108
|
+
&:hover {
|
|
109
|
+
border-color: ${colors.border.focus};
|
|
110
|
+
}
|
|
111
|
+
`;
|
|
112
|
+
}}
|
|
113
|
+
|
|
114
|
+
/* Focus visible */
|
|
115
|
+
&:focus-visible {
|
|
116
|
+
box-shadow: ${props => props.theme.shadows.focus};
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/* Disabled state */
|
|
120
|
+
&:disabled {
|
|
121
|
+
opacity: 0.5;
|
|
122
|
+
cursor: not-allowed;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/* Custom CSS */
|
|
126
|
+
${props => processCss(props.$css, props.theme)}
|
|
127
|
+
`;
|
|
128
|
+
/**
|
|
129
|
+
* Checkbox component for boolean selection in settings panels,
|
|
130
|
+
* property inspectors, and form interfaces.
|
|
131
|
+
*
|
|
132
|
+
* Supports controlled/uncontrolled modes, indeterminate state,
|
|
133
|
+
* label positioning, sizes, variants, and error states.
|
|
134
|
+
*
|
|
135
|
+
* @example
|
|
136
|
+
* ```tsx
|
|
137
|
+
* <Checkbox label="Enable shadows" />
|
|
138
|
+
* <Checkbox checked={value} onChange={setValue} label="Auto-save" />
|
|
139
|
+
* <Checkbox indeterminate label="Select all" />
|
|
140
|
+
* ```
|
|
141
|
+
*/
|
|
142
|
+
const Checkbox = ({ checked: checkedProp, defaultChecked = false, indeterminate = false, label, labelPosition = 'right', size: sizeProp = 'md', variant = 'default', disabled: disabledProp = false, required = false, error = false, helperText, errorMessage, value, name, onChange, className, style, css, testId, ref, id: idProp, ...rest }) => {
|
|
143
|
+
const groupContext = useContext(CheckboxGroupContext);
|
|
144
|
+
const autoId = useId();
|
|
145
|
+
const checkboxId = idProp ?? autoId;
|
|
146
|
+
const helperId = `${checkboxId}-helper`;
|
|
147
|
+
// Internal state for uncontrolled mode
|
|
148
|
+
const [internalChecked, setInternalChecked] = useState(defaultChecked);
|
|
149
|
+
// Resolve group context
|
|
150
|
+
const disabled = disabledProp || (groupContext?.disabled ?? false);
|
|
151
|
+
const size = sizeProp ?? groupContext?.size ?? 'md';
|
|
152
|
+
// Determine checked state for group integration
|
|
153
|
+
const isGrouped = groupContext !== null && value !== undefined;
|
|
154
|
+
const isControlled = checkedProp !== undefined;
|
|
155
|
+
let resolvedChecked;
|
|
156
|
+
if (isGrouped) {
|
|
157
|
+
resolvedChecked = groupContext.groupValue.includes(value);
|
|
158
|
+
}
|
|
159
|
+
else if (isControlled) {
|
|
160
|
+
resolvedChecked = checkedProp;
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
resolvedChecked = internalChecked;
|
|
164
|
+
}
|
|
165
|
+
const handleClick = useCallback(() => {
|
|
166
|
+
if (disabled)
|
|
167
|
+
return;
|
|
168
|
+
const newChecked = !resolvedChecked;
|
|
169
|
+
if (isGrouped && value) {
|
|
170
|
+
groupContext.toggleValue(value);
|
|
171
|
+
}
|
|
172
|
+
if (!isControlled && !isGrouped) {
|
|
173
|
+
setInternalChecked(newChecked);
|
|
174
|
+
}
|
|
175
|
+
onChange?.(newChecked);
|
|
176
|
+
}, [
|
|
177
|
+
disabled,
|
|
178
|
+
resolvedChecked,
|
|
179
|
+
isGrouped,
|
|
180
|
+
value,
|
|
181
|
+
groupContext,
|
|
182
|
+
isControlled,
|
|
183
|
+
onChange,
|
|
184
|
+
]);
|
|
185
|
+
const iconSize = ICON_SIZES[size];
|
|
186
|
+
const showHelperText = error && errorMessage ? errorMessage : helperText;
|
|
187
|
+
const ariaChecked = indeterminate
|
|
188
|
+
? 'mixed'
|
|
189
|
+
: resolvedChecked
|
|
190
|
+
? 'true'
|
|
191
|
+
: 'false';
|
|
192
|
+
const checkboxBox = (jsxs(StyledCheckboxBox, { ref: ref, type: "button", role: "checkbox", "aria-checked": ariaChecked, "aria-disabled": disabled || undefined, "aria-required": required || undefined, "aria-invalid": error || undefined, "aria-describedby": showHelperText ? helperId : undefined, disabled: disabled, onClick: handleClick, "$size": size, "$variant": variant, "$checked": resolvedChecked, "$indeterminate": indeterminate, "$disabled": disabled, "$error": error, "$css": css, "data-testid": testId, ...rest, children: [indeterminate ? (jsx("svg", { width: iconSize, height: iconSize, viewBox: "0 0 12 12", fill: "none", "aria-hidden": "true", children: jsx("line", { x1: "2", y1: "6", x2: "10", y2: "6", stroke: "white", strokeWidth: "2", strokeLinecap: "round" }) })) : (jsx("svg", { width: iconSize, height: iconSize, viewBox: "0 0 12 12", fill: "none", "aria-hidden": "true", style: {
|
|
193
|
+
opacity: resolvedChecked ? 1 : 0,
|
|
194
|
+
transform: resolvedChecked ? 'scale(1)' : 'scale(0)',
|
|
195
|
+
transition: 'opacity 150ms ease-out, transform 150ms ease-out',
|
|
196
|
+
}, children: jsx("path", { d: "M2 6L5 9L10 3", stroke: "white", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) })), name && (jsx("input", { type: "hidden", name: name, value: resolvedChecked ? (value ?? 'on') : '' }))] }));
|
|
197
|
+
if (!label && !showHelperText) {
|
|
198
|
+
return checkboxBox;
|
|
199
|
+
}
|
|
200
|
+
return (jsxs(StyledCheckboxContainer, { className: className, style: style, children: [jsxs(StyledCheckboxLabel, { "$labelPosition": labelPosition, "$disabled": disabled, "$size": size, children: [checkboxBox, label && jsx("span", { children: label })] }), showHelperText && (jsx(FormHelperText, { id: helperId, error: error, children: showHelperText }))] }));
|
|
201
|
+
};
|
|
202
|
+
Checkbox.displayName = 'Checkbox';
|
|
203
|
+
|
|
204
|
+
export { Checkbox };
|
|
205
|
+
//# sourceMappingURL=Checkbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Checkbox.js","sources":["../../../../../../src/components/primitives/Checkbox/Checkbox.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { createContext, useId, useState, useCallback } from 'react';
|
|
3
|
+
import styled from '@emotion/styled';
|
|
4
|
+
import { FormLabel } from '../../form/FormLabel.js';
|
|
5
|
+
import { FormHelperText } from '../../form/FormHelperText.js';
|
|
6
|
+
import '../../form/InputWrapper.js';
|
|
7
|
+
import { processCss } from '../../../utils/styledUtils.js';
|
|
8
|
+
|
|
9
|
+
const CheckboxGroupContext =
|
|
10
|
+
/*#__PURE__*/ createContext(null);
|
|
11
|
+
const StyledGroupContainer = styled.div `
|
|
12
|
+
display: flex;
|
|
13
|
+
flex-direction: column;
|
|
14
|
+
|
|
15
|
+
/* Custom CSS */
|
|
16
|
+
${props => processCss(props.$css, props.theme)}
|
|
17
|
+
`;
|
|
18
|
+
const StyledGroupItems = styled.div `
|
|
19
|
+
display: flex;
|
|
20
|
+
flex-direction: ${props => props.$direction};
|
|
21
|
+
gap: ${props => props.theme.spacing.md * props.$gap}px;
|
|
22
|
+
`;
|
|
23
|
+
/**
|
|
24
|
+
* Groups multiple Checkbox components with shared state management.
|
|
25
|
+
*
|
|
26
|
+
* Manages a `string[]` value, propagates `disabled` and `size` to children
|
|
27
|
+
* via React Context. Supports controlled and uncontrolled modes.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```tsx
|
|
31
|
+
* <CheckboxGroup
|
|
32
|
+
* label="Render passes"
|
|
33
|
+
* value={selected}
|
|
34
|
+
* onChange={setSelected}
|
|
35
|
+
* >
|
|
36
|
+
* <Checkbox value="diffuse" label="Diffuse" />
|
|
37
|
+
* <Checkbox value="specular" label="Specular" />
|
|
38
|
+
* <Checkbox value="shadow" label="Shadow" />
|
|
39
|
+
* </CheckboxGroup>
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
const CheckboxGroup = ({ value: valueProp, defaultValue = [], label, direction = 'column', gap = 2, disabled = false, size = 'md', helperText, error = false, errorMessage, required = false, children, onChange, className, style, css, testId, ref, id: idProp, ...rest }) => {
|
|
43
|
+
const autoId = useId();
|
|
44
|
+
const groupId = idProp ?? autoId;
|
|
45
|
+
const labelId = `${groupId}-label`;
|
|
46
|
+
const helperId = `${groupId}-helper`;
|
|
47
|
+
const [internalValue, setInternalValue] = useState(defaultValue);
|
|
48
|
+
const isControlled = valueProp !== undefined;
|
|
49
|
+
const currentValue = isControlled ? valueProp : internalValue;
|
|
50
|
+
const toggleValue = useCallback((itemValue) => {
|
|
51
|
+
const nextValue = currentValue.includes(itemValue)
|
|
52
|
+
? currentValue.filter(v => v !== itemValue)
|
|
53
|
+
: [...currentValue, itemValue];
|
|
54
|
+
if (!isControlled) {
|
|
55
|
+
setInternalValue(nextValue);
|
|
56
|
+
}
|
|
57
|
+
onChange?.(nextValue);
|
|
58
|
+
}, [currentValue, isControlled, onChange]);
|
|
59
|
+
const contextValue = {
|
|
60
|
+
groupValue: currentValue,
|
|
61
|
+
toggleValue,
|
|
62
|
+
disabled,
|
|
63
|
+
size,
|
|
64
|
+
};
|
|
65
|
+
const showHelperText = error && errorMessage ? errorMessage : helperText;
|
|
66
|
+
return (jsxs(StyledGroupContainer, { ref: ref, role: "group", "aria-labelledby": label ? labelId : undefined, "aria-describedby": showHelperText ? helperId : undefined, className: className, style: style, "$css": css, "data-testid": testId, ...rest, children: [label && (jsx(FormLabel, { id: labelId, required: required, disabled: disabled, children: label })), jsx(CheckboxGroupContext.Provider, { value: contextValue, children: jsx(StyledGroupItems, { "$direction": direction, "$gap": gap, children: children }) }), showHelperText && (jsx(FormHelperText, { id: helperId, error: error, children: showHelperText }))] }));
|
|
67
|
+
};
|
|
68
|
+
CheckboxGroup.displayName = 'CheckboxGroup';
|
|
69
|
+
|
|
70
|
+
export { CheckboxGroup, CheckboxGroupContext };
|
|
71
|
+
//# sourceMappingURL=CheckboxGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CheckboxGroup.js","sources":["../../../../../../src/components/primitives/Checkbox/CheckboxGroup.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useId, useState, useCallback } from 'react';
|
|
3
|
+
import styled from '@emotion/styled';
|
|
4
|
+
|
|
5
|
+
const TRIGGER_SIZE_MAP = {
|
|
6
|
+
sm: { height: 24, paddingKey: 'md', fontKey: 'xs', chevronSize: 10 },
|
|
7
|
+
md: { height: 28, paddingKey: 'md', fontKey: 'sm', chevronSize: 12 },
|
|
8
|
+
lg: { height: 32, paddingKey: 'lg', fontKey: 'md', chevronSize: 14 },
|
|
9
|
+
};
|
|
10
|
+
const CONTENT_SIZE_MAP = {
|
|
11
|
+
sm: { paddingVKey: 'sm', paddingHKey: 'md' },
|
|
12
|
+
md: { paddingVKey: 'md', paddingHKey: 'lg' },
|
|
13
|
+
lg: { paddingVKey: 'lg', paddingHKey: 'xl' },
|
|
14
|
+
};
|
|
15
|
+
// --- Chevron icon ---
|
|
16
|
+
const ChevronRightIcon = ({ size }) => (jsx("svg", { width: size, height: size, viewBox: "0 0 12 12", fill: "none", "aria-hidden": "true", children: jsx("path", { d: "M4.5 3L7.5 6L4.5 9", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }));
|
|
17
|
+
// --- Styled ---
|
|
18
|
+
const StyledRoot = styled.div `
|
|
19
|
+
display: flex;
|
|
20
|
+
flex-direction: column;
|
|
21
|
+
`;
|
|
22
|
+
const StyledTrigger = styled.button `
|
|
23
|
+
/* Reset */
|
|
24
|
+
margin: 0;
|
|
25
|
+
border: none;
|
|
26
|
+
font-family: inherit;
|
|
27
|
+
outline: none;
|
|
28
|
+
user-select: none;
|
|
29
|
+
width: 100%;
|
|
30
|
+
text-align: left;
|
|
31
|
+
|
|
32
|
+
/* Layout */
|
|
33
|
+
display: flex;
|
|
34
|
+
align-items: center;
|
|
35
|
+
gap: ${props => props.theme.spacing.sm}px;
|
|
36
|
+
|
|
37
|
+
/* Sizing */
|
|
38
|
+
height: ${props => TRIGGER_SIZE_MAP[props.$size].height}px;
|
|
39
|
+
padding: 0
|
|
40
|
+
${props => props.theme.spacing[TRIGGER_SIZE_MAP[props.$size].paddingKey]}px;
|
|
41
|
+
font-size: ${props => props.theme.typography.fontSize[TRIGGER_SIZE_MAP[props.$size].fontKey]}px;
|
|
42
|
+
font-weight: ${props => props.theme.typography.fontWeight.medium};
|
|
43
|
+
|
|
44
|
+
/* Colors */
|
|
45
|
+
background: transparent;
|
|
46
|
+
color: ${props => props.theme.colors.text.muted};
|
|
47
|
+
cursor: ${props => (props.$disabled ? 'not-allowed' : 'pointer')};
|
|
48
|
+
opacity: ${props => (props.$disabled ? 0.5 : 1)};
|
|
49
|
+
transition:
|
|
50
|
+
color ${props => props.theme.transitions.fast},
|
|
51
|
+
background ${props => props.theme.transitions.fast};
|
|
52
|
+
|
|
53
|
+
&:hover {
|
|
54
|
+
color: ${props => props.$disabled
|
|
55
|
+
? props.theme.colors.text.muted
|
|
56
|
+
: props.theme.colors.text.primary};
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
&:focus-visible {
|
|
60
|
+
box-shadow: ${props => props.theme.shadows.focus};
|
|
61
|
+
border-radius: ${props => props.theme.borderRadius.sm}px;
|
|
62
|
+
z-index: 1;
|
|
63
|
+
}
|
|
64
|
+
`;
|
|
65
|
+
const StyledChevron = styled.span `
|
|
66
|
+
display: flex;
|
|
67
|
+
align-items: center;
|
|
68
|
+
justify-content: center;
|
|
69
|
+
flex-shrink: 0;
|
|
70
|
+
transition: transform ${props => props.theme.transitions.fast};
|
|
71
|
+
transform: rotate(${props => (props.$open ? '90deg' : '0deg')});
|
|
72
|
+
color: currentColor;
|
|
73
|
+
|
|
74
|
+
svg {
|
|
75
|
+
width: ${props => props.$size}px;
|
|
76
|
+
height: ${props => props.$size}px;
|
|
77
|
+
}
|
|
78
|
+
`;
|
|
79
|
+
const StyledContentWrapper = styled.div `
|
|
80
|
+
display: grid;
|
|
81
|
+
grid-template-rows: ${props => (props.$open ? '1fr' : '0fr')};
|
|
82
|
+
transition: grid-template-rows ${props => props.theme.transitions.normal};
|
|
83
|
+
`;
|
|
84
|
+
const StyledContentInner = styled.div `
|
|
85
|
+
overflow: hidden;
|
|
86
|
+
min-height: 0;
|
|
87
|
+
`;
|
|
88
|
+
const StyledContentBody = styled.div `
|
|
89
|
+
padding: ${props => props.theme.spacing[CONTENT_SIZE_MAP[props.$size].paddingVKey]}px
|
|
90
|
+
${props => props.theme.spacing[CONTENT_SIZE_MAP[props.$size].paddingHKey]}px;
|
|
91
|
+
`;
|
|
92
|
+
// --- Component ---
|
|
93
|
+
const Collapsible = ({ trigger, open: openProp, defaultOpen = false, size = 'sm', indicator, disabled = false, keepMounted = false, onChange, children, className, style, testId, ref, ...rest }) => {
|
|
94
|
+
const autoId = useId();
|
|
95
|
+
const triggerId = `collapsible-${autoId}-trigger`;
|
|
96
|
+
const contentId = `collapsible-${autoId}-content`;
|
|
97
|
+
const [internalOpen, setInternalOpen] = useState(defaultOpen);
|
|
98
|
+
const isControlled = openProp !== undefined;
|
|
99
|
+
const resolvedOpen = isControlled ? openProp : internalOpen;
|
|
100
|
+
const handleToggle = useCallback(() => {
|
|
101
|
+
if (disabled)
|
|
102
|
+
return;
|
|
103
|
+
const nextOpen = !resolvedOpen;
|
|
104
|
+
if (!isControlled) {
|
|
105
|
+
setInternalOpen(nextOpen);
|
|
106
|
+
}
|
|
107
|
+
onChange?.(nextOpen);
|
|
108
|
+
}, [disabled, resolvedOpen, isControlled, onChange]);
|
|
109
|
+
const showIndicator = indicator !== null;
|
|
110
|
+
const sizeConfig = TRIGGER_SIZE_MAP[size];
|
|
111
|
+
return (jsxs(StyledRoot, { ref: ref, className: className, style: style, "data-testid": testId, ...rest, children: [jsxs(StyledTrigger, { type: "button", id: triggerId, "aria-expanded": resolvedOpen, "aria-controls": contentId, "aria-disabled": disabled || undefined, disabled: disabled, onClick: handleToggle, "$size": size, "$disabled": disabled, children: [showIndicator && (jsx(StyledChevron, { "$open": resolvedOpen, "$size": sizeConfig.chevronSize, children: indicator ?? jsx(ChevronRightIcon, { size: sizeConfig.chevronSize }) })), jsx("span", { children: trigger })] }), (resolvedOpen || keepMounted) && (jsx(StyledContentWrapper, { "$open": resolvedOpen, role: "region", id: contentId, "aria-labelledby": triggerId, hidden: !resolvedOpen || undefined, children: jsx(StyledContentInner, { children: jsx(StyledContentBody, { "$size": size, children: children }) }) }))] }));
|
|
112
|
+
};
|
|
113
|
+
Collapsible.displayName = 'Collapsible';
|
|
114
|
+
|
|
115
|
+
export { Collapsible };
|
|
116
|
+
//# sourceMappingURL=Collapsible.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Collapsible.js","sources":["../../../../../../src/components/primitives/Collapsible/Collapsible.tsx"],"sourcesContent":[null],"names":["_jsx","_jsxs"],"mappings":"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"}
|