dash-ui-kit 2.0.0-dev → 2.1.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/dist/react/components/badge/index.cjs.js +8 -3
- package/dist/react/components/badge/index.cjs.js.map +1 -1
- package/dist/react/components/badge/index.d.ts +10 -1
- package/dist/react/components/badge/index.esm.js +8 -3
- package/dist/react/components/badge/index.esm.js.map +1 -1
- package/dist/react/components/button/index.cjs.js +7 -2
- package/dist/react/components/button/index.cjs.js.map +1 -1
- package/dist/react/components/button/index.d.ts +4 -0
- package/dist/react/components/button/index.esm.js +7 -2
- package/dist/react/components/button/index.esm.js.map +1 -1
- package/dist/react/components/copyButton/index.cjs.js +7 -7
- package/dist/react/components/copyButton/index.cjs.js.map +1 -1
- package/dist/react/components/copyButton/index.esm.js +6 -6
- package/dist/react/components/copyButton/index.esm.js.map +1 -1
- package/dist/react/components/heading/index.cjs.js +7 -2
- package/dist/react/components/heading/index.cjs.js.map +1 -1
- package/dist/react/components/heading/index.d.ts +4 -1
- package/dist/react/components/heading/index.esm.js +7 -2
- package/dist/react/components/heading/index.esm.js.map +1 -1
- package/dist/react/components/index.cjs.js +47 -43
- package/dist/react/components/index.cjs.js.map +1 -1
- package/dist/react/components/index.d.ts +2 -0
- package/dist/react/components/index.esm.js +2 -0
- package/dist/react/components/index.esm.js.map +1 -1
- package/dist/react/components/input/index.cjs.js +7 -2
- package/dist/react/components/input/index.cjs.js.map +1 -1
- package/dist/react/components/input/index.d.ts +4 -0
- package/dist/react/components/input/index.esm.js +7 -2
- package/dist/react/components/input/index.esm.js.map +1 -1
- package/dist/react/components/overlayMenu/index.cjs.js +69 -25
- package/dist/react/components/overlayMenu/index.cjs.js.map +1 -1
- package/dist/react/components/overlayMenu/index.d.ts +9 -10
- package/dist/react/components/overlayMenu/index.esm.js +69 -25
- package/dist/react/components/overlayMenu/index.esm.js.map +1 -1
- package/dist/react/components/overlaySelect/index.cjs.js +7 -2
- package/dist/react/components/overlaySelect/index.cjs.js.map +1 -1
- package/dist/react/components/overlaySelect/index.d.ts +4 -0
- package/dist/react/components/overlaySelect/index.esm.js +7 -2
- package/dist/react/components/overlaySelect/index.esm.js.map +1 -1
- package/dist/react/components/popover/index.cjs.js +116 -0
- package/dist/react/components/popover/index.cjs.js.map +1 -0
- package/dist/react/components/popover/index.d.ts +23 -0
- package/dist/react/components/popover/index.esm.js +92 -0
- package/dist/react/components/popover/index.esm.js.map +1 -0
- package/dist/react/components/progressStepBar/index.cjs.js +7 -2
- package/dist/react/components/progressStepBar/index.cjs.js.map +1 -1
- package/dist/react/components/progressStepBar/index.d.ts +5 -2
- package/dist/react/components/progressStepBar/index.esm.js +7 -2
- package/dist/react/components/progressStepBar/index.esm.js.map +1 -1
- package/dist/react/components/select/index.cjs.js +7 -2
- package/dist/react/components/select/index.cjs.js.map +1 -1
- package/dist/react/components/select/index.d.ts +4 -0
- package/dist/react/components/select/index.esm.js +7 -2
- package/dist/react/components/select/index.esm.js.map +1 -1
- package/dist/react/components/text/index.cjs.js +8 -2
- package/dist/react/components/text/index.cjs.js.map +1 -1
- package/dist/react/components/text/index.d.ts +5 -0
- package/dist/react/components/text/index.esm.js +8 -2
- package/dist/react/components/text/index.esm.js.map +1 -1
- package/dist/react/components/textarea/index.cjs.js +9 -5
- package/dist/react/components/textarea/index.cjs.js.map +1 -1
- package/dist/react/components/textarea/index.d.ts +4 -0
- package/dist/react/components/textarea/index.esm.js +9 -5
- package/dist/react/components/textarea/index.esm.js.map +1 -1
- package/dist/react/components/tooltip/index.cjs.js +98 -0
- package/dist/react/components/tooltip/index.cjs.js.map +1 -0
- package/dist/react/components/tooltip/index.d.ts +21 -0
- package/dist/react/components/tooltip/index.esm.js +74 -0
- package/dist/react/components/tooltip/index.esm.js.map +1 -0
- package/dist/react/components/valueCard/index.cjs.js +7 -2
- package/dist/react/components/valueCard/index.cjs.js.map +1 -1
- package/dist/react/components/valueCard/index.d.ts +4 -0
- package/dist/react/components/valueCard/index.esm.js +7 -2
- package/dist/react/components/valueCard/index.esm.js.map +1 -1
- package/dist/react/hooks/index.d.ts +1 -0
- package/dist/react/hooks/useColorScheme.cjs.js +25 -0
- package/dist/react/hooks/useColorScheme.cjs.js.map +1 -0
- package/dist/react/hooks/useColorScheme.d.ts +9 -0
- package/dist/react/hooks/useColorScheme.esm.js +23 -0
- package/dist/react/hooks/useColorScheme.esm.js.map +1 -0
- package/dist/react/index.cjs.js +47 -43
- package/dist/react/index.cjs.js.map +1 -1
- package/dist/react/index.d.ts +2 -0
- package/dist/react/index.esm.js +2 -0
- package/dist/react/index.esm.js.map +1 -1
- package/dist/react-native/components/badge/index.d.ts +12 -0
- package/dist/react-native/components/button/index.d.ts +6 -0
- package/dist/react-native/components/input/index.d.ts +6 -0
- package/dist/react-native/components/valueCard/index.d.ts +4 -0
- package/dist/react-native/index.cjs.js +39 -13
- package/dist/react-native/index.cjs.js.map +1 -1
- package/dist/react-native/index.esm.js +39 -14
- package/dist/react-native/index.esm.js.map +1 -1
- package/dist/react-native/utils/index.d.ts +1 -0
- package/dist/react-native/utils/resolveColorScheme.d.ts +1 -0
- package/dist/styles.css +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../../../src/react/components/popover/index.tsx"],"sourcesContent":["import React from 'react'\nimport * as PopoverPrimitive from '@radix-ui/react-popover'\nimport { cva } from 'class-variance-authority'\nimport { useTheme } from '../../contexts/ThemeContext'\nimport { CrossIcon } from '../icons'\n\nconst popoverContent = cva(\n [\n 'z-50 rounded-md p-4 shadow-lg outline-none',\n 'w-64',\n 'animate-in fade-in-0 zoom-in-95',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n 'data-[side=bottom]:slide-in-from-top-2',\n 'data-[side=left]:slide-in-from-right-2',\n 'data-[side=right]:slide-in-from-left-2',\n 'data-[side=top]:slide-in-from-bottom-2',\n ].join(' '),\n {\n variants: {\n theme: {\n light: 'bg-white border border-gray-200 text-gray-900',\n dark: 'bg-gray-950 border border-gray-800 text-gray-50',\n },\n },\n defaultVariants: {\n theme: 'light',\n },\n }\n)\n\nconst popoverArrow = cva('', {\n variants: {\n theme: {\n light: 'fill-white stroke-gray-200',\n dark: 'fill-gray-950 stroke-gray-800',\n },\n },\n defaultVariants: {\n theme: 'light',\n },\n})\n\nconst closeButton = cva(\n [\n 'absolute top-2 right-2 rounded-sm opacity-70 transition-opacity',\n 'hover:opacity-100 focus:outline-none disabled:pointer-events-none cursor-pointer',\n ].join(' '),\n {\n variants: {\n theme: {\n light: 'text-gray-600 hover:text-gray-900',\n dark: 'text-gray-400 hover:text-gray-100',\n },\n },\n defaultVariants: {\n theme: 'light',\n },\n }\n)\n\nexport interface PopoverProps {\n /** Popover body content */\n content: React.ReactNode\n /** Element that triggers the popover on click */\n children: React.ReactNode\n /** Which side the popover appears on */\n side?: 'top' | 'bottom' | 'left' | 'right'\n /** Offset from the trigger in pixels */\n sideOffset?: number\n /** Whether to show a close button inside the popover */\n showCloseButton?: boolean\n /** Controlled open state */\n open?: boolean\n /** Called when open state changes */\n onOpenChange?: (open: boolean) => void\n /** Default open (uncontrolled) */\n defaultOpen?: boolean\n /** Additional className for the content container */\n className?: string\n}\n\nexport const Popover: React.FC<PopoverProps> = ({\n content,\n children,\n side = 'bottom',\n sideOffset = 8,\n showCloseButton = false,\n open,\n onOpenChange,\n defaultOpen,\n className,\n}) => {\n const { theme } = useTheme()\n\n return (\n <PopoverPrimitive.Root\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n >\n <PopoverPrimitive.Trigger asChild>\n {React.isValidElement(children) ? children : <span>{children}</span>}\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n side={side}\n sideOffset={sideOffset}\n className={`${popoverContent({ theme })} ${className ?? ''}`}\n >\n {showCloseButton && (\n <PopoverPrimitive.Close className={closeButton({ theme })} aria-label='Close'>\n <CrossIcon size={14} />\n </PopoverPrimitive.Close>\n )}\n {content}\n <PopoverPrimitive.Arrow className={popoverArrow({ theme })} />\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n )\n}\n\nexport default Popover\n"],"names":["popoverContent","cva","join","variants","theme","light","dark","defaultVariants","popoverArrow","closeButton","Popover","content","children","side","sideOffset","showCloseButton","open","onOpenChange","defaultOpen","className","useTheme","_jsxs","PopoverPrimitive","Root","_jsx","Trigger","asChild","React","isValidElement","Portal","Content","Close","CrossIcon","size","Arrow"],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface PopoverProps {
|
|
3
|
+
/** Popover body content */
|
|
4
|
+
content: React.ReactNode;
|
|
5
|
+
/** Element that triggers the popover on click */
|
|
6
|
+
children: React.ReactNode;
|
|
7
|
+
/** Which side the popover appears on */
|
|
8
|
+
side?: 'top' | 'bottom' | 'left' | 'right';
|
|
9
|
+
/** Offset from the trigger in pixels */
|
|
10
|
+
sideOffset?: number;
|
|
11
|
+
/** Whether to show a close button inside the popover */
|
|
12
|
+
showCloseButton?: boolean;
|
|
13
|
+
/** Controlled open state */
|
|
14
|
+
open?: boolean;
|
|
15
|
+
/** Called when open state changes */
|
|
16
|
+
onOpenChange?: (open: boolean) => void;
|
|
17
|
+
/** Default open (uncontrolled) */
|
|
18
|
+
defaultOpen?: boolean;
|
|
19
|
+
/** Additional className for the content container */
|
|
20
|
+
className?: string;
|
|
21
|
+
}
|
|
22
|
+
export declare const Popover: React.FC<PopoverProps>;
|
|
23
|
+
export default Popover;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
+
import React from 'react';
|
|
5
|
+
import * as PopoverPrimitive from '@radix-ui/react-popover';
|
|
6
|
+
import { cva } from 'class-variance-authority';
|
|
7
|
+
import { useTheme } from '../../contexts/ThemeContext.esm.js';
|
|
8
|
+
import { CrossIcon } from '../icons/index.esm.js';
|
|
9
|
+
|
|
10
|
+
const popoverContent = cva(['z-50 rounded-md p-4 shadow-lg outline-none', 'w-64', 'animate-in fade-in-0 zoom-in-95', 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95', 'data-[side=bottom]:slide-in-from-top-2', 'data-[side=left]:slide-in-from-right-2', 'data-[side=right]:slide-in-from-left-2', 'data-[side=top]:slide-in-from-bottom-2'].join(' '), {
|
|
11
|
+
variants: {
|
|
12
|
+
theme: {
|
|
13
|
+
light: 'bg-white border border-gray-200 text-gray-900',
|
|
14
|
+
dark: 'bg-gray-950 border border-gray-800 text-gray-50'
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
defaultVariants: {
|
|
18
|
+
theme: 'light'
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
const popoverArrow = cva('', {
|
|
22
|
+
variants: {
|
|
23
|
+
theme: {
|
|
24
|
+
light: 'fill-white stroke-gray-200',
|
|
25
|
+
dark: 'fill-gray-950 stroke-gray-800'
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
defaultVariants: {
|
|
29
|
+
theme: 'light'
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
const closeButton = cva(['absolute top-2 right-2 rounded-sm opacity-70 transition-opacity', 'hover:opacity-100 focus:outline-none disabled:pointer-events-none cursor-pointer'].join(' '), {
|
|
33
|
+
variants: {
|
|
34
|
+
theme: {
|
|
35
|
+
light: 'text-gray-600 hover:text-gray-900',
|
|
36
|
+
dark: 'text-gray-400 hover:text-gray-100'
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
defaultVariants: {
|
|
40
|
+
theme: 'light'
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
const Popover = ({
|
|
44
|
+
content,
|
|
45
|
+
children,
|
|
46
|
+
side = 'bottom',
|
|
47
|
+
sideOffset = 8,
|
|
48
|
+
showCloseButton = false,
|
|
49
|
+
open,
|
|
50
|
+
onOpenChange,
|
|
51
|
+
defaultOpen,
|
|
52
|
+
className
|
|
53
|
+
}) => {
|
|
54
|
+
const {
|
|
55
|
+
theme
|
|
56
|
+
} = useTheme();
|
|
57
|
+
return jsxs(PopoverPrimitive.Root, {
|
|
58
|
+
open: open,
|
|
59
|
+
defaultOpen: defaultOpen,
|
|
60
|
+
onOpenChange: onOpenChange,
|
|
61
|
+
children: [jsx(PopoverPrimitive.Trigger, {
|
|
62
|
+
asChild: true,
|
|
63
|
+
children: /*#__PURE__*/React.isValidElement(children) ? children : jsx("span", {
|
|
64
|
+
children: children
|
|
65
|
+
})
|
|
66
|
+
}), jsx(PopoverPrimitive.Portal, {
|
|
67
|
+
children: jsxs(PopoverPrimitive.Content, {
|
|
68
|
+
side: side,
|
|
69
|
+
sideOffset: sideOffset,
|
|
70
|
+
className: `${popoverContent({
|
|
71
|
+
theme
|
|
72
|
+
})} ${className !== null && className !== void 0 ? className : ''}`,
|
|
73
|
+
children: [showCloseButton && jsx(PopoverPrimitive.Close, {
|
|
74
|
+
className: closeButton({
|
|
75
|
+
theme
|
|
76
|
+
}),
|
|
77
|
+
"aria-label": 'Close',
|
|
78
|
+
children: jsx(CrossIcon, {
|
|
79
|
+
size: 14
|
|
80
|
+
})
|
|
81
|
+
}), content, jsx(PopoverPrimitive.Arrow, {
|
|
82
|
+
className: popoverArrow({
|
|
83
|
+
theme
|
|
84
|
+
})
|
|
85
|
+
})]
|
|
86
|
+
})
|
|
87
|
+
})]
|
|
88
|
+
});
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
export { Popover, Popover as default };
|
|
92
|
+
//# sourceMappingURL=index.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../../../src/react/components/popover/index.tsx"],"sourcesContent":["import React from 'react'\nimport * as PopoverPrimitive from '@radix-ui/react-popover'\nimport { cva } from 'class-variance-authority'\nimport { useTheme } from '../../contexts/ThemeContext'\nimport { CrossIcon } from '../icons'\n\nconst popoverContent = cva(\n [\n 'z-50 rounded-md p-4 shadow-lg outline-none',\n 'w-64',\n 'animate-in fade-in-0 zoom-in-95',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n 'data-[side=bottom]:slide-in-from-top-2',\n 'data-[side=left]:slide-in-from-right-2',\n 'data-[side=right]:slide-in-from-left-2',\n 'data-[side=top]:slide-in-from-bottom-2',\n ].join(' '),\n {\n variants: {\n theme: {\n light: 'bg-white border border-gray-200 text-gray-900',\n dark: 'bg-gray-950 border border-gray-800 text-gray-50',\n },\n },\n defaultVariants: {\n theme: 'light',\n },\n }\n)\n\nconst popoverArrow = cva('', {\n variants: {\n theme: {\n light: 'fill-white stroke-gray-200',\n dark: 'fill-gray-950 stroke-gray-800',\n },\n },\n defaultVariants: {\n theme: 'light',\n },\n})\n\nconst closeButton = cva(\n [\n 'absolute top-2 right-2 rounded-sm opacity-70 transition-opacity',\n 'hover:opacity-100 focus:outline-none disabled:pointer-events-none cursor-pointer',\n ].join(' '),\n {\n variants: {\n theme: {\n light: 'text-gray-600 hover:text-gray-900',\n dark: 'text-gray-400 hover:text-gray-100',\n },\n },\n defaultVariants: {\n theme: 'light',\n },\n }\n)\n\nexport interface PopoverProps {\n /** Popover body content */\n content: React.ReactNode\n /** Element that triggers the popover on click */\n children: React.ReactNode\n /** Which side the popover appears on */\n side?: 'top' | 'bottom' | 'left' | 'right'\n /** Offset from the trigger in pixels */\n sideOffset?: number\n /** Whether to show a close button inside the popover */\n showCloseButton?: boolean\n /** Controlled open state */\n open?: boolean\n /** Called when open state changes */\n onOpenChange?: (open: boolean) => void\n /** Default open (uncontrolled) */\n defaultOpen?: boolean\n /** Additional className for the content container */\n className?: string\n}\n\nexport const Popover: React.FC<PopoverProps> = ({\n content,\n children,\n side = 'bottom',\n sideOffset = 8,\n showCloseButton = false,\n open,\n onOpenChange,\n defaultOpen,\n className,\n}) => {\n const { theme } = useTheme()\n\n return (\n <PopoverPrimitive.Root\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n >\n <PopoverPrimitive.Trigger asChild>\n {React.isValidElement(children) ? children : <span>{children}</span>}\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n side={side}\n sideOffset={sideOffset}\n className={`${popoverContent({ theme })} ${className ?? ''}`}\n >\n {showCloseButton && (\n <PopoverPrimitive.Close className={closeButton({ theme })} aria-label='Close'>\n <CrossIcon size={14} />\n </PopoverPrimitive.Close>\n )}\n {content}\n <PopoverPrimitive.Arrow className={popoverArrow({ theme })} />\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n )\n}\n\nexport default Popover\n"],"names":["popoverContent","cva","join","variants","theme","light","dark","defaultVariants","popoverArrow","closeButton","Popover","content","children","side","sideOffset","showCloseButton","open","onOpenChange","defaultOpen","className","useTheme","_jsxs","PopoverPrimitive","Root","_jsx","Trigger","asChild","React","isValidElement","Portal","Content","Close","CrossIcon","size","Arrow"],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
var ThemeContext = require('../../contexts/ThemeContext.cjs.js');
|
|
7
|
+
var useColorScheme = require('../../hooks/useColorScheme.cjs.js');
|
|
7
8
|
|
|
8
9
|
const colorConfig = {
|
|
9
10
|
blue: {
|
|
@@ -29,12 +30,16 @@ function ProgressStepBar({
|
|
|
29
30
|
currentStep,
|
|
30
31
|
totalSteps,
|
|
31
32
|
className = '',
|
|
32
|
-
color
|
|
33
|
+
color,
|
|
34
|
+
colorLight,
|
|
35
|
+
colorDark
|
|
33
36
|
}) {
|
|
37
|
+
var _a;
|
|
34
38
|
const {
|
|
35
39
|
theme
|
|
36
40
|
} = ThemeContext.useTheme();
|
|
37
|
-
const
|
|
41
|
+
const effectiveColor = (_a = useColorScheme.useColorScheme(color, colorLight, colorDark)) !== null && _a !== void 0 ? _a : 'blue';
|
|
42
|
+
const colors = colorConfig[effectiveColor];
|
|
38
43
|
return jsxRuntime.jsx("div", {
|
|
39
44
|
className: `flex gap-2 w-full ${className}`,
|
|
40
45
|
children: Array.from({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../../../src/react/components/progressStepBar/index.tsx"],"sourcesContent":["import React from 'react'\nimport { useTheme } from '../../contexts/ThemeContext'\n\ninterface ProgressStepBarProps {\n currentStep: number\n totalSteps: number\n className?: string\n color?:
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../../../src/react/components/progressStepBar/index.tsx"],"sourcesContent":["import React from 'react'\nimport { useTheme } from '../../contexts/ThemeContext'\nimport { useColorScheme } from '../../hooks/useColorScheme'\n\ntype ProgressColor = 'blue' | 'red' | 'orange'\n\ninterface ProgressStepBarProps {\n currentStep: number\n totalSteps: number\n className?: string\n color?: ProgressColor\n colorLight?: ProgressColor\n colorDark?: ProgressColor\n}\n\nconst colorConfig = {\n blue: {\n active: 'bg-[var(--color-dash-brand)]',\n activeDark: 'bg-[var(--color-dash-brand-dim)]',\n inactive: 'bg-[rgba(76,126,255,0.16)]',\n inactiveDark: 'bg-gray-700',\n },\n red: {\n active: 'bg-[var(--color-dash-red)]',\n activeDark: 'bg-[var(--color-dash-red-75)]',\n inactive: 'bg-[var(--color-dash-red-15)]',\n inactiveDark: 'bg-gray-700',\n },\n orange: {\n active: 'bg-[var(--color-dash-orange)]',\n activeDark: 'bg-[var(--color-dash-orange-75)]',\n inactive: 'bg-[var(--color-dash-orange-15)]',\n inactiveDark: 'bg-gray-700',\n },\n}\n\nexport function ProgressStepBar({ \n currentStep, \n totalSteps, \n className = '',\n color,\n colorLight,\n colorDark\n}: ProgressStepBarProps): React.JSX.Element {\n const { theme } = useTheme()\n const effectiveColor = useColorScheme(color, colorLight, colorDark) ?? 'blue'\n const colors = colorConfig[effectiveColor]\n \n return (\n <div className={`flex gap-2 w-full ${className}`}>\n {Array.from({ length: totalSteps }, (_, index) => (\n <div\n key={index}\n className={`h-1.5 rounded-2xl flex-1 transition-colors ${\n index < currentStep \n ? theme === 'dark' \n ? colors.activeDark \n : colors.active\n : theme === 'dark' \n ? colors.inactiveDark \n : colors.inactive\n }`}\n />\n ))}\n </div>\n )\n}\n\nexport type { ProgressStepBarProps } "],"names":["colorConfig","blue","active","activeDark","inactive","inactiveDark","red","orange","ProgressStepBar","currentStep","totalSteps","className","color","colorLight","colorDark","theme","useTheme","effectiveColor","_a","useColorScheme","colors","_jsx","children","Array","from","length","_","index"],"mappings":";;;;;;;;AAeA,MAAMA,WAAW,GAAG;AAClBC,EAAAA,IAAI,EAAE;AACJC,IAAAA,MAAM,EAAE,8BAA8B;AACtCC,IAAAA,UAAU,EAAE,kCAAkC;AAC9CC,IAAAA,QAAQ,EAAE,4BAA4B;AACtCC,IAAAA,YAAY,EAAE;GACf;AACDC,EAAAA,GAAG,EAAE;AACHJ,IAAAA,MAAM,EAAE,4BAA4B;AACpCC,IAAAA,UAAU,EAAE,+BAA+B;AAC3CC,IAAAA,QAAQ,EAAE,+BAA+B;AACzCC,IAAAA,YAAY,EAAE;GACf;AACDE,EAAAA,MAAM,EAAE;AACNL,IAAAA,MAAM,EAAE,+BAA+B;AACvCC,IAAAA,UAAU,EAAE,kCAAkC;AAC9CC,IAAAA,QAAQ,EAAE,kCAAkC;AAC5CC,IAAAA,YAAY,EAAE;AACf;CACF;SAEeG,eAAeA,CAAC;EAC9BC,WAAW;EACXC,UAAU;AACVC,EAAAA,SAAS,GAAG,EAAE;EACdC,KAAK;EACLC,UAAU;AACVC,EAAAA;AACqB,CAAA,EAAA;;EACrB,MAAM;AAAEC,IAAAA;GAAO,GAAGC,qBAAQ,EAAE;EAC5B,MAAMC,cAAc,GAAG,CAAAC,EAAA,GAAAC,6BAAc,CAACP,KAAK,EAAEC,UAAU,EAAEC,SAAS,CAAC,MAAA,IAAA,IAAAI,EAAA,KAAA,MAAA,GAAAA,EAAA,GAAI,MAAM;AAC7E,EAAA,MAAME,MAAM,GAAGpB,WAAW,CAACiB,cAAc,CAAC;EAE1C,OACEI,cAAA,CAAA,KAAA,EAAA;IAAKV,SAAS,EAAE,CAAqBA,kBAAAA,EAAAA,SAAS,CAAE,CAAA;AAC7CW,IAAAA,QAAA,EAAAC,KAAK,CAACC,IAAI,CAAC;AAAEC,MAAAA,MAAM,EAAEf;KAAY,EAAE,CAACgB,CAAC,EAAEC,KAAK,KAC3CN,cAAA,CAAA,KAAA,EAAA;AAEEV,MAAAA,SAAS,EAAE,CAAA,2CAAA,EACTgB,KAAK,GAAGlB,WAAW,GACfM,KAAK,KAAK,MAAM,GACdK,MAAM,CAACjB,UAAU,GACjBiB,MAAM,CAAClB,MAAM,GACfa,KAAK,KAAK,MAAM,GACdK,MAAM,CAACf,YAAY,GACnBe,MAAM,CAAChB,QACf,CAAA;KAAE,EATGuB,KAAK,CAWb;AACG,GAAA,CAAA;AAEV;;;;"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
type ProgressColor = 'blue' | 'red' | 'orange';
|
|
2
3
|
interface ProgressStepBarProps {
|
|
3
4
|
currentStep: number;
|
|
4
5
|
totalSteps: number;
|
|
5
6
|
className?: string;
|
|
6
|
-
color?:
|
|
7
|
+
color?: ProgressColor;
|
|
8
|
+
colorLight?: ProgressColor;
|
|
9
|
+
colorDark?: ProgressColor;
|
|
7
10
|
}
|
|
8
|
-
export declare function ProgressStepBar({ currentStep, totalSteps, className, color }: ProgressStepBarProps): React.JSX.Element;
|
|
11
|
+
export declare function ProgressStepBar({ currentStep, totalSteps, className, color, colorLight, colorDark }: ProgressStepBarProps): React.JSX.Element;
|
|
9
12
|
export type { ProgressStepBarProps };
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { jsx } from 'react/jsx-runtime';
|
|
4
4
|
import { useTheme } from '../../contexts/ThemeContext.esm.js';
|
|
5
|
+
import { useColorScheme } from '../../hooks/useColorScheme.esm.js';
|
|
5
6
|
|
|
6
7
|
const colorConfig = {
|
|
7
8
|
blue: {
|
|
@@ -27,12 +28,16 @@ function ProgressStepBar({
|
|
|
27
28
|
currentStep,
|
|
28
29
|
totalSteps,
|
|
29
30
|
className = '',
|
|
30
|
-
color
|
|
31
|
+
color,
|
|
32
|
+
colorLight,
|
|
33
|
+
colorDark
|
|
31
34
|
}) {
|
|
35
|
+
var _a;
|
|
32
36
|
const {
|
|
33
37
|
theme
|
|
34
38
|
} = useTheme();
|
|
35
|
-
const
|
|
39
|
+
const effectiveColor = (_a = useColorScheme(color, colorLight, colorDark)) !== null && _a !== void 0 ? _a : 'blue';
|
|
40
|
+
const colors = colorConfig[effectiveColor];
|
|
36
41
|
return jsx("div", {
|
|
37
42
|
className: `flex gap-2 w-full ${className}`,
|
|
38
43
|
children: Array.from({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../../../../src/react/components/progressStepBar/index.tsx"],"sourcesContent":["import React from 'react'\nimport { useTheme } from '../../contexts/ThemeContext'\n\ninterface ProgressStepBarProps {\n currentStep: number\n totalSteps: number\n className?: string\n color?:
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../../../src/react/components/progressStepBar/index.tsx"],"sourcesContent":["import React from 'react'\nimport { useTheme } from '../../contexts/ThemeContext'\nimport { useColorScheme } from '../../hooks/useColorScheme'\n\ntype ProgressColor = 'blue' | 'red' | 'orange'\n\ninterface ProgressStepBarProps {\n currentStep: number\n totalSteps: number\n className?: string\n color?: ProgressColor\n colorLight?: ProgressColor\n colorDark?: ProgressColor\n}\n\nconst colorConfig = {\n blue: {\n active: 'bg-[var(--color-dash-brand)]',\n activeDark: 'bg-[var(--color-dash-brand-dim)]',\n inactive: 'bg-[rgba(76,126,255,0.16)]',\n inactiveDark: 'bg-gray-700',\n },\n red: {\n active: 'bg-[var(--color-dash-red)]',\n activeDark: 'bg-[var(--color-dash-red-75)]',\n inactive: 'bg-[var(--color-dash-red-15)]',\n inactiveDark: 'bg-gray-700',\n },\n orange: {\n active: 'bg-[var(--color-dash-orange)]',\n activeDark: 'bg-[var(--color-dash-orange-75)]',\n inactive: 'bg-[var(--color-dash-orange-15)]',\n inactiveDark: 'bg-gray-700',\n },\n}\n\nexport function ProgressStepBar({ \n currentStep, \n totalSteps, \n className = '',\n color,\n colorLight,\n colorDark\n}: ProgressStepBarProps): React.JSX.Element {\n const { theme } = useTheme()\n const effectiveColor = useColorScheme(color, colorLight, colorDark) ?? 'blue'\n const colors = colorConfig[effectiveColor]\n \n return (\n <div className={`flex gap-2 w-full ${className}`}>\n {Array.from({ length: totalSteps }, (_, index) => (\n <div\n key={index}\n className={`h-1.5 rounded-2xl flex-1 transition-colors ${\n index < currentStep \n ? theme === 'dark' \n ? colors.activeDark \n : colors.active\n : theme === 'dark' \n ? colors.inactiveDark \n : colors.inactive\n }`}\n />\n ))}\n </div>\n )\n}\n\nexport type { ProgressStepBarProps } "],"names":["colorConfig","blue","active","activeDark","inactive","inactiveDark","red","orange","ProgressStepBar","currentStep","totalSteps","className","color","colorLight","colorDark","theme","useTheme","effectiveColor","_a","useColorScheme","colors","_jsx","children","Array","from","length","_","index"],"mappings":";;;;;;AAeA,MAAMA,WAAW,GAAG;AAClBC,EAAAA,IAAI,EAAE;AACJC,IAAAA,MAAM,EAAE,8BAA8B;AACtCC,IAAAA,UAAU,EAAE,kCAAkC;AAC9CC,IAAAA,QAAQ,EAAE,4BAA4B;AACtCC,IAAAA,YAAY,EAAE;GACf;AACDC,EAAAA,GAAG,EAAE;AACHJ,IAAAA,MAAM,EAAE,4BAA4B;AACpCC,IAAAA,UAAU,EAAE,+BAA+B;AAC3CC,IAAAA,QAAQ,EAAE,+BAA+B;AACzCC,IAAAA,YAAY,EAAE;GACf;AACDE,EAAAA,MAAM,EAAE;AACNL,IAAAA,MAAM,EAAE,+BAA+B;AACvCC,IAAAA,UAAU,EAAE,kCAAkC;AAC9CC,IAAAA,QAAQ,EAAE,kCAAkC;AAC5CC,IAAAA,YAAY,EAAE;AACf;CACF;SAEeG,eAAeA,CAAC;EAC9BC,WAAW;EACXC,UAAU;AACVC,EAAAA,SAAS,GAAG,EAAE;EACdC,KAAK;EACLC,UAAU;AACVC,EAAAA;AACqB,CAAA,EAAA;;EACrB,MAAM;AAAEC,IAAAA;GAAO,GAAGC,QAAQ,EAAE;EAC5B,MAAMC,cAAc,GAAG,CAAAC,EAAA,GAAAC,cAAc,CAACP,KAAK,EAAEC,UAAU,EAAEC,SAAS,CAAC,MAAA,IAAA,IAAAI,EAAA,KAAA,MAAA,GAAAA,EAAA,GAAI,MAAM;AAC7E,EAAA,MAAME,MAAM,GAAGpB,WAAW,CAACiB,cAAc,CAAC;EAE1C,OACEI,GAAA,CAAA,KAAA,EAAA;IAAKV,SAAS,EAAE,CAAqBA,kBAAAA,EAAAA,SAAS,CAAE,CAAA;AAC7CW,IAAAA,QAAA,EAAAC,KAAK,CAACC,IAAI,CAAC;AAAEC,MAAAA,MAAM,EAAEf;KAAY,EAAE,CAACgB,CAAC,EAAEC,KAAK,KAC3CN,GAAA,CAAA,KAAA,EAAA;AAEEV,MAAAA,SAAS,EAAE,CAAA,2CAAA,EACTgB,KAAK,GAAGlB,WAAW,GACfM,KAAK,KAAK,MAAM,GACdK,MAAM,CAACjB,UAAU,GACjBiB,MAAM,CAAClB,MAAM,GACfa,KAAK,KAAK,MAAM,GACdK,MAAM,CAACf,YAAY,GACnBe,MAAM,CAAChB,QACf,CAAA;KAAE,EATGuB,KAAK,CAWb;AACG,GAAA,CAAA;AAEV;;;;"}
|
|
@@ -9,6 +9,7 @@ var jsxRuntime = require('react/jsx-runtime');
|
|
|
9
9
|
var classVarianceAuthority = require('class-variance-authority');
|
|
10
10
|
var ThemeContext = require('../../contexts/ThemeContext.cjs.js');
|
|
11
11
|
var RadixSelect = require('@radix-ui/react-select');
|
|
12
|
+
var useColorScheme = require('../../hooks/useColorScheme.cjs.js');
|
|
12
13
|
|
|
13
14
|
function _interopNamespaceDefault(e) {
|
|
14
15
|
var n = Object.create(null);
|
|
@@ -146,9 +147,12 @@ const ChevronDownIcon = ({
|
|
|
146
147
|
* />
|
|
147
148
|
*/
|
|
148
149
|
const Select = _a => {
|
|
150
|
+
var _b;
|
|
149
151
|
var {
|
|
150
152
|
className = '',
|
|
151
153
|
colorScheme,
|
|
154
|
+
colorSchemeLight,
|
|
155
|
+
colorSchemeDark,
|
|
152
156
|
size,
|
|
153
157
|
error = false,
|
|
154
158
|
success = false,
|
|
@@ -162,12 +166,13 @@ const Select = _a => {
|
|
|
162
166
|
placeholder = 'Select an option...',
|
|
163
167
|
name
|
|
164
168
|
} = _a;
|
|
165
|
-
tslib.__rest(_a, ["className", "colorScheme", "size", "error", "success", "border", "disabled", "options", "showArrow", "value", "defaultValue", "onChange", "placeholder", "name"]);
|
|
169
|
+
tslib.__rest(_a, ["className", "colorScheme", "colorSchemeLight", "colorSchemeDark", "size", "error", "success", "border", "disabled", "options", "showArrow", "value", "defaultValue", "onChange", "placeholder", "name"]);
|
|
166
170
|
const {
|
|
167
171
|
theme
|
|
168
172
|
} = ThemeContext.useTheme();
|
|
173
|
+
const effectiveColorScheme = (_b = useColorScheme.useColorScheme(colorScheme, colorSchemeLight, colorSchemeDark)) !== null && _b !== void 0 ? _b : 'default';
|
|
169
174
|
// Determine color scheme based on state
|
|
170
|
-
let finalColorScheme =
|
|
175
|
+
let finalColorScheme = effectiveColorScheme;
|
|
171
176
|
if (error) finalColorScheme = 'error';else if (success) finalColorScheme = 'success';
|
|
172
177
|
const triggerClasses = selectTrigger({
|
|
173
178
|
theme,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../../../src/react/components/select/index.tsx"],"sourcesContent":["import React from 'react'\nimport { cva, VariantProps } from 'class-variance-authority'\nimport { useTheme } from '../../contexts/ThemeContext'\nimport * as RadixSelect from '@radix-ui/react-select'\n\nconst selectTrigger = cva(\n 'w-full transition-all font-inter appearance-none cursor-pointer relative text-[0.875rem] leading-[1.0625rem] focus:ring-2 inline-flex items-center justify-between',\n {\n variants: {\n theme: {\n light: 'text-[#0C1C33] bg-white',\n dark: 'text-white bg-gray-800'\n },\n colorScheme: {\n default: 'focus:ring-blue-500/20',\n brand: 'focus:ring-dash-brand/20',\n error: 'focus:ring-red-500/20',\n success: 'focus:ring-green-500/20'\n },\n size: {\n sm: 'dash-block-sm',\n md: 'dash-block-md',\n xl: 'dash-block-xl'\n },\n border: {\n true: 'outline outline-1 outline-offset-[-1px]',\n false: ''\n },\n disabled: {\n false: '',\n true: 'opacity-60 cursor-not-allowed'\n }\n },\n compoundVariants: [\n // Outline colors by colorScheme - only when border is true\n {\n colorScheme: 'default',\n border: true,\n class: 'outline-[rgba(12,28,51,0.35)] focus:outline-[rgba(12,28,51,0.6)]'\n },\n {\n colorScheme: 'brand',\n border: true,\n class: 'outline-dash-brand/30 focus:outline-dash-brand'\n },\n {\n colorScheme: 'error',\n border: true,\n class: 'outline-red-500 focus:outline-red-500'\n },\n {\n colorScheme: 'success',\n border: true,\n class: 'outline-green-500 focus:outline-green-500'\n }\n ],\n defaultVariants: {\n theme: 'light',\n colorScheme: 'default',\n size: 'xl',\n border: true,\n disabled: false\n }\n }\n)\n\nconst selectContent = cva(\n 'overflow-hidden z-50 rounded-md shadow-lg min-w-[var(--radix-select-trigger-width)] w-full max-h-[var(--radix-select-content-available-height)]',\n {\n variants: {\n theme: {\n light: 'bg-white border border-gray-200',\n dark: 'bg-gray-800 border border-gray-700'\n }\n }\n }\n)\n\nconst selectViewport = cva(\n 'overflow-y-auto max-h-[inherit]'\n)\n\nconst selectItem = cva(\n 'relative flex cursor-pointer select-none items-center outline-none focus:bg-gray-100 data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n {\n variants: {\n theme: {\n light: 'text-gray-900 focus:bg-gray-100',\n dark: 'text-gray-100 focus:bg-gray-700'\n },\n size: {\n sm: 'dash-block-sm',\n md: 'dash-block-md',\n xl: 'dash-block-xl'\n }\n }\n }\n)\n\nconst selectIcon = cva(\n 'pointer-events-none flex items-center justify-center transition-transform',\n {\n variants: {\n size: {\n sm: 'w-3 h-3',\n md: 'w-4 h-4',\n xl: 'w-4 h-4'\n }\n }\n }\n)\n\ntype SelectVariants = VariantProps<typeof selectTrigger>\n\nexport interface SelectOption {\n value: string\n label: string\n disabled?: boolean\n content?: React.ReactNode\n}\n\nexport interface SelectProps extends Omit<SelectVariants, 'theme' | 'disabled'> {\n className?: string\n error?: boolean\n success?: boolean\n border?: boolean\n options?: SelectOption[]\n showArrow?: boolean\n value?: string\n defaultValue?: string\n onChange?: (value: string) => void\n placeholder?: string\n disabled?: boolean\n name?: string\n}\n\n // Arrow icon\nconst ChevronDownIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"m4.93179 5.43179c0.20081-0.20081 0.52632-0.20081 0.72713 0l2.34108 2.34108 2.34108-2.34108c0.20081-0.20081 0.52632-0.20081 0.72713 0s0.20081 0.52632 0 0.72713l-2.70455 2.70455c-0.20081 0.20081-0.52632 0.20081-0.72713 0l-2.70455-2.70455c-0.20081-0.20081-0.20081-0.52632 0-0.72713z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n)\n\n/**\n * A versatile select component built on Radix UI that adapts to light/dark theme,\n * supports various color schemes, sizes, variants, states, and HTML content in options.\n *\n * @example\n * <Select\n * options={[\n * {value: 'id1', label: 'Option 1'}, \n * {value: 'id2', label: 'Option 2', content: <div><strong>Option 2</strong><br/>Description</div>}\n * ]}\n * colorScheme=\"default\"\n * size=\"xl\"\n * border={true}\n * />\n */\nexport const Select: React.FC<SelectProps> = ({\n className = '',\n colorScheme,\n size,\n error = false,\n success = false,\n border = true,\n disabled = false,\n options = [],\n showArrow = true,\n value,\n defaultValue,\n onChange,\n placeholder = 'Select an option...',\n name,\n ...props\n}) => {\n const { theme } = useTheme()\n\n // Determine color scheme based on state\n let finalColorScheme = colorScheme\n if (error) finalColorScheme = 'error'\n else if (success) finalColorScheme = 'success'\n\n const triggerClasses = selectTrigger({\n theme,\n colorScheme: finalColorScheme,\n size,\n border,\n disabled\n }) + ' ' + className\n\n const contentClasses = selectContent({ theme })\n const viewportClasses = selectViewport({})\n const itemClasses = selectItem({ theme, size })\n const iconClasses = selectIcon({ size })\n\n return (\n <RadixSelect.Root\n value={value}\n defaultValue={defaultValue}\n onValueChange={onChange}\n disabled={disabled}\n name={name}\n >\n <RadixSelect.Trigger className={triggerClasses}>\n <div className='w-full flex-1 text-left'>\n <RadixSelect.Value placeholder={placeholder} />\n </div>\n {showArrow && (\n <RadixSelect.Icon asChild>\n <ChevronDownIcon className={iconClasses} />\n </RadixSelect.Icon>\n )}\n </RadixSelect.Trigger>\n\n <RadixSelect.Portal>\n <RadixSelect.Content className={contentClasses} position='popper' sideOffset={5}>\n <RadixSelect.Viewport className={viewportClasses}>\n {options.map((option) => (\n <RadixSelect.Item\n key={option.value}\n value={option.value}\n className={itemClasses}\n disabled={option.disabled}\n >\n <div className='w-full flex-1 text-left'>\n <RadixSelect.ItemText className='w-full'>\n {option.content || option.label}\n </RadixSelect.ItemText>\n </div>\n </RadixSelect.Item>\n ))}\n </RadixSelect.Viewport>\n </RadixSelect.Content>\n </RadixSelect.Portal>\n </RadixSelect.Root>\n )\n}\n\nexport default Select\n"],"names":["selectTrigger","cva","variants","theme","light","dark","colorScheme","default","brand","error","success","size","sm","md","xl","border","true","false","disabled","compoundVariants","class","defaultVariants","selectContent","selectViewport","selectItem","selectIcon","ChevronDownIcon","className","_jsx","width","height","viewBox","fill","xmlns","d","fillRule","clipRule","Select","_a","options","showArrow","value","defaultValue","onChange","placeholder","name","props","__rest","useTheme","finalColorScheme","triggerClasses","contentClasses","viewportClasses","itemClasses","iconClasses","_jsxs","RadixSelect","Root","onValueChange","children","Trigger","Value","Icon","asChild","Portal","Content","position","sideOffset","Viewport","map","option","Item","ItemText","content","label"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,MAAMA,aAAa,GAAGC,0BAAG,CACvB,oKAAoK,EACpK;AACEC,EAAAA,QAAQ,EAAE;AACRC,IAAAA,KAAK,EAAE;AACLC,MAAAA,KAAK,EAAE,yBAAyB;AAChCC,MAAAA,IAAI,EAAE;KACP;AACDC,IAAAA,WAAW,EAAE;AACXC,MAAAA,OAAO,EAAE,wBAAwB;AACjCC,MAAAA,KAAK,EAAE,0BAA0B;AACjCC,MAAAA,KAAK,EAAE,uBAAuB;AAC9BC,MAAAA,OAAO,EAAE;KACV;AACDC,IAAAA,IAAI,EAAE;AACJC,MAAAA,EAAE,EAAE,eAAe;AACnBC,MAAAA,EAAE,EAAE,eAAe;AACnBC,MAAAA,EAAE,EAAE;KACL;AACDC,IAAAA,MAAM,EAAE;AACNC,MAAAA,IAAI,EAAE,yCAAyC;AAC/CC,MAAAA,KAAK,EAAE;KACR;AACDC,IAAAA,QAAQ,EAAE;AACRD,MAAAA,KAAK,EAAE,EAAE;AACTD,MAAAA,IAAI,EAAE;AACP;GACF;AACDG,EAAAA,gBAAgB,EAAE;AAChB;AACA,EAAA;AACEb,IAAAA,WAAW,EAAE,SAAS;AACtBS,IAAAA,MAAM,EAAE,IAAI;AACZK,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEd,IAAAA,WAAW,EAAE,OAAO;AACpBS,IAAAA,MAAM,EAAE,IAAI;AACZK,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEd,IAAAA,WAAW,EAAE,OAAO;AACpBS,IAAAA,MAAM,EAAE,IAAI;AACZK,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEd,IAAAA,WAAW,EAAE,SAAS;AACtBS,IAAAA,MAAM,EAAE,IAAI;AACZK,IAAAA,KAAK,EAAE;AACR,GAAA,CACF;AACDC,EAAAA,eAAe,EAAE;AACflB,IAAAA,KAAK,EAAE,OAAO;AACdG,IAAAA,WAAW,EAAE,SAAS;AACtBK,IAAAA,IAAI,EAAE,IAAI;AACVI,IAAAA,MAAM,EAAE,IAAI;AACZG,IAAAA,QAAQ,EAAE;AACX;AACF,CAAA,CACF;AAED,MAAMI,aAAa,GAAGrB,0BAAG,CACvB,iJAAiJ,EACjJ;AACEC,EAAAA,QAAQ,EAAE;AACRC,IAAAA,KAAK,EAAE;AACLC,MAAAA,KAAK,EAAE,iCAAiC;AACxCC,MAAAA,IAAI,EAAE;AACP;AACF;AACF,CAAA,CACF;AAED,MAAMkB,cAAc,GAAGtB,0BAAG,CACxB,iCAAiC,CAClC;AAED,MAAMuB,UAAU,GAAGvB,0BAAG,CACpB,qJAAqJ,EACrJ;AACEC,EAAAA,QAAQ,EAAE;AACRC,IAAAA,KAAK,EAAE;AACLC,MAAAA,KAAK,EAAE,iCAAiC;AACxCC,MAAAA,IAAI,EAAE;KACP;AACDM,IAAAA,IAAI,EAAE;AACJC,MAAAA,EAAE,EAAE,eAAe;AACnBC,MAAAA,EAAE,EAAE,eAAe;AACnBC,MAAAA,EAAE,EAAE;AACL;AACF;AACF,CAAA,CACF;AAED,MAAMW,UAAU,GAAGxB,0BAAG,CACpB,2EAA2E,EAC3E;AACEC,EAAAA,QAAQ,EAAE;AACRS,IAAAA,IAAI,EAAE;AACJC,MAAAA,EAAE,EAAE,SAAS;AACbC,MAAAA,EAAE,EAAE,SAAS;AACbC,MAAAA,EAAE,EAAE;AACL;AACF;AACF,CAAA,CACF;AA0BC;AACF,MAAMY,eAAe,GAAqCA,CAAC;AAAEC,EAAAA;CAAW,KACtEC,cACE,CAAA,KAAA,EAAA;AAAAC,EAAAA,KAAK,EAAC,IAAI;AACVC,EAAAA,MAAM,EAAC,IAAI;AACXC,EAAAA,OAAO,EAAC,WAAW;AACnBC,EAAAA,IAAI,EAAC,MAAM;AACXC,EAAAA,KAAK,EAAC,4BAA4B;AAClCN,EAAAA,SAAS,EAAEA,SAAS;YAEpBC,cACE,CAAA,MAAA,EAAA;AAAAM,IAAAA,CAAC,EAAC,yRAAyR;AAC3RF,IAAAA,IAAI,EAAC,cAAc;AACnBG,IAAAA,QAAQ,EAAC,SAAS;AAClBC,IAAAA,QAAQ,EAAC;GAAS;AAEhB,CAAA,CACP;AAED;;;;;;;;;;;;;;AAcG;AACUC,MAAAA,MAAM,GAA2BC,EAgB7C,IAAI;EAhByC,IAAA;AAC5CX,MAAAA,SAAS,GAAG,EAAE;MACdrB,WAAW;MACXK,IAAI;AACJF,MAAAA,KAAK,GAAG,KAAK;AACbC,MAAAA,OAAO,GAAG,KAAK;AACfK,MAAAA,MAAM,GAAG,IAAI;AACbG,MAAAA,QAAQ,GAAG,KAAK;AAChBqB,MAAAA,OAAO,GAAG,EAAE;AACZC,MAAAA,SAAS,GAAG,IAAI;MAChBC,KAAK;MACLC,YAAY;MACZC,QAAQ;AACRC,MAAAA,WAAW,GAAG,qBAAqB;AACnCC,MAAAA;UAED;AADIC,IAfyCC,YAAA,CAAAT,EAAA,EAAA,CAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,cAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,CAgB7C;EACC,MAAM;AAAEnC,IAAAA;GAAO,GAAG6C,qBAAQ,EAAE;AAE5B;EACA,IAAIC,gBAAgB,GAAG3C,WAAW;AAClC,EAAA,IAAIG,KAAK,EAAEwC,gBAAgB,GAAG,OAAO,CAAA,KAChC,IAAIvC,OAAO,EAAEuC,gBAAgB,GAAG,SAAS;EAE9C,MAAMC,cAAc,GAAGlD,aAAa,CAAC;IACnCG,KAAK;AACLG,IAAAA,WAAW,EAAE2C,gBAAgB;IAC7BtC,IAAI;IACJI,MAAM;AACNG,IAAAA;AACD,GAAA,CAAC,GAAG,GAAG,GAAGS,SAAS;EAEpB,MAAMwB,cAAc,GAAG7B,aAAa,CAAC;AAAEnB,IAAAA;AAAK,GAAE,CAAC;AAC/C,EAAA,MAAMiD,eAAe,GAAG7B,cAAc,CAAC,EAAE,CAAC;EAC1C,MAAM8B,WAAW,GAAG7B,UAAU,CAAC;IAAErB,KAAK;AAAEQ,IAAAA;AAAM,GAAA,CAAC;EAC/C,MAAM2C,WAAW,GAAG7B,UAAU,CAAC;AAAEd,IAAAA;AAAI,GAAE,CAAC;AAExC,EAAA,OACE4C,eAAC,CAAAC,sBAAW,CAACC,IAAI;AACfhB,IAAAA,KAAK,EAAEA,KAAK;AACZC,IAAAA,YAAY,EAAEA,YAAY;AAC1BgB,IAAAA,aAAa,EAAEf,QAAQ;AACvBzB,IAAAA,QAAQ,EAAEA,QAAQ;AAClB2B,IAAAA,IAAI,EAAEA,IAAI;AAEVc,IAAAA,QAAA,EAAA,CAAAJ,eAAA,CAACC,sBAAW,CAACI,OAAO,EAAC;AAAAjC,MAAAA,SAAS,EAAEuB,cAAc;AAAAS,MAAAA,QAAA,EAAA,CAC5C/B;AAAKD,QAAAA,SAAS,EAAC,yBAAyB;AACtCgC,QAAAA,QAAA,EAAA/B,cAAA,CAAC4B,sBAAW,CAACK,KAAK,EAAC;AAAAjB,UAAAA,WAAW,EAAEA;;OAC5B,CAAA,EACLJ,SAAS,IACRZ,cAAC,CAAA4B,sBAAW,CAACM,IAAI,EAAA;AAACC,QAAAA,OAAO,EACvB,IAAA;AAAAJ,QAAAA,QAAA,EAAA/B,cAAA,CAACF,eAAe,EAAA;AAACC,UAAAA,SAAS,EAAE2B;;AACX,OAAA,CACpB;MACmB,EAEtB1B,cAAA,CAAC4B,sBAAW,CAACQ,MAAM,EACjB;AAAAL,MAAAA,QAAA,EAAA/B,cAAA,CAAC4B,sBAAW,CAACS,OAAO;AAACtC,QAAAA,SAAS,EAAEwB,cAAc;AAAEe,QAAAA,QAAQ,EAAC,QAAQ;AAACC,QAAAA,UAAU,EAAE,CAAC;AAAAR,QAAAA,QAAA,EAC7E/B,cAAC,CAAA4B,sBAAW,CAACY,QAAQ,EAAA;AAACzC,UAAAA,SAAS,EAAEyB,eAAe;oBAC7Cb,OAAO,CAAC8B,GAAG,CAAEC,MAAM,IAClB1C,eAAC4B,sBAAW,CAACe,IAAI,EAAA;YAEf9B,KAAK,EAAE6B,MAAM,CAAC7B,KAAK;AACnBd,YAAAA,SAAS,EAAE0B,WAAW;YACtBnC,QAAQ,EAAEoD,MAAM,CAACpD,QAAQ;AAEzByC,YAAAA,QAAA,EAAA/B,cAAA,CAAA,KAAA,EAAA;AAAKD,cAAAA,SAAS,EAAC,yBAAyB;AACtCgC,cAAAA,QAAA,EAAA/B,cAAA,CAAC4B,sBAAW,CAACgB,QAAQ;AAAC7C,gBAAAA,SAAS,EAAC,QAAQ;AACrCgC,gBAAAA,QAAA,EAAAW,MAAM,CAACG,OAAO,IAAIH,MAAM,CAACI;eACL;aAAA;aARpBJ,MAAM,CAAC7B,KAAK,CAWlB;SAAC;;AAGW,KAAA,CAAA;AAAA,GAAA,CACJ;AAEvB;;;;;"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../../../src/react/components/select/index.tsx"],"sourcesContent":["import React from 'react'\nimport { cva, VariantProps } from 'class-variance-authority'\nimport { useTheme } from '../../contexts/ThemeContext'\nimport * as RadixSelect from '@radix-ui/react-select'\nimport { useColorScheme } from '../../hooks/useColorScheme'\n\nconst selectTrigger = cva(\n 'w-full transition-all font-inter appearance-none cursor-pointer relative text-[0.875rem] leading-[1.0625rem] focus:ring-2 inline-flex items-center justify-between',\n {\n variants: {\n theme: {\n light: 'text-[#0C1C33] bg-white',\n dark: 'text-white bg-gray-800'\n },\n colorScheme: {\n default: 'focus:ring-blue-500/20',\n brand: 'focus:ring-dash-brand/20',\n error: 'focus:ring-red-500/20',\n success: 'focus:ring-green-500/20'\n },\n size: {\n sm: 'dash-block-sm',\n md: 'dash-block-md',\n xl: 'dash-block-xl'\n },\n border: {\n true: 'outline outline-1 outline-offset-[-1px]',\n false: ''\n },\n disabled: {\n false: '',\n true: 'opacity-60 cursor-not-allowed'\n }\n },\n compoundVariants: [\n // Outline colors by colorScheme - only when border is true\n {\n colorScheme: 'default',\n border: true,\n class: 'outline-[rgba(12,28,51,0.35)] focus:outline-[rgba(12,28,51,0.6)]'\n },\n {\n colorScheme: 'brand',\n border: true,\n class: 'outline-dash-brand/30 focus:outline-dash-brand'\n },\n {\n colorScheme: 'error',\n border: true,\n class: 'outline-red-500 focus:outline-red-500'\n },\n {\n colorScheme: 'success',\n border: true,\n class: 'outline-green-500 focus:outline-green-500'\n }\n ],\n defaultVariants: {\n theme: 'light',\n colorScheme: 'default',\n size: 'xl',\n border: true,\n disabled: false\n }\n }\n)\n\nconst selectContent = cva(\n 'overflow-hidden z-50 rounded-md shadow-lg min-w-[var(--radix-select-trigger-width)] w-full max-h-[var(--radix-select-content-available-height)]',\n {\n variants: {\n theme: {\n light: 'bg-white border border-gray-200',\n dark: 'bg-gray-800 border border-gray-700'\n }\n }\n }\n)\n\nconst selectViewport = cva(\n 'overflow-y-auto max-h-[inherit]'\n)\n\nconst selectItem = cva(\n 'relative flex cursor-pointer select-none items-center outline-none focus:bg-gray-100 data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n {\n variants: {\n theme: {\n light: 'text-gray-900 focus:bg-gray-100',\n dark: 'text-gray-100 focus:bg-gray-700'\n },\n size: {\n sm: 'dash-block-sm',\n md: 'dash-block-md',\n xl: 'dash-block-xl'\n }\n }\n }\n)\n\nconst selectIcon = cva(\n 'pointer-events-none flex items-center justify-center transition-transform',\n {\n variants: {\n size: {\n sm: 'w-3 h-3',\n md: 'w-4 h-4',\n xl: 'w-4 h-4'\n }\n }\n }\n)\n\ntype SelectVariants = VariantProps<typeof selectTrigger>\n\nexport interface SelectOption {\n value: string\n label: string\n disabled?: boolean\n content?: React.ReactNode\n}\n\nexport interface SelectProps extends Omit<SelectVariants, 'theme' | 'disabled'> {\n className?: string\n error?: boolean\n success?: boolean\n border?: boolean\n options?: SelectOption[]\n showArrow?: boolean\n value?: string\n defaultValue?: string\n onChange?: (value: string) => void\n placeholder?: string\n disabled?: boolean\n name?: string\n /** Color scheme override for light theme */\n colorSchemeLight?: 'default' | 'brand' | 'error' | 'success'\n /** Color scheme override for dark theme */\n colorSchemeDark?: 'default' | 'brand' | 'error' | 'success'\n}\n\n // Arrow icon\nconst ChevronDownIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"m4.93179 5.43179c0.20081-0.20081 0.52632-0.20081 0.72713 0l2.34108 2.34108 2.34108-2.34108c0.20081-0.20081 0.52632-0.20081 0.72713 0s0.20081 0.52632 0 0.72713l-2.70455 2.70455c-0.20081 0.20081-0.52632 0.20081-0.72713 0l-2.70455-2.70455c-0.20081-0.20081-0.20081-0.52632 0-0.72713z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n)\n\n/**\n * A versatile select component built on Radix UI that adapts to light/dark theme,\n * supports various color schemes, sizes, variants, states, and HTML content in options.\n *\n * @example\n * <Select\n * options={[\n * {value: 'id1', label: 'Option 1'}, \n * {value: 'id2', label: 'Option 2', content: <div><strong>Option 2</strong><br/>Description</div>}\n * ]}\n * colorScheme=\"default\"\n * size=\"xl\"\n * border={true}\n * />\n */\nexport const Select: React.FC<SelectProps> = ({\n className = '',\n colorScheme,\n colorSchemeLight,\n colorSchemeDark,\n size,\n error = false,\n success = false,\n border = true,\n disabled = false,\n options = [],\n showArrow = true,\n value,\n defaultValue,\n onChange,\n placeholder = 'Select an option...',\n name,\n ...props\n}) => {\n const { theme } = useTheme()\n\n const effectiveColorScheme = useColorScheme(colorScheme, colorSchemeLight, colorSchemeDark) ?? 'default'\n\n // Determine color scheme based on state\n let finalColorScheme: typeof effectiveColorScheme = effectiveColorScheme\n if (error) finalColorScheme = 'error'\n else if (success) finalColorScheme = 'success'\n\n const triggerClasses = selectTrigger({\n theme,\n colorScheme: finalColorScheme,\n size,\n border,\n disabled\n }) + ' ' + className\n\n const contentClasses = selectContent({ theme })\n const viewportClasses = selectViewport({})\n const itemClasses = selectItem({ theme, size })\n const iconClasses = selectIcon({ size })\n\n return (\n <RadixSelect.Root\n value={value}\n defaultValue={defaultValue}\n onValueChange={onChange}\n disabled={disabled}\n name={name}\n >\n <RadixSelect.Trigger className={triggerClasses}>\n <div className='w-full flex-1 text-left'>\n <RadixSelect.Value placeholder={placeholder} />\n </div>\n {showArrow && (\n <RadixSelect.Icon asChild>\n <ChevronDownIcon className={iconClasses} />\n </RadixSelect.Icon>\n )}\n </RadixSelect.Trigger>\n\n <RadixSelect.Portal>\n <RadixSelect.Content className={contentClasses} position='popper' sideOffset={5}>\n <RadixSelect.Viewport className={viewportClasses}>\n {options.map((option) => (\n <RadixSelect.Item\n key={option.value}\n value={option.value}\n className={itemClasses}\n disabled={option.disabled}\n >\n <div className='w-full flex-1 text-left'>\n <RadixSelect.ItemText className='w-full'>\n {option.content || option.label}\n </RadixSelect.ItemText>\n </div>\n </RadixSelect.Item>\n ))}\n </RadixSelect.Viewport>\n </RadixSelect.Content>\n </RadixSelect.Portal>\n </RadixSelect.Root>\n )\n}\n\nexport default Select\n"],"names":["selectTrigger","cva","variants","theme","light","dark","colorScheme","default","brand","error","success","size","sm","md","xl","border","true","false","disabled","compoundVariants","class","defaultVariants","selectContent","selectViewport","selectItem","selectIcon","ChevronDownIcon","className","_jsx","width","height","viewBox","fill","xmlns","d","fillRule","clipRule","Select","_a","colorSchemeLight","colorSchemeDark","options","showArrow","value","defaultValue","onChange","placeholder","name","props","__rest","useTheme","effectiveColorScheme","_b","useColorScheme","finalColorScheme","triggerClasses","contentClasses","viewportClasses","itemClasses","iconClasses","_jsxs","RadixSelect","Root","onValueChange","children","Trigger","Value","Icon","asChild","Portal","Content","position","sideOffset","Viewport","map","option","Item","ItemText","content","label"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,MAAMA,aAAa,GAAGC,0BAAG,CACvB,oKAAoK,EACpK;AACEC,EAAAA,QAAQ,EAAE;AACRC,IAAAA,KAAK,EAAE;AACLC,MAAAA,KAAK,EAAE,yBAAyB;AAChCC,MAAAA,IAAI,EAAE;KACP;AACDC,IAAAA,WAAW,EAAE;AACXC,MAAAA,OAAO,EAAE,wBAAwB;AACjCC,MAAAA,KAAK,EAAE,0BAA0B;AACjCC,MAAAA,KAAK,EAAE,uBAAuB;AAC9BC,MAAAA,OAAO,EAAE;KACV;AACDC,IAAAA,IAAI,EAAE;AACJC,MAAAA,EAAE,EAAE,eAAe;AACnBC,MAAAA,EAAE,EAAE,eAAe;AACnBC,MAAAA,EAAE,EAAE;KACL;AACDC,IAAAA,MAAM,EAAE;AACNC,MAAAA,IAAI,EAAE,yCAAyC;AAC/CC,MAAAA,KAAK,EAAE;KACR;AACDC,IAAAA,QAAQ,EAAE;AACRD,MAAAA,KAAK,EAAE,EAAE;AACTD,MAAAA,IAAI,EAAE;AACP;GACF;AACDG,EAAAA,gBAAgB,EAAE;AAChB;AACA,EAAA;AACEb,IAAAA,WAAW,EAAE,SAAS;AACtBS,IAAAA,MAAM,EAAE,IAAI;AACZK,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEd,IAAAA,WAAW,EAAE,OAAO;AACpBS,IAAAA,MAAM,EAAE,IAAI;AACZK,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEd,IAAAA,WAAW,EAAE,OAAO;AACpBS,IAAAA,MAAM,EAAE,IAAI;AACZK,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEd,IAAAA,WAAW,EAAE,SAAS;AACtBS,IAAAA,MAAM,EAAE,IAAI;AACZK,IAAAA,KAAK,EAAE;AACR,GAAA,CACF;AACDC,EAAAA,eAAe,EAAE;AACflB,IAAAA,KAAK,EAAE,OAAO;AACdG,IAAAA,WAAW,EAAE,SAAS;AACtBK,IAAAA,IAAI,EAAE,IAAI;AACVI,IAAAA,MAAM,EAAE,IAAI;AACZG,IAAAA,QAAQ,EAAE;AACX;AACF,CAAA,CACF;AAED,MAAMI,aAAa,GAAGrB,0BAAG,CACvB,iJAAiJ,EACjJ;AACEC,EAAAA,QAAQ,EAAE;AACRC,IAAAA,KAAK,EAAE;AACLC,MAAAA,KAAK,EAAE,iCAAiC;AACxCC,MAAAA,IAAI,EAAE;AACP;AACF;AACF,CAAA,CACF;AAED,MAAMkB,cAAc,GAAGtB,0BAAG,CACxB,iCAAiC,CAClC;AAED,MAAMuB,UAAU,GAAGvB,0BAAG,CACpB,qJAAqJ,EACrJ;AACEC,EAAAA,QAAQ,EAAE;AACRC,IAAAA,KAAK,EAAE;AACLC,MAAAA,KAAK,EAAE,iCAAiC;AACxCC,MAAAA,IAAI,EAAE;KACP;AACDM,IAAAA,IAAI,EAAE;AACJC,MAAAA,EAAE,EAAE,eAAe;AACnBC,MAAAA,EAAE,EAAE,eAAe;AACnBC,MAAAA,EAAE,EAAE;AACL;AACF;AACF,CAAA,CACF;AAED,MAAMW,UAAU,GAAGxB,0BAAG,CACpB,2EAA2E,EAC3E;AACEC,EAAAA,QAAQ,EAAE;AACRS,IAAAA,IAAI,EAAE;AACJC,MAAAA,EAAE,EAAE,SAAS;AACbC,MAAAA,EAAE,EAAE,SAAS;AACbC,MAAAA,EAAE,EAAE;AACL;AACF;AACF,CAAA,CACF;AA8BC;AACF,MAAMY,eAAe,GAAqCA,CAAC;AAAEC,EAAAA;CAAW,KACtEC,cACE,CAAA,KAAA,EAAA;AAAAC,EAAAA,KAAK,EAAC,IAAI;AACVC,EAAAA,MAAM,EAAC,IAAI;AACXC,EAAAA,OAAO,EAAC,WAAW;AACnBC,EAAAA,IAAI,EAAC,MAAM;AACXC,EAAAA,KAAK,EAAC,4BAA4B;AAClCN,EAAAA,SAAS,EAAEA,SAAS;YAEpBC,cACE,CAAA,MAAA,EAAA;AAAAM,IAAAA,CAAC,EAAC,yRAAyR;AAC3RF,IAAAA,IAAI,EAAC,cAAc;AACnBG,IAAAA,QAAQ,EAAC,SAAS;AAClBC,IAAAA,QAAQ,EAAC;GAAS;AAEhB,CAAA,CACP;AAED;;;;;;;;;;;;;;AAcG;AACUC,MAAAA,MAAM,GAA2BC,EAkB7C,IAAI;;EAlByC,IAAA;AAC5CX,MAAAA,SAAS,GAAG,EAAE;MACdrB,WAAW;MACXiC,gBAAgB;MAChBC,eAAe;MACf7B,IAAI;AACJF,MAAAA,KAAK,GAAG,KAAK;AACbC,MAAAA,OAAO,GAAG,KAAK;AACfK,MAAAA,MAAM,GAAG,IAAI;AACbG,MAAAA,QAAQ,GAAG,KAAK;AAChBuB,MAAAA,OAAO,GAAG,EAAE;AACZC,MAAAA,SAAS,GAAG,IAAI;MAChBC,KAAK;MACLC,YAAY;MACZC,QAAQ;AACRC,MAAAA,WAAW,GAAG,qBAAqB;AACnCC,MAAAA;UAED;AADIC,IAjByCC,YAAA,CAAAX,EAAA,EAAA,CAAA,WAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,cAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,CAkB7C;EACC,MAAM;AAAEnC,IAAAA;GAAO,GAAG+C,qBAAQ,EAAE;EAE5B,MAAMC,oBAAoB,GAAG,CAAAC,EAAA,GAAAC,6BAAc,CAAC/C,WAAW,EAAEiC,gBAAgB,EAAEC,eAAe,CAAC,MAAA,IAAA,IAAAY,EAAA,KAAA,MAAA,GAAAA,EAAA,GAAI,SAAS;AAExG;EACA,IAAIE,gBAAgB,GAAgCH,oBAAoB;AACxE,EAAA,IAAI1C,KAAK,EAAE6C,gBAAgB,GAAG,OAAO,CAAA,KAChC,IAAI5C,OAAO,EAAE4C,gBAAgB,GAAG,SAAS;EAE9C,MAAMC,cAAc,GAAGvD,aAAa,CAAC;IACnCG,KAAK;AACLG,IAAAA,WAAW,EAAEgD,gBAAgB;IAC7B3C,IAAI;IACJI,MAAM;AACNG,IAAAA;AACD,GAAA,CAAC,GAAG,GAAG,GAAGS,SAAS;EAEpB,MAAM6B,cAAc,GAAGlC,aAAa,CAAC;AAAEnB,IAAAA;AAAK,GAAE,CAAC;AAC/C,EAAA,MAAMsD,eAAe,GAAGlC,cAAc,CAAC,EAAE,CAAC;EAC1C,MAAMmC,WAAW,GAAGlC,UAAU,CAAC;IAAErB,KAAK;AAAEQ,IAAAA;AAAM,GAAA,CAAC;EAC/C,MAAMgD,WAAW,GAAGlC,UAAU,CAAC;AAAEd,IAAAA;AAAI,GAAE,CAAC;AAExC,EAAA,OACEiD,eAAC,CAAAC,sBAAW,CAACC,IAAI;AACfnB,IAAAA,KAAK,EAAEA,KAAK;AACZC,IAAAA,YAAY,EAAEA,YAAY;AAC1BmB,IAAAA,aAAa,EAAElB,QAAQ;AACvB3B,IAAAA,QAAQ,EAAEA,QAAQ;AAClB6B,IAAAA,IAAI,EAAEA,IAAI;AAEViB,IAAAA,QAAA,EAAA,CAAAJ,eAAA,CAACC,sBAAW,CAACI,OAAO,EAAC;AAAAtC,MAAAA,SAAS,EAAE4B,cAAc;AAAAS,MAAAA,QAAA,EAAA,CAC5CpC;AAAKD,QAAAA,SAAS,EAAC,yBAAyB;AACtCqC,QAAAA,QAAA,EAAApC,cAAA,CAACiC,sBAAW,CAACK,KAAK,EAAC;AAAApB,UAAAA,WAAW,EAAEA;;OAC5B,CAAA,EACLJ,SAAS,IACRd,cAAC,CAAAiC,sBAAW,CAACM,IAAI,EAAA;AAACC,QAAAA,OAAO,EACvB,IAAA;AAAAJ,QAAAA,QAAA,EAAApC,cAAA,CAACF,eAAe,EAAA;AAACC,UAAAA,SAAS,EAAEgC;;AACX,OAAA,CACpB;MACmB,EAEtB/B,cAAA,CAACiC,sBAAW,CAACQ,MAAM,EACjB;AAAAL,MAAAA,QAAA,EAAApC,cAAA,CAACiC,sBAAW,CAACS,OAAO;AAAC3C,QAAAA,SAAS,EAAE6B,cAAc;AAAEe,QAAAA,QAAQ,EAAC,QAAQ;AAACC,QAAAA,UAAU,EAAE,CAAC;AAAAR,QAAAA,QAAA,EAC7EpC,cAAC,CAAAiC,sBAAW,CAACY,QAAQ,EAAA;AAAC9C,UAAAA,SAAS,EAAE8B,eAAe;oBAC7ChB,OAAO,CAACiC,GAAG,CAAEC,MAAM,IAClB/C,eAACiC,sBAAW,CAACe,IAAI,EAAA;YAEfjC,KAAK,EAAEgC,MAAM,CAAChC,KAAK;AACnBhB,YAAAA,SAAS,EAAE+B,WAAW;YACtBxC,QAAQ,EAAEyD,MAAM,CAACzD,QAAQ;AAEzB8C,YAAAA,QAAA,EAAApC,cAAA,CAAA,KAAA,EAAA;AAAKD,cAAAA,SAAS,EAAC,yBAAyB;AACtCqC,cAAAA,QAAA,EAAApC,cAAA,CAACiC,sBAAW,CAACgB,QAAQ;AAAClD,gBAAAA,SAAS,EAAC,QAAQ;AACrCqC,gBAAAA,QAAA,EAAAW,MAAM,CAACG,OAAO,IAAIH,MAAM,CAACI;eACL;aAAA;aARpBJ,MAAM,CAAChC,KAAK,CAWlB;SAAC;;AAGW,KAAA,CAAA;AAAA,GAAA,CACJ;AAEvB;;;;;"}
|
|
@@ -27,6 +27,10 @@ export interface SelectProps extends Omit<SelectVariants, 'theme' | 'disabled'>
|
|
|
27
27
|
placeholder?: string;
|
|
28
28
|
disabled?: boolean;
|
|
29
29
|
name?: string;
|
|
30
|
+
/** Color scheme override for light theme */
|
|
31
|
+
colorSchemeLight?: 'default' | 'brand' | 'error' | 'success';
|
|
32
|
+
/** Color scheme override for dark theme */
|
|
33
|
+
colorSchemeDark?: 'default' | 'brand' | 'error' | 'success';
|
|
30
34
|
}
|
|
31
35
|
/**
|
|
32
36
|
* A versatile select component built on Radix UI that adapts to light/dark theme,
|
|
@@ -5,6 +5,7 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
5
5
|
import { cva } from 'class-variance-authority';
|
|
6
6
|
import { useTheme } from '../../contexts/ThemeContext.esm.js';
|
|
7
7
|
import * as RadixSelect from '@radix-ui/react-select';
|
|
8
|
+
import { useColorScheme } from '../../hooks/useColorScheme.esm.js';
|
|
8
9
|
|
|
9
10
|
const selectTrigger = cva('w-full transition-all font-inter appearance-none cursor-pointer relative text-[0.875rem] leading-[1.0625rem] focus:ring-2 inline-flex items-center justify-between', {
|
|
10
11
|
variants: {
|
|
@@ -123,9 +124,12 @@ const ChevronDownIcon = ({
|
|
|
123
124
|
* />
|
|
124
125
|
*/
|
|
125
126
|
const Select = _a => {
|
|
127
|
+
var _b;
|
|
126
128
|
var {
|
|
127
129
|
className = '',
|
|
128
130
|
colorScheme,
|
|
131
|
+
colorSchemeLight,
|
|
132
|
+
colorSchemeDark,
|
|
129
133
|
size,
|
|
130
134
|
error = false,
|
|
131
135
|
success = false,
|
|
@@ -139,12 +143,13 @@ const Select = _a => {
|
|
|
139
143
|
placeholder = 'Select an option...',
|
|
140
144
|
name
|
|
141
145
|
} = _a;
|
|
142
|
-
__rest(_a, ["className", "colorScheme", "size", "error", "success", "border", "disabled", "options", "showArrow", "value", "defaultValue", "onChange", "placeholder", "name"]);
|
|
146
|
+
__rest(_a, ["className", "colorScheme", "colorSchemeLight", "colorSchemeDark", "size", "error", "success", "border", "disabled", "options", "showArrow", "value", "defaultValue", "onChange", "placeholder", "name"]);
|
|
143
147
|
const {
|
|
144
148
|
theme
|
|
145
149
|
} = useTheme();
|
|
150
|
+
const effectiveColorScheme = (_b = useColorScheme(colorScheme, colorSchemeLight, colorSchemeDark)) !== null && _b !== void 0 ? _b : 'default';
|
|
146
151
|
// Determine color scheme based on state
|
|
147
|
-
let finalColorScheme =
|
|
152
|
+
let finalColorScheme = effectiveColorScheme;
|
|
148
153
|
if (error) finalColorScheme = 'error';else if (success) finalColorScheme = 'success';
|
|
149
154
|
const triggerClasses = selectTrigger({
|
|
150
155
|
theme,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../../../../src/react/components/select/index.tsx"],"sourcesContent":["import React from 'react'\nimport { cva, VariantProps } from 'class-variance-authority'\nimport { useTheme } from '../../contexts/ThemeContext'\nimport * as RadixSelect from '@radix-ui/react-select'\n\nconst selectTrigger = cva(\n 'w-full transition-all font-inter appearance-none cursor-pointer relative text-[0.875rem] leading-[1.0625rem] focus:ring-2 inline-flex items-center justify-between',\n {\n variants: {\n theme: {\n light: 'text-[#0C1C33] bg-white',\n dark: 'text-white bg-gray-800'\n },\n colorScheme: {\n default: 'focus:ring-blue-500/20',\n brand: 'focus:ring-dash-brand/20',\n error: 'focus:ring-red-500/20',\n success: 'focus:ring-green-500/20'\n },\n size: {\n sm: 'dash-block-sm',\n md: 'dash-block-md',\n xl: 'dash-block-xl'\n },\n border: {\n true: 'outline outline-1 outline-offset-[-1px]',\n false: ''\n },\n disabled: {\n false: '',\n true: 'opacity-60 cursor-not-allowed'\n }\n },\n compoundVariants: [\n // Outline colors by colorScheme - only when border is true\n {\n colorScheme: 'default',\n border: true,\n class: 'outline-[rgba(12,28,51,0.35)] focus:outline-[rgba(12,28,51,0.6)]'\n },\n {\n colorScheme: 'brand',\n border: true,\n class: 'outline-dash-brand/30 focus:outline-dash-brand'\n },\n {\n colorScheme: 'error',\n border: true,\n class: 'outline-red-500 focus:outline-red-500'\n },\n {\n colorScheme: 'success',\n border: true,\n class: 'outline-green-500 focus:outline-green-500'\n }\n ],\n defaultVariants: {\n theme: 'light',\n colorScheme: 'default',\n size: 'xl',\n border: true,\n disabled: false\n }\n }\n)\n\nconst selectContent = cva(\n 'overflow-hidden z-50 rounded-md shadow-lg min-w-[var(--radix-select-trigger-width)] w-full max-h-[var(--radix-select-content-available-height)]',\n {\n variants: {\n theme: {\n light: 'bg-white border border-gray-200',\n dark: 'bg-gray-800 border border-gray-700'\n }\n }\n }\n)\n\nconst selectViewport = cva(\n 'overflow-y-auto max-h-[inherit]'\n)\n\nconst selectItem = cva(\n 'relative flex cursor-pointer select-none items-center outline-none focus:bg-gray-100 data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n {\n variants: {\n theme: {\n light: 'text-gray-900 focus:bg-gray-100',\n dark: 'text-gray-100 focus:bg-gray-700'\n },\n size: {\n sm: 'dash-block-sm',\n md: 'dash-block-md',\n xl: 'dash-block-xl'\n }\n }\n }\n)\n\nconst selectIcon = cva(\n 'pointer-events-none flex items-center justify-center transition-transform',\n {\n variants: {\n size: {\n sm: 'w-3 h-3',\n md: 'w-4 h-4',\n xl: 'w-4 h-4'\n }\n }\n }\n)\n\ntype SelectVariants = VariantProps<typeof selectTrigger>\n\nexport interface SelectOption {\n value: string\n label: string\n disabled?: boolean\n content?: React.ReactNode\n}\n\nexport interface SelectProps extends Omit<SelectVariants, 'theme' | 'disabled'> {\n className?: string\n error?: boolean\n success?: boolean\n border?: boolean\n options?: SelectOption[]\n showArrow?: boolean\n value?: string\n defaultValue?: string\n onChange?: (value: string) => void\n placeholder?: string\n disabled?: boolean\n name?: string\n}\n\n // Arrow icon\nconst ChevronDownIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"m4.93179 5.43179c0.20081-0.20081 0.52632-0.20081 0.72713 0l2.34108 2.34108 2.34108-2.34108c0.20081-0.20081 0.52632-0.20081 0.72713 0s0.20081 0.52632 0 0.72713l-2.70455 2.70455c-0.20081 0.20081-0.52632 0.20081-0.72713 0l-2.70455-2.70455c-0.20081-0.20081-0.20081-0.52632 0-0.72713z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n)\n\n/**\n * A versatile select component built on Radix UI that adapts to light/dark theme,\n * supports various color schemes, sizes, variants, states, and HTML content in options.\n *\n * @example\n * <Select\n * options={[\n * {value: 'id1', label: 'Option 1'}, \n * {value: 'id2', label: 'Option 2', content: <div><strong>Option 2</strong><br/>Description</div>}\n * ]}\n * colorScheme=\"default\"\n * size=\"xl\"\n * border={true}\n * />\n */\nexport const Select: React.FC<SelectProps> = ({\n className = '',\n colorScheme,\n size,\n error = false,\n success = false,\n border = true,\n disabled = false,\n options = [],\n showArrow = true,\n value,\n defaultValue,\n onChange,\n placeholder = 'Select an option...',\n name,\n ...props\n}) => {\n const { theme } = useTheme()\n\n // Determine color scheme based on state\n let finalColorScheme = colorScheme\n if (error) finalColorScheme = 'error'\n else if (success) finalColorScheme = 'success'\n\n const triggerClasses = selectTrigger({\n theme,\n colorScheme: finalColorScheme,\n size,\n border,\n disabled\n }) + ' ' + className\n\n const contentClasses = selectContent({ theme })\n const viewportClasses = selectViewport({})\n const itemClasses = selectItem({ theme, size })\n const iconClasses = selectIcon({ size })\n\n return (\n <RadixSelect.Root\n value={value}\n defaultValue={defaultValue}\n onValueChange={onChange}\n disabled={disabled}\n name={name}\n >\n <RadixSelect.Trigger className={triggerClasses}>\n <div className='w-full flex-1 text-left'>\n <RadixSelect.Value placeholder={placeholder} />\n </div>\n {showArrow && (\n <RadixSelect.Icon asChild>\n <ChevronDownIcon className={iconClasses} />\n </RadixSelect.Icon>\n )}\n </RadixSelect.Trigger>\n\n <RadixSelect.Portal>\n <RadixSelect.Content className={contentClasses} position='popper' sideOffset={5}>\n <RadixSelect.Viewport className={viewportClasses}>\n {options.map((option) => (\n <RadixSelect.Item\n key={option.value}\n value={option.value}\n className={itemClasses}\n disabled={option.disabled}\n >\n <div className='w-full flex-1 text-left'>\n <RadixSelect.ItemText className='w-full'>\n {option.content || option.label}\n </RadixSelect.ItemText>\n </div>\n </RadixSelect.Item>\n ))}\n </RadixSelect.Viewport>\n </RadixSelect.Content>\n </RadixSelect.Portal>\n </RadixSelect.Root>\n )\n}\n\nexport default Select\n"],"names":["selectTrigger","cva","variants","theme","light","dark","colorScheme","default","brand","error","success","size","sm","md","xl","border","true","false","disabled","compoundVariants","class","defaultVariants","selectContent","selectViewport","selectItem","selectIcon","ChevronDownIcon","className","_jsx","width","height","viewBox","fill","xmlns","d","fillRule","clipRule","Select","_a","options","showArrow","value","defaultValue","onChange","placeholder","name","props","__rest","useTheme","finalColorScheme","triggerClasses","contentClasses","viewportClasses","itemClasses","iconClasses","_jsxs","RadixSelect","Root","onValueChange","children","Trigger","Value","Icon","asChild","Portal","Content","position","sideOffset","Viewport","map","option","Item","ItemText","content","label"],"mappings":";;;;;;;;AAKA,MAAMA,aAAa,GAAGC,GAAG,CACvB,oKAAoK,EACpK;AACEC,EAAAA,QAAQ,EAAE;AACRC,IAAAA,KAAK,EAAE;AACLC,MAAAA,KAAK,EAAE,yBAAyB;AAChCC,MAAAA,IAAI,EAAE;KACP;AACDC,IAAAA,WAAW,EAAE;AACXC,MAAAA,OAAO,EAAE,wBAAwB;AACjCC,MAAAA,KAAK,EAAE,0BAA0B;AACjCC,MAAAA,KAAK,EAAE,uBAAuB;AAC9BC,MAAAA,OAAO,EAAE;KACV;AACDC,IAAAA,IAAI,EAAE;AACJC,MAAAA,EAAE,EAAE,eAAe;AACnBC,MAAAA,EAAE,EAAE,eAAe;AACnBC,MAAAA,EAAE,EAAE;KACL;AACDC,IAAAA,MAAM,EAAE;AACNC,MAAAA,IAAI,EAAE,yCAAyC;AAC/CC,MAAAA,KAAK,EAAE;KACR;AACDC,IAAAA,QAAQ,EAAE;AACRD,MAAAA,KAAK,EAAE,EAAE;AACTD,MAAAA,IAAI,EAAE;AACP;GACF;AACDG,EAAAA,gBAAgB,EAAE;AAChB;AACA,EAAA;AACEb,IAAAA,WAAW,EAAE,SAAS;AACtBS,IAAAA,MAAM,EAAE,IAAI;AACZK,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEd,IAAAA,WAAW,EAAE,OAAO;AACpBS,IAAAA,MAAM,EAAE,IAAI;AACZK,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEd,IAAAA,WAAW,EAAE,OAAO;AACpBS,IAAAA,MAAM,EAAE,IAAI;AACZK,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEd,IAAAA,WAAW,EAAE,SAAS;AACtBS,IAAAA,MAAM,EAAE,IAAI;AACZK,IAAAA,KAAK,EAAE;AACR,GAAA,CACF;AACDC,EAAAA,eAAe,EAAE;AACflB,IAAAA,KAAK,EAAE,OAAO;AACdG,IAAAA,WAAW,EAAE,SAAS;AACtBK,IAAAA,IAAI,EAAE,IAAI;AACVI,IAAAA,MAAM,EAAE,IAAI;AACZG,IAAAA,QAAQ,EAAE;AACX;AACF,CAAA,CACF;AAED,MAAMI,aAAa,GAAGrB,GAAG,CACvB,iJAAiJ,EACjJ;AACEC,EAAAA,QAAQ,EAAE;AACRC,IAAAA,KAAK,EAAE;AACLC,MAAAA,KAAK,EAAE,iCAAiC;AACxCC,MAAAA,IAAI,EAAE;AACP;AACF;AACF,CAAA,CACF;AAED,MAAMkB,cAAc,GAAGtB,GAAG,CACxB,iCAAiC,CAClC;AAED,MAAMuB,UAAU,GAAGvB,GAAG,CACpB,qJAAqJ,EACrJ;AACEC,EAAAA,QAAQ,EAAE;AACRC,IAAAA,KAAK,EAAE;AACLC,MAAAA,KAAK,EAAE,iCAAiC;AACxCC,MAAAA,IAAI,EAAE;KACP;AACDM,IAAAA,IAAI,EAAE;AACJC,MAAAA,EAAE,EAAE,eAAe;AACnBC,MAAAA,EAAE,EAAE,eAAe;AACnBC,MAAAA,EAAE,EAAE;AACL;AACF;AACF,CAAA,CACF;AAED,MAAMW,UAAU,GAAGxB,GAAG,CACpB,2EAA2E,EAC3E;AACEC,EAAAA,QAAQ,EAAE;AACRS,IAAAA,IAAI,EAAE;AACJC,MAAAA,EAAE,EAAE,SAAS;AACbC,MAAAA,EAAE,EAAE,SAAS;AACbC,MAAAA,EAAE,EAAE;AACL;AACF;AACF,CAAA,CACF;AA0BC;AACF,MAAMY,eAAe,GAAqCA,CAAC;AAAEC,EAAAA;CAAW,KACtEC,GACE,CAAA,KAAA,EAAA;AAAAC,EAAAA,KAAK,EAAC,IAAI;AACVC,EAAAA,MAAM,EAAC,IAAI;AACXC,EAAAA,OAAO,EAAC,WAAW;AACnBC,EAAAA,IAAI,EAAC,MAAM;AACXC,EAAAA,KAAK,EAAC,4BAA4B;AAClCN,EAAAA,SAAS,EAAEA,SAAS;YAEpBC,GACE,CAAA,MAAA,EAAA;AAAAM,IAAAA,CAAC,EAAC,yRAAyR;AAC3RF,IAAAA,IAAI,EAAC,cAAc;AACnBG,IAAAA,QAAQ,EAAC,SAAS;AAClBC,IAAAA,QAAQ,EAAC;GAAS;AAEhB,CAAA,CACP;AAED;;;;;;;;;;;;;;AAcG;AACUC,MAAAA,MAAM,GAA2BC,EAgB7C,IAAI;EAhByC,IAAA;AAC5CX,MAAAA,SAAS,GAAG,EAAE;MACdrB,WAAW;MACXK,IAAI;AACJF,MAAAA,KAAK,GAAG,KAAK;AACbC,MAAAA,OAAO,GAAG,KAAK;AACfK,MAAAA,MAAM,GAAG,IAAI;AACbG,MAAAA,QAAQ,GAAG,KAAK;AAChBqB,MAAAA,OAAO,GAAG,EAAE;AACZC,MAAAA,SAAS,GAAG,IAAI;MAChBC,KAAK;MACLC,YAAY;MACZC,QAAQ;AACRC,MAAAA,WAAW,GAAG,qBAAqB;AACnCC,MAAAA;UAED;AADIC,IAfyCC,MAAA,CAAAT,EAAA,EAAA,CAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,cAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,CAgB7C;EACC,MAAM;AAAEnC,IAAAA;GAAO,GAAG6C,QAAQ,EAAE;AAE5B;EACA,IAAIC,gBAAgB,GAAG3C,WAAW;AAClC,EAAA,IAAIG,KAAK,EAAEwC,gBAAgB,GAAG,OAAO,CAAA,KAChC,IAAIvC,OAAO,EAAEuC,gBAAgB,GAAG,SAAS;EAE9C,MAAMC,cAAc,GAAGlD,aAAa,CAAC;IACnCG,KAAK;AACLG,IAAAA,WAAW,EAAE2C,gBAAgB;IAC7BtC,IAAI;IACJI,MAAM;AACNG,IAAAA;AACD,GAAA,CAAC,GAAG,GAAG,GAAGS,SAAS;EAEpB,MAAMwB,cAAc,GAAG7B,aAAa,CAAC;AAAEnB,IAAAA;AAAK,GAAE,CAAC;AAC/C,EAAA,MAAMiD,eAAe,GAAG7B,cAAc,CAAC,EAAE,CAAC;EAC1C,MAAM8B,WAAW,GAAG7B,UAAU,CAAC;IAAErB,KAAK;AAAEQ,IAAAA;AAAM,GAAA,CAAC;EAC/C,MAAM2C,WAAW,GAAG7B,UAAU,CAAC;AAAEd,IAAAA;AAAI,GAAE,CAAC;AAExC,EAAA,OACE4C,IAAC,CAAAC,WAAW,CAACC,IAAI;AACfhB,IAAAA,KAAK,EAAEA,KAAK;AACZC,IAAAA,YAAY,EAAEA,YAAY;AAC1BgB,IAAAA,aAAa,EAAEf,QAAQ;AACvBzB,IAAAA,QAAQ,EAAEA,QAAQ;AAClB2B,IAAAA,IAAI,EAAEA,IAAI;AAEVc,IAAAA,QAAA,EAAA,CAAAJ,IAAA,CAACC,WAAW,CAACI,OAAO,EAAC;AAAAjC,MAAAA,SAAS,EAAEuB,cAAc;AAAAS,MAAAA,QAAA,EAAA,CAC5C/B;AAAKD,QAAAA,SAAS,EAAC,yBAAyB;AACtCgC,QAAAA,QAAA,EAAA/B,GAAA,CAAC4B,WAAW,CAACK,KAAK,EAAC;AAAAjB,UAAAA,WAAW,EAAEA;;OAC5B,CAAA,EACLJ,SAAS,IACRZ,GAAC,CAAA4B,WAAW,CAACM,IAAI,EAAA;AAACC,QAAAA,OAAO,EACvB,IAAA;AAAAJ,QAAAA,QAAA,EAAA/B,GAAA,CAACF,eAAe,EAAA;AAACC,UAAAA,SAAS,EAAE2B;;AACX,OAAA,CACpB;MACmB,EAEtB1B,GAAA,CAAC4B,WAAW,CAACQ,MAAM,EACjB;AAAAL,MAAAA,QAAA,EAAA/B,GAAA,CAAC4B,WAAW,CAACS,OAAO;AAACtC,QAAAA,SAAS,EAAEwB,cAAc;AAAEe,QAAAA,QAAQ,EAAC,QAAQ;AAACC,QAAAA,UAAU,EAAE,CAAC;AAAAR,QAAAA,QAAA,EAC7E/B,GAAC,CAAA4B,WAAW,CAACY,QAAQ,EAAA;AAACzC,UAAAA,SAAS,EAAEyB,eAAe;oBAC7Cb,OAAO,CAAC8B,GAAG,CAAEC,MAAM,IAClB1C,IAAC4B,WAAW,CAACe,IAAI,EAAA;YAEf9B,KAAK,EAAE6B,MAAM,CAAC7B,KAAK;AACnBd,YAAAA,SAAS,EAAE0B,WAAW;YACtBnC,QAAQ,EAAEoD,MAAM,CAACpD,QAAQ;AAEzByC,YAAAA,QAAA,EAAA/B,GAAA,CAAA,KAAA,EAAA;AAAKD,cAAAA,SAAS,EAAC,yBAAyB;AACtCgC,cAAAA,QAAA,EAAA/B,GAAA,CAAC4B,WAAW,CAACgB,QAAQ;AAAC7C,gBAAAA,SAAS,EAAC,QAAQ;AACrCgC,gBAAAA,QAAA,EAAAW,MAAM,CAACG,OAAO,IAAIH,MAAM,CAACI;eACL;aAAA;aARpBJ,MAAM,CAAC7B,KAAK,CAWlB;SAAC;;AAGW,KAAA,CAAA;AAAA,GAAA,CACJ;AAEvB;;;;"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../../../src/react/components/select/index.tsx"],"sourcesContent":["import React from 'react'\nimport { cva, VariantProps } from 'class-variance-authority'\nimport { useTheme } from '../../contexts/ThemeContext'\nimport * as RadixSelect from '@radix-ui/react-select'\nimport { useColorScheme } from '../../hooks/useColorScheme'\n\nconst selectTrigger = cva(\n 'w-full transition-all font-inter appearance-none cursor-pointer relative text-[0.875rem] leading-[1.0625rem] focus:ring-2 inline-flex items-center justify-between',\n {\n variants: {\n theme: {\n light: 'text-[#0C1C33] bg-white',\n dark: 'text-white bg-gray-800'\n },\n colorScheme: {\n default: 'focus:ring-blue-500/20',\n brand: 'focus:ring-dash-brand/20',\n error: 'focus:ring-red-500/20',\n success: 'focus:ring-green-500/20'\n },\n size: {\n sm: 'dash-block-sm',\n md: 'dash-block-md',\n xl: 'dash-block-xl'\n },\n border: {\n true: 'outline outline-1 outline-offset-[-1px]',\n false: ''\n },\n disabled: {\n false: '',\n true: 'opacity-60 cursor-not-allowed'\n }\n },\n compoundVariants: [\n // Outline colors by colorScheme - only when border is true\n {\n colorScheme: 'default',\n border: true,\n class: 'outline-[rgba(12,28,51,0.35)] focus:outline-[rgba(12,28,51,0.6)]'\n },\n {\n colorScheme: 'brand',\n border: true,\n class: 'outline-dash-brand/30 focus:outline-dash-brand'\n },\n {\n colorScheme: 'error',\n border: true,\n class: 'outline-red-500 focus:outline-red-500'\n },\n {\n colorScheme: 'success',\n border: true,\n class: 'outline-green-500 focus:outline-green-500'\n }\n ],\n defaultVariants: {\n theme: 'light',\n colorScheme: 'default',\n size: 'xl',\n border: true,\n disabled: false\n }\n }\n)\n\nconst selectContent = cva(\n 'overflow-hidden z-50 rounded-md shadow-lg min-w-[var(--radix-select-trigger-width)] w-full max-h-[var(--radix-select-content-available-height)]',\n {\n variants: {\n theme: {\n light: 'bg-white border border-gray-200',\n dark: 'bg-gray-800 border border-gray-700'\n }\n }\n }\n)\n\nconst selectViewport = cva(\n 'overflow-y-auto max-h-[inherit]'\n)\n\nconst selectItem = cva(\n 'relative flex cursor-pointer select-none items-center outline-none focus:bg-gray-100 data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n {\n variants: {\n theme: {\n light: 'text-gray-900 focus:bg-gray-100',\n dark: 'text-gray-100 focus:bg-gray-700'\n },\n size: {\n sm: 'dash-block-sm',\n md: 'dash-block-md',\n xl: 'dash-block-xl'\n }\n }\n }\n)\n\nconst selectIcon = cva(\n 'pointer-events-none flex items-center justify-center transition-transform',\n {\n variants: {\n size: {\n sm: 'w-3 h-3',\n md: 'w-4 h-4',\n xl: 'w-4 h-4'\n }\n }\n }\n)\n\ntype SelectVariants = VariantProps<typeof selectTrigger>\n\nexport interface SelectOption {\n value: string\n label: string\n disabled?: boolean\n content?: React.ReactNode\n}\n\nexport interface SelectProps extends Omit<SelectVariants, 'theme' | 'disabled'> {\n className?: string\n error?: boolean\n success?: boolean\n border?: boolean\n options?: SelectOption[]\n showArrow?: boolean\n value?: string\n defaultValue?: string\n onChange?: (value: string) => void\n placeholder?: string\n disabled?: boolean\n name?: string\n /** Color scheme override for light theme */\n colorSchemeLight?: 'default' | 'brand' | 'error' | 'success'\n /** Color scheme override for dark theme */\n colorSchemeDark?: 'default' | 'brand' | 'error' | 'success'\n}\n\n // Arrow icon\nconst ChevronDownIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"m4.93179 5.43179c0.20081-0.20081 0.52632-0.20081 0.72713 0l2.34108 2.34108 2.34108-2.34108c0.20081-0.20081 0.52632-0.20081 0.72713 0s0.20081 0.52632 0 0.72713l-2.70455 2.70455c-0.20081 0.20081-0.52632 0.20081-0.72713 0l-2.70455-2.70455c-0.20081-0.20081-0.20081-0.52632 0-0.72713z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n)\n\n/**\n * A versatile select component built on Radix UI that adapts to light/dark theme,\n * supports various color schemes, sizes, variants, states, and HTML content in options.\n *\n * @example\n * <Select\n * options={[\n * {value: 'id1', label: 'Option 1'}, \n * {value: 'id2', label: 'Option 2', content: <div><strong>Option 2</strong><br/>Description</div>}\n * ]}\n * colorScheme=\"default\"\n * size=\"xl\"\n * border={true}\n * />\n */\nexport const Select: React.FC<SelectProps> = ({\n className = '',\n colorScheme,\n colorSchemeLight,\n colorSchemeDark,\n size,\n error = false,\n success = false,\n border = true,\n disabled = false,\n options = [],\n showArrow = true,\n value,\n defaultValue,\n onChange,\n placeholder = 'Select an option...',\n name,\n ...props\n}) => {\n const { theme } = useTheme()\n\n const effectiveColorScheme = useColorScheme(colorScheme, colorSchemeLight, colorSchemeDark) ?? 'default'\n\n // Determine color scheme based on state\n let finalColorScheme: typeof effectiveColorScheme = effectiveColorScheme\n if (error) finalColorScheme = 'error'\n else if (success) finalColorScheme = 'success'\n\n const triggerClasses = selectTrigger({\n theme,\n colorScheme: finalColorScheme,\n size,\n border,\n disabled\n }) + ' ' + className\n\n const contentClasses = selectContent({ theme })\n const viewportClasses = selectViewport({})\n const itemClasses = selectItem({ theme, size })\n const iconClasses = selectIcon({ size })\n\n return (\n <RadixSelect.Root\n value={value}\n defaultValue={defaultValue}\n onValueChange={onChange}\n disabled={disabled}\n name={name}\n >\n <RadixSelect.Trigger className={triggerClasses}>\n <div className='w-full flex-1 text-left'>\n <RadixSelect.Value placeholder={placeholder} />\n </div>\n {showArrow && (\n <RadixSelect.Icon asChild>\n <ChevronDownIcon className={iconClasses} />\n </RadixSelect.Icon>\n )}\n </RadixSelect.Trigger>\n\n <RadixSelect.Portal>\n <RadixSelect.Content className={contentClasses} position='popper' sideOffset={5}>\n <RadixSelect.Viewport className={viewportClasses}>\n {options.map((option) => (\n <RadixSelect.Item\n key={option.value}\n value={option.value}\n className={itemClasses}\n disabled={option.disabled}\n >\n <div className='w-full flex-1 text-left'>\n <RadixSelect.ItemText className='w-full'>\n {option.content || option.label}\n </RadixSelect.ItemText>\n </div>\n </RadixSelect.Item>\n ))}\n </RadixSelect.Viewport>\n </RadixSelect.Content>\n </RadixSelect.Portal>\n </RadixSelect.Root>\n )\n}\n\nexport default Select\n"],"names":["selectTrigger","cva","variants","theme","light","dark","colorScheme","default","brand","error","success","size","sm","md","xl","border","true","false","disabled","compoundVariants","class","defaultVariants","selectContent","selectViewport","selectItem","selectIcon","ChevronDownIcon","className","_jsx","width","height","viewBox","fill","xmlns","d","fillRule","clipRule","Select","_a","colorSchemeLight","colorSchemeDark","options","showArrow","value","defaultValue","onChange","placeholder","name","props","__rest","useTheme","effectiveColorScheme","_b","useColorScheme","finalColorScheme","triggerClasses","contentClasses","viewportClasses","itemClasses","iconClasses","_jsxs","RadixSelect","Root","onValueChange","children","Trigger","Value","Icon","asChild","Portal","Content","position","sideOffset","Viewport","map","option","Item","ItemText","content","label"],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ var tslib = require('tslib');
|
|
|
8
8
|
var jsxRuntime = require('react/jsx-runtime');
|
|
9
9
|
var classVarianceAuthority = require('class-variance-authority');
|
|
10
10
|
var ThemeContext = require('../../contexts/ThemeContext.cjs.js');
|
|
11
|
+
var useColorScheme = require('../../hooks/useColorScheme.cjs.js');
|
|
11
12
|
|
|
12
13
|
const textStyles = classVarianceAuthority.cva('', {
|
|
13
14
|
variants: {
|
|
@@ -99,13 +100,18 @@ const Text = _a => {
|
|
|
99
100
|
var {
|
|
100
101
|
as,
|
|
101
102
|
className = '',
|
|
102
|
-
children
|
|
103
|
+
children,
|
|
104
|
+
color,
|
|
105
|
+
colorLight,
|
|
106
|
+
colorDark
|
|
103
107
|
} = _a,
|
|
104
|
-
variantProps = tslib.__rest(_a, ["as", "className", "children"]);
|
|
108
|
+
variantProps = tslib.__rest(_a, ["as", "className", "children", "color", "colorLight", "colorDark"]);
|
|
105
109
|
const {
|
|
106
110
|
theme
|
|
107
111
|
} = ThemeContext.useTheme();
|
|
112
|
+
const effectiveColor = useColorScheme.useColorScheme(color, colorLight, colorDark);
|
|
108
113
|
const classes = textStyles(Object.assign(Object.assign({}, variantProps), {
|
|
114
|
+
color: effectiveColor,
|
|
109
115
|
theme
|
|
110
116
|
})) + (className !== '' ? ` ${className}` : '');
|
|
111
117
|
const Component = as !== null && as !== void 0 ? as : 'span';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../../../src/react/components/text/index.tsx"],"sourcesContent":["import React from 'react'\nimport { cva, VariantProps } from 'class-variance-authority'\nimport { useTheme } from '../../contexts/ThemeContext'\n\nconst textStyles = cva(\n '', {\n variants: {\n reset: {\n false: 'inline whitespace-normal',\n true: ''\n },\n theme: {\n light: 'text-gray-900',\n dark: 'text-gray-100'\n },\n color: {\n default: '',\n blue: '!text-dash-brand',\n 'blue-dark': '!text-dash-brand-dark dark:text-dash-brand-dim',\n red: 'text-red-700'\n },\n size: {\n xs: 'text-[0.625rem]',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl'\n },\n weight: {\n normal: 'font-normal',\n medium: 'font-medium',\n bold: 'font-bold'\n },\n italic: {\n false: '',\n true: 'italic'\n },\n underline: {\n false: '',\n true: 'underline'\n },\n lineThrough: {\n false: '',\n true: 'line-through'\n },\n transform: {\n none: '',\n uppercase: 'uppercase',\n capitalize: 'capitalize'\n },\n opacity: {\n 0: 'opacity-0',\n 10: 'opacity-10',\n 20: 'opacity-20',\n 30: 'opacity-30',\n 40: 'opacity-40',\n 50: 'opacity-50',\n 60: 'opacity-60',\n 70: 'opacity-70',\n 80: 'opacity-80',\n 90: 'opacity-90',\n 100: 'opacity-100'\n },\n monospace: {\n false: '',\n true: 'font-grotesque'\n },\n dim: {\n false: '',\n true: '!opacity-60'\n }\n },\n defaultVariants: {\n reset: false,\n theme: 'light',\n color: 'default',\n size: 'md',\n weight: 'normal',\n italic: false,\n underline: false,\n lineThrough: false,\n transform: 'none',\n opacity: 100,\n monospace: false,\n dim: false\n }\n }\n)\n\ntype TextVariants = Omit<VariantProps<typeof textStyles>, 'theme'>\n\nexport interface TextProps extends TextVariants {\n /** Render as this element or component (e.g. 'h1' or Link). */\n as?: React.ElementType\n /** Additional CSS classes. */\n className?: string\n /** Text children. */\n children?: React.ReactNode\n}\n\n/**\n * A versatile text component with size, color, weight, decoration,\n * transform, opacity, monospace, dimming, and theme-aware defaults.\n */\nexport const Text: React.FC<TextProps> = ({ as, className = '', children, ...variantProps }) => {\n const { theme } = useTheme()\n\n const classes = textStyles({\n ...variantProps,\n theme\n }) + (className !== '' ? ` ${className}` : '')\n\n const Component = as ?? 'span'\n return <Component className={classes}>{children}</Component>\n}\n\nexport default Text\n"],"names":["textStyles","cva","variants","reset","false","true","theme","light","dark","color","default","blue","red","size","xs","sm","md","lg","xl","weight","normal","medium","bold","italic","underline","lineThrough","transform","none","uppercase","capitalize","opacity","monospace","dim","defaultVariants","Text","_a","as","className","children","variantProps","__rest","useTheme","classes","Object","assign","Component","_jsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../../../src/react/components/text/index.tsx"],"sourcesContent":["import React from 'react'\nimport { cva, VariantProps } from 'class-variance-authority'\nimport { useTheme } from '../../contexts/ThemeContext'\nimport { useColorScheme } from '../../hooks/useColorScheme'\n\nconst textStyles = cva(\n '', {\n variants: {\n reset: {\n false: 'inline whitespace-normal',\n true: ''\n },\n theme: {\n light: 'text-gray-900',\n dark: 'text-gray-100'\n },\n color: {\n default: '',\n blue: '!text-dash-brand',\n 'blue-dark': '!text-dash-brand-dark dark:text-dash-brand-dim',\n red: 'text-red-700'\n },\n size: {\n xs: 'text-[0.625rem]',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl'\n },\n weight: {\n normal: 'font-normal',\n medium: 'font-medium',\n bold: 'font-bold'\n },\n italic: {\n false: '',\n true: 'italic'\n },\n underline: {\n false: '',\n true: 'underline'\n },\n lineThrough: {\n false: '',\n true: 'line-through'\n },\n transform: {\n none: '',\n uppercase: 'uppercase',\n capitalize: 'capitalize'\n },\n opacity: {\n 0: 'opacity-0',\n 10: 'opacity-10',\n 20: 'opacity-20',\n 30: 'opacity-30',\n 40: 'opacity-40',\n 50: 'opacity-50',\n 60: 'opacity-60',\n 70: 'opacity-70',\n 80: 'opacity-80',\n 90: 'opacity-90',\n 100: 'opacity-100'\n },\n monospace: {\n false: '',\n true: 'font-grotesque'\n },\n dim: {\n false: '',\n true: '!opacity-60'\n }\n },\n defaultVariants: {\n reset: false,\n theme: 'light',\n color: 'default',\n size: 'md',\n weight: 'normal',\n italic: false,\n underline: false,\n lineThrough: false,\n transform: 'none',\n opacity: 100,\n monospace: false,\n dim: false\n }\n }\n)\n\ntype TextVariants = Omit<VariantProps<typeof textStyles>, 'theme'>\n\ntype TextColor = 'default' | 'blue' | 'blue-dark' | 'red'\n\nexport interface TextProps extends TextVariants {\n /** Render as this element or component (e.g. 'h1' or Link). */\n as?: React.ElementType\n /** Additional CSS classes. */\n className?: string\n /** Text children. */\n children?: React.ReactNode\n /** Color override for light theme. */\n colorLight?: TextColor\n /** Color override for dark theme. */\n colorDark?: TextColor\n}\n\n/**\n * A versatile text component with size, color, weight, decoration,\n * transform, opacity, monospace, dimming, and theme-aware defaults.\n */\nexport const Text: React.FC<TextProps> = ({ as, className = '', children, color, colorLight, colorDark, ...variantProps }) => {\n const { theme } = useTheme()\n const effectiveColor = useColorScheme(color, colorLight, colorDark)\n\n const classes = textStyles({\n ...variantProps,\n color: effectiveColor,\n theme\n }) + (className !== '' ? ` ${className}` : '')\n\n const Component = as ?? 'span'\n return <Component className={classes}>{children}</Component>\n}\n\nexport default Text\n"],"names":["textStyles","cva","variants","reset","false","true","theme","light","dark","color","default","blue","red","size","xs","sm","md","lg","xl","weight","normal","medium","bold","italic","underline","lineThrough","transform","none","uppercase","capitalize","opacity","monospace","dim","defaultVariants","Text","_a","as","className","children","colorLight","colorDark","variantProps","__rest","useTheme","effectiveColor","useColorScheme","classes","Object","assign","Component","_jsx"],"mappings":"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"}
|
|
@@ -15,6 +15,7 @@ declare const textStyles: (props?: ({
|
|
|
15
15
|
dim?: boolean | null | undefined;
|
|
16
16
|
} & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;
|
|
17
17
|
type TextVariants = Omit<VariantProps<typeof textStyles>, 'theme'>;
|
|
18
|
+
type TextColor = 'default' | 'blue' | 'blue-dark' | 'red';
|
|
18
19
|
export interface TextProps extends TextVariants {
|
|
19
20
|
/** Render as this element or component (e.g. 'h1' or Link). */
|
|
20
21
|
as?: React.ElementType;
|
|
@@ -22,6 +23,10 @@ export interface TextProps extends TextVariants {
|
|
|
22
23
|
className?: string;
|
|
23
24
|
/** Text children. */
|
|
24
25
|
children?: React.ReactNode;
|
|
26
|
+
/** Color override for light theme. */
|
|
27
|
+
colorLight?: TextColor;
|
|
28
|
+
/** Color override for dark theme. */
|
|
29
|
+
colorDark?: TextColor;
|
|
25
30
|
}
|
|
26
31
|
/**
|
|
27
32
|
* A versatile text component with size, color, weight, decoration,
|
|
@@ -4,6 +4,7 @@ import { __rest } from 'tslib';
|
|
|
4
4
|
import { jsx } from 'react/jsx-runtime';
|
|
5
5
|
import { cva } from 'class-variance-authority';
|
|
6
6
|
import { useTheme } from '../../contexts/ThemeContext.esm.js';
|
|
7
|
+
import { useColorScheme } from '../../hooks/useColorScheme.esm.js';
|
|
7
8
|
|
|
8
9
|
const textStyles = cva('', {
|
|
9
10
|
variants: {
|
|
@@ -95,13 +96,18 @@ const Text = _a => {
|
|
|
95
96
|
var {
|
|
96
97
|
as,
|
|
97
98
|
className = '',
|
|
98
|
-
children
|
|
99
|
+
children,
|
|
100
|
+
color,
|
|
101
|
+
colorLight,
|
|
102
|
+
colorDark
|
|
99
103
|
} = _a,
|
|
100
|
-
variantProps = __rest(_a, ["as", "className", "children"]);
|
|
104
|
+
variantProps = __rest(_a, ["as", "className", "children", "color", "colorLight", "colorDark"]);
|
|
101
105
|
const {
|
|
102
106
|
theme
|
|
103
107
|
} = useTheme();
|
|
108
|
+
const effectiveColor = useColorScheme(color, colorLight, colorDark);
|
|
104
109
|
const classes = textStyles(Object.assign(Object.assign({}, variantProps), {
|
|
110
|
+
color: effectiveColor,
|
|
105
111
|
theme
|
|
106
112
|
})) + (className !== '' ? ` ${className}` : '');
|
|
107
113
|
const Component = as !== null && as !== void 0 ? as : 'span';
|