luan-ui 0.8.3 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/README.md +31 -0
  2. package/dist/components/accordion/accordion.d.ts +3 -3
  3. package/dist/components/alert-dialog/alert-dialog.d.ts +4 -4
  4. package/dist/components/autocomplete/autocomplete.d.ts +12 -12
  5. package/dist/components/autocomplete/autocomplete.js +2 -2
  6. package/dist/components/autocomplete/autocomplete.js.map +1 -1
  7. package/dist/components/avatar/avatar-group.d.ts +1 -1
  8. package/dist/components/avatar/avatar.d.ts +3 -3
  9. package/dist/components/checkbox/checkbox.d.ts +1 -1
  10. package/dist/components/combobox/combobox.d.ts +12 -12
  11. package/dist/components/combobox/combobox.js +2 -2
  12. package/dist/components/combobox/combobox.js.map +1 -1
  13. package/dist/components/dialog/dialog.d.ts +6 -6
  14. package/dist/components/drawer/drawer.d.ts +6 -6
  15. package/dist/components/dropdown-menu/dropdown-menu.d.ts +14 -14
  16. package/dist/components/form-field/form-field.d.ts +1 -1
  17. package/dist/components/form-field/form-field.js +1 -1
  18. package/dist/components/form-helper/form-helper.d.ts +1 -1
  19. package/dist/components/input/input.d.ts +1 -1
  20. package/dist/components/input/input.js +1 -1
  21. package/dist/components/input/input.js.map +1 -1
  22. package/dist/components/label/label.d.ts +1 -1
  23. package/dist/components/label/label.js +1 -3
  24. package/dist/components/label/label.js.map +1 -1
  25. package/dist/components/pagination/pagination.d.ts +3 -3
  26. package/dist/components/popover/popover.d.ts +5 -5
  27. package/dist/components/progress/progress.d.ts +1 -1
  28. package/dist/components/radio-group/radio-group.d.ts +2 -2
  29. package/dist/components/select/select.d.ts +9 -9
  30. package/dist/components/select/select.js +1 -1
  31. package/dist/components/select/select.js.map +1 -1
  32. package/dist/components/skeleton/skeleton.d.ts +1 -1
  33. package/dist/components/slider/slider.d.ts +1 -1
  34. package/dist/components/slider/slider.js +2 -4
  35. package/dist/components/slider/slider.js.map +1 -1
  36. package/dist/components/switch/switch.d.ts +1 -1
  37. package/dist/components/table/table.d.ts +8 -8
  38. package/dist/components/table/table.js +2 -2
  39. package/dist/components/table/table.js.map +1 -1
  40. package/dist/components/tabs/tabs.d.ts +3 -3
  41. package/dist/components/text-area/text-area.d.ts +1 -1
  42. package/dist/components/text-area/text-area.js +1 -1
  43. package/dist/components/text-area/text-area.js.map +1 -1
  44. package/dist/components/toast/toast.d.ts +1 -1
  45. package/dist/components/toast/toast.js +1 -1
  46. package/dist/components/toast/toast.js.map +1 -1
  47. package/dist/components/tooltip/tooltip.d.ts +3 -3
  48. package/dist/styles/index.css +137 -27
  49. package/dist/utilities/pagination/get-truncated-elements.d.ts +1 -1
  50. package/dist/utilities/pagination/keyboard-navigation.js.map +1 -1
  51. package/dist/utilities/responsive/responsive.d.ts +6 -4
  52. package/package.json +28 -28
@@ -4,48 +4,158 @@
4
4
  @source "../components";
5
5
  @source "../utilities";
6
6
 
