@mdigital_ui/ui 0.2.1 → 0.2.3

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 (57) hide show
  1. package/README.md +210 -9
  2. package/dist/button/index.js +1 -1
  3. package/dist/cascader/index.js +1 -1
  4. package/dist/checkbox/index.js +1 -1
  5. package/dist/{chunk-W7BQYIXF.js → chunk-267WNY3E.js} +6 -6
  6. package/dist/chunk-267WNY3E.js.map +1 -0
  7. package/dist/{chunk-H2HIBD5Y.js → chunk-4XXDRVFM.js} +3 -3
  8. package/dist/chunk-4XXDRVFM.js.map +1 -0
  9. package/dist/{chunk-E2CYDDYC.js → chunk-6V5I5HJ2.js} +3 -3
  10. package/dist/{chunk-E2CYDDYC.js.map → chunk-6V5I5HJ2.js.map} +1 -1
  11. package/dist/{chunk-L3SP7GHC.js → chunk-77DW6PAW.js} +5 -5
  12. package/dist/{chunk-L3SP7GHC.js.map → chunk-77DW6PAW.js.map} +1 -1
  13. package/dist/{chunk-JZCHZ4B3.js → chunk-ASW7TEAN.js} +3 -3
  14. package/dist/chunk-ASW7TEAN.js.map +1 -0
  15. package/dist/{chunk-EYTOKUBM.js → chunk-BH4DXQC4.js} +3 -3
  16. package/dist/{chunk-EYTOKUBM.js.map → chunk-BH4DXQC4.js.map} +1 -1
  17. package/dist/{chunk-SERJ3TZE.js → chunk-G6TAVRTJ.js} +3 -3
  18. package/dist/chunk-G6TAVRTJ.js.map +1 -0
  19. package/dist/{chunk-KTBPIEP2.js → chunk-GEWR5ROK.js} +3 -3
  20. package/dist/chunk-GEWR5ROK.js.map +1 -0
  21. package/dist/{chunk-RQBXZKTH.js → chunk-JLTDJ3VZ.js} +6 -6
  22. package/dist/{chunk-RQBXZKTH.js.map → chunk-JLTDJ3VZ.js.map} +1 -1
  23. package/dist/{chunk-LBJG2UWT.js → chunk-KTAIRCOL.js} +3 -3
  24. package/dist/{chunk-LBJG2UWT.js.map → chunk-KTAIRCOL.js.map} +1 -1
  25. package/dist/{chunk-52M2PO3O.js → chunk-QPJL66S7.js} +3 -3
  26. package/dist/chunk-QPJL66S7.js.map +1 -0
  27. package/dist/{chunk-CLLQDCDR.js → chunk-UAMFKX6L.js} +6 -6
  28. package/dist/chunk-UAMFKX6L.js.map +1 -0
  29. package/dist/{chunk-2JGAYDZR.js → chunk-XMKNYG7I.js} +6 -6
  30. package/dist/{chunk-2JGAYDZR.js.map → chunk-XMKNYG7I.js.map} +1 -1
  31. package/dist/{chunk-AOITJRSV.js → chunk-YZ6V6BQ7.js} +3 -3
  32. package/dist/chunk-YZ6V6BQ7.js.map +1 -0
  33. package/dist/date-picker/index.js +1 -1
  34. package/dist/index.js +17 -17
  35. package/dist/input/index.js +1 -1
  36. package/dist/input-password/index.js +2 -2
  37. package/dist/multi-select/index.js +1 -1
  38. package/dist/progress/index.js +1 -1
  39. package/dist/radio/index.js +1 -1
  40. package/dist/select/index.js +1 -1
  41. package/dist/styles/base.css +1980 -176
  42. package/dist/styles/global.css +288 -143
  43. package/dist/styles/themes/dark.css +44 -40
  44. package/dist/styles/themes/light.css +12 -9
  45. package/dist/switch/index.js +1 -1
  46. package/dist/table/index.js +4 -4
  47. package/dist/transfer/index.js +2 -2
  48. package/dist/tree-select/index.js +1 -1
  49. package/package.json +2 -1
  50. package/dist/chunk-52M2PO3O.js.map +0 -1
  51. package/dist/chunk-AOITJRSV.js.map +0 -1
  52. package/dist/chunk-CLLQDCDR.js.map +0 -1
  53. package/dist/chunk-H2HIBD5Y.js.map +0 -1
  54. package/dist/chunk-JZCHZ4B3.js.map +0 -1
  55. package/dist/chunk-KTBPIEP2.js.map +0 -1
  56. package/dist/chunk-SERJ3TZE.js.map +0 -1
  57. package/dist/chunk-W7BQYIXF.js.map +0 -1
package/README.md CHANGED
@@ -100,24 +100,225 @@ Both import styles work identically. Use whichever you prefer.
100
100
  import type { ButtonProps, InputProps } from '@mdigital_ui/ui'
101
101
  ```
102
102
 
103
- ## Theming
103
+ ## Theming & Customization
104
104
 
105
- ### CSS Variable Overrides
105
+ The UI Kit uses **CSS custom properties (variables)** for all design tokens, making it easy to customize without touching Tailwind's configuration.
106
106
 
107
- Customize the design system by overriding CSS variables:
107
+ ### Quick Customization
108
+
109
+ Create a CSS file to override any design tokens:
108
110
 
109
111
  ```css
