dash-ui-kit 1.0.94 → 2.1.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 +97 -0
- package/dist/react/components/badge/index.cjs.js.map +1 -0
- package/dist/react/components/badge/index.d.ts +10 -1
- package/dist/react/components/badge/index.esm.js +92 -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 +540 -0
- package/dist/react/components/button/index.cjs.js.map +1 -0
- package/dist/react/components/button/index.d.ts +7 -1
- package/dist/react/components/button/index.esm.js +535 -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 +65 -0
- package/dist/react/components/heading/index.cjs.js.map +1 -0
- package/dist/react/components/heading/index.d.ts +4 -1
- package/dist/react/components/heading/index.esm.js +63 -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 +242 -0
- package/dist/react/components/input/index.cjs.js.map +1 -0
- package/dist/react/components/input/index.d.ts +4 -0
- package/dist/react/components/input/index.esm.js +237 -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 +469 -0
- package/dist/react/components/overlayMenu/index.cjs.js.map +1 -0
- package/dist/react/components/overlayMenu/index.d.ts +9 -10
- package/dist/react/components/overlayMenu/index.esm.js +464 -0
- package/dist/react/components/overlayMenu/index.esm.js.map +1 -0
- package/dist/react/components/overlaySelect/index.cjs.js +350 -0
- package/dist/react/components/overlaySelect/index.cjs.js.map +1 -0
- package/dist/react/components/overlaySelect/index.d.ts +4 -0
- package/dist/react/components/overlaySelect/index.esm.js +345 -0
- package/dist/react/components/overlaySelect/index.esm.js.map +1 -0
- package/dist/react/components/progressStepBar/index.cjs.js +54 -0
- package/dist/react/components/progressStepBar/index.cjs.js.map +1 -0
- package/dist/react/components/progressStepBar/index.d.ts +5 -2
- package/dist/react/components/progressStepBar/index.esm.js +52 -0
- package/dist/react/components/progressStepBar/index.esm.js.map +1 -0
- package/dist/react/components/select/index.cjs.js +241 -0
- package/dist/react/components/select/index.cjs.js.map +1 -0
- package/dist/react/components/select/index.d.ts +4 -0
- package/dist/react/components/select/index.esm.js +217 -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 +126 -0
- package/dist/react/components/text/index.cjs.js.map +1 -0
- package/dist/react/components/text/index.d.ts +5 -0
- package/dist/react/components/text/index.esm.js +121 -0
- package/dist/react/components/text/index.esm.js.map +1 -0
- package/dist/react/components/textarea/index.cjs.js +260 -0
- package/dist/react/components/textarea/index.cjs.js.map +1 -0
- package/dist/react/components/textarea/index.d.ts +4 -0
- package/dist/react/components/textarea/index.esm.js +255 -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 +181 -0
- package/dist/react/components/valueCard/index.cjs.js.map +1 -0
- package/dist/react/components/valueCard/index.d.ts +5 -1
- package/dist/react/components/valueCard/index.esm.js +176 -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/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/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 -12833
- package/dist/react/index.cjs.js.map +1 -1
- package/dist/react/index.d.ts +1 -1
- package/dist/react/index.esm.js +27 -12747
- 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 +63 -0
- package/dist/react-native/components/bigNumber/index.d.ts +26 -0
- package/dist/react-native/components/button/index.d.ts +45 -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 +59 -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 +47 -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 +2882 -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 +2833 -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 +3 -0
- package/dist/react-native/utils/resolveColorScheme.d.ts +1 -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,242 @@
|
|
|
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 React = require('react');
|
|
10
|
+
var classVarianceAuthority = require('class-variance-authority');
|
|
11
|
+
var ThemeContext = require('../../contexts/ThemeContext.cjs.js');
|
|
12
|
+
var index = require('../icons/index.cjs.js');
|
|
13
|
+
var useColorScheme = require('../../hooks/useColorScheme.cjs.js');
|
|
14
|
+
|
|
15
|
+
const input = classVarianceAuthority.cva('w-full transition-all font-inter placeholder:text-opacity-60 text-[0.875rem] leading-[1.0625rem]', {
|
|
16
|
+
variants: {
|
|
17
|
+
theme: {
|
|
18
|
+
light: 'text-[#111111] placeholder:text-[rgba(17,17,17,0.6)]',
|
|
19
|
+
dark: 'text-white placeholder:text-gray-400'
|
|
20
|
+
},
|
|
21
|
+
colorScheme: {
|
|
22
|
+
default: 'focus:ring-blue-500/20',
|
|
23
|
+
brand: 'focus:ring-dash-brand/20',
|
|
24
|
+
error: 'focus:ring-red-500/20',
|
|
25
|
+
success: 'focus:ring-green-500/20',
|
|
26
|
+
'light-gray': 'focus:ring-[#6B7280]/20'
|
|
27
|
+
},
|
|
28
|
+
size: {
|
|
29
|
+
sm: 'dash-block-sm font-light',
|
|
30
|
+
md: 'dash-block-md font-light',
|
|
31
|
+
xl: 'dash-block-xl font-light'
|
|
32
|
+
},
|
|
33
|
+
variant: {
|
|
34
|
+
outlined: 'outline outline-1 outline-offset-[-1px]',
|
|
35
|
+
filled: 'border-none'
|
|
36
|
+
},
|
|
37
|
+
disabled: {
|
|
38
|
+
false: '',
|
|
39
|
+
true: 'opacity-60 cursor-not-allowed'
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
compoundVariants: [
|
|
43
|
+
// Outlined variant colors
|
|
44
|
+
{
|
|
45
|
+
variant: 'outlined',
|
|
46
|
+
colorScheme: 'default',
|
|
47
|
+
class: 'outline-[rgba(17,17,17,0.32)] focus:outline-[rgba(17,17,17,0.6)]'
|
|
48
|
+
}, {
|
|
49
|
+
variant: 'outlined',
|
|
50
|
+
colorScheme: 'brand',
|
|
51
|
+
class: 'outline-dash-brand/30 focus:outline-dash-brand'
|
|
52
|
+
}, {
|
|
53
|
+
variant: 'outlined',
|
|
54
|
+
colorScheme: 'error',
|
|
55
|
+
class: 'outline-red-500 focus:outline-red-500'
|
|
56
|
+
}, {
|
|
57
|
+
variant: 'outlined',
|
|
58
|
+
colorScheme: 'success',
|
|
59
|
+
class: 'outline-green-500 focus:outline-green-500'
|
|
60
|
+
}, {
|
|
61
|
+
variant: 'outlined',
|
|
62
|
+
colorScheme: 'light-gray',
|
|
63
|
+
class: 'outline-[#6B7280]/50 focus:outline-[#6B7280]'
|
|
64
|
+
},
|
|
65
|
+
// Outlined variant with focus ring
|
|
66
|
+
{
|
|
67
|
+
variant: 'outlined',
|
|
68
|
+
class: 'focus:ring-2'
|
|
69
|
+
},
|
|
70
|
+
// Outlined variant background
|
|
71
|
+
{
|
|
72
|
+
variant: 'outlined',
|
|
73
|
+
theme: 'light',
|
|
74
|
+
class: 'bg-white'
|
|
75
|
+
}, {
|
|
76
|
+
variant: 'outlined',
|
|
77
|
+
theme: 'dark',
|
|
78
|
+
class: 'bg-gray-800'
|
|
79
|
+
},
|
|
80
|
+
// Filled variant colors
|
|
81
|
+
{
|
|
82
|
+
variant: 'filled',
|
|
83
|
+
colorScheme: 'default',
|
|
84
|
+
class: 'bg-[rgba(76,126,255,0.15)] focus:bg-[rgba(76,126,255,0.2)]'
|
|
85
|
+
}, {
|
|
86
|
+
variant: 'filled',
|
|
87
|
+
colorScheme: 'brand',
|
|
88
|
+
class: 'bg-dash-brand/15 focus:bg-dash-brand/20'
|
|
89
|
+
}, {
|
|
90
|
+
variant: 'filled',
|
|
91
|
+
colorScheme: 'error',
|
|
92
|
+
class: 'bg-red-500/15 focus:bg-red-500/20'
|
|
93
|
+
}, {
|
|
94
|
+
variant: 'filled',
|
|
95
|
+
colorScheme: 'success',
|
|
96
|
+
class: 'bg-green-500/15 focus:bg-green-500/20'
|
|
97
|
+
}, {
|
|
98
|
+
variant: 'filled',
|
|
99
|
+
colorScheme: 'light-gray',
|
|
100
|
+
class: 'bg-[#0C1C33]/5 focus:bg-[#0C1C33]/10'
|
|
101
|
+
},
|
|
102
|
+
// Filled variant with focus ring
|
|
103
|
+
{
|
|
104
|
+
variant: 'filled',
|
|
105
|
+
class: 'focus:ring-2'
|
|
106
|
+
}],
|
|
107
|
+
defaultVariants: {
|
|
108
|
+
theme: 'light',
|
|
109
|
+
colorScheme: 'default',
|
|
110
|
+
size: 'xl',
|
|
111
|
+
variant: 'outlined',
|
|
112
|
+
disabled: false
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
/**
|
|
116
|
+
* A versatile input component that adapts to light/dark theme,
|
|
117
|
+
* supports various color schemes, sizes, variants, and states.
|
|
118
|
+
* For password inputs, includes a toggleable eye icon.
|
|
119
|
+
* Supports prefix text or elements before input content.
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* <Input
|
|
123
|
+
* type='password'
|
|
124
|
+
* placeholder='Enter password'
|
|
125
|
+
* colorScheme='brand'
|
|
126
|
+
* size='xl'
|
|
127
|
+
* prefix="https://"
|
|
128
|
+
* />
|
|
129
|
+
*/
|
|
130
|
+
const Input = _a => {
|
|
131
|
+
var _b;
|
|
132
|
+
var {
|
|
133
|
+
className = '',
|
|
134
|
+
colorScheme,
|
|
135
|
+
colorSchemeLight,
|
|
136
|
+
colorSchemeDark,
|
|
137
|
+
size,
|
|
138
|
+
variant,
|
|
139
|
+
error = false,
|
|
140
|
+
success = false,
|
|
141
|
+
disabled = false,
|
|
142
|
+
type,
|
|
143
|
+
prefix,
|
|
144
|
+
prefixClassName = '',
|
|
145
|
+
showPasswordToggle = true
|
|
146
|
+
} = _a,
|
|
147
|
+
props = tslib.__rest(_a, ["className", "colorScheme", "colorSchemeLight", "colorSchemeDark", "size", "variant", "error", "success", "disabled", "type", "prefix", "prefixClassName", "showPasswordToggle"]);
|
|
148
|
+
const {
|
|
149
|
+
theme
|
|
150
|
+
} = ThemeContext.useTheme();
|
|
151
|
+
const [showPassword, setShowPassword] = React.useState(false);
|
|
152
|
+
const [prefixWidth, setPrefixWidth] = React.useState(0);
|
|
153
|
+
const prefixRef = React.useRef(null);
|
|
154
|
+
const effectiveColorScheme = (_b = useColorScheme.useColorScheme(colorScheme, colorSchemeLight, colorSchemeDark)) !== null && _b !== void 0 ? _b : 'default';
|
|
155
|
+
// Determine color scheme based on state
|
|
156
|
+
let finalColorScheme = effectiveColorScheme;
|
|
157
|
+
if (error) finalColorScheme = 'error';else if (success) finalColorScheme = 'success';
|
|
158
|
+
const classes = input({
|
|
159
|
+
theme,
|
|
160
|
+
colorScheme: finalColorScheme,
|
|
161
|
+
size,
|
|
162
|
+
variant,
|
|
163
|
+
disabled
|
|
164
|
+
}) + ' ' + className;
|
|
165
|
+
const isPassword = type === 'password';
|
|
166
|
+
const inputType = isPassword && showPassword ? 'text' : type;
|
|
167
|
+
const hasPrefix = Boolean(prefix);
|
|
168
|
+
const togglePasswordVisibility = () => {
|
|
169
|
+
setShowPassword(!showPassword);
|
|
170
|
+
};
|
|
171
|
+
// Measure actual prefix width
|
|
172
|
+
React.useEffect(() => {
|
|
173
|
+
if (prefixRef.current) {
|
|
174
|
+
const width = prefixRef.current.offsetWidth;
|
|
175
|
+
// Convert px to rem (assuming 16px base) and add base padding (1rem) + extra space (0.5rem)
|
|
176
|
+
setPrefixWidth(width / 16 + 1.5);
|
|
177
|
+
}
|
|
178
|
+
}, [prefix]);
|
|
179
|
+
// Render with prefix
|
|
180
|
+
if (hasPrefix) {
|
|
181
|
+
return jsxRuntime.jsxs("div", {
|
|
182
|
+
className: 'relative',
|
|
183
|
+
children: [jsxRuntime.jsx("div", {
|
|
184
|
+
ref: prefixRef,
|
|
185
|
+
className: `absolute left-4 top-1/2 -translate-y-1/2 z-10 text-[0.875rem] opacity-60 pointer-events-none select-none ${prefixClassName}`,
|
|
186
|
+
children: prefix
|
|
187
|
+
}), jsxRuntime.jsx("input", Object.assign({
|
|
188
|
+
className: `${classes}${isPassword && showPasswordToggle ? ' pr-12' : ''}`,
|
|
189
|
+
style: {
|
|
190
|
+
paddingLeft: prefixWidth ? `${prefixWidth}rem` : '1rem'
|
|
191
|
+
},
|
|
192
|
+
disabled: disabled,
|
|
193
|
+
type: inputType
|
|
194
|
+
}, props)), isPassword && showPasswordToggle && jsxRuntime.jsx("button", {
|
|
195
|
+
type: 'button',
|
|
196
|
+
className: 'absolute right-4 top-1/2 -translate-y-1/2 opacity-50 hover:opacity-70 transition-opacity cursor-pointer focus:outline-none',
|
|
197
|
+
onClick: togglePasswordVisibility,
|
|
198
|
+
tabIndex: -1,
|
|
199
|
+
children: showPassword ? jsxRuntime.jsx(index.EyeClosedIcon, {
|
|
200
|
+
size: 16,
|
|
201
|
+
color: '#0C1C33'
|
|
202
|
+
}) : jsxRuntime.jsx(index.EyeOpenIcon, {
|
|
203
|
+
size: 16,
|
|
204
|
+
color: '#0C1C33'
|
|
205
|
+
})
|
|
206
|
+
})]
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
// Render password input without prefix
|
|
210
|
+
if (isPassword) {
|
|
211
|
+
return jsxRuntime.jsxs("div", {
|
|
212
|
+
className: 'relative',
|
|
213
|
+
children: [jsxRuntime.jsx("input", Object.assign({
|
|
214
|
+
className: classes + (showPasswordToggle ? ' pr-12' : ''),
|
|
215
|
+
disabled: disabled,
|
|
216
|
+
type: inputType
|
|
217
|
+
}, props)), showPasswordToggle && jsxRuntime.jsx("button", {
|
|
218
|
+
type: 'button',
|
|
219
|
+
className: 'absolute right-4 top-1/2 -translate-y-1/2 opacity-50 hover:opacity-70 transition-opacity cursor-pointer focus:outline-none',
|
|
220
|
+
onClick: togglePasswordVisibility,
|
|
221
|
+
tabIndex: -1,
|
|
222
|
+
children: showPassword ? jsxRuntime.jsx(index.EyeClosedIcon, {
|
|
223
|
+
size: 16,
|
|
224
|
+
color: '#0C1C33'
|
|
225
|
+
}) : jsxRuntime.jsx(index.EyeOpenIcon, {
|
|
226
|
+
size: 16,
|
|
227
|
+
color: '#0C1C33'
|
|
228
|
+
})
|
|
229
|
+
})]
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
// Regular input without prefix
|
|
233
|
+
return jsxRuntime.jsx("input", Object.assign({
|
|
234
|
+
className: classes,
|
|
235
|
+
disabled: disabled,
|
|
236
|
+
type: inputType
|
|
237
|
+
}, props));
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
exports.Input = Input;
|
|
241
|
+
exports.default = Input;
|
|
242
|
+
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../../../src/react/components/input/index.tsx"],"sourcesContent":["import React, { InputHTMLAttributes, useState, useRef, useEffect } from 'react'\nimport { cva, VariantProps } from 'class-variance-authority'\nimport { useTheme } from '../../contexts/ThemeContext'\nimport { EyeOpenIcon, EyeClosedIcon } from '../icons'\nimport { useColorScheme } from '../../hooks/useColorScheme'\n\nconst input = cva(\n 'w-full transition-all font-inter placeholder:text-opacity-60 text-[0.875rem] leading-[1.0625rem]',\n {\n variants: {\n theme: {\n light: 'text-[#111111] placeholder:text-[rgba(17,17,17,0.6)]',\n dark: 'text-white placeholder:text-gray-400'\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 'light-gray': 'focus:ring-[#6B7280]/20'\n },\n size: {\n sm: 'dash-block-sm font-light',\n md: 'dash-block-md font-light',\n xl: 'dash-block-xl font-light'\n },\n variant: {\n outlined: 'outline outline-1 outline-offset-[-1px]',\n filled: 'border-none'\n },\n disabled: {\n false: '',\n true: 'opacity-60 cursor-not-allowed'\n }\n },\n compoundVariants: [\n // Outlined variant colors\n {\n variant: 'outlined',\n colorScheme: 'default',\n class: 'outline-[rgba(17,17,17,0.32)] focus:outline-[rgba(17,17,17,0.6)]'\n },\n {\n variant: 'outlined',\n colorScheme: 'brand',\n class: 'outline-dash-brand/30 focus:outline-dash-brand'\n },\n {\n variant: 'outlined',\n colorScheme: 'error',\n class: 'outline-red-500 focus:outline-red-500'\n },\n {\n variant: 'outlined',\n colorScheme: 'success',\n class: 'outline-green-500 focus:outline-green-500'\n },\n {\n variant: 'outlined',\n colorScheme: 'light-gray',\n class: 'outline-[#6B7280]/50 focus:outline-[#6B7280]'\n },\n // Outlined variant with focus ring\n {\n variant: 'outlined',\n class: 'focus:ring-2'\n },\n // Outlined variant background\n {\n variant: 'outlined',\n theme: 'light',\n class: 'bg-white'\n },\n {\n variant: 'outlined',\n theme: 'dark',\n class: 'bg-gray-800'\n },\n // Filled variant colors\n {\n variant: 'filled',\n colorScheme: 'default',\n class: 'bg-[rgba(76,126,255,0.15)] focus:bg-[rgba(76,126,255,0.2)]'\n },\n {\n variant: 'filled',\n colorScheme: 'brand',\n class: 'bg-dash-brand/15 focus:bg-dash-brand/20'\n },\n {\n variant: 'filled',\n colorScheme: 'error',\n class: 'bg-red-500/15 focus:bg-red-500/20'\n },\n {\n variant: 'filled',\n colorScheme: 'success',\n class: 'bg-green-500/15 focus:bg-green-500/20'\n },\n {\n variant: 'filled',\n colorScheme: 'light-gray',\n class: 'bg-[#0C1C33]/5 focus:bg-[#0C1C33]/10'\n },\n // Filled variant with focus ring\n {\n variant: 'filled',\n class: 'focus:ring-2'\n }\n ],\n defaultVariants: {\n theme: 'light',\n colorScheme: 'default',\n size: 'xl',\n variant: 'outlined',\n disabled: false\n }\n }\n)\n\ntype InputVariants = VariantProps<typeof input>\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix'>, Omit<InputVariants, 'theme' | 'disabled'> {\n className?: string\n error?: boolean\n success?: boolean\n prefix?: string | React.ReactNode\n prefixClassName?: string\n /** Color scheme override for light theme */\n colorSchemeLight?: 'default' | 'brand' | 'error' | 'success' | 'light-gray'\n /** Color scheme override for dark theme */\n colorSchemeDark?: 'default' | 'brand' | 'error' | 'success' | 'light-gray'\n /**\n * Controls visibility toggle for password inputs. When false, the eye icon is hidden and no extra right padding is applied.\n * Defaults to true.\n */\n showPasswordToggle?: boolean\n}\n\n/**\n * A versatile input component that adapts to light/dark theme,\n * supports various color schemes, sizes, variants, and states.\n * For password inputs, includes a toggleable eye icon.\n * Supports prefix text or elements before input content.\n *\n * @example\n * <Input\n * type='password'\n * placeholder='Enter password'\n * colorScheme='brand'\n * size='xl'\n * prefix=\"https://\"\n * />\n */\nexport const Input: React.FC<InputProps> = ({\n className = '',\n colorScheme,\n colorSchemeLight,\n colorSchemeDark,\n size,\n variant,\n error = false,\n success = false,\n disabled = false,\n type,\n prefix,\n prefixClassName = '',\n showPasswordToggle = true,\n ...props\n}) => {\n const { theme } = useTheme()\n const [showPassword, setShowPassword] = useState(false)\n const [prefixWidth, setPrefixWidth] = useState(0)\n const prefixRef = useRef<HTMLDivElement>(null)\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 classes = input({\n theme,\n colorScheme: finalColorScheme,\n size,\n variant,\n disabled\n }) + ' ' + className\n\n const isPassword = type === 'password'\n const inputType = isPassword && showPassword ? 'text' : type\n const hasPrefix = Boolean(prefix)\n\n const togglePasswordVisibility = (): void => {\n setShowPassword(!showPassword)\n }\n\n // Measure actual prefix width\n useEffect(() => {\n if (prefixRef.current) {\n const width = prefixRef.current.offsetWidth\n // Convert px to rem (assuming 16px base) and add base padding (1rem) + extra space (0.5rem)\n setPrefixWidth(width / 16 + 1.5)\n }\n }, [prefix])\n\n // Render with prefix\n if (hasPrefix) {\n return (\n <div className='relative'>\n <div \n ref={prefixRef}\n className={`absolute left-4 top-1/2 -translate-y-1/2 z-10 text-[0.875rem] opacity-60 pointer-events-none select-none ${prefixClassName}`}\n >\n {prefix}\n </div>\n <input\n className={`${classes}${isPassword && showPasswordToggle ? ' pr-12' : ''}`}\n style={{ paddingLeft: prefixWidth ? `${prefixWidth}rem` : '1rem' }}\n disabled={disabled}\n type={inputType}\n {...props}\n />\n {isPassword && showPasswordToggle && (\n <button\n type='button'\n className='absolute right-4 top-1/2 -translate-y-1/2 opacity-50 hover:opacity-70 transition-opacity cursor-pointer focus:outline-none'\n onClick={togglePasswordVisibility}\n tabIndex={-1}\n >\n {showPassword\n ? <EyeClosedIcon size={16} color='#0C1C33' />\n : <EyeOpenIcon size={16} color='#0C1C33' />}\n </button>\n )}\n </div>\n )\n }\n\n // Render password input without prefix\n if (isPassword) {\n return (\n <div className='relative'>\n <input\n className={classes + (showPasswordToggle ? ' pr-12' : '')}\n disabled={disabled}\n type={inputType}\n {...props}\n />\n {showPasswordToggle && (\n <button\n type='button'\n className='absolute right-4 top-1/2 -translate-y-1/2 opacity-50 hover:opacity-70 transition-opacity cursor-pointer focus:outline-none'\n onClick={togglePasswordVisibility}\n tabIndex={-1}\n >\n {showPassword\n ? <EyeClosedIcon size={16} color='#0C1C33' />\n : <EyeOpenIcon size={16} color='#0C1C33' />}\n </button>\n )}\n </div>\n )\n }\n\n // Regular input without prefix\n return (\n <input\n className={classes}\n disabled={disabled}\n type={inputType}\n {...props}\n />\n )\n}\n\nexport default Input "],"names":["input","cva","variants","theme","light","dark","colorScheme","default","brand","error","success","size","sm","md","xl","variant","outlined","filled","disabled","false","true","compoundVariants","class","defaultVariants","Input","_a","className","colorSchemeLight","colorSchemeDark","type","prefix","prefixClassName","showPasswordToggle","props","__rest","useTheme","showPassword","setShowPassword","useState","prefixWidth","setPrefixWidth","prefixRef","useRef","effectiveColorScheme","_b","useColorScheme","finalColorScheme","classes","isPassword","inputType","hasPrefix","Boolean","togglePasswordVisibility","useEffect","current","width","offsetWidth","_jsxs","children","_jsx","ref","Object","assign","style","paddingLeft","onClick","tabIndex","EyeClosedIcon","color","EyeOpenIcon"],"mappings":"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"}
|
|
@@ -14,6 +14,10 @@ export interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>,
|
|
|
14
14
|
success?: boolean;
|
|
15
15
|
prefix?: string | React.ReactNode;
|
|
16
16
|
prefixClassName?: string;
|
|
17
|
+
/** Color scheme override for light theme */
|
|
18
|
+
colorSchemeLight?: 'default' | 'brand' | 'error' | 'success' | 'light-gray';
|
|
19
|
+
/** Color scheme override for dark theme */
|
|
20
|
+
colorSchemeDark?: 'default' | 'brand' | 'error' | 'success' | 'light-gray';
|
|
17
21
|
/**
|
|
18
22
|
* Controls visibility toggle for password inputs. When false, the eye icon is hidden and no extra right padding is applied.
|
|
19
23
|
* Defaults to true.
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { __rest } from 'tslib';
|
|
4
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
|
+
import { useState, useRef, useEffect } from 'react';
|
|
6
|
+
import { cva } from 'class-variance-authority';
|
|
7
|
+
import { useTheme } from '../../contexts/ThemeContext.esm.js';
|
|
8
|
+
import { EyeClosedIcon, EyeOpenIcon } from '../icons/index.esm.js';
|
|
9
|
+
import { useColorScheme } from '../../hooks/useColorScheme.esm.js';
|
|
10
|
+
|
|
11
|
+
const input = cva('w-full transition-all font-inter placeholder:text-opacity-60 text-[0.875rem] leading-[1.0625rem]', {
|
|
12
|
+
variants: {
|
|
13
|
+
theme: {
|
|
14
|
+
light: 'text-[#111111] placeholder:text-[rgba(17,17,17,0.6)]',
|
|
15
|
+
dark: 'text-white placeholder:text-gray-400'
|
|
16
|
+
},
|
|
17
|
+
colorScheme: {
|
|
18
|
+
default: 'focus:ring-blue-500/20',
|
|
19
|
+
brand: 'focus:ring-dash-brand/20',
|
|
20
|
+
error: 'focus:ring-red-500/20',
|
|
21
|
+
success: 'focus:ring-green-500/20',
|
|
22
|
+
'light-gray': 'focus:ring-[#6B7280]/20'
|
|
23
|
+
},
|
|
24
|
+
size: {
|
|
25
|
+
sm: 'dash-block-sm font-light',
|
|
26
|
+
md: 'dash-block-md font-light',
|
|
27
|
+
xl: 'dash-block-xl font-light'
|
|
28
|
+
},
|
|
29
|
+
variant: {
|
|
30
|
+
outlined: 'outline outline-1 outline-offset-[-1px]',
|
|
31
|
+
filled: 'border-none'
|
|
32
|
+
},
|
|
33
|
+
disabled: {
|
|
34
|
+
false: '',
|
|
35
|
+
true: 'opacity-60 cursor-not-allowed'
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
compoundVariants: [
|
|
39
|
+
// Outlined variant colors
|
|
40
|
+
{
|
|
41
|
+
variant: 'outlined',
|
|
42
|
+
colorScheme: 'default',
|
|
43
|
+
class: 'outline-[rgba(17,17,17,0.32)] focus:outline-[rgba(17,17,17,0.6)]'
|
|
44
|
+
}, {
|
|
45
|
+
variant: 'outlined',
|
|
46
|
+
colorScheme: 'brand',
|
|
47
|
+
class: 'outline-dash-brand/30 focus:outline-dash-brand'
|
|
48
|
+
}, {
|
|
49
|
+
variant: 'outlined',
|
|
50
|
+
colorScheme: 'error',
|
|
51
|
+
class: 'outline-red-500 focus:outline-red-500'
|
|
52
|
+
}, {
|
|
53
|
+
variant: 'outlined',
|
|
54
|
+
colorScheme: 'success',
|
|
55
|
+
class: 'outline-green-500 focus:outline-green-500'
|
|
56
|
+
}, {
|
|
57
|
+
variant: 'outlined',
|
|
58
|
+
colorScheme: 'light-gray',
|
|
59
|
+
class: 'outline-[#6B7280]/50 focus:outline-[#6B7280]'
|
|
60
|
+
},
|
|
61
|
+
// Outlined variant with focus ring
|
|
62
|
+
{
|
|
63
|
+
variant: 'outlined',
|
|
64
|
+
class: 'focus:ring-2'
|
|
65
|
+
},
|
|
66
|
+
// Outlined variant background
|
|
67
|
+
{
|
|
68
|
+
variant: 'outlined',
|
|
69
|
+
theme: 'light',
|
|
70
|
+
class: 'bg-white'
|
|
71
|
+
}, {
|
|
72
|
+
variant: 'outlined',
|
|
73
|
+
theme: 'dark',
|
|
74
|
+
class: 'bg-gray-800'
|
|
75
|
+
},
|
|
76
|
+
// Filled variant colors
|
|
77
|
+
{
|
|
78
|
+
variant: 'filled',
|
|
79
|
+
colorScheme: 'default',
|
|
80
|
+
class: 'bg-[rgba(76,126,255,0.15)] focus:bg-[rgba(76,126,255,0.2)]'
|
|
81
|
+
}, {
|
|
82
|
+
variant: 'filled',
|
|
83
|
+
colorScheme: 'brand',
|
|
84
|
+
class: 'bg-dash-brand/15 focus:bg-dash-brand/20'
|
|
85
|
+
}, {
|
|
86
|
+
variant: 'filled',
|
|
87
|
+
colorScheme: 'error',
|
|
88
|
+
class: 'bg-red-500/15 focus:bg-red-500/20'
|
|
89
|
+
}, {
|
|
90
|
+
variant: 'filled',
|
|
91
|
+
colorScheme: 'success',
|
|
92
|
+
class: 'bg-green-500/15 focus:bg-green-500/20'
|
|
93
|
+
}, {
|
|
94
|
+
variant: 'filled',
|
|
95
|
+
colorScheme: 'light-gray',
|
|
96
|
+
class: 'bg-[#0C1C33]/5 focus:bg-[#0C1C33]/10'
|
|
97
|
+
},
|
|
98
|
+
// Filled variant with focus ring
|
|
99
|
+
{
|
|
100
|
+
variant: 'filled',
|
|
101
|
+
class: 'focus:ring-2'
|
|
102
|
+
}],
|
|
103
|
+
defaultVariants: {
|
|
104
|
+
theme: 'light',
|
|
105
|
+
colorScheme: 'default',
|
|
106
|
+
size: 'xl',
|
|
107
|
+
variant: 'outlined',
|
|
108
|
+
disabled: false
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
/**
|
|
112
|
+
* A versatile input component that adapts to light/dark theme,
|
|
113
|
+
* supports various color schemes, sizes, variants, and states.
|
|
114
|
+
* For password inputs, includes a toggleable eye icon.
|
|
115
|
+
* Supports prefix text or elements before input content.
|
|
116
|
+
*
|
|
117
|
+
* @example
|
|
118
|
+
* <Input
|
|
119
|
+
* type='password'
|
|
120
|
+
* placeholder='Enter password'
|
|
121
|
+
* colorScheme='brand'
|
|
122
|
+
* size='xl'
|
|
123
|
+
* prefix="https://"
|
|
124
|
+
* />
|
|
125
|
+
*/
|
|
126
|
+
const Input = _a => {
|
|
127
|
+
var _b;
|
|
128
|
+
var {
|
|
129
|
+
className = '',
|
|
130
|
+
colorScheme,
|
|
131
|
+
colorSchemeLight,
|
|
132
|
+
colorSchemeDark,
|
|
133
|
+
size,
|
|
134
|
+
variant,
|
|
135
|
+
error = false,
|
|
136
|
+
success = false,
|
|
137
|
+
disabled = false,
|
|
138
|
+
type,
|
|
139
|
+
prefix,
|
|
140
|
+
prefixClassName = '',
|
|
141
|
+
showPasswordToggle = true
|
|
142
|
+
} = _a,
|
|
143
|
+
props = __rest(_a, ["className", "colorScheme", "colorSchemeLight", "colorSchemeDark", "size", "variant", "error", "success", "disabled", "type", "prefix", "prefixClassName", "showPasswordToggle"]);
|
|
144
|
+
const {
|
|
145
|
+
theme
|
|
146
|
+
} = useTheme();
|
|
147
|
+
const [showPassword, setShowPassword] = useState(false);
|
|
148
|
+
const [prefixWidth, setPrefixWidth] = useState(0);
|
|
149
|
+
const prefixRef = useRef(null);
|
|
150
|
+
const effectiveColorScheme = (_b = useColorScheme(colorScheme, colorSchemeLight, colorSchemeDark)) !== null && _b !== void 0 ? _b : 'default';
|
|
151
|
+
// Determine color scheme based on state
|
|
152
|
+
let finalColorScheme = effectiveColorScheme;
|
|
153
|
+
if (error) finalColorScheme = 'error';else if (success) finalColorScheme = 'success';
|
|
154
|
+
const classes = input({
|
|
155
|
+
theme,
|
|
156
|
+
colorScheme: finalColorScheme,
|
|
157
|
+
size,
|
|
158
|
+
variant,
|
|
159
|
+
disabled
|
|
160
|
+
}) + ' ' + className;
|
|
161
|
+
const isPassword = type === 'password';
|
|
162
|
+
const inputType = isPassword && showPassword ? 'text' : type;
|
|
163
|
+
const hasPrefix = Boolean(prefix);
|
|
164
|
+
const togglePasswordVisibility = () => {
|
|
165
|
+
setShowPassword(!showPassword);
|
|
166
|
+
};
|
|
167
|
+
// Measure actual prefix width
|
|
168
|
+
useEffect(() => {
|
|
169
|
+
if (prefixRef.current) {
|
|
170
|
+
const width = prefixRef.current.offsetWidth;
|
|
171
|
+
// Convert px to rem (assuming 16px base) and add base padding (1rem) + extra space (0.5rem)
|
|
172
|
+
setPrefixWidth(width / 16 + 1.5);
|
|
173
|
+
}
|
|
174
|
+
}, [prefix]);
|
|
175
|
+
// Render with prefix
|
|
176
|
+
if (hasPrefix) {
|
|
177
|
+
return jsxs("div", {
|
|
178
|
+
className: 'relative',
|
|
179
|
+
children: [jsx("div", {
|
|
180
|
+
ref: prefixRef,
|
|
181
|
+
className: `absolute left-4 top-1/2 -translate-y-1/2 z-10 text-[0.875rem] opacity-60 pointer-events-none select-none ${prefixClassName}`,
|
|
182
|
+
children: prefix
|
|
183
|
+
}), jsx("input", Object.assign({
|
|
184
|
+
className: `${classes}${isPassword && showPasswordToggle ? ' pr-12' : ''}`,
|
|
185
|
+
style: {
|
|
186
|
+
paddingLeft: prefixWidth ? `${prefixWidth}rem` : '1rem'
|
|
187
|
+
},
|
|
188
|
+
disabled: disabled,
|
|
189
|
+
type: inputType
|
|
190
|
+
}, props)), isPassword && showPasswordToggle && jsx("button", {
|
|
191
|
+
type: 'button',
|
|
192
|
+
className: 'absolute right-4 top-1/2 -translate-y-1/2 opacity-50 hover:opacity-70 transition-opacity cursor-pointer focus:outline-none',
|
|
193
|
+
onClick: togglePasswordVisibility,
|
|
194
|
+
tabIndex: -1,
|
|
195
|
+
children: showPassword ? jsx(EyeClosedIcon, {
|
|
196
|
+
size: 16,
|
|
197
|
+
color: '#0C1C33'
|
|
198
|
+
}) : jsx(EyeOpenIcon, {
|
|
199
|
+
size: 16,
|
|
200
|
+
color: '#0C1C33'
|
|
201
|
+
})
|
|
202
|
+
})]
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
// Render password input without prefix
|
|
206
|
+
if (isPassword) {
|
|
207
|
+
return jsxs("div", {
|
|
208
|
+
className: 'relative',
|
|
209
|
+
children: [jsx("input", Object.assign({
|
|
210
|
+
className: classes + (showPasswordToggle ? ' pr-12' : ''),
|
|
211
|
+
disabled: disabled,
|
|
212
|
+
type: inputType
|
|
213
|
+
}, props)), showPasswordToggle && jsx("button", {
|
|
214
|
+
type: 'button',
|
|
215
|
+
className: 'absolute right-4 top-1/2 -translate-y-1/2 opacity-50 hover:opacity-70 transition-opacity cursor-pointer focus:outline-none',
|
|
216
|
+
onClick: togglePasswordVisibility,
|
|
217
|
+
tabIndex: -1,
|
|
218
|
+
children: showPassword ? jsx(EyeClosedIcon, {
|
|
219
|
+
size: 16,
|
|
220
|
+
color: '#0C1C33'
|
|
221
|
+
}) : jsx(EyeOpenIcon, {
|
|
222
|
+
size: 16,
|
|
223
|
+
color: '#0C1C33'
|
|
224
|
+
})
|
|
225
|
+
})]
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
// Regular input without prefix
|
|
229
|
+
return jsx("input", Object.assign({
|
|
230
|
+
className: classes,
|
|
231
|
+
disabled: disabled,
|
|
232
|
+
type: inputType
|
|
233
|
+
}, props));
|
|
234
|
+
};
|
|
235
|
+
|
|
236
|
+
export { Input, Input as default };
|
|
237
|
+
//# sourceMappingURL=index.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../../../src/react/components/input/index.tsx"],"sourcesContent":["import React, { InputHTMLAttributes, useState, useRef, useEffect } from 'react'\nimport { cva, VariantProps } from 'class-variance-authority'\nimport { useTheme } from '../../contexts/ThemeContext'\nimport { EyeOpenIcon, EyeClosedIcon } from '../icons'\nimport { useColorScheme } from '../../hooks/useColorScheme'\n\nconst input = cva(\n 'w-full transition-all font-inter placeholder:text-opacity-60 text-[0.875rem] leading-[1.0625rem]',\n {\n variants: {\n theme: {\n light: 'text-[#111111] placeholder:text-[rgba(17,17,17,0.6)]',\n dark: 'text-white placeholder:text-gray-400'\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 'light-gray': 'focus:ring-[#6B7280]/20'\n },\n size: {\n sm: 'dash-block-sm font-light',\n md: 'dash-block-md font-light',\n xl: 'dash-block-xl font-light'\n },\n variant: {\n outlined: 'outline outline-1 outline-offset-[-1px]',\n filled: 'border-none'\n },\n disabled: {\n false: '',\n true: 'opacity-60 cursor-not-allowed'\n }\n },\n compoundVariants: [\n // Outlined variant colors\n {\n variant: 'outlined',\n colorScheme: 'default',\n class: 'outline-[rgba(17,17,17,0.32)] focus:outline-[rgba(17,17,17,0.6)]'\n },\n {\n variant: 'outlined',\n colorScheme: 'brand',\n class: 'outline-dash-brand/30 focus:outline-dash-brand'\n },\n {\n variant: 'outlined',\n colorScheme: 'error',\n class: 'outline-red-500 focus:outline-red-500'\n },\n {\n variant: 'outlined',\n colorScheme: 'success',\n class: 'outline-green-500 focus:outline-green-500'\n },\n {\n variant: 'outlined',\n colorScheme: 'light-gray',\n class: 'outline-[#6B7280]/50 focus:outline-[#6B7280]'\n },\n // Outlined variant with focus ring\n {\n variant: 'outlined',\n class: 'focus:ring-2'\n },\n // Outlined variant background\n {\n variant: 'outlined',\n theme: 'light',\n class: 'bg-white'\n },\n {\n variant: 'outlined',\n theme: 'dark',\n class: 'bg-gray-800'\n },\n // Filled variant colors\n {\n variant: 'filled',\n colorScheme: 'default',\n class: 'bg-[rgba(76,126,255,0.15)] focus:bg-[rgba(76,126,255,0.2)]'\n },\n {\n variant: 'filled',\n colorScheme: 'brand',\n class: 'bg-dash-brand/15 focus:bg-dash-brand/20'\n },\n {\n variant: 'filled',\n colorScheme: 'error',\n class: 'bg-red-500/15 focus:bg-red-500/20'\n },\n {\n variant: 'filled',\n colorScheme: 'success',\n class: 'bg-green-500/15 focus:bg-green-500/20'\n },\n {\n variant: 'filled',\n colorScheme: 'light-gray',\n class: 'bg-[#0C1C33]/5 focus:bg-[#0C1C33]/10'\n },\n // Filled variant with focus ring\n {\n variant: 'filled',\n class: 'focus:ring-2'\n }\n ],\n defaultVariants: {\n theme: 'light',\n colorScheme: 'default',\n size: 'xl',\n variant: 'outlined',\n disabled: false\n }\n }\n)\n\ntype InputVariants = VariantProps<typeof input>\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix'>, Omit<InputVariants, 'theme' | 'disabled'> {\n className?: string\n error?: boolean\n success?: boolean\n prefix?: string | React.ReactNode\n prefixClassName?: string\n /** Color scheme override for light theme */\n colorSchemeLight?: 'default' | 'brand' | 'error' | 'success' | 'light-gray'\n /** Color scheme override for dark theme */\n colorSchemeDark?: 'default' | 'brand' | 'error' | 'success' | 'light-gray'\n /**\n * Controls visibility toggle for password inputs. When false, the eye icon is hidden and no extra right padding is applied.\n * Defaults to true.\n */\n showPasswordToggle?: boolean\n}\n\n/**\n * A versatile input component that adapts to light/dark theme,\n * supports various color schemes, sizes, variants, and states.\n * For password inputs, includes a toggleable eye icon.\n * Supports prefix text or elements before input content.\n *\n * @example\n * <Input\n * type='password'\n * placeholder='Enter password'\n * colorScheme='brand'\n * size='xl'\n * prefix=\"https://\"\n * />\n */\nexport const Input: React.FC<InputProps> = ({\n className = '',\n colorScheme,\n colorSchemeLight,\n colorSchemeDark,\n size,\n variant,\n error = false,\n success = false,\n disabled = false,\n type,\n prefix,\n prefixClassName = '',\n showPasswordToggle = true,\n ...props\n}) => {\n const { theme } = useTheme()\n const [showPassword, setShowPassword] = useState(false)\n const [prefixWidth, setPrefixWidth] = useState(0)\n const prefixRef = useRef<HTMLDivElement>(null)\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 classes = input({\n theme,\n colorScheme: finalColorScheme,\n size,\n variant,\n disabled\n }) + ' ' + className\n\n const isPassword = type === 'password'\n const inputType = isPassword && showPassword ? 'text' : type\n const hasPrefix = Boolean(prefix)\n\n const togglePasswordVisibility = (): void => {\n setShowPassword(!showPassword)\n }\n\n // Measure actual prefix width\n useEffect(() => {\n if (prefixRef.current) {\n const width = prefixRef.current.offsetWidth\n // Convert px to rem (assuming 16px base) and add base padding (1rem) + extra space (0.5rem)\n setPrefixWidth(width / 16 + 1.5)\n }\n }, [prefix])\n\n // Render with prefix\n if (hasPrefix) {\n return (\n <div className='relative'>\n <div \n ref={prefixRef}\n className={`absolute left-4 top-1/2 -translate-y-1/2 z-10 text-[0.875rem] opacity-60 pointer-events-none select-none ${prefixClassName}`}\n >\n {prefix}\n </div>\n <input\n className={`${classes}${isPassword && showPasswordToggle ? ' pr-12' : ''}`}\n style={{ paddingLeft: prefixWidth ? `${prefixWidth}rem` : '1rem' }}\n disabled={disabled}\n type={inputType}\n {...props}\n />\n {isPassword && showPasswordToggle && (\n <button\n type='button'\n className='absolute right-4 top-1/2 -translate-y-1/2 opacity-50 hover:opacity-70 transition-opacity cursor-pointer focus:outline-none'\n onClick={togglePasswordVisibility}\n tabIndex={-1}\n >\n {showPassword\n ? <EyeClosedIcon size={16} color='#0C1C33' />\n : <EyeOpenIcon size={16} color='#0C1C33' />}\n </button>\n )}\n </div>\n )\n }\n\n // Render password input without prefix\n if (isPassword) {\n return (\n <div className='relative'>\n <input\n className={classes + (showPasswordToggle ? ' pr-12' : '')}\n disabled={disabled}\n type={inputType}\n {...props}\n />\n {showPasswordToggle && (\n <button\n type='button'\n className='absolute right-4 top-1/2 -translate-y-1/2 opacity-50 hover:opacity-70 transition-opacity cursor-pointer focus:outline-none'\n onClick={togglePasswordVisibility}\n tabIndex={-1}\n >\n {showPassword\n ? <EyeClosedIcon size={16} color='#0C1C33' />\n : <EyeOpenIcon size={16} color='#0C1C33' />}\n </button>\n )}\n </div>\n )\n }\n\n // Regular input without prefix\n return (\n <input\n className={classes}\n disabled={disabled}\n type={inputType}\n {...props}\n />\n )\n}\n\nexport default Input "],"names":["input","cva","variants","theme","light","dark","colorScheme","default","brand","error","success","size","sm","md","xl","variant","outlined","filled","disabled","false","true","compoundVariants","class","defaultVariants","Input","_a","className","colorSchemeLight","colorSchemeDark","type","prefix","prefixClassName","showPasswordToggle","props","__rest","useTheme","showPassword","setShowPassword","useState","prefixWidth","setPrefixWidth","prefixRef","useRef","effectiveColorScheme","_b","useColorScheme","finalColorScheme","classes","isPassword","inputType","hasPrefix","Boolean","togglePasswordVisibility","useEffect","current","width","offsetWidth","_jsxs","children","_jsx","ref","Object","assign","style","paddingLeft","onClick","tabIndex","EyeClosedIcon","color","EyeOpenIcon"],"mappings":";;;;;;;;;;AAMA,MAAMA,KAAK,GAAGC,GAAG,CACf,kGAAkG,EAClG;AACEC,EAAAA,QAAQ,EAAE;AACRC,IAAAA,KAAK,EAAE;AACLC,MAAAA,KAAK,EAAE,sDAAsD;AAC7DC,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,yBAAyB;AAClC,MAAA,YAAY,EAAE;KACf;AACDC,IAAAA,IAAI,EAAE;AACJC,MAAAA,EAAE,EAAE,0BAA0B;AAC9BC,MAAAA,EAAE,EAAE,0BAA0B;AAC9BC,MAAAA,EAAE,EAAE;KACL;AACDC,IAAAA,OAAO,EAAE;AACPC,MAAAA,QAAQ,EAAE,yCAAyC;AACnDC,MAAAA,MAAM,EAAE;KACT;AACDC,IAAAA,QAAQ,EAAE;AACRC,MAAAA,KAAK,EAAE,EAAE;AACTC,MAAAA,IAAI,EAAE;AACP;GACF;AACDC,EAAAA,gBAAgB,EAAE;AAChB;AACA,EAAA;AACEN,IAAAA,OAAO,EAAE,UAAU;AACnBT,IAAAA,WAAW,EAAE,SAAS;AACtBgB,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEP,IAAAA,OAAO,EAAE,UAAU;AACnBT,IAAAA,WAAW,EAAE,OAAO;AACpBgB,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEP,IAAAA,OAAO,EAAE,UAAU;AACnBT,IAAAA,WAAW,EAAE,OAAO;AACpBgB,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEP,IAAAA,OAAO,EAAE,UAAU;AACnBT,IAAAA,WAAW,EAAE,SAAS;AACtBgB,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEP,IAAAA,OAAO,EAAE,UAAU;AACnBT,IAAAA,WAAW,EAAE,YAAY;AACzBgB,IAAAA,KAAK,EAAE;GACR;AACD;AACA,EAAA;AACEP,IAAAA,OAAO,EAAE,UAAU;AACnBO,IAAAA,KAAK,EAAE;GACR;AACD;AACA,EAAA;AACEP,IAAAA,OAAO,EAAE,UAAU;AACnBZ,IAAAA,KAAK,EAAE,OAAO;AACdmB,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEP,IAAAA,OAAO,EAAE,UAAU;AACnBZ,IAAAA,KAAK,EAAE,MAAM;AACbmB,IAAAA,KAAK,EAAE;GACR;AACD;AACA,EAAA;AACEP,IAAAA,OAAO,EAAE,QAAQ;AACjBT,IAAAA,WAAW,EAAE,SAAS;AACtBgB,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEP,IAAAA,OAAO,EAAE,QAAQ;AACjBT,IAAAA,WAAW,EAAE,OAAO;AACpBgB,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEP,IAAAA,OAAO,EAAE,QAAQ;AACjBT,IAAAA,WAAW,EAAE,OAAO;AACpBgB,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEP,IAAAA,OAAO,EAAE,QAAQ;AACjBT,IAAAA,WAAW,EAAE,SAAS;AACtBgB,IAAAA,KAAK,EAAE;AACR,GAAA,EACD;AACEP,IAAAA,OAAO,EAAE,QAAQ;AACjBT,IAAAA,WAAW,EAAE,YAAY;AACzBgB,IAAAA,KAAK,EAAE;GACR;AACD;AACA,EAAA;AACEP,IAAAA,OAAO,EAAE,QAAQ;AACjBO,IAAAA,KAAK,EAAE;AACR,GAAA,CACF;AACDC,EAAAA,eAAe,EAAE;AACfpB,IAAAA,KAAK,EAAE,OAAO;AACdG,IAAAA,WAAW,EAAE,SAAS;AACtBK,IAAAA,IAAI,EAAE,IAAI;AACVI,IAAAA,OAAO,EAAE,UAAU;AACnBG,IAAAA,QAAQ,EAAE;AACX;AACF,CAAA,CACF;AAqBD;;;;;;;;;;;;;;AAcG;AACUM,MAAAA,KAAK,GAA0BC,EAe3C,IAAI;;EAfuC,IAAA;AAC1CC,MAAAA,SAAS,GAAG,EAAE;MACdpB,WAAW;MACXqB,gBAAgB;MAChBC,eAAe;MACfjB,IAAI;MACJI,OAAO;AACPN,MAAAA,KAAK,GAAG,KAAK;AACbC,MAAAA,OAAO,GAAG,KAAK;AACfQ,MAAAA,QAAQ,GAAG,KAAK;MAChBW,IAAI;MACJC,MAAM;AACNC,MAAAA,eAAe,GAAG,EAAE;AACpBC,MAAAA,kBAAkB,GAAG;AAAI,KAAA,GAAAP,EAE1B;AADIQ,IAAAA,KAAK,GAAAC,MAAA,CAAAT,EAAA,EAdkC,iLAe3C,CADS;EAER,MAAM;AAAEtB,IAAAA;GAAO,GAAGgC,QAAQ,EAAE;EAC5B,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GAAGC,QAAQ,CAAC,KAAK,CAAC;EACvD,MAAM,CAACC,WAAW,EAAEC,cAAc,CAAC,GAAGF,QAAQ,CAAC,CAAC,CAAC;AACjD,EAAA,MAAMG,SAAS,GAAGC,MAAM,CAAiB,IAAI,CAAC;EAE9C,MAAMC,oBAAoB,GAAG,CAAAC,EAAA,GAAAC,cAAc,CAACvC,WAAW,EAAEqB,gBAAgB,EAAEC,eAAe,CAAC,MAAA,IAAA,IAAAgB,EAAA,KAAA,MAAA,GAAAA,EAAA,GAAI,SAAS;AAExG;EACA,IAAIE,gBAAgB,GAAgCH,oBAAoB;AACxE,EAAA,IAAIlC,KAAK,EAAEqC,gBAAgB,GAAG,OAAO,CAAA,KAChC,IAAIpC,OAAO,EAAEoC,gBAAgB,GAAG,SAAS;EAE9C,MAAMC,OAAO,GAAG/C,KAAK,CAAC;IACpBG,KAAK;AACLG,IAAAA,WAAW,EAAEwC,gBAAgB;IAC7BnC,IAAI;IACJI,OAAO;AACPG,IAAAA;AACD,GAAA,CAAC,GAAG,GAAG,GAAGQ,SAAS;AAEpB,EAAA,MAAMsB,UAAU,GAAGnB,IAAI,KAAK,UAAU;EACtC,MAAMoB,SAAS,GAAGD,UAAU,IAAIZ,YAAY,GAAG,MAAM,GAAGP,IAAI;AAC5D,EAAA,MAAMqB,SAAS,GAAGC,OAAO,CAACrB,MAAM,CAAC;EAEjC,MAAMsB,wBAAwB,GAAGA,MAAW;IAC1Cf,eAAe,CAAC,CAACD,YAAY,CAAC;GAC/B;AAED;AACAiB,EAAAA,SAAS,CAAC,MAAK;IACb,IAAIZ,SAAS,CAACa,OAAO,EAAE;AACrB,MAAA,MAAMC,KAAK,GAAGd,SAAS,CAACa,OAAO,CAACE,WAAW;AAC3C;AACAhB,MAAAA,cAAc,CAACe,KAAK,GAAG,EAAE,GAAG,GAAG,CAAC;AAClC;AACF,GAAC,EAAE,CAACzB,MAAM,CAAC,CAAC;AAEZ;AACA,EAAA,IAAIoB,SAAS,EAAE;IACb,OACEO,IAAK,CAAA,KAAA,EAAA;AAAA/B,MAAAA,SAAS,EAAC,UAAU;AAAAgC,MAAAA,QAAA,EAAA,CACvBC;AACEC,QAAAA,GAAG,EAAEnB,SAAS;QACdf,SAAS,EAAE,CAA4GK,yGAAAA,EAAAA,eAAe,CAAE,CAAA;AAEvI2B,QAAAA,QAAA,EAAA5B;QACG,EACN6B,GAAA,CAAA,OAAA,EAAAE,MAAA,CAAAC,MAAA,CAAA;QACEpC,SAAS,EAAE,CAAGqB,EAAAA,OAAO,CAAGC,EAAAA,UAAU,IAAIhB,kBAAkB,GAAG,QAAQ,GAAG,EAAE,CAAE,CAAA;AAC1E+B,QAAAA,KAAK,EAAE;AAAEC,UAAAA,WAAW,EAAEzB,WAAW,GAAG,CAAGA,EAAAA,WAAW,KAAK,GAAG;SAAQ;AAClErB,QAAAA,QAAQ,EAAEA,QAAQ;AAClBW,QAAAA,IAAI,EAAEoB;AACF,OAAA,EAAAhB,KAAK,EACT,EACDe,UAAU,IAAIhB,kBAAkB,IAC/B2B,GACE,CAAA,QAAA,EAAA;AAAA9B,QAAAA,IAAI,EAAC,QAAQ;AACbH,QAAAA,SAAS,EAAC,4HAA4H;AACtIuC,QAAAA,OAAO,EAAEb,wBAAwB;QACjCc,QAAQ,EAAE,EAAE;kBAEX9B,YAAY,GACTuB,GAAC,CAAAQ,aAAa,EAAC;AAAAxD,UAAAA,IAAI,EAAE,EAAE;AAAEyD,UAAAA,KAAK,EAAC;AAAY,SAAA,CAAA,GAC3CT,GAAC,CAAAU,WAAW,EAAC;AAAA1D,UAAAA,IAAI,EAAE,EAAE;AAAEyD,UAAAA,KAAK,EAAC;SAAY;AAAA,OAAA,CAEhD;AAAA,KAAA,CACG;AAEV;AAEA;AACA,EAAA,IAAIpB,UAAU,EAAE;IACd,OACES,IAAK,CAAA,KAAA,EAAA;AAAA/B,MAAAA,SAAS,EAAC,UAAU;iBACvBiC,GACE,CAAA,OAAA,EAAAE,MAAA,CAAAC,MAAA,CAAA;QAAApC,SAAS,EAAEqB,OAAO,IAAIf,kBAAkB,GAAG,QAAQ,GAAG,EAAE,CAAC;AACzDd,QAAAA,QAAQ,EAAEA,QAAQ;AAClBW,QAAAA,IAAI,EAAEoB;OACF,EAAAhB,KAAK,CACT,CAAA,EACDD,kBAAkB,IACjB2B,GAAA,CAAA,QAAA,EAAA;AACE9B,QAAAA,IAAI,EAAC,QAAQ;AACbH,QAAAA,SAAS,EAAC,4HAA4H;AACtIuC,QAAAA,OAAO,EAAEb,wBAAwB;QACjCc,QAAQ,EAAE,EAAE;AAAAR,QAAAA,QAAA,EAEXtB,YAAY,GACTuB,GAAC,CAAAQ,aAAa,EAAC;AAAAxD,UAAAA,IAAI,EAAE,EAAE;AAAEyD,UAAAA,KAAK,EAAC;AAAY,SAAA,CAAA,GAC3CT,GAAC,CAAAU,WAAW,EAAC;AAAA1D,UAAAA,IAAI,EAAE,EAAE;AAAEyD,UAAAA,KAAK,EAAC;SAAY;AAAA,OAAA,CAEhD;AAAA,KAAA,CACG;AAEV;AAEA;AACA,EAAA,OACET,GACE,CAAA,OAAA,EAAAE,MAAA,CAAAC,MAAA,CAAA;AAAApC,IAAAA,SAAS,EAAEqB,OAAO;AAClB7B,IAAAA,QAAQ,EAAEA,QAAQ;AAClBW,IAAAA,IAAI,EAAEoB;KACFhB,KAAK,CAAA,CACT;AAEN;;;;"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
'use strict';
|
|
4
|
+
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
var index$1 = require('../text/index.cjs.js');
|
|
7
|
+
var index = require('../icons/index.cjs.js');
|
|
8
|
+
var ThemeContext = require('../../contexts/ThemeContext.cjs.js');
|
|
9
|
+
|
|
10
|
+
const iconComponents = {
|
|
11
|
+
check: index.CheckIcon
|
|
12
|
+
};
|
|
13
|
+
const List = ({
|
|
14
|
+
items,
|
|
15
|
+
iconType = 'check',
|
|
16
|
+
className = '',
|
|
17
|
+
size = 'sm'
|
|
18
|
+
}) => {
|
|
19
|
+
const {
|
|
20
|
+
theme
|
|
21
|
+
} = ThemeContext.useTheme();
|
|
22
|
+
const IconComponent = iconComponents[iconType];
|
|
23
|
+
return jsxRuntime.jsx("ul", {
|
|
24
|
+
className: `space-y-5 w-full ${className}`,
|
|
25
|
+
children: items.map((item, index) => jsxRuntime.jsxs("li", {
|
|
26
|
+
className: 'flex items-start gap-4',
|
|
27
|
+
children: [jsxRuntime.jsx(IconComponent, {
|
|
28
|
+
size: 20,
|
|
29
|
+
className: 'flex-shrink-0',
|
|
30
|
+
color: theme === 'dark' ? '#4C7EFF' : '#4C7EFF'
|
|
31
|
+
}), jsxRuntime.jsxs("div", {
|
|
32
|
+
className: 'flex flex-col gap-1',
|
|
33
|
+
children: [jsxRuntime.jsx(index$1.Text, {
|
|
34
|
+
size: size,
|
|
35
|
+
weight: "medium",
|
|
36
|
+
children: item.text
|
|
37
|
+
}), item.description && jsxRuntime.jsx(index$1.Text, {
|
|
38
|
+
size: 'xs',
|
|
39
|
+
dim: true,
|
|
40
|
+
className: 'opacity-75',
|
|
41
|
+
children: item.description
|
|
42
|
+
})]
|
|
43
|
+
})]
|
|
44
|
+
}, index))
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
exports.List = List;
|
|
49
|
+
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../../../src/react/components/list/index.tsx"],"sourcesContent":["import React from 'react'\nimport { Text } from '../text'\nimport { CheckIcon } from '../icons'\nimport { useTheme } from '../../contexts/ThemeContext'\n\ninterface ListItem {\n text: string\n description?: string\n}\n\ninterface ListProps {\n items: ListItem[]\n iconType?: 'check'\n className?: string\n size?: 'sm' | 'md' | 'lg'\n}\n\nconst iconComponents = {\n check: CheckIcon\n}\n\nexport const List: React.FC<ListProps> = ({\n items,\n iconType = 'check',\n className = '',\n size = 'sm'\n}) => {\n const { theme } = useTheme()\n const IconComponent = iconComponents[iconType]\n\n return (\n <ul className={`space-y-5 w-full ${className}`}>\n {items.map((item, index) => (\n <li key={index} className='flex items-start gap-4'>\n <IconComponent \n size={20} \n className='flex-shrink-0' \n color={theme === 'dark' ? '#4C7EFF' : '#4C7EFF'}\n />\n <div className='flex flex-col gap-1'>\n <Text size={size} weight=\"medium\">\n {item.text}\n </Text>\n {item.description && (\n <Text size='xs' dim className='opacity-75'>\n {item.description}\n </Text>\n )}\n </div>\n </li>\n ))}\n </ul>\n )\n}\n\nexport type { ListProps, ListItem } "],"names":["iconComponents","check","CheckIcon","List","items","iconType","className","size","theme","useTheme","IconComponent","_jsx","children","map","item","index","_jsxs","color","Text","weight","text","description","dim"],"mappings":";;;;;;;;;AAiBA,MAAMA,cAAc,GAAG;AACrBC,EAAAA,KAAK,EAAEC;CACR;AAEM,MAAMC,IAAI,GAAwBA,CAAC;EACxCC,KAAK;AACLC,EAAAA,QAAQ,GAAG,OAAO;AAClBC,EAAAA,SAAS,GAAG,EAAE;AACdC,EAAAA,IAAI,GAAG;AACR,CAAA,KAAI;EACH,MAAM;AAAEC,IAAAA;GAAO,GAAGC,qBAAQ,EAAE;AAC5B,EAAA,MAAMC,aAAa,GAAGV,cAAc,CAACK,QAAQ,CAAC;EAE9C,OACEM;IAAIL,SAAS,EAAE,CAAoBA,iBAAAA,EAAAA,SAAS,CAAE,CAAA;AAC3CM,IAAAA,QAAA,EAAAR,KAAK,CAACS,GAAG,CAAC,CAACC,IAAI,EAAEC,KAAK,KACrBC,eAAgB,CAAA,IAAA,EAAA;AAAAV,MAAAA,SAAS,EAAC,wBAAwB;iBAChDK,cAAC,CAAAD,aAAa;AACZH,QAAAA,IAAI,EAAE,EAAE;AACRD,QAAAA,SAAS,EAAC,eAAe;AACzBW,QAAAA,KAAK,EAAET,KAAK,KAAK,MAAM,GAAG,SAAS,GAAG;AACtC,OAAA,CAAA,EACFQ;AAAKV,QAAAA,SAAS,EAAC,qBAAqB;AAClCM,QAAAA,QAAA,EAAA,CAAAD,cAAA,CAACO,YAAI,EAAC;AAAAX,UAAAA,IAAI,EAAEA,IAAI;AAAEY,UAAAA,MAAM,EAAC,QAAQ;UAAAP,QAAA,EAC9BE,IAAI,CAACM;SAAI,CACL,EACNN,IAAI,CAACO,WAAW,IACfV,cAAA,CAACO,YAAI,EAAC;AAAAX,UAAAA,IAAI,EAAC,IAAI;AAACe,UAAAA,GAAG,EAAC,IAAA;AAAAhB,UAAAA,SAAS,EAAC,YAAY;UACvCM,QAAA,EAAAE,IAAI,CAACO;AAAW,SAAA,CAEpB;AAAA,OAAA,CACG;KAfC,EAAAN,KAAK,CAiBf;AACE,GAAA,CAAA;AAET;;;;"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
4
|
+
import { Text } from '../text/index.esm.js';
|
|
5
|
+
import { CheckIcon } from '../icons/index.esm.js';
|
|
6
|
+
import { useTheme } from '../../contexts/ThemeContext.esm.js';
|
|
7
|
+
|
|
8
|
+
const iconComponents = {
|
|
9
|
+
check: CheckIcon
|
|
10
|
+
};
|
|
11
|
+
const List = ({
|
|
12
|
+
items,
|
|
13
|
+
iconType = 'check',
|
|
14
|
+
className = '',
|
|
15
|
+
size = 'sm'
|
|
16
|
+
}) => {
|
|
17
|
+
const {
|
|
18
|
+
theme
|
|
19
|
+
} = useTheme();
|
|
20
|
+
const IconComponent = iconComponents[iconType];
|
|
21
|
+
return jsx("ul", {
|
|
22
|
+
className: `space-y-5 w-full ${className}`,
|
|
23
|
+
children: items.map((item, index) => jsxs("li", {
|
|
24
|
+
className: 'flex items-start gap-4',
|
|
25
|
+
children: [jsx(IconComponent, {
|
|
26
|
+
size: 20,
|
|
27
|
+
className: 'flex-shrink-0',
|
|
28
|
+
color: theme === 'dark' ? '#4C7EFF' : '#4C7EFF'
|
|
29
|
+
}), jsxs("div", {
|
|
30
|
+
className: 'flex flex-col gap-1',
|
|
31
|
+
children: [jsx(Text, {
|
|
32
|
+
size: size,
|
|
33
|
+
weight: "medium",
|
|
34
|
+
children: item.text
|
|
35
|
+
}), item.description && jsx(Text, {
|
|
36
|
+
size: 'xs',
|
|
37
|
+
dim: true,
|
|
38
|
+
className: 'opacity-75',
|
|
39
|
+
children: item.description
|
|
40
|
+
})]
|
|
41
|
+
})]
|
|
42
|
+
}, index))
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export { List };
|
|
47
|
+
//# sourceMappingURL=index.esm.js.map
|