7
- @theme {
7
+ :root,
8
+ [data-theme="luan-light"] {
9
+ color-scheme: light;
10
+ --background: #ffffff;
11
+ --foreground: #111827;
12
+
13
+ /* ─── Brand / Primary ─── */
14
+ --primary: #374151;
15
+ --primary-hover: #1f2937;
16
+ --primary-active: #111827;
17
+ --on-primary: #ffffff;
18
+
19
+ /* ─── Destructive ─── */
20
+ --destructive: #ef4444;
21
+ --destructive-hover: #dc2626;
22
+ --destructive-active: #b91c1c;
23
+
24
+ /* ─── Error ─── */
25
+ --error: #dc2626;
26
+
27
+ /* ─── Surfaces ─── */
28
+ --surface: #ffffff;
29
+ --surface-subtle: #f9fafb;
30
+ --surface-muted: #f3f4f6;
31
+ --overlay: oklch(0 0 0 / 50%);
32
+
33
+ /* ─── Borders & Separators ─── */
34
+ --border: #e5e7eb;
35
+ --border-input: #9ca3af;
36
+ --separator: #e5e7eb;
37
+ --ring-subtle: oklch(0.21 0.034 264.665 / 8%);
38
+
39
+ /* ─── Text ─── */
40
+ --text: #111827;
41
+ --text-secondary: #374151;
42
+ --text-muted: #6b7280;
43
+ --text-disabled: #d1d5db;
44
+ --text-placeholder: #9ca3af;
45
+
46
+ /* ─── Interactive States ─── */
47
+ --highlight: #374151;
48
+ --on-highlight: #ffffff;
49
+ --focus-ring: #374151;
50
+ --skeleton: #e5e7eb;
51
+
52
+ /* ─── Misc ─── */
53
+ --indicator: #6b7280;
54
+ --disabled-bg: #9ca3af;
55
+ }
56
+
57
+ [data-theme="luan-dark"] {
58
+ color-scheme: dark;
59
+ --background: #030712;
60
+ --foreground: #f9fafb;
61
+
62
+ /* ─── Brand / Primary ─── */
63
+ --primary: #4b5563;
64
+ --primary-hover: #6b7280;
65
+ --primary-active: #9ca3af;
66
+ --on-primary: #ffffff;
67
+
68
+ /* ─── Destructive ─── */
69
+ --destructive: #b91c1c;
70
+ --destructive-hover: #dc2626;
71
+ --destructive-active: #ef4444;
72
+
73
+ /* ─── Error ─── */
74
+ --error: #f87171;
75
+
76
+ /* ─── Surfaces ─── */
77
+ --surface: #111827;
78
+ --surface-subtle: #1f2937;
79
+ --surface-muted: #374151;
80
+ --overlay: oklch(0 0 0 / 60%);
81
+
82
+ /* ─── Borders & Separators ─── */
83
+ --border: #374151;
84
+ --border-input: #4b5563;
85
+ --separator: #374151;
86
+ --ring-subtle: oklch(0.98 0 0 / 12%);
87
+
88
+ /* ─── Text ─── */
89
+ --text: #f9fafb;
90
+ --text-secondary: #e5e7eb;
91
+ --text-muted: #9ca3af;
92
+ --text-disabled: #6b7280;
93
+ --text-placeholder: #6b7280;
94
+
95
+ /* ─── Interactive States ─── */
96
+ --highlight: #4b5563;
97
+ --on-highlight: #f9fafb;
98
+ --focus-ring: #d1d5db;
99
+ --skeleton: #374151;
100
+
101
+ /* ─── Misc ─── */
102
+ --indicator: #9ca3af;
103
+ --disabled-bg: #4b5563;
104
+ }
105
+
106
+ [data-theme="luan-light"],
107
+ [data-theme="luan-dark"] {
108
+ background-color: var(--background);
109
+ color: var(--foreground);
110
+ }
111
+
112
+ @theme inline {
113
+ --color-background: var(--background);
114
+ --color-foreground: var(--foreground);
115
+
8
116
  /* ─── Brand / Primary ─── */
9
- --color-primary: #374151;
10
- --color-primary-hover: #1f2937;
11
- --color-primary-active: #111827;
12
- --color-on-primary: #ffffff;
117
+ --color-primary: var(--primary);
118
+ --color-primary-hover: var(--primary-hover);
119
+ --color-primary-active: var(--primary-active);
120
+ --color-on-primary: var(--on-primary);
13
121
 
14
122
  /* ─── Destructive ─── */
15
- --color-destructive: #ef4444;
16
- --color-destructive-hover: #dc2626;
17
- --color-destructive-active: #b91c1c;
123
+ --color-destructive: var(--destructive);
124
+ --color-destructive-hover: var(--destructive-hover);
125
+ --color-destructive-active: var(--destructive-active);
18
126
 
19
127
  /* ─── Error ─── */
20
- --color-error: #dc2626;
128
+ --color-error: var(--error);
21
129
 
22
130
  /* ─── Surfaces ─── */
23
- --color-surface: #ffffff;
24
- --color-surface-subtle: #f9fafb;
25
- --color-surface-muted: #f3f4f6;
26
- --color-overlay: oklch(0 0 0 / 50%);
131
+ --color-surface: var(--surface);
132
+ --color-surface-subtle: var(--surface-subtle);
133
+ --color-surface-muted: var(--surface-muted);
134
+ --color-overlay: var(--overlay);
27
135
 
28
136
  /* ─── Borders & Separators ─── */
29
- --color-border: #e5e7eb;
30
- --color-border-input: #9ca3af;
31
- --color-separator: #e5e7eb;
137
+ --color-border: var(--border);
138
+ --color-border-input: var(--border-input);
139
+ --color-separator: var(--separator);
140
+ --color-ring: var(--focus-ring);
141
+ --color-ring-subtle: var(--ring-subtle);
32
142
 
33
143
  /* ─── Text ─── */
34
- --color-text: #111827;
35
- --color-text-secondary: #374151;
36
- --color-text-muted: #6b7280;
37
- --color-text-disabled: #d1d5db;
38
- --color-text-placeholder: #9ca3af;
144
+ --color-text: var(--text);
145
+ --color-text-secondary: var(--text-secondary);
146
+ --color-text-muted: var(--text-muted);
147
+ --color-text-disabled: var(--text-disabled);
148
+ --color-text-placeholder: var(--text-placeholder);
39
149
 
40
150
  /* ─── Interactive States ─── */
41
- --color-highlight: #374151;
42
- --color-on-highlight: #ffffff;
43
- --color-focus-ring: #374151;
44
- --color-skeleton: #e5e7eb;
151
+ --color-highlight: var(--highlight);
152
+ --color-on-highlight: var(--on-highlight);
153
+ --color-focus-ring: var(--focus-ring);
154
+ --color-skeleton: var(--skeleton);
45
155
 
46
156
  /* ─── Misc ─── */
47
- --color-indicator: #6b7280;
48
- --color-disabled-bg: #9ca3af;
157
+ --color-indicator: var(--indicator);
158
+ --color-disabled-bg: var(--disabled-bg);
49
159
 
50
160
  /* ─── Animations ─── */
51
161
  --animate-accordion-up: accordion-up 350ms ease;
@@ -3,5 +3,5 @@ type TruncatedElementsOptions = {
3
3
  page: number;
4
4
  children: ReactNode;
5
5
  };
6
- export declare const getTruncatedElements: ({ page, children, }: TruncatedElementsOptions) => ReactNode[] | (string | number | bigint | Iterable<ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | import("react/jsx-runtime").JSX.Element)[];
6
+ export declare const getTruncatedElements: ({ page, children, }: TruncatedElementsOptions) => ReactNode[] | (string | number | bigint | import("react").JSX.Element | Iterable<ReactNode> | Promise<string | number | bigint | boolean | Iterable<ReactNode> | ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | import("react").ReactPortal | null | undefined>)[];
7
7
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"keyboard-navigation.js","sourceRoot":"/","sources":["utilities/pagination/keyboard-navigation.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACvC,CAAgB,EAChB,IAAqD,EACrD,UAAkB,EACjB,EAAE;IACH,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI;QAAE,OAAO;IAE/B,MAAM,mBAAmB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAClE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC,aAAa,CAC1C,EAAE,CAAC,CAAC,CAAC,CAAC;IAEP,IAAI,mBAAmB,KAAK,SAAS;QAAE,OAAO;IAE9C,IAAI,SAA6B,CAAC;IAElC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;QACf,KAAK,WAAW,CAAC;QACjB,KAAK,SAAS,CAAC,CAAC,CAAC;YAChB,IAAI,mBAAmB,KAAK,CAAC,EAAE,CAAC;gBAC/B,SAAS,GAAG,UAAU,CAAC;YACxB,CAAC;iBAAM,IAAI,mBAAmB,KAAK,UAAU,GAAG,CAAC,EAAE,CAAC;gBACnD,SAAS,GAAG,UAAU,CAAC;YACxB,CAAC;iBAAM,IAAI,mBAAmB,KAAK,CAAC,EAAE,CAAC;gBACtC,SAAS,GAAG,CAAC,CAAC;YACf,CAAC;iBAAM,CAAC;gBACP,4CAA4C;gBAC5C,KAAK,IAAI,CAAC,GAAG,mBAAmB,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBACnD,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;wBACzB,SAAS,GAAG,CAAC,CAAC;wBACd,MAAM;oBACP,CAAC;gBACF,CAAC;gBACD,yDAAyD;gBACzD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;oBAC7B,SAAS,GAAG,CAAC,CAAC;gBACf,CAAC;YACF,CAAC;YACD,MAAM;QACP,CAAC;QACD,KAAK,YAAY,CAAC;QAClB,KAAK,WAAW,CAAC,CAAC,CAAC;YAClB,IAAI,mBAAmB,KAAK,CAAC,EAAE,CAAC;gBAC/B,SAAS,GAAG,CAAC,CAAC;YACf,CAAC;iBAAM,IAAI,mBAAmB,KAAK,UAAU,EAAE,CAAC;gBAC/C,SAAS,GAAG,UAAU,GAAG,CAAC,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACP,6CAA6C;gBAC7C,KAAK,IAAI,CAAC,GAAG,mBAAmB,GAAG,CAAC,EAAE,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAChE,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;wBACzB,SAAS,GAAG,CAAC,CAAC;wBACd,MAAM;oBACP,CAAC;gBACF,CAAC;gBACD,4DAA4D;gBAC5D,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;oBAC7B,SAAS,GAAG,UAAU,GAAG,CAAC,CAAC;gBAC5B,CAAC;YACF,CAAC;YACD,MAAM;QACP,CAAC;QACD,KAAK,MAAM;YACV,SAAS,GAAG,CAAC,CAAC;YACd,MAAM;QACP,KAAK,KAAK;YACT,SAAS,GAAG,UAAU,CAAC;YACvB,MAAM;IACR,CAAC;IAED,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,mBAAmB,EAAE,CAAC;QAClE,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;IACtC,CAAC;AACF,CAAC,CAAC","sourcesContent":["export const handleKeyboardNavigation = (\n\te: KeyboardEvent,\n\trefs: React.RefObject<Map<number, HTMLButtonElement>>,\n\ttotalPages: number,\n) => {\n\tif (!refs.current.size) return;\n\n\tconst currentFocusedIndex = Array.from(refs.current.entries()).find(\n\t\t([_, el]) => el === document.activeElement,\n\t)?.[0];\n\n\tif (currentFocusedIndex === undefined) return;\n\n\tlet nextIndex: number | undefined;\n\n\tswitch (e.key) {\n\t\tcase \"ArrowLeft\":\n\t\tcase \"ArrowUp\": {\n\t\t\tif (currentFocusedIndex === 0) {\n\t\t\t\tnextIndex = totalPages;\n\t\t\t} else if (currentFocusedIndex === totalPages + 1) {\n\t\t\t\tnextIndex = totalPages;\n\t\t\t} else if (currentFocusedIndex === 1) {\n\t\t\t\tnextIndex = 0;\n\t\t\t} else {\n\t\t\t\t// Find the next available index to the left\n\t\t\t\tfor (let i = currentFocusedIndex - 1; i >= 0; i--) {\n\t\t\t\t\tif (refs.current.has(i)) {\n\t\t\t\t\t\tnextIndex = i;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If no index found to the left, try wrapping to the end\n\t\t\t\tif (nextIndex === undefined) {\n\t\t\t\t\tnextIndex = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"ArrowRight\":\n\t\tcase \"ArrowDown\": {\n\t\t\tif (currentFocusedIndex === 0) {\n\t\t\t\tnextIndex = 1;\n\t\t\t} else if (currentFocusedIndex === totalPages) {\n\t\t\t\tnextIndex = totalPages + 1;\n\t\t\t} else {\n\t\t\t\t// Find the next available index to the right\n\t\t\t\tfor (let i = currentFocusedIndex + 1; i <= totalPages + 1; i++) {\n\t\t\t\t\tif (refs.current.has(i)) {\n\t\t\t\t\t\tnextIndex = i;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If no index found to the right, try wrapping to the start\n\t\t\t\tif (nextIndex === undefined) {\n\t\t\t\t\tnextIndex = totalPages + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"Home\":\n\t\t\tnextIndex = 1;\n\t\t\tbreak;\n\t\tcase \"End\":\n\t\t\tnextIndex = totalPages;\n\t\t\tbreak;\n\t}\n\n\tif (nextIndex !== undefined && nextIndex !== currentFocusedIndex) {\n\t\te.preventDefault();\n\t\trefs.current.get(nextIndex)?.focus();\n\t}\n};\n"]}
1
+ {"version":3,"file":"keyboard-navigation.js","sourceRoot":"/","sources":["utilities/pagination/keyboard-navigation.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACvC,CAAgB,EAChB,IAAqD,EACrD,UAAkB,EACjB,EAAE;IACH,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI;QAAE,OAAO;IAE/B,MAAM,mBAAmB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAClE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC,aAAa,CAC1C,EAAE,CAAC,CAAC,CAAC,CAAC;IAEP,IAAI,mBAAmB,KAAK,SAAS;QAAE,OAAO;IAE9C,IAAI,SAA6B,CAAC;IAElC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;QACf,KAAK,WAAW,CAAC;QACjB,KAAK,SAAS,EAAE,CAAC;YAChB,IAAI,mBAAmB,KAAK,CAAC,EAAE,CAAC;gBAC/B,SAAS,GAAG,UAAU,CAAC;YACxB,CAAC;iBAAM,IAAI,mBAAmB,KAAK,UAAU,GAAG,CAAC,EAAE,CAAC;gBACnD,SAAS,GAAG,UAAU,CAAC;YACxB,CAAC;iBAAM,IAAI,mBAAmB,KAAK,CAAC,EAAE,CAAC;gBACtC,SAAS,GAAG,CAAC,CAAC;YACf,CAAC;iBAAM,CAAC;gBACP,4CAA4C;gBAC5C,KAAK,IAAI,CAAC,GAAG,mBAAmB,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBACnD,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;wBACzB,SAAS,GAAG,CAAC,CAAC;wBACd,MAAM;oBACP,CAAC;gBACF,CAAC;gBACD,yDAAyD;gBACzD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;oBAC7B,SAAS,GAAG,CAAC,CAAC;gBACf,CAAC;YACF,CAAC;YACD,MAAM;QACP,CAAC;QACD,KAAK,YAAY,CAAC;QAClB,KAAK,WAAW,EAAE,CAAC;YAClB,IAAI,mBAAmB,KAAK,CAAC,EAAE,CAAC;gBAC/B,SAAS,GAAG,CAAC,CAAC;YACf,CAAC;iBAAM,IAAI,mBAAmB,KAAK,UAAU,EAAE,CAAC;gBAC/C,SAAS,GAAG,UAAU,GAAG,CAAC,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACP,6CAA6C;gBAC7C,KAAK,IAAI,CAAC,GAAG,mBAAmB,GAAG,CAAC,EAAE,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAChE,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;wBACzB,SAAS,GAAG,CAAC,CAAC;wBACd,MAAM;oBACP,CAAC;gBACF,CAAC;gBACD,4DAA4D;gBAC5D,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;oBAC7B,SAAS,GAAG,UAAU,GAAG,CAAC,CAAC;gBAC5B,CAAC;YACF,CAAC;YACD,MAAM;QACP,CAAC;QACD,KAAK,MAAM;YACV,SAAS,GAAG,CAAC,CAAC;YACd,MAAM;QACP,KAAK,KAAK;YACT,SAAS,GAAG,UAAU,CAAC;YACvB,MAAM;IACR,CAAC;IAED,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,mBAAmB,EAAE,CAAC;QAClE,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;IACtC,CAAC;AACF,CAAC,CAAC","sourcesContent":["export const handleKeyboardNavigation = (\n\te: KeyboardEvent,\n\trefs: React.RefObject<Map<number, HTMLButtonElement>>,\n\ttotalPages: number,\n) => {\n\tif (!refs.current.size) return;\n\n\tconst currentFocusedIndex = Array.from(refs.current.entries()).find(\n\t\t([_, el]) => el === document.activeElement,\n\t)?.[0];\n\n\tif (currentFocusedIndex === undefined) return;\n\n\tlet nextIndex: number | undefined;\n\n\tswitch (e.key) {\n\t\tcase \"ArrowLeft\":\n\t\tcase \"ArrowUp\": {\n\t\t\tif (currentFocusedIndex === 0) {\n\t\t\t\tnextIndex = totalPages;\n\t\t\t} else if (currentFocusedIndex === totalPages + 1) {\n\t\t\t\tnextIndex = totalPages;\n\t\t\t} else if (currentFocusedIndex === 1) {\n\t\t\t\tnextIndex = 0;\n\t\t\t} else {\n\t\t\t\t// Find the next available index to the left\n\t\t\t\tfor (let i = currentFocusedIndex - 1; i >= 0; i--) {\n\t\t\t\t\tif (refs.current.has(i)) {\n\t\t\t\t\t\tnextIndex = i;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If no index found to the left, try wrapping to the end\n\t\t\t\tif (nextIndex === undefined) {\n\t\t\t\t\tnextIndex = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"ArrowRight\":\n\t\tcase \"ArrowDown\": {\n\t\t\tif (currentFocusedIndex === 0) {\n\t\t\t\tnextIndex = 1;\n\t\t\t} else if (currentFocusedIndex === totalPages) {\n\t\t\t\tnextIndex = totalPages + 1;\n\t\t\t} else {\n\t\t\t\t// Find the next available index to the right\n\t\t\t\tfor (let i = currentFocusedIndex + 1; i <= totalPages + 1; i++) {\n\t\t\t\t\tif (refs.current.has(i)) {\n\t\t\t\t\t\tnextIndex = i;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If no index found to the right, try wrapping to the start\n\t\t\t\tif (nextIndex === undefined) {\n\t\t\t\t\tnextIndex = totalPages + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"Home\":\n\t\t\tnextIndex = 1;\n\t\t\tbreak;\n\t\tcase \"End\":\n\t\t\tnextIndex = totalPages;\n\t\t\tbreak;\n\t}\n\n\tif (nextIndex !== undefined && nextIndex !== currentFocusedIndex) {\n\t\te.preventDefault();\n\t\trefs.current.get(nextIndex)?.focus();\n\t}\n};\n"]}
@@ -4,15 +4,17 @@ export declare const getVariants: {
4
4
  <T extends import("responsive-class-variants/dist/types").VariantConfig = Record<never, import("responsive-class-variants/dist/types").VariantValue>, S extends Record<string, import("responsive-class-variants/dist/types").SlotConfig> = Record<string, import("responsive-class-variants/dist/types").ClassValue>>(config: {
5
5
  slots: S;
6
6
  variants?: T | undefined;
7
- compoundVariants?: import("responsive-class-variants/dist/types").CompoundVariantWithSlots<T, keyof S & string, "sm" | "md" | "lg" | "xl">[] | undefined;
7
+ compoundVariants?: import("responsive-class-variants/dist/types").CompoundVariantWithSlots<T, keyof S & string, "lg" | "md" | "sm" | "xl">[] | undefined;
8
+ breakpoints?: readonly ("lg" | "md" | "sm" | "xl")[] | undefined;
8
9
  onComplete?: (classes: string) => string;
9
- }): () => { [K in keyof S]: (props?: import("responsive-class-variants/dist/types").VariantProps<T, "sm" | "md" | "lg" | "xl"> | undefined) => string; };
10
+ }): () => { [K in keyof S]: (props?: import("responsive-class-variants/dist/types").VariantProps<T, "lg" | "md" | "sm" | "xl"> | undefined) => string; };
10
11
  <T extends import("responsive-class-variants/dist/types").VariantConfig = Record<never, import("responsive-class-variants/dist/types").VariantValue>>(config: {
11
12
  base: string;
12
13
  variants?: T | undefined;
13
- compoundVariants?: Partial<import("responsive-class-variants/dist/types").VariantProps<T, "sm" | "md" | "lg" | "xl">>[] | undefined;
14
+ compoundVariants?: Partial<import("responsive-class-variants/dist/types").VariantProps<T, "lg" | "md" | "sm" | "xl">>[] | undefined;
15
+ breakpoints?: readonly ("lg" | "md" | "sm" | "xl")[] | undefined;
14
16
  onComplete?: (classes: string) => string;
15
- }): (props?: import("responsive-class-variants/dist/types").VariantProps<T, "sm" | "md" | "lg" | "xl"> | undefined) => string;
17
+ }): (props?: import("responsive-class-variants/dist/types").VariantProps<T, "lg" | "md" | "sm" | "xl"> | undefined) => string;
16
18
  };