112
+ /* app/theme.css or src/theme.css */
110
113
  :root {
111
- /* Brand colors */
112
- --color-primary: oklch(0.55 0.22 270);
113
- --color-accent: oklch(0.75 0.18 45);
114
+ /* Brand Colors */
115
+ --color-primary: oklch(0.55 0.22 270); /* Purple primary */
116
+ --color-primary-hover: oklch(0.50 0.24 270);
117
+ --color-accent: oklch(0.75 0.18 45); /* Orange accent */
118
+
119
+ /* Semantic Colors */
120
+ --color-success: oklch(0.65 0.20 140);
121
+ --color-error: oklch(0.60 0.25 20);
114
122
 
115
- /* Component sizes */
123
+ /* Component Sizing */
116
124
  --button-height-md: 2.5rem;
117
125
  --input-height-md: 2.5rem;
118
-
119
- /* Border radius */
120
126
  --radius-md: 0.5rem;
127
+
128
+ /* Typography */
129
+ --font-sans: 'Inter', ui-sans-serif, system-ui, sans-serif;
130
+ --text-base: 1rem;
131
+ }
132
+ ```
133
+
134
+ Then import it **after** the UI Kit styles:
135
+
136
+ ```tsx
137
+ import '@mdigital_ui/ui/styles/base.css'
138
+ import '@mdigital_ui/ui/styles/themes/light.css'
139
+ import './theme.css' // Your customizations
140
+ ```
141
+
142
+ ### Available Variables
143
+
144
+ <details>
145
+ <summary><strong>🎨 Colors (Click to expand)</strong></summary>
146
+
147
+ ```css
148
+ /* Brand Colors */
149
+ --color-primary
150
+ --color-primary-hover
151
+ --color-primary-active
152
+ --color-primary-foreground
153
+ --color-secondary
154
+ --color-secondary-hover
155
+ --color-secondary-active
156
+ --color-secondary-foreground
157
+ --color-accent
158
+ --color-accent-hover
159
+ --color-accent-active
160
+ --color-accent-foreground
161
+
162
+ /* Semantic Colors */
163
+ --color-success
164
+ --color-success-hover
165
+ --color-success-active
166
+ --color-error
167
+ --color-error-hover
168
+ --color-error-active
169
+ --color-warning
170
+ --color-warning-hover
171
+ --color-warning-active
172
+ --color-info
173
+ --color-info-hover
174
+ --color-info-active
175
+
176
+ /* Backgrounds & Surfaces */
177
+ --color-background
178
+ --color-background-secondary
179
+ --color-surface
180
+ --color-border
181
+ --color-border-primary
182
+
183
+ /* Text Colors */
184
+ --color-text-primary
185
+ --color-text-secondary
186
+ --color-text-muted
187
+
188
+ /* Grayscale */
189
+ --color-gray-50 through --color-gray-950
190
+ --color-white
191
+ --color-black
192
+ ```
193
+ </details>
194
+
195
+ <details>
196
+ <summary><strong>📐 Sizing & Spacing (Click to expand)</strong></summary>
197
+
198
+ ```css
199
+ /* Button Sizes */
200
+ --button-height-xs: 1.75rem
201
+ --button-height-sm: 2rem
202
+ --button-height-md: 2.25rem
203
+ --button-height-lg: 2.75rem
204
+ --button-padding-x-xs: 0.5rem
205
+ --button-padding-x-sm: 0.75rem
206
+ --button-padding-x-md: 0.875rem
207
+ --button-padding-x-lg: 1.25rem
208
+
209
+ /* Input Sizes */
210
+ --input-height-xs: 1.75rem
211
+ --input-height-sm: 2rem
212
+ --input-height-md: 2.25rem
213
+ --input-height-lg: 2.75rem
214
+ --input-padding-x-xs through --input-padding-x-lg
215
+
216
+ /* Select Sizes */
217
+ --select-height-xs through --select-height-lg
218
+ --select-padding-x-xs through --select-padding-x-lg
219
+
220
+ /* Checkbox/Radio Sizes */
221
+ --checkbox-size-xs: 0.875rem
222
+ --checkbox-size-sm: 1rem
223
+ --checkbox-size-md: 1.125rem
224
+ --checkbox-size-lg: 1.375rem
225
+
226
+ /* Switch Sizes */
227
+ --switch-width-xs through --switch-width-lg
228
+ --switch-height-xs through --switch-height-lg
229
+
230
+ /* Spacing Scale */
231
+ --spacing-0 through --spacing-12
232
+ ```
233
+ </details>
234
+
235
+ <details>
236
+ <summary><strong>✏️ Typography (Click to expand)</strong></summary>
237
+
238
+ ```css
239
+ /* Font Families */
240
+ --font-sans: ui-sans-serif, system-ui, sans-serif
241
+ --font-mono: ui-monospace, 'SF Mono', monospace
242
+
243
+ /* Font Sizes */
244
+ --text-xs: 0.75rem
245
+ --text-sm: 0.875rem
246
+ --text-base: 0.9rem
247
+ --text-lg: 1.125rem
248
+
249
+ /* Font Weights */
250
+ --font-weight-normal: 400
251
+ --font-weight-medium: 500
252
+ --font-weight-semibold: 600
253
+ --font-weight-bold: 700
254
+
255
+ /* Label Sizes */
256
+ --label-font-size-xs through --label-font-size-lg
257
+ ```
258
+ </details>
259
+
260
+ <details>
261
+ <summary><strong>🎭 Effects & Decoration (Click to expand)</strong></summary>
262
+
263
+ ```css
264
+ /* Border Radius */
265
+ --radius-none: 0px
266
+ --radius-sm: 0.25rem
267
+ --radius-md: 0.375rem
268
+ --radius-lg: 0.5rem
269
+ --radius-xl: 0.625rem
270
+ --radius-2xl: 0.75rem
271
+ --radius-3xl: 1rem
272
+ --radius-full: 9999px
273
+
274
+ /* Shadows */
275
+ --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05)
276
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1)
277
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1)
278
+ --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1)
279
+ --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25)
280
+
281
+ /* Transitions */
282
+ --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1)
283
+ --transition-base: 200ms cubic-bezier(0.4, 0, 0.2, 1)
284
+ --transition-slow: 300ms cubic-bezier(0.4, 0, 0.2, 1)
285
+
286
+ /* Z-Index Layers */
287
+ --z-dropdown: 1000
288
+ --z-sticky: 1020
289
+ --z-modal: 1040
290
+ --z-popover: 1050
291
+ --z-tooltip: 1060
292
+ ```
293
+ </details>
294
+
295
+ ### Example: Custom Brand Theme
296
+
297
+ See [`examples/custom-theme.css`](./examples/custom-theme.css) for a complete template with all available variables and comments.
298
+
299
+ Quick example:
300
+
301
+ ```css
302
+ /* brand-theme.css */
303
+ :root {
304
+ /* Acme Corp Brand Colors */
305
+ --color-primary: oklch(0.60 0.20 200); /* Acme Blue */
306
+ --color-primary-hover: oklch(0.55 0.22 200);
307
+ --color-secondary: oklch(0.55 0.15 320); /* Acme Purple */
308
+ --color-accent: oklch(0.75 0.18 160); /* Acme Green */
309
+
310
+ /* Rounded Everything */
311
+ --radius-sm: 0.5rem;
312
+ --radius-md: 0.75rem;
313
+ --radius-lg: 1rem;
314
+
315
+ /* Larger Buttons */
316
+ --button-height-sm: 2.25rem;
317
+ --button-height-md: 2.75rem;
318
+ --button-height-lg: 3.25rem;
319
+
320
+ /* Custom Font */
321
+ --font-sans: 'Poppins', ui-sans-serif, system-ui, sans-serif;
121
322
  }
