@mdigital_ui/ui 0.2.9 → 0.3.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.
- package/README.md +574 -994
- package/dist/accordion/index.js +1 -1
- package/dist/avatar/index.js +1 -1
- package/dist/badge/index.js +1 -1
- package/dist/breadcrumbs/index.js +1 -1
- package/dist/button/index.js +1 -1
- package/dist/button-group/index.js +1 -1
- package/dist/card/index.js +2 -1
- package/dist/cascader/index.js +2 -1
- package/dist/checkbox/index.js +1 -1
- package/dist/checkbox-group/index.js +1 -1
- package/dist/{chunk-4LSKRZOT.js → chunk-2PNLIQYM.js} +21 -4
- package/dist/chunk-2PNLIQYM.js.map +1 -0
- package/dist/{chunk-43RDFTC5.js → chunk-4TQ4BZ3S.js} +6 -4
- package/dist/chunk-4TQ4BZ3S.js.map +1 -0
- package/dist/{chunk-IMGVPMHJ.js → chunk-5JOJBDET.js} +47 -40
- package/dist/chunk-5JOJBDET.js.map +1 -0
- package/dist/{chunk-W3ES3UPV.js → chunk-5VORB55Y.js} +19 -3
- package/dist/chunk-5VORB55Y.js.map +1 -0
- package/dist/{chunk-3UCZ4GMN.js → chunk-6HGUDHHE.js} +4 -2
- package/dist/chunk-6HGUDHHE.js.map +1 -0
- package/dist/chunk-6YVT3AL2.js +211 -0
- package/dist/chunk-6YVT3AL2.js.map +1 -0
- package/dist/{chunk-CPDVBHA3.js → chunk-7KA7JSRX.js} +133 -23
- package/dist/chunk-7KA7JSRX.js.map +1 -0
- package/dist/chunk-CO766H7F.js +348 -0
- package/dist/chunk-CO766H7F.js.map +1 -0
- package/dist/{chunk-JIREY2VB.js → chunk-DHXVNO75.js} +3 -3
- package/dist/{chunk-JIREY2VB.js.map → chunk-DHXVNO75.js.map} +1 -1
- package/dist/chunk-DRL4CJMI.js +147 -0
- package/dist/chunk-DRL4CJMI.js.map +1 -0
- package/dist/{chunk-YAAV7FQG.js → chunk-FJPMIXWU.js} +15 -4
- package/dist/chunk-FJPMIXWU.js.map +1 -0
- package/dist/{chunk-MXDTUN3V.js → chunk-FZLFCT6Q.js} +141 -106
- package/dist/chunk-FZLFCT6Q.js.map +1 -0
- package/dist/chunk-GGDDE7LC.js +303 -0
- package/dist/chunk-GGDDE7LC.js.map +1 -0
- package/dist/{chunk-MRFCITKK.js → chunk-GVEEUHM2.js} +20 -16
- package/dist/chunk-GVEEUHM2.js.map +1 -0
- package/dist/{chunk-RYKVZFGB.js → chunk-HLY4VDIX.js} +7 -7
- package/dist/chunk-HLY4VDIX.js.map +1 -0
- package/dist/{chunk-2OUGJBXK.js → chunk-IVOMN6DV.js} +60 -14
- package/dist/chunk-IVOMN6DV.js.map +1 -0
- package/dist/{chunk-REKWBXAQ.js → chunk-J6IJBRYT.js} +12 -11
- package/dist/chunk-J6IJBRYT.js.map +1 -0
- package/dist/{chunk-LMR7TKDJ.js → chunk-KPM72QBO.js} +27 -10
- package/dist/chunk-KPM72QBO.js.map +1 -0
- package/dist/{chunk-QF3NJUUG.js → chunk-L572AMB3.js} +53 -8
- package/dist/chunk-L572AMB3.js.map +1 -0
- package/dist/{chunk-UUP7YGOS.js → chunk-LX4FDH4J.js} +3 -3
- package/dist/chunk-LX4FDH4J.js.map +1 -0
- package/dist/chunk-OL2GU2O3.js +293 -0
- package/dist/chunk-OL2GU2O3.js.map +1 -0
- package/dist/{chunk-N32VWE6V.js → chunk-RLYGJN56.js} +64 -60
- package/dist/chunk-RLYGJN56.js.map +1 -0
- package/dist/{chunk-X5SCI7KH.js → chunk-RZVEKAFR.js} +18 -6
- package/dist/chunk-RZVEKAFR.js.map +1 -0
- package/dist/chunk-T4MGK3WE.js +143 -0
- package/dist/chunk-T4MGK3WE.js.map +1 -0
- package/dist/{chunk-YFK2DHCY.js → chunk-TBMY5EQC.js} +10 -6
- package/dist/chunk-TBMY5EQC.js.map +1 -0
- package/dist/{chunk-PXOHJJBE.js → chunk-UHVPOGNC.js} +44 -9
- package/dist/chunk-UHVPOGNC.js.map +1 -0
- package/dist/{chunk-CMGCJXE5.js → chunk-UTKVWE76.js} +15 -4
- package/dist/chunk-UTKVWE76.js.map +1 -0
- package/dist/chunk-XQJ6HZ4Q.js +310 -0
- package/dist/chunk-XQJ6HZ4Q.js.map +1 -0
- package/dist/chunk-YJOLLSHH.js +132 -0
- package/dist/chunk-YJOLLSHH.js.map +1 -0
- package/dist/chunk-YWGWFGCY.js +332 -0
- package/dist/chunk-YWGWFGCY.js.map +1 -0
- package/dist/{chunk-FIGSNRWY.js → chunk-ZFYEAPEL.js} +40 -13
- package/dist/chunk-ZFYEAPEL.js.map +1 -0
- package/dist/chunk-ZRSSFP52.js +345 -0
- package/dist/chunk-ZRSSFP52.js.map +1 -0
- package/dist/clipboard/index.js +2 -1
- package/dist/collapse/index.js +2 -1
- package/dist/command/index.js +1 -1
- package/dist/context-menu/index.js +1 -1
- package/dist/date-picker/index.js +1 -1
- package/dist/descriptions/index.js +1 -1
- package/dist/float-input/index.js +6 -0
- package/dist/form/index.js +4 -0
- package/dist/form/index.js.map +1 -0
- package/dist/index.js +38 -30
- package/dist/index.js.map +1 -1
- package/dist/link/index.js +4 -0
- package/dist/link/index.js.map +1 -0
- package/dist/menubar/index.js +6 -0
- package/dist/menubar/index.js.map +1 -0
- package/dist/navigation-menu/index.js +4 -0
- package/dist/navigation-menu/index.js.map +1 -0
- package/dist/number-input/index.js +6 -0
- package/dist/number-input/index.js.map +1 -0
- package/dist/pagination/index.js +1 -1
- package/dist/progress/index.js +1 -1
- package/dist/scroll-area/index.js +4 -0
- package/dist/scroll-area/index.js.map +1 -0
- package/dist/select/index.js +1 -1
- package/dist/slider/index.js +1 -1
- package/dist/table/index.js +4 -4
- package/dist/timeline/index.js +4 -0
- package/dist/timeline/index.js.map +1 -0
- package/dist/toast/index.js +5 -0
- package/dist/toast/index.js.map +1 -0
- package/dist/transfer/index.js +2 -2
- package/dist/upload/index.js +1 -1
- package/package.json +72 -14
- package/dist/chart/index.js +0 -4
- package/dist/chunk-2OUGJBXK.js.map +0 -1
- package/dist/chunk-3UCZ4GMN.js.map +0 -1
- package/dist/chunk-43RDFTC5.js.map +0 -1
- package/dist/chunk-4LSKRZOT.js.map +0 -1
- package/dist/chunk-C5YO5VZS.js +0 -448
- package/dist/chunk-C5YO5VZS.js.map +0 -1
- package/dist/chunk-CMGCJXE5.js.map +0 -1
- package/dist/chunk-CPDVBHA3.js.map +0 -1
- package/dist/chunk-FIGSNRWY.js.map +0 -1
- package/dist/chunk-H47C2ENJ.js +0 -215
- package/dist/chunk-H47C2ENJ.js.map +0 -1
- package/dist/chunk-IMGVPMHJ.js.map +0 -1
- package/dist/chunk-LMR7TKDJ.js.map +0 -1
- package/dist/chunk-MRFCITKK.js.map +0 -1
- package/dist/chunk-MXDTUN3V.js.map +0 -1
- package/dist/chunk-N32VWE6V.js.map +0 -1
- package/dist/chunk-PXOHJJBE.js.map +0 -1
- package/dist/chunk-QF3NJUUG.js.map +0 -1
- package/dist/chunk-REKWBXAQ.js.map +0 -1
- package/dist/chunk-RYKVZFGB.js.map +0 -1
- package/dist/chunk-UUP7YGOS.js.map +0 -1
- package/dist/chunk-W3ES3UPV.js.map +0 -1
- package/dist/chunk-X5SCI7KH.js.map +0 -1
- package/dist/chunk-YAAV7FQG.js.map +0 -1
- package/dist/chunk-YFK2DHCY.js.map +0 -1
- package/dist/index.d.ts +0 -5220
- package/dist/styles/base.css +0 -5906
- package/dist/styles/global.css +0 -6401
- package/dist/styles/themes/dark.css +0 -93
- package/dist/styles/themes/light.css +0 -89
- package/dist/styles/themes/presets/corporate.css +0 -126
- package/dist/styles/themes/presets/minimal.css +0 -126
- package/dist/styles/themes/presets/vibrant.css +0 -126
- /package/dist/{chart → float-input}/index.js.map +0 -0
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
import { Popover, PopoverTrigger, PopoverContent } from './chunk-WTGCXWNX.js';
|
|
2
|
+
import { cn } from './chunk-NGYLRX6F.js';
|
|
3
|
+
import { ChevronRight, Check, Circle } from 'lucide-react';
|
|
4
|
+
import React, { useState, useCallback, useEffect } from 'react';
|
|
5
|
+
import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
var MenuItems = React.memo(({ items, classNames, onItemClick }) => {
|
|
8
|
+
const [activeSubmenu, setActiveSubmenu] = useState(null);
|
|
9
|
+
return /* @__PURE__ */ jsx(Fragment, { children: items.map((item, idx) => {
|
|
10
|
+
if (item.separator) {
|
|
11
|
+
return /* @__PURE__ */ jsx(
|
|
12
|
+
"div",
|
|
13
|
+
{
|
|
14
|
+
"data-slot": "separator",
|
|
15
|
+
className: cn("menubar_separator h-px bg-border my-1", classNames?.separator),
|
|
16
|
+
role: "separator"
|
|
17
|
+
},
|
|
18
|
+
item.key || `separator-${idx}`
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
if (item.type === "label") {
|
|
22
|
+
return /* @__PURE__ */ jsx(
|
|
23
|
+
"div",
|
|
24
|
+
{
|
|
25
|
+
"data-slot": "label",
|
|
26
|
+
className: cn(
|
|
27
|
+
"menubar_label px-3 py-1.5 text-xs font-semibold text-text-secondary",
|
|
28
|
+
classNames?.label
|
|
29
|
+
),
|
|
30
|
+
role: "presentation",
|
|
31
|
+
children: item.label
|
|
32
|
+
},
|
|
33
|
+
item.key
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
const isCheckboxOrRadio = item.type === "checkbox" || item.type === "radio";
|
|
37
|
+
const hasChildren = item.children && item.children.length > 0;
|
|
38
|
+
if (hasChildren) {
|
|
39
|
+
return /* @__PURE__ */ jsxs(
|
|
40
|
+
Popover,
|
|
41
|
+
{
|
|
42
|
+
open: activeSubmenu === item.key,
|
|
43
|
+
onOpenChange: (open) => setActiveSubmenu(open ? item.key : null),
|
|
44
|
+
children: [
|
|
45
|
+
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
46
|
+
"div",
|
|
47
|
+
{
|
|
48
|
+
"data-slot": "item",
|
|
49
|
+
className: cn(
|
|
50
|
+
"menubar_item relative flex items-center gap-2 px-3 py-2 text-sm cursor-pointer rounded-sm transition-colors mx-1",
|
|
51
|
+
item.disabled ? "opacity-50 cursor-not-allowed" : "hover:bg-surface focus:bg-surface focus:outline-none",
|
|
52
|
+
classNames?.item
|
|
53
|
+
),
|
|
54
|
+
role: "menuitem",
|
|
55
|
+
"aria-disabled": item.disabled,
|
|
56
|
+
"aria-haspopup": "menu",
|
|
57
|
+
tabIndex: item.disabled ? -1 : 0,
|
|
58
|
+
onMouseEnter: () => !item.disabled && setActiveSubmenu(item.key),
|
|
59
|
+
onKeyDown: (e) => {
|
|
60
|
+
if (e.key === "ArrowRight") {
|
|
61
|
+
e.preventDefault();
|
|
62
|
+
if (!item.disabled) setActiveSubmenu(item.key);
|
|
63
|
+
} else if (e.key === "ArrowLeft") {
|
|
64
|
+
e.preventDefault();
|
|
65
|
+
setActiveSubmenu(null);
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
children: [
|
|
69
|
+
item.icon && /* @__PURE__ */ jsx("span", { className: "w-4 h-4 shrink-0", children: item.icon }),
|
|
70
|
+
/* @__PURE__ */ jsx("span", { className: "flex-1", children: item.label }),
|
|
71
|
+
/* @__PURE__ */ jsx(ChevronRight, { className: "w-4 h-4 ml-2 shrink-0" })
|
|
72
|
+
]
|
|
73
|
+
}
|
|
74
|
+
) }),
|
|
75
|
+
/* @__PURE__ */ jsx(
|
|
76
|
+
PopoverContent,
|
|
77
|
+
{
|
|
78
|
+
side: "right",
|
|
79
|
+
align: "start",
|
|
80
|
+
sideOffset: 4,
|
|
81
|
+
"data-slot": "submenu",
|
|
82
|
+
className: cn(
|
|
83
|
+
"menubar_submenu min-w-[200px] w-auto p-1 rounded-md",
|
|
84
|
+
classNames?.submenu
|
|
85
|
+
),
|
|
86
|
+
onOpenAutoFocus: (e) => e.preventDefault(),
|
|
87
|
+
onCloseAutoFocus: (e) => e.preventDefault(),
|
|
88
|
+
children: /* @__PURE__ */ jsx(MenuItems, { items: item.children, classNames, onItemClick })
|
|
89
|
+
}
|
|
90
|
+
)
|
|
91
|
+
]
|
|
92
|
+
},
|
|
93
|
+
item.key
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
return /* @__PURE__ */ jsxs(
|
|
97
|
+
"div",
|
|
98
|
+
{
|
|
99
|
+
"data-slot": "item",
|
|
100
|
+
className: cn(
|
|
101
|
+
"menubar_item relative flex items-center gap-2 px-3 py-2 text-sm cursor-pointer rounded-sm transition-colors mx-1",
|
|
102
|
+
item.disabled ? "opacity-50 cursor-not-allowed" : "hover:bg-surface focus:bg-surface focus:outline-none",
|
|
103
|
+
isCheckboxOrRadio && classNames?.checkboxItem,
|
|
104
|
+
item.type === "radio" && classNames?.radioItem,
|
|
105
|
+
classNames?.item
|
|
106
|
+
),
|
|
107
|
+
role: item.type === "checkbox" ? "menuitemcheckbox" : item.type === "radio" ? "menuitemradio" : "menuitem",
|
|
108
|
+
"aria-disabled": item.disabled,
|
|
109
|
+
"aria-checked": isCheckboxOrRadio ? item.checked : void 0,
|
|
110
|
+
tabIndex: item.disabled ? -1 : 0,
|
|
111
|
+
onClick: () => !item.disabled && onItemClick(item),
|
|
112
|
+
onKeyDown: (e) => {
|
|
113
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
114
|
+
e.preventDefault();
|
|
115
|
+
if (!item.disabled) onItemClick(item);
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
children: [
|
|
119
|
+
isCheckboxOrRadio && /* @__PURE__ */ jsx("span", { className: "w-4 h-4 shrink-0", children: item.checked && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
120
|
+
item.type === "checkbox" && /* @__PURE__ */ jsx(Check, { className: "w-4 h-4" }),
|
|
121
|
+
item.type === "radio" && /* @__PURE__ */ jsx(Circle, { className: "w-4 h-4 fill-current" })
|
|
122
|
+
] }) }),
|
|
123
|
+
item.icon && !isCheckboxOrRadio && /* @__PURE__ */ jsx("span", { className: "w-4 h-4 shrink-0", children: item.icon }),
|
|
124
|
+
/* @__PURE__ */ jsx("span", { className: "flex-1", children: item.label }),
|
|
125
|
+
item.shortcut && /* @__PURE__ */ jsx(
|
|
126
|
+
"span",
|
|
127
|
+
{
|
|
128
|
+
"data-slot": "shortcut",
|
|
129
|
+
className: cn(
|
|
130
|
+
"menubar_shortcut text-xs text-text-secondary ml-auto",
|
|
131
|
+
classNames?.shortcut
|
|
132
|
+
),
|
|
133
|
+
children: item.shortcut
|
|
134
|
+
}
|
|
135
|
+
)
|
|
136
|
+
]
|
|
137
|
+
},
|
|
138
|
+
item.key
|
|
139
|
+
);
|
|
140
|
+
}) });
|
|
141
|
+
});
|
|
142
|
+
MenuItems.displayName = "MenuItems";
|
|
143
|
+
var Menubar = React.memo(({ menus, className, classNames, ref }) => {
|
|
144
|
+
const [activeMenu, setActiveMenu] = useState(null);
|
|
145
|
+
const [hoverMode, setHoverMode] = useState(false);
|
|
146
|
+
const handleMenuClick = useCallback((menuKey, disabled) => {
|
|
147
|
+
if (disabled) return;
|
|
148
|
+
setActiveMenu((prev) => prev === menuKey ? null : menuKey);
|
|
149
|
+
setHoverMode(true);
|
|
150
|
+
}, []);
|
|
151
|
+
const handleMenuHover = useCallback(
|
|
152
|
+
(menuKey, disabled) => {
|
|
153
|
+
if (disabled) return;
|
|
154
|
+
if (hoverMode && activeMenu !== null) {
|
|
155
|
+
setActiveMenu(menuKey);
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
[hoverMode, activeMenu]
|
|
159
|
+
);
|
|
160
|
+
const handleClose = useCallback(() => {
|
|
161
|
+
setActiveMenu(null);
|
|
162
|
+
setHoverMode(false);
|
|
163
|
+
}, []);
|
|
164
|
+
const handleItemClick = useCallback(
|
|
165
|
+
(item) => {
|
|
166
|
+
if (item.type === "checkbox") {
|
|
167
|
+
item.onCheckedChange?.(!item.checked);
|
|
168
|
+
} else if (item.type === "radio") {
|
|
169
|
+
item.onCheckedChange?.(true);
|
|
170
|
+
} else {
|
|
171
|
+
item.onClick?.();
|
|
172
|
+
}
|
|
173
|
+
handleClose();
|
|
174
|
+
},
|
|
175
|
+
[handleClose]
|
|
176
|
+
);
|
|
177
|
+
useEffect(() => {
|
|
178
|
+
if (!activeMenu) return;
|
|
179
|
+
const handleKeyDown = (e) => {
|
|
180
|
+
const currentIndex = menus.findIndex((m) => m.key === activeMenu);
|
|
181
|
+
if (e.key === "Escape") {
|
|
182
|
+
e.preventDefault();
|
|
183
|
+
handleClose();
|
|
184
|
+
} else if (e.key === "ArrowRight") {
|
|
185
|
+
const nextIndex = (currentIndex + 1) % menus.length;
|
|
186
|
+
const nextMenu = menus[nextIndex];
|
|
187
|
+
if (nextMenu && !nextMenu.disabled) {
|
|
188
|
+
e.preventDefault();
|
|
189
|
+
setActiveMenu(nextMenu.key);
|
|
190
|
+
}
|
|
191
|
+
} else if (e.key === "ArrowLeft") {
|
|
192
|
+
const prevIndex = currentIndex - 1 < 0 ? menus.length - 1 : currentIndex - 1;
|
|
193
|
+
const prevMenu = menus[prevIndex];
|
|
194
|
+
if (prevMenu && !prevMenu.disabled) {
|
|
195
|
+
e.preventDefault();
|
|
196
|
+
setActiveMenu(prevMenu.key);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
document.addEventListener("keydown", handleKeyDown);
|
|
201
|
+
return () => document.removeEventListener("keydown", handleKeyDown);
|
|
202
|
+
}, [activeMenu, menus, handleClose]);
|
|
203
|
+
return /* @__PURE__ */ jsx(
|
|
204
|
+
"div",
|
|
205
|
+
{
|
|
206
|
+
ref,
|
|
207
|
+
"data-slot": "root",
|
|
208
|
+
className: cn(
|
|
209
|
+
"menubar_root flex items-center gap-1 px-2 py-1 bg-background border-b border-border",
|
|
210
|
+
className,
|
|
211
|
+
classNames?.root
|
|
212
|
+
),
|
|
213
|
+
role: "menubar",
|
|
214
|
+
children: menus.map((menu) => /* @__PURE__ */ jsxs(
|
|
215
|
+
Popover,
|
|
216
|
+
{
|
|
217
|
+
open: activeMenu === menu.key,
|
|
218
|
+
onOpenChange: (open) => {
|
|
219
|
+
if (open) {
|
|
220
|
+
setActiveMenu(menu.key);
|
|
221
|
+
setHoverMode(true);
|
|
222
|
+
} else {
|
|
223
|
+
handleClose();
|
|
224
|
+
}
|
|
225
|
+
},
|
|
226
|
+
children: [
|
|
227
|
+
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
228
|
+
"button",
|
|
229
|
+
{
|
|
230
|
+
"data-slot": "trigger",
|
|
231
|
+
className: cn(
|
|
232
|
+
"menubar_trigger px-3 py-1.5 text-sm rounded-sm transition-colors",
|
|
233
|
+
menu.disabled ? "opacity-50 cursor-not-allowed" : "hover:bg-surface focus:bg-surface focus:outline-none",
|
|
234
|
+
activeMenu === menu.key && "bg-surface",
|
|
235
|
+
classNames?.trigger
|
|
236
|
+
),
|
|
237
|
+
role: "menuitem",
|
|
238
|
+
"aria-haspopup": "menu",
|
|
239
|
+
"aria-expanded": activeMenu === menu.key,
|
|
240
|
+
"aria-disabled": menu.disabled,
|
|
241
|
+
onClick: () => handleMenuClick(menu.key, menu.disabled),
|
|
242
|
+
onMouseEnter: () => handleMenuHover(menu.key, menu.disabled),
|
|
243
|
+
onKeyDown: (e) => {
|
|
244
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
245
|
+
e.preventDefault();
|
|
246
|
+
handleMenuClick(menu.key, menu.disabled);
|
|
247
|
+
}
|
|
248
|
+
},
|
|
249
|
+
children: menu.label
|
|
250
|
+
}
|
|
251
|
+
) }),
|
|
252
|
+
/* @__PURE__ */ jsx(
|
|
253
|
+
PopoverContent,
|
|
254
|
+
{
|
|
255
|
+
side: "bottom",
|
|
256
|
+
align: "start",
|
|
257
|
+
sideOffset: 2,
|
|
258
|
+
"data-slot": "content",
|
|
259
|
+
className: cn(
|
|
260
|
+
"menubar_content min-w-[200px] w-auto p-1 rounded-md",
|
|
261
|
+
classNames?.content
|
|
262
|
+
),
|
|
263
|
+
onOpenAutoFocus: (e) => e.preventDefault(),
|
|
264
|
+
onCloseAutoFocus: (e) => e.preventDefault(),
|
|
265
|
+
onPointerDownOutside: (e) => {
|
|
266
|
+
const target = e.target;
|
|
267
|
+
if (target.closest('[data-slot="root"]')) {
|
|
268
|
+
e.preventDefault();
|
|
269
|
+
}
|
|
270
|
+
},
|
|
271
|
+
children: /* @__PURE__ */ jsx(
|
|
272
|
+
MenuItems,
|
|
273
|
+
{
|
|
274
|
+
items: menu.items,
|
|
275
|
+
classNames,
|
|
276
|
+
onItemClick: handleItemClick
|
|
277
|
+
}
|
|
278
|
+
)
|
|
279
|
+
}
|
|
280
|
+
)
|
|
281
|
+
]
|
|
282
|
+
},
|
|
283
|
+
menu.key
|
|
284
|
+
))
|
|
285
|
+
}
|
|
286
|
+
);
|
|
287
|
+
});
|
|
288
|
+
Menubar.displayName = "Menubar";
|
|
289
|
+
var menubar_default = Menubar;
|
|
290
|
+
|
|
291
|
+
export { menubar_default };
|
|
292
|
+
//# sourceMappingURL=chunk-OL2GU2O3.js.map
|
|
293
|
+
//# sourceMappingURL=chunk-OL2GU2O3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/menubar/index.tsx"],"names":[],"mappings":"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","file":"chunk-OL2GU2O3.js","sourcesContent":["'use client'\n\nimport { ChevronRight, Check, Circle } from 'lucide-react'\nimport React, { useState, useCallback, useEffect } from 'react'\n\nimport { Popover, PopoverTrigger, PopoverContent } from '../popover'\nimport { cn } from '../utils'\nimport type { MenubarProps, MenubarItem } from './types'\n\ninterface MenuItemsProps {\n items: MenubarItem[]\n classNames?: MenubarProps['classNames']\n onItemClick: (item: MenubarItem) => void\n}\n\nconst MenuItems = React.memo<MenuItemsProps>(({ items, classNames, onItemClick }) => {\n const [activeSubmenu, setActiveSubmenu] = useState<string | null>(null)\n\n return (\n <>\n {items.map((item, idx) => {\n if (item.separator) {\n return (\n <div\n key={item.key || `separator-${idx}`}\n data-slot=\"separator\"\n className={cn('menubar_separator h-px bg-border my-1', classNames?.separator)}\n role=\"separator\"\n />\n )\n }\n\n if (item.type === 'label') {\n return (\n <div\n key={item.key}\n data-slot=\"label\"\n className={cn(\n 'menubar_label px-3 py-1.5 text-xs font-semibold text-text-secondary',\n classNames?.label,\n )}\n role=\"presentation\"\n >\n {item.label}\n </div>\n )\n }\n\n const isCheckboxOrRadio = item.type === 'checkbox' || item.type === 'radio'\n const hasChildren = item.children && item.children.length > 0\n\n if (hasChildren) {\n return (\n <Popover\n key={item.key}\n open={activeSubmenu === item.key}\n onOpenChange={(open) => setActiveSubmenu(open ? item.key : null)}\n >\n <PopoverTrigger asChild>\n <div\n data-slot=\"item\"\n className={cn(\n 'menubar_item relative flex items-center gap-2 px-3 py-2 text-sm cursor-pointer rounded-sm transition-colors mx-1',\n item.disabled\n ? 'opacity-50 cursor-not-allowed'\n : 'hover:bg-surface focus:bg-surface focus:outline-none',\n classNames?.item,\n )}\n role=\"menuitem\"\n aria-disabled={item.disabled}\n aria-haspopup=\"menu\"\n tabIndex={item.disabled ? -1 : 0}\n onMouseEnter={() => !item.disabled && setActiveSubmenu(item.key)}\n onKeyDown={(e) => {\n if (e.key === 'ArrowRight') {\n e.preventDefault()\n if (!item.disabled) setActiveSubmenu(item.key)\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault()\n setActiveSubmenu(null)\n }\n }}\n >\n {item.icon && <span className=\"w-4 h-4 shrink-0\">{item.icon}</span>}\n <span className=\"flex-1\">{item.label}</span>\n <ChevronRight className=\"w-4 h-4 ml-2 shrink-0\" />\n </div>\n </PopoverTrigger>\n <PopoverContent\n side=\"right\"\n align=\"start\"\n sideOffset={4}\n data-slot=\"submenu\"\n className={cn(\n 'menubar_submenu min-w-[200px] w-auto p-1 rounded-md',\n classNames?.submenu,\n )}\n onOpenAutoFocus={(e) => e.preventDefault()}\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n <MenuItems items={item.children!} classNames={classNames} onItemClick={onItemClick} />\n </PopoverContent>\n </Popover>\n )\n }\n\n return (\n <div\n key={item.key}\n data-slot=\"item\"\n className={cn(\n 'menubar_item relative flex items-center gap-2 px-3 py-2 text-sm cursor-pointer rounded-sm transition-colors mx-1',\n item.disabled\n ? 'opacity-50 cursor-not-allowed'\n : 'hover:bg-surface focus:bg-surface focus:outline-none',\n isCheckboxOrRadio && classNames?.checkboxItem,\n item.type === 'radio' && classNames?.radioItem,\n classNames?.item,\n )}\n role={\n item.type === 'checkbox'\n ? 'menuitemcheckbox'\n : item.type === 'radio'\n ? 'menuitemradio'\n : 'menuitem'\n }\n aria-disabled={item.disabled}\n aria-checked={isCheckboxOrRadio ? item.checked : undefined}\n tabIndex={item.disabled ? -1 : 0}\n onClick={() => !item.disabled && onItemClick(item)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n if (!item.disabled) onItemClick(item)\n }\n }}\n >\n {isCheckboxOrRadio && (\n <span className=\"w-4 h-4 shrink-0\">\n {item.checked && (\n <>\n {item.type === 'checkbox' && <Check className=\"w-4 h-4\" />}\n {item.type === 'radio' && <Circle className=\"w-4 h-4 fill-current\" />}\n </>\n )}\n </span>\n )}\n {item.icon && !isCheckboxOrRadio && (\n <span className=\"w-4 h-4 shrink-0\">{item.icon}</span>\n )}\n <span className=\"flex-1\">{item.label}</span>\n {item.shortcut && (\n <span\n data-slot=\"shortcut\"\n className={cn(\n 'menubar_shortcut text-xs text-text-secondary ml-auto',\n classNames?.shortcut,\n )}\n >\n {item.shortcut}\n </span>\n )}\n </div>\n )\n })}\n </>\n )\n})\n\nMenuItems.displayName = 'MenuItems'\n\nconst Menubar = React.memo<MenubarProps>(({ menus, className, classNames, ref }) => {\n const [activeMenu, setActiveMenu] = useState<string | null>(null)\n const [hoverMode, setHoverMode] = useState(false)\n\n const handleMenuClick = useCallback((menuKey: string, disabled?: boolean) => {\n if (disabled) return\n setActiveMenu((prev) => (prev === menuKey ? null : menuKey))\n setHoverMode(true)\n }, [])\n\n const handleMenuHover = useCallback(\n (menuKey: string, disabled?: boolean) => {\n if (disabled) return\n if (hoverMode && activeMenu !== null) {\n setActiveMenu(menuKey)\n }\n },\n [hoverMode, activeMenu],\n )\n\n const handleClose = useCallback(() => {\n setActiveMenu(null)\n setHoverMode(false)\n }, [])\n\n const handleItemClick = useCallback(\n (item: MenubarItem) => {\n if (item.type === 'checkbox') {\n item.onCheckedChange?.(!item.checked)\n } else if (item.type === 'radio') {\n item.onCheckedChange?.(true)\n } else {\n item.onClick?.()\n }\n handleClose()\n },\n [handleClose],\n )\n\n // Keyboard navigation for switching between top-level menus\n useEffect(() => {\n if (!activeMenu) return\n\n const handleKeyDown = (e: KeyboardEvent) => {\n const currentIndex = menus.findIndex((m) => m.key === activeMenu)\n\n if (e.key === 'Escape') {\n e.preventDefault()\n handleClose()\n } else if (e.key === 'ArrowRight') {\n const nextIndex = (currentIndex + 1) % menus.length\n const nextMenu = menus[nextIndex]\n if (nextMenu && !nextMenu.disabled) {\n e.preventDefault()\n setActiveMenu(nextMenu.key)\n }\n } else if (e.key === 'ArrowLeft') {\n const prevIndex = currentIndex - 1 < 0 ? menus.length - 1 : currentIndex - 1\n const prevMenu = menus[prevIndex]\n if (prevMenu && !prevMenu.disabled) {\n e.preventDefault()\n setActiveMenu(prevMenu.key)\n }\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [activeMenu, menus, handleClose])\n\n return (\n <div\n ref={ref}\n data-slot=\"root\"\n className={cn(\n 'menubar_root flex items-center gap-1 px-2 py-1 bg-background border-b border-border',\n className,\n classNames?.root,\n )}\n role=\"menubar\"\n >\n {menus.map((menu) => (\n <Popover\n key={menu.key}\n open={activeMenu === menu.key}\n onOpenChange={(open) => {\n if (open) {\n setActiveMenu(menu.key)\n setHoverMode(true)\n } else {\n handleClose()\n }\n }}\n >\n <PopoverTrigger asChild>\n <button\n data-slot=\"trigger\"\n className={cn(\n 'menubar_trigger px-3 py-1.5 text-sm rounded-sm transition-colors',\n menu.disabled\n ? 'opacity-50 cursor-not-allowed'\n : 'hover:bg-surface focus:bg-surface focus:outline-none',\n activeMenu === menu.key && 'bg-surface',\n classNames?.trigger,\n )}\n role=\"menuitem\"\n aria-haspopup=\"menu\"\n aria-expanded={activeMenu === menu.key}\n aria-disabled={menu.disabled}\n onClick={() => handleMenuClick(menu.key, menu.disabled)}\n onMouseEnter={() => handleMenuHover(menu.key, menu.disabled)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleMenuClick(menu.key, menu.disabled)\n }\n }}\n >\n {menu.label}\n </button>\n </PopoverTrigger>\n <PopoverContent\n side=\"bottom\"\n align=\"start\"\n sideOffset={2}\n data-slot=\"content\"\n className={cn(\n 'menubar_content min-w-[200px] w-auto p-1 rounded-md',\n classNames?.content,\n )}\n onOpenAutoFocus={(e) => e.preventDefault()}\n onCloseAutoFocus={(e) => e.preventDefault()}\n onPointerDownOutside={(e) => {\n // Prevent Radix from closing when clicking another menu trigger\n const target = e.target as HTMLElement\n if (target.closest('[data-slot=\"root\"]')) {\n e.preventDefault()\n }\n }}\n >\n <MenuItems\n items={menu.items}\n classNames={classNames}\n onItemClick={handleItemClick}\n />\n </PopoverContent>\n </Popover>\n ))}\n </div>\n )\n})\n\nMenubar.displayName = 'Menubar'\n\nexport type * from './types'\nexport default Menubar\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { checkboxBorderColorClasses,
|
|
1
|
+
import { checkboxBorderColorClasses, focusRingColorClasses, textColorClasses } from './chunk-LK4EPTNG.js';
|
|
2
2
|
import { cn, iconSizes } from './chunk-NGYLRX6F.js';
|
|
3
3
|
import { cva } from 'class-variance-authority';
|
|
4
|
-
import { Check } from 'lucide-react';
|
|
4
|
+
import { Minus, Check } from 'lucide-react';
|
|
5
5
|
import React, { useState, useId, useCallback, useEffect } from 'react';
|
|
6
6
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
7
7
|
|
|
@@ -19,7 +19,7 @@ function useMergeRefs(...refs) {
|
|
|
19
19
|
}, []);
|
|
20
20
|
}
|
|
21
21
|
var checkboxVariants = cva(
|
|
22
|
-
"appearance-none rounded border bg-background cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed outline-none",
|
|
22
|
+
"appearance-none rounded border bg-background cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-background",
|
|
23
23
|
{
|
|
24
24
|
variants: {
|
|
25
25
|
color: checkboxBorderColorClasses,
|
|
@@ -52,7 +52,6 @@ var Checkbox = React.memo(
|
|
|
52
52
|
checked,
|
|
53
53
|
defaultChecked,
|
|
54
54
|
ref,
|
|
55
|
-
labelClassName,
|
|
56
55
|
classNames,
|
|
57
56
|
...props
|
|
58
57
|
}) => {
|
|
@@ -66,21 +65,23 @@ var Checkbox = React.memo(
|
|
|
66
65
|
const mergedRef = useMergeRefs(ref, internalRef);
|
|
67
66
|
const isControlled = checked !== void 0;
|
|
68
67
|
const currentChecked = isControlled ? checked : internalChecked;
|
|
68
|
+
const onChangeRef = React.useRef(props.onChange);
|
|
69
|
+
onChangeRef.current = props.onChange;
|
|
69
70
|
const onChange = useCallback(
|
|
70
71
|
(event) => {
|
|
71
72
|
if (!isControlled) {
|
|
72
73
|
setInternalChecked(event.target.checked);
|
|
73
74
|
}
|
|
74
|
-
|
|
75
|
+
onChangeRef.current?.(event);
|
|
75
76
|
},
|
|
76
|
-
[isControlled
|
|
77
|
+
[isControlled]
|
|
77
78
|
);
|
|
78
79
|
useEffect(() => {
|
|
79
80
|
if (internalRef.current) {
|
|
80
81
|
internalRef.current.indeterminate = indeterminate;
|
|
81
82
|
}
|
|
82
83
|
}, [indeterminate]);
|
|
83
|
-
const checkboxElement = /* @__PURE__ */ jsxs("div", { className: "relative inline-flex", children: [
|
|
84
|
+
const checkboxElement = /* @__PURE__ */ jsxs("div", { className: "relative inline-flex", "data-slot": "wrapper", children: [
|
|
84
85
|
/* @__PURE__ */ jsx(
|
|
85
86
|
"input",
|
|
86
87
|
{
|
|
@@ -89,6 +90,7 @@ var Checkbox = React.memo(
|
|
|
89
90
|
className: cn(
|
|
90
91
|
"checkbox_checkbox",
|
|
91
92
|
checkboxVariants({ color, size, error: !!error }),
|
|
93
|
+
focusRingColorClasses[color],
|
|
92
94
|
className,
|
|
93
95
|
classNames?.checkbox
|
|
94
96
|
),
|
|
@@ -97,10 +99,11 @@ var Checkbox = React.memo(
|
|
|
97
99
|
"aria-describedby": hasHelperText ? helperId : void 0,
|
|
98
100
|
...props,
|
|
99
101
|
onChange,
|
|
100
|
-
checked: currentChecked
|
|
102
|
+
checked: currentChecked,
|
|
103
|
+
"data-slot": "checkbox"
|
|
101
104
|
}
|
|
102
105
|
),
|
|
103
|
-
currentChecked && /* @__PURE__ */ jsx(
|
|
106
|
+
(currentChecked || indeterminate) && /* @__PURE__ */ jsx(
|
|
104
107
|
"div",
|
|
105
108
|
{
|
|
106
109
|
className: cn(
|
|
@@ -108,65 +111,66 @@ var Checkbox = React.memo(
|
|
|
108
111
|
"absolute inset-0 flex items-center justify-center pointer-events-none",
|
|
109
112
|
classNames?.indicator
|
|
110
113
|
),
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
{
|
|
114
|
-
className: cn(
|
|
115
|
-
"w-[70%] h-[70%] rounded-xs border-2 border-background flex items-center justify-center",
|
|
116
|
-
checkedColorClasses[color]
|
|
117
|
-
)
|
|
118
|
-
}
|
|
119
|
-
) : /* @__PURE__ */ jsx(Check, { className: cn(iconSizes[size], textColorClasses[color]) })
|
|
114
|
+
"data-slot": "indicator",
|
|
115
|
+
children: indeterminate ? /* @__PURE__ */ jsx(Minus, { className: cn(iconSizes[size], textColorClasses[color]), strokeWidth: 3 }) : /* @__PURE__ */ jsx(Check, { className: cn(iconSizes[size], textColorClasses[color]) })
|
|
120
116
|
}
|
|
121
117
|
)
|
|
122
118
|
] });
|
|
123
119
|
if (!label && !helperText && !error) return checkboxElement;
|
|
124
|
-
return /* @__PURE__ */ jsxs(
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
className: cn(
|
|
156
|
-
"checkbox_description",
|
|
157
|
-
"mt-1 ml-0 text-xs",
|
|
158
|
-
error ? "text-error" : "text-text-secondary",
|
|
159
|
-
classNames?.description
|
|
120
|
+
return /* @__PURE__ */ jsxs(
|
|
121
|
+
"div",
|
|
122
|
+
{
|
|
123
|
+
className: cn("checkbox_root", "w-full", classNames?.root),
|
|
124
|
+
"data-slot": "root",
|
|
125
|
+
children: [
|
|
126
|
+
/* @__PURE__ */ jsxs(
|
|
127
|
+
"label",
|
|
128
|
+
{
|
|
129
|
+
className: cn(
|
|
130
|
+
"flex items-center gap-2",
|
|
131
|
+
!props.disabled && "cursor-pointer"
|
|
132
|
+
),
|
|
133
|
+
children: [
|
|
134
|
+
checkboxElement,
|
|
135
|
+
label && /* @__PURE__ */ jsx(
|
|
136
|
+
"span",
|
|
137
|
+
{
|
|
138
|
+
className: cn(
|
|
139
|
+
"checkbox_label",
|
|
140
|
+
"text-sm text-text-primary select-none",
|
|
141
|
+
error && "text-error",
|
|
142
|
+
props.disabled && "opacity-50",
|
|
143
|
+
classNames?.label
|
|
144
|
+
),
|
|
145
|
+
"data-slot": "label",
|
|
146
|
+
children: label
|
|
147
|
+
}
|
|
148
|
+
)
|
|
149
|
+
]
|
|
150
|
+
}
|
|
160
151
|
),
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
152
|
+
(helperText || error) && /* @__PURE__ */ jsx(
|
|
153
|
+
"p",
|
|
154
|
+
{
|
|
155
|
+
id: helperId,
|
|
156
|
+
className: cn(
|
|
157
|
+
"checkbox_description",
|
|
158
|
+
"mt-1 ml-0 text-xs",
|
|
159
|
+
error ? "text-error" : "text-text-secondary",
|
|
160
|
+
classNames?.description
|
|
161
|
+
),
|
|
162
|
+
"data-slot": "description",
|
|
163
|
+
children: typeof error === "string" ? error : helperText
|
|
164
|
+
}
|
|
165
|
+
)
|
|
166
|
+
]
|
|
167
|
+
}
|
|
168
|
+
);
|
|
165
169
|
}
|
|
166
170
|
);
|
|
167
171
|
Checkbox.displayName = "Checkbox";
|
|
168
172
|
var checkbox_default = Checkbox;
|
|
169
173
|
|
|
170
174
|
export { checkbox_default };
|
|
171
|
-
//# sourceMappingURL=chunk-
|
|
172
|
-
//# sourceMappingURL=chunk-
|
|
175
|
+
//# sourceMappingURL=chunk-RLYGJN56.js.map
|
|
176
|
+
//# sourceMappingURL=chunk-RLYGJN56.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/checkbox/index.tsx"],"names":[],"mappings":";;;;;;;AAkBA,SAAS,gBACJ,IAAA,EACmB;AAEtB,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AACjC,EAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAElB,EAAA,OAAO,WAAA,CAAY,CAAC,QAAA,KAAuB;AACzC,IAAA,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,CAAC,GAAA,KAAQ;AAC/B,MAAA,IAAI,OAAO,QAAQ,UAAA,EAAY;AAC7B,QAAA,GAAA,CAAI,QAAQ,CAAA;AAAA,MACd,CAAA,MAAA,IAAW,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA,EAAU;AACzC,QAAC,IAAyC,OAAA,GAAU,QAAA;AAAA,MACtD;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,EAAE,CAAA;AACP;AAEA,IAAM,gBAAA,GAAmB,GAAA;AAAA,EACvB,gNAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,KAAA,EAAO,0BAAA;AAAA,MACP,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,+CAAA;AAAA,QACJ,EAAA,EAAI,+CAAA;AAAA,QACJ,EAAA,EAAI,+CAAA;AAAA,QACJ,EAAA,EAAI;AAAA,OACN;AAAA,MACA,KAAA,EAAO;AAAA,QACL,IAAA,EAAM,mCAAA;AAAA,QACN,KAAA,EAAO;AAAA;AACT,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,KAAA,EAAO,SAAA;AAAA,MACP,IAAA,EAAM;AAAA;AACR;AAEJ,CAAA;AAEA,IAAM,WAAW,KAAA,CAAM,IAAA;AAAA,EACrB,CAAC;AAAA,IACC,KAAA,GAAQ,SAAA;AAAA,IACR,IAAA,GAAO,IAAA;AAAA,IACP,KAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA,aAAA,GAAgB,KAAA;AAAA,IAChB,SAAA;AAAA,IACA,OAAA;AAAA,IACA,cAAA;AAAA,IACA,GAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAG;AAAA,GACL,KAAM;AACJ,IAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAI,QAAA;AAAA,MAC5C,cAAA,IAAkB;AAAA,KACpB;AACA,IAAA,MAAM,WAAA,GAAc,KAAA,CAAM,MAAA,CAAyB,IAAI,CAAA;AAGvD,IAAA,MAAM,WAAW,KAAA,EAAM;AACvB,IAAA,MAAM,QAAA,GAAW,mBAAmB,QAAQ,CAAA,CAAA;AAC5C,IAAA,MAAM,aAAA,GAAgB,CAAC,EAAE,UAAA,IAAc,KAAA,CAAA;AAGvC,IAAA,MAAM,SAAA,GAAY,YAAA,CAAa,GAAA,EAAK,WAAW,CAAA;AAG/C,IAAA,MAAM,eAAe,OAAA,KAAY,MAAA;AACjC,IAAA,MAAM,cAAA,GAAiB,eAAe,OAAA,GAAU,eAAA;AAEhD,IAAA,MAAM,WAAA,GAAc,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAA;AAC/C,IAAA,WAAA,CAAY,UAAU,KAAA,CAAM,QAAA;AAE5B,IAAA,MAAM,QAAA,GAAW,WAAA;AAAA,MACf,CAAC,KAAA,KAA+C;AAC9C,QAAA,IAAI,CAAC,YAAA,EAAc;AACjB,UAAA,kBAAA,CAAmB,KAAA,CAAM,OAAO,OAAO,CAAA;AAAA,QACzC;AACA,QAAA,WAAA,CAAY,UAAU,KAAK,CAAA;AAAA,MAC7B,CAAA;AAAA,MACA,CAAC,YAAY;AAAA,KACf;AAEA,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IAAI,YAAY,OAAA,EAAS;AACvB,QAAA,WAAA,CAAY,QAAQ,aAAA,GAAgB,aAAA;AAAA,MACtC;AAAA,IACF,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,IAAA,MAAM,kCACJ,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EAAuB,aAAU,SAAA,EAC9C,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,SAAA;AAAA,UACL,IAAA,EAAK,UAAA;AAAA,UACL,SAAA,EAAW,EAAA;AAAA,YACT,mBAAA;AAAA,YACA,gBAAA,CAAiB,EAAE,KAAA,EAAO,IAAA,EAAM,OAAO,CAAC,CAAC,OAAO,CAAA;AAAA,YAChD,sBAAsB,KAAK,CAAA;AAAA,YAC3B,SAAA;AAAA,YACA,UAAA,EAAY;AAAA,WACd;AAAA,UACA,cAAA,EAAc,gBAAgB,OAAA,GAAU,cAAA;AAAA,UACxC,cAAA,EAAc,CAAC,CAAC,KAAA,IAAS,MAAA;AAAA,UACzB,kBAAA,EAAkB,gBAAgB,QAAA,GAAW,MAAA;AAAA,UAC5C,GAAG,KAAA;AAAA,UACJ,QAAA;AAAA,UACA,OAAA,EAAS,cAAA;AAAA,UACT,WAAA,EAAU;AAAA;AAAA,OACZ;AAAA,MAAA,CACE,kBAAkB,aAAA,qBAClB,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,EAAA;AAAA,YACT,oBAAA;AAAA,YACA,uEAAA;AAAA,YACA,UAAA,EAAY;AAAA,WACd;AAAA,UACA,WAAA,EAAU,WAAA;AAAA,UAET,QAAA,EAAA,aAAA,mBACC,GAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAW,EAAA,CAAG,UAAU,IAAI,CAAA,EAAG,gBAAA,CAAiB,KAAK,CAAC,CAAA,EAAG,aAAa,CAAA,EAAG,CAAA,mBAEhF,GAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAW,EAAA,CAAG,SAAA,CAAU,IAAI,CAAA,EAAG,gBAAA,CAAiB,KAAK,CAAC,CAAA,EAAG;AAAA;AAAA;AAEpE,KAAA,EAEJ,CAAA;AAGF,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,UAAA,IAAc,CAAC,OAAO,OAAO,eAAA;AAE5C,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA,CAAG,eAAA,EAAiB,QAAA,EAAU,YAAY,IAAI,CAAA;AAAA,QACzD,WAAA,EAAU,MAAA;AAAA,QAEV,QAAA,EAAA;AAAA,0BAAA,IAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,yBAAA;AAAA,gBACA,CAAC,MAAM,QAAA,IAAY;AAAA,eACrB;AAAA,cAEC,QAAA,EAAA;AAAA,gBAAA,eAAA;AAAA,gBACA,KAAA,oBACC,GAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAW,EAAA;AAAA,sBACT,gBAAA;AAAA,sBACA,uCAAA;AAAA,sBACA,KAAA,IAAS,YAAA;AAAA,sBACT,MAAM,QAAA,IAAY,YAAA;AAAA,sBAClB,UAAA,EAAY;AAAA,qBACd;AAAA,oBACA,WAAA,EAAU,OAAA;AAAA,oBAET,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA,WAEJ;AAAA,UAAA,CACE,cAAc,KAAA,qBACd,GAAA;AAAA,YAAC,GAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAI,QAAA;AAAA,cACJ,SAAA,EAAW,EAAA;AAAA,gBACT,sBAAA;AAAA,gBACA,mBAAA;AAAA,gBACA,QAAQ,YAAA,GAAe,qBAAA;AAAA,gBACvB,UAAA,EAAY;AAAA,eACd;AAAA,cACA,WAAA,EAAU,aAAA;AAAA,cAET,QAAA,EAAA,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ;AAAA;AAAA;AACvC;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF,CAAA;AAEA,QAAA,CAAS,WAAA,GAAc,UAAA;AAGvB,IAAO,gBAAA,GAAQ","file":"chunk-RLYGJN56.js","sourcesContent":["\"use client\";\n\nimport { cva } from \"class-variance-authority\";\nimport { Check, Minus } from \"lucide-react\";\nimport React, { useState, useCallback, useEffect, useId } from \"react\";\n\nimport { cn, iconSizes } from \"../utils\";\nimport {\n checkboxBorderColorClasses,\n focusRingColorClasses,\n textColorClasses,\n} from \"../variants\";\nimport type { CheckboxProps } from \"./types\";\n\n/**\n * Merges multiple refs into a single callback ref.\n * Handles both callback refs and RefObject refs safely.\n */\nfunction useMergeRefs<T>(\n ...refs: (React.Ref<T> | undefined)[]\n): React.RefCallback<T> {\n // Store refs in a ref to avoid dependency array issues\n const refsRef = React.useRef(refs);\n refsRef.current = refs;\n\n return useCallback((instance: T | null) => {\n refsRef.current.forEach((ref) => {\n if (typeof ref === \"function\") {\n ref(instance);\n } else if (ref && typeof ref === \"object\") {\n (ref as React.MutableRefObject<T | null>).current = instance;\n }\n });\n }, []);\n}\n\nconst checkboxVariants = cva(\n \"appearance-none rounded border bg-background cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n {\n variants: {\n color: checkboxBorderColorClasses,\n size: {\n xs: \"w-(--checkbox-size-xs) h-(--checkbox-size-xs)\",\n sm: \"w-(--checkbox-size-sm) h-(--checkbox-size-sm)\",\n md: \"w-(--checkbox-size-md) h-(--checkbox-size-md)\",\n lg: \"w-(--checkbox-size-lg) h-(--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 classNames,\n ...props\n }) => {\n const [internalChecked, setInternalChecked] = useState(\n defaultChecked ?? false,\n );\n const internalRef = React.useRef<HTMLInputElement>(null);\n\n // Generate unique ID for accessibility\n const uniqueId = useId();\n const helperId = `checkbox-helper-${uniqueId}`;\n const hasHelperText = !!(helperText || error);\n\n // Safely merge refs - handles both callback refs and RefObject refs\n const mergedRef = useMergeRefs(ref, internalRef);\n\n // Determine if controlled\n const isControlled = checked !== undefined;\n const currentChecked = isControlled ? checked : internalChecked;\n\n const onChangeRef = React.useRef(props.onChange);\n onChangeRef.current = props.onChange;\n\n const onChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setInternalChecked(event.target.checked);\n }\n onChangeRef.current?.(event);\n },\n [isControlled],\n );\n\n useEffect(() => {\n if (internalRef.current) {\n internalRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n const checkboxElement = (\n <div className=\"relative inline-flex\" data-slot=\"wrapper\">\n <input\n ref={mergedRef}\n type=\"checkbox\"\n className={cn(\n \"checkbox_checkbox\",\n checkboxVariants({ color, size, error: !!error }),\n focusRingColorClasses[color],\n className,\n classNames?.checkbox,\n )}\n aria-checked={indeterminate ? \"mixed\" : currentChecked}\n aria-invalid={!!error || undefined}\n aria-describedby={hasHelperText ? helperId : undefined}\n {...props}\n onChange={onChange}\n checked={currentChecked}\n data-slot=\"checkbox\"\n />\n {(currentChecked || indeterminate) && (\n <div\n className={cn(\n \"checkbox_indicator\",\n \"absolute inset-0 flex items-center justify-center pointer-events-none\",\n classNames?.indicator,\n )}\n data-slot=\"indicator\"\n >\n {indeterminate ? (\n <Minus className={cn(iconSizes[size], textColorClasses[color])} strokeWidth={3} />\n ) : (\n <Check className={cn(iconSizes[size], textColorClasses[color])} />\n )}\n </div>\n )}\n </div>\n );\n\n if (!label && !helperText && !error) return checkboxElement;\n\n return (\n <div\n className={cn(\"checkbox_root\", \"w-full\", classNames?.root)}\n data-slot=\"root\"\n >\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 \"checkbox_label\",\n \"text-sm text-text-primary select-none\",\n error && \"text-error\",\n props.disabled && \"opacity-50\",\n classNames?.label,\n )}\n data-slot=\"label\"\n >\n {label}\n </span>\n )}\n </label>\n {(helperText || error) && (\n <p\n id={helperId}\n className={cn(\n \"checkbox_description\",\n \"mt-1 ml-0 text-xs\",\n error ? \"text-error\" : \"text-text-secondary\",\n classNames?.description,\n )}\n data-slot=\"description\"\n >\n {typeof error === \"string\" ? error : helperText}\n </p>\n )}\n </div>\n );\n },\n);\n\nCheckbox.displayName = \"Checkbox\";\n\nexport type * from \"./types\";\nexport default Checkbox;\n"]}
|
|
@@ -381,10 +381,22 @@ var Pagination = React.memo(
|
|
|
381
381
|
disabled,
|
|
382
382
|
onKeyDown: (e) => {
|
|
383
383
|
if (e.key === "Enter") {
|
|
384
|
-
const
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
384
|
+
const inputEl = e.target;
|
|
385
|
+
const value = parseInt(inputEl.value);
|
|
386
|
+
if (!isNaN(value)) {
|
|
387
|
+
const clampedValue = Math.max(1, Math.min(totalPages, value));
|
|
388
|
+
handlePageChange(clampedValue);
|
|
389
|
+
inputEl.value = "";
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
},
|
|
393
|
+
onBlur: (e) => {
|
|
394
|
+
const inputEl = e.target;
|
|
395
|
+
const value = parseInt(inputEl.value);
|
|
396
|
+
if (!isNaN(value) && inputEl.value !== "") {
|
|
397
|
+
const clampedValue = Math.max(1, Math.min(totalPages, value));
|
|
398
|
+
if (clampedValue !== value) {
|
|
399
|
+
inputEl.value = String(clampedValue);
|
|
388
400
|
}
|
|
389
401
|
}
|
|
390
402
|
},
|
|
@@ -405,5 +417,5 @@ Pagination.displayName = "Pagination";
|
|
|
405
417
|
var pagination_default = Pagination;
|
|
406
418
|
|
|
407
419
|
export { pagination_default };
|
|
408
|
-
//# sourceMappingURL=chunk-
|
|
409
|
-
//# sourceMappingURL=chunk-
|
|
420
|
+
//# sourceMappingURL=chunk-RZVEKAFR.js.map
|
|
421
|
+
//# sourceMappingURL=chunk-RZVEKAFR.js.map
|