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.
Files changed (186) hide show
  1. package/README.md +52 -0
  2. package/dist/react/components/accordion/index.cjs.js +193 -0
  3. package/dist/react/components/accordion/index.cjs.js.map +1 -0
  4. package/dist/react/components/accordion/index.esm.js +169 -0
  5. package/dist/react/components/accordion/index.esm.js.map +1 -0
  6. package/dist/react/components/avatar/index.cjs.js +39 -0
  7. package/dist/react/components/avatar/index.cjs.js.map +1 -0
  8. package/dist/react/components/avatar/index.esm.js +34 -0
  9. package/dist/react/components/avatar/index.esm.js.map +1 -0
  10. package/dist/react/components/badge/index.cjs.js +92 -0
  11. package/dist/react/components/badge/index.cjs.js.map +1 -0
  12. package/dist/react/components/badge/index.esm.js +87 -0
  13. package/dist/react/components/badge/index.esm.js.map +1 -0
  14. package/dist/react/components/bigNumber/index.cjs.js +100 -0
  15. package/dist/react/components/bigNumber/index.cjs.js.map +1 -0
  16. package/dist/react/components/bigNumber/index.esm.js +95 -0
  17. package/dist/react/components/bigNumber/index.esm.js.map +1 -0
  18. package/dist/react/components/button/index.cjs.js +535 -0
  19. package/dist/react/components/button/index.cjs.js.map +1 -0
  20. package/dist/react/components/button/index.d.ts +3 -1
  21. package/dist/react/components/button/index.esm.js +530 -0
  22. package/dist/react/components/button/index.esm.js.map +1 -0
  23. package/dist/react/components/copyButton/index.cjs.js +95 -0
  24. package/dist/react/components/copyButton/index.cjs.js.map +1 -0
  25. package/dist/react/components/copyButton/index.esm.js +71 -0
  26. package/dist/react/components/copyButton/index.esm.js.map +1 -0
  27. package/dist/react/components/dashLogo/index.cjs.js +74 -0
  28. package/dist/react/components/dashLogo/index.cjs.js.map +1 -0
  29. package/dist/react/components/dashLogo/index.esm.js +69 -0
  30. package/dist/react/components/dashLogo/index.esm.js.map +1 -0
  31. package/dist/react/components/dateBlock/index.cjs.js +120 -0
  32. package/dist/react/components/dateBlock/index.cjs.js.map +1 -0
  33. package/dist/react/components/dateBlock/index.esm.js +115 -0
  34. package/dist/react/components/dateBlock/index.esm.js.map +1 -0
  35. package/dist/react/components/dialog/index.cjs.js +292 -0
  36. package/dist/react/components/dialog/index.cjs.js.map +1 -0
  37. package/dist/react/components/dialog/index.esm.js +270 -0
  38. package/dist/react/components/dialog/index.esm.js.map +1 -0
  39. package/dist/react/components/heading/index.cjs.js +60 -0
  40. package/dist/react/components/heading/index.cjs.js.map +1 -0
  41. package/dist/react/components/heading/index.esm.js +58 -0
  42. package/dist/react/components/heading/index.esm.js.map +1 -0
  43. package/dist/react/components/icons/index.cjs.js +1173 -0
  44. package/dist/react/components/icons/index.cjs.js.map +1 -0
  45. package/dist/react/components/icons/index.d.ts +2 -0
  46. package/dist/react/components/icons/index.esm.js +1128 -0
  47. package/dist/react/components/icons/index.esm.js.map +1 -0
  48. package/dist/react/components/identifier/index.cjs.js +286 -0
  49. package/dist/react/components/identifier/index.cjs.js.map +1 -0
  50. package/dist/react/components/identifier/index.esm.js +282 -0
  51. package/dist/react/components/identifier/index.esm.js.map +1 -0
  52. package/dist/react/components/index.cjs.js +101 -0
  53. package/dist/react/components/index.cjs.js.map +1 -0
  54. package/dist/react/components/index.d.ts +1 -1
  55. package/dist/react/components/index.esm.js +29 -0
  56. package/dist/react/components/index.esm.js.map +1 -0
  57. package/dist/react/components/input/index.cjs.js +237 -0
  58. package/dist/react/components/input/index.cjs.js.map +1 -0
  59. package/dist/react/components/input/index.esm.js +232 -0
  60. package/dist/react/components/input/index.esm.js.map +1 -0
  61. package/dist/react/components/list/index.cjs.js +49 -0
  62. package/dist/react/components/list/index.cjs.js.map +1 -0
  63. package/dist/react/components/list/index.esm.js +47 -0
  64. package/dist/react/components/list/index.esm.js.map +1 -0
  65. package/dist/react/components/notActive/index.cjs.js +40 -0
  66. package/dist/react/components/notActive/index.cjs.js.map +1 -0
  67. package/dist/react/components/notActive/index.esm.js +38 -0
  68. package/dist/react/components/notActive/index.esm.js.map +1 -0
  69. package/dist/react/components/overlayMenu/index.cjs.js +425 -0
  70. package/dist/react/components/overlayMenu/index.cjs.js.map +1 -0
  71. package/dist/react/components/overlayMenu/index.esm.js +420 -0
  72. package/dist/react/components/overlayMenu/index.esm.js.map +1 -0
  73. package/dist/react/components/overlaySelect/index.cjs.js +345 -0
  74. package/dist/react/components/overlaySelect/index.cjs.js.map +1 -0
  75. package/dist/react/components/overlaySelect/index.esm.js +340 -0
  76. package/dist/react/components/overlaySelect/index.esm.js.map +1 -0
  77. package/dist/react/components/progressStepBar/index.cjs.js +49 -0
  78. package/dist/react/components/progressStepBar/index.cjs.js.map +1 -0
  79. package/dist/react/components/progressStepBar/index.d.ts +2 -1
  80. package/dist/react/components/progressStepBar/index.esm.js +47 -0
  81. package/dist/react/components/progressStepBar/index.esm.js.map +1 -0
  82. package/dist/react/components/select/index.cjs.js +236 -0
  83. package/dist/react/components/select/index.cjs.js.map +1 -0
  84. package/dist/react/components/select/index.esm.js +212 -0
  85. package/dist/react/components/select/index.esm.js.map +1 -0
  86. package/dist/react/components/switch/index.cjs.js +184 -0
  87. package/dist/react/components/switch/index.cjs.js.map +1 -0
  88. package/dist/react/components/switch/index.esm.js +179 -0
  89. package/dist/react/components/switch/index.esm.js.map +1 -0
  90. package/dist/react/components/tabs/index.cjs.js +178 -0
  91. package/dist/react/components/tabs/index.cjs.js.map +1 -0
  92. package/dist/react/components/tabs/index.esm.js +154 -0
  93. package/dist/react/components/tabs/index.esm.js.map +1 -0
  94. package/dist/react/components/text/index.cjs.js +120 -0
  95. package/dist/react/components/text/index.cjs.js.map +1 -0
  96. package/dist/react/components/text/index.esm.js +115 -0
  97. package/dist/react/components/text/index.esm.js.map +1 -0
  98. package/dist/react/components/textarea/index.cjs.js +256 -0
  99. package/dist/react/components/textarea/index.cjs.js.map +1 -0
  100. package/dist/react/components/textarea/index.esm.js +251 -0
  101. package/dist/react/components/textarea/index.esm.js.map +1 -0
  102. package/dist/react/components/timeDelta/index.cjs.js +93 -0
  103. package/dist/react/components/timeDelta/index.cjs.js.map +1 -0
  104. package/dist/react/components/timeDelta/index.d.ts +1 -1
  105. package/dist/react/components/timeDelta/index.esm.js +88 -0
  106. package/dist/react/components/timeDelta/index.esm.js.map +1 -0
  107. package/dist/react/components/transactionStatusIcon/index.cjs.js +59 -0
  108. package/dist/react/components/transactionStatusIcon/index.cjs.js.map +1 -0
  109. package/dist/react/components/transactionStatusIcon/index.esm.js +54 -0
  110. package/dist/react/components/transactionStatusIcon/index.esm.js.map +1 -0
  111. package/dist/react/components/valueCard/index.cjs.js +176 -0
  112. package/dist/react/components/valueCard/index.cjs.js.map +1 -0
  113. package/dist/react/components/valueCard/index.d.ts +1 -1
  114. package/dist/react/components/valueCard/index.esm.js +171 -0
  115. package/dist/react/components/valueCard/index.esm.js.map +1 -0
  116. package/dist/react/contexts/ThemeContext.cjs.js +79 -0
  117. package/dist/react/contexts/ThemeContext.cjs.js.map +1 -0
  118. package/dist/react/contexts/ThemeContext.esm.js +76 -0
  119. package/dist/react/contexts/ThemeContext.esm.js.map +1 -0
  120. package/dist/react/contexts/index.cjs.js +11 -0
  121. package/dist/react/contexts/index.cjs.js.map +1 -0
  122. package/dist/react/contexts/index.esm.js +4 -0
  123. package/dist/react/contexts/index.esm.js.map +1 -0
  124. package/dist/react/hooks/useDebounce.cjs.js +83 -0
  125. package/dist/react/hooks/useDebounce.cjs.js.map +1 -0
  126. package/dist/react/hooks/useDebounce.esm.js +78 -0
  127. package/dist/react/hooks/useDebounce.esm.js.map +1 -0
  128. package/dist/react/index.cjs.js +99 -12811
  129. package/dist/react/index.cjs.js.map +1 -1
  130. package/dist/react/index.d.ts +1 -1
  131. package/dist/react/index.esm.js +27 -12725
  132. package/dist/react/index.esm.js.map +1 -1
  133. package/dist/react/shared/utils/datetime.cjs.js +59 -0
  134. package/dist/react/shared/utils/datetime.cjs.js.map +1 -0
  135. package/dist/react/shared/utils/datetime.esm.js +57 -0
  136. package/dist/react/shared/utils/datetime.esm.js.map +1 -0
  137. package/dist/react/utils/copyToClipboard.cjs.js +31 -0
  138. package/dist/react/utils/copyToClipboard.cjs.js.map +1 -0
  139. package/dist/react/utils/copyToClipboard.esm.js +26 -0
  140. package/dist/react/utils/copyToClipboard.esm.js.map +1 -0
  141. package/dist/react/utils/index.d.ts +1 -1
  142. package/dist/react-native/components/avatar/index.d.ts +26 -0
  143. package/dist/react-native/components/avatar/index.web.d.ts +24 -0
  144. package/dist/react-native/components/badge/index.d.ts +51 -0
  145. package/dist/react-native/components/bigNumber/index.d.ts +26 -0
  146. package/dist/react-native/components/button/index.d.ts +39 -0
  147. package/dist/react-native/components/copyButton/index.d.ts +22 -0
  148. package/dist/react-native/components/copyButton/index.web.d.ts +20 -0
  149. package/dist/react-native/components/dashLogo/index.d.ts +30 -0
  150. package/dist/react-native/components/heading/index.d.ts +25 -0
  151. package/dist/react-native/components/icons/index.d.ts +43 -0
  152. package/dist/react-native/components/identifier/index.d.ts +47 -0
  153. package/dist/react-native/components/index.d.ts +15 -0
  154. package/dist/react-native/components/input/index.d.ts +53 -0
  155. package/dist/react-native/components/notActive/index.d.ts +16 -0
  156. package/dist/react-native/components/tabs/index.d.ts +50 -0
  157. package/dist/react-native/components/text/index.d.ts +28 -0
  158. package/dist/react-native/components/transactionStatusIcon/index.d.ts +24 -0
  159. package/dist/react-native/components/valueCard/index.d.ts +43 -0
  160. package/dist/react-native/hooks/index.d.ts +1 -0
  161. package/dist/react-native/hooks/useDebounce.d.ts +43 -0
  162. package/dist/react-native/index.cjs.js +2856 -0
  163. package/dist/react-native/index.cjs.js.map +1 -0
  164. package/dist/react-native/index.d.ts +4 -0
  165. package/dist/react-native/index.esm.js +2808 -0
  166. package/dist/react-native/index.esm.js.map +1 -0
  167. package/dist/react-native/styles/index.d.ts +11 -0
  168. package/dist/react-native/styles/tokens.d.ts +308 -0
  169. package/dist/react-native/styles/utils.d.ts +65 -0
  170. package/dist/react-native/utils/clipboard.d.ts +27 -0
  171. package/dist/react-native/utils/index.d.ts +2 -0
  172. package/dist/react-native/utils/tw.d.ts +7 -0
  173. package/dist/shared/constants/colors.d.ts +25 -0
  174. package/dist/shared/constants/index.d.ts +2 -0
  175. package/dist/shared/constants/sizes.d.ts +49 -0
  176. package/dist/shared/index.cjs.js +171 -0
  177. package/dist/shared/index.cjs.js.map +1 -0
  178. package/dist/shared/index.d.ts +3 -0
  179. package/dist/shared/index.esm.js +161 -0
  180. package/dist/shared/index.esm.js.map +1 -0
  181. package/dist/shared/types/common.d.ts +33 -0
  182. package/dist/shared/types/index.d.ts +1 -0
  183. package/dist/shared/utils/index.d.ts +1 -0
  184. package/dist/styles.css +1 -1
  185. package/package.json +50 -8
  186. /package/dist/{react → shared}/utils/datetime.d.ts +0 -0