122
323
  ```
123
324
 
@@ -1,4 +1,4 @@
1
- export { button_default as default } from '../chunk-LBJG2UWT.js';
1
+ export { button_default as default } from '../chunk-KTAIRCOL.js';
2
2
  import '../chunk-J3G5WWGR.js';
3
3
  import '../chunk-5UEWVFF6.js';
4
4
  import '../chunk-YNNAOXU5.js';
@@ -1,4 +1,4 @@
1
- export { cascader_default as default } from '../chunk-SERJ3TZE.js';
1
+ export { cascader_default as default } from '../chunk-G6TAVRTJ.js';
2
2
  import '../chunk-YNNAOXU5.js';
3
3
  //# sourceMappingURL=index.js.map
4
4
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- export { checkbox_default as default } from '../chunk-H2HIBD5Y.js';
1
+ export { checkbox_default as default } from '../chunk-4XXDRVFM.js';
2
2
  import '../chunk-5UEWVFF6.js';
3
3
  import '../chunk-YNNAOXU5.js';
4
4
  //# sourceMappingURL=index.js.map
@@ -18,10 +18,10 @@ var multiSelectTriggerVariants = cva(
18
18
  success: "border-success"
19
19
  },
20
20
  size: {
21
- xs: "h-8 pl-1 pr-2 text-xs",
22
- sm: "h-[var(--input-height-sm)] px-1.5 text-sm",
23
- md: "h-[var(--input-height-md)] px-2 text-base",
24
- lg: "h-[var(--input-height-lg)] px-2 text-lg"
21
+ xs: "h-[var(--select-height-xs)] pl-[var(--select-padding-x-xs)] pr-[calc(var(--select-padding-x-xs)*2)] text-xs",
22
+ sm: "h-[var(--select-height-sm)] pl-[var(--select-padding-x-sm)] pr-[calc(var(--select-padding-x-sm)*2)] text-sm",
23
+ md: "h-[var(--select-height-md)] pl-[var(--select-padding-x-md)] pr-[calc(var(--select-padding-x-md)*2)] text-base",
24
+ lg: "h-[var(--select-height-lg)] pl-[var(--select-padding-x-lg)] pr-[calc(var(--select-padding-x-lg)*2)] text-lg"
25
25
  },
26
26
  fullWidth: {
27
27
  true: "w-full",
@@ -683,5 +683,5 @@ MultiSelect.displayName = "MultiSelect";
683
683
  var multi_select_default = MultiSelect;
684
684
 
685
685
  export { multi_select_default };
686
- //# sourceMappingURL=chunk-W7BQYIXF.js.map
687
- //# sourceMappingURL=chunk-W7BQYIXF.js.map
686
+ //# sourceMappingURL=chunk-267WNY3E.js.map
687
+ //# sourceMappingURL=chunk-267WNY3E.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/multi-select/utils.ts","../src/multi-select/index.tsx"],"names":[],"mappings":"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","file":"chunk-267WNY3E.js","sourcesContent":["import { cva } from 'class-variance-authority'\n\nexport const multiSelectTriggerVariants = cva(\n 'w-full flex items-center justify-between rounded-md bg-background text-text-primary border focus:border-primary outline-none disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer gap-1',\n {\n variants: {\n status: {\n default: 'border-border',\n error: 'border-error',\n warning: 'border-warning',\n info: 'border-info',\n success: 'border-success',\n },\n size: {\n xs: 'h-[var(--select-height-xs)] pl-[var(--select-padding-x-xs)] pr-[calc(var(--select-padding-x-xs)*2)] text-xs',\n sm: 'h-[var(--select-height-sm)] pl-[var(--select-padding-x-sm)] pr-[calc(var(--select-padding-x-sm)*2)] text-sm',\n md: 'h-[var(--select-height-md)] pl-[var(--select-padding-x-md)] pr-[calc(var(--select-padding-x-md)*2)] text-base',\n lg: 'h-[var(--select-height-lg)] pl-[var(--select-padding-x-lg)] pr-[calc(var(--select-padding-x-lg)*2)] text-lg',\n },\n fullWidth: {\n true: 'w-full',\n false: 'max-w-full',\n },\n },\n defaultVariants: {\n status: 'default',\n size: 'md',\n fullWidth: true,\n },\n },\n)\n\nexport const multiSelectDropdownVariants = cva(\n 'absolute z-50 mt-1 overflow-auto rounded-md border border-border bg-background',\n)\n\nexport const multiSelectOptionVariants = cva(\n 'relative cursor-pointer select-none px-3 py-2 text-text-primary',\n {\n variants: {\n selected: {\n true: 'bg-primary/10 text-primary font-medium',\n false: 'hover:bg-surface',\n },\n disabled: {\n true: 'opacity-50 cursor-not-allowed',\n false: '',\n },\n },\n defaultVariants: {\n selected: false,\n disabled: false,\n },\n },\n)\n\nexport const multiSelectGroupVariants = cva(\n 'px-3 py-2 text-xs font-semibold text-text-secondary uppercase tracking-wider bg-surface',\n)\n","import { useVirtualizer } from '@tanstack/react-virtual'\nimport { Check, ChevronDown, ChevronUp, Loader2, Search, X } from 'lucide-react'\nimport React, { useCallback } from 'react'\n\nimport { Popover, PopoverContent, PopoverTrigger } from '../popover'\nimport { cn, iconSizes } from '../utils'\nimport type { MultiSelectOption, MultiSelectProps } from './types'\nimport {\n multiSelectGroupVariants,\n multiSelectOptionVariants,\n multiSelectTriggerVariants,\n} from './utils'\n\nconst MultiSelect = React.memo<MultiSelectProps>(\n ({\n size = 'md',\n label,\n helperText,\n error,\n warning,\n info,\n success,\n options = [],\n placeholder = 'Select options',\n loading = false,\n fullWidth = true,\n maxChipsVisible = 3,\n value,\n defaultValue,\n onChange,\n disabled,\n required,\n clearable = false,\n virtualizeThreshold = 50,\n maxDropdownHeight = 300,\n className,\n ref,\n ...props\n }) => {\n const [isOpen, setIsOpen] = React.useState(false)\n const [internalValue, setInternalValue] = React.useState<string[]>(\n defaultValue || [],\n )\n const [parentNode, setParentNode] = React.useState<HTMLDivElement | null>(\n null,\n )\n const [searchQuery, setSearchQuery] = React.useState('')\n const [highlightedIndex, setHighlightedIndex] = React.useState(-1)\n const [visibleChipsCount, setVisibleChipsCount] =\n React.useState(maxChipsVisible)\n const [showTopArrow, setShowTopArrow] = React.useState(false)\n const [showBottomArrow, setShowBottomArrow] = React.useState(false)\n\n const triggerRef = React.useRef<HTMLButtonElement>(null)\n const inputRef = React.useRef<HTMLInputElement>(null)\n const scrollContainerRef = React.useRef<HTMLDivElement>(null)\n\n const currentValue = value !== undefined ? value : internalValue\n\n let status: 'default' | 'error' | 'warning' | 'info' | 'success' = 'default'\n const helperMessage = error || warning || info || success || helperText\n\n if (error) {\n status = 'error'\n } else if (warning) {\n status = 'warning'\n } else if (success) {\n status = 'success'\n } else if (info) {\n status = 'info'\n }\n\n const groupedOptions = React.useMemo(() => {\n const groups: Record<string, MultiSelectOption[]> = {}\n const ungrouped: MultiSelectOption[] = []\n\n options.forEach((option) => {\n if (option.group) {\n if (!groups[option.group]) {\n groups[option.group] = []\n }\n groups[option.group]!.push(option)\n } else {\n ungrouped.push(option)\n }\n })\n\n return { groups, ungrouped }\n }, [options])\n\n const flattenedOptions = React.useMemo(() => {\n const items: Array<{\n type: 'option' | 'group'\n data: MultiSelectOption | string\n }> = []\n\n groupedOptions.ungrouped.forEach((option) => {\n items.push({ type: 'option', data: option })\n })\n\n Object.entries(groupedOptions.groups).forEach(\n ([groupName, groupOptions]) => {\n items.push({ type: 'group', data: groupName })\n groupOptions.forEach((option) => {\n items.push({ type: 'option', data: option })\n })\n },\n )\n\n return items\n }, [groupedOptions])\n\n const filteredOptions = React.useMemo(() => {\n if (!searchQuery) return flattenedOptions\n\n return flattenedOptions.filter((item) => {\n if (item.type === 'group') return true\n const option = item.data as MultiSelectOption\n return option.label.toLowerCase().includes(searchQuery.toLowerCase())\n })\n }, [flattenedOptions, searchQuery])\n\n const shouldVirtualize = filteredOptions.length > virtualizeThreshold\n\n const virtualizer = useVirtualizer({\n count: filteredOptions.length,\n getScrollElement: () => parentNode,\n estimateSize: () => 40,\n enabled: shouldVirtualize,\n })\n\n // Store virtualizer in ref to avoid recreating handleKeyDown on every render\n const virtualizerRef = React.useRef(virtualizer)\n React.useEffect(() => {\n virtualizerRef.current = virtualizer\n }, [virtualizer])\n\n const refCallback = useCallback((node: HTMLDivElement) => {\n if (node) {\n setParentNode(node)\n // Also set as scroll container for virtualized lists\n scrollContainerRef.current = node\n }\n }, [])\n\n const selectedOptions = options.filter((opt) =>\n currentValue.includes(opt.value),\n )\n\n const handleSelect = React.useCallback(\n (optionValue: string) => {\n const newValue = currentValue.includes(optionValue)\n ? currentValue.filter((v) => v !== optionValue)\n : [...currentValue, optionValue]\n\n if (value === undefined) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n setHighlightedIndex(-1)\n },\n [value, onChange, currentValue],\n )\n\n const handleRemoveChip = React.useCallback(\n (optionValue: string, e: React.MouseEvent | React.KeyboardEvent) => {\n e.stopPropagation()\n const newValue = currentValue.filter((v) => v !== optionValue)\n\n if (value === undefined) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n },\n [value, onChange, currentValue],\n )\n\n const handleClear = React.useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation()\n if (value === undefined) {\n setInternalValue([])\n }\n onChange?.([])\n },\n [value, onChange],\n )\n\n const handleInputChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setSearchQuery(e.target.value)\n if (!isOpen) setIsOpen(true)\n },\n [isOpen],\n )\n\n const handleInputFocus = React.useCallback(() => {\n setIsOpen(true)\n }, [])\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n if (!isOpen && e.key !== 'Tab') {\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') {\n e.preventDefault()\n setIsOpen(true)\n }\n return\n }\n\n const selectableOptions = filteredOptions.filter(\n (item) =>\n item.type === 'option' &&\n !(item.data as MultiSelectOption).disabled,\n )\n\n switch (e.key) {\n case 'Escape':\n e.preventDefault()\n setIsOpen(false)\n setSearchQuery('')\n setHighlightedIndex(-1)\n inputRef.current?.blur()\n break\n\n case 'ArrowDown':\n e.preventDefault()\n setHighlightedIndex((prev) => {\n const nextIndex = Math.min(prev + 1, selectableOptions.length - 1)\n const optionIndex = filteredOptions.indexOf(\n selectableOptions[nextIndex]!,\n )\n if (shouldVirtualize && virtualizerRef.current) {\n virtualizerRef.current.scrollToIndex(optionIndex, {\n align: 'auto',\n })\n }\n return nextIndex\n })\n break\n\n case 'ArrowUp':\n e.preventDefault()\n setHighlightedIndex((prev) => {\n const nextIndex = Math.max(prev - 1, 0)\n const optionIndex = filteredOptions.indexOf(\n selectableOptions[nextIndex]!,\n )\n if (shouldVirtualize && virtualizerRef.current) {\n virtualizerRef.current.scrollToIndex(optionIndex, {\n align: 'auto',\n })\n }\n return nextIndex\n })\n break\n\n case 'Enter':\n e.preventDefault()\n if (\n highlightedIndex >= 0 &&\n highlightedIndex < selectableOptions.length\n ) {\n const option = selectableOptions[highlightedIndex]!\n .data as MultiSelectOption\n handleSelect(option.value)\n }\n break\n\n case 'Home':\n e.preventDefault()\n setHighlightedIndex(0)\n if (shouldVirtualize && virtualizerRef.current) {\n virtualizerRef.current.scrollToIndex(0)\n }\n break\n\n case 'End':\n e.preventDefault()\n setHighlightedIndex(selectableOptions.length - 1)\n if (shouldVirtualize && virtualizerRef.current) {\n virtualizerRef.current.scrollToIndex(filteredOptions.length - 1)\n }\n break\n\n default:\n break\n }\n },\n [\n isOpen,\n filteredOptions,\n highlightedIndex,\n handleSelect,\n shouldVirtualize,\n ],\n )\n\n const handleInputKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Backspace' && !searchQuery && currentValue.length > 0) {\n e.preventDefault()\n const lastValue = currentValue[currentValue.length - 1]\n handleRemoveChip(lastValue!, e)\n } else {\n handleKeyDown(e)\n }\n },\n [searchQuery, currentValue, handleRemoveChip, handleKeyDown],\n )\n\n React.useEffect(() => {\n if (selectedOptions.length === 0 || !triggerRef.current) {\n setVisibleChipsCount(maxChipsVisible)\n return\n }\n\n const calculateVisibleChips = () => {\n const container = triggerRef.current\n if (!container) return\n\n const hiddenChips = container.querySelectorAll('[data-hidden-chip]')\n if (hiddenChips.length === 0) return\n\n const containerWidth = container.offsetWidth\n const padding =\n size === 'sm' ? 12 : size === 'md' ? 16 : size === 'lg' ? 20 : 24\n const chevronWidth = 32\n const gap = 4\n const plusIndicatorWidth = 50\n\n const availableWidth = containerWidth - padding * 2 - chevronWidth\n let totalWidth = 0\n let visibleCount = 0\n\n for (let i = 0; i < hiddenChips.length; i++) {\n const chipWidth = hiddenChips[i]!.getBoundingClientRect().width\n const requiredSpace =\n totalWidth + chipWidth + (visibleCount > 0 ? gap : 0)\n\n const needsPlusIndicator = i < hiddenChips.length - 1\n const spaceWithIndicator =\n requiredSpace + (needsPlusIndicator ? gap + plusIndicatorWidth : 0)\n\n if (spaceWithIndicator <= availableWidth) {\n totalWidth = requiredSpace\n visibleCount++\n } else {\n break\n }\n }\n\n setVisibleChipsCount(Math.max(1, visibleCount))\n }\n\n const timeoutId = setTimeout(calculateVisibleChips, 0)\n\n const resizeObserver = new ResizeObserver(() => {\n calculateVisibleChips()\n })\n\n if (triggerRef.current) {\n resizeObserver.observe(triggerRef.current)\n }\n\n return () => {\n clearTimeout(timeoutId)\n resizeObserver.disconnect()\n }\n }, [selectedOptions, size, maxChipsVisible])\n\n // Handle scroll to update arrow visibility\n const handleScroll = React.useCallback(\n (e: React.UIEvent<HTMLDivElement>) => {\n const element = e.currentTarget\n const { scrollTop, scrollHeight, clientHeight } = element\n\n setShowTopArrow(scrollTop > 0)\n setShowBottomArrow(scrollTop + clientHeight < scrollHeight - 1)\n },\n [],\n )\n\n // Check initial scroll state when dropdown opens\n React.useEffect(() => {\n if (isOpen) {\n // Use a small delay to ensure the DOM is fully rendered\n const timeoutId = setTimeout(() => {\n const element = scrollContainerRef.current\n if (element) {\n const { scrollTop, scrollHeight, clientHeight } = element\n setShowTopArrow(scrollTop > 0)\n setShowBottomArrow(scrollTop + clientHeight < scrollHeight - 1)\n }\n }, 50)\n\n return () => clearTimeout(timeoutId)\n } else {\n setShowTopArrow(false)\n setShowBottomArrow(false)\n return\n }\n }, [isOpen, filteredOptions, shouldVirtualize])\n\n const renderOptionsList = () => (\n <div className=\"relative\">\n {/* Top scroll indicator */}\n {showTopArrow && (\n <div className=\"flex items-center justify-center\">\n <ChevronUp className=\"h-4 w-4 text-text-primary\" />\n </div>\n )}\n\n <div\n ref={scrollContainerRef}\n className=\"overflow-auto relative\"\n style={{ maxHeight: maxDropdownHeight }}\n role=\"listbox\"\n aria-labelledby={label ? 'multiselect-label' : undefined}\n onScroll={handleScroll}\n >\n {filteredOptions.length === 0 ? (\n <div className=\"px-3 py-4 text-center text-sm text-text-muted\">\n No options found\n </div>\n ) : shouldVirtualize ? (\n <div\n ref={refCallback}\n style={{\n height: `${Math.min(virtualizer.getTotalSize(), maxDropdownHeight)}px`,\n overflow: 'auto',\n }}\n onScroll={handleScroll}\n >\n <div\n style={{\n height: `${virtualizer.getTotalSize()}px`,\n width: '100%',\n position: 'relative',\n }}\n >\n {virtualizer.getVirtualItems().map((virtualItem) => {\n const item = filteredOptions[virtualItem.index]\n\n if (item?.type === 'group') {\n return (\n <div\n key={`group-${virtualItem.index}`}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: `${virtualItem.size}px`,\n transform: `translateY(${virtualItem.start}px)`,\n }}\n className={multiSelectGroupVariants()}\n >\n {item?.data as string}\n </div>\n )\n }\n\n const option = item?.data as MultiSelectOption\n const isSelected = currentValue.includes(option.value)\n const selectableOptions = filteredOptions.filter(\n (i) =>\n i.type === 'option' &&\n !(i.data as MultiSelectOption).disabled,\n )\n const selectableIndex = selectableOptions.findIndex(\n (i) => i === item,\n )\n const isHighlighted = selectableIndex === highlightedIndex\n\n return (\n <div\n key={option.value}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: `${virtualItem.size}px`,\n transform: `translateY(${virtualItem.start}px)`,\n }}\n className={cn(\n multiSelectOptionVariants({\n selected: isSelected,\n disabled: !!option.disabled,\n }),\n isHighlighted && 'bg-surface',\n )}\n onClick={() =>\n !option.disabled && handleSelect(option.value)\n }\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n >\n {option.label}\n {isSelected && (\n <span className=\"absolute right-3 top-1/2 -translate-y-1/2\">\n <Check\n className={cn('text-primary', iconSizes[size])}\n />\n </span>\n )}\n </div>\n )\n })}\n </div>\n </div>\n ) : (\n <div className=\"py-1\">\n {filteredOptions.map((item, index) => {\n if (item.type === 'group') {\n return (\n <div\n key={`group-${index}`}\n className={multiSelectGroupVariants()}\n >\n {item.data as string}\n </div>\n )\n }\n\n const option = item.data as MultiSelectOption\n const isSelected = currentValue.includes(option.value)\n const selectableOptions = filteredOptions.filter(\n (i) =>\n i.type === 'option' &&\n !(i.data as MultiSelectOption).disabled,\n )\n const selectableIndex = selectableOptions.findIndex(\n (i) => i === item,\n )\n const isHighlighted = selectableIndex === highlightedIndex\n\n return (\n <div\n key={option.value}\n className={cn(\n multiSelectOptionVariants({\n selected: isSelected,\n disabled: !!option.disabled,\n }),\n isHighlighted && 'bg-surface',\n )}\n onClick={() =>\n !option.disabled && handleSelect(option.value)\n }\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n >\n {option.label}\n {isSelected && (\n <span className=\"absolute right-3 top-1/2 -translate-y-1/2\">\n <Check\n className={cn('text-primary', iconSizes[size])}\n />\n </span>\n )}\n </div>\n )\n })}\n </div>\n )}\n </div>\n\n {/* Bottom scroll indicator */}\n {showBottomArrow && (\n <div className=\"flex items-center justify-center\">\n <ChevronDown className=\"h-4 w-4 text-text-primary\" />\n </div>\n )}\n </div>\n )\n\n // Trigger button (used in both desktop and mobile)\n const triggerButton = (\n <button\n ref={triggerRef}\n type=\"button\"\n className={cn(\n multiSelectTriggerVariants({ status, size, fullWidth }),\n loading && 'opacity-50',\n className,\n )}\n disabled={disabled || loading}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-labelledby={label ? 'multiselect-label' : undefined}\n onClick={() => setIsOpen(!isOpen)}\n >\n {selectedOptions.length > 0 && (\n <div className=\"flex gap-1 flex-shrink-0\">\n {selectedOptions.slice(0, visibleChipsCount).map((option) => (\n <span\n key={option.value}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 bg-primary/10 text-primary rounded text-sm whitespace-nowrap\"\n >\n {option.label}\n <button\n type=\"button\"\n onClick={(e) => handleRemoveChip(option.value, e)}\n className=\"hover:text-error\"\n disabled={disabled}\n >\n <X className=\"h-3 w-3\" />\n </button>\n </span>\n ))}\n {selectedOptions.length > visibleChipsCount && (\n <span className=\"inline-flex items-center px-2 py-0.5 bg-surface text-text-muted rounded text-sm whitespace-nowrap\">\n +{selectedOptions.length - visibleChipsCount}\n </span>\n )}\n </div>\n )}\n <div\n className=\"absolute opacity-0 pointer-events-none whitespace-nowrap\"\n aria-hidden=\"true\"\n >\n {selectedOptions.map((option) => (\n <span\n key={option.value}\n data-hidden-chip\n className=\"inline-flex items-center gap-1 px-2 py-0.5 bg-primary/10 text-primary rounded text-sm whitespace-nowrap\"\n >\n {option.label}\n <X className=\"h-3 w-3\" />\n </span>\n ))}\n </div>\n <input\n ref={inputRef}\n type=\"text\"\n className=\"bg-transparent outline-none cursor-pointer placeholder:text-text-muted flex-1 min-w-0 pointer-events-none\"\n placeholder={selectedOptions.length > 0 ? '' : placeholder}\n value={searchQuery}\n onChange={handleInputChange}\n onFocus={handleInputFocus}\n onKeyDown={handleInputKeyDown}\n disabled={disabled || loading}\n readOnly={!isOpen}\n tabIndex={-1}\n />\n <div className=\"flex items-center gap-1 text-text-muted\">\n {loading ? (\n <Loader2 className={cn('animate-spin', iconSizes[size])} />\n ) : (\n <>\n {clearable && selectedOptions.length > 0 && !disabled && (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"hover:text-text-primary transition-colors\"\n aria-label=\"Clear selection\"\n >\n <X className={iconSizes[size]} />\n </button>\n )}\n {isOpen ? (\n <Search className={iconSizes[size]} />\n ) : (\n <ChevronDown className={iconSizes[size]} />\n )}\n </>\n )}\n </div>\n </button>\n )\n\n const selectElement = (\n <div\n className={cn('relative group', fullWidth ? 'w-full' : 'inline-block')}\n ref={ref}\n {...props}\n >\n <Popover\n open={isOpen}\n onOpenChange={setIsOpen}\n >\n <PopoverTrigger asChild>{triggerButton}</PopoverTrigger>\n\n <PopoverContent\n className=\"p-0 w-[var(--radix-popover-trigger-width)]\"\n align=\"start\"\n sideOffset={4}\n onOpenAutoFocus={(e) => {\n e.preventDefault()\n inputRef.current?.focus()\n }}\n >\n {renderOptionsList()}\n </PopoverContent>\n </Popover>\n </div>\n )\n\n if (!label && !helperMessage) return selectElement\n\n return (\n <div className={cn('w-full flex flex-col', !fullWidth && 'inline-block')}>\n <div className=\"flex gap-2 items-center\">\n {label && (\n <label\n id=\"multiselect-label\"\n className=\"block mb-0.5\"\n >\n <span className=\"text-sm font-medium text-text-muted\">\n {label}\n {required && <span className=\"text-error ml-1\">*</span>}\n </span>\n </label>\n )}\n {helperMessage && (\n <p\n className={cn(\n 'text-xs',\n status === 'error' && 'text-error',\n status === 'warning' && 'text-warning',\n status === 'info' && 'text-info',\n status === 'success' && 'text-success',\n status === 'default' && 'text-text-muted',\n )}\n >\n {helperMessage}\n </p>\n )}\n </div>\n {selectElement}\n </div>\n )\n },\n)\n\nMultiSelect.displayName = 'MultiSelect'\n\nexport type * from './types'\nexport default MultiSelect\n"]}
@@ -19,7 +19,7 @@ var checkboxVariants = cva(
19
19
  info: "border-border checked:border-info"
20
20
  },
21
21
  size: {
22
- xs: "w-4 h-4",
22
+ xs: "w-[var(--checkbox-size-xs)] h-[var(--checkbox-size-xs)]",
23
23
  sm: "w-[var(--checkbox-size-sm)] h-[var(--checkbox-size-sm)]",
24
24
  md: "w-[var(--checkbox-size-md)] h-[var(--checkbox-size-md)]",
25
25
  lg: "w-[var(--checkbox-size-lg)] h-[var(--checkbox-size-lg)]"
@@ -154,5 +154,5 @@ Checkbox.displayName = "Checkbox";
154
154
  var checkbox_default = Checkbox;
155
155
 
156
156
  export { checkbox_default };
157
- //# sourceMappingURL=chunk-H2HIBD5Y.js.map
158
- //# sourceMappingURL=chunk-H2HIBD5Y.js.map
157
+ //# sourceMappingURL=chunk-4XXDRVFM.js.map
158
+ //# sourceMappingURL=chunk-4XXDRVFM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/checkbox/index.tsx"],"names":[],"mappings":"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","file":"chunk-4XXDRVFM.js","sourcesContent":["import { cva } from 'class-variance-authority'\nimport { Check } from 'lucide-react'\nimport React, { useState } from 'react'\n\nimport { cn, iconSizes } from '../utils'\nimport { getCheckboxColorClass } from '../variants'\nimport type { CheckboxProps } from './types'\n\nconst checkboxVariants = cva(\n 'appearance-none rounded border bg-background cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed outline-none',\n {\n variants: {\n color: {\n primary: 'border-border checked:border-primary',\n secondary: 'border-border checked:border-secondary',\n accent: 'border-border checked:border-accent',\n success: 'border-border checked:border-success',\n error: 'border-border checked:border-error',\n warning: 'border-border checked:border-warning',\n info: 'border-border checked:border-info',\n },\n size: {\n xs: 'w-[var(--checkbox-size-xs)] h-[var(--checkbox-size-xs)]',\n sm: 'w-[var(--checkbox-size-sm)] h-[var(--checkbox-size-sm)]',\n md: 'w-[var(--checkbox-size-md)] h-[var(--checkbox-size-md)]',\n lg: 'w-[var(--checkbox-size-lg)] h-[var(--checkbox-size-lg)]',\n },\n error: {\n true: 'border-error checked:border-error',\n false: '',\n },\n },\n defaultVariants: {\n color: 'primary',\n size: 'md',\n },\n },\n)\n\nconst Checkbox = React.memo<CheckboxProps>(\n ({\n color = 'primary',\n size = 'md',\n label,\n helperText,\n error,\n indeterminate = false,\n className,\n checked,\n defaultChecked,\n ref,\n labelClassName,\n ...props\n }) => {\n const [internalChecked, setInternalChecked] = useState(\n defaultChecked ?? false,\n )\n const internalRef = React.useRef<HTMLInputElement>(null)\n const checkboxRef =\n (ref as React.RefObject<HTMLInputElement>) || internalRef\n\n // Determine if controlled\n const isControlled = checked !== undefined\n const currentChecked = isControlled ? checked : internalChecked\n\n const onChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setInternalChecked(event.target.checked)\n }\n props.onChange?.(event)\n },\n [isControlled, props.onChange],\n )\n\n React.useEffect(() => {\n if (checkboxRef.current) {\n checkboxRef.current.indeterminate = indeterminate\n }\n }, [indeterminate, checkboxRef])\n\n const checkboxElement = (\n <div className=\"relative inline-flex\">\n <input\n ref={checkboxRef}\n type=\"checkbox\"\n className={cn(\n checkboxVariants({ color, size, error: !!error }),\n className,\n )}\n aria-checked={indeterminate ? 'mixed' : currentChecked}\n {...props}\n onChange={onChange}\n checked={currentChecked}\n />\n {currentChecked && (\n <div className=\"absolute inset-0 flex items-center justify-center pointer-events-none\">\n {indeterminate ? (\n <div\n className={cn(\n 'w-[70%] h-[70%] rounded-xs border-2 border-background flex items-center justify-center',\n getCheckboxColorClass(color),\n )}\n />\n ) : (\n <Check\n className={cn(\n iconSizes[size],\n color === 'primary' && 'text-primary',\n color === 'secondary' && 'text-secondary',\n color === 'accent' && 'text-accent',\n color === 'success' && 'text-success',\n color === 'error' && 'text-error',\n color === 'warning' && 'text-warning',\n color === 'info' && 'text-info',\n )}\n />\n )}\n </div>\n )}\n </div>\n )\n\n if (!label && !helperText && !error) return checkboxElement\n\n return (\n <div className=\"w-full\">\n <label\n className={cn(\n 'flex items-center gap-2',\n !props.disabled && 'cursor-pointer',\n )}\n >\n {checkboxElement}\n {label && (\n <span\n className={cn(\n 'text-sm text-text-primary select-none',\n error && 'text-error',\n props.disabled && 'opacity-50',\n labelClassName,\n )}\n >\n {label}\n </span>\n )}\n </label>\n {(helperText || error) && (\n <p\n className={cn(\n 'mt-1 ml-0 text-xs',\n error ? 'text-error' : 'text-text-secondary',\n )}\n >\n {error || helperText}\n </p>\n )}\n </div>\n )\n },\n)\n\nCheckbox.displayName = 'Checkbox'\n\nexport type * from './types'\nexport default Checkbox\n"]}
@@ -1,4 +1,4 @@
1
- import { input_default } from './chunk-2JGAYDZR.js';
1
+ import { input_default } from './chunk-XMKNYG7I.js';
2
2
  import { iconSizes } from './chunk-YNNAOXU5.js';
3
3
  import { Eye, EyeOff } from 'lucide-react';
4
4
  import React from 'react';
@@ -35,5 +35,5 @@ PasswordInput.displayName = "PasswordInput";
35
35
  var input_password_default = input_default;
36
36
 
37
37
  export { PasswordInput, input_password_default };
38
- //# sourceMappingURL=chunk-E2CYDDYC.js.map
39
- //# sourceMappingURL=chunk-E2CYDDYC.js.map
38
+ //# sourceMappingURL=chunk-6V5I5HJ2.js.map
39
+ //# sourceMappingURL=chunk-6V5I5HJ2.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/input-password/index.tsx"],"names":[],"mappings":";;;;;;AAOO,IAAM,gBAAgB,KAAA,CAAM,IAAA;AAAA,EACjC,CAAC,EAAE,gBAAA,GAAmB,IAAA,EAAM,OAAO,IAAA,EAAM,GAAA,EAAK,GAAG,KAAA,EAAM,KAAM;AAC3D,IAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,KAAA,CAAM,SAAS,KAAK,CAAA;AAE5D,IAAA,MAAM,gBAAA,GAAmB,KAAA,CAAM,WAAA,CAAY,MAAM;AAC/C,MAAA,eAAA,CAAgB,CAAC,IAAA,KAAS,CAAC,IAAI,CAAA;AAAA,IACjC,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,uBACE,GAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACE,GAAG,KAAA;AAAA,QACJ,IAAA;AAAA,QACA,GAAA;AAAA,QACA,IAAA,EAAM,eAAe,MAAA,GAAS,UAAA;AAAA,QAC9B,WACE,gBAAA,mBACE,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,gBAAA;AAAA,YACT,SAAA,EAAU,wCAAA;AAAA,YACV,YAAA,EAAY,eAAe,eAAA,GAAkB,eAAA;AAAA,YAG5C,QAAA,EAAA,YAAA,mBACC,GAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAW,SAAA,CAAU,IAAI,CAAA,EAAG,CAAA,mBAEjC,GAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAW,SAAA,CAAU,IAAI,CAAA,EAAG;AAAA;AAAA,SAExC,GACE;AAAA;AAAA,KAER;AAAA,EAEJ;AACF;AAEA,aAAA,CAAc,WAAA,GAAc,eAAA;AAG5B,IAAO,sBAAA,GAAQ","file":"chunk-E2CYDDYC.js","sourcesContent":["import { Eye, EyeOff } from 'lucide-react'\nimport React from 'react'\n\nimport Input from '../input'\nimport { iconSizes } from '../utils'\nimport type { PasswordInputProps } from './types'\n\nexport const PasswordInput = React.memo<PasswordInputProps>(\n ({ visibilityToggle = true, size = 'md', ref, ...props }) => {\n const [showPassword, setShowPassword] = React.useState(false)\n\n const toggleVisibility = React.useCallback(() => {\n setShowPassword((prev) => !prev)\n }, [])\n\n return (\n <Input\n {...props}\n size={size}\n ref={ref}\n type={showPassword ? 'text' : 'password'}\n rightIcon={\n visibilityToggle ? (\n <button\n type=\"button\"\n onClick={toggleVisibility}\n className=\"cursor-pointer hover:text-text-primary\"\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n // tabIndex={-1}\n >\n {showPassword ? (\n <Eye className={iconSizes[size]} />\n ) : (\n <EyeOff className={iconSizes[size]} />\n )}\n </button>\n ) : undefined\n }\n />\n )\n },\n)\n\nPasswordInput.displayName = 'PasswordInput'\n\nexport type * from './types'\nexport default Input\n"]}
1
+ {"version":3,"sources":["../src/input-password/index.tsx"],"names":[],"mappings":";;;;;;AAOO,IAAM,gBAAgB,KAAA,CAAM,IAAA;AAAA,EACjC,CAAC,EAAE,gBAAA,GAAmB,IAAA,EAAM,OAAO,IAAA,EAAM,GAAA,EAAK,GAAG,KAAA,EAAM,KAAM;AAC3D,IAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,KAAA,CAAM,SAAS,KAAK,CAAA;AAE5D,IAAA,MAAM,gBAAA,GAAmB,KAAA,CAAM,WAAA,CAAY,MAAM;AAC/C,MAAA,eAAA,CAAgB,CAAC,IAAA,KAAS,CAAC,IAAI,CAAA;AAAA,IACjC,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,uBACE,GAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACE,GAAG,KAAA;AAAA,QACJ,IAAA;AAAA,QACA,GAAA;AAAA,QACA,IAAA,EAAM,eAAe,MAAA,GAAS,UAAA;AAAA,QAC9B,WACE,gBAAA,mBACE,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,gBAAA;AAAA,YACT,SAAA,EAAU,wCAAA;AAAA,YACV,YAAA,EAAY,eAAe,eAAA,GAAkB,eAAA;AAAA,YAG5C,QAAA,EAAA,YAAA,mBACC,GAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAW,SAAA,CAAU,IAAI,CAAA,EAAG,CAAA,mBAEjC,GAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAW,SAAA,CAAU,IAAI,CAAA,EAAG;AAAA;AAAA,SAExC,GACE;AAAA;AAAA,KAER;AAAA,EAEJ;AACF;AAEA,aAAA,CAAc,WAAA,GAAc,eAAA;AAG5B,IAAO,sBAAA,GAAQ","file":"chunk-6V5I5HJ2.js","sourcesContent":["import { Eye, EyeOff } from 'lucide-react'\nimport React from 'react'\n\nimport Input from '../input'\nimport { iconSizes } from '../utils'\nimport type { PasswordInputProps } from './types'\n\nexport const PasswordInput = React.memo<PasswordInputProps>(\n ({ visibilityToggle = true, size = 'md', ref, ...props }) => {\n const [showPassword, setShowPassword] = React.useState(false)\n\n const toggleVisibility = React.useCallback(() => {\n setShowPassword((prev) => !prev)\n }, [])\n\n return (\n <Input\n {...props}\n size={size}\n ref={ref}\n type={showPassword ? 'text' : 'password'}\n rightIcon={\n visibilityToggle ? (\n <button\n type=\"button\"\n onClick={toggleVisibility}\n className=\"cursor-pointer hover:text-text-primary\"\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n // tabIndex={-1}\n >\n {showPassword ? (\n <Eye className={iconSizes[size]} />\n ) : (\n <EyeOff className={iconSizes[size]} />\n )}\n </button>\n ) : undefined\n }\n />\n )\n },\n)\n\nPasswordInput.displayName = 'PasswordInput'\n\nexport type * from './types'\nexport default Input\n"]}
@@ -1,9 +1,9 @@
1
1
  import { toggle_group_default } from './chunk-SK5ECBBK.js';
2
2
  import { pagination_default } from './chunk-FGWSUPVW.js';
3
- import { input_default } from './chunk-2JGAYDZR.js';
4
- import { checkbox_default } from './chunk-H2HIBD5Y.js';
3
+ import { input_default } from './chunk-XMKNYG7I.js';
4
+ import { checkbox_default } from './chunk-4XXDRVFM.js';
5
5
  import { Popover, PopoverTrigger, PopoverContent } from './chunk-3PFA3YG6.js';
6
- import { button_default } from './chunk-LBJG2UWT.js';
6
+ import { button_default } from './chunk-KTAIRCOL.js';
7
7
  import { cn, iconSizes } from './chunk-YNNAOXU5.js';
8
8
  import { useReactTable, getGroupedRowModel, getExpandedRowModel, getPaginationRowModel, getFilteredRowModel, getSortedRowModel, getCoreRowModel, flexRender } from '@tanstack/react-table';
9
9
  import { useVirtualizer } from '@tanstack/react-virtual';
@@ -1019,5 +1019,5 @@ Table.displayName = "Table";
1019
1019
  var table_default = Table;
1020
1020
 
1021
1021
  export { EditableCell, TableActions, TableCell, TableHeaderCell, TableRow, TableSkeleton, table_default };
1022
- //# sourceMappingURL=chunk-L3SP7GHC.js.map
1023
- //# sourceMappingURL=chunk-L3SP7GHC.js.map
1022
+ //# sourceMappingURL=chunk-77DW6PAW.js.map
1023
+ //# sourceMappingURL=chunk-77DW6PAW.js.map