dash-ui-kit 1.0.93 → 2.0.0-dev
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 +52 -0
- package/dist/react/components/accordion/index.cjs.js +193 -0
- package/dist/react/components/accordion/index.cjs.js.map +1 -0
- package/dist/react/components/accordion/index.esm.js +169 -0
- package/dist/react/components/accordion/index.esm.js.map +1 -0
- package/dist/react/components/avatar/index.cjs.js +39 -0
- package/dist/react/components/avatar/index.cjs.js.map +1 -0
- package/dist/react/components/avatar/index.esm.js +34 -0
- package/dist/react/components/avatar/index.esm.js.map +1 -0
- package/dist/react/components/badge/index.cjs.js +92 -0
- package/dist/react/components/badge/index.cjs.js.map +1 -0
- package/dist/react/components/badge/index.esm.js +87 -0
- package/dist/react/components/badge/index.esm.js.map +1 -0
- package/dist/react/components/bigNumber/index.cjs.js +100 -0
- package/dist/react/components/bigNumber/index.cjs.js.map +1 -0
- package/dist/react/components/bigNumber/index.esm.js +95 -0
- package/dist/react/components/bigNumber/index.esm.js.map +1 -0
- package/dist/react/components/button/index.cjs.js +535 -0
- package/dist/react/components/button/index.cjs.js.map +1 -0
- package/dist/react/components/button/index.d.ts +3 -1
- package/dist/react/components/button/index.esm.js +530 -0
- package/dist/react/components/button/index.esm.js.map +1 -0
- package/dist/react/components/copyButton/index.cjs.js +95 -0
- package/dist/react/components/copyButton/index.cjs.js.map +1 -0
- package/dist/react/components/copyButton/index.esm.js +71 -0
- package/dist/react/components/copyButton/index.esm.js.map +1 -0
- package/dist/react/components/dashLogo/index.cjs.js +74 -0
- package/dist/react/components/dashLogo/index.cjs.js.map +1 -0
- package/dist/react/components/dashLogo/index.esm.js +69 -0
- package/dist/react/components/dashLogo/index.esm.js.map +1 -0
- package/dist/react/components/dateBlock/index.cjs.js +120 -0
- package/dist/react/components/dateBlock/index.cjs.js.map +1 -0
- package/dist/react/components/dateBlock/index.esm.js +115 -0
- package/dist/react/components/dateBlock/index.esm.js.map +1 -0
- package/dist/react/components/dialog/index.cjs.js +292 -0
- package/dist/react/components/dialog/index.cjs.js.map +1 -0
- package/dist/react/components/dialog/index.esm.js +270 -0
- package/dist/react/components/dialog/index.esm.js.map +1 -0
- package/dist/react/components/heading/index.cjs.js +60 -0
- package/dist/react/components/heading/index.cjs.js.map +1 -0
- package/dist/react/components/heading/index.esm.js +58 -0
- package/dist/react/components/heading/index.esm.js.map +1 -0
- package/dist/react/components/icons/index.cjs.js +1173 -0
- package/dist/react/components/icons/index.cjs.js.map +1 -0
- package/dist/react/components/icons/index.d.ts +2 -0
- package/dist/react/components/icons/index.esm.js +1128 -0
- package/dist/react/components/icons/index.esm.js.map +1 -0
- package/dist/react/components/identifier/index.cjs.js +286 -0
- package/dist/react/components/identifier/index.cjs.js.map +1 -0
- package/dist/react/components/identifier/index.esm.js +282 -0
- package/dist/react/components/identifier/index.esm.js.map +1 -0
- package/dist/react/components/index.cjs.js +101 -0
- package/dist/react/components/index.cjs.js.map +1 -0
- package/dist/react/components/index.d.ts +1 -1
- package/dist/react/components/index.esm.js +29 -0
- package/dist/react/components/index.esm.js.map +1 -0
- package/dist/react/components/input/index.cjs.js +237 -0
- package/dist/react/components/input/index.cjs.js.map +1 -0
- package/dist/react/components/input/index.esm.js +232 -0
- package/dist/react/components/input/index.esm.js.map +1 -0
- package/dist/react/components/list/index.cjs.js +49 -0
- package/dist/react/components/list/index.cjs.js.map +1 -0
- package/dist/react/components/list/index.esm.js +47 -0
- package/dist/react/components/list/index.esm.js.map +1 -0
- package/dist/react/components/notActive/index.cjs.js +40 -0
- package/dist/react/components/notActive/index.cjs.js.map +1 -0
- package/dist/react/components/notActive/index.esm.js +38 -0
- package/dist/react/components/notActive/index.esm.js.map +1 -0
- package/dist/react/components/overlayMenu/index.cjs.js +425 -0
- package/dist/react/components/overlayMenu/index.cjs.js.map +1 -0
- package/dist/react/components/overlayMenu/index.esm.js +420 -0
- package/dist/react/components/overlayMenu/index.esm.js.map +1 -0
- package/dist/react/components/overlaySelect/index.cjs.js +345 -0
- package/dist/react/components/overlaySelect/index.cjs.js.map +1 -0
- package/dist/react/components/overlaySelect/index.esm.js +340 -0
- package/dist/react/components/overlaySelect/index.esm.js.map +1 -0
- package/dist/react/components/progressStepBar/index.cjs.js +49 -0
- package/dist/react/components/progressStepBar/index.cjs.js.map +1 -0
- package/dist/react/components/progressStepBar/index.d.ts +2 -1
- package/dist/react/components/progressStepBar/index.esm.js +47 -0
- package/dist/react/components/progressStepBar/index.esm.js.map +1 -0
- package/dist/react/components/select/index.cjs.js +236 -0
- package/dist/react/components/select/index.cjs.js.map +1 -0
- package/dist/react/components/select/index.esm.js +212 -0
- package/dist/react/components/select/index.esm.js.map +1 -0
- package/dist/react/components/switch/index.cjs.js +184 -0
- package/dist/react/components/switch/index.cjs.js.map +1 -0
- package/dist/react/components/switch/index.esm.js +179 -0
- package/dist/react/components/switch/index.esm.js.map +1 -0
- package/dist/react/components/tabs/index.cjs.js +178 -0
- package/dist/react/components/tabs/index.cjs.js.map +1 -0
- package/dist/react/components/tabs/index.esm.js +154 -0
- package/dist/react/components/tabs/index.esm.js.map +1 -0
- package/dist/react/components/text/index.cjs.js +120 -0
- package/dist/react/components/text/index.cjs.js.map +1 -0
- package/dist/react/components/text/index.esm.js +115 -0
- package/dist/react/components/text/index.esm.js.map +1 -0
- package/dist/react/components/textarea/index.cjs.js +256 -0
- package/dist/react/components/textarea/index.cjs.js.map +1 -0
- package/dist/react/components/textarea/index.esm.js +251 -0
- package/dist/react/components/textarea/index.esm.js.map +1 -0
- package/dist/react/components/timeDelta/index.cjs.js +93 -0
- package/dist/react/components/timeDelta/index.cjs.js.map +1 -0
- package/dist/react/components/timeDelta/index.d.ts +1 -1
- package/dist/react/components/timeDelta/index.esm.js +88 -0
- package/dist/react/components/timeDelta/index.esm.js.map +1 -0
- package/dist/react/components/transactionStatusIcon/index.cjs.js +59 -0
- package/dist/react/components/transactionStatusIcon/index.cjs.js.map +1 -0
- package/dist/react/components/transactionStatusIcon/index.esm.js +54 -0
- package/dist/react/components/transactionStatusIcon/index.esm.js.map +1 -0
- package/dist/react/components/valueCard/index.cjs.js +176 -0
- package/dist/react/components/valueCard/index.cjs.js.map +1 -0
- package/dist/react/components/valueCard/index.d.ts +1 -1
- package/dist/react/components/valueCard/index.esm.js +171 -0
- package/dist/react/components/valueCard/index.esm.js.map +1 -0
- package/dist/react/contexts/ThemeContext.cjs.js +79 -0
- package/dist/react/contexts/ThemeContext.cjs.js.map +1 -0
- package/dist/react/contexts/ThemeContext.esm.js +76 -0
- package/dist/react/contexts/ThemeContext.esm.js.map +1 -0
- package/dist/react/contexts/index.cjs.js +11 -0
- package/dist/react/contexts/index.cjs.js.map +1 -0
- package/dist/react/contexts/index.esm.js +4 -0
- package/dist/react/contexts/index.esm.js.map +1 -0
- package/dist/react/hooks/useDebounce.cjs.js +83 -0
- package/dist/react/hooks/useDebounce.cjs.js.map +1 -0
- package/dist/react/hooks/useDebounce.esm.js +78 -0
- package/dist/react/hooks/useDebounce.esm.js.map +1 -0
- package/dist/react/index.cjs.js +99 -12811
- package/dist/react/index.cjs.js.map +1 -1
- package/dist/react/index.d.ts +1 -1
- package/dist/react/index.esm.js +27 -12725
- package/dist/react/index.esm.js.map +1 -1
- package/dist/react/shared/utils/datetime.cjs.js +59 -0
- package/dist/react/shared/utils/datetime.cjs.js.map +1 -0
- package/dist/react/shared/utils/datetime.esm.js +57 -0
- package/dist/react/shared/utils/datetime.esm.js.map +1 -0
- package/dist/react/utils/copyToClipboard.cjs.js +31 -0
- package/dist/react/utils/copyToClipboard.cjs.js.map +1 -0
- package/dist/react/utils/copyToClipboard.esm.js +26 -0
- package/dist/react/utils/copyToClipboard.esm.js.map +1 -0
- package/dist/react/utils/index.d.ts +1 -1
- package/dist/react-native/components/avatar/index.d.ts +26 -0
- package/dist/react-native/components/avatar/index.web.d.ts +24 -0
- package/dist/react-native/components/badge/index.d.ts +51 -0
- package/dist/react-native/components/bigNumber/index.d.ts +26 -0
- package/dist/react-native/components/button/index.d.ts +39 -0
- package/dist/react-native/components/copyButton/index.d.ts +22 -0
- package/dist/react-native/components/copyButton/index.web.d.ts +20 -0
- package/dist/react-native/components/dashLogo/index.d.ts +30 -0
- package/dist/react-native/components/heading/index.d.ts +25 -0
- package/dist/react-native/components/icons/index.d.ts +43 -0
- package/dist/react-native/components/identifier/index.d.ts +47 -0
- package/dist/react-native/components/index.d.ts +15 -0
- package/dist/react-native/components/input/index.d.ts +53 -0
- package/dist/react-native/components/notActive/index.d.ts +16 -0
- package/dist/react-native/components/tabs/index.d.ts +50 -0
- package/dist/react-native/components/text/index.d.ts +28 -0
- package/dist/react-native/components/transactionStatusIcon/index.d.ts +24 -0
- package/dist/react-native/components/valueCard/index.d.ts +43 -0
- package/dist/react-native/hooks/index.d.ts +1 -0
- package/dist/react-native/hooks/useDebounce.d.ts +43 -0
- package/dist/react-native/index.cjs.js +2856 -0
- package/dist/react-native/index.cjs.js.map +1 -0
- package/dist/react-native/index.d.ts +4 -0
- package/dist/react-native/index.esm.js +2808 -0
- package/dist/react-native/index.esm.js.map +1 -0
- package/dist/react-native/styles/index.d.ts +11 -0
- package/dist/react-native/styles/tokens.d.ts +308 -0
- package/dist/react-native/styles/utils.d.ts +65 -0
- package/dist/react-native/utils/clipboard.d.ts +27 -0
- package/dist/react-native/utils/index.d.ts +2 -0
- package/dist/react-native/utils/tw.d.ts +7 -0
- package/dist/shared/constants/colors.d.ts +25 -0
- package/dist/shared/constants/index.d.ts +2 -0
- package/dist/shared/constants/sizes.d.ts +49 -0
- package/dist/shared/index.cjs.js +171 -0
- package/dist/shared/index.cjs.js.map +1 -0
- package/dist/shared/index.d.ts +3 -0
- package/dist/shared/index.esm.js +161 -0
- package/dist/shared/index.esm.js.map +1 -0
- package/dist/shared/types/common.d.ts +33 -0
- package/dist/shared/types/index.d.ts +1 -0
- package/dist/shared/utils/index.d.ts +1 -0
- package/dist/styles.css +1 -1
- package/package.json +50 -8
- /package/dist/{react → shared}/utils/datetime.d.ts +0 -0
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
'use strict';
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
6
|
+
|
|
7
|
+
var tslib = require('tslib');
|
|
8
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
9
|
+
var classVarianceAuthority = require('class-variance-authority');
|
|
10
|
+
var ThemeContext = require('../../contexts/ThemeContext.cjs.js');
|
|
11
|
+
var RadixSelect = require('@radix-ui/react-select');
|
|
12
|
+
|
|
13
|
+
function _interopNamespaceDefault(e) {
|
|
14
|
+
var n = Object.create(null);
|
|
15
|
+
if (e) {
|
|
16
|
+
Object.keys(e).forEach(function (k) {
|
|
17
|
+
if (k !== 'default') {
|
|
18
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
19
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
20
|
+
enumerable: true,
|
|
21
|
+
get: function () { return e[k]; }
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
n.default = e;
|
|
27
|
+
return Object.freeze(n);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
var RadixSelect__namespace = /*#__PURE__*/_interopNamespaceDefault(RadixSelect);
|
|
31
|
+
|
|
32
|
+
const selectTrigger = classVarianceAuthority.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', {
|
|
33
|
+
variants: {
|
|
34
|
+
theme: {
|
|
35
|
+
light: 'text-[#0C1C33] bg-white',
|
|
36
|
+
dark: 'text-white bg-gray-800'
|
|
37
|
+
},
|
|
38
|
+
colorScheme: {
|
|
39
|
+
default: 'focus:ring-blue-500/20',
|
|
40
|
+
brand: 'focus:ring-dash-brand/20',
|
|
41
|
+
error: 'focus:ring-red-500/20',
|
|
42
|
+
success: 'focus:ring-green-500/20'
|
|
43
|
+
},
|
|
44
|
+
size: {
|
|
45
|
+
sm: 'dash-block-sm',
|
|
46
|
+
md: 'dash-block-md',
|
|
47
|
+
xl: 'dash-block-xl'
|
|
48
|
+
},
|
|
49
|
+
border: {
|
|
50
|
+
true: 'outline outline-1 outline-offset-[-1px]',
|
|
51
|
+
false: ''
|
|
52
|
+
},
|
|
53
|
+
disabled: {
|
|
54
|
+
false: '',
|
|
55
|
+
true: 'opacity-60 cursor-not-allowed'
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
compoundVariants: [
|
|
59
|
+
// Outline colors by colorScheme - only when border is true
|
|
60
|
+
{
|
|
61
|
+
colorScheme: 'default',
|
|
62
|
+
border: true,
|
|
63
|
+
class: 'outline-[rgba(12,28,51,0.35)] focus:outline-[rgba(12,28,51,0.6)]'
|
|
64
|
+
}, {
|
|
65
|
+
colorScheme: 'brand',
|
|
66
|
+
border: true,
|
|
67
|
+
class: 'outline-dash-brand/30 focus:outline-dash-brand'
|
|
68
|
+
}, {
|
|
69
|
+
colorScheme: 'error',
|
|
70
|
+
border: true,
|
|
71
|
+
class: 'outline-red-500 focus:outline-red-500'
|
|
72
|
+
}, {
|
|
73
|
+
colorScheme: 'success',
|
|
74
|
+
border: true,
|
|
75
|
+
class: 'outline-green-500 focus:outline-green-500'
|
|
76
|
+
}],
|
|
77
|
+
defaultVariants: {
|
|
78
|
+
theme: 'light',
|
|
79
|
+
colorScheme: 'default',
|
|
80
|
+
size: 'xl',
|
|
81
|
+
border: true,
|
|
82
|
+
disabled: false
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
const selectContent = classVarianceAuthority.cva('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)]', {
|
|
86
|
+
variants: {
|
|
87
|
+
theme: {
|
|
88
|
+
light: 'bg-white border border-gray-200',
|
|
89
|
+
dark: 'bg-gray-800 border border-gray-700'
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
const selectViewport = classVarianceAuthority.cva('overflow-y-auto max-h-[inherit]');
|
|
94
|
+
const selectItem = classVarianceAuthority.cva('relative flex cursor-pointer select-none items-center outline-none focus:bg-gray-100 data-[disabled]:pointer-events-none data-[disabled]:opacity-50', {
|
|
95
|
+
variants: {
|
|
96
|
+
theme: {
|
|
97
|
+
light: 'text-gray-900 focus:bg-gray-100',
|
|
98
|
+
dark: 'text-gray-100 focus:bg-gray-700'
|
|
99
|
+
},
|
|
100
|
+
size: {
|
|
101
|
+
sm: 'dash-block-sm',
|
|
102
|
+
md: 'dash-block-md',
|
|
103
|
+
xl: 'dash-block-xl'
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
const selectIcon = classVarianceAuthority.cva('pointer-events-none flex items-center justify-center transition-transform', {
|
|
108
|
+
variants: {
|
|
109
|
+
size: {
|
|
110
|
+
sm: 'w-3 h-3',
|
|
111
|
+
md: 'w-4 h-4',
|
|
112
|
+
xl: 'w-4 h-4'
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
// Arrow icon
|
|
117
|
+
const ChevronDownIcon = ({
|
|
118
|
+
className
|
|
119
|
+
}) => jsxRuntime.jsx("svg", {
|
|
120
|
+
width: "15",
|
|
121
|
+
height: "15",
|
|
122
|
+
viewBox: "0 0 15 15",
|
|
123
|
+
fill: "none",
|
|
124
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
125
|
+
className: className,
|
|
126
|
+
children: jsxRuntime.jsx("path", {
|
|
127
|
+
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",
|
|
128
|
+
fill: "currentColor",
|
|
129
|
+
fillRule: "evenodd",
|
|
130
|
+
clipRule: "evenodd"
|
|
131
|
+
})
|
|
132
|
+
});
|
|
133
|
+
/**
|
|
134
|
+
* A versatile select component built on Radix UI that adapts to light/dark theme,
|
|
135
|
+
* supports various color schemes, sizes, variants, states, and HTML content in options.
|
|
136
|
+
*
|
|
137
|
+
* @example
|
|
138
|
+
* <Select
|
|
139
|
+
* options={[
|
|
140
|
+
* {value: 'id1', label: 'Option 1'},
|
|
141
|
+
* {value: 'id2', label: 'Option 2', content: <div><strong>Option 2</strong><br/>Description</div>}
|
|
142
|
+
* ]}
|
|
143
|
+
* colorScheme="default"
|
|
144
|
+
* size="xl"
|
|
145
|
+
* border={true}
|
|
146
|
+
* />
|
|
147
|
+
*/
|
|
148
|
+
const Select = _a => {
|
|
149
|
+
var {
|
|
150
|
+
className = '',
|
|
151
|
+
colorScheme,
|
|
152
|
+
size,
|
|
153
|
+
error = false,
|
|
154
|
+
success = false,
|
|
155
|
+
border = true,
|
|
156
|
+
disabled = false,
|
|
157
|
+
options = [],
|
|
158
|
+
showArrow = true,
|
|
159
|
+
value,
|
|
160
|
+
defaultValue,
|
|
161
|
+
onChange,
|
|
162
|
+
placeholder = 'Select an option...',
|
|
163
|
+
name
|
|
164
|
+
} = _a;
|
|
165
|
+
tslib.__rest(_a, ["className", "colorScheme", "size", "error", "success", "border", "disabled", "options", "showArrow", "value", "defaultValue", "onChange", "placeholder", "name"]);
|
|
166
|
+
const {
|
|
167
|
+
theme
|
|
168
|
+
} = ThemeContext.useTheme();
|
|
169
|
+
// Determine color scheme based on state
|
|
170
|
+
let finalColorScheme = colorScheme;
|
|
171
|
+
if (error) finalColorScheme = 'error';else if (success) finalColorScheme = 'success';
|
|
172
|
+
const triggerClasses = selectTrigger({
|
|
173
|
+
theme,
|
|
174
|
+
colorScheme: finalColorScheme,
|
|
175
|
+
size,
|
|
176
|
+
border,
|
|
177
|
+
disabled
|
|
178
|
+
}) + ' ' + className;
|
|
179
|
+
const contentClasses = selectContent({
|
|
180
|
+
theme
|
|
181
|
+
});
|
|
182
|
+
const viewportClasses = selectViewport({});
|
|
183
|
+
const itemClasses = selectItem({
|
|
184
|
+
theme,
|
|
185
|
+
size
|
|
186
|
+
});
|
|
187
|
+
const iconClasses = selectIcon({
|
|
188
|
+
size
|
|
189
|
+
});
|
|
190
|
+
return jsxRuntime.jsxs(RadixSelect__namespace.Root, {
|
|
191
|
+
value: value,
|
|
192
|
+
defaultValue: defaultValue,
|
|
193
|
+
onValueChange: onChange,
|
|
194
|
+
disabled: disabled,
|
|
195
|
+
name: name,
|
|
196
|
+
children: [jsxRuntime.jsxs(RadixSelect__namespace.Trigger, {
|
|
197
|
+
className: triggerClasses,
|
|
198
|
+
children: [jsxRuntime.jsx("div", {
|
|
199
|
+
className: 'w-full flex-1 text-left',
|
|
200
|
+
children: jsxRuntime.jsx(RadixSelect__namespace.Value, {
|
|
201
|
+
placeholder: placeholder
|
|
202
|
+
})
|
|
203
|
+
}), showArrow && jsxRuntime.jsx(RadixSelect__namespace.Icon, {
|
|
204
|
+
asChild: true,
|
|
205
|
+
children: jsxRuntime.jsx(ChevronDownIcon, {
|
|
206
|
+
className: iconClasses
|
|
207
|
+
})
|
|
208
|
+
})]
|
|
209
|
+
}), jsxRuntime.jsx(RadixSelect__namespace.Portal, {
|
|
210
|
+
children: jsxRuntime.jsx(RadixSelect__namespace.Content, {
|
|
211
|
+
className: contentClasses,
|
|
212
|
+
position: 'popper',
|
|
213
|
+
sideOffset: 5,
|
|
214
|
+
children: jsxRuntime.jsx(RadixSelect__namespace.Viewport, {
|
|
215
|
+
className: viewportClasses,
|
|
216
|
+
children: options.map(option => jsxRuntime.jsx(RadixSelect__namespace.Item, {
|
|
217
|
+
value: option.value,
|
|
218
|
+
className: itemClasses,
|
|
219
|
+
disabled: option.disabled,
|
|
220
|
+
children: jsxRuntime.jsx("div", {
|
|
221
|
+
className: 'w-full flex-1 text-left',
|
|
222
|
+
children: jsxRuntime.jsx(RadixSelect__namespace.ItemText, {
|
|
223
|
+
className: 'w-full',
|
|
224
|
+
children: option.content || option.label
|
|
225
|
+
})
|
|
226
|
+
})
|
|
227
|
+
}, option.value))
|
|
228
|
+
})
|
|
229
|
+
})
|
|
230
|
+
})]
|
|
231
|
+
});
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
exports.Select = Select;
|
|
235
|
+
exports.default = Select;
|
|
236
|
+
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -0,0 +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":"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"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { __rest } from 'tslib';
|
|
4
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
|
+
import { cva } from 'class-variance-authority';
|
|
6
|
+
import { useTheme } from '../../contexts/ThemeContext.esm.js';
|
|
7
|
+
import * as RadixSelect from '@radix-ui/react-select';
|
|
8
|
+
|
|
9
|
+
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
|
+
variants: {
|
|
11
|
+
theme: {
|
|
12
|
+
light: 'text-[#0C1C33] bg-white',
|
|
13
|
+
dark: 'text-white bg-gray-800'
|
|
14
|
+
},
|
|
15
|
+
colorScheme: {
|
|
16
|
+
default: 'focus:ring-blue-500/20',
|
|
17
|
+
brand: 'focus:ring-dash-brand/20',
|
|
18
|
+
error: 'focus:ring-red-500/20',
|
|
19
|
+
success: 'focus:ring-green-500/20'
|
|
20
|
+
},
|
|
21
|
+
size: {
|
|
22
|
+
sm: 'dash-block-sm',
|
|
23
|
+
md: 'dash-block-md',
|
|
24
|
+
xl: 'dash-block-xl'
|
|
25
|
+
},
|
|
26
|
+
border: {
|
|
27
|
+
true: 'outline outline-1 outline-offset-[-1px]',
|
|
28
|
+
false: ''
|
|
29
|
+
},
|
|
30
|
+
disabled: {
|
|
31
|
+
false: '',
|
|
32
|
+
true: 'opacity-60 cursor-not-allowed'
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
compoundVariants: [
|
|
36
|
+
// Outline colors by colorScheme - only when border is true
|
|
37
|
+
{
|
|
38
|
+
colorScheme: 'default',
|
|
39
|
+
border: true,
|
|
40
|
+
class: 'outline-[rgba(12,28,51,0.35)] focus:outline-[rgba(12,28,51,0.6)]'
|
|
41
|
+
}, {
|
|
42
|
+
colorScheme: 'brand',
|
|
43
|
+
border: true,
|
|
44
|
+
class: 'outline-dash-brand/30 focus:outline-dash-brand'
|
|
45
|
+
}, {
|
|
46
|
+
colorScheme: 'error',
|
|
47
|
+
border: true,
|
|
48
|
+
class: 'outline-red-500 focus:outline-red-500'
|
|
49
|
+
}, {
|
|
50
|
+
colorScheme: 'success',
|
|
51
|
+
border: true,
|
|
52
|
+
class: 'outline-green-500 focus:outline-green-500'
|
|
53
|
+
}],
|
|
54
|
+
defaultVariants: {
|
|
55
|
+
theme: 'light',
|
|
56
|
+
colorScheme: 'default',
|
|
57
|
+
size: 'xl',
|
|
58
|
+
border: true,
|
|
59
|
+
disabled: false
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
const selectContent = cva('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)]', {
|
|
63
|
+
variants: {
|
|
64
|
+
theme: {
|
|
65
|
+
light: 'bg-white border border-gray-200',
|
|
66
|
+
dark: 'bg-gray-800 border border-gray-700'
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
const selectViewport = cva('overflow-y-auto max-h-[inherit]');
|
|
71
|
+
const selectItem = cva('relative flex cursor-pointer select-none items-center outline-none focus:bg-gray-100 data-[disabled]:pointer-events-none data-[disabled]:opacity-50', {
|
|
72
|
+
variants: {
|
|
73
|
+
theme: {
|
|
74
|
+
light: 'text-gray-900 focus:bg-gray-100',
|
|
75
|
+
dark: 'text-gray-100 focus:bg-gray-700'
|
|
76
|
+
},
|
|
77
|
+
size: {
|
|
78
|
+
sm: 'dash-block-sm',
|
|
79
|
+
md: 'dash-block-md',
|
|
80
|
+
xl: 'dash-block-xl'
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
const selectIcon = cva('pointer-events-none flex items-center justify-center transition-transform', {
|
|
85
|
+
variants: {
|
|
86
|
+
size: {
|
|
87
|
+
sm: 'w-3 h-3',
|
|
88
|
+
md: 'w-4 h-4',
|
|
89
|
+
xl: 'w-4 h-4'
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
// Arrow icon
|
|
94
|
+
const ChevronDownIcon = ({
|
|
95
|
+
className
|
|
96
|
+
}) => jsx("svg", {
|
|
97
|
+
width: "15",
|
|
98
|
+
height: "15",
|
|
99
|
+
viewBox: "0 0 15 15",
|
|
100
|
+
fill: "none",
|
|
101
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
102
|
+
className: className,
|
|
103
|
+
children: jsx("path", {
|
|
104
|
+
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",
|
|
105
|
+
fill: "currentColor",
|
|
106
|
+
fillRule: "evenodd",
|
|
107
|
+
clipRule: "evenodd"
|
|
108
|
+
})
|
|
109
|
+
});
|
|
110
|
+
/**
|
|
111
|
+
* A versatile select component built on Radix UI that adapts to light/dark theme,
|
|
112
|
+
* supports various color schemes, sizes, variants, states, and HTML content in options.
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* <Select
|
|
116
|
+
* options={[
|
|
117
|
+
* {value: 'id1', label: 'Option 1'},
|
|
118
|
+
* {value: 'id2', label: 'Option 2', content: <div><strong>Option 2</strong><br/>Description</div>}
|
|
119
|
+
* ]}
|
|
120
|
+
* colorScheme="default"
|
|
121
|
+
* size="xl"
|
|
122
|
+
* border={true}
|
|
123
|
+
* />
|
|
124
|
+
*/
|
|
125
|
+
const Select = _a => {
|
|
126
|
+
var {
|
|
127
|
+
className = '',
|
|
128
|
+
colorScheme,
|
|
129
|
+
size,
|
|
130
|
+
error = false,
|
|
131
|
+
success = false,
|
|
132
|
+
border = true,
|
|
133
|
+
disabled = false,
|
|
134
|
+
options = [],
|
|
135
|
+
showArrow = true,
|
|
136
|
+
value,
|
|
137
|
+
defaultValue,
|
|
138
|
+
onChange,
|
|
139
|
+
placeholder = 'Select an option...',
|
|
140
|
+
name
|
|
141
|
+
} = _a;
|
|
142
|
+
__rest(_a, ["className", "colorScheme", "size", "error", "success", "border", "disabled", "options", "showArrow", "value", "defaultValue", "onChange", "placeholder", "name"]);
|
|
143
|
+
const {
|
|
144
|
+
theme
|
|
145
|
+
} = useTheme();
|
|
146
|
+
// Determine color scheme based on state
|
|
147
|
+
let finalColorScheme = colorScheme;
|
|
148
|
+
if (error) finalColorScheme = 'error';else if (success) finalColorScheme = 'success';
|
|
149
|
+
const triggerClasses = selectTrigger({
|
|
150
|
+
theme,
|
|
151
|
+
colorScheme: finalColorScheme,
|
|
152
|
+
size,
|
|
153
|
+
border,
|
|
154
|
+
disabled
|
|
155
|
+
}) + ' ' + className;
|
|
156
|
+
const contentClasses = selectContent({
|
|
157
|
+
theme
|
|
158
|
+
});
|
|
159
|
+
const viewportClasses = selectViewport({});
|
|
160
|
+
const itemClasses = selectItem({
|
|
161
|
+
theme,
|
|
162
|
+
size
|
|
163
|
+
});
|
|
164
|
+
const iconClasses = selectIcon({
|
|
165
|
+
size
|
|
166
|
+
});
|
|
167
|
+
return jsxs(RadixSelect.Root, {
|
|
168
|
+
value: value,
|
|
169
|
+
defaultValue: defaultValue,
|
|
170
|
+
onValueChange: onChange,
|
|
171
|
+
disabled: disabled,
|
|
172
|
+
name: name,
|
|
173
|
+
children: [jsxs(RadixSelect.Trigger, {
|
|
174
|
+
className: triggerClasses,
|
|
175
|
+
children: [jsx("div", {
|
|
176
|
+
className: 'w-full flex-1 text-left',
|
|
177
|
+
children: jsx(RadixSelect.Value, {
|
|
178
|
+
placeholder: placeholder
|
|
179
|
+
})
|
|
180
|
+
}), showArrow && jsx(RadixSelect.Icon, {
|
|
181
|
+
asChild: true,
|
|
182
|
+
children: jsx(ChevronDownIcon, {
|
|
183
|
+
className: iconClasses
|
|
184
|
+
})
|
|
185
|
+
})]
|
|
186
|
+
}), jsx(RadixSelect.Portal, {
|
|
187
|
+
children: jsx(RadixSelect.Content, {
|
|
188
|
+
className: contentClasses,
|
|
189
|
+
position: 'popper',
|
|
190
|
+
sideOffset: 5,
|
|
191
|
+
children: jsx(RadixSelect.Viewport, {
|
|
192
|
+
className: viewportClasses,
|
|
193
|
+
children: options.map(option => jsx(RadixSelect.Item, {
|
|
194
|
+
value: option.value,
|
|
195
|
+
className: itemClasses,
|
|
196
|
+
disabled: option.disabled,
|
|
197
|
+
children: jsx("div", {
|
|
198
|
+
className: 'w-full flex-1 text-left',
|
|
199
|
+
children: jsx(RadixSelect.ItemText, {
|
|
200
|
+
className: 'w-full',
|
|
201
|
+
children: option.content || option.label
|
|
202
|
+
})
|
|
203
|
+
})
|
|
204
|
+
}, option.value))
|
|
205
|
+
})
|
|
206
|
+
})
|
|
207
|
+
})]
|
|
208
|
+
});
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
export { Select, Select as default };
|
|
212
|
+
//# sourceMappingURL=index.esm.js.map
|
|
@@ -0,0 +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":"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"}
|