@cytario/design 6.0.1 → 7.1.0
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/dist/index.css +1 -1
- package/dist/index.d.ts +136 -129
- package/dist/index.js +901 -798
- package/dist/index.js.map +1 -1
- package/package.json +2 -8
- package/src/tokens/variables-dark.css +1 -1
package/dist/index.js
CHANGED
|
@@ -5,102 +5,298 @@ import { RouterProvider } from "react-aria-components";
|
|
|
5
5
|
|
|
6
6
|
// src/components/Button/Button.tsx
|
|
7
7
|
import {
|
|
8
|
-
Button as AriaButton
|
|
8
|
+
Button as AriaButton,
|
|
9
|
+
Link as AriaLink
|
|
9
10
|
} from "react-aria-components";
|
|
10
|
-
import { twMerge } from "tailwind-merge";
|
|
11
|
+
import { twMerge as twMerge3 } from "tailwind-merge";
|
|
11
12
|
|
|
12
13
|
// src/components/_shared/styles.ts
|
|
13
14
|
var sizeStyles = {
|
|
14
|
-
xs: "px-2 py-1 text-xs",
|
|
15
|
+
xs: "px-2 py-1.5 text-xs",
|
|
15
16
|
sm: "px-3 py-1.5 text-sm",
|
|
16
17
|
md: "px-4 py-2 text-base",
|
|
17
18
|
lg: "px-6 py-3 text-lg"
|
|
18
19
|
};
|
|
19
20
|
var variantStyles = {
|
|
20
|
-
primary:
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
secondary:
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
destructive:
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
success:
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
warning:
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
info:
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
neutral:
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
outline:
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
ghost:
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
21
|
+
primary: `
|
|
22
|
+
bg-primary text-primary-foreground
|
|
23
|
+
hover:bg-primary-hover
|
|
24
|
+
pressed:bg-primary-pressed
|
|
25
|
+
`,
|
|
26
|
+
secondary: `
|
|
27
|
+
bg-secondary text-secondary-foreground
|
|
28
|
+
hover:bg-secondary-hover
|
|
29
|
+
pressed:bg-secondary-pressed
|
|
30
|
+
`,
|
|
31
|
+
destructive: `
|
|
32
|
+
bg-destructive text-destructive-foreground
|
|
33
|
+
hover:bg-destructive-hover
|
|
34
|
+
pressed:bg-destructive-pressed
|
|
35
|
+
`,
|
|
36
|
+
success: `
|
|
37
|
+
bg-success text-success-foreground
|
|
38
|
+
hover:bg-success-hover
|
|
39
|
+
pressed:bg-success-pressed
|
|
40
|
+
`,
|
|
41
|
+
warning: `
|
|
42
|
+
bg-warning text-warning-foreground
|
|
43
|
+
hover:bg-warning-hover
|
|
44
|
+
pressed:bg-warning-pressed
|
|
45
|
+
`,
|
|
46
|
+
info: `
|
|
47
|
+
bg-info text-info-foreground
|
|
48
|
+
hover:bg-info-hover
|
|
49
|
+
pressed:bg-info-pressed
|
|
50
|
+
`,
|
|
51
|
+
neutral: `
|
|
52
|
+
bg-muted text-foreground
|
|
53
|
+
hover:bg-accent
|
|
54
|
+
pressed:bg-accent-pressed
|
|
55
|
+
`,
|
|
56
|
+
outline: `
|
|
57
|
+
bg-transparent text-foreground
|
|
58
|
+
border border-border
|
|
59
|
+
hover:bg-muted
|
|
60
|
+
pressed:bg-accent-pressed
|
|
61
|
+
`,
|
|
62
|
+
ghost: `
|
|
63
|
+
bg-transparent text-foreground
|
|
64
|
+
hover:bg-muted
|
|
65
|
+
pressed:bg-accent-pressed
|
|
66
|
+
`
|
|
67
|
+
};
|
|
68
|
+
var selectedStyles = {
|
|
69
|
+
primary: "selected:bg-primary-pressed",
|
|
70
|
+
secondary: "selected:bg-secondary-pressed",
|
|
71
|
+
destructive: "selected:bg-destructive-pressed",
|
|
72
|
+
success: "selected:bg-success-pressed",
|
|
73
|
+
warning: "selected:bg-warning-pressed",
|
|
74
|
+
info: "selected:bg-info-pressed",
|
|
75
|
+
neutral: "selected:bg-accent-pressed",
|
|
76
|
+
outline: "selected:bg-accent-pressed",
|
|
77
|
+
ghost: "selected:bg-accent-pressed"
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
// src/components/Icon/Icon.tsx
|
|
81
|
+
import { twMerge } from "tailwind-merge";
|
|
82
|
+
|
|
83
|
+
// src/components/Icon/icon-registry.ts
|
|
84
|
+
import {
|
|
85
|
+
AlertCircle,
|
|
86
|
+
AlertTriangle,
|
|
87
|
+
AlignCenter,
|
|
88
|
+
AlignLeft,
|
|
89
|
+
AlignRight,
|
|
90
|
+
Archive,
|
|
91
|
+
ArrowDown,
|
|
92
|
+
ArrowRight,
|
|
93
|
+
ArrowUp,
|
|
94
|
+
Ban,
|
|
95
|
+
Bookmark,
|
|
96
|
+
BookmarkCheck,
|
|
97
|
+
Braces,
|
|
98
|
+
Check,
|
|
99
|
+
CheckCircle,
|
|
100
|
+
CheckCircle2,
|
|
101
|
+
ChevronDown,
|
|
102
|
+
ChevronRight,
|
|
103
|
+
ChevronUp,
|
|
104
|
+
Circle,
|
|
105
|
+
CircleDot,
|
|
106
|
+
Clock,
|
|
107
|
+
Cloud,
|
|
108
|
+
Columns2,
|
|
109
|
+
Columns3,
|
|
110
|
+
Copy,
|
|
111
|
+
Download,
|
|
112
|
+
Edit,
|
|
113
|
+
EllipsisVertical,
|
|
114
|
+
ExternalLink,
|
|
115
|
+
Eye,
|
|
116
|
+
EyeOff,
|
|
117
|
+
File,
|
|
118
|
+
FileSearch,
|
|
119
|
+
FileSpreadsheet,
|
|
120
|
+
FilterX,
|
|
121
|
+
Folder,
|
|
122
|
+
FolderPlus,
|
|
123
|
+
FolderTree,
|
|
124
|
+
Fullscreen,
|
|
125
|
+
Grid2x2,
|
|
126
|
+
Grid3x3,
|
|
127
|
+
Heart,
|
|
128
|
+
Image,
|
|
129
|
+
ImageOff,
|
|
130
|
+
Inbox,
|
|
131
|
+
Info,
|
|
132
|
+
Lasso,
|
|
133
|
+
Layers,
|
|
134
|
+
Layers2,
|
|
135
|
+
LayoutGrid,
|
|
136
|
+
List,
|
|
137
|
+
ListFilter,
|
|
138
|
+
LogOut,
|
|
139
|
+
Mail,
|
|
140
|
+
MapPin,
|
|
141
|
+
Maximize,
|
|
142
|
+
Microscope,
|
|
143
|
+
Minus,
|
|
144
|
+
MoreVertical,
|
|
145
|
+
PanelLeftClose,
|
|
146
|
+
PanelLeftOpen,
|
|
147
|
+
PanelRightClose,
|
|
148
|
+
PanelRightOpen,
|
|
149
|
+
Pencil,
|
|
150
|
+
Plug,
|
|
151
|
+
Plus,
|
|
152
|
+
RotateCcw,
|
|
153
|
+
Search,
|
|
154
|
+
SearchX,
|
|
155
|
+
Send,
|
|
156
|
+
Settings,
|
|
157
|
+
Shield,
|
|
158
|
+
ShieldCheck,
|
|
159
|
+
Spline,
|
|
160
|
+
Square,
|
|
161
|
+
Star,
|
|
162
|
+
Table,
|
|
163
|
+
Tag,
|
|
164
|
+
Trash2,
|
|
165
|
+
Unplug,
|
|
166
|
+
User,
|
|
167
|
+
UserMinus,
|
|
168
|
+
UserPlus,
|
|
169
|
+
Users,
|
|
170
|
+
UsersRound,
|
|
171
|
+
X,
|
|
172
|
+
XCircle,
|
|
173
|
+
ZoomIn,
|
|
174
|
+
ZoomOut
|
|
175
|
+
} from "lucide-react";
|
|
176
|
+
var iconRegistry = {
|
|
177
|
+
AlertCircle,
|
|
178
|
+
AlertTriangle,
|
|
179
|
+
AlignCenter,
|
|
180
|
+
AlignLeft,
|
|
181
|
+
AlignRight,
|
|
182
|
+
Archive,
|
|
183
|
+
ArrowDown,
|
|
184
|
+
ArrowRight,
|
|
185
|
+
ArrowUp,
|
|
186
|
+
Ban,
|
|
187
|
+
Bookmark,
|
|
188
|
+
BookmarkCheck,
|
|
189
|
+
Braces,
|
|
190
|
+
Check,
|
|
191
|
+
CheckCircle,
|
|
192
|
+
CheckCircle2,
|
|
193
|
+
ChevronDown,
|
|
194
|
+
ChevronRight,
|
|
195
|
+
ChevronUp,
|
|
196
|
+
Circle,
|
|
197
|
+
CircleDot,
|
|
198
|
+
Clock,
|
|
199
|
+
Cloud,
|
|
200
|
+
Columns2,
|
|
201
|
+
Columns3,
|
|
202
|
+
Copy,
|
|
203
|
+
Download,
|
|
204
|
+
Edit,
|
|
205
|
+
EllipsisVertical,
|
|
206
|
+
ExternalLink,
|
|
207
|
+
Eye,
|
|
208
|
+
EyeOff,
|
|
209
|
+
File,
|
|
210
|
+
FileSearch,
|
|
211
|
+
FileSpreadsheet,
|
|
212
|
+
FilterX,
|
|
213
|
+
Folder,
|
|
214
|
+
FolderPlus,
|
|
215
|
+
FolderTree,
|
|
216
|
+
Fullscreen,
|
|
217
|
+
Grid2x2,
|
|
218
|
+
Grid3x3,
|
|
219
|
+
Heart,
|
|
220
|
+
Image,
|
|
221
|
+
ImageOff,
|
|
222
|
+
Inbox,
|
|
223
|
+
Info,
|
|
224
|
+
Lasso,
|
|
225
|
+
Layers,
|
|
226
|
+
Layers2,
|
|
227
|
+
LayoutGrid,
|
|
228
|
+
List,
|
|
229
|
+
ListFilter,
|
|
230
|
+
LogOut,
|
|
231
|
+
Mail,
|
|
232
|
+
MapPin,
|
|
233
|
+
Maximize,
|
|
234
|
+
Microscope,
|
|
235
|
+
Minus,
|
|
236
|
+
MoreVertical,
|
|
237
|
+
PanelLeftClose,
|
|
238
|
+
PanelLeftOpen,
|
|
239
|
+
PanelRightClose,
|
|
240
|
+
PanelRightOpen,
|
|
241
|
+
Pencil,
|
|
242
|
+
Plug,
|
|
243
|
+
Plus,
|
|
244
|
+
RotateCcw,
|
|
245
|
+
Search,
|
|
246
|
+
SearchX,
|
|
247
|
+
Send,
|
|
248
|
+
Settings,
|
|
249
|
+
Shield,
|
|
250
|
+
ShieldCheck,
|
|
251
|
+
Spline,
|
|
252
|
+
Square,
|
|
253
|
+
Star,
|
|
254
|
+
Table,
|
|
255
|
+
Tag,
|
|
256
|
+
Trash2,
|
|
257
|
+
Unplug,
|
|
258
|
+
User,
|
|
259
|
+
UserMinus,
|
|
260
|
+
UserPlus,
|
|
261
|
+
Users,
|
|
262
|
+
UsersRound,
|
|
263
|
+
X,
|
|
264
|
+
XCircle,
|
|
265
|
+
ZoomIn,
|
|
266
|
+
ZoomOut
|
|
66
267
|
};
|
|
67
268
|
|
|
68
269
|
// src/components/Icon/Icon.tsx
|
|
69
270
|
import { jsx } from "react/jsx-runtime";
|
|
70
271
|
var sizeMap = {
|
|
272
|
+
xs: 14,
|
|
71
273
|
sm: 16,
|
|
72
274
|
md: 20,
|
|
73
275
|
lg: 24,
|
|
74
276
|
xl: 32
|
|
75
277
|
};
|
|
76
278
|
function Icon({
|
|
77
|
-
icon
|
|
279
|
+
icon,
|
|
78
280
|
size = "md",
|
|
79
|
-
strokeWidth,
|
|
80
|
-
"aria-label": ariaLabel,
|
|
281
|
+
strokeWidth = 2,
|
|
81
282
|
className
|
|
82
283
|
}) {
|
|
83
|
-
const
|
|
284
|
+
const Component = typeof icon === "string" ? iconRegistry[icon] : icon;
|
|
84
285
|
return /* @__PURE__ */ jsx(
|
|
85
|
-
|
|
286
|
+
Component,
|
|
86
287
|
{
|
|
87
288
|
size: sizeMap[size],
|
|
88
289
|
strokeWidth,
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
className
|
|
290
|
+
"aria-hidden": "true",
|
|
291
|
+
focusable: false,
|
|
292
|
+
className: twMerge("shrink-0", className)
|
|
93
293
|
}
|
|
94
294
|
);
|
|
95
295
|
}
|
|
96
296
|
|
|
97
297
|
// src/components/Spinner/Spinner.tsx
|
|
298
|
+
import { twMerge as twMerge2 } from "tailwind-merge";
|
|
98
299
|
import { jsx as jsx2, jsxs } from "react/jsx-runtime";
|
|
99
|
-
var sizeMap2 = {
|
|
100
|
-
sm: "h-4 w-4",
|
|
101
|
-
md: "h-5 w-5",
|
|
102
|
-
lg: "h-6 w-6"
|
|
103
|
-
};
|
|
104
300
|
function Spinner({
|
|
105
301
|
size = "md",
|
|
106
302
|
"aria-label": ariaLabel,
|
|
@@ -113,9 +309,11 @@ function Spinner({
|
|
|
113
309
|
role: isDecorative ? void 0 : "status",
|
|
114
310
|
"aria-label": ariaLabel,
|
|
115
311
|
"aria-hidden": isDecorative ? "true" : void 0,
|
|
116
|
-
className:
|
|
312
|
+
className: twMerge2("animate-spin", className),
|
|
117
313
|
viewBox: "0 0 24 24",
|
|
118
314
|
fill: "none",
|
|
315
|
+
width: sizeMap[size],
|
|
316
|
+
height: sizeMap[size],
|
|
119
317
|
children: [
|
|
120
318
|
/* @__PURE__ */ jsx2(
|
|
121
319
|
"circle",
|
|
@@ -141,37 +339,19 @@ function Spinner({
|
|
|
141
339
|
);
|
|
142
340
|
}
|
|
143
341
|
|
|
144
|
-
// src/components/Form/InputGroup/InputGroupContext.ts
|
|
145
|
-
import { createContext, useContext } from "react";
|
|
146
|
-
var InputGroupContext = createContext({
|
|
147
|
-
inGroup: false,
|
|
148
|
-
position: "standalone"
|
|
149
|
-
});
|
|
150
|
-
function useInputGroup() {
|
|
151
|
-
return useContext(InputGroupContext);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
342
|
// src/components/Button/Button.tsx
|
|
155
343
|
import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
156
|
-
var
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
return "rounded-none";
|
|
168
|
-
case "end":
|
|
169
|
-
return "rounded-r-md rounded-l-none";
|
|
170
|
-
default:
|
|
171
|
-
return "rounded-md";
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
function Button({
|
|
344
|
+
var buttonBaseClass = `
|
|
345
|
+
inline-flex items-center justify-center gap-2 shrink-0 cursor-pointer
|
|
346
|
+
rounded-full
|
|
347
|
+
font-medium
|
|
348
|
+
leading-tight
|
|
349
|
+
outline-none transition-colors no-underline
|
|
350
|
+
focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2
|
|
351
|
+
disabled:opacity-50 disabled:pointer-events-none
|
|
352
|
+
`;
|
|
353
|
+
function ButtonBase({
|
|
354
|
+
as: Component,
|
|
175
355
|
variant = "primary",
|
|
176
356
|
size = "md",
|
|
177
357
|
isLoading = false,
|
|
@@ -182,38 +362,25 @@ function Button({
|
|
|
182
362
|
children,
|
|
183
363
|
...props
|
|
184
364
|
}) {
|
|
185
|
-
const
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
AriaButton,
|
|
192
|
-
{
|
|
193
|
-
...props,
|
|
194
|
-
isDisabled: isDisabled || isLoading,
|
|
195
|
-
className: twMerge(
|
|
196
|
-
"inline-flex items-center justify-center gap-2 shrink-0 cursor-pointer",
|
|
197
|
-
radiusClass,
|
|
198
|
-
"font-medium",
|
|
199
|
-
"leading-tight",
|
|
200
|
-
"outline-none transition-colors",
|
|
201
|
-
focusRing,
|
|
202
|
-
"disabled:opacity-50 disabled:pointer-events-none",
|
|
203
|
-
isLoading ? "pointer-events-none" : "",
|
|
204
|
-
groupGhost || variantStyles[variant],
|
|
205
|
-
sizeStyles[size],
|
|
206
|
-
marginClass,
|
|
207
|
-
className
|
|
208
|
-
),
|
|
209
|
-
children: [
|
|
210
|
-
isLoading && /* @__PURE__ */ jsx3(Spinner, { size: iconSizeMap[size] }),
|
|
211
|
-
!isLoading && iconLeft && /* @__PURE__ */ jsx3(Icon, { icon: iconLeft, size: iconSizeMap[size] }),
|
|
212
|
-
children,
|
|
213
|
-
!isLoading && iconRight && /* @__PURE__ */ jsx3(Icon, { icon: iconRight, size: iconSizeMap[size] })
|
|
214
|
-
]
|
|
215
|
-
}
|
|
365
|
+
const cx = twMerge3(
|
|
366
|
+
buttonBaseClass,
|
|
367
|
+
isLoading ? "pointer-events-none" : "",
|
|
368
|
+
variantStyles[variant],
|
|
369
|
+
sizeStyles[size],
|
|
370
|
+
className
|
|
216
371
|
);
|
|
372
|
+
return /* @__PURE__ */ jsxs2(Component, { ...props, isDisabled: isDisabled || isLoading, className: cx, children: [
|
|
373
|
+
isLoading && /* @__PURE__ */ jsx3(Spinner, { size }),
|
|
374
|
+
!isLoading && iconLeft && /* @__PURE__ */ jsx3(Icon, { icon: iconLeft, size }),
|
|
375
|
+
children,
|
|
376
|
+
!isLoading && iconRight && /* @__PURE__ */ jsx3(Icon, { icon: iconRight, size })
|
|
377
|
+
] });
|
|
378
|
+
}
|
|
379
|
+
function Button(props) {
|
|
380
|
+
return /* @__PURE__ */ jsx3(ButtonBase, { as: AriaButton, ...props });
|
|
381
|
+
}
|
|
382
|
+
function ButtonLink(props) {
|
|
383
|
+
return /* @__PURE__ */ jsx3(ButtonBase, { as: AriaLink, ...props });
|
|
217
384
|
}
|
|
218
385
|
|
|
219
386
|
// src/components/Tooltip/Tooltip.tsx
|
|
@@ -544,80 +711,63 @@ var TruncatedText = ({ children, ellipsis = "right", copyValue }) => {
|
|
|
544
711
|
|
|
545
712
|
// src/components/IconButton/IconButton.tsx
|
|
546
713
|
import {
|
|
547
|
-
Button as AriaButton2
|
|
714
|
+
Button as AriaButton2,
|
|
715
|
+
Link as AriaLink2,
|
|
716
|
+
ToggleButton as AriaToggleButton
|
|
548
717
|
} from "react-aria-components";
|
|
718
|
+
import { twMerge as twMerge4 } from "tailwind-merge";
|
|
549
719
|
import { jsx as jsx6 } from "react/jsx-runtime";
|
|
550
720
|
var squareSizeStyles = {
|
|
551
721
|
xs: "h-7 w-7",
|
|
722
|
+
// 28px
|
|
552
723
|
sm: "h-8 w-8",
|
|
724
|
+
// 32px
|
|
553
725
|
md: "h-10 w-10",
|
|
726
|
+
// 40px
|
|
554
727
|
lg: "h-12 w-12"
|
|
728
|
+
// 48px
|
|
555
729
|
};
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
sm: "w-8",
|
|
559
|
-
md: "w-10",
|
|
560
|
-
lg: "w-12"
|
|
561
|
-
};
|
|
562
|
-
var iconSizeMap2 = {
|
|
563
|
-
xs: "sm",
|
|
564
|
-
sm: "sm",
|
|
565
|
-
md: "sm",
|
|
566
|
-
lg: "md"
|
|
567
|
-
};
|
|
568
|
-
function groupRadiusClass2(position) {
|
|
569
|
-
switch (position) {
|
|
570
|
-
case "start":
|
|
571
|
-
return "rounded-l-md rounded-r-none";
|
|
572
|
-
case "middle":
|
|
573
|
-
return "rounded-none";
|
|
574
|
-
case "end":
|
|
575
|
-
return "rounded-r-md rounded-l-none";
|
|
576
|
-
default:
|
|
577
|
-
return "rounded-md";
|
|
578
|
-
}
|
|
579
|
-
}
|
|
580
|
-
function IconButton({
|
|
730
|
+
function IconButtonBase({
|
|
731
|
+
as: Component,
|
|
581
732
|
icon,
|
|
582
|
-
|
|
733
|
+
label,
|
|
583
734
|
variant = "ghost",
|
|
584
735
|
size = "md",
|
|
585
|
-
showTooltip = true,
|
|
586
736
|
isLoading = false,
|
|
587
737
|
isDisabled,
|
|
588
738
|
className,
|
|
739
|
+
ref,
|
|
589
740
|
...props
|
|
590
741
|
}) {
|
|
591
|
-
const
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
742
|
+
const cx = twMerge4(
|
|
743
|
+
buttonBaseClass,
|
|
744
|
+
isLoading ? "pointer-events-none" : "",
|
|
745
|
+
variantStyles[variant],
|
|
746
|
+
// No-op unless the wrapper is a ToggleButton (react-aria sets data-selected).
|
|
747
|
+
selectedStyles[variant],
|
|
748
|
+
squareSizeStyles[size],
|
|
749
|
+
className
|
|
750
|
+
);
|
|
751
|
+
return /* @__PURE__ */ jsx6(Tooltip, { content: label, children: /* @__PURE__ */ jsx6(
|
|
752
|
+
Component,
|
|
598
753
|
{
|
|
599
754
|
...props,
|
|
600
|
-
|
|
755
|
+
ref,
|
|
756
|
+
"aria-label": label,
|
|
601
757
|
isDisabled: isDisabled || isLoading,
|
|
602
|
-
className:
|
|
603
|
-
|
|
604
|
-
radiusClass,
|
|
605
|
-
"outline-none transition-colors",
|
|
606
|
-
focusRing,
|
|
607
|
-
"disabled:opacity-50 disabled:pointer-events-none",
|
|
608
|
-
isLoading ? "pointer-events-none" : "",
|
|
609
|
-
groupGhost || variantStyles[variant],
|
|
610
|
-
inGroup ? squareWidthOnly[size] : squareSizeStyles[size],
|
|
611
|
-
marginClass,
|
|
612
|
-
className
|
|
613
|
-
].filter(Boolean).join(" "),
|
|
614
|
-
children: isLoading ? /* @__PURE__ */ jsx6(Spinner, { size: iconSizeMap2[size] }) : /* @__PURE__ */ jsx6(Icon, { icon, size: iconSizeMap2[size] })
|
|
758
|
+
className: cx,
|
|
759
|
+
children: isLoading ? /* @__PURE__ */ jsx6(Spinner, { size }) : /* @__PURE__ */ jsx6(Icon, { icon, size })
|
|
615
760
|
}
|
|
616
|
-
);
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
}
|
|
620
|
-
|
|
761
|
+
) });
|
|
762
|
+
}
|
|
763
|
+
function IconButton(props) {
|
|
764
|
+
return /* @__PURE__ */ jsx6(IconButtonBase, { as: AriaButton2, ...props });
|
|
765
|
+
}
|
|
766
|
+
function IconButtonLink(props) {
|
|
767
|
+
return /* @__PURE__ */ jsx6(IconButtonBase, { as: AriaLink2, ...props });
|
|
768
|
+
}
|
|
769
|
+
function IconButtonToggle(props) {
|
|
770
|
+
return /* @__PURE__ */ jsx6(IconButtonBase, { as: AriaToggleButton, ...props });
|
|
621
771
|
}
|
|
622
772
|
|
|
623
773
|
// src/components/Form/Input/Input.tsx
|
|
@@ -626,7 +776,7 @@ import {
|
|
|
626
776
|
Input as AriaInput,
|
|
627
777
|
Text
|
|
628
778
|
} from "react-aria-components";
|
|
629
|
-
import { twMerge as
|
|
779
|
+
import { twMerge as twMerge5 } from "tailwind-merge";
|
|
630
780
|
|
|
631
781
|
// src/components/Form/Label/Label.tsx
|
|
632
782
|
import {
|
|
@@ -666,18 +816,6 @@ var alignClasses = {
|
|
|
666
816
|
center: "text-center",
|
|
667
817
|
right: "text-right"
|
|
668
818
|
};
|
|
669
|
-
function groupRadiusClasses(position) {
|
|
670
|
-
switch (position) {
|
|
671
|
-
case "start":
|
|
672
|
-
return "rounded-l-(--border-radius-md) rounded-r-none";
|
|
673
|
-
case "middle":
|
|
674
|
-
return "rounded-none";
|
|
675
|
-
case "end":
|
|
676
|
-
return "rounded-r-(--border-radius-md) rounded-l-none";
|
|
677
|
-
default:
|
|
678
|
-
return "rounded-md";
|
|
679
|
-
}
|
|
680
|
-
}
|
|
681
819
|
function Input({
|
|
682
820
|
as: FieldProp = TextField,
|
|
683
821
|
label,
|
|
@@ -695,10 +833,8 @@ function Input({
|
|
|
695
833
|
}) {
|
|
696
834
|
const Field = FieldProp;
|
|
697
835
|
const isInvalid = !!errorMessage;
|
|
698
|
-
const { inGroup, position } = useInputGroup();
|
|
699
836
|
const borderColor = isInvalid ? "border-destructive-border" : "border-border hover:border-border";
|
|
700
|
-
const radiusClass =
|
|
701
|
-
const marginClass = inGroup && position !== "start" && position !== "standalone" ? "-ml-px" : "";
|
|
837
|
+
const radiusClass = "rounded-md";
|
|
702
838
|
return /* @__PURE__ */ jsxs6(
|
|
703
839
|
Field,
|
|
704
840
|
{
|
|
@@ -707,18 +843,13 @@ function Input({
|
|
|
707
843
|
isDisabled,
|
|
708
844
|
isRequired,
|
|
709
845
|
isInvalid,
|
|
710
|
-
className:
|
|
711
|
-
"flex w-full flex-col gap-1",
|
|
712
|
-
inGroup ? "min-w-0 flex-1" : "",
|
|
713
|
-
marginClass,
|
|
714
|
-
className
|
|
715
|
-
),
|
|
846
|
+
className: twMerge5("flex w-full flex-col gap-1", className),
|
|
716
847
|
children: [
|
|
717
848
|
label && /* @__PURE__ */ jsx8(Label, { isRequired, children: label }),
|
|
718
849
|
prefix ? /* @__PURE__ */ jsxs6(
|
|
719
850
|
"div",
|
|
720
851
|
{
|
|
721
|
-
className:
|
|
852
|
+
className: twMerge5(
|
|
722
853
|
"flex items-center overflow-hidden",
|
|
723
854
|
radiusClass,
|
|
724
855
|
"border",
|
|
@@ -726,14 +857,13 @@ function Input({
|
|
|
726
857
|
"outline-none transition-colors",
|
|
727
858
|
borderColor,
|
|
728
859
|
"focus-within:ring-2 focus-within:ring-ring focus-within:border-ring",
|
|
729
|
-
inGroup && "focus-within:z-10",
|
|
730
860
|
isDisabled && "opacity-50 pointer-events-none"
|
|
731
861
|
),
|
|
732
862
|
children: [
|
|
733
863
|
/* @__PURE__ */ jsx8(
|
|
734
864
|
"span",
|
|
735
865
|
{
|
|
736
|
-
className:
|
|
866
|
+
className: twMerge5(
|
|
737
867
|
"self-stretch flex items-center shrink-0 select-none",
|
|
738
868
|
"bg-card",
|
|
739
869
|
"border-r border-r-border",
|
|
@@ -747,7 +877,7 @@ function Input({
|
|
|
747
877
|
AriaInput,
|
|
748
878
|
{
|
|
749
879
|
placeholder,
|
|
750
|
-
className:
|
|
880
|
+
className: twMerge5(
|
|
751
881
|
"w-full bg-transparent",
|
|
752
882
|
sizeStyles[size],
|
|
753
883
|
alignClasses[align],
|
|
@@ -763,7 +893,7 @@ function Input({
|
|
|
763
893
|
AriaInput,
|
|
764
894
|
{
|
|
765
895
|
placeholder,
|
|
766
|
-
className:
|
|
896
|
+
className: twMerge5(
|
|
767
897
|
"w-full",
|
|
768
898
|
sizeStyles[size],
|
|
769
899
|
alignClasses[align],
|
|
@@ -775,19 +905,11 @@ function Input({
|
|
|
775
905
|
"outline-none transition-colors",
|
|
776
906
|
borderColor,
|
|
777
907
|
"focus:ring-2 focus:ring-ring focus:border-ring",
|
|
778
|
-
inGroup && "focus:z-10",
|
|
779
908
|
"disabled:opacity-50 disabled:pointer-events-none"
|
|
780
909
|
)
|
|
781
910
|
}
|
|
782
911
|
),
|
|
783
|
-
description && /* @__PURE__ */ jsx8(
|
|
784
|
-
Text,
|
|
785
|
-
{
|
|
786
|
-
slot: "description",
|
|
787
|
-
className: "text-sm text-muted-foreground",
|
|
788
|
-
children: description
|
|
789
|
-
}
|
|
790
|
-
),
|
|
912
|
+
description && /* @__PURE__ */ jsx8(Text, { slot: "description", className: "text-sm text-muted-foreground", children: description }),
|
|
791
913
|
isInvalid && /* @__PURE__ */ jsx8(
|
|
792
914
|
Text,
|
|
793
915
|
{
|
|
@@ -802,8 +924,106 @@ function Input({
|
|
|
802
924
|
);
|
|
803
925
|
}
|
|
804
926
|
|
|
927
|
+
// src/components/Form/InputPassword/InputPassword.tsx
|
|
928
|
+
import { forwardRef, useId, useState as useState5 } from "react";
|
|
929
|
+
import { Eye as Eye2, EyeOff as EyeOff2 } from "lucide-react";
|
|
930
|
+
import { twMerge as twMerge6 } from "tailwind-merge";
|
|
931
|
+
import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
932
|
+
var InputPassword = forwardRef(
|
|
933
|
+
function InputPassword2({
|
|
934
|
+
label,
|
|
935
|
+
description,
|
|
936
|
+
errorMessage,
|
|
937
|
+
size = "md",
|
|
938
|
+
isRequired,
|
|
939
|
+
isDisabled,
|
|
940
|
+
isToggleDisabled,
|
|
941
|
+
showPasswordLabel = "Show password",
|
|
942
|
+
hidePasswordLabel = "Hide password",
|
|
943
|
+
id,
|
|
944
|
+
className,
|
|
945
|
+
"aria-invalid": ariaInvalidProp,
|
|
946
|
+
"aria-describedby": ariaDescribedByProp,
|
|
947
|
+
...inputProps
|
|
948
|
+
}, ref) {
|
|
949
|
+
const [visible, setVisible] = useState5(false);
|
|
950
|
+
const generatedId = useId();
|
|
951
|
+
const inputId = id ?? generatedId;
|
|
952
|
+
const isInvalid = !!errorMessage;
|
|
953
|
+
const descId = description ? `${inputId}-description` : void 0;
|
|
954
|
+
const errId = isInvalid ? `${inputId}-error` : void 0;
|
|
955
|
+
const describedBy = [descId, errId, ariaDescribedByProp].filter(Boolean).join(" ") || void 0;
|
|
956
|
+
const toggleDisabled = isToggleDisabled ?? isDisabled;
|
|
957
|
+
return /* @__PURE__ */ jsxs7("div", { className: twMerge6("flex w-full flex-col gap-1", className), children: [
|
|
958
|
+
label && /* @__PURE__ */ jsxs7(
|
|
959
|
+
"label",
|
|
960
|
+
{
|
|
961
|
+
htmlFor: inputId,
|
|
962
|
+
className: "text-sm font-medium text-foreground",
|
|
963
|
+
children: [
|
|
964
|
+
label,
|
|
965
|
+
isRequired && /* @__PURE__ */ jsx9("span", { "aria-hidden": "true", className: "ml-0.5 text-destructive", children: "*" })
|
|
966
|
+
]
|
|
967
|
+
}
|
|
968
|
+
),
|
|
969
|
+
/* @__PURE__ */ jsxs7(
|
|
970
|
+
"div",
|
|
971
|
+
{
|
|
972
|
+
className: twMerge6(
|
|
973
|
+
"flex items-center overflow-hidden rounded-md border bg-background",
|
|
974
|
+
"outline-none transition-colors",
|
|
975
|
+
isInvalid ? "border-destructive-border" : "border-border",
|
|
976
|
+
"focus-within:ring-2 focus-within:ring-ring focus-within:border-ring",
|
|
977
|
+
isDisabled && "opacity-50 pointer-events-none"
|
|
978
|
+
),
|
|
979
|
+
children: [
|
|
980
|
+
/* @__PURE__ */ jsx9(
|
|
981
|
+
"input",
|
|
982
|
+
{
|
|
983
|
+
...inputProps,
|
|
984
|
+
ref,
|
|
985
|
+
id: inputId,
|
|
986
|
+
type: visible ? "text" : "password",
|
|
987
|
+
required: isRequired,
|
|
988
|
+
disabled: isDisabled,
|
|
989
|
+
"aria-invalid": isInvalid || ariaInvalidProp,
|
|
990
|
+
"aria-describedby": describedBy,
|
|
991
|
+
className: twMerge6(
|
|
992
|
+
"w-full bg-transparent text-foreground",
|
|
993
|
+
"placeholder:text-muted-foreground",
|
|
994
|
+
"outline-none border-none",
|
|
995
|
+
sizeStyles[size]
|
|
996
|
+
)
|
|
997
|
+
}
|
|
998
|
+
),
|
|
999
|
+
/* @__PURE__ */ jsx9(
|
|
1000
|
+
"button",
|
|
1001
|
+
{
|
|
1002
|
+
type: "button",
|
|
1003
|
+
"aria-label": visible ? hidePasswordLabel : showPasswordLabel,
|
|
1004
|
+
disabled: toggleDisabled,
|
|
1005
|
+
tabIndex: toggleDisabled ? -1 : void 0,
|
|
1006
|
+
onClick: () => setVisible((v) => !v),
|
|
1007
|
+
className: twMerge6(
|
|
1008
|
+
"flex items-center justify-center shrink-0 self-stretch px-3 cursor-pointer",
|
|
1009
|
+
"text-muted-foreground hover:text-foreground transition-colors",
|
|
1010
|
+
"outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-inset",
|
|
1011
|
+
"disabled:cursor-not-allowed disabled:opacity-50"
|
|
1012
|
+
),
|
|
1013
|
+
children: /* @__PURE__ */ jsx9(Icon, { icon: visible ? EyeOff2 : Eye2, size: "sm" })
|
|
1014
|
+
}
|
|
1015
|
+
)
|
|
1016
|
+
]
|
|
1017
|
+
}
|
|
1018
|
+
),
|
|
1019
|
+
description && /* @__PURE__ */ jsx9("p", { id: descId, className: "text-sm text-muted-foreground", children: description }),
|
|
1020
|
+
isInvalid && /* @__PURE__ */ jsx9("p", { id: errId, role: "alert", className: "text-sm text-destructive", children: errorMessage })
|
|
1021
|
+
] });
|
|
1022
|
+
}
|
|
1023
|
+
);
|
|
1024
|
+
|
|
805
1025
|
// src/components/Form/Select/Select.tsx
|
|
806
|
-
import { Check, ChevronDown } from "lucide-react";
|
|
1026
|
+
import { Check as Check2, ChevronDown as ChevronDown2 } from "lucide-react";
|
|
807
1027
|
import {
|
|
808
1028
|
Button as Button2,
|
|
809
1029
|
ListBox,
|
|
@@ -813,8 +1033,8 @@ import {
|
|
|
813
1033
|
SelectValue,
|
|
814
1034
|
Text as Text2
|
|
815
1035
|
} from "react-aria-components";
|
|
816
|
-
import { twMerge as
|
|
817
|
-
import { Fragment, jsx as
|
|
1036
|
+
import { twMerge as twMerge7 } from "tailwind-merge";
|
|
1037
|
+
import { Fragment, jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
818
1038
|
function Select({
|
|
819
1039
|
label,
|
|
820
1040
|
items,
|
|
@@ -829,21 +1049,21 @@ function Select({
|
|
|
829
1049
|
...props
|
|
830
1050
|
}) {
|
|
831
1051
|
const hasError = Boolean(errorMessage);
|
|
832
|
-
return /* @__PURE__ */
|
|
1052
|
+
return /* @__PURE__ */ jsxs8(
|
|
833
1053
|
AriaSelect,
|
|
834
1054
|
{
|
|
835
1055
|
...props,
|
|
836
1056
|
isDisabled,
|
|
837
1057
|
isRequired,
|
|
838
1058
|
isInvalid: hasError,
|
|
839
|
-
className:
|
|
1059
|
+
className: twMerge7("flex flex-col gap-1", className),
|
|
840
1060
|
children: [
|
|
841
|
-
label && /* @__PURE__ */
|
|
842
|
-
/* @__PURE__ */
|
|
1061
|
+
label && /* @__PURE__ */ jsx10(Label, { isRequired, children: label }),
|
|
1062
|
+
/* @__PURE__ */ jsxs8(
|
|
843
1063
|
Button2,
|
|
844
1064
|
{
|
|
845
1065
|
"aria-required": isRequired || void 0,
|
|
846
|
-
className:
|
|
1066
|
+
className: twMerge7(
|
|
847
1067
|
`
|
|
848
1068
|
inline-flex items-center justify-between
|
|
849
1069
|
w-full rounded-md
|
|
@@ -857,10 +1077,10 @@ function Select({
|
|
|
857
1077
|
hasError ? "border-destructive-border" : "border-border"
|
|
858
1078
|
),
|
|
859
1079
|
children: [
|
|
860
|
-
/* @__PURE__ */
|
|
1080
|
+
/* @__PURE__ */ jsx10(
|
|
861
1081
|
SelectValue,
|
|
862
1082
|
{
|
|
863
|
-
className:
|
|
1083
|
+
className: twMerge7(
|
|
864
1084
|
renderItem ? "min-w-0" : "truncate",
|
|
865
1085
|
"data-placeholder:text-muted-foreground"
|
|
866
1086
|
),
|
|
@@ -871,11 +1091,11 @@ function Select({
|
|
|
871
1091
|
}
|
|
872
1092
|
}
|
|
873
1093
|
),
|
|
874
|
-
/* @__PURE__ */
|
|
875
|
-
|
|
1094
|
+
/* @__PURE__ */ jsx10(
|
|
1095
|
+
ChevronDown2,
|
|
876
1096
|
{
|
|
877
1097
|
"aria-hidden": true,
|
|
878
|
-
className:
|
|
1098
|
+
className: twMerge7(
|
|
879
1099
|
"shrink-0 text-muted-foreground",
|
|
880
1100
|
size === "sm" ? "h-3.5 w-3.5" : "h-4 w-4"
|
|
881
1101
|
)
|
|
@@ -884,8 +1104,8 @@ function Select({
|
|
|
884
1104
|
]
|
|
885
1105
|
}
|
|
886
1106
|
),
|
|
887
|
-
description && /* @__PURE__ */
|
|
888
|
-
hasError && /* @__PURE__ */
|
|
1107
|
+
description && /* @__PURE__ */ jsx10(Text2, { slot: "description", className: "text-sm text-muted-foreground", children: description }),
|
|
1108
|
+
hasError && /* @__PURE__ */ jsx10(
|
|
889
1109
|
Text2,
|
|
890
1110
|
{
|
|
891
1111
|
slot: "errorMessage",
|
|
@@ -894,10 +1114,10 @@ function Select({
|
|
|
894
1114
|
children: errorMessage
|
|
895
1115
|
}
|
|
896
1116
|
),
|
|
897
|
-
/* @__PURE__ */
|
|
1117
|
+
/* @__PURE__ */ jsx10(
|
|
898
1118
|
Popover,
|
|
899
1119
|
{
|
|
900
|
-
className:
|
|
1120
|
+
className: twMerge7(
|
|
901
1121
|
"w-(--trigger-width)",
|
|
902
1122
|
"rounded-md",
|
|
903
1123
|
"border border-border",
|
|
@@ -907,12 +1127,12 @@ function Select({
|
|
|
907
1127
|
"entering:animate-in entering:fade-in",
|
|
908
1128
|
"exiting:animate-out exiting:fade-out"
|
|
909
1129
|
),
|
|
910
|
-
children: /* @__PURE__ */
|
|
1130
|
+
children: /* @__PURE__ */ jsx10(ListBox, { className: "p-1 outline-none", items, children: (item) => /* @__PURE__ */ jsx10(
|
|
911
1131
|
ListBoxItem,
|
|
912
1132
|
{
|
|
913
1133
|
id: item.id,
|
|
914
1134
|
textValue: item.name,
|
|
915
|
-
className:
|
|
1135
|
+
className: twMerge7(
|
|
916
1136
|
`
|
|
917
1137
|
flex items-center justify-between gap-2
|
|
918
1138
|
rounded-sm
|
|
@@ -924,9 +1144,9 @@ function Select({
|
|
|
924
1144
|
`,
|
|
925
1145
|
sizeStyles[size]
|
|
926
1146
|
),
|
|
927
|
-
children: ({ isSelected }) => /* @__PURE__ */
|
|
928
|
-
/* @__PURE__ */
|
|
929
|
-
isSelected && /* @__PURE__ */
|
|
1147
|
+
children: ({ isSelected }) => /* @__PURE__ */ jsxs8(Fragment, { children: [
|
|
1148
|
+
/* @__PURE__ */ jsx10("span", { className: renderItem ? "min-w-0 flex-1" : "truncate", children: renderItem ? renderItem(item) : item.name }),
|
|
1149
|
+
isSelected && /* @__PURE__ */ jsx10(Check2, { className: "h-4 w-4 shrink-0 text-primary" })
|
|
930
1150
|
] })
|
|
931
1151
|
}
|
|
932
1152
|
) })
|
|
@@ -946,13 +1166,13 @@ import {
|
|
|
946
1166
|
TableBody as AriaTableBody,
|
|
947
1167
|
TableHeader as AriaTableHeader
|
|
948
1168
|
} from "react-aria-components";
|
|
949
|
-
import { jsx as
|
|
1169
|
+
import { jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
950
1170
|
var tableSizeClass = {
|
|
951
1171
|
compact: "[--table-row-py:theme(spacing.1)]",
|
|
952
1172
|
comfortable: "[--table-row-py:theme(spacing.3)]"
|
|
953
1173
|
};
|
|
954
|
-
function
|
|
955
|
-
return /* @__PURE__ */
|
|
1174
|
+
function Table2({ size = "comfortable", className, ...props }) {
|
|
1175
|
+
return /* @__PURE__ */ jsx11(
|
|
956
1176
|
AriaTable,
|
|
957
1177
|
{
|
|
958
1178
|
...props,
|
|
@@ -965,10 +1185,10 @@ function Table({ size = "comfortable", className, ...props }) {
|
|
|
965
1185
|
);
|
|
966
1186
|
}
|
|
967
1187
|
function TableHeader(props) {
|
|
968
|
-
return /* @__PURE__ */
|
|
1188
|
+
return /* @__PURE__ */ jsx11(AriaTableHeader, { ...props });
|
|
969
1189
|
}
|
|
970
1190
|
function Column(props) {
|
|
971
|
-
return /* @__PURE__ */
|
|
1191
|
+
return /* @__PURE__ */ jsx11(
|
|
972
1192
|
AriaColumn,
|
|
973
1193
|
{
|
|
974
1194
|
...props,
|
|
@@ -978,18 +1198,18 @@ function Column(props) {
|
|
|
978
1198
|
"cursor-default select-none outline-none",
|
|
979
1199
|
"focus-visible:outline-2 focus-visible:outline-ring focus-visible:outline-offset-[-2px]"
|
|
980
1200
|
].join(" "),
|
|
981
|
-
children: ({ allowsSorting, sortDirection }) => /* @__PURE__ */
|
|
1201
|
+
children: ({ allowsSorting, sortDirection }) => /* @__PURE__ */ jsxs9("span", { className: "inline-flex items-center gap-1", children: [
|
|
982
1202
|
props.children,
|
|
983
|
-
allowsSorting && /* @__PURE__ */
|
|
1203
|
+
allowsSorting && /* @__PURE__ */ jsx11("span", { "aria-hidden": "true", className: "text-muted-foreground", children: sortDirection === "ascending" ? "\u25B2" : sortDirection === "descending" ? "\u25BC" : "\u25B4" })
|
|
984
1204
|
] })
|
|
985
1205
|
}
|
|
986
1206
|
);
|
|
987
1207
|
}
|
|
988
1208
|
function TableBody(props) {
|
|
989
|
-
return /* @__PURE__ */
|
|
1209
|
+
return /* @__PURE__ */ jsx11(AriaTableBody, { ...props });
|
|
990
1210
|
}
|
|
991
1211
|
function Row(props) {
|
|
992
|
-
return /* @__PURE__ */
|
|
1212
|
+
return /* @__PURE__ */ jsx11(
|
|
993
1213
|
AriaRow,
|
|
994
1214
|
{
|
|
995
1215
|
...props,
|
|
@@ -1005,7 +1225,7 @@ function Row(props) {
|
|
|
1005
1225
|
);
|
|
1006
1226
|
}
|
|
1007
1227
|
function Cell(props) {
|
|
1008
|
-
return /* @__PURE__ */
|
|
1228
|
+
return /* @__PURE__ */ jsx11(
|
|
1009
1229
|
AriaCell,
|
|
1010
1230
|
{
|
|
1011
1231
|
...props,
|
|
@@ -1026,8 +1246,8 @@ import {
|
|
|
1026
1246
|
Dialog as AriaDialog,
|
|
1027
1247
|
Heading
|
|
1028
1248
|
} from "react-aria-components";
|
|
1029
|
-
import { X } from "lucide-react";
|
|
1030
|
-
import { Fragment as Fragment2, jsx as
|
|
1249
|
+
import { X as X2 } from "lucide-react";
|
|
1250
|
+
import { Fragment as Fragment2, jsx as jsx12, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
1031
1251
|
var sizeStyles2 = {
|
|
1032
1252
|
sm: "max-w-md",
|
|
1033
1253
|
md: "max-w-lg",
|
|
@@ -1043,7 +1263,7 @@ function Dialog({
|
|
|
1043
1263
|
children,
|
|
1044
1264
|
className
|
|
1045
1265
|
}) {
|
|
1046
|
-
return /* @__PURE__ */
|
|
1266
|
+
return /* @__PURE__ */ jsx12(
|
|
1047
1267
|
ModalOverlay,
|
|
1048
1268
|
{
|
|
1049
1269
|
isOpen,
|
|
@@ -1055,7 +1275,7 @@ function Dialog({
|
|
|
1055
1275
|
"entering:animate-in entering:fade-in",
|
|
1056
1276
|
"exiting:animate-out exiting:fade-out"
|
|
1057
1277
|
].join(" "),
|
|
1058
|
-
children: /* @__PURE__ */
|
|
1278
|
+
children: /* @__PURE__ */ jsx12(
|
|
1059
1279
|
Modal,
|
|
1060
1280
|
{
|
|
1061
1281
|
className: [
|
|
@@ -1066,9 +1286,9 @@ function Dialog({
|
|
|
1066
1286
|
"exiting:animate-out exiting:zoom-out-95 exiting:fade-out",
|
|
1067
1287
|
className
|
|
1068
1288
|
].filter(Boolean).join(" "),
|
|
1069
|
-
children: /* @__PURE__ */
|
|
1070
|
-
/* @__PURE__ */
|
|
1071
|
-
/* @__PURE__ */
|
|
1289
|
+
children: /* @__PURE__ */ jsx12(AriaDialog, { className: "outline-none flex flex-col max-h-[85vh]", children: ({ close }) => /* @__PURE__ */ jsxs10(Fragment2, { children: [
|
|
1290
|
+
/* @__PURE__ */ jsxs10("div", { className: "flex items-center justify-between px-6 py-4 border-b border-border", children: [
|
|
1291
|
+
/* @__PURE__ */ jsx12(
|
|
1072
1292
|
Heading,
|
|
1073
1293
|
{
|
|
1074
1294
|
slot: "title",
|
|
@@ -1076,7 +1296,7 @@ function Dialog({
|
|
|
1076
1296
|
children: title
|
|
1077
1297
|
}
|
|
1078
1298
|
),
|
|
1079
|
-
/* @__PURE__ */
|
|
1299
|
+
/* @__PURE__ */ jsx12(
|
|
1080
1300
|
"button",
|
|
1081
1301
|
{
|
|
1082
1302
|
type: "button",
|
|
@@ -1088,11 +1308,11 @@ function Dialog({
|
|
|
1088
1308
|
"transition-colors"
|
|
1089
1309
|
].join(" "),
|
|
1090
1310
|
"aria-label": "Close",
|
|
1091
|
-
children: /* @__PURE__ */
|
|
1311
|
+
children: /* @__PURE__ */ jsx12(X2, { size: 20, "aria-hidden": "true" })
|
|
1092
1312
|
}
|
|
1093
1313
|
)
|
|
1094
1314
|
] }),
|
|
1095
|
-
/* @__PURE__ */
|
|
1315
|
+
/* @__PURE__ */ jsx12("div", { className: "px-6 py-4 overflow-y-auto", children })
|
|
1096
1316
|
] }) })
|
|
1097
1317
|
}
|
|
1098
1318
|
)
|
|
@@ -1101,21 +1321,21 @@ function Dialog({
|
|
|
1101
1321
|
}
|
|
1102
1322
|
|
|
1103
1323
|
// src/components/Dialog/DialogFooter.tsx
|
|
1104
|
-
import { jsx as
|
|
1324
|
+
import { jsx as jsx13 } from "react/jsx-runtime";
|
|
1105
1325
|
|
|
1106
1326
|
// src/components/Toast/Toast.tsx
|
|
1107
1327
|
import {
|
|
1108
|
-
createContext
|
|
1328
|
+
createContext,
|
|
1109
1329
|
useCallback as useCallback2,
|
|
1110
|
-
useContext
|
|
1330
|
+
useContext,
|
|
1111
1331
|
useEffect as useEffect2,
|
|
1112
1332
|
useRef as useRef4,
|
|
1113
|
-
useState as
|
|
1333
|
+
useState as useState6
|
|
1114
1334
|
} from "react";
|
|
1115
1335
|
import { createPortal as createPortal2 } from "react-dom";
|
|
1116
|
-
import { CheckCircle, XCircle, Info, X as
|
|
1117
|
-
import { jsx as
|
|
1118
|
-
var ToastContext =
|
|
1336
|
+
import { CheckCircle as CheckCircle3, XCircle as XCircle2, Info as Info2, X as X3 } from "lucide-react";
|
|
1337
|
+
import { jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
1338
|
+
var ToastContext = createContext(null);
|
|
1119
1339
|
var toastCounter = 0;
|
|
1120
1340
|
var defaultDuration = {
|
|
1121
1341
|
success: 5e3,
|
|
@@ -1124,22 +1344,22 @@ var defaultDuration = {
|
|
|
1124
1344
|
};
|
|
1125
1345
|
var variantConfig = {
|
|
1126
1346
|
success: {
|
|
1127
|
-
icon:
|
|
1347
|
+
icon: CheckCircle3,
|
|
1128
1348
|
containerClass: "bg-success-surface border-success-border text-success",
|
|
1129
1349
|
iconClass: "text-success"
|
|
1130
1350
|
},
|
|
1131
1351
|
error: {
|
|
1132
|
-
icon:
|
|
1352
|
+
icon: XCircle2,
|
|
1133
1353
|
containerClass: "bg-destructive-surface border-destructive-border text-destructive",
|
|
1134
1354
|
iconClass: "text-destructive"
|
|
1135
1355
|
},
|
|
1136
1356
|
info: {
|
|
1137
|
-
icon:
|
|
1357
|
+
icon: Info2,
|
|
1138
1358
|
containerClass: "bg-info-surface border-info-border text-info",
|
|
1139
1359
|
iconClass: "text-info"
|
|
1140
1360
|
}
|
|
1141
1361
|
};
|
|
1142
|
-
var PlacementContext =
|
|
1362
|
+
var PlacementContext = createContext("bottom-right");
|
|
1143
1363
|
var exitAnimationByPlacement = {
|
|
1144
1364
|
"top-center": "-translate-y-full opacity-0",
|
|
1145
1365
|
"top-right": "translate-x-full opacity-0",
|
|
@@ -1156,9 +1376,9 @@ function ToastItem({
|
|
|
1156
1376
|
toast,
|
|
1157
1377
|
onRemove
|
|
1158
1378
|
}) {
|
|
1159
|
-
const [isExiting, setIsExiting] =
|
|
1379
|
+
const [isExiting, setIsExiting] = useState6(false);
|
|
1160
1380
|
const timerRef = useRef4(null);
|
|
1161
|
-
const placement =
|
|
1381
|
+
const placement = useContext(PlacementContext);
|
|
1162
1382
|
const config = variantConfig[toast.variant];
|
|
1163
1383
|
const IconComponent = config.icon;
|
|
1164
1384
|
const dismiss = useCallback2(() => {
|
|
@@ -1172,7 +1392,7 @@ function ToastItem({
|
|
|
1172
1392
|
if (timerRef.current) clearTimeout(timerRef.current);
|
|
1173
1393
|
};
|
|
1174
1394
|
}, [toast.duration, toast.variant, dismiss]);
|
|
1175
|
-
return /* @__PURE__ */
|
|
1395
|
+
return /* @__PURE__ */ jsxs11(
|
|
1176
1396
|
"div",
|
|
1177
1397
|
{
|
|
1178
1398
|
role: "status",
|
|
@@ -1185,16 +1405,16 @@ function ToastItem({
|
|
|
1185
1405
|
config.containerClass
|
|
1186
1406
|
].join(" "),
|
|
1187
1407
|
children: [
|
|
1188
|
-
/* @__PURE__ */
|
|
1189
|
-
/* @__PURE__ */
|
|
1190
|
-
/* @__PURE__ */
|
|
1408
|
+
/* @__PURE__ */ jsx14(IconComponent, { size: 20, className: ["shrink-0 mt-0.5", config.iconClass].join(" "), "aria-hidden": "true" }),
|
|
1409
|
+
/* @__PURE__ */ jsx14("p", { className: "flex-1 text-sm font-medium", children: toast.message }),
|
|
1410
|
+
/* @__PURE__ */ jsx14(
|
|
1191
1411
|
"button",
|
|
1192
1412
|
{
|
|
1193
1413
|
type: "button",
|
|
1194
1414
|
onClick: dismiss,
|
|
1195
1415
|
className: "shrink-0 rounded-sm p-0.5 opacity-70 hover:opacity-100 transition-opacity outline-none focus-visible:ring-2 focus-visible:ring-current",
|
|
1196
1416
|
"aria-label": "Dismiss",
|
|
1197
|
-
children: /* @__PURE__ */
|
|
1417
|
+
children: /* @__PURE__ */ jsx14(X3, { size: 16, "aria-hidden": "true" })
|
|
1198
1418
|
}
|
|
1199
1419
|
)
|
|
1200
1420
|
]
|
|
@@ -1214,7 +1434,7 @@ function ToastContainer({
|
|
|
1214
1434
|
}) {
|
|
1215
1435
|
if (toasts.length === 0) return null;
|
|
1216
1436
|
return createPortal2(
|
|
1217
|
-
/* @__PURE__ */
|
|
1437
|
+
/* @__PURE__ */ jsx14(PlacementContext.Provider, { value: placement, children: /* @__PURE__ */ jsx14("div", { className: containerPositionStyles[placement], children: toasts.map((toast) => /* @__PURE__ */ jsx14(ToastItem, { toast, onRemove: removeToast }, toast.id)) }) }),
|
|
1218
1438
|
document.body
|
|
1219
1439
|
);
|
|
1220
1440
|
}
|
|
@@ -1233,7 +1453,7 @@ function createToastBridge() {
|
|
|
1233
1453
|
};
|
|
1234
1454
|
}
|
|
1235
1455
|
function ToastProvider({ children, bridge, placement = "bottom-right" }) {
|
|
1236
|
-
const [toasts, setToasts] =
|
|
1456
|
+
const [toasts, setToasts] = useState6([]);
|
|
1237
1457
|
const addToast = useCallback2((toast) => {
|
|
1238
1458
|
const id = `toast-${++toastCounter}`;
|
|
1239
1459
|
setToasts((prev) => [...prev, { ...toast, id }]);
|
|
@@ -1245,13 +1465,13 @@ function ToastProvider({ children, bridge, placement = "bottom-right" }) {
|
|
|
1245
1465
|
if (!bridge) return;
|
|
1246
1466
|
return bridge.subscribe(addToast);
|
|
1247
1467
|
}, [bridge, addToast]);
|
|
1248
|
-
return /* @__PURE__ */
|
|
1468
|
+
return /* @__PURE__ */ jsxs11(ToastContext.Provider, { value: { toasts, addToast, removeToast }, children: [
|
|
1249
1469
|
children,
|
|
1250
|
-
/* @__PURE__ */
|
|
1470
|
+
/* @__PURE__ */ jsx14(ToastContainer, { toasts, removeToast, placement })
|
|
1251
1471
|
] });
|
|
1252
1472
|
}
|
|
1253
1473
|
function useToast() {
|
|
1254
|
-
const context =
|
|
1474
|
+
const context = useContext(ToastContext);
|
|
1255
1475
|
if (!context) {
|
|
1256
1476
|
throw new Error("useToast must be used within a ToastProvider");
|
|
1257
1477
|
}
|
|
@@ -1263,7 +1483,7 @@ function useToast() {
|
|
|
1263
1483
|
}
|
|
1264
1484
|
|
|
1265
1485
|
// src/components/EmptyState/EmptyState.tsx
|
|
1266
|
-
import { jsx as
|
|
1486
|
+
import { jsx as jsx15, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
1267
1487
|
function EmptyState({
|
|
1268
1488
|
icon,
|
|
1269
1489
|
title,
|
|
@@ -1271,7 +1491,7 @@ function EmptyState({
|
|
|
1271
1491
|
action,
|
|
1272
1492
|
className
|
|
1273
1493
|
}) {
|
|
1274
|
-
return /* @__PURE__ */
|
|
1494
|
+
return /* @__PURE__ */ jsxs12(
|
|
1275
1495
|
"div",
|
|
1276
1496
|
{
|
|
1277
1497
|
className: [
|
|
@@ -1279,10 +1499,10 @@ function EmptyState({
|
|
|
1279
1499
|
className
|
|
1280
1500
|
].filter(Boolean).join(" "),
|
|
1281
1501
|
children: [
|
|
1282
|
-
icon && /* @__PURE__ */
|
|
1283
|
-
/* @__PURE__ */
|
|
1284
|
-
description && /* @__PURE__ */
|
|
1285
|
-
action && /* @__PURE__ */
|
|
1502
|
+
icon && /* @__PURE__ */ jsx15(Icon, { icon, size: "xl", className: "text-muted-foreground" }),
|
|
1503
|
+
/* @__PURE__ */ jsx15("h3", { className: "text-lg font-semibold text-foreground mt-4", children: title }),
|
|
1504
|
+
description && /* @__PURE__ */ jsx15("p", { className: "text-sm text-muted-foreground mt-2 max-w-sm", children: description }),
|
|
1505
|
+
action && /* @__PURE__ */ jsx15("div", { className: "mt-6", children: action })
|
|
1286
1506
|
]
|
|
1287
1507
|
}
|
|
1288
1508
|
);
|
|
@@ -1292,10 +1512,10 @@ function EmptyState({
|
|
|
1292
1512
|
import {
|
|
1293
1513
|
Checkbox as AriaCheckbox
|
|
1294
1514
|
} from "react-aria-components";
|
|
1295
|
-
import { Check as
|
|
1296
|
-
import { Fragment as Fragment3, jsx as
|
|
1515
|
+
import { Check as Check3 } from "lucide-react";
|
|
1516
|
+
import { Fragment as Fragment3, jsx as jsx16, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
1297
1517
|
function Checkbox({ children, className, ...props }) {
|
|
1298
|
-
return /* @__PURE__ */
|
|
1518
|
+
return /* @__PURE__ */ jsx16(
|
|
1299
1519
|
AriaCheckbox,
|
|
1300
1520
|
{
|
|
1301
1521
|
...props,
|
|
@@ -1304,8 +1524,8 @@ function Checkbox({ children, className, ...props }) {
|
|
|
1304
1524
|
"disabled:opacity-50 disabled:cursor-default",
|
|
1305
1525
|
className
|
|
1306
1526
|
].filter(Boolean).join(" "),
|
|
1307
|
-
children: ({ isSelected, isIndeterminate }) => /* @__PURE__ */
|
|
1308
|
-
/* @__PURE__ */
|
|
1527
|
+
children: ({ isSelected, isIndeterminate }) => /* @__PURE__ */ jsxs13(Fragment3, { children: [
|
|
1528
|
+
/* @__PURE__ */ jsxs13(
|
|
1309
1529
|
"div",
|
|
1310
1530
|
{
|
|
1311
1531
|
className: [
|
|
@@ -1315,12 +1535,12 @@ function Checkbox({ children, className, ...props }) {
|
|
|
1315
1535
|
isSelected || isIndeterminate ? "bg-primary border-primary" : "bg-background border-border group-hover:border-border"
|
|
1316
1536
|
].join(" "),
|
|
1317
1537
|
children: [
|
|
1318
|
-
isSelected && /* @__PURE__ */
|
|
1319
|
-
isIndeterminate && /* @__PURE__ */
|
|
1538
|
+
isSelected && /* @__PURE__ */ jsx16(Check3, { className: "w-4 h-4 text-primary-foreground", strokeWidth: 3 }),
|
|
1539
|
+
isIndeterminate && /* @__PURE__ */ jsx16("div", { className: "w-3 h-0.5 bg-primary-foreground rounded-full" })
|
|
1320
1540
|
]
|
|
1321
1541
|
}
|
|
1322
1542
|
),
|
|
1323
|
-
children && /* @__PURE__ */
|
|
1543
|
+
children && /* @__PURE__ */ jsx16("span", { children })
|
|
1324
1544
|
] })
|
|
1325
1545
|
}
|
|
1326
1546
|
);
|
|
@@ -1330,7 +1550,7 @@ function Checkbox({ children, className, ...props }) {
|
|
|
1330
1550
|
import {
|
|
1331
1551
|
Switch as AriaSwitch
|
|
1332
1552
|
} from "react-aria-components";
|
|
1333
|
-
import { Fragment as Fragment4, jsx as
|
|
1553
|
+
import { Fragment as Fragment4, jsx as jsx17, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
1334
1554
|
var trackColorMap = {
|
|
1335
1555
|
primary: "bg-primary",
|
|
1336
1556
|
success: "bg-success",
|
|
@@ -1347,7 +1567,7 @@ function Switch({
|
|
|
1347
1567
|
...props
|
|
1348
1568
|
}) {
|
|
1349
1569
|
const isPreset = isPresetColor(color);
|
|
1350
|
-
return /* @__PURE__ */
|
|
1570
|
+
return /* @__PURE__ */ jsx17(
|
|
1351
1571
|
AriaSwitch,
|
|
1352
1572
|
{
|
|
1353
1573
|
...props,
|
|
@@ -1356,8 +1576,8 @@ function Switch({
|
|
|
1356
1576
|
"disabled:opacity-50 disabled:cursor-default",
|
|
1357
1577
|
className
|
|
1358
1578
|
].filter(Boolean).join(" "),
|
|
1359
|
-
children: ({ isSelected }) => /* @__PURE__ */
|
|
1360
|
-
/* @__PURE__ */
|
|
1579
|
+
children: ({ isSelected }) => /* @__PURE__ */ jsxs14(Fragment4, { children: [
|
|
1580
|
+
/* @__PURE__ */ jsx17(
|
|
1361
1581
|
"div",
|
|
1362
1582
|
{
|
|
1363
1583
|
className: [
|
|
@@ -1366,7 +1586,7 @@ function Switch({
|
|
|
1366
1586
|
isSelected && isPreset ? trackColorMap[color] : !isSelected ? "bg-border" : ""
|
|
1367
1587
|
].join(" "),
|
|
1368
1588
|
style: isSelected && !isPreset ? { backgroundColor: color } : void 0,
|
|
1369
|
-
children: /* @__PURE__ */
|
|
1589
|
+
children: /* @__PURE__ */ jsx17(
|
|
1370
1590
|
"div",
|
|
1371
1591
|
{
|
|
1372
1592
|
className: [
|
|
@@ -1377,7 +1597,7 @@ function Switch({
|
|
|
1377
1597
|
)
|
|
1378
1598
|
}
|
|
1379
1599
|
),
|
|
1380
|
-
children && /* @__PURE__ */
|
|
1600
|
+
children && /* @__PURE__ */ jsx17("span", { children })
|
|
1381
1601
|
] })
|
|
1382
1602
|
}
|
|
1383
1603
|
);
|
|
@@ -1388,9 +1608,9 @@ import {
|
|
|
1388
1608
|
RadioGroup as AriaRadioGroup,
|
|
1389
1609
|
Radio as AriaRadio
|
|
1390
1610
|
} from "react-aria-components";
|
|
1391
|
-
import { Fragment as Fragment5, jsx as
|
|
1611
|
+
import { Fragment as Fragment5, jsx as jsx18, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
1392
1612
|
function RadioGroup({ children, className, ...props }) {
|
|
1393
|
-
return /* @__PURE__ */
|
|
1613
|
+
return /* @__PURE__ */ jsx18(
|
|
1394
1614
|
AriaRadioGroup,
|
|
1395
1615
|
{
|
|
1396
1616
|
...props,
|
|
@@ -1404,7 +1624,7 @@ function RadioGroup({ children, className, ...props }) {
|
|
|
1404
1624
|
);
|
|
1405
1625
|
}
|
|
1406
1626
|
function Radio({ children, className, ...props }) {
|
|
1407
|
-
return /* @__PURE__ */
|
|
1627
|
+
return /* @__PURE__ */ jsx18(
|
|
1408
1628
|
AriaRadio,
|
|
1409
1629
|
{
|
|
1410
1630
|
...props,
|
|
@@ -1413,8 +1633,8 @@ function Radio({ children, className, ...props }) {
|
|
|
1413
1633
|
"disabled:opacity-50 disabled:cursor-default",
|
|
1414
1634
|
className
|
|
1415
1635
|
].filter(Boolean).join(" "),
|
|
1416
|
-
children: ({ isSelected }) => /* @__PURE__ */
|
|
1417
|
-
/* @__PURE__ */
|
|
1636
|
+
children: ({ isSelected }) => /* @__PURE__ */ jsxs15(Fragment5, { children: [
|
|
1637
|
+
/* @__PURE__ */ jsx18(
|
|
1418
1638
|
"div",
|
|
1419
1639
|
{
|
|
1420
1640
|
className: [
|
|
@@ -1423,16 +1643,16 @@ function Radio({ children, className, ...props }) {
|
|
|
1423
1643
|
"group-focus-visible:ring-2 group-focus-visible:ring-ring group-focus-visible:ring-offset-2",
|
|
1424
1644
|
isSelected ? "border-primary" : "border-border group-hover:border-border"
|
|
1425
1645
|
].join(" "),
|
|
1426
|
-
children: isSelected && /* @__PURE__ */
|
|
1646
|
+
children: isSelected && /* @__PURE__ */ jsx18("div", { className: "w-2.5 h-2.5 rounded-full bg-primary" })
|
|
1427
1647
|
}
|
|
1428
1648
|
),
|
|
1429
|
-
children && /* @__PURE__ */
|
|
1649
|
+
children && /* @__PURE__ */ jsx18("span", { children })
|
|
1430
1650
|
] })
|
|
1431
1651
|
}
|
|
1432
1652
|
);
|
|
1433
1653
|
}
|
|
1434
1654
|
function RadioButton({ children, className, ...props }) {
|
|
1435
|
-
return /* @__PURE__ */
|
|
1655
|
+
return /* @__PURE__ */ jsx18(
|
|
1436
1656
|
AriaRadio,
|
|
1437
1657
|
{
|
|
1438
1658
|
...props,
|
|
@@ -1441,7 +1661,7 @@ function RadioButton({ children, className, ...props }) {
|
|
|
1441
1661
|
"disabled:opacity-50 disabled:cursor-default",
|
|
1442
1662
|
className
|
|
1443
1663
|
].filter(Boolean).join(" "),
|
|
1444
|
-
children: ({ isSelected }) => /* @__PURE__ */
|
|
1664
|
+
children: ({ isSelected }) => /* @__PURE__ */ jsx18(
|
|
1445
1665
|
"div",
|
|
1446
1666
|
{
|
|
1447
1667
|
className: [
|
|
@@ -1458,9 +1678,9 @@ function RadioButton({ children, className, ...props }) {
|
|
|
1458
1678
|
}
|
|
1459
1679
|
|
|
1460
1680
|
// src/components/Form/Fieldset/Fieldset.tsx
|
|
1461
|
-
import { jsx as
|
|
1681
|
+
import { jsx as jsx19, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
1462
1682
|
function Fieldset({ legend, children, className }) {
|
|
1463
|
-
return /* @__PURE__ */
|
|
1683
|
+
return /* @__PURE__ */ jsxs16(
|
|
1464
1684
|
"fieldset",
|
|
1465
1685
|
{
|
|
1466
1686
|
className: [
|
|
@@ -1469,7 +1689,7 @@ function Fieldset({ legend, children, className }) {
|
|
|
1469
1689
|
className
|
|
1470
1690
|
].filter(Boolean).join(" "),
|
|
1471
1691
|
children: [
|
|
1472
|
-
legend && /* @__PURE__ */
|
|
1692
|
+
legend && /* @__PURE__ */ jsx19(
|
|
1473
1693
|
"legend",
|
|
1474
1694
|
{
|
|
1475
1695
|
className: [
|
|
@@ -1487,71 +1707,9 @@ function Fieldset({ legend, children, className }) {
|
|
|
1487
1707
|
);
|
|
1488
1708
|
}
|
|
1489
1709
|
|
|
1490
|
-
// src/components/Form/InputGroup/InputGroup.tsx
|
|
1491
|
-
import React from "react";
|
|
1492
|
-
import { jsx as jsx19 } from "react/jsx-runtime";
|
|
1493
|
-
function InputGroup({ children, className }) {
|
|
1494
|
-
const childArray = React.Children.toArray(children).filter(
|
|
1495
|
-
React.isValidElement
|
|
1496
|
-
);
|
|
1497
|
-
return /* @__PURE__ */ jsx19(
|
|
1498
|
-
"div",
|
|
1499
|
-
{
|
|
1500
|
-
className: ["flex items-stretch", className].filter(Boolean).join(" "),
|
|
1501
|
-
children: childArray.map((child, index) => {
|
|
1502
|
-
const position = childArray.length === 1 ? "standalone" : index === 0 ? "start" : index === childArray.length - 1 ? "end" : "middle";
|
|
1503
|
-
return /* @__PURE__ */ jsx19(
|
|
1504
|
-
InputGroupContext.Provider,
|
|
1505
|
-
{
|
|
1506
|
-
value: { inGroup: true, position },
|
|
1507
|
-
children: child
|
|
1508
|
-
},
|
|
1509
|
-
index
|
|
1510
|
-
);
|
|
1511
|
-
})
|
|
1512
|
-
}
|
|
1513
|
-
);
|
|
1514
|
-
}
|
|
1515
|
-
|
|
1516
|
-
// src/components/Form/InputAddon/InputAddon.tsx
|
|
1517
|
-
import { jsx as jsx20 } from "react/jsx-runtime";
|
|
1518
|
-
function groupRadiusClass3(position) {
|
|
1519
|
-
switch (position) {
|
|
1520
|
-
case "start":
|
|
1521
|
-
return "rounded-l-(--border-radius-md) rounded-r-none";
|
|
1522
|
-
case "middle":
|
|
1523
|
-
return "rounded-none";
|
|
1524
|
-
case "end":
|
|
1525
|
-
return "rounded-r-(--border-radius-md) rounded-l-none";
|
|
1526
|
-
default:
|
|
1527
|
-
return "rounded-md";
|
|
1528
|
-
}
|
|
1529
|
-
}
|
|
1530
|
-
function InputAddon({ children, className }) {
|
|
1531
|
-
const { inGroup, position } = useInputGroup();
|
|
1532
|
-
const radiusClass = inGroup ? groupRadiusClass3(position) : "rounded-md";
|
|
1533
|
-
const marginClass = inGroup && position !== "start" && position !== "standalone" ? "-ml-px" : "";
|
|
1534
|
-
return /* @__PURE__ */ jsx20(
|
|
1535
|
-
"div",
|
|
1536
|
-
{
|
|
1537
|
-
className: [
|
|
1538
|
-
"flex items-center self-stretch shrink-0 select-none",
|
|
1539
|
-
"px-3 py-2 text-base",
|
|
1540
|
-
"bg-card",
|
|
1541
|
-
"text-muted-foreground",
|
|
1542
|
-
"border border-border",
|
|
1543
|
-
radiusClass,
|
|
1544
|
-
marginClass,
|
|
1545
|
-
className
|
|
1546
|
-
].filter(Boolean).join(" "),
|
|
1547
|
-
children
|
|
1548
|
-
}
|
|
1549
|
-
);
|
|
1550
|
-
}
|
|
1551
|
-
|
|
1552
1710
|
// src/components/Heading/Heading.tsx
|
|
1553
|
-
import { twMerge as
|
|
1554
|
-
import { jsx as
|
|
1711
|
+
import { twMerge as twMerge8 } from "tailwind-merge";
|
|
1712
|
+
import { jsx as jsx20 } from "react/jsx-runtime";
|
|
1555
1713
|
var defaultSizeMap = {
|
|
1556
1714
|
h1: "2xl",
|
|
1557
1715
|
h2: "xl",
|
|
@@ -1574,17 +1732,17 @@ var weightStyles = {
|
|
|
1574
1732
|
bold: "font-bold"
|
|
1575
1733
|
};
|
|
1576
1734
|
function Heading2({
|
|
1577
|
-
as:
|
|
1735
|
+
as: Tag2 = "h2",
|
|
1578
1736
|
size,
|
|
1579
1737
|
weight = "semibold",
|
|
1580
1738
|
className,
|
|
1581
1739
|
children
|
|
1582
1740
|
}) {
|
|
1583
|
-
const resolvedSize = size ?? defaultSizeMap[
|
|
1584
|
-
return /* @__PURE__ */
|
|
1585
|
-
|
|
1741
|
+
const resolvedSize = size ?? defaultSizeMap[Tag2];
|
|
1742
|
+
return /* @__PURE__ */ jsx20(
|
|
1743
|
+
Tag2,
|
|
1586
1744
|
{
|
|
1587
|
-
className:
|
|
1745
|
+
className: twMerge8(
|
|
1588
1746
|
weightStyles[weight],
|
|
1589
1747
|
"text-foreground",
|
|
1590
1748
|
sizeStyles3[resolvedSize],
|
|
@@ -1595,7 +1753,7 @@ function Heading2({
|
|
|
1595
1753
|
);
|
|
1596
1754
|
}
|
|
1597
1755
|
function H1(props) {
|
|
1598
|
-
return /* @__PURE__ */
|
|
1756
|
+
return /* @__PURE__ */ jsx20(
|
|
1599
1757
|
Heading2,
|
|
1600
1758
|
{
|
|
1601
1759
|
...props,
|
|
@@ -1606,17 +1764,17 @@ function H1(props) {
|
|
|
1606
1764
|
);
|
|
1607
1765
|
}
|
|
1608
1766
|
function H2(props) {
|
|
1609
|
-
return /* @__PURE__ */
|
|
1767
|
+
return /* @__PURE__ */ jsx20(Heading2, { ...props, as: "h2", size: props.size ?? "xl" });
|
|
1610
1768
|
}
|
|
1611
1769
|
function H3(props) {
|
|
1612
|
-
return /* @__PURE__ */
|
|
1770
|
+
return /* @__PURE__ */ jsx20(Heading2, { ...props, as: "h3", size: props.size ?? "lg" });
|
|
1613
1771
|
}
|
|
1614
1772
|
|
|
1615
1773
|
// src/components/Link/Link.tsx
|
|
1616
1774
|
import {
|
|
1617
|
-
Link as
|
|
1775
|
+
Link as AriaLink3
|
|
1618
1776
|
} from "react-aria-components";
|
|
1619
|
-
import { jsx as
|
|
1777
|
+
import { jsx as jsx21 } from "react/jsx-runtime";
|
|
1620
1778
|
var variantStyles2 = {
|
|
1621
1779
|
default: [
|
|
1622
1780
|
"text-teal-700 underline",
|
|
@@ -1632,8 +1790,8 @@ function Link({
|
|
|
1632
1790
|
className,
|
|
1633
1791
|
...props
|
|
1634
1792
|
}) {
|
|
1635
|
-
return /* @__PURE__ */
|
|
1636
|
-
|
|
1793
|
+
return /* @__PURE__ */ jsx21(
|
|
1794
|
+
AriaLink3,
|
|
1637
1795
|
{
|
|
1638
1796
|
...props,
|
|
1639
1797
|
className: [
|
|
@@ -1652,21 +1810,21 @@ import {
|
|
|
1652
1810
|
Breadcrumb as AriaBreadcrumb,
|
|
1653
1811
|
Link as Link2
|
|
1654
1812
|
} from "react-aria-components";
|
|
1655
|
-
import { ChevronRight } from "lucide-react";
|
|
1656
|
-
import { Fragment as Fragment6, jsx as
|
|
1813
|
+
import { ChevronRight as ChevronRight2 } from "lucide-react";
|
|
1814
|
+
import { Fragment as Fragment6, jsx as jsx22, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
1657
1815
|
function Breadcrumbs({ items, className }) {
|
|
1658
|
-
return /* @__PURE__ */
|
|
1816
|
+
return /* @__PURE__ */ jsx22(
|
|
1659
1817
|
"nav",
|
|
1660
1818
|
{
|
|
1661
1819
|
"aria-label": "Breadcrumb",
|
|
1662
1820
|
className,
|
|
1663
|
-
children: /* @__PURE__ */
|
|
1821
|
+
children: /* @__PURE__ */ jsx22(
|
|
1664
1822
|
AriaBreadcrumbs,
|
|
1665
1823
|
{
|
|
1666
1824
|
className: "flex items-center gap-1 text-sm min-w-0",
|
|
1667
1825
|
children: items.map((item, index) => {
|
|
1668
1826
|
const isLast = index === items.length - 1;
|
|
1669
|
-
return /* @__PURE__ */
|
|
1827
|
+
return /* @__PURE__ */ jsx22(
|
|
1670
1828
|
AriaBreadcrumb,
|
|
1671
1829
|
{
|
|
1672
1830
|
id: item.id,
|
|
@@ -1674,8 +1832,8 @@ function Breadcrumbs({ items, className }) {
|
|
|
1674
1832
|
"flex items-center gap-1",
|
|
1675
1833
|
isLast ? "min-w-0" : "shrink-0"
|
|
1676
1834
|
].join(" "),
|
|
1677
|
-
children: isLast ? /* @__PURE__ */
|
|
1678
|
-
/* @__PURE__ */
|
|
1835
|
+
children: isLast ? /* @__PURE__ */ jsx22("span", { className: "font-medium text-foreground truncate", children: item.label }) : /* @__PURE__ */ jsxs17(Fragment6, { children: [
|
|
1836
|
+
/* @__PURE__ */ jsx22(
|
|
1679
1837
|
Link2,
|
|
1680
1838
|
{
|
|
1681
1839
|
href: item.href,
|
|
@@ -1683,8 +1841,8 @@ function Breadcrumbs({ items, className }) {
|
|
|
1683
1841
|
children: item.label
|
|
1684
1842
|
}
|
|
1685
1843
|
),
|
|
1686
|
-
/* @__PURE__ */
|
|
1687
|
-
|
|
1844
|
+
/* @__PURE__ */ jsx22(
|
|
1845
|
+
ChevronRight2,
|
|
1688
1846
|
{
|
|
1689
1847
|
className: "shrink-0 text-neutral-400",
|
|
1690
1848
|
size: 16,
|
|
@@ -1702,94 +1860,13 @@ function Breadcrumbs({ items, className }) {
|
|
|
1702
1860
|
);
|
|
1703
1861
|
}
|
|
1704
1862
|
|
|
1705
|
-
// src/components/ButtonLink/ButtonLink.tsx
|
|
1706
|
-
import {
|
|
1707
|
-
Link as AriaLink2
|
|
1708
|
-
} from "react-aria-components";
|
|
1709
|
-
import { twMerge as twMerge5 } from "tailwind-merge";
|
|
1710
|
-
import { jsx as jsx24, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
1711
|
-
var iconSizeMap3 = {
|
|
1712
|
-
xs: "sm",
|
|
1713
|
-
sm: "sm",
|
|
1714
|
-
md: "sm",
|
|
1715
|
-
lg: "md"
|
|
1716
|
-
};
|
|
1717
|
-
function ButtonLink({
|
|
1718
|
-
variant = "primary",
|
|
1719
|
-
size = "md",
|
|
1720
|
-
iconLeft,
|
|
1721
|
-
iconRight,
|
|
1722
|
-
className,
|
|
1723
|
-
children,
|
|
1724
|
-
...props
|
|
1725
|
-
}) {
|
|
1726
|
-
return /* @__PURE__ */ jsxs17(
|
|
1727
|
-
AriaLink2,
|
|
1728
|
-
{
|
|
1729
|
-
...props,
|
|
1730
|
-
className: twMerge5(
|
|
1731
|
-
"inline-flex items-center justify-center gap-2 cursor-pointer",
|
|
1732
|
-
"rounded-md",
|
|
1733
|
-
"font-medium",
|
|
1734
|
-
"leading-tight",
|
|
1735
|
-
"outline-none transition-colors no-underline",
|
|
1736
|
-
"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
|
|
1737
|
-
variantStyles[variant],
|
|
1738
|
-
sizeStyles[size],
|
|
1739
|
-
className
|
|
1740
|
-
),
|
|
1741
|
-
children: [
|
|
1742
|
-
iconLeft && /* @__PURE__ */ jsx24(Icon, { icon: iconLeft, size: iconSizeMap3[size] }),
|
|
1743
|
-
children,
|
|
1744
|
-
iconRight && /* @__PURE__ */ jsx24(Icon, { icon: iconRight, size: iconSizeMap3[size] })
|
|
1745
|
-
]
|
|
1746
|
-
}
|
|
1747
|
-
);
|
|
1748
|
-
}
|
|
1749
|
-
var squareSizeStyles2 = {
|
|
1750
|
-
sm: "h-8 w-8",
|
|
1751
|
-
md: "h-10 w-10",
|
|
1752
|
-
lg: "h-12 w-12"
|
|
1753
|
-
};
|
|
1754
|
-
function IconButtonLink({
|
|
1755
|
-
icon,
|
|
1756
|
-
"aria-label": ariaLabel,
|
|
1757
|
-
variant = "ghost",
|
|
1758
|
-
size = "md",
|
|
1759
|
-
showTooltip = true,
|
|
1760
|
-
className,
|
|
1761
|
-
...props
|
|
1762
|
-
}) {
|
|
1763
|
-
const link = /* @__PURE__ */ jsx24(
|
|
1764
|
-
AriaLink2,
|
|
1765
|
-
{
|
|
1766
|
-
...props,
|
|
1767
|
-
"aria-label": ariaLabel,
|
|
1768
|
-
className: twMerge5(
|
|
1769
|
-
"inline-flex items-center justify-center cursor-pointer",
|
|
1770
|
-
"rounded-md",
|
|
1771
|
-
"outline-none transition-colors no-underline",
|
|
1772
|
-
"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
|
|
1773
|
-
variantStyles[variant],
|
|
1774
|
-
squareSizeStyles2[size],
|
|
1775
|
-
className
|
|
1776
|
-
),
|
|
1777
|
-
children: /* @__PURE__ */ jsx24(Icon, { icon, size: iconSizeMap3[size] })
|
|
1778
|
-
}
|
|
1779
|
-
);
|
|
1780
|
-
if (showTooltip) {
|
|
1781
|
-
return /* @__PURE__ */ jsx24(Tooltip, { content: ariaLabel, children: link });
|
|
1782
|
-
}
|
|
1783
|
-
return link;
|
|
1784
|
-
}
|
|
1785
|
-
|
|
1786
1863
|
// src/components/ToggleButton/ToggleButton.tsx
|
|
1787
1864
|
import {
|
|
1788
|
-
ToggleButton as
|
|
1865
|
+
ToggleButton as AriaToggleButton2
|
|
1789
1866
|
} from "react-aria-components";
|
|
1790
|
-
import { twMerge as
|
|
1791
|
-
import { jsx as
|
|
1792
|
-
var
|
|
1867
|
+
import { twMerge as twMerge9 } from "tailwind-merge";
|
|
1868
|
+
import { jsx as jsx23 } from "react/jsx-runtime";
|
|
1869
|
+
var squareSizeStyles2 = {
|
|
1793
1870
|
xs: "h-6 w-6 text-xs",
|
|
1794
1871
|
sm: "h-7 w-7 text-sm",
|
|
1795
1872
|
md: "h-8 w-8 text-base",
|
|
@@ -1833,11 +1910,11 @@ function ToggleButton({
|
|
|
1833
1910
|
...props
|
|
1834
1911
|
}) {
|
|
1835
1912
|
const styles = variantStyles3[variant];
|
|
1836
|
-
return /* @__PURE__ */
|
|
1837
|
-
|
|
1913
|
+
return /* @__PURE__ */ jsx23(
|
|
1914
|
+
AriaToggleButton2,
|
|
1838
1915
|
{
|
|
1839
1916
|
...props,
|
|
1840
|
-
className: ({ isSelected }) =>
|
|
1917
|
+
className: ({ isSelected }) => twMerge9(
|
|
1841
1918
|
"inline-flex items-center justify-center gap-2 cursor-pointer",
|
|
1842
1919
|
isSquare ? "rounded-none" : "rounded-md",
|
|
1843
1920
|
"font-medium",
|
|
@@ -1845,7 +1922,7 @@ function ToggleButton({
|
|
|
1845
1922
|
"outline-none transition-colors",
|
|
1846
1923
|
"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
|
|
1847
1924
|
"disabled:opacity-50 disabled:pointer-events-none",
|
|
1848
|
-
isSquare ?
|
|
1925
|
+
isSquare ? squareSizeStyles2[size] : sizeStyles[size],
|
|
1849
1926
|
isSelected ? styles.selected : styles.base,
|
|
1850
1927
|
className
|
|
1851
1928
|
)
|
|
@@ -1853,78 +1930,6 @@ function ToggleButton({
|
|
|
1853
1930
|
);
|
|
1854
1931
|
}
|
|
1855
1932
|
|
|
1856
|
-
// src/components/ToggleButtonGroup/ToggleButtonGroup.tsx
|
|
1857
|
-
import { createContext as createContext3, useContext as useContext3 } from "react";
|
|
1858
|
-
import { twMerge as twMerge7 } from "tailwind-merge";
|
|
1859
|
-
import {
|
|
1860
|
-
RadioGroup as AriaRadioGroup2,
|
|
1861
|
-
Radio as AriaRadio2
|
|
1862
|
-
} from "react-aria-components";
|
|
1863
|
-
import { jsx as jsx26 } from "react/jsx-runtime";
|
|
1864
|
-
var ToggleButtonGroupContext = createContext3({
|
|
1865
|
-
size: "md"
|
|
1866
|
-
});
|
|
1867
|
-
var sizeStyles4 = {
|
|
1868
|
-
sm: "px-2.5 py-1 text-xs gap-1",
|
|
1869
|
-
md: "px-3 py-1.5 text-sm gap-1.5",
|
|
1870
|
-
lg: "px-4 py-2 text-base gap-2"
|
|
1871
|
-
};
|
|
1872
|
-
var iconOnlySizeStyles = {
|
|
1873
|
-
sm: "p-1",
|
|
1874
|
-
md: "p-1.5",
|
|
1875
|
-
lg: "p-2"
|
|
1876
|
-
};
|
|
1877
|
-
function ToggleButtonGroup({
|
|
1878
|
-
size = "md",
|
|
1879
|
-
className,
|
|
1880
|
-
children,
|
|
1881
|
-
...props
|
|
1882
|
-
}) {
|
|
1883
|
-
return /* @__PURE__ */ jsx26(ToggleButtonGroupContext.Provider, { value: { size }, children: /* @__PURE__ */ jsx26(
|
|
1884
|
-
AriaRadioGroup2,
|
|
1885
|
-
{
|
|
1886
|
-
...props,
|
|
1887
|
-
orientation: "horizontal",
|
|
1888
|
-
className: twMerge7(
|
|
1889
|
-
"inline-flex items-center rounded-lg border border-border bg-muted p-0.5 gap-0.5",
|
|
1890
|
-
className
|
|
1891
|
-
),
|
|
1892
|
-
children
|
|
1893
|
-
}
|
|
1894
|
-
) });
|
|
1895
|
-
}
|
|
1896
|
-
function ToggleButtonGroupItem({
|
|
1897
|
-
children,
|
|
1898
|
-
isIconOnly,
|
|
1899
|
-
className,
|
|
1900
|
-
...props
|
|
1901
|
-
}) {
|
|
1902
|
-
const { size } = useContext3(ToggleButtonGroupContext);
|
|
1903
|
-
return /* @__PURE__ */ jsx26(
|
|
1904
|
-
AriaRadio2,
|
|
1905
|
-
{
|
|
1906
|
-
...props,
|
|
1907
|
-
className: ({ isSelected, isHovered, isPressed, isDisabled }) => twMerge7(
|
|
1908
|
-
// Base layout
|
|
1909
|
-
"inline-flex items-center justify-center",
|
|
1910
|
-
"rounded-md",
|
|
1911
|
-
"font-medium",
|
|
1912
|
-
"outline-none transition-colors cursor-pointer",
|
|
1913
|
-
// Focus ring
|
|
1914
|
-
"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1",
|
|
1915
|
-
// Disabled
|
|
1916
|
-
isDisabled && "opacity-50 pointer-events-none",
|
|
1917
|
-
// Size
|
|
1918
|
-
isIconOnly ? iconOnlySizeStyles[size] : sizeStyles4[size],
|
|
1919
|
-
// Selected state
|
|
1920
|
-
isSelected ? "bg-background text-foreground shadow-sm font-semibold" : isPressed ? "bg-card text-foreground" : isHovered ? "bg-card text-foreground" : "bg-transparent text-muted-foreground",
|
|
1921
|
-
className
|
|
1922
|
-
),
|
|
1923
|
-
children
|
|
1924
|
-
}
|
|
1925
|
-
);
|
|
1926
|
-
}
|
|
1927
|
-
|
|
1928
1933
|
// src/components/Menu/Menu.tsx
|
|
1929
1934
|
import {
|
|
1930
1935
|
MenuTrigger,
|
|
@@ -1932,14 +1937,19 @@ import {
|
|
|
1932
1937
|
MenuItem as AriaMenuItem,
|
|
1933
1938
|
Popover as Popover2
|
|
1934
1939
|
} from "react-aria-components";
|
|
1935
|
-
import {
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1940
|
+
import { twMerge as twMerge10 } from "tailwind-merge";
|
|
1941
|
+
|
|
1942
|
+
// src/components/Menu/menuStyles.ts
|
|
1943
|
+
var popoverStyles = `
|
|
1944
|
+
bg-background rounded-md shadow-lg
|
|
1945
|
+
border border-border
|
|
1946
|
+
py-1 min-w-48
|
|
1947
|
+
entering:animate-in entering:fade-in entering:zoom-in-95
|
|
1948
|
+
exiting:animate-out exiting:fade-out exiting:zoom-out-95
|
|
1949
|
+
`;
|
|
1950
|
+
|
|
1951
|
+
// src/components/Menu/Menu.tsx
|
|
1952
|
+
import { jsx as jsx24, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
1943
1953
|
function Menu({
|
|
1944
1954
|
items,
|
|
1945
1955
|
content,
|
|
@@ -1954,61 +1964,161 @@ function Menu({
|
|
|
1954
1964
|
const selectionProps = selectionMode && selectionMode !== "none" ? { selectionMode, selectedKeys, defaultSelectedKeys, onSelectionChange } : {};
|
|
1955
1965
|
return /* @__PURE__ */ jsxs18(MenuTrigger, { children: [
|
|
1956
1966
|
children,
|
|
1957
|
-
/* @__PURE__ */
|
|
1958
|
-
|
|
1967
|
+
/* @__PURE__ */ jsx24(Popover2, { className: twMerge10(popoverStyles, className), children: items ? /* @__PURE__ */ jsx24(
|
|
1968
|
+
AriaMenu,
|
|
1959
1969
|
{
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1970
|
+
items,
|
|
1971
|
+
onAction: (key) => {
|
|
1972
|
+
const item = items.find((i) => i.id === key);
|
|
1973
|
+
item?.onAction?.();
|
|
1974
|
+
onAction?.(key);
|
|
1975
|
+
},
|
|
1976
|
+
...selectionProps,
|
|
1977
|
+
className: "outline-none",
|
|
1978
|
+
children: (item) => /* @__PURE__ */ jsxs18(
|
|
1979
|
+
AriaMenuItem,
|
|
1980
|
+
{
|
|
1981
|
+
id: item.id,
|
|
1982
|
+
href: item.href,
|
|
1983
|
+
target: item.target,
|
|
1984
|
+
isDisabled: item.isDisabled,
|
|
1985
|
+
className: [
|
|
1986
|
+
"flex items-center gap-2 px-3 py-2 text-sm outline-none cursor-default",
|
|
1987
|
+
"transition-colors",
|
|
1988
|
+
"focus:bg-muted",
|
|
1989
|
+
"hover:bg-muted",
|
|
1990
|
+
"disabled:opacity-50 disabled:pointer-events-none",
|
|
1991
|
+
item.isDanger ? "text-destructive" : "text-foreground"
|
|
1992
|
+
].filter(Boolean).join(" "),
|
|
1993
|
+
children: [
|
|
1994
|
+
item.icon && /* @__PURE__ */ jsx24(Icon, { icon: item.icon, size: "sm" }),
|
|
1995
|
+
/* @__PURE__ */ jsx24("span", { className: "flex-1", children: item.label }),
|
|
1996
|
+
item.endContent && /* @__PURE__ */ jsx24("span", { className: "ml-auto flex items-center", children: item.endContent })
|
|
1997
|
+
]
|
|
1998
|
+
}
|
|
1999
|
+
)
|
|
2000
|
+
}
|
|
2001
|
+
) : /* @__PURE__ */ jsx24(
|
|
2002
|
+
AriaMenu,
|
|
2003
|
+
{
|
|
2004
|
+
onAction: (key) => onAction?.(key),
|
|
2005
|
+
...selectionProps,
|
|
2006
|
+
className: "outline-none",
|
|
2007
|
+
children: content
|
|
2008
|
+
}
|
|
2009
|
+
) })
|
|
2010
|
+
] });
|
|
2011
|
+
}
|
|
2012
|
+
|
|
2013
|
+
// src/components/Menu/useContextMenu.tsx
|
|
2014
|
+
import {
|
|
2015
|
+
useCallback as useCallback3,
|
|
2016
|
+
useEffect as useEffect3,
|
|
2017
|
+
useRef as useRef5,
|
|
2018
|
+
useState as useState7
|
|
2019
|
+
} from "react";
|
|
2020
|
+
import {
|
|
2021
|
+
Menu as AriaMenu2,
|
|
2022
|
+
MenuTrigger as MenuTrigger2,
|
|
2023
|
+
Popover as Popover3,
|
|
2024
|
+
Pressable
|
|
2025
|
+
} from "react-aria-components";
|
|
2026
|
+
import { twMerge as twMerge11 } from "tailwind-merge";
|
|
2027
|
+
import { jsx as jsx25, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
2028
|
+
function useContextMenu({
|
|
2029
|
+
content,
|
|
2030
|
+
onAction,
|
|
2031
|
+
className
|
|
2032
|
+
}) {
|
|
2033
|
+
const [anchor, setAnchor] = useState7(null);
|
|
2034
|
+
const anchorRef = useRef5(null);
|
|
2035
|
+
const popoverRef = useRef5(null);
|
|
2036
|
+
const isOpen = anchor !== null;
|
|
2037
|
+
const close = useCallback3(() => setAnchor(null), []);
|
|
2038
|
+
const onContextMenu = useCallback3((event) => {
|
|
2039
|
+
event.preventDefault();
|
|
2040
|
+
setAnchor({ x: event.clientX, y: event.clientY });
|
|
2041
|
+
}, []);
|
|
2042
|
+
const onPress = useCallback3((event) => {
|
|
2043
|
+
const rect = event.target.getBoundingClientRect();
|
|
2044
|
+
setAnchor({ x: rect.left, y: rect.bottom });
|
|
2045
|
+
}, []);
|
|
2046
|
+
useEffect3(() => {
|
|
2047
|
+
if (!isOpen) return;
|
|
2048
|
+
const isInside = (target) => popoverRef.current?.contains(target) ?? false;
|
|
2049
|
+
const onPointerDown = (event) => {
|
|
2050
|
+
if (!isInside(event.target)) close();
|
|
2051
|
+
};
|
|
2052
|
+
const onOutsideContextMenu = (event) => {
|
|
2053
|
+
if (isInside(event.target)) return;
|
|
2054
|
+
event.preventDefault();
|
|
2055
|
+
close();
|
|
2056
|
+
};
|
|
2057
|
+
const onKeyDown = (event) => {
|
|
2058
|
+
if (event.key === "Escape") close();
|
|
2059
|
+
};
|
|
2060
|
+
document.addEventListener("pointerdown", onPointerDown, true);
|
|
2061
|
+
document.addEventListener("contextmenu", onOutsideContextMenu, true);
|
|
2062
|
+
document.addEventListener("keydown", onKeyDown, true);
|
|
2063
|
+
return () => {
|
|
2064
|
+
document.removeEventListener("pointerdown", onPointerDown, true);
|
|
2065
|
+
document.removeEventListener("contextmenu", onOutsideContextMenu, true);
|
|
2066
|
+
document.removeEventListener("keydown", onKeyDown, true);
|
|
2067
|
+
};
|
|
2068
|
+
}, [isOpen, close]);
|
|
2069
|
+
const menu = /* @__PURE__ */ jsxs19(
|
|
2070
|
+
MenuTrigger2,
|
|
2071
|
+
{
|
|
2072
|
+
isOpen,
|
|
2073
|
+
onOpenChange: (open) => {
|
|
2074
|
+
if (!open) close();
|
|
2075
|
+
},
|
|
2076
|
+
children: [
|
|
2077
|
+
/* @__PURE__ */ jsx25(Pressable, { children: /* @__PURE__ */ jsx25(
|
|
2078
|
+
"span",
|
|
1963
2079
|
{
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
|
|
2080
|
+
ref: anchorRef,
|
|
2081
|
+
"aria-hidden": true,
|
|
2082
|
+
className: "pointer-events-none fixed h-0 w-0",
|
|
2083
|
+
style: { left: anchor?.x ?? 0, top: anchor?.y ?? 0 }
|
|
2084
|
+
}
|
|
2085
|
+
) }),
|
|
2086
|
+
/* @__PURE__ */ jsx25(
|
|
2087
|
+
Popover3,
|
|
2088
|
+
{
|
|
2089
|
+
isNonModal: true,
|
|
2090
|
+
placement: "bottom start",
|
|
2091
|
+
ref: popoverRef,
|
|
2092
|
+
className: twMerge11(popoverStyles, className),
|
|
2093
|
+
children: /* @__PURE__ */ jsx25(
|
|
2094
|
+
AriaMenu2,
|
|
1974
2095
|
{
|
|
1975
|
-
|
|
1976
|
-
|
|
1977
|
-
|
|
1978
|
-
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
"focus:bg-muted",
|
|
1983
|
-
"hover:bg-muted",
|
|
1984
|
-
"disabled:opacity-50 disabled:pointer-events-none",
|
|
1985
|
-
item.isDanger ? "text-destructive" : "text-foreground"
|
|
1986
|
-
].filter(Boolean).join(" "),
|
|
1987
|
-
children: [
|
|
1988
|
-
item.icon && /* @__PURE__ */ jsx27(Icon, { icon: item.icon, size: "sm" }),
|
|
1989
|
-
/* @__PURE__ */ jsx27("span", { className: "flex-1", children: item.label }),
|
|
1990
|
-
item.endContent && /* @__PURE__ */ jsx27("span", { className: "ml-auto flex items-center", children: item.endContent })
|
|
1991
|
-
]
|
|
2096
|
+
autoFocus: "first",
|
|
2097
|
+
onAction: (key) => {
|
|
2098
|
+
onAction?.(String(key));
|
|
2099
|
+
close();
|
|
2100
|
+
},
|
|
2101
|
+
className: "outline-none",
|
|
2102
|
+
children: content
|
|
1992
2103
|
}
|
|
1993
2104
|
)
|
|
1994
2105
|
}
|
|
1995
|
-
) : /* @__PURE__ */ jsx27(
|
|
1996
|
-
AriaMenu,
|
|
1997
|
-
{
|
|
1998
|
-
onAction: (key) => onAction?.(key),
|
|
1999
|
-
...selectionProps,
|
|
2000
|
-
className: "outline-none",
|
|
2001
|
-
children: content
|
|
2002
|
-
}
|
|
2003
2106
|
)
|
|
2004
|
-
|
|
2005
|
-
|
|
2006
|
-
|
|
2107
|
+
]
|
|
2108
|
+
}
|
|
2109
|
+
);
|
|
2110
|
+
return {
|
|
2111
|
+
targetProps: { onContextMenu },
|
|
2112
|
+
triggerProps: { onPress },
|
|
2113
|
+
menu,
|
|
2114
|
+
isOpen,
|
|
2115
|
+
close
|
|
2116
|
+
};
|
|
2007
2117
|
}
|
|
2008
2118
|
|
|
2009
2119
|
// src/components/Menu/MenuItem.tsx
|
|
2010
2120
|
import { MenuItem as AriaMenuItem2 } from "react-aria-components";
|
|
2011
|
-
import { jsx as
|
|
2121
|
+
import { jsx as jsx26, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
2012
2122
|
function MenuItem({
|
|
2013
2123
|
id,
|
|
2014
2124
|
children,
|
|
@@ -2022,7 +2132,7 @@ function MenuItem({
|
|
|
2022
2132
|
textValue,
|
|
2023
2133
|
className
|
|
2024
2134
|
}) {
|
|
2025
|
-
return /* @__PURE__ */
|
|
2135
|
+
return /* @__PURE__ */ jsxs20(
|
|
2026
2136
|
AriaMenuItem2,
|
|
2027
2137
|
{
|
|
2028
2138
|
id,
|
|
@@ -2041,9 +2151,9 @@ function MenuItem({
|
|
|
2041
2151
|
className
|
|
2042
2152
|
].filter(Boolean).join(" "),
|
|
2043
2153
|
children: [
|
|
2044
|
-
icon && /* @__PURE__ */
|
|
2045
|
-
/* @__PURE__ */
|
|
2046
|
-
endContent && /* @__PURE__ */
|
|
2154
|
+
icon && /* @__PURE__ */ jsx26(Icon, { icon, size: "sm" }),
|
|
2155
|
+
/* @__PURE__ */ jsx26("span", { className: "flex-1", children }),
|
|
2156
|
+
endContent && /* @__PURE__ */ jsx26("span", { className: "ml-auto flex items-center", children: endContent })
|
|
2047
2157
|
]
|
|
2048
2158
|
}
|
|
2049
2159
|
);
|
|
@@ -2051,8 +2161,8 @@ function MenuItem({
|
|
|
2051
2161
|
|
|
2052
2162
|
// src/components/Menu/MenuCheckboxItem.tsx
|
|
2053
2163
|
import { MenuItem as AriaMenuItem3 } from "react-aria-components";
|
|
2054
|
-
import { Check as
|
|
2055
|
-
import { Fragment as Fragment7, jsx as
|
|
2164
|
+
import { Check as Check4 } from "lucide-react";
|
|
2165
|
+
import { Fragment as Fragment7, jsx as jsx27, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
2056
2166
|
function MenuCheckboxItem({
|
|
2057
2167
|
id,
|
|
2058
2168
|
children,
|
|
@@ -2060,7 +2170,7 @@ function MenuCheckboxItem({
|
|
|
2060
2170
|
isDisabled,
|
|
2061
2171
|
className
|
|
2062
2172
|
}) {
|
|
2063
|
-
return /* @__PURE__ */
|
|
2173
|
+
return /* @__PURE__ */ jsx27(
|
|
2064
2174
|
AriaMenuItem3,
|
|
2065
2175
|
{
|
|
2066
2176
|
id,
|
|
@@ -2076,9 +2186,9 @@ function MenuCheckboxItem({
|
|
|
2076
2186
|
isSelected ? "font-medium" : "",
|
|
2077
2187
|
className
|
|
2078
2188
|
].filter(Boolean).join(" "),
|
|
2079
|
-
children: ({ isSelected }) => /* @__PURE__ */
|
|
2080
|
-
/* @__PURE__ */
|
|
2081
|
-
/* @__PURE__ */
|
|
2189
|
+
children: ({ isSelected }) => /* @__PURE__ */ jsxs21(Fragment7, { children: [
|
|
2190
|
+
/* @__PURE__ */ jsx27("span", { className: "flex items-center justify-center w-4 h-4 shrink-0", children: isSelected && /* @__PURE__ */ jsx27(Check4, { size: 14, className: "text-primary", "aria-hidden": "true" }) }),
|
|
2191
|
+
/* @__PURE__ */ jsx27("span", { className: "flex-1", children })
|
|
2082
2192
|
] })
|
|
2083
2193
|
}
|
|
2084
2194
|
);
|
|
@@ -2089,15 +2199,15 @@ import {
|
|
|
2089
2199
|
MenuSection as AriaMenuSection,
|
|
2090
2200
|
Header
|
|
2091
2201
|
} from "react-aria-components";
|
|
2092
|
-
import { jsx as
|
|
2202
|
+
import { jsx as jsx28, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
2093
2203
|
function MenuSection({
|
|
2094
2204
|
header,
|
|
2095
2205
|
children,
|
|
2096
2206
|
"aria-label": ariaLabel,
|
|
2097
2207
|
className
|
|
2098
2208
|
}) {
|
|
2099
|
-
return /* @__PURE__ */
|
|
2100
|
-
header && /* @__PURE__ */
|
|
2209
|
+
return /* @__PURE__ */ jsxs22(AriaMenuSection, { className, "aria-label": ariaLabel, children: [
|
|
2210
|
+
header && /* @__PURE__ */ jsx28(
|
|
2101
2211
|
Header,
|
|
2102
2212
|
{
|
|
2103
2213
|
className: [
|
|
@@ -2116,16 +2226,16 @@ function MenuSection({
|
|
|
2116
2226
|
|
|
2117
2227
|
// src/components/Menu/MenuHeader.tsx
|
|
2118
2228
|
import { Header as Header2 } from "react-aria-components";
|
|
2119
|
-
import { jsx as
|
|
2229
|
+
import { jsx as jsx29 } from "react/jsx-runtime";
|
|
2120
2230
|
function MenuHeader({ children, className }) {
|
|
2121
|
-
return /* @__PURE__ */
|
|
2231
|
+
return /* @__PURE__ */ jsx29(Header2, { className, children });
|
|
2122
2232
|
}
|
|
2123
2233
|
|
|
2124
2234
|
// src/components/Menu/MenuSeparator.tsx
|
|
2125
2235
|
import { Separator } from "react-aria-components";
|
|
2126
|
-
import { jsx as
|
|
2236
|
+
import { jsx as jsx30 } from "react/jsx-runtime";
|
|
2127
2237
|
function MenuSeparator({ className }) {
|
|
2128
|
-
return /* @__PURE__ */
|
|
2238
|
+
return /* @__PURE__ */ jsx30(
|
|
2129
2239
|
Separator,
|
|
2130
2240
|
{
|
|
2131
2241
|
className: [
|
|
@@ -2142,17 +2252,17 @@ import {
|
|
|
2142
2252
|
Popover as AriaPopover,
|
|
2143
2253
|
Button as AriaButton3
|
|
2144
2254
|
} from "react-aria-components";
|
|
2145
|
-
import { twMerge as
|
|
2146
|
-
import { jsx as
|
|
2147
|
-
function
|
|
2148
|
-
return /* @__PURE__ */
|
|
2255
|
+
import { twMerge as twMerge12 } from "tailwind-merge";
|
|
2256
|
+
import { jsx as jsx31 } from "react/jsx-runtime";
|
|
2257
|
+
function Popover4({ children, isOpen, onOpenChange }) {
|
|
2258
|
+
return /* @__PURE__ */ jsx31(DialogTrigger, { isOpen, onOpenChange, children });
|
|
2149
2259
|
}
|
|
2150
2260
|
function PopoverTrigger({ children, className }) {
|
|
2151
2261
|
const cx = `
|
|
2152
2262
|
inline-flex items-center bg-transparent border-none p-0 outline-none cursor-pointer
|
|
2153
2263
|
focus-visible:ring-2 focus-visible:ring-ring focus-visible:rounded-sm
|
|
2154
2264
|
`;
|
|
2155
|
-
return /* @__PURE__ */
|
|
2265
|
+
return /* @__PURE__ */ jsx31(AriaButton3, { className: twMerge12(cx, className), children });
|
|
2156
2266
|
}
|
|
2157
2267
|
function PopoverContent({
|
|
2158
2268
|
placement = "bottom",
|
|
@@ -2173,33 +2283,33 @@ function PopoverContent({
|
|
|
2173
2283
|
entering:placement-left:slide-in-from-right-1
|
|
2174
2284
|
entering:placement-right:slide-in-from-left-1
|
|
2175
2285
|
`;
|
|
2176
|
-
return /* @__PURE__ */
|
|
2286
|
+
return /* @__PURE__ */ jsx31(
|
|
2177
2287
|
AriaPopover,
|
|
2178
2288
|
{
|
|
2179
2289
|
...rest,
|
|
2180
2290
|
placement,
|
|
2181
2291
|
offset: offsetPx,
|
|
2182
|
-
className:
|
|
2292
|
+
className: twMerge12(cx, className),
|
|
2183
2293
|
children
|
|
2184
2294
|
}
|
|
2185
2295
|
);
|
|
2186
2296
|
}
|
|
2187
2297
|
|
|
2188
2298
|
// src/components/Tabs/Tabs.tsx
|
|
2189
|
-
import { createContext as
|
|
2190
|
-
import { twMerge as
|
|
2299
|
+
import { createContext as createContext2, useContext as useContext2 } from "react";
|
|
2300
|
+
import { twMerge as twMerge13 } from "tailwind-merge";
|
|
2191
2301
|
import {
|
|
2192
2302
|
Tabs as AriaTabs,
|
|
2193
2303
|
TabList as AriaTabList,
|
|
2194
2304
|
Tab as AriaTab,
|
|
2195
2305
|
TabPanel as AriaTabPanel
|
|
2196
2306
|
} from "react-aria-components";
|
|
2197
|
-
import { jsx as
|
|
2198
|
-
var TabsContext =
|
|
2307
|
+
import { jsx as jsx32 } from "react/jsx-runtime";
|
|
2308
|
+
var TabsContext = createContext2({
|
|
2199
2309
|
variant: "underline",
|
|
2200
2310
|
size: "md"
|
|
2201
2311
|
});
|
|
2202
|
-
var
|
|
2312
|
+
var sizeStyles4 = {
|
|
2203
2313
|
sm: "px-3 py-1.5 text-sm",
|
|
2204
2314
|
md: "px-4 py-2 text-base",
|
|
2205
2315
|
lg: "px-6 py-3 text-lg"
|
|
@@ -2212,12 +2322,12 @@ function Tabs({
|
|
|
2212
2322
|
children,
|
|
2213
2323
|
...props
|
|
2214
2324
|
}) {
|
|
2215
|
-
return /* @__PURE__ */
|
|
2325
|
+
return /* @__PURE__ */ jsx32(TabsContext.Provider, { value: { variant, size }, children: /* @__PURE__ */ jsx32(
|
|
2216
2326
|
AriaTabs,
|
|
2217
2327
|
{
|
|
2218
2328
|
...props,
|
|
2219
2329
|
orientation,
|
|
2220
|
-
className:
|
|
2330
|
+
className: twMerge13(
|
|
2221
2331
|
orientation === "vertical" ? "flex" : "",
|
|
2222
2332
|
className
|
|
2223
2333
|
),
|
|
@@ -2229,14 +2339,14 @@ function TabList({
|
|
|
2229
2339
|
className,
|
|
2230
2340
|
...props
|
|
2231
2341
|
}) {
|
|
2232
|
-
const { variant } =
|
|
2342
|
+
const { variant } = useContext2(TabsContext);
|
|
2233
2343
|
const baseStyles = variant === "unstyled" ? "flex items-center" : variant === "underline" ? "flex items-center border-b border-border" : "inline-flex items-center bg-muted rounded-lg p-1 gap-1";
|
|
2234
2344
|
const verticalStyles = variant === "unstyled" ? "flex-col" : variant === "underline" ? "flex-col border-b-0 border-r border-border" : "flex-col";
|
|
2235
|
-
return /* @__PURE__ */
|
|
2345
|
+
return /* @__PURE__ */ jsx32(
|
|
2236
2346
|
AriaTabList,
|
|
2237
2347
|
{
|
|
2238
2348
|
...props,
|
|
2239
|
-
className: ({ orientation }) =>
|
|
2349
|
+
className: ({ orientation }) => twMerge13(
|
|
2240
2350
|
baseStyles,
|
|
2241
2351
|
orientation === "vertical" ? verticalStyles : "",
|
|
2242
2352
|
className
|
|
@@ -2245,21 +2355,21 @@ function TabList({
|
|
|
2245
2355
|
);
|
|
2246
2356
|
}
|
|
2247
2357
|
function Tab({ className, ...props }) {
|
|
2248
|
-
const { variant, size } =
|
|
2249
|
-
return /* @__PURE__ */
|
|
2358
|
+
const { variant, size } = useContext2(TabsContext);
|
|
2359
|
+
return /* @__PURE__ */ jsx32(
|
|
2250
2360
|
AriaTab,
|
|
2251
2361
|
{
|
|
2252
2362
|
...props,
|
|
2253
2363
|
className: ({ isSelected, isDisabled, isHovered, isPressed }) => {
|
|
2254
2364
|
if (variant === "unstyled") {
|
|
2255
|
-
return
|
|
2365
|
+
return twMerge13(
|
|
2256
2366
|
"cursor-pointer outline-none",
|
|
2257
2367
|
"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
|
|
2258
2368
|
isDisabled ? "opacity-50 pointer-events-none" : "",
|
|
2259
2369
|
className
|
|
2260
2370
|
);
|
|
2261
2371
|
}
|
|
2262
|
-
return
|
|
2372
|
+
return twMerge13(
|
|
2263
2373
|
// Base
|
|
2264
2374
|
"cursor-pointer outline-none transition-colors",
|
|
2265
2375
|
"font-medium",
|
|
@@ -2268,7 +2378,7 @@ function Tab({ className, ...props }) {
|
|
|
2268
2378
|
// Disabled
|
|
2269
2379
|
isDisabled ? "opacity-50 pointer-events-none" : "",
|
|
2270
2380
|
// Size
|
|
2271
|
-
|
|
2381
|
+
sizeStyles4[size],
|
|
2272
2382
|
...getTabVariantStyles(variant, {
|
|
2273
2383
|
isSelected,
|
|
2274
2384
|
isHovered,
|
|
@@ -2302,12 +2412,12 @@ function getTabVariantStyles(variant, state) {
|
|
|
2302
2412
|
];
|
|
2303
2413
|
}
|
|
2304
2414
|
function TabPanel({ className, ...props }) {
|
|
2305
|
-
const { variant } =
|
|
2306
|
-
return /* @__PURE__ */
|
|
2415
|
+
const { variant } = useContext2(TabsContext);
|
|
2416
|
+
return /* @__PURE__ */ jsx32(
|
|
2307
2417
|
AriaTabPanel,
|
|
2308
2418
|
{
|
|
2309
2419
|
...props,
|
|
2310
|
-
className:
|
|
2420
|
+
className: twMerge13(
|
|
2311
2421
|
variant === "unstyled" ? "outline-none" : "mt-4 outline-none",
|
|
2312
2422
|
className
|
|
2313
2423
|
)
|
|
@@ -2324,17 +2434,17 @@ import {
|
|
|
2324
2434
|
} from "react-aria-components";
|
|
2325
2435
|
|
|
2326
2436
|
// src/components/SegmentedControl/SegmentedControl.tsx
|
|
2327
|
-
import { createContext as
|
|
2328
|
-
import { twMerge as
|
|
2437
|
+
import { createContext as createContext3, useContext as useContext3 } from "react";
|
|
2438
|
+
import { twMerge as twMerge14 } from "tailwind-merge";
|
|
2329
2439
|
import {
|
|
2330
2440
|
ToggleButtonGroup as AriaToggleButtonGroup,
|
|
2331
|
-
ToggleButton as
|
|
2441
|
+
ToggleButton as AriaToggleButton3
|
|
2332
2442
|
} from "react-aria-components";
|
|
2333
|
-
import { jsx as
|
|
2334
|
-
var SegmentedControlContext =
|
|
2443
|
+
import { jsx as jsx33 } from "react/jsx-runtime";
|
|
2444
|
+
var SegmentedControlContext = createContext3({
|
|
2335
2445
|
size: "md"
|
|
2336
2446
|
});
|
|
2337
|
-
var
|
|
2447
|
+
var sizeStyles5 = {
|
|
2338
2448
|
sm: "px-2.5 py-1 text-xs",
|
|
2339
2449
|
md: "px-3 py-1.5 text-sm",
|
|
2340
2450
|
lg: "px-4 py-2 text-base"
|
|
@@ -2350,7 +2460,7 @@ function SegmentedControl({
|
|
|
2350
2460
|
...props
|
|
2351
2461
|
}) {
|
|
2352
2462
|
const isNoneMode = selectionMode === "none";
|
|
2353
|
-
return /* @__PURE__ */
|
|
2463
|
+
return /* @__PURE__ */ jsx33(SegmentedControlContext.Provider, { value: { size }, children: /* @__PURE__ */ jsx33(
|
|
2354
2464
|
AriaToggleButtonGroup,
|
|
2355
2465
|
{
|
|
2356
2466
|
...props,
|
|
@@ -2358,7 +2468,7 @@ function SegmentedControl({
|
|
|
2358
2468
|
selectedKeys: isNoneMode ? /* @__PURE__ */ new Set() : selectedKeys,
|
|
2359
2469
|
defaultSelectedKeys: isNoneMode ? void 0 : defaultSelectedKeys,
|
|
2360
2470
|
onSelectionChange: isNoneMode ? void 0 : onSelectionChange,
|
|
2361
|
-
className:
|
|
2471
|
+
className: twMerge14(
|
|
2362
2472
|
"inline-flex items-center rounded-lg border border-border bg-muted p-0.5 gap-0.5",
|
|
2363
2473
|
className
|
|
2364
2474
|
),
|
|
@@ -2370,12 +2480,12 @@ function SegmentedControlItem({
|
|
|
2370
2480
|
className,
|
|
2371
2481
|
...props
|
|
2372
2482
|
}) {
|
|
2373
|
-
const { size } =
|
|
2374
|
-
return /* @__PURE__ */
|
|
2375
|
-
|
|
2483
|
+
const { size } = useContext3(SegmentedControlContext);
|
|
2484
|
+
return /* @__PURE__ */ jsx33(
|
|
2485
|
+
AriaToggleButton3,
|
|
2376
2486
|
{
|
|
2377
2487
|
...props,
|
|
2378
|
-
className: ({ isSelected, isHovered, isPressed, isDisabled }) =>
|
|
2488
|
+
className: ({ isSelected, isHovered, isPressed, isDisabled }) => twMerge14(
|
|
2379
2489
|
// Base layout
|
|
2380
2490
|
"inline-flex items-center justify-center",
|
|
2381
2491
|
"rounded-md",
|
|
@@ -2386,7 +2496,7 @@ function SegmentedControlItem({
|
|
|
2386
2496
|
// Disabled
|
|
2387
2497
|
isDisabled && "opacity-50 pointer-events-none",
|
|
2388
2498
|
// Size
|
|
2389
|
-
|
|
2499
|
+
sizeStyles5[size],
|
|
2390
2500
|
// Selected state
|
|
2391
2501
|
isSelected ? "bg-background text-foreground shadow-sm font-semibold" : isPressed ? "bg-card text-foreground" : isHovered ? "bg-card text-foreground" : "bg-transparent text-muted-foreground",
|
|
2392
2502
|
className
|
|
@@ -2396,8 +2506,8 @@ function SegmentedControlItem({
|
|
|
2396
2506
|
}
|
|
2397
2507
|
|
|
2398
2508
|
// src/components/Badge/Badge.tsx
|
|
2399
|
-
import { twMerge as
|
|
2400
|
-
import { jsx as
|
|
2509
|
+
import { twMerge as twMerge15 } from "tailwind-merge";
|
|
2510
|
+
import { jsx as jsx34, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
2401
2511
|
var variantStyles4 = {
|
|
2402
2512
|
neutral: "bg-(--color-badge-neutral-bg) text-(--color-badge-neutral-text)",
|
|
2403
2513
|
purple: "bg-(--color-badge-purple-bg) text-(--color-badge-purple-text)",
|
|
@@ -2407,33 +2517,29 @@ var variantStyles4 = {
|
|
|
2407
2517
|
green: "bg-(--color-badge-green-bg) text-(--color-badge-green-text)",
|
|
2408
2518
|
amber: "bg-(--color-badge-amber-bg) text-(--color-badge-amber-text)"
|
|
2409
2519
|
};
|
|
2410
|
-
var
|
|
2520
|
+
var sizeStyles6 = {
|
|
2411
2521
|
sm: "px-1.5 py-0.5",
|
|
2412
2522
|
md: "px-2 py-0.5"
|
|
2413
2523
|
};
|
|
2414
|
-
var iconSizeMap4 = {
|
|
2415
|
-
sm: 12,
|
|
2416
|
-
md: 14
|
|
2417
|
-
};
|
|
2418
2524
|
function Badge({
|
|
2419
2525
|
children,
|
|
2420
2526
|
variant = "neutral",
|
|
2421
2527
|
size = "sm",
|
|
2422
|
-
icon
|
|
2528
|
+
icon,
|
|
2423
2529
|
className
|
|
2424
2530
|
}) {
|
|
2425
|
-
return /* @__PURE__ */
|
|
2531
|
+
return /* @__PURE__ */ jsxs23(
|
|
2426
2532
|
"span",
|
|
2427
2533
|
{
|
|
2428
|
-
className:
|
|
2534
|
+
className: twMerge15(
|
|
2429
2535
|
"inline-flex items-center gap-1 rounded-full",
|
|
2430
|
-
"text-xs font-medium leading-tight",
|
|
2536
|
+
"text-xs font-medium leading-tight tracking-wider tabular-nums",
|
|
2431
2537
|
variantStyles4[variant],
|
|
2432
|
-
|
|
2538
|
+
sizeStyles6[size],
|
|
2433
2539
|
className
|
|
2434
2540
|
),
|
|
2435
2541
|
children: [
|
|
2436
|
-
|
|
2542
|
+
icon && /* @__PURE__ */ jsx34(Icon, { icon, size: "xs" }),
|
|
2437
2543
|
children
|
|
2438
2544
|
]
|
|
2439
2545
|
}
|
|
@@ -2441,9 +2547,9 @@ function Badge({
|
|
|
2441
2547
|
}
|
|
2442
2548
|
|
|
2443
2549
|
// src/components/Card/Card.tsx
|
|
2444
|
-
import { useCallback as
|
|
2445
|
-
import { twMerge as
|
|
2446
|
-
import { Fragment as Fragment8, jsx as
|
|
2550
|
+
import { useCallback as useCallback4 } from "react";
|
|
2551
|
+
import { twMerge as twMerge16 } from "tailwind-merge";
|
|
2552
|
+
import { Fragment as Fragment8, jsx as jsx35, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
2447
2553
|
var paddingStyles = {
|
|
2448
2554
|
none: "p-0",
|
|
2449
2555
|
sm: "p-3",
|
|
@@ -2461,13 +2567,13 @@ function Card({
|
|
|
2461
2567
|
className
|
|
2462
2568
|
}) {
|
|
2463
2569
|
const isInteractive = interactive || !!href || !!onPress;
|
|
2464
|
-
const containerClass =
|
|
2570
|
+
const containerClass = twMerge16(
|
|
2465
2571
|
"bg-background border border-border rounded-lg overflow-hidden shadow-sm",
|
|
2466
2572
|
isInteractive && "transition-all hover:shadow-md hover:border-ring cursor-pointer",
|
|
2467
2573
|
(href || onPress) && "block focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 outline-none",
|
|
2468
2574
|
className
|
|
2469
2575
|
);
|
|
2470
|
-
const handleKeyDown =
|
|
2576
|
+
const handleKeyDown = useCallback4(
|
|
2471
2577
|
(e) => {
|
|
2472
2578
|
if (onPress && (e.key === "Enter" || e.key === " ")) {
|
|
2473
2579
|
e.preventDefault();
|
|
@@ -2476,22 +2582,22 @@ function Card({
|
|
|
2476
2582
|
},
|
|
2477
2583
|
[onPress]
|
|
2478
2584
|
);
|
|
2479
|
-
const content = /* @__PURE__ */
|
|
2480
|
-
header && /* @__PURE__ */
|
|
2585
|
+
const content = /* @__PURE__ */ jsxs24(Fragment8, { children: [
|
|
2586
|
+
header && /* @__PURE__ */ jsx35(
|
|
2481
2587
|
"div",
|
|
2482
2588
|
{
|
|
2483
|
-
className:
|
|
2589
|
+
className: twMerge16(
|
|
2484
2590
|
"border-b border-border",
|
|
2485
2591
|
paddingStyles[padding]
|
|
2486
2592
|
),
|
|
2487
2593
|
children: header
|
|
2488
2594
|
}
|
|
2489
2595
|
),
|
|
2490
|
-
/* @__PURE__ */
|
|
2491
|
-
footer && /* @__PURE__ */
|
|
2596
|
+
/* @__PURE__ */ jsx35("div", { className: paddingStyles[padding], children }),
|
|
2597
|
+
footer && /* @__PURE__ */ jsx35(
|
|
2492
2598
|
"div",
|
|
2493
2599
|
{
|
|
2494
|
-
className:
|
|
2600
|
+
className: twMerge16(
|
|
2495
2601
|
"border-t border-border",
|
|
2496
2602
|
paddingStyles[padding]
|
|
2497
2603
|
),
|
|
@@ -2500,10 +2606,10 @@ function Card({
|
|
|
2500
2606
|
)
|
|
2501
2607
|
] });
|
|
2502
2608
|
if (href) {
|
|
2503
|
-
return /* @__PURE__ */
|
|
2609
|
+
return /* @__PURE__ */ jsx35("a", { href, className: containerClass, children: content });
|
|
2504
2610
|
}
|
|
2505
2611
|
if (onPress) {
|
|
2506
|
-
return /* @__PURE__ */
|
|
2612
|
+
return /* @__PURE__ */ jsx35(
|
|
2507
2613
|
"div",
|
|
2508
2614
|
{
|
|
2509
2615
|
role: "button",
|
|
@@ -2515,13 +2621,13 @@ function Card({
|
|
|
2515
2621
|
}
|
|
2516
2622
|
);
|
|
2517
2623
|
}
|
|
2518
|
-
return /* @__PURE__ */
|
|
2624
|
+
return /* @__PURE__ */ jsx35("div", { className: containerClass, children: content });
|
|
2519
2625
|
}
|
|
2520
2626
|
|
|
2521
2627
|
// src/components/DeltaIndicator/DeltaIndicator.tsx
|
|
2522
|
-
import { ArrowUp, ArrowDown, Minus } from "lucide-react";
|
|
2523
|
-
import { twMerge as
|
|
2524
|
-
import { jsx as
|
|
2628
|
+
import { ArrowUp as ArrowUp2, ArrowDown as ArrowDown2, Minus as Minus2 } from "lucide-react";
|
|
2629
|
+
import { twMerge as twMerge17 } from "tailwind-merge";
|
|
2630
|
+
import { jsx as jsx36, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
2525
2631
|
function getDirection(current, previous) {
|
|
2526
2632
|
const diff = current - previous;
|
|
2527
2633
|
if (diff > 0) return "increase";
|
|
@@ -2553,9 +2659,9 @@ var reverseDirectionColors = {
|
|
|
2553
2659
|
flat: "text-(--color-delta-flat-text)"
|
|
2554
2660
|
};
|
|
2555
2661
|
var directionIcons = {
|
|
2556
|
-
increase:
|
|
2557
|
-
decrease:
|
|
2558
|
-
flat:
|
|
2662
|
+
increase: ArrowUp2,
|
|
2663
|
+
decrease: ArrowDown2,
|
|
2664
|
+
flat: Minus2
|
|
2559
2665
|
};
|
|
2560
2666
|
var directionBgColors = {
|
|
2561
2667
|
increase: "bg-(--color-delta-increase-bg)",
|
|
@@ -2574,16 +2680,16 @@ function DeltaIndicator({
|
|
|
2574
2680
|
className
|
|
2575
2681
|
}) {
|
|
2576
2682
|
if (unavailable) {
|
|
2577
|
-
return /* @__PURE__ */
|
|
2683
|
+
return /* @__PURE__ */ jsxs25(
|
|
2578
2684
|
"span",
|
|
2579
2685
|
{
|
|
2580
|
-
className:
|
|
2686
|
+
className: twMerge17(
|
|
2581
2687
|
"inline-flex items-center gap-1 font-medium",
|
|
2582
2688
|
"text-muted-foreground",
|
|
2583
2689
|
className
|
|
2584
2690
|
),
|
|
2585
2691
|
children: [
|
|
2586
|
-
label && /* @__PURE__ */
|
|
2692
|
+
label && /* @__PURE__ */ jsx36("span", { className: "text-sm text-muted-foreground mr-1", children: label }),
|
|
2587
2693
|
unavailableText
|
|
2588
2694
|
]
|
|
2589
2695
|
}
|
|
@@ -2613,10 +2719,10 @@ function DeltaIndicator({
|
|
|
2613
2719
|
}
|
|
2614
2720
|
}
|
|
2615
2721
|
const isPill = mode === "pill";
|
|
2616
|
-
return /* @__PURE__ */
|
|
2722
|
+
return /* @__PURE__ */ jsxs25(
|
|
2617
2723
|
"span",
|
|
2618
2724
|
{
|
|
2619
|
-
className:
|
|
2725
|
+
className: twMerge17(
|
|
2620
2726
|
"inline-flex items-center gap-1 font-medium",
|
|
2621
2727
|
colorStyles2,
|
|
2622
2728
|
isPill && [
|
|
@@ -2627,8 +2733,8 @@ function DeltaIndicator({
|
|
|
2627
2733
|
className
|
|
2628
2734
|
),
|
|
2629
2735
|
children: [
|
|
2630
|
-
label && /* @__PURE__ */
|
|
2631
|
-
/* @__PURE__ */
|
|
2736
|
+
label && /* @__PURE__ */ jsx36("span", { className: "text-sm text-muted-foreground mr-1", children: label }),
|
|
2737
|
+
/* @__PURE__ */ jsx36(IconComponent, { size: 14, "aria-hidden": true }),
|
|
2632
2738
|
valueText
|
|
2633
2739
|
]
|
|
2634
2740
|
}
|
|
@@ -2636,8 +2742,8 @@ function DeltaIndicator({
|
|
|
2636
2742
|
}
|
|
2637
2743
|
|
|
2638
2744
|
// src/components/ProgressBar/ProgressBar.tsx
|
|
2639
|
-
import { twMerge as
|
|
2640
|
-
import { jsx as
|
|
2745
|
+
import { twMerge as twMerge18 } from "tailwind-merge";
|
|
2746
|
+
import { jsx as jsx37, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
2641
2747
|
var fillStyles = {
|
|
2642
2748
|
brand: "bg-(--color-progress-fill)",
|
|
2643
2749
|
success: "bg-(--color-progress-fill-success)",
|
|
@@ -2645,7 +2751,7 @@ var fillStyles = {
|
|
|
2645
2751
|
danger: "bg-(--color-progress-fill-danger)",
|
|
2646
2752
|
neutral: "bg-muted-foreground"
|
|
2647
2753
|
};
|
|
2648
|
-
var
|
|
2754
|
+
var sizeStyles7 = {
|
|
2649
2755
|
sm: "h-1.5",
|
|
2650
2756
|
md: "h-3",
|
|
2651
2757
|
lg: "h-4"
|
|
@@ -2660,12 +2766,12 @@ function ProgressBar({
|
|
|
2660
2766
|
className
|
|
2661
2767
|
}) {
|
|
2662
2768
|
const clampedValue = Math.min(100, Math.max(0, value));
|
|
2663
|
-
return /* @__PURE__ */
|
|
2664
|
-
(label || description || showValue) && /* @__PURE__ */
|
|
2665
|
-
/* @__PURE__ */
|
|
2666
|
-
/* @__PURE__ */
|
|
2769
|
+
return /* @__PURE__ */ jsxs26("div", { className: twMerge18("w-full", className), children: [
|
|
2770
|
+
(label || description || showValue) && /* @__PURE__ */ jsxs26("div", { className: "flex items-center justify-between mb-2", children: [
|
|
2771
|
+
/* @__PURE__ */ jsx37("span", { className: "text-sm font-medium text-foreground", children: label }),
|
|
2772
|
+
/* @__PURE__ */ jsx37("span", { className: "text-sm text-muted-foreground", children: description ?? (showValue ? `${clampedValue}%` : null) })
|
|
2667
2773
|
] }),
|
|
2668
|
-
/* @__PURE__ */
|
|
2774
|
+
/* @__PURE__ */ jsx37(
|
|
2669
2775
|
"div",
|
|
2670
2776
|
{
|
|
2671
2777
|
role: "progressbar",
|
|
@@ -2673,14 +2779,14 @@ function ProgressBar({
|
|
|
2673
2779
|
"aria-valuemin": 0,
|
|
2674
2780
|
"aria-valuemax": 100,
|
|
2675
2781
|
"aria-label": label ?? "Progress",
|
|
2676
|
-
className:
|
|
2782
|
+
className: twMerge18(
|
|
2677
2783
|
"w-full rounded-full bg-(--color-progress-track)",
|
|
2678
|
-
|
|
2784
|
+
sizeStyles7[size]
|
|
2679
2785
|
),
|
|
2680
|
-
children: /* @__PURE__ */
|
|
2786
|
+
children: /* @__PURE__ */ jsx37(
|
|
2681
2787
|
"div",
|
|
2682
2788
|
{
|
|
2683
|
-
className:
|
|
2789
|
+
className: twMerge18(
|
|
2684
2790
|
"h-full rounded-full transition-all duration-300",
|
|
2685
2791
|
fillStyles[variant]
|
|
2686
2792
|
),
|
|
@@ -2693,37 +2799,36 @@ function ProgressBar({
|
|
|
2693
2799
|
}
|
|
2694
2800
|
|
|
2695
2801
|
// src/components/Banner/Banner.tsx
|
|
2696
|
-
import { useState as
|
|
2802
|
+
import { useState as useState8 } from "react";
|
|
2697
2803
|
import {
|
|
2698
|
-
Info as
|
|
2699
|
-
AlertTriangle,
|
|
2700
|
-
AlertCircle,
|
|
2701
|
-
CheckCircle2
|
|
2702
|
-
X as X3
|
|
2804
|
+
Info as Info3,
|
|
2805
|
+
AlertTriangle as AlertTriangle2,
|
|
2806
|
+
AlertCircle as AlertCircle2,
|
|
2807
|
+
CheckCircle2 as CheckCircle22
|
|
2703
2808
|
} from "lucide-react";
|
|
2704
|
-
import { twMerge as
|
|
2705
|
-
import { jsx as
|
|
2809
|
+
import { twMerge as twMerge19 } from "tailwind-merge";
|
|
2810
|
+
import { jsx as jsx38, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
2706
2811
|
var variantConfig2 = {
|
|
2707
2812
|
info: {
|
|
2708
|
-
icon:
|
|
2813
|
+
icon: Info3,
|
|
2709
2814
|
containerClass: "bg-info-surface border-info-border text-info-surface-foreground",
|
|
2710
2815
|
iconClass: "text-info",
|
|
2711
2816
|
role: "status"
|
|
2712
2817
|
},
|
|
2713
2818
|
warning: {
|
|
2714
|
-
icon:
|
|
2819
|
+
icon: AlertTriangle2,
|
|
2715
2820
|
containerClass: "bg-warning-surface border-warning-border text-warning-surface-foreground",
|
|
2716
2821
|
iconClass: "text-warning",
|
|
2717
2822
|
role: "alert"
|
|
2718
2823
|
},
|
|
2719
2824
|
danger: {
|
|
2720
|
-
icon:
|
|
2825
|
+
icon: AlertCircle2,
|
|
2721
2826
|
containerClass: "bg-destructive-surface border-destructive-border text-destructive-surface-foreground",
|
|
2722
2827
|
iconClass: "text-destructive",
|
|
2723
2828
|
role: "alert"
|
|
2724
2829
|
},
|
|
2725
2830
|
success: {
|
|
2726
|
-
icon:
|
|
2831
|
+
icon: CheckCircle22,
|
|
2727
2832
|
containerClass: "bg-success-surface border-success-border text-success-surface-foreground",
|
|
2728
2833
|
iconClass: "text-success",
|
|
2729
2834
|
role: "status"
|
|
@@ -2738,48 +2843,48 @@ function Banner({
|
|
|
2738
2843
|
onDismiss,
|
|
2739
2844
|
className
|
|
2740
2845
|
}) {
|
|
2741
|
-
const [dismissed, setDismissed] =
|
|
2846
|
+
const [dismissed, setDismissed] = useState8(false);
|
|
2742
2847
|
if (dismissed) return null;
|
|
2743
2848
|
const config = variantConfig2[variant];
|
|
2744
|
-
const
|
|
2849
|
+
const resolvedIcon = icon ?? config.icon;
|
|
2745
2850
|
const handleDismiss = () => {
|
|
2746
2851
|
setDismissed(true);
|
|
2747
2852
|
onDismiss?.();
|
|
2748
2853
|
};
|
|
2749
|
-
return /* @__PURE__ */
|
|
2854
|
+
return /* @__PURE__ */ jsxs27(
|
|
2750
2855
|
"div",
|
|
2751
2856
|
{
|
|
2752
2857
|
role: config.role,
|
|
2753
|
-
className:
|
|
2858
|
+
className: twMerge19(
|
|
2754
2859
|
"flex items-start gap-3 rounded-lg border px-4 py-3",
|
|
2755
2860
|
"text-sm",
|
|
2756
2861
|
config.containerClass,
|
|
2757
2862
|
className
|
|
2758
2863
|
),
|
|
2759
2864
|
children: [
|
|
2760
|
-
/* @__PURE__ */
|
|
2761
|
-
|
|
2865
|
+
/* @__PURE__ */ jsx38(
|
|
2866
|
+
Icon,
|
|
2762
2867
|
{
|
|
2763
|
-
|
|
2764
|
-
|
|
2765
|
-
"
|
|
2868
|
+
icon: resolvedIcon,
|
|
2869
|
+
size: "md",
|
|
2870
|
+
className: twMerge19("mt-0.5", config.iconClass)
|
|
2766
2871
|
}
|
|
2767
2872
|
),
|
|
2768
|
-
/* @__PURE__ */
|
|
2769
|
-
title && /* @__PURE__ */
|
|
2873
|
+
/* @__PURE__ */ jsxs27("div", { className: "flex-1", children: [
|
|
2874
|
+
title && /* @__PURE__ */ jsxs27("span", { className: "font-medium", children: [
|
|
2770
2875
|
title,
|
|
2771
2876
|
" \u2014 "
|
|
2772
2877
|
] }),
|
|
2773
2878
|
children
|
|
2774
2879
|
] }),
|
|
2775
|
-
dismissible && /* @__PURE__ */
|
|
2880
|
+
dismissible && /* @__PURE__ */ jsx38(
|
|
2776
2881
|
"button",
|
|
2777
2882
|
{
|
|
2778
2883
|
type: "button",
|
|
2779
2884
|
onClick: handleDismiss,
|
|
2780
2885
|
className: "shrink-0 rounded-sm p-0.5 opacity-70 hover:opacity-100 transition-opacity outline-none focus-visible:ring-2 focus-visible:ring-current",
|
|
2781
2886
|
"aria-label": "Dismiss",
|
|
2782
|
-
children: /* @__PURE__ */
|
|
2887
|
+
children: /* @__PURE__ */ jsx38(Icon, { icon: "X", size: "sm" })
|
|
2783
2888
|
}
|
|
2784
2889
|
)
|
|
2785
2890
|
]
|
|
@@ -2788,8 +2893,8 @@ function Banner({
|
|
|
2788
2893
|
}
|
|
2789
2894
|
|
|
2790
2895
|
// src/components/MetricCard/MetricCard.tsx
|
|
2791
|
-
import { twMerge as
|
|
2792
|
-
import { Fragment as Fragment9, jsx as
|
|
2896
|
+
import { twMerge as twMerge20 } from "tailwind-merge";
|
|
2897
|
+
import { Fragment as Fragment9, jsx as jsx39, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
2793
2898
|
var sizeConfig = {
|
|
2794
2899
|
sm: {
|
|
2795
2900
|
padding: "p-3",
|
|
@@ -2811,58 +2916,58 @@ function MetricCard({
|
|
|
2811
2916
|
className
|
|
2812
2917
|
}) {
|
|
2813
2918
|
const config = sizeConfig[size];
|
|
2814
|
-
const containerClass =
|
|
2919
|
+
const containerClass = twMerge20(
|
|
2815
2920
|
"bg-background border border-border rounded-lg shadow-sm",
|
|
2816
2921
|
config.padding,
|
|
2817
2922
|
href && "block transition-shadow hover:shadow-md hover:border-ring focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 outline-none",
|
|
2818
2923
|
className
|
|
2819
2924
|
);
|
|
2820
|
-
const content = /* @__PURE__ */
|
|
2821
|
-
/* @__PURE__ */
|
|
2822
|
-
/* @__PURE__ */
|
|
2925
|
+
const content = /* @__PURE__ */ jsxs28(Fragment9, { children: [
|
|
2926
|
+
/* @__PURE__ */ jsx39("div", { className: twMerge20(config.labelClass, "text-muted-foreground"), children: label }),
|
|
2927
|
+
/* @__PURE__ */ jsx39(
|
|
2823
2928
|
"div",
|
|
2824
2929
|
{
|
|
2825
|
-
className:
|
|
2930
|
+
className: twMerge20(
|
|
2826
2931
|
config.valueClass,
|
|
2827
2932
|
"font-semibold text-foreground mt-1 tabular-nums"
|
|
2828
2933
|
),
|
|
2829
2934
|
children: value
|
|
2830
2935
|
}
|
|
2831
2936
|
),
|
|
2832
|
-
secondary && /* @__PURE__ */
|
|
2937
|
+
secondary && /* @__PURE__ */ jsx39("div", { className: "mt-1 text-sm", children: secondary })
|
|
2833
2938
|
] });
|
|
2834
2939
|
if (href) {
|
|
2835
|
-
return /* @__PURE__ */
|
|
2940
|
+
return /* @__PURE__ */ jsx39("a", { href, className: containerClass, children: content });
|
|
2836
2941
|
}
|
|
2837
|
-
return /* @__PURE__ */
|
|
2942
|
+
return /* @__PURE__ */ jsx39("div", { className: containerClass, children: content });
|
|
2838
2943
|
}
|
|
2839
2944
|
|
|
2840
2945
|
// src/components/SectionHeader/SectionHeader.tsx
|
|
2841
|
-
import { twMerge as
|
|
2842
|
-
import { jsx as
|
|
2946
|
+
import { twMerge as twMerge21 } from "tailwind-merge";
|
|
2947
|
+
import { jsx as jsx40, jsxs as jsxs29 } from "react/jsx-runtime";
|
|
2843
2948
|
function SectionHeader({
|
|
2844
2949
|
title,
|
|
2845
2950
|
children,
|
|
2846
2951
|
className
|
|
2847
2952
|
}) {
|
|
2848
|
-
return /* @__PURE__ */
|
|
2953
|
+
return /* @__PURE__ */ jsxs29(
|
|
2849
2954
|
"div",
|
|
2850
2955
|
{
|
|
2851
|
-
className:
|
|
2956
|
+
className: twMerge21(
|
|
2852
2957
|
"flex flex-wrap items-center gap-3 py-4",
|
|
2853
2958
|
className
|
|
2854
2959
|
),
|
|
2855
2960
|
children: [
|
|
2856
|
-
/* @__PURE__ */
|
|
2857
|
-
children && /* @__PURE__ */
|
|
2961
|
+
/* @__PURE__ */ jsx40(H2, { children: title }),
|
|
2962
|
+
children && /* @__PURE__ */ jsx40("div", { className: "ml-auto flex flex-wrap items-center gap-2", children })
|
|
2858
2963
|
]
|
|
2859
2964
|
}
|
|
2860
2965
|
);
|
|
2861
2966
|
}
|
|
2862
2967
|
|
|
2863
2968
|
// src/components/Pill/Pill.tsx
|
|
2864
|
-
import { twMerge as
|
|
2865
|
-
import { jsx as
|
|
2969
|
+
import { twMerge as twMerge22 } from "tailwind-merge";
|
|
2970
|
+
import { jsx as jsx41 } from "react/jsx-runtime";
|
|
2866
2971
|
var hashColors = {
|
|
2867
2972
|
purple: "bg-(--color-badge-purple-bg) text-(--color-badge-purple-text) border-(--color-badge-purple-text)/20",
|
|
2868
2973
|
teal: "bg-(--color-badge-teal-bg) text-(--color-badge-teal-text) border-(--color-badge-teal-text)/20",
|
|
@@ -2888,7 +2993,7 @@ function Pill({
|
|
|
2888
2993
|
className,
|
|
2889
2994
|
...rest
|
|
2890
2995
|
}) {
|
|
2891
|
-
const cx =
|
|
2996
|
+
const cx = twMerge22(
|
|
2892
2997
|
`
|
|
2893
2998
|
inline-flex items-center
|
|
2894
2999
|
rounded-full
|
|
@@ -2900,12 +3005,12 @@ function Pill({
|
|
|
2900
3005
|
colorStyles[color],
|
|
2901
3006
|
className
|
|
2902
3007
|
);
|
|
2903
|
-
return /* @__PURE__ */
|
|
3008
|
+
return /* @__PURE__ */ jsx41("span", { className: cx, ...rest, children });
|
|
2904
3009
|
}
|
|
2905
3010
|
|
|
2906
3011
|
// src/components/Pill/PathPill.tsx
|
|
2907
|
-
import { twMerge as
|
|
2908
|
-
import { jsx as
|
|
3012
|
+
import { twMerge as twMerge23 } from "tailwind-merge";
|
|
3013
|
+
import { jsx as jsx42 } from "react/jsx-runtime";
|
|
2909
3014
|
function PathPill({
|
|
2910
3015
|
children,
|
|
2911
3016
|
visibleCount,
|
|
@@ -2917,17 +3022,17 @@ function PathPill({
|
|
|
2917
3022
|
const effectiveVisible = visibleCount ?? segments.length;
|
|
2918
3023
|
const dotCount = Math.max(0, segments.length - effectiveVisible);
|
|
2919
3024
|
const fullPath = segments.join(" / ");
|
|
2920
|
-
return /* @__PURE__ */
|
|
3025
|
+
return /* @__PURE__ */ jsx42(
|
|
2921
3026
|
"div",
|
|
2922
3027
|
{
|
|
2923
|
-
className:
|
|
3028
|
+
className: twMerge23("relative flex", className),
|
|
2924
3029
|
"aria-label": `Path: ${fullPath}`,
|
|
2925
3030
|
children: segments.map((segment, i) => {
|
|
2926
3031
|
const isCollapsed = i < dotCount;
|
|
2927
3032
|
const isLast = i === segments.length - 1;
|
|
2928
|
-
const cx =
|
|
3033
|
+
const cx = twMerge23(!isLast && "pr-5 -mr-4", isCollapsed && "pr-3");
|
|
2929
3034
|
const color = colorFn ? colorFn(segment, i) : pillColorFromName(segment);
|
|
2930
|
-
return /* @__PURE__ */
|
|
3035
|
+
return /* @__PURE__ */ jsx42(
|
|
2931
3036
|
Pill,
|
|
2932
3037
|
{
|
|
2933
3038
|
className: cx,
|
|
@@ -2943,9 +3048,9 @@ function PathPill({
|
|
|
2943
3048
|
}
|
|
2944
3049
|
|
|
2945
3050
|
// src/components/FormWizard/FormWizard.tsx
|
|
2946
|
-
import { createContext as
|
|
2947
|
-
import { jsx as
|
|
2948
|
-
var FormWizardContext =
|
|
3051
|
+
import { createContext as createContext4, useContext as useContext4, useCallback as useCallback5, useMemo } from "react";
|
|
3052
|
+
import { jsx as jsx43 } from "react/jsx-runtime";
|
|
3053
|
+
var FormWizardContext = createContext4({
|
|
2949
3054
|
currentStep: 0,
|
|
2950
3055
|
totalSteps: 1,
|
|
2951
3056
|
canGoBack: false,
|
|
@@ -2954,7 +3059,7 @@ var FormWizardContext = createContext6({
|
|
|
2954
3059
|
isLastStep: true
|
|
2955
3060
|
});
|
|
2956
3061
|
function useFormWizard() {
|
|
2957
|
-
return
|
|
3062
|
+
return useContext4(FormWizardContext);
|
|
2958
3063
|
}
|
|
2959
3064
|
function FormWizard({
|
|
2960
3065
|
currentStep,
|
|
@@ -2964,7 +3069,7 @@ function FormWizard({
|
|
|
2964
3069
|
}) {
|
|
2965
3070
|
const canGoBack = currentStep > 0;
|
|
2966
3071
|
const isLastStep = currentStep >= totalSteps - 1;
|
|
2967
|
-
const goBack =
|
|
3072
|
+
const goBack = useCallback5(() => {
|
|
2968
3073
|
if (currentStep > 0) {
|
|
2969
3074
|
onStepChange(currentStep - 1);
|
|
2970
3075
|
}
|
|
@@ -2979,13 +3084,13 @@ function FormWizard({
|
|
|
2979
3084
|
}),
|
|
2980
3085
|
[currentStep, totalSteps, canGoBack, goBack, isLastStep]
|
|
2981
3086
|
);
|
|
2982
|
-
return /* @__PURE__ */
|
|
3087
|
+
return /* @__PURE__ */ jsx43(FormWizardContext.Provider, { value, children });
|
|
2983
3088
|
}
|
|
2984
3089
|
|
|
2985
3090
|
// src/components/FormWizard/FormWizardProgress.tsx
|
|
2986
|
-
import { jsx as
|
|
3091
|
+
import { jsx as jsx44, jsxs as jsxs30 } from "react/jsx-runtime";
|
|
2987
3092
|
function CheckIcon() {
|
|
2988
|
-
return /* @__PURE__ */
|
|
3093
|
+
return /* @__PURE__ */ jsx44(
|
|
2989
3094
|
"svg",
|
|
2990
3095
|
{
|
|
2991
3096
|
"aria-hidden": "true",
|
|
@@ -2996,24 +3101,24 @@ function CheckIcon() {
|
|
|
2996
3101
|
strokeWidth: "2",
|
|
2997
3102
|
strokeLinecap: "round",
|
|
2998
3103
|
strokeLinejoin: "round",
|
|
2999
|
-
children: /* @__PURE__ */
|
|
3104
|
+
children: /* @__PURE__ */ jsx44("path", { d: "M3 8.5l3.5 3.5 6.5-7" })
|
|
3000
3105
|
}
|
|
3001
3106
|
);
|
|
3002
3107
|
}
|
|
3003
3108
|
function FormWizardProgress({ labels }) {
|
|
3004
3109
|
const { currentStep, totalSteps } = useFormWizard();
|
|
3005
|
-
return /* @__PURE__ */
|
|
3110
|
+
return /* @__PURE__ */ jsx44("nav", { "aria-label": "Form progress", children: /* @__PURE__ */ jsx44("ol", { className: "flex items-start", role: "list", children: labels.map((label, index) => {
|
|
3006
3111
|
const isCompleted = index < currentStep;
|
|
3007
3112
|
const isCurrent = index === currentStep;
|
|
3008
3113
|
const isFuture = index > currentStep;
|
|
3009
|
-
return /* @__PURE__ */
|
|
3114
|
+
return /* @__PURE__ */ jsxs30(
|
|
3010
3115
|
"li",
|
|
3011
3116
|
{
|
|
3012
3117
|
className: "flex flex-1 flex-col items-center",
|
|
3013
3118
|
"aria-current": isCurrent ? "step" : void 0,
|
|
3014
3119
|
children: [
|
|
3015
|
-
/* @__PURE__ */
|
|
3016
|
-
index > 0 ? /* @__PURE__ */
|
|
3120
|
+
/* @__PURE__ */ jsxs30("div", { className: "flex w-full items-center", children: [
|
|
3121
|
+
index > 0 ? /* @__PURE__ */ jsx44(
|
|
3017
3122
|
"div",
|
|
3018
3123
|
{
|
|
3019
3124
|
"aria-hidden": "true",
|
|
@@ -3022,8 +3127,8 @@ function FormWizardProgress({ labels }) {
|
|
|
3022
3127
|
index <= currentStep ? "bg-primary" : "bg-border"
|
|
3023
3128
|
].join(" ")
|
|
3024
3129
|
}
|
|
3025
|
-
) : /* @__PURE__ */
|
|
3026
|
-
/* @__PURE__ */
|
|
3130
|
+
) : /* @__PURE__ */ jsx44("div", { className: "flex-1", "aria-hidden": "true" }),
|
|
3131
|
+
/* @__PURE__ */ jsx44(
|
|
3027
3132
|
"div",
|
|
3028
3133
|
{
|
|
3029
3134
|
className: [
|
|
@@ -3035,10 +3140,10 @@ function FormWizardProgress({ labels }) {
|
|
|
3035
3140
|
isFuture ? "border-2 border-border bg-background text-muted-foreground" : ""
|
|
3036
3141
|
].join(" "),
|
|
3037
3142
|
"aria-hidden": "true",
|
|
3038
|
-
children: isCompleted ? /* @__PURE__ */
|
|
3143
|
+
children: isCompleted ? /* @__PURE__ */ jsx44(CheckIcon, {}) : index + 1
|
|
3039
3144
|
}
|
|
3040
3145
|
),
|
|
3041
|
-
index < totalSteps - 1 ? /* @__PURE__ */
|
|
3146
|
+
index < totalSteps - 1 ? /* @__PURE__ */ jsx44(
|
|
3042
3147
|
"div",
|
|
3043
3148
|
{
|
|
3044
3149
|
"aria-hidden": "true",
|
|
@@ -3047,9 +3152,9 @@ function FormWizardProgress({ labels }) {
|
|
|
3047
3152
|
index < currentStep ? "bg-primary" : "bg-border"
|
|
3048
3153
|
].join(" ")
|
|
3049
3154
|
}
|
|
3050
|
-
) : /* @__PURE__ */
|
|
3155
|
+
) : /* @__PURE__ */ jsx44("div", { className: "flex-1", "aria-hidden": "true" })
|
|
3051
3156
|
] }),
|
|
3052
|
-
/* @__PURE__ */
|
|
3157
|
+
/* @__PURE__ */ jsx44(
|
|
3053
3158
|
"span",
|
|
3054
3159
|
{
|
|
3055
3160
|
className: [
|
|
@@ -3067,15 +3172,15 @@ function FormWizardProgress({ labels }) {
|
|
|
3067
3172
|
}
|
|
3068
3173
|
|
|
3069
3174
|
// src/components/FormWizard/FormWizardNav.tsx
|
|
3070
|
-
import { jsx as
|
|
3175
|
+
import { jsx as jsx45, jsxs as jsxs31 } from "react/jsx-runtime";
|
|
3071
3176
|
function FormWizardNav({
|
|
3072
3177
|
onNext,
|
|
3073
3178
|
isSubmitting = false,
|
|
3074
3179
|
submitLabel = "Submit"
|
|
3075
3180
|
}) {
|
|
3076
3181
|
const { canGoBack, goBack, isLastStep } = useFormWizard();
|
|
3077
|
-
return /* @__PURE__ */
|
|
3078
|
-
canGoBack && /* @__PURE__ */
|
|
3182
|
+
return /* @__PURE__ */ jsxs31("div", { className: "flex items-center justify-end gap-3", children: [
|
|
3183
|
+
canGoBack && /* @__PURE__ */ jsx45(
|
|
3079
3184
|
Button,
|
|
3080
3185
|
{
|
|
3081
3186
|
variant: "secondary",
|
|
@@ -3085,7 +3190,7 @@ function FormWizardNav({
|
|
|
3085
3190
|
children: "Back"
|
|
3086
3191
|
}
|
|
3087
3192
|
),
|
|
3088
|
-
/* @__PURE__ */
|
|
3193
|
+
/* @__PURE__ */ jsx45(
|
|
3089
3194
|
Button,
|
|
3090
3195
|
{
|
|
3091
3196
|
variant: "primary",
|
|
@@ -3498,10 +3603,9 @@ export {
|
|
|
3498
3603
|
Icon,
|
|
3499
3604
|
IconButton,
|
|
3500
3605
|
IconButtonLink,
|
|
3606
|
+
IconButtonToggle,
|
|
3501
3607
|
Input,
|
|
3502
|
-
|
|
3503
|
-
InputGroup,
|
|
3504
|
-
InputGroupContext,
|
|
3608
|
+
InputPassword,
|
|
3505
3609
|
Label,
|
|
3506
3610
|
LineHeightNormal,
|
|
3507
3611
|
LineHeightRelaxed,
|
|
@@ -3516,7 +3620,7 @@ export {
|
|
|
3516
3620
|
MetricCard,
|
|
3517
3621
|
PathPill,
|
|
3518
3622
|
Pill,
|
|
3519
|
-
|
|
3623
|
+
Popover4 as Popover,
|
|
3520
3624
|
PopoverContent,
|
|
3521
3625
|
PopoverTrigger,
|
|
3522
3626
|
ProgressBar,
|
|
@@ -3542,14 +3646,12 @@ export {
|
|
|
3542
3646
|
Tab,
|
|
3543
3647
|
TabList,
|
|
3544
3648
|
TabPanel,
|
|
3545
|
-
Table,
|
|
3649
|
+
Table2 as Table,
|
|
3546
3650
|
TableBody,
|
|
3547
3651
|
TableHeader,
|
|
3548
3652
|
Tabs,
|
|
3549
3653
|
ToastProvider,
|
|
3550
3654
|
ToggleButton,
|
|
3551
|
-
ToggleButtonGroup,
|
|
3552
|
-
ToggleButtonGroupItem,
|
|
3553
3655
|
Tooltip,
|
|
3554
3656
|
TruncatedText,
|
|
3555
3657
|
Tab2 as UnstyledTab,
|
|
@@ -3557,9 +3659,10 @@ export {
|
|
|
3557
3659
|
TabPanel2 as UnstyledTabPanel,
|
|
3558
3660
|
Tabs2 as UnstyledTabs,
|
|
3559
3661
|
createToastBridge,
|
|
3662
|
+
iconRegistry,
|
|
3560
3663
|
pillColorFromName,
|
|
3664
|
+
useContextMenu,
|
|
3561
3665
|
useFormWizard,
|
|
3562
|
-
useInputGroup,
|
|
3563
3666
|
useToast
|
|
3564
3667
|
};
|
|
3565
3668
|
//# sourceMappingURL=index.js.map
|