17
19
  export type Breakpoints = (typeof breakpoints)[number];
18
20
  export type ResponsiveValue<T> = RcvResponsiveValue<T, Breakpoints>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "luan-ui",
3
- "version": "0.8.3",
3
+ "version": "0.9.1",
4
4
  "description": "A UI library for React",
5
5
  "author": "benebene84 <benedikt.sperl@gmail.com> (https://github.com/benebene84)",
6
6
  "main": "/dist/index.js",
@@ -33,41 +33,41 @@
33
33
  },
34
34
  "homepage": "https://github.com/benebene84/luan-ui#readme",
35
35
  "devDependencies": {
36
- "@biomejs/biome": "2.4.7",
37
- "@chromatic-com/storybook": "^5.0.1",
38
- "@storybook/addon-docs": "^10.2.19",
39
- "@storybook/addon-onboarding": "^10.2.19",
40
- "@storybook/react-vite": "^10.2.19",
41
- "@tailwindcss/postcss": "^4.2.1",
42
- "@tailwindcss/vite": "^4.2.1",
36
+ "@biomejs/biome": "2.5.12",
37
+ "@chromatic-com/storybook": "^5.3.1",
38
+ "@storybook/addon-docs": "^10.6.0",
39
+ "@storybook/addon-onboarding": "^10.6.0",
40
+ "@storybook/react-vite": "^10.6.0",
41
+ "@tailwindcss/postcss": "^4.3.3",
42
+ "@tailwindcss/vite": "^4.3.3",
43
43
  "@testing-library/dom": "^10.4.1",
44
- "@testing-library/jest-dom": "^6.9.1",
45
- "@testing-library/react": "^16.3.2",
46
- "@testing-library/user-event": "^14.6.1",
47
- "@types/node": "^25.5.0",
48
- "@types/react": "^19.2.14",
49
- "@types/react-dom": "^19.2.3",
50
- "@vitejs/plugin-react": "^6.0.1",
51
- "jsdom": "^29.0.0",
52
- "lefthook": "^2.1.4",
53
- "responsive-class-variants": "^1.3.2",
54
- "storybook": "^10.2.19",
55
- "tailwindcss": "^4.2.1",
56
- "tsc-alias": "^1.8.16",
57
- "typescript": "^5.9.3",
58
- "vite": "^8.0.0",
59
- "vitest": "^4.1.0"
44
+ "@testing-library/jest-dom": "^7.0.1",
45
+ "@testing-library/react": "^16.3.3",
46
+ "@testing-library/user-event": "^14.6.7",
47
+ "@types/node": "^26.4.1",
48
+ "@types/react": "^19.2.18",
49
+ "@types/react-dom": "^19.2.7",
50
+ "@vitejs/plugin-react": "^6.1.1",
51
+ "jsdom": "^30.0.1",
52
+ "lefthook": "^2.1.12",
53
+ "responsive-class-variants": "^1.4.1",
54
+ "storybook": "^10.6.0",
55
+ "tailwindcss": "^4.3.3",
56
+ "tsc-alias": "^1.9.4",
57
+ "typescript": "^7.0.2",
58
+ "vite": "^8.2.2",
59
+ "vitest": "^5.0.0"
60
60
  },
61
61
  "peerDependencies": {
62
62
  "react": "^19.0.0",
63
63
  "react-dom": "^19.0.0"
64
64
  },
65
65
  "dependencies": {
66
- "@base-ui/react": "^1.3.0",
66
+ "@base-ui/react": "^1.8.0",
67
67
  "@radix-ui/react-icons": "^1.3.2",
68
68
  "clsx": "^2.1.1",
69
- "sonner": "^2.0.7",
70
- "tailwind-merge": "^3.5.0"
69
+ "sonner": "^2.0.8",
70
+ "tailwind-merge": "^3.6.0"
71
71
  },
72
- "packageManager": "pnpm@10.26.2"
72
+ "packageManager": "pnpm@12.3.4"
73
73
  }