@@ -0,0 +1,237 @@
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
+
14
+ const input = classVarianceAuthority.cva('w-full transition-all font-inter placeholder:text-opacity-60 text-[0.875rem] leading-[1.0625rem]', {
15
+ variants: {
16
+ theme: {
17
+ light: 'text-[#111111] placeholder:text-[rgba(17,17,17,0.6)]',
18
+ dark: 'text-white placeholder:text-gray-400'
19
+ },
20
+ colorScheme: {
21
+ default: 'focus:ring-blue-500/20',
22
+ brand: 'focus:ring-dash-brand/20',
23
+ error: 'focus:ring-red-500/20',
24
+ success: 'focus:ring-green-500/20',
25
+ 'light-gray': 'focus:ring-[#6B7280]/20'
26
+ },
27
+ size: {
28
+ sm: 'dash-block-sm font-light',
29
+ md: 'dash-block-md font-light',
30
+ xl: 'dash-block-xl font-light'
31
+ },
32
+ variant: {
33
+ outlined: 'outline outline-1 outline-offset-[-1px]',
34
+ filled: 'border-none'
35
+ },
36
+ disabled: {
37
+ false: '',
38
+ true: 'opacity-60 cursor-not-allowed'
39
+ }
40
+ },
41
+ compoundVariants: [
42
+ // Outlined variant colors
43
+ {
44
+ variant: 'outlined',
45
+ colorScheme: 'default',
46
+ class: 'outline-[rgba(17,17,17,0.32)] focus:outline-[rgba(17,17,17,0.6)]'
47
+ }, {
48
+ variant: 'outlined',
49
+ colorScheme: 'brand',
50
+ class: 'outline-dash-brand/30 focus:outline-dash-brand'
51
+ }, {
52
+ variant: 'outlined',
53
+ colorScheme: 'error',
54
+ class: 'outline-red-500 focus:outline-red-500'
55
+ }, {
56
+ variant: 'outlined',
57
+ colorScheme: 'success',
58
+ class: 'outline-green-500 focus:outline-green-500'
59
+ }, {
60
+ variant: 'outlined',
61
+ colorScheme: 'light-gray',
62
+ class: 'outline-[#6B7280]/50 focus:outline-[#6B7280]'
63
+ },
64
+ // Outlined variant with focus ring
65
+ {
66
+ variant: 'outlined',
67
+ class: 'focus:ring-2'
68
+ },
69
+ // Outlined variant background
70
+ {
71
+ variant: 'outlined',
72
+ theme: 'light',
73
+ class: 'bg-white'
74
+ }, {
75
+ variant: 'outlined',
76
+ theme: 'dark',
77
+ class: 'bg-gray-800'
78
+ },
79
+ // Filled variant colors
80
+ {
81
+ variant: 'filled',
82
+ colorScheme: 'default',
83
+ class: 'bg-[rgba(76,126,255,0.15)] focus:bg-[rgba(76,126,255,0.2)]'
84
+ }, {
85
+ variant: 'filled',
86
+ colorScheme: 'brand',
87
+ class: 'bg-dash-brand/15 focus:bg-dash-brand/20'
88
+ }, {
89
+ variant: 'filled',
90
+ colorScheme: 'error',
91
+ class: 'bg-red-500/15 focus:bg-red-500/20'
92
+ }, {
93
+ variant: 'filled',
94
+ colorScheme: 'success',
95
+ class: 'bg-green-500/15 focus:bg-green-500/20'
96
+ }, {
97
+ variant: 'filled',
98
+ colorScheme: 'light-gray',
99
+ class: 'bg-[#0C1C33]/5 focus:bg-[#0C1C33]/10'
100
+ },
101
+ // Filled variant with focus ring
102
+ {
103
+ variant: 'filled',
104
+ class: 'focus:ring-2'
105
+ }],
106
+ defaultVariants: {
107
+ theme: 'light',
108
+ colorScheme: 'default',
109
+ size: 'xl',
110
+ variant: 'outlined',
111
+ disabled: false
112
+ }
113
+ });
114
+ /**
115
+ * A versatile input component that adapts to light/dark theme,
116
+ * supports various color schemes, sizes, variants, and states.
117
+ * For password inputs, includes a toggleable eye icon.
118
+ * Supports prefix text or elements before input content.
119
+ *
120
+ * @example
121
+ * <Input
122
+ * type='password'
123
+ * placeholder='Enter password'
124
+ * colorScheme='brand'
125
+ * size='xl'
126
+ * prefix="https://"
127
+ * />
128
+ */
129
+ const Input = _a => {
130
+ var {
131
+ className = '',
132
+ colorScheme,
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 = tslib.__rest(_a, ["className", "colorScheme", "size", "variant", "error", "success", "disabled", "type", "prefix", "prefixClassName", "showPasswordToggle"]);
144
+ const {
145
+ theme
146
+ } = ThemeContext.useTheme();
147
+ const [showPassword, setShowPassword] = React.useState(false);
148
+ const [prefixWidth, setPrefixWidth] = React.useState(0);
149
+ const prefixRef = React.useRef(null);
150
+ // Determine color scheme based on state
151
+ let finalColorScheme = colorScheme;
152
+ if (error) finalColorScheme = 'error';else if (success) finalColorScheme = 'success';
153
+ const classes = input({
154
+ theme,
155
+ colorScheme: finalColorScheme,
156
+ size,
157
+ variant,
158
+ disabled
159
+ }) + ' ' + className;
160
+ const isPassword = type === 'password';
161
+ const inputType = isPassword && showPassword ? 'text' : type;
162
+ const hasPrefix = Boolean(prefix);
163
+ const togglePasswordVisibility = () => {
164
+ setShowPassword(!showPassword);
165
+ };
166
+ // Measure actual prefix width
167
+ React.useEffect(() => {
168
+ if (prefixRef.current) {
169
+ const width = prefixRef.current.offsetWidth;
170
+ // Convert px to rem (assuming 16px base) and add base padding (1rem) + extra space (0.5rem)
171
+ setPrefixWidth(width / 16 + 1.5);
172
+ }
173
+ }, [prefix]);
174
+ // Render with prefix
175
+ if (hasPrefix) {
176
+ return jsxRuntime.jsxs("div", {
177
+ className: 'relative',
178
+ children: [jsxRuntime.jsx("div", {
179
+ ref: prefixRef,
180
+ className: `absolute left-4 top-1/2 -translate-y-1/2 z-10 text-[0.875rem] opacity-60 pointer-events-none select-none ${prefixClassName}`,
181
+ children: prefix
182
+ }), jsxRuntime.jsx("input", Object.assign({
183
+ className: `${classes}${isPassword && showPasswordToggle ? ' pr-12' : ''}`,
184
+ style: {
185
+ paddingLeft: prefixWidth ? `${prefixWidth}rem` : '1rem'
186
+ },
187
+ disabled: disabled,
188
+ type: inputType
189
+ }, props)), isPassword && showPasswordToggle && jsxRuntime.jsx("button", {
190
+ type: 'button',
191
+ className: 'absolute right-4 top-1/2 -translate-y-1/2 opacity-50 hover:opacity-70 transition-opacity cursor-pointer focus:outline-none',
192
+ onClick: togglePasswordVisibility,
193
+ tabIndex: -1,
194
+ children: showPassword ? jsxRuntime.jsx(index.EyeClosedIcon, {
195
+ size: 16,
196
+ color: '#0C1C33'
197
+ }) : jsxRuntime.jsx(index.EyeOpenIcon, {
198
+ size: 16,
199
+ color: '#0C1C33'
200
+ })
201
+ })]
202
+ });
203
+ }
204
+ // Render password input without prefix
205
+ if (isPassword) {
206
+ return jsxRuntime.jsxs("div", {
207
+ className: 'relative',
208
+ children: [jsxRuntime.jsx("input", Object.assign({
209
+ className: classes + (showPasswordToggle ? ' pr-12' : ''),
210
+ disabled: disabled,
211
+ type: inputType
212
+ }, props)), showPasswordToggle && jsxRuntime.jsx("button", {
213
+ type: 'button',
214
+ className: 'absolute right-4 top-1/2 -translate-y-1/2 opacity-50 hover:opacity-70 transition-opacity cursor-pointer focus:outline-none',
215
+ onClick: togglePasswordVisibility,
216
+ tabIndex: -1,
217
+ children: showPassword ? jsxRuntime.jsx(index.EyeClosedIcon, {
218
+ size: 16,
219
+ color: '#0C1C33'
220
+ }) : jsxRuntime.jsx(index.EyeOpenIcon, {
221
+ size: 16,
222
+ color: '#0C1C33'
223
+ })
224
+ })]
225
+ });
226
+ }
227
+ // Regular input without prefix
228
+ return jsxRuntime.jsx("input", Object.assign({
229
+ className: classes,
230
+ disabled: disabled,
231
+ type: inputType
232
+ }, props));
233
+ };
234
+
235
+ exports.Input = Input;
236
+ exports.default = Input;
237
+ //# 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'\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 /**\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 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 // Determine color scheme based on state\n let finalColorScheme = colorScheme\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","type","prefix","prefixClassName","showPasswordToggle","props","__rest","useTheme","showPassword","setShowPassword","useState","prefixWidth","setPrefixWidth","prefixRef","useRef","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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"}
@@ -0,0 +1,232 @@
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
+
10
+ const input = cva('w-full transition-all font-inter placeholder:text-opacity-60 text-[0.875rem] leading-[1.0625rem]', {
11
+ variants: {
12
+ theme: {
13
+ light: 'text-[#111111] placeholder:text-[rgba(17,17,17,0.6)]',
14
+ dark: 'text-white placeholder:text-gray-400'
15
+ },
16
+ colorScheme: {
17
+ default: 'focus:ring-blue-500/20',
18
+ brand: 'focus:ring-dash-brand/20',
19
+ error: 'focus:ring-red-500/20',
20
+ success: 'focus:ring-green-500/20',
21
+ 'light-gray': 'focus:ring-[#6B7280]/20'
22
+ },
23
+ size: {
24
+ sm: 'dash-block-sm font-light',
25
+ md: 'dash-block-md font-light',
26
+ xl: 'dash-block-xl font-light'
27
+ },
28
+ variant: {
29
+ outlined: 'outline outline-1 outline-offset-[-1px]',
30
+ filled: 'border-none'
31
+ },
32
+ disabled: {
33
+ false: '',
34
+ true: 'opacity-60 cursor-not-allowed'
35
+ }
36
+ },
37
+ compoundVariants: [
38
+ // Outlined variant colors
39
+ {
40
+ variant: 'outlined',
41
+ colorScheme: 'default',
42
+ class: 'outline-[rgba(17,17,17,0.32)] focus:outline-[rgba(17,17,17,0.6)]'
43
+ }, {
44
+ variant: 'outlined',
45
+ colorScheme: 'brand',
46
+ class: 'outline-dash-brand/30 focus:outline-dash-brand'
47
+ }, {
48
+ variant: 'outlined',
49
+ colorScheme: 'error',
50
+ class: 'outline-red-500 focus:outline-red-500'
51
+ }, {
52
+ variant: 'outlined',
53
+ colorScheme: 'success',
54
+ class: 'outline-green-500 focus:outline-green-500'
55
+ }, {
56
+ variant: 'outlined',
57
+ colorScheme: 'light-gray',
58
+ class: 'outline-[#6B7280]/50 focus:outline-[#6B7280]'
59
+ },
60
+ // Outlined variant with focus ring
61
+ {
62
+ variant: 'outlined',
63
+ class: 'focus:ring-2'
64
+ },
65
+ // Outlined variant background
66
+ {
67
+ variant: 'outlined',
68
+ theme: 'light',
69
+ class: 'bg-white'
70
+ }, {
71
+ variant: 'outlined',
72
+ theme: 'dark',
73
+ class: 'bg-gray-800'
74
+ },
75
+ // Filled variant colors
76
+ {
77
+ variant: 'filled',
78
+ colorScheme: 'default',
79
+ class: 'bg-[rgba(76,126,255,0.15)] focus:bg-[rgba(76,126,255,0.2)]'
80
+ }, {
81
+ variant: 'filled',
82
+ colorScheme: 'brand',
83
+ class: 'bg-dash-brand/15 focus:bg-dash-brand/20'
84
+ }, {
85
+ variant: 'filled',
86
+ colorScheme: 'error',
87
+ class: 'bg-red-500/15 focus:bg-red-500/20'
88
+ }, {
89
+ variant: 'filled',
90
+ colorScheme: 'success',
91
+ class: 'bg-green-500/15 focus:bg-green-500/20'
92
+ }, {
93
+ variant: 'filled',
94
+ colorScheme: 'light-gray',
95
+ class: 'bg-[#0C1C33]/5 focus:bg-[#0C1C33]/10'
96
+ },
97
+ // Filled variant with focus ring
98
+ {
99
+ variant: 'filled',
100
+ class: 'focus:ring-2'
101
+ }],
102
+ defaultVariants: {
103
+ theme: 'light',
104
+ colorScheme: 'default',
105
+ size: 'xl',
106
+ variant: 'outlined',
107
+ disabled: false
108
+ }
109
+ });
110
+ /**
111
+ * A versatile input component that adapts to light/dark theme,
112
+ * supports various color schemes, sizes, variants, and states.
113
+ * For password inputs, includes a toggleable eye icon.
114
+ * Supports prefix text or elements before input content.
115
+ *
116
+ * @example
117
+ * <Input
118
+ * type='password'
119
+ * placeholder='Enter password'
120
+ * colorScheme='brand'
121
+ * size='xl'
122
+ * prefix="https://"
123
+ * />
124
+ */
125
+ const Input = _a => {
126
+ var {
127
+ className = '',
128
+ colorScheme,
129
+ size,
130
+ variant,
131
+ error = false,
132
+ success = false,
133
+ disabled = false,
134
+ type,
135
+ prefix,
136
+ prefixClassName = '',
137
+ showPasswordToggle = true
138
+ } = _a,
139
+ props = __rest(_a, ["className", "colorScheme", "size", "variant", "error", "success", "disabled", "type", "prefix", "prefixClassName", "showPasswordToggle"]);
140
+ const {
141
+ theme
142
+ } = useTheme();
143
+ const [showPassword, setShowPassword] = useState(false);
144
+ const [prefixWidth, setPrefixWidth] = useState(0);
145
+ const prefixRef = useRef(null);
146
+ // Determine color scheme based on state
147
+ let finalColorScheme = colorScheme;
148
+ if (error) finalColorScheme = 'error';else if (success) finalColorScheme = 'success';
149
+ const classes = input({
150
+ theme,
151
+ colorScheme: finalColorScheme,
152
+ size,
153
+ variant,
154
+ disabled
155
+ }) + ' ' + className;
156
+ const isPassword = type === 'password';
157
+ const inputType = isPassword && showPassword ? 'text' : type;
158
+ const hasPrefix = Boolean(prefix);
159
+ const togglePasswordVisibility = () => {
160
+ setShowPassword(!showPassword);
161
+ };
162
+ // Measure actual prefix width
163
+ useEffect(() => {
164
+ if (prefixRef.current) {
165
+ const width = prefixRef.current.offsetWidth;
166
+ // Convert px to rem (assuming 16px base) and add base padding (1rem) + extra space (0.5rem)
167
+ setPrefixWidth(width / 16 + 1.5);
168
+ }
169
+ }, [prefix]);
170
+ // Render with prefix
171
+ if (hasPrefix) {
172
+ return jsxs("div", {
173
+ className: 'relative',
174
+ children: [jsx("div", {
175
+ ref: prefixRef,
176
+ className: `absolute left-4 top-1/2 -translate-y-1/2 z-10 text-[0.875rem] opacity-60 pointer-events-none select-none ${prefixClassName}`,
177
+ children: prefix
178
+ }), jsx("input", Object.assign({
179
+ className: `${classes}${isPassword && showPasswordToggle ? ' pr-12' : ''}`,
180
+ style: {
181
+ paddingLeft: prefixWidth ? `${prefixWidth}rem` : '1rem'
182
+ },
183
+ disabled: disabled,
184
+ type: inputType
185
+ }, props)), isPassword && showPasswordToggle && jsx("button", {
186
+ type: 'button',
187
+ className: 'absolute right-4 top-1/2 -translate-y-1/2 opacity-50 hover:opacity-70 transition-opacity cursor-pointer focus:outline-none',
188
+ onClick: togglePasswordVisibility,
189
+ tabIndex: -1,
190
+ children: showPassword ? jsx(EyeClosedIcon, {
191
+ size: 16,
192
+ color: '#0C1C33'
193
+ }) : jsx(EyeOpenIcon, {
194
+ size: 16,
195
+ color: '#0C1C33'
196
+ })
197
+ })]
198
+ });
199
+ }
200
+ // Render password input without prefix
201
+ if (isPassword) {
202
+ return jsxs("div", {
203
+ className: 'relative',
204
+ children: [jsx("input", Object.assign({
205
+ className: classes + (showPasswordToggle ? ' pr-12' : ''),
206
+ disabled: disabled,
207
+ type: inputType
208
+ }, props)), showPasswordToggle && jsx("button", {
209
+ type: 'button',
210
+ className: 'absolute right-4 top-1/2 -translate-y-1/2 opacity-50 hover:opacity-70 transition-opacity cursor-pointer focus:outline-none',
211
+ onClick: togglePasswordVisibility,
212
+ tabIndex: -1,
213
+ children: showPassword ? jsx(EyeClosedIcon, {
214
+ size: 16,
215
+ color: '#0C1C33'
216
+ }) : jsx(EyeOpenIcon, {
217
+ size: 16,
218
+ color: '#0C1C33'
219
+ })
220
+ })]
221
+ });
222
+ }
223
+ // Regular input without prefix
224
+ return jsx("input", Object.assign({
225
+ className: classes,
226
+ disabled: disabled,
227
+ type: inputType
228
+ }, props));
229
+ };
230
+
231
+ export { Input, Input as default };
232
+ //# 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'\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 /**\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 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 // Determine color scheme based on state\n let finalColorScheme = colorScheme\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","type","prefix","prefixClassName","showPasswordToggle","props","__rest","useTheme","showPassword","setShowPassword","useState","prefixWidth","setPrefixWidth","prefixRef","useRef","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":";;;;;;;;;AAKA,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;AAiBD;;;;;;;;;;;;;;AAcG;AACUM,MAAAA,KAAK,GAA0BC,EAa3C,IAAI;EAbuC,IAAA;AAC1CC,MAAAA,SAAS,GAAG,EAAE;MACdpB,WAAW;MACXK,IAAI;MACJI,OAAO;AACPN,MAAAA,KAAK,GAAG,KAAK;AACbC,MAAAA,OAAO,GAAG,KAAK;AACfQ,MAAAA,QAAQ,GAAG,KAAK;MAChBS,IAAI;MACJC,MAAM;AACNC,MAAAA,eAAe,GAAG,EAAE;AACpBC,MAAAA,kBAAkB,GAAG;AAAI,KAAA,GAAAL,EAE1B;AADIM,IAAAA,KAAK,GAAAC,MAAA,CAAAP,EAAA,EAZkC,0IAa3C,CADS;EAER,MAAM;AAAEtB,IAAAA;GAAO,GAAG8B,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;AAE9C;EACA,IAAIC,gBAAgB,GAAGnC,WAAW;AAClC,EAAA,IAAIG,KAAK,EAAEgC,gBAAgB,GAAG,OAAO,CAAA,KAChC,IAAI/B,OAAO,EAAE+B,gBAAgB,GAAG,SAAS;EAE9C,MAAMC,OAAO,GAAG1C,KAAK,CAAC;IACpBG,KAAK;AACLG,IAAAA,WAAW,EAAEmC,gBAAgB;IAC7B9B,IAAI;IACJI,OAAO;AACPG,IAAAA;AACD,GAAA,CAAC,GAAG,GAAG,GAAGQ,SAAS;AAEpB,EAAA,MAAMiB,UAAU,GAAGhB,IAAI,KAAK,UAAU;EACtC,MAAMiB,SAAS,GAAGD,UAAU,IAAIT,YAAY,GAAG,MAAM,GAAGP,IAAI;AAC5D,EAAA,MAAMkB,SAAS,GAAGC,OAAO,CAAClB,MAAM,CAAC;EAEjC,MAAMmB,wBAAwB,GAAGA,MAAW;IAC1CZ,eAAe,CAAC,CAACD,YAAY,CAAC;GAC/B;AAED;AACAc,EAAAA,SAAS,CAAC,MAAK;IACb,IAAIT,SAAS,CAACU,OAAO,EAAE;AACrB,MAAA,MAAMC,KAAK,GAAGX,SAAS,CAACU,OAAO,CAACE,WAAW;AAC3C;AACAb,MAAAA,cAAc,CAACY,KAAK,GAAG,EAAE,GAAG,GAAG,CAAC;AAClC;AACF,GAAC,EAAE,CAACtB,MAAM,CAAC,CAAC;AAEZ;AACA,EAAA,IAAIiB,SAAS,EAAE;IACb,OACEO,IAAK,CAAA,KAAA,EAAA;AAAA1B,MAAAA,SAAS,EAAC,UAAU;AAAA2B,MAAAA,QAAA,EAAA,CACvBC;AACEC,QAAAA,GAAG,EAAEhB,SAAS;QACdb,SAAS,EAAE,CAA4GG,yGAAAA,EAAAA,eAAe,CAAE,CAAA;AAEvIwB,QAAAA,QAAA,EAAAzB;QACG,EACN0B,GAAA,CAAA,OAAA,EAAAE,MAAA,CAAAC,MAAA,CAAA;QACE/B,SAAS,EAAE,CAAGgB,EAAAA,OAAO,CAAGC,EAAAA,UAAU,IAAIb,kBAAkB,GAAG,QAAQ,GAAG,EAAE,CAAE,CAAA;AAC1E4B,QAAAA,KAAK,EAAE;AAAEC,UAAAA,WAAW,EAAEtB,WAAW,GAAG,CAAGA,EAAAA,WAAW,KAAK,GAAG;SAAQ;AAClEnB,QAAAA,QAAQ,EAAEA,QAAQ;AAClBS,QAAAA,IAAI,EAAEiB;AACF,OAAA,EAAAb,KAAK,EACT,EACDY,UAAU,IAAIb,kBAAkB,IAC/BwB,GACE,CAAA,QAAA,EAAA;AAAA3B,QAAAA,IAAI,EAAC,QAAQ;AACbD,QAAAA,SAAS,EAAC,4HAA4H;AACtIkC,QAAAA,OAAO,EAAEb,wBAAwB;QACjCc,QAAQ,EAAE,EAAE;kBAEX3B,YAAY,GACToB,GAAC,CAAAQ,aAAa,EAAC;AAAAnD,UAAAA,IAAI,EAAE,EAAE;AAAEoD,UAAAA,KAAK,EAAC;AAAY,SAAA,CAAA,GAC3CT,GAAC,CAAAU,WAAW,EAAC;AAAArD,UAAAA,IAAI,EAAE,EAAE;AAAEoD,UAAAA,KAAK,EAAC;SAAY;AAAA,OAAA,CAEhD;AAAA,KAAA,CACG;AAEV;AAEA;AACA,EAAA,IAAIpB,UAAU,EAAE;IACd,OACES,IAAK,CAAA,KAAA,EAAA;AAAA1B,MAAAA,SAAS,EAAC,UAAU;iBACvB4B,GACE,CAAA,OAAA,EAAAE,MAAA,CAAAC,MAAA,CAAA;QAAA/B,SAAS,EAAEgB,OAAO,IAAIZ,kBAAkB,GAAG,QAAQ,GAAG,EAAE,CAAC;AACzDZ,QAAAA,QAAQ,EAAEA,QAAQ;AAClBS,QAAAA,IAAI,EAAEiB;OACF,EAAAb,KAAK,CACT,CAAA,EACDD,kBAAkB,IACjBwB,GAAA,CAAA,QAAA,EAAA;AACE3B,QAAAA,IAAI,EAAC,QAAQ;AACbD,QAAAA,SAAS,EAAC,4HAA4H;AACtIkC,QAAAA,OAAO,EAAEb,wBAAwB;QACjCc,QAAQ,EAAE,EAAE;AAAAR,QAAAA,QAAA,EAEXnB,YAAY,GACToB,GAAC,CAAAQ,aAAa,EAAC;AAAAnD,UAAAA,IAAI,EAAE,EAAE;AAAEoD,UAAAA,KAAK,EAAC;AAAY,SAAA,CAAA,GAC3CT,GAAC,CAAAU,WAAW,EAAC;AAAArD,UAAAA,IAAI,EAAE,EAAE;AAAEoD,UAAAA,KAAK,EAAC;SAAY;AAAA,OAAA,CAEhD;AAAA,KAAA,CACG;AAEV;AAEA;AACA,EAAA,OACET,GACE,CAAA,OAAA,EAAAE,MAAA,CAAAC,MAAA,CAAA;AAAA/B,IAAAA,SAAS,EAAEgB,OAAO;AAClBxB,IAAAA,QAAQ,EAAEA,QAAQ;AAClBS,IAAAA,IAAI,EAAEiB;KACFb,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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.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,QAAQ,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,IAAgB,CAAA,IAAA,EAAA;AAAAV,MAAAA,SAAS,EAAC,wBAAwB;iBAChDK,GAAC,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,GAAA,CAACO,IAAI,EAAC;AAAAX,UAAAA,IAAI,EAAEA,IAAI;AAAEY,UAAAA,MAAM,EAAC,QAAQ;UAAAP,QAAA,EAC9BE,IAAI,CAACM;SAAI,CACL,EACNN,IAAI,CAACO,WAAW,IACfV,GAAA,CAACO,IAAI,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;;;;"}