@dreamtree-org/twreact-ui 1.3.0 → 1.3.1
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/README.md +179 -10
- package/ai-skills/dreamtree-ui.md +71 -12
- package/dist/ai-schema.json +452 -17
- package/dist/components/core/Accordion.d.ts.map +1 -1
- package/dist/components/core/Button.d.ts.map +1 -1
- package/dist/components/core/Checkbox.d.ts.map +1 -1
- package/dist/components/core/ColorPicker.d.ts.map +1 -1
- package/dist/components/core/DatePicker.d.ts.map +1 -1
- package/dist/components/core/DateRangePicker.d.ts.map +1 -1
- package/dist/components/core/Form.d.ts.map +1 -1
- package/dist/components/core/Input.d.ts.map +1 -1
- package/dist/components/core/LocationPicker.d.ts.map +1 -1
- package/dist/components/core/Popover.d.ts +4 -0
- package/dist/components/core/Popover.d.ts.map +1 -0
- package/dist/components/core/PriceRangePicker.d.ts.map +1 -1
- package/dist/components/core/ProgressBar.d.ts.map +1 -1
- package/dist/components/core/Radio.d.ts.map +1 -1
- package/dist/components/core/Rate.d.ts.map +1 -1
- package/dist/components/core/Select.d.ts.map +1 -1
- package/dist/components/core/Skeleton.d.ts.map +1 -1
- package/dist/components/core/Slider.d.ts +4 -0
- package/dist/components/core/Slider.d.ts.map +1 -0
- package/dist/components/core/SpeechToText.d.ts.map +1 -1
- package/dist/components/core/Switch.d.ts.map +1 -1
- package/dist/components/core/Table/ActionMenu.d.ts.map +1 -1
- package/dist/components/core/Table/ColumnMenu.d.ts +2 -1
- package/dist/components/core/Table/ColumnMenu.d.ts.map +1 -1
- package/dist/components/core/Table/MobileCard.d.ts +2 -2
- package/dist/components/core/Table/MobileCard.d.ts.map +1 -1
- package/dist/components/core/Table/Table.d.ts.map +1 -1
- package/dist/components/core/Table/TableRow.d.ts +4 -2
- package/dist/components/core/Table/TableRow.d.ts.map +1 -1
- package/dist/components/core/Tabs.d.ts.map +1 -1
- package/dist/components/core/Textarea.d.ts +4 -0
- package/dist/components/core/Textarea.d.ts.map +1 -0
- package/dist/components/core/ThreeDotPopover.d.ts.map +1 -1
- package/dist/components/core/Tooltip.d.ts.map +1 -1
- package/dist/components/feedback/Dialog.d.ts.map +1 -1
- package/dist/components/feedback/Drawer.d.ts +4 -0
- package/dist/components/feedback/Drawer.d.ts.map +1 -0
- package/dist/components/feedback/Toast.d.ts +14 -5
- package/dist/components/feedback/Toast.d.ts.map +1 -1
- package/dist/components/feedback/Tour.d.ts +4 -0
- package/dist/components/feedback/Tour.d.ts.map +1 -0
- package/dist/components/feedback/TourSpotlight.d.ts +9 -0
- package/dist/components/feedback/TourSpotlight.d.ts.map +1 -0
- package/dist/components/navigation/Breadcrumbs.d.ts.map +1 -1
- package/dist/components/navigation/FootNav.d.ts.map +1 -1
- package/dist/components/navigation/Navbar.d.ts.map +1 -1
- package/dist/components/navigation/Sidebar.d.ts +8 -2
- package/dist/components/navigation/Sidebar.d.ts.map +1 -1
- package/dist/components/utility/Badge.d.ts.map +1 -1
- package/dist/components/utility/FileUpload.d.ts.map +1 -1
- package/dist/components/utility/Sortable.d.ts +4 -0
- package/dist/components/utility/Sortable.d.ts.map +1 -0
- package/dist/esm/_vendor/object-assign/index.js +99 -0
- package/dist/esm/_vendor/prop-types/_vendor/react-is/cjs/react-is.development.js +190 -0
- package/dist/esm/_vendor/prop-types/_vendor/react-is/cjs/react-is.production.min.js +26 -0
- package/dist/esm/_vendor/prop-types/_vendor/react-is/index.js +19 -0
- package/dist/esm/_vendor/prop-types/checkPropTypes.js +115 -0
- package/dist/esm/_vendor/prop-types/factoryWithThrowingShims.js +74 -0
- package/dist/esm/_vendor/prop-types/factoryWithTypeCheckers.js +625 -0
- package/dist/esm/_vendor/prop-types/index.js +30 -0
- package/dist/esm/_vendor/prop-types/lib/ReactPropTypesSecret.js +21 -0
- package/dist/esm/_vendor/prop-types/lib/has.js +11 -0
- package/dist/esm/_virtual/_commonjsHelpers.js +5 -0
- package/dist/esm/_virtual/_rollupPluginBabelHelpers.js +329 -0
- package/dist/esm/_virtual/index.js +3 -0
- package/dist/esm/_virtual/index2.js +3 -0
- package/dist/esm/_virtual/react-is.development.js +3 -0
- package/dist/esm/_virtual/react-is.production.min.js +3 -0
- package/dist/esm/components/blocks/AppShell.js +205 -0
- package/dist/esm/components/blocks/ConfirmDialog.js +57 -0
- package/dist/esm/components/blocks/EmptyState.js +44 -0
- package/dist/esm/components/blocks/ErrorState.js +53 -0
- package/dist/esm/components/blocks/LoadingState.js +134 -0
- package/dist/esm/components/blocks/PageHeader.js +51 -0
- package/dist/esm/components/blocks/StatCard.js +79 -0
- package/dist/esm/components/blocks/StatusPill.js +55 -0
- package/dist/esm/components/core/Accordion.js +260 -0
- package/dist/esm/components/core/Button.js +59 -0
- package/dist/esm/components/core/Checkbox.js +188 -0
- package/dist/esm/components/core/ColorPicker.js +348 -0
- package/dist/esm/components/core/DatePicker.js +436 -0
- package/dist/esm/components/core/DateRangePicker.js +494 -0
- package/dist/esm/components/core/Form.js +522 -0
- package/dist/esm/components/core/Input.js +179 -0
- package/dist/esm/components/core/Loader.js +141 -0
- package/dist/esm/components/core/LocationPicker.js +161 -0
- package/dist/esm/components/core/Popover.js +171 -0
- package/dist/esm/components/core/PriceRangePicker.js +376 -0
- package/dist/esm/components/core/ProgressBar.js +152 -0
- package/dist/esm/components/core/Radio.js +156 -0
- package/dist/esm/components/core/Rate.js +197 -0
- package/dist/esm/components/core/RoundedTag.js +118 -0
- package/dist/esm/components/core/Select.js +857 -0
- package/dist/esm/components/core/Skeleton.js +100 -0
- package/dist/esm/components/core/Slider.js +134 -0
- package/dist/esm/components/core/SpeechToText.js +226 -0
- package/dist/esm/components/core/Switch.js +207 -0
- package/dist/esm/components/core/Table/ActionMenu.js +251 -0
- package/dist/esm/components/core/Table/ColumnMenu.js +55 -0
- package/dist/esm/components/core/Table/FieldInput.js +157 -0
- package/dist/esm/components/core/Table/MobileCard.js +187 -0
- package/dist/esm/components/core/Table/MobileFilters.js +72 -0
- package/dist/esm/components/core/Table/Pagination.js +157 -0
- package/dist/esm/components/core/Table/Table.js +1533 -0
- package/dist/esm/components/core/Table/TableRow.js +254 -0
- package/dist/esm/components/core/Table/constants.js +35 -0
- package/dist/esm/components/core/Table/helpers.js +124 -0
- package/dist/esm/components/core/Table/useClickOutside.js +26 -0
- package/dist/esm/components/core/Tabs.js +289 -0
- package/dist/esm/components/core/TextToSpeech.js +52 -0
- package/dist/esm/components/core/Textarea.js +125 -0
- package/dist/esm/components/core/ThreeDotPopover.js +160 -0
- package/dist/esm/components/core/Tooltip.js +372 -0
- package/dist/esm/components/feedback/Alert.js +96 -0
- package/dist/esm/components/feedback/Dialog.js +200 -0
- package/dist/esm/components/feedback/Drawer.js +171 -0
- package/dist/esm/components/feedback/Toast.js +362 -0
- package/dist/esm/components/feedback/Tour.js +214 -0
- package/dist/esm/components/feedback/TourSpotlight.js +71 -0
- package/dist/esm/components/navigation/Breadcrumbs.js +75 -0
- package/dist/esm/components/navigation/Dropdown.js +53 -0
- package/dist/esm/components/navigation/FootNav.js +51 -0
- package/dist/esm/components/navigation/Navbar.js +437 -0
- package/dist/esm/components/navigation/Sidebar.js +567 -0
- package/dist/esm/components/utility/Avatar.js +89 -0
- package/dist/esm/components/utility/Badge.js +47 -0
- package/dist/esm/components/utility/Card.js +85 -0
- package/dist/esm/components/utility/Carousel.js +97 -0
- package/dist/esm/components/utility/Condition.js +9 -0
- package/dist/esm/components/utility/FileUpload.js +177 -0
- package/dist/esm/components/utility/Pagination.js +111 -0
- package/dist/esm/components/utility/Sortable.js +190 -0
- package/dist/esm/components/utility/Stepper.js +101 -0
- package/dist/esm/hooks/useApi.js +169 -0
- package/dist/esm/hooks/useControllableState.js +32 -0
- package/dist/esm/hooks/useFocusTrap.js +85 -0
- package/dist/esm/hooks/useLatestRef.js +20 -0
- package/dist/esm/hooks/useMixins.js +100 -0
- package/dist/esm/hooks/useScrollLock.js +26 -0
- package/dist/esm/hooks/useSliderValues.js +135 -0
- package/dist/esm/hooks/useSortable.js +188 -0
- package/dist/esm/hooks/useTheme.js +53 -0
- package/dist/esm/hooks/useTourTarget.js +92 -0
- package/dist/esm/index.js +65 -0
- package/dist/esm/store/index.js +26 -0
- package/dist/esm/store/store.js +107 -0
- package/dist/esm/store/storeSlice.js +45 -0
- package/dist/esm/utils/cn.js +11 -0
- package/dist/esm/utils/emitter.js +169 -0
- package/dist/esm/utils/helpers.js +161 -0
- package/dist/esm/utils/position.js +134 -0
- package/dist/hooks/useApi.d.ts +2 -1
- package/dist/hooks/useApi.d.ts.map +1 -1
- package/dist/hooks/useControllableState.d.ts +11 -0
- package/dist/hooks/useControllableState.d.ts.map +1 -0
- package/dist/hooks/useFocusTrap.d.ts +15 -0
- package/dist/hooks/useFocusTrap.d.ts.map +1 -0
- package/dist/hooks/useLatestRef.d.ts +8 -0
- package/dist/hooks/useLatestRef.d.ts.map +1 -0
- package/dist/hooks/useMixins.d.ts.map +1 -1
- package/dist/hooks/useScrollLock.d.ts +2 -0
- package/dist/hooks/useScrollLock.d.ts.map +1 -0
- package/dist/hooks/useSliderValues.d.ts +43 -0
- package/dist/hooks/useSliderValues.d.ts.map +1 -0
- package/dist/hooks/useSortable.d.ts +32 -0
- package/dist/hooks/useSortable.d.ts.map +1 -0
- package/dist/hooks/useTheme.d.ts.map +1 -1
- package/dist/hooks/useTourTarget.d.ts +15 -0
- package/dist/hooks/useTourTarget.d.ts.map +1 -0
- package/dist/index.css +1 -1
- package/dist/index.d.ts +8 -2
- package/dist/index.esm.css +1 -1
- package/dist/index.esm.js +4800 -2212
- package/dist/index.js +4805 -2210
- package/dist/types/index.d.ts +193 -5
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/position.d.ts +30 -0
- package/dist/utils/position.d.ts.map +1 -0
- package/doc/README.md +7 -1
- package/mcp/catalog.snapshot.json +911 -212
- package/package.json +14 -2
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { objectWithoutProperties as _objectWithoutProperties, objectSpread2 as _objectSpread2 } from '../../_virtual/_rollupPluginBabelHelpers.js';
|
|
3
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
+
import { forwardRef } from 'react';
|
|
5
|
+
import { cn } from '../../utils/cn.js';
|
|
6
|
+
import { Loader2 } from 'lucide-react';
|
|
7
|
+
|
|
8
|
+
var _excluded = ["className", "variant", "size", "disabled", "loading", "children", "leftIcon", "rightIcon", "fullWidth"];
|
|
9
|
+
var Button = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
10
|
+
var className = _ref.className,
|
|
11
|
+
_ref$variant = _ref.variant,
|
|
12
|
+
variant = _ref$variant === void 0 ? 'primary' : _ref$variant,
|
|
13
|
+
_ref$size = _ref.size,
|
|
14
|
+
size = _ref$size === void 0 ? 'md' : _ref$size,
|
|
15
|
+
disabled = _ref.disabled,
|
|
16
|
+
loading = _ref.loading,
|
|
17
|
+
children = _ref.children,
|
|
18
|
+
leftIcon = _ref.leftIcon,
|
|
19
|
+
rightIcon = _ref.rightIcon,
|
|
20
|
+
fullWidth = _ref.fullWidth,
|
|
21
|
+
props = _objectWithoutProperties(_ref, _excluded);
|
|
22
|
+
var baseClasses = cn('inline-flex items-center justify-center rounded-md font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:opacity-50 disabled:pointer-events-none', {
|
|
23
|
+
// Variants
|
|
24
|
+
'bg-primary-600 text-white hover:bg-primary-700 focus:ring-primary-500': variant === 'primary',
|
|
25
|
+
'bg-secondary-100 text-secondary-900 hover:bg-secondary-200 focus:ring-secondary-500': variant === 'secondary',
|
|
26
|
+
'bg-transparent border border-gray-300 hover:bg-gray-50 focus:ring-primary-500': variant === 'outline',
|
|
27
|
+
'bg-transparent text-primary-600 hover:bg-primary-50 focus:ring-primary-500': variant === 'ghost',
|
|
28
|
+
'bg-error-600 text-white hover:bg-error-700 focus:ring-error-500': variant === 'destructive',
|
|
29
|
+
'bg-success-600 text-white hover:bg-success-700 focus:ring-success-500': variant === 'success',
|
|
30
|
+
'bg-warning-600 text-white hover:bg-warning-700 focus:ring-warning-500': variant === 'warning',
|
|
31
|
+
// Sizes — every value of the shared `Size` type gets a real height.
|
|
32
|
+
'h-7 px-2 text-xs': size === 'xs',
|
|
33
|
+
'h-8 px-3 text-xs': size === 'sm',
|
|
34
|
+
'h-10 px-4 text-sm': size === 'md',
|
|
35
|
+
'h-12 px-6 text-base': size === 'lg',
|
|
36
|
+
'h-14 px-8 text-lg': size === 'xl',
|
|
37
|
+
'h-16 px-10 text-xl': size === '2xl',
|
|
38
|
+
// Full width
|
|
39
|
+
'w-full': fullWidth
|
|
40
|
+
}, className);
|
|
41
|
+
return jsxs("button", _objectSpread2(_objectSpread2({
|
|
42
|
+
ref: ref,
|
|
43
|
+
className: baseClasses,
|
|
44
|
+
disabled: disabled || loading
|
|
45
|
+
}, props), {}, {
|
|
46
|
+
children: [loading && jsx(Loader2, {
|
|
47
|
+
className: "mr-2 h-4 w-4 animate-spin"
|
|
48
|
+
}), !loading && leftIcon && jsx("span", {
|
|
49
|
+
className: "mr-2",
|
|
50
|
+
children: leftIcon
|
|
51
|
+
}), children, !loading && rightIcon && jsx("span", {
|
|
52
|
+
className: "ml-2",
|
|
53
|
+
children: rightIcon
|
|
54
|
+
})]
|
|
55
|
+
}));
|
|
56
|
+
});
|
|
57
|
+
Button.displayName = 'Button';
|
|
58
|
+
|
|
59
|
+
export { Button as default };
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { objectWithoutProperties as _objectWithoutProperties, slicedToArray as _slicedToArray, objectSpread2 as _objectSpread2 } from '../../_virtual/_rollupPluginBabelHelpers.js';
|
|
3
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
+
import { forwardRef, useId, useRef, useState, useEffect, useCallback } from 'react';
|
|
5
|
+
import { Check } from 'lucide-react';
|
|
6
|
+
|
|
7
|
+
var _excluded = ["id", "name", "label", "checked", "defaultChecked", "onChange", "disabled", "required", "className", "size", "labelPosition", "value", "ariaLabel", "variant", "indeterminate", "borderColor", "color", "iconClass", "checkedClass", "wrapperProps"];
|
|
8
|
+
var SIZE_CLASSES = {
|
|
9
|
+
sm: {
|
|
10
|
+
box: "h-4 w-4",
|
|
11
|
+
label: "text-sm",
|
|
12
|
+
icon: "w-3 h-3"
|
|
13
|
+
},
|
|
14
|
+
md: {
|
|
15
|
+
box: "h-5 w-5",
|
|
16
|
+
label: "text-sm",
|
|
17
|
+
icon: "w-3.5 h-3.5"
|
|
18
|
+
},
|
|
19
|
+
lg: {
|
|
20
|
+
box: "h-6 w-6",
|
|
21
|
+
label: "text-base",
|
|
22
|
+
icon: "w-4 h-4"
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
var COLOR_PRESETS = {
|
|
26
|
+
primary: {
|
|
27
|
+
checked: "peer-checked:bg-primary-600 peer-checked:border-primary-600 peer-checked:text-white",
|
|
28
|
+
ring: "peer-focus:ring-primary-300"
|
|
29
|
+
},
|
|
30
|
+
secondary: {
|
|
31
|
+
checked: "peer-checked:bg-secondary-600 peer-checked:border-secondary-600 peer-checked:text-white",
|
|
32
|
+
ring: "peer-focus:ring-secondary-300"
|
|
33
|
+
},
|
|
34
|
+
success: {
|
|
35
|
+
checked: "peer-checked:bg-success-600 peer-checked:border-success-600 peer-checked:text-white",
|
|
36
|
+
ring: "peer-focus:ring-success-300"
|
|
37
|
+
},
|
|
38
|
+
green: {
|
|
39
|
+
checked: "peer-checked:bg-success-600 peer-checked:border-success-600 peer-checked:text-white",
|
|
40
|
+
ring: "peer-focus:ring-success-300"
|
|
41
|
+
},
|
|
42
|
+
error: {
|
|
43
|
+
checked: "peer-checked:bg-error-600 peer-checked:border-error-600 peer-checked:text-white",
|
|
44
|
+
ring: "peer-focus:ring-error-300"
|
|
45
|
+
},
|
|
46
|
+
danger: {
|
|
47
|
+
checked: "peer-checked:bg-error-600 peer-checked:border-error-600 peer-checked:text-white",
|
|
48
|
+
ring: "peer-focus:ring-error-300"
|
|
49
|
+
},
|
|
50
|
+
red: {
|
|
51
|
+
checked: "peer-checked:bg-error-600 peer-checked:border-error-600 peer-checked:text-white",
|
|
52
|
+
ring: "peer-focus:ring-error-300"
|
|
53
|
+
},
|
|
54
|
+
warning: {
|
|
55
|
+
checked: "peer-checked:bg-warning-600 peer-checked:border-warning-600 peer-checked:text-white",
|
|
56
|
+
ring: "peer-focus:ring-warning-300"
|
|
57
|
+
},
|
|
58
|
+
blue: {
|
|
59
|
+
checked: "peer-checked:bg-blue-600 peer-checked:border-blue-600 peer-checked:text-white",
|
|
60
|
+
ring: "peer-focus:ring-blue-300"
|
|
61
|
+
},
|
|
62
|
+
indigo: {
|
|
63
|
+
checked: "peer-checked:bg-indigo-600 peer-checked:border-indigo-600 peer-checked:text-white",
|
|
64
|
+
ring: "peer-focus:ring-indigo-300"
|
|
65
|
+
},
|
|
66
|
+
purple: {
|
|
67
|
+
checked: "peer-checked:bg-purple-600 peer-checked:border-purple-600 peer-checked:text-white",
|
|
68
|
+
ring: "peer-focus:ring-purple-300"
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
var Checkbox = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
72
|
+
var id = _ref.id,
|
|
73
|
+
name = _ref.name,
|
|
74
|
+
label = _ref.label,
|
|
75
|
+
checked = _ref.checked,
|
|
76
|
+
defaultChecked = _ref.defaultChecked,
|
|
77
|
+
onChange = _ref.onChange,
|
|
78
|
+
_ref$disabled = _ref.disabled,
|
|
79
|
+
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
80
|
+
_ref$required = _ref.required,
|
|
81
|
+
required = _ref$required === void 0 ? false : _ref$required,
|
|
82
|
+
_ref$className = _ref.className,
|
|
83
|
+
className = _ref$className === void 0 ? "" : _ref$className,
|
|
84
|
+
_ref$size = _ref.size,
|
|
85
|
+
size = _ref$size === void 0 ? "md" : _ref$size,
|
|
86
|
+
_ref$labelPosition = _ref.labelPosition,
|
|
87
|
+
labelPosition = _ref$labelPosition === void 0 ? "right" : _ref$labelPosition,
|
|
88
|
+
value = _ref.value,
|
|
89
|
+
ariaLabel = _ref.ariaLabel;
|
|
90
|
+
_ref.variant;
|
|
91
|
+
var _ref$indeterminate = _ref.indeterminate,
|
|
92
|
+
indeterminate = _ref$indeterminate === void 0 ? false : _ref$indeterminate,
|
|
93
|
+
borderColor = _ref.borderColor,
|
|
94
|
+
_ref$color = _ref.color,
|
|
95
|
+
color = _ref$color === void 0 ? "primary" : _ref$color,
|
|
96
|
+
iconClass = _ref.iconClass,
|
|
97
|
+
checkedClass = _ref.checkedClass,
|
|
98
|
+
wrapperProps = _ref.wrapperProps,
|
|
99
|
+
props = _objectWithoutProperties(_ref, _excluded);
|
|
100
|
+
var autoId = useId();
|
|
101
|
+
var inputId = id || "".concat(autoId, "-checkbox");
|
|
102
|
+
var inputRef = useRef(null);
|
|
103
|
+
var isControlled = checked !== undefined;
|
|
104
|
+
var _useState = useState(defaultChecked !== null && defaultChecked !== void 0 ? defaultChecked : false),
|
|
105
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
106
|
+
internalChecked = _useState2[0],
|
|
107
|
+
setInternalChecked = _useState2[1];
|
|
108
|
+
var currentChecked = isControlled ? checked : internalChecked;
|
|
109
|
+
// expose ref
|
|
110
|
+
useEffect(function () {
|
|
111
|
+
if (!ref) return;
|
|
112
|
+
if (typeof ref === "function") ref(inputRef.current);else ref.current = inputRef.current;
|
|
113
|
+
}, [ref]);
|
|
114
|
+
// indeterminate
|
|
115
|
+
useEffect(function () {
|
|
116
|
+
if (!inputRef.current) return;
|
|
117
|
+
inputRef.current.indeterminate = Boolean(indeterminate);
|
|
118
|
+
}, [indeterminate]);
|
|
119
|
+
var handleChange = useCallback(function (e) {
|
|
120
|
+
if (!isControlled) setInternalChecked(e.target.checked);
|
|
121
|
+
if (typeof onChange === "function") onChange(e);
|
|
122
|
+
}, [isControlled, onChange]);
|
|
123
|
+
var sizeClass = SIZE_CLASSES[size] || SIZE_CLASSES.md;
|
|
124
|
+
var wrapperCls = "inline-flex items-center ".concat(className);
|
|
125
|
+
var boxOuterCls = "relative inline-flex items-center justify-center rounded-sm border transition-shadow ".concat(sizeClass.box, " ").concat(disabled ? "opacity-60 cursor-not-allowed" : "cursor-pointer hover:shadow-sm", " ");
|
|
126
|
+
// Icon classes driven by React state (reliable)
|
|
127
|
+
var iconBase = "pointer-events-none transform transition-all duration-150 ease-out";
|
|
128
|
+
var iconShown = "opacity-100 scale-100";
|
|
129
|
+
var iconHidden = "opacity-0 scale-75";
|
|
130
|
+
var isPreset = COLOR_PRESETS[color];
|
|
131
|
+
var colorClasses = isPreset ? "".concat(isPreset.checked, " peer-focus:ring-2 peer-focus:ring-offset-1 ").concat(isPreset.ring) : "peer-focus:ring-2 peer-focus:ring-offset-1 peer-focus:ring-primary-300";
|
|
132
|
+
var customColorStyle = currentChecked && !isPreset && !checkedClass ? {
|
|
133
|
+
backgroundColor: color,
|
|
134
|
+
borderColor: color,
|
|
135
|
+
color: "#ffffff"
|
|
136
|
+
} : {};
|
|
137
|
+
// The outer box shows its own border unless a checked preset or custom colour paints it.
|
|
138
|
+
var showBoxBorder = !(currentChecked && (isPreset || customColorStyle.borderColor));
|
|
139
|
+
return jsxs("div", _objectSpread2(_objectSpread2({
|
|
140
|
+
className: wrapperCls
|
|
141
|
+
}, wrapperProps !== null && wrapperProps !== void 0 ? wrapperProps : {}), {}, {
|
|
142
|
+
children: [label && labelPosition === "left" && jsx("label", {
|
|
143
|
+
htmlFor: inputId,
|
|
144
|
+
className: "".concat(sizeClass.label, " select-none mr-2"),
|
|
145
|
+
children: label
|
|
146
|
+
}), jsxs("div", {
|
|
147
|
+
className: "".concat(boxOuterCls).concat(!disabled && showBoxBorder && !borderColor ? " border-gray-300" : ""),
|
|
148
|
+
style: disabled || !showBoxBorder || !borderColor ? {} : {
|
|
149
|
+
borderColor: borderColor
|
|
150
|
+
},
|
|
151
|
+
"aria-disabled": disabled,
|
|
152
|
+
children: [jsx("input", _objectSpread2({
|
|
153
|
+
id: inputId,
|
|
154
|
+
ref: inputRef,
|
|
155
|
+
name: name,
|
|
156
|
+
type: "checkbox",
|
|
157
|
+
className: "peer absolute inset-0 m-0 p-0 opacity-0 z-10",
|
|
158
|
+
// ensure we set checked only from the boolean (avoid undefined)
|
|
159
|
+
checked: Boolean(currentChecked),
|
|
160
|
+
onChange: handleChange,
|
|
161
|
+
disabled: disabled,
|
|
162
|
+
required: required,
|
|
163
|
+
value: value,
|
|
164
|
+
"aria-label": ariaLabel,
|
|
165
|
+
"aria-checked": Boolean(currentChecked)
|
|
166
|
+
}, props)), jsx("div", {
|
|
167
|
+
className: "pointer-events-none z-0 flex items-center justify-center rounded-sm w-full h-full transition-colors duration-150 ease-in-out " + "".concat(colorClasses, " ") + "".concat(disabled ? "bg-gray-100 border-gray-400 text-primary-400" : "bg-white border-gray-500", " ").concat(checkedClass ? checkedClass : ""),
|
|
168
|
+
style: currentChecked && checkedClass ? {
|
|
169
|
+
backgroundColor: "",
|
|
170
|
+
borderColor: ""
|
|
171
|
+
} : customColorStyle,
|
|
172
|
+
"aria-hidden": "true",
|
|
173
|
+
children: jsx(Check, {
|
|
174
|
+
className: "".concat(sizeClass.icon, " ").concat(iconBase, " ").concat(currentChecked ? iconShown : iconHidden, " ").concat(iconClass || ""),
|
|
175
|
+
strokeWidth: 2.2,
|
|
176
|
+
"aria-hidden": "true"
|
|
177
|
+
})
|
|
178
|
+
})]
|
|
179
|
+
}), label && labelPosition === "right" && jsx("label", {
|
|
180
|
+
htmlFor: inputId,
|
|
181
|
+
className: "".concat(sizeClass.label, " select-none ml-2"),
|
|
182
|
+
children: label
|
|
183
|
+
})]
|
|
184
|
+
}));
|
|
185
|
+
});
|
|
186
|
+
Checkbox.displayName = "Checkbox";
|
|
187
|
+
|
|
188
|
+
export { Checkbox as default };
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { objectWithoutProperties as _objectWithoutProperties, slicedToArray as _slicedToArray, objectSpread2 as _objectSpread2 } from '../../_virtual/_rollupPluginBabelHelpers.js';
|
|
3
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
+
import { forwardRef, useMemo, useState } from 'react';
|
|
5
|
+
import { cn } from '../../utils/cn.js';
|
|
6
|
+
|
|
7
|
+
var _excluded = ["value", "defaultValue", "onChange", "swatches", "showAlpha", "size", "disabled", "className", "label", "id"];
|
|
8
|
+
/**
|
|
9
|
+
* ColorPicker.jsx
|
|
10
|
+
* A reusable, accessible, and Tailwind-friendly color picker component (plain JavaScript)
|
|
11
|
+
* - Controlled or uncontrolled
|
|
12
|
+
* - Presets (swatches), hex input, HSL sliders, alpha
|
|
13
|
+
* - No external deps
|
|
14
|
+
*
|
|
15
|
+
* Props:
|
|
16
|
+
* - value // controlled hex / rgba string
|
|
17
|
+
* - defaultValue // uncontrolled initial value
|
|
18
|
+
* - onChange // receives normalized rgba string: `rgba(r,g,b,a)`
|
|
19
|
+
* - swatches // array of hex/rgba strings
|
|
20
|
+
* - showAlpha // boolean
|
|
21
|
+
* - size // "sm" | "md" | "lg"
|
|
22
|
+
* - disabled // boolean
|
|
23
|
+
* - className // string
|
|
24
|
+
* - label // string
|
|
25
|
+
* - id // string
|
|
26
|
+
*/
|
|
27
|
+
// ---------- Utilities ----------
|
|
28
|
+
function clamp(n) {
|
|
29
|
+
var a = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
30
|
+
var b = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
|
|
31
|
+
return Math.min(b, Math.max(a, n));
|
|
32
|
+
}
|
|
33
|
+
function hexToRgba(hex) {
|
|
34
|
+
var h = hex.replace(/^#/, "").trim();
|
|
35
|
+
if (!/^[0-9a-fA-F]+$/.test(h)) return null;
|
|
36
|
+
if (h.length === 3) {
|
|
37
|
+
var r = parseInt(h[0] + h[0], 16);
|
|
38
|
+
var g = parseInt(h[1] + h[1], 16);
|
|
39
|
+
var b = parseInt(h[2] + h[2], 16);
|
|
40
|
+
return {
|
|
41
|
+
r: r,
|
|
42
|
+
g: g,
|
|
43
|
+
b: b,
|
|
44
|
+
a: 1
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
if (h.length === 4) {
|
|
48
|
+
var _r = parseInt(h[0] + h[0], 16);
|
|
49
|
+
var _g = parseInt(h[1] + h[1], 16);
|
|
50
|
+
var _b = parseInt(h[2] + h[2], 16);
|
|
51
|
+
var a = parseInt(h[3] + h[3], 16) / 255;
|
|
52
|
+
return {
|
|
53
|
+
r: _r,
|
|
54
|
+
g: _g,
|
|
55
|
+
b: _b,
|
|
56
|
+
a: a
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
if (h.length === 6) {
|
|
60
|
+
var _r2 = parseInt(h.slice(0, 2), 16);
|
|
61
|
+
var _g2 = parseInt(h.slice(2, 4), 16);
|
|
62
|
+
var _b2 = parseInt(h.slice(4, 6), 16);
|
|
63
|
+
return {
|
|
64
|
+
r: _r2,
|
|
65
|
+
g: _g2,
|
|
66
|
+
b: _b2,
|
|
67
|
+
a: 1
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
if (h.length === 8) {
|
|
71
|
+
var _r3 = parseInt(h.slice(0, 2), 16);
|
|
72
|
+
var _g3 = parseInt(h.slice(2, 4), 16);
|
|
73
|
+
var _b3 = parseInt(h.slice(4, 6), 16);
|
|
74
|
+
var _a = parseInt(h.slice(6, 8), 16) / 255;
|
|
75
|
+
return {
|
|
76
|
+
r: _r3,
|
|
77
|
+
g: _g3,
|
|
78
|
+
b: _b3,
|
|
79
|
+
a: _a
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
function rgbaToHex(_ref) {
|
|
85
|
+
var r = _ref.r,
|
|
86
|
+
g = _ref.g,
|
|
87
|
+
b = _ref.b,
|
|
88
|
+
a = _ref.a;
|
|
89
|
+
var showAlpha = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
90
|
+
var toHex = function toHex(v) {
|
|
91
|
+
return v.toString(16).padStart(2, "0");
|
|
92
|
+
};
|
|
93
|
+
var includeAlpha = showAlpha && typeof a === "number" && a !== 1;
|
|
94
|
+
var aa = includeAlpha ? Math.round(clamp(a, 0, 1) * 255) : undefined;
|
|
95
|
+
return "#".concat(toHex(r)).concat(toHex(g)).concat(toHex(b)).concat(aa !== undefined ? toHex(aa) : "");
|
|
96
|
+
}
|
|
97
|
+
function parseColor(input) {
|
|
98
|
+
if (!input) return null;
|
|
99
|
+
var s = input.trim();
|
|
100
|
+
if (s.startsWith("#")) return hexToRgba(s);
|
|
101
|
+
var rgbaMatch = s.match(/rgba?\(([^)]+)\)/i);
|
|
102
|
+
if (rgbaMatch) {
|
|
103
|
+
var parts = rgbaMatch[1].split(",").map(function (p) {
|
|
104
|
+
return p.trim();
|
|
105
|
+
});
|
|
106
|
+
var _parts$slice$map = parts.slice(0, 3).map(function (x) {
|
|
107
|
+
return parseInt(x, 10);
|
|
108
|
+
}),
|
|
109
|
+
_parts$slice$map2 = _slicedToArray(_parts$slice$map, 3),
|
|
110
|
+
r = _parts$slice$map2[0],
|
|
111
|
+
g = _parts$slice$map2[1],
|
|
112
|
+
b = _parts$slice$map2[2];
|
|
113
|
+
var a = 1;
|
|
114
|
+
if (parts[3] !== undefined) a = parseFloat(parts[3]);
|
|
115
|
+
return {
|
|
116
|
+
r: r,
|
|
117
|
+
g: g,
|
|
118
|
+
b: b,
|
|
119
|
+
a: a
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
function rgbaToString(_ref2) {
|
|
125
|
+
var r = _ref2.r,
|
|
126
|
+
g = _ref2.g,
|
|
127
|
+
b = _ref2.b,
|
|
128
|
+
_ref2$a = _ref2.a,
|
|
129
|
+
a = _ref2$a === void 0 ? 1 : _ref2$a;
|
|
130
|
+
if (a === undefined || a === 1) return "rgb(".concat(r, ", ").concat(g, ", ").concat(b, ")");
|
|
131
|
+
return "rgba(".concat(r, ", ").concat(g, ", ").concat(b, ", ").concat(+a.toFixed(3), ")");
|
|
132
|
+
}
|
|
133
|
+
// ---------- Component ----------
|
|
134
|
+
var ColorPicker = /*#__PURE__*/forwardRef(function ColorPicker(props, ref) {
|
|
135
|
+
var _internal$a, _internal$a2;
|
|
136
|
+
var value = props.value,
|
|
137
|
+
defaultValue = props.defaultValue,
|
|
138
|
+
onChange = props.onChange,
|
|
139
|
+
_props$swatches = props.swatches,
|
|
140
|
+
swatches = _props$swatches === void 0 ? [] : _props$swatches,
|
|
141
|
+
_props$showAlpha = props.showAlpha,
|
|
142
|
+
showAlpha = _props$showAlpha === void 0 ? false : _props$showAlpha,
|
|
143
|
+
_props$size = props.size,
|
|
144
|
+
size = _props$size === void 0 ? "md" : _props$size,
|
|
145
|
+
_props$disabled = props.disabled,
|
|
146
|
+
disabled = _props$disabled === void 0 ? false : _props$disabled,
|
|
147
|
+
_props$className = props.className,
|
|
148
|
+
className = _props$className === void 0 ? "" : _props$className,
|
|
149
|
+
_props$label = props.label,
|
|
150
|
+
label = _props$label === void 0 ? "Pick a color" : _props$label,
|
|
151
|
+
id = props.id,
|
|
152
|
+
rest = _objectWithoutProperties(props, _excluded);
|
|
153
|
+
var parsedControlled = useMemo(function () {
|
|
154
|
+
return parseColor(value !== null && value !== void 0 ? value : null);
|
|
155
|
+
}, [value]);
|
|
156
|
+
var parsedDefault = useMemo(function () {
|
|
157
|
+
return parseColor(defaultValue !== null && defaultValue !== void 0 ? defaultValue : "#000000");
|
|
158
|
+
}, [defaultValue]);
|
|
159
|
+
var _useState = useState(function () {
|
|
160
|
+
var _ref3;
|
|
161
|
+
return (_ref3 = parsedControlled !== null && parsedControlled !== void 0 ? parsedControlled : parsedDefault) !== null && _ref3 !== void 0 ? _ref3 : {
|
|
162
|
+
r: 0,
|
|
163
|
+
g: 0,
|
|
164
|
+
b: 0,
|
|
165
|
+
a: 1
|
|
166
|
+
};
|
|
167
|
+
}),
|
|
168
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
169
|
+
internal = _useState2[0],
|
|
170
|
+
setInternal = _useState2[1];
|
|
171
|
+
// Sync from a controlled `value` (adjust-during-render pattern).
|
|
172
|
+
var _useState3 = useState(parsedControlled),
|
|
173
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
174
|
+
prevControlled = _useState4[0],
|
|
175
|
+
setPrevControlled = _useState4[1];
|
|
176
|
+
if (parsedControlled !== prevControlled) {
|
|
177
|
+
setPrevControlled(parsedControlled);
|
|
178
|
+
if (parsedControlled) setInternal(parsedControlled);
|
|
179
|
+
}
|
|
180
|
+
function pushChange(next) {
|
|
181
|
+
var n = {
|
|
182
|
+
r: Math.round(clamp(next.r, 0, 255)),
|
|
183
|
+
g: Math.round(clamp(next.g, 0, 255)),
|
|
184
|
+
b: Math.round(clamp(next.b, 0, 255)),
|
|
185
|
+
a: next.a === undefined ? 1 : clamp(next.a, 0, 1)
|
|
186
|
+
};
|
|
187
|
+
if (!value) setInternal(n);
|
|
188
|
+
onChange && onChange(rgbaToString(n));
|
|
189
|
+
}
|
|
190
|
+
var sizeMaps = {
|
|
191
|
+
sm: {
|
|
192
|
+
swatch: "w-6 h-6",
|
|
193
|
+
font: "text-sm",
|
|
194
|
+
gap: "gap-2"
|
|
195
|
+
},
|
|
196
|
+
md: {
|
|
197
|
+
swatch: "w-8 h-8",
|
|
198
|
+
font: "text-sm",
|
|
199
|
+
gap: "gap-3"
|
|
200
|
+
},
|
|
201
|
+
lg: {
|
|
202
|
+
swatch: "w-10 h-10",
|
|
203
|
+
font: "text-base",
|
|
204
|
+
gap: "gap-4"
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
// Sizes outside sm/md/lg (the shared `Size` type also lists xs/xl/2xl) fall
|
|
208
|
+
// back to md instead of crashing on an undefined map entry.
|
|
209
|
+
var sizeMap = sizeMaps[size] || sizeMaps.md;
|
|
210
|
+
return jsxs("div", _objectSpread2(_objectSpread2({
|
|
211
|
+
ref: ref,
|
|
212
|
+
className: cn("inline-block", className)
|
|
213
|
+
}, rest), {}, {
|
|
214
|
+
children: [jsx("label", {
|
|
215
|
+
className: "block mb-2 ".concat(sizeMap.font),
|
|
216
|
+
htmlFor: id,
|
|
217
|
+
children: label
|
|
218
|
+
}), jsxs("div", {
|
|
219
|
+
className: "flex ".concat(sizeMap.gap, " items-start flex-col"),
|
|
220
|
+
children: [jsx("div", {
|
|
221
|
+
className: "flex flex-wrap ".concat(sizeMap.gap),
|
|
222
|
+
children: swatches.map(function (s, i) {
|
|
223
|
+
var _parseColor;
|
|
224
|
+
var c = (_parseColor = parseColor(s)) !== null && _parseColor !== void 0 ? _parseColor : {
|
|
225
|
+
r: 0,
|
|
226
|
+
g: 0,
|
|
227
|
+
b: 0,
|
|
228
|
+
a: 1
|
|
229
|
+
};
|
|
230
|
+
return jsx("button", {
|
|
231
|
+
type: "button",
|
|
232
|
+
"aria-label": "Select ".concat(s),
|
|
233
|
+
disabled: disabled,
|
|
234
|
+
onClick: function onClick() {
|
|
235
|
+
return pushChange(c);
|
|
236
|
+
},
|
|
237
|
+
className: "rounded-md border border-gray-200 focus:outline-none focus:ring-2 focus:ring-offset-1 focus:ring-indigo-500 ".concat(sizeMap.swatch, " overflow-hidden"),
|
|
238
|
+
style: {
|
|
239
|
+
background: "rgba(".concat(c.r, ",").concat(c.g, ",").concat(c.b, ",").concat(c.a, ")")
|
|
240
|
+
},
|
|
241
|
+
title: s
|
|
242
|
+
}, i);
|
|
243
|
+
})
|
|
244
|
+
}), jsxs("div", {
|
|
245
|
+
className: "flex-1 min-w-[220px]",
|
|
246
|
+
children: [jsxs("div", {
|
|
247
|
+
className: "flex items-center gap-3",
|
|
248
|
+
children: [jsxs("div", {
|
|
249
|
+
className: "flex items-center gap-2",
|
|
250
|
+
children: [jsx("div", {
|
|
251
|
+
className: "rounded-md border border-gray-200 overflow-hidden w-12 h-12 flex items-center justify-center",
|
|
252
|
+
style: {
|
|
253
|
+
background: "rgba(".concat(internal.r, ", ").concat(internal.g, ", ").concat(internal.b, ", ").concat(internal.a, ")")
|
|
254
|
+
}
|
|
255
|
+
}), jsxs("div", {
|
|
256
|
+
className: "flex flex-col",
|
|
257
|
+
children: [jsx("div", {
|
|
258
|
+
className: "text-xs text-primary-500",
|
|
259
|
+
children: "Current"
|
|
260
|
+
}), jsx("div", {
|
|
261
|
+
className: "font-mono text-sm",
|
|
262
|
+
children: rgbaToHex(internal, showAlpha)
|
|
263
|
+
})]
|
|
264
|
+
})]
|
|
265
|
+
}), jsx("input", {
|
|
266
|
+
type: "color",
|
|
267
|
+
disabled: disabled,
|
|
268
|
+
value: rgbaToHex(internal, false).slice(0, 7),
|
|
269
|
+
onChange: function onChange(e) {
|
|
270
|
+
var parsed = hexToRgba(e.target.value);
|
|
271
|
+
if (parsed) pushChange(_objectSpread2(_objectSpread2({}, parsed), {}, {
|
|
272
|
+
a: internal.a
|
|
273
|
+
}));
|
|
274
|
+
},
|
|
275
|
+
className: "w-10 h-10 p-0 border-none bg-transparent",
|
|
276
|
+
"aria-label": "Native color input"
|
|
277
|
+
}), jsx("div", {
|
|
278
|
+
className: "flex-1",
|
|
279
|
+
children: jsx("input", {
|
|
280
|
+
type: "text",
|
|
281
|
+
disabled: disabled,
|
|
282
|
+
value: showAlpha ? rgbaToString(internal) : rgbaToHex(internal, showAlpha),
|
|
283
|
+
onChange: function onChange(e) {
|
|
284
|
+
var v = e.target.value;
|
|
285
|
+
var p = parseColor(v);
|
|
286
|
+
if (p) pushChange(p);else {
|
|
287
|
+
var maybe = v.startsWith("#") ? v : "#".concat(v);
|
|
288
|
+
var ph = hexToRgba(maybe);
|
|
289
|
+
if (ph) pushChange(_objectSpread2(_objectSpread2({}, ph), {}, {
|
|
290
|
+
a: internal.a
|
|
291
|
+
}));
|
|
292
|
+
}
|
|
293
|
+
},
|
|
294
|
+
className: "w-full rounded-md border border-gray-200 px-2 py-1 font-mono",
|
|
295
|
+
"aria-label": "Color value"
|
|
296
|
+
})
|
|
297
|
+
})]
|
|
298
|
+
}), jsx("div", {
|
|
299
|
+
className: "mt-3 space-y-2",
|
|
300
|
+
children: showAlpha && jsx(Slider, {
|
|
301
|
+
label: "Alpha (".concat(Math.round(((_internal$a = internal.a) !== null && _internal$a !== void 0 ? _internal$a : 1) * 100), "%)"),
|
|
302
|
+
min: 0,
|
|
303
|
+
max: 100,
|
|
304
|
+
value: Math.round(((_internal$a2 = internal.a) !== null && _internal$a2 !== void 0 ? _internal$a2 : 1) * 100),
|
|
305
|
+
onChange: function onChange(v) {
|
|
306
|
+
pushChange(_objectSpread2(_objectSpread2({}, internal), {}, {
|
|
307
|
+
a: clamp(v / 100, 0, 1)
|
|
308
|
+
}));
|
|
309
|
+
},
|
|
310
|
+
disabled: disabled
|
|
311
|
+
})
|
|
312
|
+
})]
|
|
313
|
+
})]
|
|
314
|
+
})]
|
|
315
|
+
}));
|
|
316
|
+
});
|
|
317
|
+
ColorPicker.displayName = "ColorPicker";
|
|
318
|
+
function Slider(_ref4) {
|
|
319
|
+
var label = _ref4.label,
|
|
320
|
+
min = _ref4.min,
|
|
321
|
+
max = _ref4.max,
|
|
322
|
+
value = _ref4.value,
|
|
323
|
+
_onChange = _ref4.onChange,
|
|
324
|
+
disabled = _ref4.disabled;
|
|
325
|
+
return jsxs("div", {
|
|
326
|
+
className: "flex items-center gap-3",
|
|
327
|
+
children: [jsx("div", {
|
|
328
|
+
className: "w-36 text-sm text-primary-600",
|
|
329
|
+
children: label
|
|
330
|
+
}), jsx("input", {
|
|
331
|
+
type: "range",
|
|
332
|
+
min: min,
|
|
333
|
+
max: max,
|
|
334
|
+
value: value,
|
|
335
|
+
disabled: disabled,
|
|
336
|
+
onChange: function onChange(e) {
|
|
337
|
+
return _onChange(Number(e.target.value));
|
|
338
|
+
},
|
|
339
|
+
className: "w-full h-2 rounded-lg appearance-none bg-gray-200",
|
|
340
|
+
"aria-label": label
|
|
341
|
+
}), jsx("div", {
|
|
342
|
+
className: "w-14 text-right font-mono text-sm",
|
|
343
|
+
children: value
|
|
344
|
+
})]
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
export { ColorPicker as default };
|