@page-speed/forms 0.5.7 → 0.5.8
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/FormContext-089h0j0Q.d.ts +153 -0
- package/dist/FormContext-iHzBALZa.d.cts +153 -0
- package/dist/{chunk-A7R6GEMA.js → chunk-455PI4LV.js} +84 -3
- package/dist/chunk-455PI4LV.js.map +1 -0
- package/dist/{chunk-5WWMVS2I.js → chunk-4ROWNTY6.js} +334 -415
- package/dist/chunk-4ROWNTY6.js.map +1 -0
- package/dist/{chunk-FIDKDYT7.cjs → chunk-ED4UK63G.cjs} +439 -521
- package/dist/chunk-ED4UK63G.cjs.map +1 -0
- package/dist/chunk-IXHDJ7E5.js +263 -0
- package/dist/chunk-IXHDJ7E5.js.map +1 -0
- package/dist/{chunk-Q7VR374Y.js → chunk-MJYEXJ3U.js} +3 -3
- package/dist/{chunk-Q7VR374Y.js.map → chunk-MJYEXJ3U.js.map} +1 -1
- package/dist/{chunk-KPHMVGTU.cjs → chunk-MUBEMXI7.cjs} +6 -6
- package/dist/{chunk-KPHMVGTU.cjs.map → chunk-MUBEMXI7.cjs.map} +1 -1
- package/dist/chunk-Q7WXLZN5.cjs +287 -0
- package/dist/chunk-Q7WXLZN5.cjs.map +1 -0
- package/dist/{chunk-QQSBW6N3.cjs → chunk-QRI5TMES.cjs} +85 -2
- package/dist/chunk-QRI5TMES.cjs.map +1 -0
- package/dist/core.cjs +13 -9
- package/dist/core.d.cts +66 -141
- package/dist/core.d.ts +66 -141
- package/dist/core.js +3 -3
- package/dist/index.cjs +14 -14
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +3 -3
- package/dist/inputs.cjs +16 -16
- package/dist/inputs.d.cts +1 -1
- package/dist/inputs.d.ts +1 -1
- package/dist/inputs.js +2 -2
- package/dist/integration.cjs +17 -17
- package/dist/integration.d.cts +1 -1
- package/dist/integration.d.ts +1 -1
- package/dist/integration.js +3 -3
- package/dist/{types-CnOCn7b3.d.ts → types-BemGfSPA.d.cts} +27 -1
- package/dist/{types-CnOCn7b3.d.cts → types-BemGfSPA.d.ts} +27 -1
- package/dist/validation-rules.d.cts +1 -1
- package/dist/validation-rules.d.ts +1 -1
- package/dist/validation-utils.d.cts +1 -1
- package/dist/validation-utils.d.ts +1 -1
- package/dist/validation-valibot.d.cts +1 -1
- package/dist/validation-valibot.d.ts +1 -1
- package/dist/validation.d.cts +1 -1
- package/dist/validation.d.ts +1 -1
- package/package.json +1 -1
- package/dist/chunk-5WWMVS2I.js.map +0 -1
- package/dist/chunk-A7R6GEMA.js.map +0 -1
- package/dist/chunk-FIDKDYT7.cjs.map +0 -1
- package/dist/chunk-N2HOVRRN.js +0 -150
- package/dist/chunk-N2HOVRRN.js.map +0 -1
- package/dist/chunk-O4ZLR7AN.cjs +0 -173
- package/dist/chunk-O4ZLR7AN.cjs.map +0 -1
- package/dist/chunk-QQSBW6N3.cjs.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var chunkQRI5TMES_cjs = require('./chunk-QRI5TMES.cjs');
|
|
4
|
+
var React19 = require('react');
|
|
5
5
|
var radixUi = require('radix-ui');
|
|
6
6
|
var cmdk = require('cmdk');
|
|
7
7
|
var reactDirection = require('@radix-ui/react-direction');
|
|
@@ -26,95 +26,14 @@ function _interopNamespace(e) {
|
|
|
26
26
|
return Object.freeze(n);
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
var
|
|
29
|
+
var React19__namespace = /*#__PURE__*/_interopNamespace(React19);
|
|
30
30
|
|
|
31
|
-
var Input = React21__namespace.forwardRef(
|
|
32
|
-
({ className, type, ...props }, ref) => {
|
|
33
|
-
return /* @__PURE__ */ React21__namespace.createElement(
|
|
34
|
-
"input",
|
|
35
|
-
{
|
|
36
|
-
ref,
|
|
37
|
-
type,
|
|
38
|
-
"data-slot": "input",
|
|
39
|
-
className: chunkQQSBW6N3_cjs.cn(
|
|
40
|
-
// Core structure - no hardcoded colors, uses CSS variables
|
|
41
|
-
"flex h-9 w-full min-w-0 rounded-md border border-input",
|
|
42
|
-
"bg-transparent px-3 py-1 text-base shadow-sm",
|
|
43
|
-
"transition-colors outline-none md:text-sm",
|
|
44
|
-
// Focus state - uses ring-ring CSS variable (adapts to theme)
|
|
45
|
-
"focus-visible:ring-1 focus-visible:ring-ring",
|
|
46
|
-
// Error state - uses destructive CSS variables (adapts to theme)
|
|
47
|
-
"aria-invalid:border-destructive aria-invalid:ring-1 aria-invalid:ring-destructive",
|
|
48
|
-
// Disabled state - no color hardcoding
|
|
49
|
-
"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50",
|
|
50
|
-
// File input specific - inherits text color from parent
|
|
51
|
-
"file:inline-flex file:h-7 file:border-0 file:bg-transparent",
|
|
52
|
-
"file:text-sm file:font-medium",
|
|
53
|
-
// Autofill reset - prevents browser from overriding our dynamic colors
|
|
54
|
-
chunkQQSBW6N3_cjs.INPUT_AUTOFILL_RESET_CLASSES,
|
|
55
|
-
className
|
|
56
|
-
),
|
|
57
|
-
...props
|
|
58
|
-
}
|
|
59
|
-
);
|
|
60
|
-
}
|
|
61
|
-
);
|
|
62
|
-
Input.displayName = "Input";
|
|
63
|
-
|
|
64
|
-
// src/inputs/TextInput.tsx
|
|
65
|
-
function TextInput({
|
|
66
|
-
name,
|
|
67
|
-
value,
|
|
68
|
-
onChange,
|
|
69
|
-
onBlur,
|
|
70
|
-
placeholder,
|
|
71
|
-
disabled = false,
|
|
72
|
-
required = false,
|
|
73
|
-
error = false,
|
|
74
|
-
className = "",
|
|
75
|
-
type = "text",
|
|
76
|
-
id = "text",
|
|
77
|
-
...props
|
|
78
|
-
}) {
|
|
79
|
-
const handleChange = (e) => {
|
|
80
|
-
onChange(e.target.value);
|
|
81
|
-
};
|
|
82
|
-
const handleBlur = () => {
|
|
83
|
-
onBlur?.();
|
|
84
|
-
};
|
|
85
|
-
const hasValue = String(value ?? "").trim().length > 0;
|
|
86
|
-
return /* @__PURE__ */ React21__namespace.createElement(
|
|
87
|
-
Input,
|
|
88
|
-
{
|
|
89
|
-
type,
|
|
90
|
-
id,
|
|
91
|
-
name,
|
|
92
|
-
value: value ?? "",
|
|
93
|
-
onChange: handleChange,
|
|
94
|
-
onBlur: handleBlur,
|
|
95
|
-
placeholder,
|
|
96
|
-
disabled,
|
|
97
|
-
required,
|
|
98
|
-
className: chunkQQSBW6N3_cjs.cn(
|
|
99
|
-
// Valid value indicator - ring-2 when has value and no error
|
|
100
|
-
!error && hasValue && "ring-2 ring-ring",
|
|
101
|
-
// Error state - handled by Input component via aria-invalid
|
|
102
|
-
className
|
|
103
|
-
),
|
|
104
|
-
"aria-invalid": error || props["aria-invalid"],
|
|
105
|
-
"aria-describedby": props["aria-describedby"],
|
|
106
|
-
"aria-required": required || props["aria-required"],
|
|
107
|
-
...props
|
|
108
|
-
}
|
|
109
|
-
);
|
|
110
|
-
}
|
|
111
|
-
TextInput.displayName = "TextInput";
|
|
112
31
|
function Textarea({ className, ...props }) {
|
|
113
|
-
return /* @__PURE__ */
|
|
32
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
114
33
|
"textarea",
|
|
115
34
|
{
|
|
116
35
|
"data-slot": "textarea",
|
|
117
|
-
className:
|
|
36
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
118
37
|
// Core structure - uses CSS variables only
|
|
119
38
|
"flex field-sizing-content min-h-16 w-full rounded-md border border-input",
|
|
120
39
|
"bg-transparent px-3 py-2 text-base shadow-xs",
|
|
@@ -157,7 +76,7 @@ function TextArea({
|
|
|
157
76
|
onBlur?.();
|
|
158
77
|
};
|
|
159
78
|
const hasValue = String(value ?? "").trim().length > 0;
|
|
160
|
-
return /* @__PURE__ */
|
|
79
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
161
80
|
Textarea,
|
|
162
81
|
{
|
|
163
82
|
name,
|
|
@@ -167,7 +86,7 @@ function TextArea({
|
|
|
167
86
|
placeholder,
|
|
168
87
|
disabled,
|
|
169
88
|
required,
|
|
170
|
-
className:
|
|
89
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
171
90
|
// Valid value indicator - ring-2 when has value and no error
|
|
172
91
|
!error && hasValue && "ring-2 ring-ring",
|
|
173
92
|
// Error state - handled by Textarea component via aria-invalid
|
|
@@ -190,11 +109,11 @@ function Checkbox({
|
|
|
190
109
|
className,
|
|
191
110
|
...props
|
|
192
111
|
}) {
|
|
193
|
-
return /* @__PURE__ */
|
|
112
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
194
113
|
radixUi.Checkbox.Root,
|
|
195
114
|
{
|
|
196
115
|
"data-slot": "checkbox",
|
|
197
|
-
className:
|
|
116
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
198
117
|
// Core structure - uses CSS variables
|
|
199
118
|
"peer size-4 shrink-0 rounded-[4px] border border-input bg-transparent shadow-xs",
|
|
200
119
|
"transition-shadow outline-none",
|
|
@@ -211,13 +130,13 @@ function Checkbox({
|
|
|
211
130
|
),
|
|
212
131
|
...props
|
|
213
132
|
},
|
|
214
|
-
/* @__PURE__ */
|
|
133
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
215
134
|
radixUi.Checkbox.Indicator,
|
|
216
135
|
{
|
|
217
136
|
"data-slot": "checkbox-indicator",
|
|
218
137
|
className: "grid place-content-center text-current transition-none"
|
|
219
138
|
},
|
|
220
|
-
/* @__PURE__ */
|
|
139
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
221
140
|
"svg",
|
|
222
141
|
{
|
|
223
142
|
className: "size-3.5",
|
|
@@ -228,7 +147,7 @@ function Checkbox({
|
|
|
228
147
|
strokeLinecap: "round",
|
|
229
148
|
strokeLinejoin: "round"
|
|
230
149
|
},
|
|
231
|
-
/* @__PURE__ */
|
|
150
|
+
/* @__PURE__ */ React19__namespace.createElement("polyline", { points: "20 6 9 17 4 12" })
|
|
232
151
|
)
|
|
233
152
|
)
|
|
234
153
|
);
|
|
@@ -257,7 +176,7 @@ function Checkbox2({
|
|
|
257
176
|
onBlur?.();
|
|
258
177
|
};
|
|
259
178
|
const showChoiceCard = useChoiceCard || !!description;
|
|
260
|
-
const checkbox = /* @__PURE__ */
|
|
179
|
+
const checkbox = /* @__PURE__ */ React19__namespace.createElement(React19__namespace.Fragment, null, /* @__PURE__ */ React19__namespace.createElement(
|
|
261
180
|
"input",
|
|
262
181
|
{
|
|
263
182
|
type: "checkbox",
|
|
@@ -281,7 +200,7 @@ function Checkbox2({
|
|
|
281
200
|
border: 0
|
|
282
201
|
}
|
|
283
202
|
}
|
|
284
|
-
), /* @__PURE__ */
|
|
203
|
+
), /* @__PURE__ */ React19__namespace.createElement(
|
|
285
204
|
Checkbox,
|
|
286
205
|
{
|
|
287
206
|
id: checkboxId,
|
|
@@ -296,13 +215,13 @@ function Checkbox2({
|
|
|
296
215
|
}
|
|
297
216
|
));
|
|
298
217
|
if (!label) {
|
|
299
|
-
return /* @__PURE__ */
|
|
218
|
+
return /* @__PURE__ */ React19__namespace.createElement("div", { className }, checkbox);
|
|
300
219
|
}
|
|
301
|
-
return /* @__PURE__ */
|
|
302
|
-
|
|
220
|
+
return /* @__PURE__ */ React19__namespace.createElement("div", { className: "space-y-0", "data-invalid": error || void 0 }, /* @__PURE__ */ React19__namespace.createElement(
|
|
221
|
+
chunkQRI5TMES_cjs.FieldLabel,
|
|
303
222
|
{
|
|
304
223
|
htmlFor: checkboxId,
|
|
305
|
-
className:
|
|
224
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
306
225
|
"flex gap-3 p-3 duration-200 select-auto font-normal leading-normal",
|
|
307
226
|
showChoiceCard && "border rounded-lg hover:ring-2 hover:ring-ring/50",
|
|
308
227
|
showChoiceCard && value && "ring-2 ring-ring",
|
|
@@ -311,17 +230,17 @@ function Checkbox2({
|
|
|
311
230
|
className
|
|
312
231
|
)
|
|
313
232
|
},
|
|
314
|
-
/* @__PURE__ */
|
|
233
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
315
234
|
"div",
|
|
316
235
|
{
|
|
317
|
-
className:
|
|
236
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
318
237
|
"flex w-full gap-3",
|
|
319
238
|
showChoiceCard ? "items-start" : "items-center"
|
|
320
239
|
)
|
|
321
240
|
},
|
|
322
241
|
checkbox,
|
|
323
|
-
/* @__PURE__ */
|
|
324
|
-
|
|
242
|
+
/* @__PURE__ */ React19__namespace.createElement("div", { className: "flex-1 space-y-1" }, /* @__PURE__ */ React19__namespace.createElement("span", { className: "text-sm font-medium leading-none" }, label), description && /* @__PURE__ */ React19__namespace.createElement(
|
|
243
|
+
chunkQRI5TMES_cjs.FieldDescription,
|
|
325
244
|
{
|
|
326
245
|
id: `${checkboxId}-description`,
|
|
327
246
|
className: "leading-snug"
|
|
@@ -360,11 +279,11 @@ function CheckboxGroup({
|
|
|
360
279
|
).length;
|
|
361
280
|
const allSelected = selectedEnabledCount === enabledOptions.length;
|
|
362
281
|
const someSelected = selectedEnabledCount > 0 && !allSelected;
|
|
363
|
-
const useChoiceCard =
|
|
282
|
+
const useChoiceCard = React19__namespace.useMemo(() => {
|
|
364
283
|
if (!options) return false;
|
|
365
284
|
return options?.some((opt) => opt.description);
|
|
366
285
|
}, [options]);
|
|
367
|
-
const countableValue =
|
|
286
|
+
const countableValue = React19__namespace.useMemo(() => {
|
|
368
287
|
if (value?.length > 0) {
|
|
369
288
|
return value.length;
|
|
370
289
|
}
|
|
@@ -389,8 +308,8 @@ function CheckboxGroup({
|
|
|
389
308
|
onBlur?.();
|
|
390
309
|
};
|
|
391
310
|
const maxReached = Boolean(maxSelections && countableValue >= maxSelections);
|
|
392
|
-
const containerClass =
|
|
393
|
-
return
|
|
311
|
+
const containerClass = React19__namespace.useMemo(() => {
|
|
312
|
+
return chunkQRI5TMES_cjs.cn(
|
|
394
313
|
"w-full gap-3 grid grid-cols-1 border-0 m-0 p-0 min-w-0",
|
|
395
314
|
(layout === "grid" || layout === "inline") && "md:grid-cols-2",
|
|
396
315
|
className
|
|
@@ -398,7 +317,7 @@ function CheckboxGroup({
|
|
|
398
317
|
}, [layout, className]);
|
|
399
318
|
const groupDescriptionId = description ? `${name}-description` : void 0;
|
|
400
319
|
const groupAriaDescribedBy = [props["aria-describedby"], groupDescriptionId].filter(Boolean).join(" ") || void 0;
|
|
401
|
-
return /* @__PURE__ */
|
|
320
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
402
321
|
"fieldset",
|
|
403
322
|
{
|
|
404
323
|
className: containerClass,
|
|
@@ -408,8 +327,8 @@ function CheckboxGroup({
|
|
|
408
327
|
"aria-required": required || props["aria-required"],
|
|
409
328
|
"aria-label": typeof label === "string" ? label : props["aria-label"]
|
|
410
329
|
},
|
|
411
|
-
/* @__PURE__ */
|
|
412
|
-
|
|
330
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
331
|
+
chunkQRI5TMES_cjs.LabelGroup,
|
|
413
332
|
{
|
|
414
333
|
labelHtmlFor: name,
|
|
415
334
|
required,
|
|
@@ -419,7 +338,7 @@ function CheckboxGroup({
|
|
|
419
338
|
primary: label
|
|
420
339
|
}
|
|
421
340
|
),
|
|
422
|
-
showSelectAll && enabledOptions.length > 0 && /* @__PURE__ */
|
|
341
|
+
showSelectAll && enabledOptions.length > 0 && /* @__PURE__ */ React19__namespace.createElement(
|
|
423
342
|
Checkbox2,
|
|
424
343
|
{
|
|
425
344
|
name: `${name}-select-all`,
|
|
@@ -437,7 +356,7 @@ function CheckboxGroup({
|
|
|
437
356
|
options.map((option) => {
|
|
438
357
|
const isChecked = value.includes(option.value);
|
|
439
358
|
const isDisabled = disabled || option.disabled || maxReached && !isChecked;
|
|
440
|
-
return /* @__PURE__ */
|
|
359
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
441
360
|
Checkbox2,
|
|
442
361
|
{
|
|
443
362
|
key: option.value,
|
|
@@ -455,17 +374,17 @@ function CheckboxGroup({
|
|
|
455
374
|
}
|
|
456
375
|
);
|
|
457
376
|
}),
|
|
458
|
-
(minSelections || maxSelections) && /* @__PURE__ */
|
|
459
|
-
|
|
377
|
+
(minSelections || maxSelections) && /* @__PURE__ */ React19__namespace.createElement(
|
|
378
|
+
chunkQRI5TMES_cjs.FieldDescription,
|
|
460
379
|
{
|
|
461
|
-
className:
|
|
380
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
462
381
|
"p-2 rounded-lg border font-semibold mt-2 leading-snug",
|
|
463
382
|
minSelections && countableValue < minSelections ? "border-destructive bg-destructive/80 text-destructive-foreground" : "border-border bg-card text-card-foreground"
|
|
464
383
|
),
|
|
465
384
|
"aria-live": "polite"
|
|
466
385
|
},
|
|
467
|
-
minSelections && countableValue < minSelections && /* @__PURE__ */
|
|
468
|
-
maxSelections && /* @__PURE__ */
|
|
386
|
+
minSelections && countableValue < minSelections && /* @__PURE__ */ React19__namespace.createElement("span", null, "Select at least ", minSelections, " option", minSelections !== 1 ? "s" : ""),
|
|
387
|
+
maxSelections && /* @__PURE__ */ React19__namespace.createElement("span", null, countableValue, "/", maxSelections, " selected")
|
|
469
388
|
)
|
|
470
389
|
);
|
|
471
390
|
}
|
|
@@ -474,11 +393,11 @@ function RadioGroup({
|
|
|
474
393
|
className,
|
|
475
394
|
...props
|
|
476
395
|
}) {
|
|
477
|
-
return /* @__PURE__ */
|
|
396
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
478
397
|
radixUi.RadioGroup.Root,
|
|
479
398
|
{
|
|
480
399
|
"data-slot": "radio-group",
|
|
481
|
-
className:
|
|
400
|
+
className: chunkQRI5TMES_cjs.cn("grid gap-3", className),
|
|
482
401
|
...props
|
|
483
402
|
}
|
|
484
403
|
);
|
|
@@ -487,11 +406,11 @@ function RadioGroupItem({
|
|
|
487
406
|
className,
|
|
488
407
|
...props
|
|
489
408
|
}) {
|
|
490
|
-
return /* @__PURE__ */
|
|
409
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
491
410
|
radixUi.RadioGroup.Item,
|
|
492
411
|
{
|
|
493
412
|
"data-slot": "radio-group-item",
|
|
494
|
-
className:
|
|
413
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
495
414
|
// Core structure - uses CSS variables
|
|
496
415
|
"aspect-square size-4 shrink-0 rounded-full border border-input bg-transparent shadow-xs",
|
|
497
416
|
"text-primary transition-[color,box-shadow] outline-none",
|
|
@@ -505,19 +424,19 @@ function RadioGroupItem({
|
|
|
505
424
|
),
|
|
506
425
|
...props
|
|
507
426
|
},
|
|
508
|
-
/* @__PURE__ */
|
|
427
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
509
428
|
radixUi.RadioGroup.Indicator,
|
|
510
429
|
{
|
|
511
430
|
"data-slot": "radio-group-indicator",
|
|
512
431
|
className: "relative flex items-center justify-center"
|
|
513
432
|
},
|
|
514
|
-
/* @__PURE__ */
|
|
433
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
515
434
|
"svg",
|
|
516
435
|
{
|
|
517
436
|
className: "fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2",
|
|
518
437
|
viewBox: "0 0 24 24"
|
|
519
438
|
},
|
|
520
|
-
/* @__PURE__ */
|
|
439
|
+
/* @__PURE__ */ React19__namespace.createElement("circle", { cx: "12", cy: "12", r: "12" })
|
|
521
440
|
)
|
|
522
441
|
)
|
|
523
442
|
);
|
|
@@ -545,18 +464,18 @@ function Radio({
|
|
|
545
464
|
const handleBlur = () => {
|
|
546
465
|
onBlur?.();
|
|
547
466
|
};
|
|
548
|
-
const useChoiceCard =
|
|
467
|
+
const useChoiceCard = React19__namespace.useMemo(() => {
|
|
549
468
|
return options.some((option) => option.description);
|
|
550
469
|
}, [options]);
|
|
551
470
|
const groupDescriptionId = description ? `${name}-description` : void 0;
|
|
552
|
-
return /* @__PURE__ */
|
|
553
|
-
|
|
471
|
+
return /* @__PURE__ */ React19__namespace.createElement("div", { className: chunkQRI5TMES_cjs.cn("w-full", className), "data-invalid": error || void 0 }, (label || description) && /* @__PURE__ */ React19__namespace.createElement("div", { className: "mb-3 space-y-1" }, label && /* @__PURE__ */ React19__namespace.createElement("div", { className: "text-base font-medium leading-none" }, label), description && /* @__PURE__ */ React19__namespace.createElement(
|
|
472
|
+
chunkQRI5TMES_cjs.FieldDescription,
|
|
554
473
|
{
|
|
555
474
|
id: groupDescriptionId,
|
|
556
475
|
className: "leading-snug"
|
|
557
476
|
},
|
|
558
477
|
description
|
|
559
|
-
)), /* @__PURE__ */
|
|
478
|
+
)), /* @__PURE__ */ React19__namespace.createElement(
|
|
560
479
|
RadioGroup,
|
|
561
480
|
{
|
|
562
481
|
name,
|
|
@@ -565,7 +484,7 @@ function Radio({
|
|
|
565
484
|
onBlur: handleBlur,
|
|
566
485
|
disabled,
|
|
567
486
|
required,
|
|
568
|
-
className:
|
|
487
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
569
488
|
"gap-3",
|
|
570
489
|
layout === "grid" && "grid grid-cols-1 md:grid-cols-2",
|
|
571
490
|
layout === "inline" && "flex flex-wrap"
|
|
@@ -579,12 +498,12 @@ function Radio({
|
|
|
579
498
|
const isDisabled = disabled || option.disabled;
|
|
580
499
|
const radioId = `${name}-${option.value}`;
|
|
581
500
|
const hasDescription = !!option.description;
|
|
582
|
-
return /* @__PURE__ */
|
|
583
|
-
|
|
501
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
502
|
+
chunkQRI5TMES_cjs.FieldLabel,
|
|
584
503
|
{
|
|
585
504
|
key: option.value,
|
|
586
505
|
htmlFor: radioId,
|
|
587
|
-
className:
|
|
506
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
588
507
|
"flex gap-3 p-3 duration-200 select-auto font-normal leading-normal",
|
|
589
508
|
useChoiceCard && "border rounded-lg hover:ring-2 hover:ring-ring/50",
|
|
590
509
|
useChoiceCard && isSelected && "ring-2 ring-ring",
|
|
@@ -592,15 +511,15 @@ function Radio({
|
|
|
592
511
|
isDisabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer"
|
|
593
512
|
)
|
|
594
513
|
},
|
|
595
|
-
/* @__PURE__ */
|
|
514
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
596
515
|
"div",
|
|
597
516
|
{
|
|
598
|
-
className:
|
|
517
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
599
518
|
"flex w-full gap-3",
|
|
600
519
|
useChoiceCard ? "items-start" : "items-center"
|
|
601
520
|
)
|
|
602
521
|
},
|
|
603
|
-
/* @__PURE__ */
|
|
522
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
604
523
|
RadioGroupItem,
|
|
605
524
|
{
|
|
606
525
|
value: option.value,
|
|
@@ -610,8 +529,8 @@ function Radio({
|
|
|
610
529
|
"aria-describedby": hasDescription ? `${radioId}-description` : void 0
|
|
611
530
|
}
|
|
612
531
|
),
|
|
613
|
-
/* @__PURE__ */
|
|
614
|
-
|
|
532
|
+
/* @__PURE__ */ React19__namespace.createElement("div", { className: "flex-1 space-y-1" }, /* @__PURE__ */ React19__namespace.createElement("span", { className: "text-sm font-medium leading-none" }, option.label), option.description && /* @__PURE__ */ React19__namespace.createElement(
|
|
533
|
+
chunkQRI5TMES_cjs.FieldDescription,
|
|
615
534
|
{
|
|
616
535
|
id: `${radioId}-description`,
|
|
617
536
|
className: "leading-snug"
|
|
@@ -629,12 +548,12 @@ function Switch({
|
|
|
629
548
|
size = "default",
|
|
630
549
|
...props
|
|
631
550
|
}) {
|
|
632
|
-
return /* @__PURE__ */
|
|
551
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
633
552
|
radixUi.Switch.Root,
|
|
634
553
|
{
|
|
635
554
|
"data-slot": "switch",
|
|
636
555
|
"data-size": size,
|
|
637
|
-
className:
|
|
556
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
638
557
|
// Core structure - uses CSS variables
|
|
639
558
|
"peer group/switch inline-flex shrink-0 items-center rounded-full",
|
|
640
559
|
"border border-transparent shadow-xs transition-all outline-none",
|
|
@@ -651,11 +570,11 @@ function Switch({
|
|
|
651
570
|
),
|
|
652
571
|
...props
|
|
653
572
|
},
|
|
654
|
-
/* @__PURE__ */
|
|
573
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
655
574
|
radixUi.Switch.Thumb,
|
|
656
575
|
{
|
|
657
576
|
"data-slot": "switch-thumb",
|
|
658
|
-
className:
|
|
577
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
659
578
|
// Thumb appearance - inherits from parent theme
|
|
660
579
|
"bg-background pointer-events-none block rounded-full ring-0 transition-transform",
|
|
661
580
|
// Size variants
|
|
@@ -690,7 +609,7 @@ function Switch2({
|
|
|
690
609
|
const handleBlur = () => {
|
|
691
610
|
onBlur?.();
|
|
692
611
|
};
|
|
693
|
-
const switchElement = /* @__PURE__ */
|
|
612
|
+
const switchElement = /* @__PURE__ */ React19__namespace.createElement(
|
|
694
613
|
Switch,
|
|
695
614
|
{
|
|
696
615
|
id: switchId,
|
|
@@ -706,21 +625,21 @@ function Switch2({
|
|
|
706
625
|
}
|
|
707
626
|
);
|
|
708
627
|
if (!label) {
|
|
709
|
-
return /* @__PURE__ */
|
|
628
|
+
return /* @__PURE__ */ React19__namespace.createElement(chunkQRI5TMES_cjs.Field, { className }, switchElement);
|
|
710
629
|
}
|
|
711
|
-
return /* @__PURE__ */
|
|
712
|
-
|
|
630
|
+
return /* @__PURE__ */ React19__namespace.createElement(chunkQRI5TMES_cjs.Field, { className: "gap-0", invalid: Boolean(error) }, /* @__PURE__ */ React19__namespace.createElement(
|
|
631
|
+
chunkQRI5TMES_cjs.FieldLabel,
|
|
713
632
|
{
|
|
714
633
|
htmlFor: switchId,
|
|
715
|
-
className:
|
|
634
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
716
635
|
"flex items-center gap-3 cursor-pointer select-auto font-normal leading-normal",
|
|
717
636
|
disabled && "opacity-50 cursor-not-allowed",
|
|
718
637
|
className
|
|
719
638
|
)
|
|
720
639
|
},
|
|
721
640
|
switchElement,
|
|
722
|
-
/* @__PURE__ */
|
|
723
|
-
|
|
641
|
+
/* @__PURE__ */ React19__namespace.createElement(chunkQRI5TMES_cjs.Field, { className: "gap-1" }, /* @__PURE__ */ React19__namespace.createElement("span", { className: "text-sm font-medium leading-none" }, label), description && /* @__PURE__ */ React19__namespace.createElement(
|
|
642
|
+
chunkQRI5TMES_cjs.FieldDescription,
|
|
724
643
|
{
|
|
725
644
|
id: `${switchId}-description`,
|
|
726
645
|
className: "leading-snug"
|
|
@@ -733,17 +652,17 @@ Switch2.displayName = "Switch";
|
|
|
733
652
|
function Select({
|
|
734
653
|
...props
|
|
735
654
|
}) {
|
|
736
|
-
return /* @__PURE__ */
|
|
655
|
+
return /* @__PURE__ */ React19__namespace.createElement(radixUi.Select.Root, { "data-slot": "select", ...props });
|
|
737
656
|
}
|
|
738
657
|
function SelectGroup({
|
|
739
658
|
...props
|
|
740
659
|
}) {
|
|
741
|
-
return /* @__PURE__ */
|
|
660
|
+
return /* @__PURE__ */ React19__namespace.createElement(radixUi.Select.Group, { "data-slot": "select-group", ...props });
|
|
742
661
|
}
|
|
743
662
|
function SelectValue({
|
|
744
663
|
...props
|
|
745
664
|
}) {
|
|
746
|
-
return /* @__PURE__ */
|
|
665
|
+
return /* @__PURE__ */ React19__namespace.createElement(radixUi.Select.Value, { "data-slot": "select-value", ...props });
|
|
747
666
|
}
|
|
748
667
|
function SelectTrigger({
|
|
749
668
|
className,
|
|
@@ -751,12 +670,12 @@ function SelectTrigger({
|
|
|
751
670
|
children,
|
|
752
671
|
...props
|
|
753
672
|
}) {
|
|
754
|
-
return /* @__PURE__ */
|
|
673
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
755
674
|
radixUi.Select.Trigger,
|
|
756
675
|
{
|
|
757
676
|
"data-slot": "select-trigger",
|
|
758
677
|
"data-size": size,
|
|
759
|
-
className:
|
|
678
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
760
679
|
// Core structure - uses CSS variables
|
|
761
680
|
"flex w-full items-center justify-between gap-2 rounded-md border border-input",
|
|
762
681
|
"bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs",
|
|
@@ -781,7 +700,7 @@ function SelectTrigger({
|
|
|
781
700
|
...props
|
|
782
701
|
},
|
|
783
702
|
children,
|
|
784
|
-
/* @__PURE__ */
|
|
703
|
+
/* @__PURE__ */ React19__namespace.createElement(radixUi.Select.Icon, { asChild: true }, /* @__PURE__ */ React19__namespace.createElement(
|
|
785
704
|
"svg",
|
|
786
705
|
{
|
|
787
706
|
className: "size-4 opacity-50",
|
|
@@ -792,7 +711,7 @@ function SelectTrigger({
|
|
|
792
711
|
strokeLinecap: "round",
|
|
793
712
|
strokeLinejoin: "round"
|
|
794
713
|
},
|
|
795
|
-
/* @__PURE__ */
|
|
714
|
+
/* @__PURE__ */ React19__namespace.createElement("polyline", { points: "6 9 12 15 18 9" })
|
|
796
715
|
))
|
|
797
716
|
);
|
|
798
717
|
}
|
|
@@ -803,11 +722,11 @@ function SelectContent({
|
|
|
803
722
|
align = "center",
|
|
804
723
|
...props
|
|
805
724
|
}) {
|
|
806
|
-
return /* @__PURE__ */
|
|
725
|
+
return /* @__PURE__ */ React19__namespace.createElement(radixUi.Select.Portal, null, /* @__PURE__ */ React19__namespace.createElement(
|
|
807
726
|
radixUi.Select.Content,
|
|
808
727
|
{
|
|
809
728
|
"data-slot": "select-content",
|
|
810
|
-
className:
|
|
729
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
811
730
|
"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",
|
|
812
731
|
position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
|
|
813
732
|
className
|
|
@@ -816,29 +735,29 @@ function SelectContent({
|
|
|
816
735
|
align,
|
|
817
736
|
...props
|
|
818
737
|
},
|
|
819
|
-
/* @__PURE__ */
|
|
820
|
-
/* @__PURE__ */
|
|
738
|
+
/* @__PURE__ */ React19__namespace.createElement(SelectScrollUpButton, null),
|
|
739
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
821
740
|
radixUi.Select.Viewport,
|
|
822
741
|
{
|
|
823
|
-
className:
|
|
742
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
824
743
|
"p-1",
|
|
825
744
|
position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"
|
|
826
745
|
)
|
|
827
746
|
},
|
|
828
747
|
children
|
|
829
748
|
),
|
|
830
|
-
/* @__PURE__ */
|
|
749
|
+
/* @__PURE__ */ React19__namespace.createElement(SelectScrollDownButton, null)
|
|
831
750
|
));
|
|
832
751
|
}
|
|
833
752
|
function SelectLabel({
|
|
834
753
|
className,
|
|
835
754
|
...props
|
|
836
755
|
}) {
|
|
837
|
-
return /* @__PURE__ */
|
|
756
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
838
757
|
radixUi.Select.Label,
|
|
839
758
|
{
|
|
840
759
|
"data-slot": "select-label",
|
|
841
|
-
className:
|
|
760
|
+
className: chunkQRI5TMES_cjs.cn("px-2 py-1.5 text-xs opacity-70", className),
|
|
842
761
|
...props
|
|
843
762
|
}
|
|
844
763
|
);
|
|
@@ -848,11 +767,11 @@ function SelectItem({
|
|
|
848
767
|
children,
|
|
849
768
|
...props
|
|
850
769
|
}) {
|
|
851
|
-
return /* @__PURE__ */
|
|
770
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
852
771
|
radixUi.Select.Item,
|
|
853
772
|
{
|
|
854
773
|
"data-slot": "select-item",
|
|
855
|
-
className:
|
|
774
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
856
775
|
// Core structure - inherits text color
|
|
857
776
|
"relative flex w-full cursor-default items-center gap-2 rounded-sm",
|
|
858
777
|
"py-1.5 pr-8 pl-2 text-sm outline-hidden select-none",
|
|
@@ -868,13 +787,13 @@ function SelectItem({
|
|
|
868
787
|
),
|
|
869
788
|
...props
|
|
870
789
|
},
|
|
871
|
-
/* @__PURE__ */
|
|
790
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
872
791
|
"span",
|
|
873
792
|
{
|
|
874
793
|
"data-slot": "select-item-indicator",
|
|
875
794
|
className: "absolute right-2 flex size-3.5 items-center justify-center"
|
|
876
795
|
},
|
|
877
|
-
/* @__PURE__ */
|
|
796
|
+
/* @__PURE__ */ React19__namespace.createElement(radixUi.Select.ItemIndicator, null, /* @__PURE__ */ React19__namespace.createElement(
|
|
878
797
|
"svg",
|
|
879
798
|
{
|
|
880
799
|
className: "size-4",
|
|
@@ -885,27 +804,27 @@ function SelectItem({
|
|
|
885
804
|
strokeLinecap: "round",
|
|
886
805
|
strokeLinejoin: "round"
|
|
887
806
|
},
|
|
888
|
-
/* @__PURE__ */
|
|
807
|
+
/* @__PURE__ */ React19__namespace.createElement("polyline", { points: "20 6 9 17 4 12" })
|
|
889
808
|
))
|
|
890
809
|
),
|
|
891
|
-
/* @__PURE__ */
|
|
810
|
+
/* @__PURE__ */ React19__namespace.createElement(radixUi.Select.ItemText, null, children)
|
|
892
811
|
);
|
|
893
812
|
}
|
|
894
813
|
function SelectScrollUpButton({
|
|
895
814
|
className,
|
|
896
815
|
...props
|
|
897
816
|
}) {
|
|
898
|
-
return /* @__PURE__ */
|
|
817
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
899
818
|
radixUi.Select.ScrollUpButton,
|
|
900
819
|
{
|
|
901
820
|
"data-slot": "select-scroll-up-button",
|
|
902
|
-
className:
|
|
821
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
903
822
|
"flex cursor-default items-center justify-center py-1",
|
|
904
823
|
className
|
|
905
824
|
),
|
|
906
825
|
...props
|
|
907
826
|
},
|
|
908
|
-
/* @__PURE__ */
|
|
827
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
909
828
|
"svg",
|
|
910
829
|
{
|
|
911
830
|
className: "size-4",
|
|
@@ -916,7 +835,7 @@ function SelectScrollUpButton({
|
|
|
916
835
|
strokeLinecap: "round",
|
|
917
836
|
strokeLinejoin: "round"
|
|
918
837
|
},
|
|
919
|
-
/* @__PURE__ */
|
|
838
|
+
/* @__PURE__ */ React19__namespace.createElement("polyline", { points: "18 15 12 9 6 15" })
|
|
920
839
|
)
|
|
921
840
|
);
|
|
922
841
|
}
|
|
@@ -924,17 +843,17 @@ function SelectScrollDownButton({
|
|
|
924
843
|
className,
|
|
925
844
|
...props
|
|
926
845
|
}) {
|
|
927
|
-
return /* @__PURE__ */
|
|
846
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
928
847
|
radixUi.Select.ScrollDownButton,
|
|
929
848
|
{
|
|
930
849
|
"data-slot": "select-scroll-down-button",
|
|
931
|
-
className:
|
|
850
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
932
851
|
"flex cursor-default items-center justify-center py-1",
|
|
933
852
|
className
|
|
934
853
|
),
|
|
935
854
|
...props
|
|
936
855
|
},
|
|
937
|
-
/* @__PURE__ */
|
|
856
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
938
857
|
"svg",
|
|
939
858
|
{
|
|
940
859
|
className: "size-4",
|
|
@@ -945,7 +864,7 @@ function SelectScrollDownButton({
|
|
|
945
864
|
strokeLinecap: "round",
|
|
946
865
|
strokeLinejoin: "round"
|
|
947
866
|
},
|
|
948
|
-
/* @__PURE__ */
|
|
867
|
+
/* @__PURE__ */ React19__namespace.createElement("polyline", { points: "6 9 12 15 18 9" })
|
|
949
868
|
)
|
|
950
869
|
);
|
|
951
870
|
}
|
|
@@ -967,8 +886,8 @@ function Select2({
|
|
|
967
886
|
renderOption,
|
|
968
887
|
...props
|
|
969
888
|
}) {
|
|
970
|
-
const [hasInteracted, setHasInteracted] =
|
|
971
|
-
const allOptions =
|
|
889
|
+
const [hasInteracted, setHasInteracted] = React19__namespace.useState(false);
|
|
890
|
+
const allOptions = React19__namespace.useMemo(() => {
|
|
972
891
|
if (optionGroups.length > 0) {
|
|
973
892
|
return optionGroups.flatMap((group) => group.options);
|
|
974
893
|
}
|
|
@@ -989,7 +908,7 @@ function Select2({
|
|
|
989
908
|
onBlur?.();
|
|
990
909
|
}
|
|
991
910
|
};
|
|
992
|
-
return /* @__PURE__ */
|
|
911
|
+
return /* @__PURE__ */ React19__namespace.createElement(React19__namespace.Fragment, null, /* @__PURE__ */ React19__namespace.createElement(
|
|
993
912
|
"input",
|
|
994
913
|
{
|
|
995
914
|
type: "hidden",
|
|
@@ -1011,7 +930,7 @@ function Select2({
|
|
|
1011
930
|
border: "0"
|
|
1012
931
|
}
|
|
1013
932
|
}
|
|
1014
|
-
), /* @__PURE__ */
|
|
933
|
+
), /* @__PURE__ */ React19__namespace.createElement(
|
|
1015
934
|
Select,
|
|
1016
935
|
{
|
|
1017
936
|
value: selectValue,
|
|
@@ -1019,10 +938,10 @@ function Select2({
|
|
|
1019
938
|
onOpenChange: handleOpenChange,
|
|
1020
939
|
disabled
|
|
1021
940
|
},
|
|
1022
|
-
/* @__PURE__ */
|
|
941
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
1023
942
|
SelectTrigger,
|
|
1024
943
|
{
|
|
1025
|
-
className:
|
|
944
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
1026
945
|
// Valid value indicator - ring-2 when has value and no error
|
|
1027
946
|
!error && hasValue && "ring-2 ring-ring",
|
|
1028
947
|
// Error state - handled by SelectTrigger via aria-invalid
|
|
@@ -1032,11 +951,11 @@ function Select2({
|
|
|
1032
951
|
"aria-describedby": props["aria-describedby"],
|
|
1033
952
|
"aria-required": required || props["aria-required"]
|
|
1034
953
|
},
|
|
1035
|
-
/* @__PURE__ */
|
|
954
|
+
/* @__PURE__ */ React19__namespace.createElement(SelectValue, { placeholder })
|
|
1036
955
|
),
|
|
1037
|
-
/* @__PURE__ */
|
|
956
|
+
/* @__PURE__ */ React19__namespace.createElement(SelectContent, null, optionGroups.length > 0 ? (
|
|
1038
957
|
// Render grouped options
|
|
1039
|
-
optionGroups.map((group, groupIndex) => /* @__PURE__ */
|
|
958
|
+
optionGroups.map((group, groupIndex) => /* @__PURE__ */ React19__namespace.createElement(SelectGroup, { key: groupIndex }, /* @__PURE__ */ React19__namespace.createElement(SelectLabel, null, group.label), group.options.map((option) => /* @__PURE__ */ React19__namespace.createElement(
|
|
1040
959
|
SelectItem,
|
|
1041
960
|
{
|
|
1042
961
|
key: option.value,
|
|
@@ -1047,7 +966,7 @@ function Select2({
|
|
|
1047
966
|
))))
|
|
1048
967
|
) : (
|
|
1049
968
|
// Render flat options
|
|
1050
|
-
allOptions.map((option) => /* @__PURE__ */
|
|
969
|
+
allOptions.map((option) => /* @__PURE__ */ React19__namespace.createElement(
|
|
1051
970
|
SelectItem,
|
|
1052
971
|
{
|
|
1053
972
|
key: option.value,
|
|
@@ -1063,25 +982,25 @@ Select2.displayName = "Select";
|
|
|
1063
982
|
function Dialog({
|
|
1064
983
|
...props
|
|
1065
984
|
}) {
|
|
1066
|
-
return /* @__PURE__ */
|
|
985
|
+
return /* @__PURE__ */ React19__namespace.createElement(radixUi.Dialog.Root, { "data-slot": "dialog", ...props });
|
|
1067
986
|
}
|
|
1068
987
|
function DialogPortal({
|
|
1069
988
|
...props
|
|
1070
989
|
}) {
|
|
1071
|
-
return /* @__PURE__ */
|
|
990
|
+
return /* @__PURE__ */ React19__namespace.createElement(radixUi.Dialog.Portal, { "data-slot": "dialog-portal", ...props });
|
|
1072
991
|
}
|
|
1073
992
|
function DialogClose({
|
|
1074
993
|
...props
|
|
1075
994
|
}) {
|
|
1076
|
-
return /* @__PURE__ */
|
|
995
|
+
return /* @__PURE__ */ React19__namespace.createElement(radixUi.Dialog.Close, { "data-slot": "dialog-close", ...props });
|
|
1077
996
|
}
|
|
1078
|
-
var DialogOverlay =
|
|
1079
|
-
return /* @__PURE__ */
|
|
997
|
+
var DialogOverlay = React19__namespace.forwardRef(({ className, ...props }, ref) => {
|
|
998
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
1080
999
|
radixUi.Dialog.Overlay,
|
|
1081
1000
|
{
|
|
1082
1001
|
ref,
|
|
1083
1002
|
"data-slot": "dialog-overlay",
|
|
1084
|
-
className:
|
|
1003
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
1085
1004
|
"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
|
|
1086
1005
|
className
|
|
1087
1006
|
),
|
|
@@ -1090,26 +1009,26 @@ var DialogOverlay = React21__namespace.forwardRef(({ className, ...props }, ref)
|
|
|
1090
1009
|
);
|
|
1091
1010
|
});
|
|
1092
1011
|
DialogOverlay.displayName = radixUi.Dialog.Overlay.displayName;
|
|
1093
|
-
var DialogContent =
|
|
1094
|
-
return /* @__PURE__ */
|
|
1012
|
+
var DialogContent = React19__namespace.forwardRef(({ className, children, showCloseButton = true, ...props }, ref) => {
|
|
1013
|
+
return /* @__PURE__ */ React19__namespace.createElement(DialogPortal, { "data-slot": "dialog-portal" }, /* @__PURE__ */ React19__namespace.createElement(DialogOverlay, null), /* @__PURE__ */ React19__namespace.createElement(
|
|
1095
1014
|
radixUi.Dialog.Content,
|
|
1096
1015
|
{
|
|
1097
1016
|
ref,
|
|
1098
1017
|
"data-slot": "dialog-content",
|
|
1099
|
-
className:
|
|
1018
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
1100
1019
|
"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 outline-none sm:max-w-lg",
|
|
1101
1020
|
className
|
|
1102
1021
|
),
|
|
1103
1022
|
...props
|
|
1104
1023
|
},
|
|
1105
1024
|
children,
|
|
1106
|
-
showCloseButton && /* @__PURE__ */
|
|
1025
|
+
showCloseButton && /* @__PURE__ */ React19__namespace.createElement(
|
|
1107
1026
|
radixUi.Dialog.Close,
|
|
1108
1027
|
{
|
|
1109
1028
|
"data-slot": "dialog-close",
|
|
1110
1029
|
className: "ring-offset-background focus:ring-ring data-[state=open]:bg-accent absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4"
|
|
1111
1030
|
},
|
|
1112
|
-
/* @__PURE__ */
|
|
1031
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
1113
1032
|
"svg",
|
|
1114
1033
|
{
|
|
1115
1034
|
className: "size-4",
|
|
@@ -1120,20 +1039,20 @@ var DialogContent = React21__namespace.forwardRef(({ className, children, showCl
|
|
|
1120
1039
|
strokeLinecap: "round",
|
|
1121
1040
|
strokeLinejoin: "round"
|
|
1122
1041
|
},
|
|
1123
|
-
/* @__PURE__ */
|
|
1124
|
-
/* @__PURE__ */
|
|
1042
|
+
/* @__PURE__ */ React19__namespace.createElement("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
|
|
1043
|
+
/* @__PURE__ */ React19__namespace.createElement("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
|
|
1125
1044
|
),
|
|
1126
|
-
/* @__PURE__ */
|
|
1045
|
+
/* @__PURE__ */ React19__namespace.createElement("span", { className: "sr-only" }, "Close")
|
|
1127
1046
|
)
|
|
1128
1047
|
));
|
|
1129
1048
|
});
|
|
1130
1049
|
DialogContent.displayName = radixUi.Dialog.Content.displayName;
|
|
1131
1050
|
function DialogHeader({ className, ...props }) {
|
|
1132
|
-
return /* @__PURE__ */
|
|
1051
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
1133
1052
|
"div",
|
|
1134
1053
|
{
|
|
1135
1054
|
"data-slot": "dialog-header",
|
|
1136
|
-
className:
|
|
1055
|
+
className: chunkQRI5TMES_cjs.cn("flex flex-col gap-2 text-center sm:text-left", className),
|
|
1137
1056
|
...props
|
|
1138
1057
|
}
|
|
1139
1058
|
);
|
|
@@ -1142,11 +1061,11 @@ function DialogTitle({
|
|
|
1142
1061
|
className,
|
|
1143
1062
|
...props
|
|
1144
1063
|
}) {
|
|
1145
|
-
return /* @__PURE__ */
|
|
1064
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
1146
1065
|
radixUi.Dialog.Title,
|
|
1147
1066
|
{
|
|
1148
1067
|
"data-slot": "dialog-title",
|
|
1149
|
-
className:
|
|
1068
|
+
className: chunkQRI5TMES_cjs.cn("text-lg leading-none font-semibold", className),
|
|
1150
1069
|
...props
|
|
1151
1070
|
}
|
|
1152
1071
|
);
|
|
@@ -1157,11 +1076,11 @@ function Command({
|
|
|
1157
1076
|
className,
|
|
1158
1077
|
...props
|
|
1159
1078
|
}) {
|
|
1160
|
-
return /* @__PURE__ */
|
|
1079
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
1161
1080
|
cmdk.Command,
|
|
1162
1081
|
{
|
|
1163
1082
|
"data-slot": "command",
|
|
1164
|
-
className:
|
|
1083
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
1165
1084
|
"bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md",
|
|
1166
1085
|
className
|
|
1167
1086
|
),
|
|
@@ -1173,13 +1092,13 @@ function CommandInput({
|
|
|
1173
1092
|
className,
|
|
1174
1093
|
...props
|
|
1175
1094
|
}) {
|
|
1176
|
-
return /* @__PURE__ */
|
|
1095
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
1177
1096
|
"div",
|
|
1178
1097
|
{
|
|
1179
1098
|
"data-slot": "command-input-wrapper",
|
|
1180
1099
|
className: "flex h-9 items-center gap-2 border-b px-3"
|
|
1181
1100
|
},
|
|
1182
|
-
/* @__PURE__ */
|
|
1101
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
1183
1102
|
"svg",
|
|
1184
1103
|
{
|
|
1185
1104
|
className: "size-4 shrink-0 opacity-50",
|
|
@@ -1190,14 +1109,14 @@ function CommandInput({
|
|
|
1190
1109
|
strokeLinecap: "round",
|
|
1191
1110
|
strokeLinejoin: "round"
|
|
1192
1111
|
},
|
|
1193
|
-
/* @__PURE__ */
|
|
1194
|
-
/* @__PURE__ */
|
|
1112
|
+
/* @__PURE__ */ React19__namespace.createElement("circle", { cx: "11", cy: "11", r: "8" }),
|
|
1113
|
+
/* @__PURE__ */ React19__namespace.createElement("path", { d: "m21 21-4.3-4.3" })
|
|
1195
1114
|
),
|
|
1196
|
-
/* @__PURE__ */
|
|
1115
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
1197
1116
|
cmdk.Command.Input,
|
|
1198
1117
|
{
|
|
1199
1118
|
"data-slot": "command-input",
|
|
1200
|
-
className:
|
|
1119
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
1201
1120
|
"flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50",
|
|
1202
1121
|
className
|
|
1203
1122
|
),
|
|
@@ -1210,11 +1129,11 @@ function CommandList({
|
|
|
1210
1129
|
className,
|
|
1211
1130
|
...props
|
|
1212
1131
|
}) {
|
|
1213
|
-
return /* @__PURE__ */
|
|
1132
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
1214
1133
|
cmdk.Command.List,
|
|
1215
1134
|
{
|
|
1216
1135
|
"data-slot": "command-list",
|
|
1217
|
-
className:
|
|
1136
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
1218
1137
|
"max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto",
|
|
1219
1138
|
className
|
|
1220
1139
|
),
|
|
@@ -1225,7 +1144,7 @@ function CommandList({
|
|
|
1225
1144
|
function CommandEmpty({
|
|
1226
1145
|
...props
|
|
1227
1146
|
}) {
|
|
1228
|
-
return /* @__PURE__ */
|
|
1147
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
1229
1148
|
cmdk.Command.Empty,
|
|
1230
1149
|
{
|
|
1231
1150
|
"data-slot": "command-empty",
|
|
@@ -1238,11 +1157,11 @@ function CommandGroup({
|
|
|
1238
1157
|
className,
|
|
1239
1158
|
...props
|
|
1240
1159
|
}) {
|
|
1241
|
-
return /* @__PURE__ */
|
|
1160
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
1242
1161
|
cmdk.Command.Group,
|
|
1243
1162
|
{
|
|
1244
1163
|
"data-slot": "command-group",
|
|
1245
|
-
className:
|
|
1164
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
1246
1165
|
"overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:opacity-70",
|
|
1247
1166
|
className
|
|
1248
1167
|
),
|
|
@@ -1253,12 +1172,12 @@ function CommandGroup({
|
|
|
1253
1172
|
function Popover({
|
|
1254
1173
|
...props
|
|
1255
1174
|
}) {
|
|
1256
|
-
return /* @__PURE__ */
|
|
1175
|
+
return /* @__PURE__ */ React19__namespace.createElement(radixUi.Popover.Root, { "data-slot": "popover", ...props });
|
|
1257
1176
|
}
|
|
1258
1177
|
function PopoverTrigger({
|
|
1259
1178
|
...props
|
|
1260
1179
|
}) {
|
|
1261
|
-
return /* @__PURE__ */
|
|
1180
|
+
return /* @__PURE__ */ React19__namespace.createElement(radixUi.Popover.Trigger, { "data-slot": "popover-trigger", ...props });
|
|
1262
1181
|
}
|
|
1263
1182
|
function PopoverContent({
|
|
1264
1183
|
className,
|
|
@@ -1266,13 +1185,13 @@ function PopoverContent({
|
|
|
1266
1185
|
sideOffset = 4,
|
|
1267
1186
|
...props
|
|
1268
1187
|
}) {
|
|
1269
|
-
return /* @__PURE__ */
|
|
1188
|
+
return /* @__PURE__ */ React19__namespace.createElement(radixUi.Popover.Portal, null, /* @__PURE__ */ React19__namespace.createElement(
|
|
1270
1189
|
radixUi.Popover.Content,
|
|
1271
1190
|
{
|
|
1272
1191
|
"data-slot": "popover-content",
|
|
1273
1192
|
align,
|
|
1274
1193
|
sideOffset,
|
|
1275
|
-
className:
|
|
1194
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
1276
1195
|
"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden",
|
|
1277
1196
|
className
|
|
1278
1197
|
),
|
|
@@ -1327,21 +1246,21 @@ function MultiSelect({
|
|
|
1327
1246
|
renderValue,
|
|
1328
1247
|
...props
|
|
1329
1248
|
}) {
|
|
1330
|
-
const [isOpen, setIsOpen] =
|
|
1331
|
-
const [searchQuery, setSearchQuery] =
|
|
1332
|
-
const [focusedIndex, setFocusedIndex] =
|
|
1333
|
-
const [hasInteracted, setHasInteracted] =
|
|
1334
|
-
const triggerRef =
|
|
1249
|
+
const [isOpen, setIsOpen] = React19__namespace.useState(false);
|
|
1250
|
+
const [searchQuery, setSearchQuery] = React19__namespace.useState("");
|
|
1251
|
+
const [focusedIndex, setFocusedIndex] = React19__namespace.useState(-1);
|
|
1252
|
+
const [hasInteracted, setHasInteracted] = React19__namespace.useState(false);
|
|
1253
|
+
const triggerRef = React19__namespace.useRef(null);
|
|
1335
1254
|
const dropdownId = `${name}-dropdown`;
|
|
1336
1255
|
const searchInputId = `${name}-search`;
|
|
1337
1256
|
ensureResizeObserver();
|
|
1338
|
-
const allOptions =
|
|
1257
|
+
const allOptions = React19__namespace.useMemo(() => {
|
|
1339
1258
|
if (optionGroups.length > 0) {
|
|
1340
1259
|
return optionGroups.flatMap((group) => group.options);
|
|
1341
1260
|
}
|
|
1342
1261
|
return options;
|
|
1343
1262
|
}, [options, optionGroups]);
|
|
1344
|
-
const filteredOptions =
|
|
1263
|
+
const filteredOptions = React19__namespace.useMemo(() => {
|
|
1345
1264
|
if (!searchQuery.trim()) {
|
|
1346
1265
|
return allOptions;
|
|
1347
1266
|
}
|
|
@@ -1350,19 +1269,19 @@ function MultiSelect({
|
|
|
1350
1269
|
(option) => optionLabelText(option).toLowerCase().includes(query)
|
|
1351
1270
|
);
|
|
1352
1271
|
}, [allOptions, searchQuery]);
|
|
1353
|
-
const selectedOptions =
|
|
1272
|
+
const selectedOptions = React19__namespace.useMemo(() => {
|
|
1354
1273
|
return allOptions.filter((option) => value.includes(option.value));
|
|
1355
1274
|
}, [allOptions, value]);
|
|
1356
1275
|
const hasValue = value.length > 0;
|
|
1357
|
-
const isMaxReached =
|
|
1276
|
+
const isMaxReached = React19__namespace.useMemo(() => {
|
|
1358
1277
|
return maxSelections !== void 0 && value.length >= maxSelections;
|
|
1359
1278
|
}, [maxSelections, value.length]);
|
|
1360
|
-
const getEnabledOptions =
|
|
1279
|
+
const getEnabledOptions = React19__namespace.useCallback(() => {
|
|
1361
1280
|
return filteredOptions.filter(
|
|
1362
1281
|
(option) => !option.disabled && (!isMaxReached || value.includes(option.value))
|
|
1363
1282
|
);
|
|
1364
1283
|
}, [filteredOptions, isMaxReached, value]);
|
|
1365
|
-
|
|
1284
|
+
React19__namespace.useEffect(() => {
|
|
1366
1285
|
if (!isOpen) return;
|
|
1367
1286
|
if (!searchable) return;
|
|
1368
1287
|
const id = window.setTimeout(() => {
|
|
@@ -1375,7 +1294,7 @@ function MultiSelect({
|
|
|
1375
1294
|
window.clearTimeout(id);
|
|
1376
1295
|
};
|
|
1377
1296
|
}, [isOpen, searchable, searchInputId]);
|
|
1378
|
-
const handleToggleOption =
|
|
1297
|
+
const handleToggleOption = React19__namespace.useCallback(
|
|
1379
1298
|
(optionValue) => {
|
|
1380
1299
|
const isSelected = value.includes(optionValue);
|
|
1381
1300
|
if (isSelected) {
|
|
@@ -1387,12 +1306,12 @@ function MultiSelect({
|
|
|
1387
1306
|
},
|
|
1388
1307
|
[isMaxReached, onChange, value]
|
|
1389
1308
|
);
|
|
1390
|
-
const handleSelectAll =
|
|
1309
|
+
const handleSelectAll = React19__namespace.useCallback(() => {
|
|
1391
1310
|
const enabledOptions = filteredOptions.filter((option) => !option.disabled);
|
|
1392
1311
|
onChange(enabledOptions.map((option) => option.value));
|
|
1393
1312
|
setSearchQuery("");
|
|
1394
1313
|
}, [filteredOptions, onChange]);
|
|
1395
|
-
const handleClearAll =
|
|
1314
|
+
const handleClearAll = React19__namespace.useCallback(
|
|
1396
1315
|
(e) => {
|
|
1397
1316
|
e.stopPropagation();
|
|
1398
1317
|
onChange([]);
|
|
@@ -1401,14 +1320,14 @@ function MultiSelect({
|
|
|
1401
1320
|
},
|
|
1402
1321
|
[onChange]
|
|
1403
1322
|
);
|
|
1404
|
-
const handleRemoveValue =
|
|
1323
|
+
const handleRemoveValue = React19__namespace.useCallback(
|
|
1405
1324
|
(optionValue, e) => {
|
|
1406
1325
|
e.stopPropagation();
|
|
1407
1326
|
onChange(value.filter((entry) => entry !== optionValue));
|
|
1408
1327
|
},
|
|
1409
1328
|
[onChange, value]
|
|
1410
1329
|
);
|
|
1411
|
-
const handleOpenChange =
|
|
1330
|
+
const handleOpenChange = React19__namespace.useCallback(
|
|
1412
1331
|
(nextOpen) => {
|
|
1413
1332
|
if (disabled) {
|
|
1414
1333
|
setIsOpen(false);
|
|
@@ -1431,12 +1350,12 @@ function MultiSelect({
|
|
|
1431
1350
|
},
|
|
1432
1351
|
[disabled, hasInteracted, isOpen, onBlur, onFocus]
|
|
1433
1352
|
);
|
|
1434
|
-
const handleTriggerBlur =
|
|
1353
|
+
const handleTriggerBlur = React19__namespace.useCallback(() => {
|
|
1435
1354
|
if (!isOpen) {
|
|
1436
1355
|
onBlur?.();
|
|
1437
1356
|
}
|
|
1438
1357
|
}, [isOpen, onBlur]);
|
|
1439
|
-
const handleKeyDown =
|
|
1358
|
+
const handleKeyDown = React19__namespace.useCallback(
|
|
1440
1359
|
(event) => {
|
|
1441
1360
|
if (disabled) return;
|
|
1442
1361
|
const enabledOptions = getEnabledOptions();
|
|
@@ -1532,8 +1451,8 @@ function MultiSelect({
|
|
|
1532
1451
|
value
|
|
1533
1452
|
]
|
|
1534
1453
|
);
|
|
1535
|
-
const combinedClassName =
|
|
1536
|
-
return /* @__PURE__ */
|
|
1454
|
+
const combinedClassName = chunkQRI5TMES_cjs.cn("relative w-full", className);
|
|
1455
|
+
return /* @__PURE__ */ React19__namespace.createElement("div", { className: combinedClassName }, /* @__PURE__ */ React19__namespace.createElement(
|
|
1537
1456
|
"select",
|
|
1538
1457
|
{
|
|
1539
1458
|
name,
|
|
@@ -1547,13 +1466,13 @@ function MultiSelect({
|
|
|
1547
1466
|
style: { display: "none" },
|
|
1548
1467
|
multiple: true
|
|
1549
1468
|
},
|
|
1550
|
-
/* @__PURE__ */
|
|
1551
|
-
allOptions.map((option) => /* @__PURE__ */
|
|
1552
|
-
), /* @__PURE__ */
|
|
1469
|
+
/* @__PURE__ */ React19__namespace.createElement("option", { value: "" }, "Select..."),
|
|
1470
|
+
allOptions.map((option) => /* @__PURE__ */ React19__namespace.createElement("option", { key: option.value, value: option.value }, optionLabelText(option)))
|
|
1471
|
+
), /* @__PURE__ */ React19__namespace.createElement(Popover, { open: isOpen, onOpenChange: handleOpenChange }, /* @__PURE__ */ React19__namespace.createElement(PopoverTrigger, { asChild: true }, /* @__PURE__ */ React19__namespace.createElement(
|
|
1553
1472
|
"div",
|
|
1554
1473
|
{
|
|
1555
1474
|
ref: triggerRef,
|
|
1556
|
-
className:
|
|
1475
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
1557
1476
|
"flex min-h-9 w-full items-center justify-between rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm",
|
|
1558
1477
|
"cursor-pointer transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
|
|
1559
1478
|
!error && hasValue && "ring-2 ring-ring",
|
|
@@ -1571,13 +1490,13 @@ function MultiSelect({
|
|
|
1571
1490
|
"aria-disabled": disabled,
|
|
1572
1491
|
tabIndex: disabled ? -1 : 0
|
|
1573
1492
|
},
|
|
1574
|
-
/* @__PURE__ */
|
|
1493
|
+
/* @__PURE__ */ React19__namespace.createElement("div", { className: "flex flex-1 items-center overflow-hidden" }, selectedOptions.length > 0 ? /* @__PURE__ */ React19__namespace.createElement("div", { className: "flex flex-wrap gap-1" }, selectedOptions.map((option) => /* @__PURE__ */ React19__namespace.createElement(
|
|
1575
1494
|
"span",
|
|
1576
1495
|
{
|
|
1577
1496
|
key: option.value,
|
|
1578
1497
|
className: "inline-flex items-center gap-1 rounded px-2 py-0.5 text-xs font-medium"
|
|
1579
1498
|
},
|
|
1580
|
-
renderValue ? renderValue(option) : /* @__PURE__ */
|
|
1499
|
+
renderValue ? renderValue(option) : /* @__PURE__ */ React19__namespace.createElement(React19__namespace.Fragment, null, /* @__PURE__ */ React19__namespace.createElement("span", { className: "max-w-40 overflow-hidden text-ellipsis whitespace-nowrap" }, option.label), !disabled && /* @__PURE__ */ React19__namespace.createElement(
|
|
1581
1500
|
"button",
|
|
1582
1501
|
{
|
|
1583
1502
|
type: "button",
|
|
@@ -1588,8 +1507,8 @@ function MultiSelect({
|
|
|
1588
1507
|
},
|
|
1589
1508
|
"\u2715"
|
|
1590
1509
|
))
|
|
1591
|
-
))) : /* @__PURE__ */
|
|
1592
|
-
/* @__PURE__ */
|
|
1510
|
+
))) : /* @__PURE__ */ React19__namespace.createElement("span", { className: "relative" }, placeholder)),
|
|
1511
|
+
/* @__PURE__ */ React19__namespace.createElement("div", { className: "ml-2 flex items-center gap-1" }, loading && /* @__PURE__ */ React19__namespace.createElement("span", { className: "text-xs" }, "\u23F3"), clearable && value.length > 0 && !disabled && !loading && /* @__PURE__ */ React19__namespace.createElement(
|
|
1593
1512
|
"button",
|
|
1594
1513
|
{
|
|
1595
1514
|
type: "button",
|
|
@@ -1599,8 +1518,8 @@ function MultiSelect({
|
|
|
1599
1518
|
tabIndex: -1
|
|
1600
1519
|
},
|
|
1601
1520
|
"\u2715"
|
|
1602
|
-
), /* @__PURE__ */
|
|
1603
|
-
)), isOpen && /* @__PURE__ */
|
|
1521
|
+
), /* @__PURE__ */ React19__namespace.createElement("span", { className: "text-xs leading-none", "aria-hidden": "true" }, isOpen ? "\u25B2" : "\u25BC"))
|
|
1522
|
+
)), isOpen && /* @__PURE__ */ React19__namespace.createElement(
|
|
1604
1523
|
PopoverContent,
|
|
1605
1524
|
{
|
|
1606
1525
|
id: dropdownId,
|
|
@@ -1611,18 +1530,18 @@ function MultiSelect({
|
|
|
1611
1530
|
event.preventDefault();
|
|
1612
1531
|
}
|
|
1613
1532
|
},
|
|
1614
|
-
/* @__PURE__ */
|
|
1533
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
1615
1534
|
Command,
|
|
1616
1535
|
{
|
|
1617
1536
|
shouldFilter: false,
|
|
1618
1537
|
className: "max-h-80",
|
|
1619
1538
|
onKeyDown: handleKeyDown
|
|
1620
1539
|
},
|
|
1621
|
-
searchable && /* @__PURE__ */
|
|
1540
|
+
searchable && /* @__PURE__ */ React19__namespace.createElement(
|
|
1622
1541
|
CommandInput,
|
|
1623
1542
|
{
|
|
1624
1543
|
id: searchInputId,
|
|
1625
|
-
className:
|
|
1544
|
+
className: chunkQRI5TMES_cjs.cn(chunkQRI5TMES_cjs.INPUT_AUTOFILL_RESET_CLASSES),
|
|
1626
1545
|
placeholder: "Search...",
|
|
1627
1546
|
value: searchQuery,
|
|
1628
1547
|
onValueChange: (nextValue) => {
|
|
@@ -1632,7 +1551,7 @@ function MultiSelect({
|
|
|
1632
1551
|
"aria-label": "Search options"
|
|
1633
1552
|
}
|
|
1634
1553
|
),
|
|
1635
|
-
showSelectAll && filteredOptions.length > 0 && /* @__PURE__ */
|
|
1554
|
+
showSelectAll && filteredOptions.length > 0 && /* @__PURE__ */ React19__namespace.createElement("div", { className: "flex gap-2 border-b border-input p-2" }, /* @__PURE__ */ React19__namespace.createElement(
|
|
1636
1555
|
"button",
|
|
1637
1556
|
{
|
|
1638
1557
|
type: "button",
|
|
@@ -1641,7 +1560,7 @@ function MultiSelect({
|
|
|
1641
1560
|
disabled
|
|
1642
1561
|
},
|
|
1643
1562
|
"Select All"
|
|
1644
|
-
), value.length > 0 && /* @__PURE__ */
|
|
1563
|
+
), value.length > 0 && /* @__PURE__ */ React19__namespace.createElement(
|
|
1645
1564
|
"button",
|
|
1646
1565
|
{
|
|
1647
1566
|
type: "button",
|
|
@@ -1651,13 +1570,13 @@ function MultiSelect({
|
|
|
1651
1570
|
},
|
|
1652
1571
|
"Clear All"
|
|
1653
1572
|
)),
|
|
1654
|
-
isMaxReached && /* @__PURE__ */
|
|
1655
|
-
/* @__PURE__ */
|
|
1573
|
+
isMaxReached && /* @__PURE__ */ React19__namespace.createElement("div", { className: "border-b border-destructive bg-destructive/80 px-2 py-1 text-xs font-medium text-destructive-foreground" }, "Maximum ", maxSelections, " selection", maxSelections !== 1 ? "s" : "", " ", "reached"),
|
|
1574
|
+
/* @__PURE__ */ React19__namespace.createElement(CommandList, { role: "listbox", "aria-multiselectable": "true" }, /* @__PURE__ */ React19__namespace.createElement(CommandEmpty, null, "No options found"), optionGroups.length > 0 ? optionGroups.map((group, groupIndex) => {
|
|
1656
1575
|
const groupOptions = group.options.filter(
|
|
1657
1576
|
(option) => filteredOptions.includes(option)
|
|
1658
1577
|
);
|
|
1659
1578
|
if (groupOptions.length === 0) return null;
|
|
1660
|
-
return /* @__PURE__ */
|
|
1579
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
1661
1580
|
CommandGroup,
|
|
1662
1581
|
{
|
|
1663
1582
|
key: `${group.label}-${groupIndex}`,
|
|
@@ -1668,7 +1587,7 @@ function MultiSelect({
|
|
|
1668
1587
|
const isSelected = value.includes(option.value);
|
|
1669
1588
|
const isFocused = globalIndex === focusedIndex;
|
|
1670
1589
|
const optionDisabled = option.disabled || isMaxReached && !isSelected;
|
|
1671
|
-
return /* @__PURE__ */
|
|
1590
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
1672
1591
|
"div",
|
|
1673
1592
|
{
|
|
1674
1593
|
key: option.value,
|
|
@@ -1683,15 +1602,15 @@ function MultiSelect({
|
|
|
1683
1602
|
handleToggleOption(option.value);
|
|
1684
1603
|
}
|
|
1685
1604
|
},
|
|
1686
|
-
className:
|
|
1605
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
1687
1606
|
"relative flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent",
|
|
1688
1607
|
isFocused && "bg-accent",
|
|
1689
1608
|
isSelected && "bg-accent font-medium",
|
|
1690
1609
|
optionDisabled && "pointer-events-none opacity-50"
|
|
1691
1610
|
)
|
|
1692
1611
|
},
|
|
1693
|
-
/* @__PURE__ */
|
|
1694
|
-
/* @__PURE__ */
|
|
1612
|
+
/* @__PURE__ */ React19__namespace.createElement("span", { className: "text-base leading-none" }, isSelected ? "\u2611" : "\u2610"),
|
|
1613
|
+
/* @__PURE__ */ React19__namespace.createElement("span", { className: "flex-1" }, renderOption ? renderOption(option) : option.label)
|
|
1695
1614
|
);
|
|
1696
1615
|
})
|
|
1697
1616
|
);
|
|
@@ -1699,7 +1618,7 @@ function MultiSelect({
|
|
|
1699
1618
|
const isSelected = value.includes(option.value);
|
|
1700
1619
|
const isFocused = index === focusedIndex;
|
|
1701
1620
|
const optionDisabled = option.disabled || isMaxReached && !isSelected;
|
|
1702
|
-
return /* @__PURE__ */
|
|
1621
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
1703
1622
|
"div",
|
|
1704
1623
|
{
|
|
1705
1624
|
key: option.value,
|
|
@@ -1714,33 +1633,33 @@ function MultiSelect({
|
|
|
1714
1633
|
handleToggleOption(option.value);
|
|
1715
1634
|
}
|
|
1716
1635
|
},
|
|
1717
|
-
className:
|
|
1636
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
1718
1637
|
"relative flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent",
|
|
1719
1638
|
isFocused && "bg-accent",
|
|
1720
1639
|
isSelected && "bg-accent font-medium",
|
|
1721
1640
|
optionDisabled && "pointer-events-none opacity-50"
|
|
1722
1641
|
)
|
|
1723
1642
|
},
|
|
1724
|
-
/* @__PURE__ */
|
|
1725
|
-
/* @__PURE__ */
|
|
1643
|
+
/* @__PURE__ */ React19__namespace.createElement("span", { className: "text-base leading-none" }, isSelected ? "\u2611" : "\u2610"),
|
|
1644
|
+
/* @__PURE__ */ React19__namespace.createElement("span", { className: "flex-1" }, renderOption ? renderOption(option) : option.label)
|
|
1726
1645
|
);
|
|
1727
1646
|
}))
|
|
1728
1647
|
)
|
|
1729
1648
|
)));
|
|
1730
1649
|
}
|
|
1731
1650
|
MultiSelect.displayName = "MultiSelect";
|
|
1732
|
-
var useIsomorphicLayoutEffect = typeof window !== "undefined" ?
|
|
1651
|
+
var useIsomorphicLayoutEffect = typeof window !== "undefined" ? React19__namespace.useLayoutEffect : React19__namespace.useEffect;
|
|
1733
1652
|
|
|
1734
1653
|
// src/hooks/use-as-ref.ts
|
|
1735
1654
|
function useAsRef(props) {
|
|
1736
|
-
const ref =
|
|
1655
|
+
const ref = React19__namespace.useRef(props);
|
|
1737
1656
|
useIsomorphicLayoutEffect(() => {
|
|
1738
1657
|
ref.current = props;
|
|
1739
1658
|
});
|
|
1740
1659
|
return ref;
|
|
1741
1660
|
}
|
|
1742
1661
|
function useLazyRef(fn) {
|
|
1743
|
-
const ref =
|
|
1662
|
+
const ref = React19__namespace.useRef(null);
|
|
1744
1663
|
if (ref.current === null) {
|
|
1745
1664
|
ref.current = fn();
|
|
1746
1665
|
}
|
|
@@ -1759,7 +1678,7 @@ function BaseFileIcon({
|
|
|
1759
1678
|
children,
|
|
1760
1679
|
className
|
|
1761
1680
|
}) {
|
|
1762
|
-
return /* @__PURE__ */
|
|
1681
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
1763
1682
|
"svg",
|
|
1764
1683
|
{
|
|
1765
1684
|
viewBox: "0 0 24 24",
|
|
@@ -1768,32 +1687,32 @@ function BaseFileIcon({
|
|
|
1768
1687
|
strokeWidth: "2",
|
|
1769
1688
|
strokeLinecap: "round",
|
|
1770
1689
|
strokeLinejoin: "round",
|
|
1771
|
-
className:
|
|
1690
|
+
className: chunkQRI5TMES_cjs.cn("size-5", className),
|
|
1772
1691
|
"aria-hidden": "true"
|
|
1773
1692
|
},
|
|
1774
1693
|
children
|
|
1775
1694
|
);
|
|
1776
1695
|
}
|
|
1777
1696
|
function FileVideoIcon() {
|
|
1778
|
-
return /* @__PURE__ */
|
|
1697
|
+
return /* @__PURE__ */ React19__namespace.createElement(BaseFileIcon, null, /* @__PURE__ */ React19__namespace.createElement("path", { d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" }), /* @__PURE__ */ React19__namespace.createElement("polyline", { points: "14 2 14 8 20 8" }), /* @__PURE__ */ React19__namespace.createElement("rect", { x: "8", y: "12", width: "6", height: "4", rx: "1" }), /* @__PURE__ */ React19__namespace.createElement("path", { d: "m14 13 3-1.5v5L14 15" }));
|
|
1779
1698
|
}
|
|
1780
1699
|
function FileAudioIcon() {
|
|
1781
|
-
return /* @__PURE__ */
|
|
1700
|
+
return /* @__PURE__ */ React19__namespace.createElement(BaseFileIcon, null, /* @__PURE__ */ React19__namespace.createElement("path", { d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" }), /* @__PURE__ */ React19__namespace.createElement("polyline", { points: "14 2 14 8 20 8" }), /* @__PURE__ */ React19__namespace.createElement("path", { d: "M10 16a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3z" }), /* @__PURE__ */ React19__namespace.createElement("path", { d: "M13 17V11l3-1" }));
|
|
1782
1701
|
}
|
|
1783
1702
|
function FileTextIcon() {
|
|
1784
|
-
return /* @__PURE__ */
|
|
1703
|
+
return /* @__PURE__ */ React19__namespace.createElement(BaseFileIcon, null, /* @__PURE__ */ React19__namespace.createElement("path", { d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" }), /* @__PURE__ */ React19__namespace.createElement("polyline", { points: "14 2 14 8 20 8" }), /* @__PURE__ */ React19__namespace.createElement("line", { x1: "8", y1: "13", x2: "16", y2: "13" }), /* @__PURE__ */ React19__namespace.createElement("line", { x1: "8", y1: "17", x2: "14", y2: "17" }));
|
|
1785
1704
|
}
|
|
1786
1705
|
function FileCodeIcon() {
|
|
1787
|
-
return /* @__PURE__ */
|
|
1706
|
+
return /* @__PURE__ */ React19__namespace.createElement(BaseFileIcon, null, /* @__PURE__ */ React19__namespace.createElement("path", { d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" }), /* @__PURE__ */ React19__namespace.createElement("polyline", { points: "14 2 14 8 20 8" }), /* @__PURE__ */ React19__namespace.createElement("polyline", { points: "11 14 9 16 11 18" }), /* @__PURE__ */ React19__namespace.createElement("polyline", { points: "13 14 15 16 13 18" }));
|
|
1788
1707
|
}
|
|
1789
1708
|
function FileArchiveIcon() {
|
|
1790
|
-
return /* @__PURE__ */
|
|
1709
|
+
return /* @__PURE__ */ React19__namespace.createElement(BaseFileIcon, null, /* @__PURE__ */ React19__namespace.createElement("path", { d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" }), /* @__PURE__ */ React19__namespace.createElement("polyline", { points: "14 2 14 8 20 8" }), /* @__PURE__ */ React19__namespace.createElement("rect", { x: "9", y: "11", width: "6", height: "2" }), /* @__PURE__ */ React19__namespace.createElement("path", { d: "M12 13v5" }));
|
|
1791
1710
|
}
|
|
1792
1711
|
function FileCogIcon() {
|
|
1793
|
-
return /* @__PURE__ */
|
|
1712
|
+
return /* @__PURE__ */ React19__namespace.createElement(BaseFileIcon, null, /* @__PURE__ */ React19__namespace.createElement("path", { d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" }), /* @__PURE__ */ React19__namespace.createElement("polyline", { points: "14 2 14 8 20 8" }), /* @__PURE__ */ React19__namespace.createElement("circle", { cx: "12", cy: "16", r: "2" }), /* @__PURE__ */ React19__namespace.createElement("path", { d: "m12 12 .4.9m2.7 1.1 .9.4m-.9 2.7-.9.4m-2.7 1.1-.4.9m-2.3-.9-.4-.9m-2.7-1.1-.9-.4m.9-2.7.9-.4m2.7-1.1.4-.9" }));
|
|
1794
1713
|
}
|
|
1795
1714
|
function FileIcon() {
|
|
1796
|
-
return /* @__PURE__ */
|
|
1715
|
+
return /* @__PURE__ */ React19__namespace.createElement(BaseFileIcon, null, /* @__PURE__ */ React19__namespace.createElement("path", { d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" }), /* @__PURE__ */ React19__namespace.createElement("polyline", { points: "14 2 14 8 20 8" }));
|
|
1797
1716
|
}
|
|
1798
1717
|
function formatBytes(bytes) {
|
|
1799
1718
|
if (bytes === 0) return "0 B";
|
|
@@ -1805,13 +1724,13 @@ function getFileIcon(file) {
|
|
|
1805
1724
|
const type = file.type;
|
|
1806
1725
|
const extension = file.name.split(".").pop()?.toLowerCase() ?? "";
|
|
1807
1726
|
if (type.startsWith("video/")) {
|
|
1808
|
-
return /* @__PURE__ */
|
|
1727
|
+
return /* @__PURE__ */ React19__namespace.createElement(FileVideoIcon, null);
|
|
1809
1728
|
}
|
|
1810
1729
|
if (type.startsWith("audio/")) {
|
|
1811
|
-
return /* @__PURE__ */
|
|
1730
|
+
return /* @__PURE__ */ React19__namespace.createElement(FileAudioIcon, null);
|
|
1812
1731
|
}
|
|
1813
1732
|
if (type.startsWith("text/") || ["txt", "md", "rtf", "pdf"].includes(extension)) {
|
|
1814
|
-
return /* @__PURE__ */
|
|
1733
|
+
return /* @__PURE__ */ React19__namespace.createElement(FileTextIcon, null);
|
|
1815
1734
|
}
|
|
1816
1735
|
if ([
|
|
1817
1736
|
"html",
|
|
@@ -1830,19 +1749,19 @@ function getFileIcon(file) {
|
|
|
1830
1749
|
"cpp",
|
|
1831
1750
|
"cs"
|
|
1832
1751
|
].includes(extension)) {
|
|
1833
|
-
return /* @__PURE__ */
|
|
1752
|
+
return /* @__PURE__ */ React19__namespace.createElement(FileCodeIcon, null);
|
|
1834
1753
|
}
|
|
1835
1754
|
if (["zip", "rar", "7z", "tar", "gz", "bz2"].includes(extension)) {
|
|
1836
|
-
return /* @__PURE__ */
|
|
1755
|
+
return /* @__PURE__ */ React19__namespace.createElement(FileArchiveIcon, null);
|
|
1837
1756
|
}
|
|
1838
1757
|
if (["exe", "msi", "app", "apk", "deb", "rpm"].includes(extension) || type.startsWith("application/")) {
|
|
1839
|
-
return /* @__PURE__ */
|
|
1758
|
+
return /* @__PURE__ */ React19__namespace.createElement(FileCogIcon, null);
|
|
1840
1759
|
}
|
|
1841
|
-
return /* @__PURE__ */
|
|
1760
|
+
return /* @__PURE__ */ React19__namespace.createElement(FileIcon, null);
|
|
1842
1761
|
}
|
|
1843
|
-
var StoreContext =
|
|
1762
|
+
var StoreContext = React19__namespace.createContext(null);
|
|
1844
1763
|
function useStoreContext(consumerName) {
|
|
1845
|
-
const context =
|
|
1764
|
+
const context = React19__namespace.useContext(StoreContext);
|
|
1846
1765
|
if (!context) {
|
|
1847
1766
|
throw new Error(`\`${consumerName}\` must be used within \`${ROOT_NAME}\``);
|
|
1848
1767
|
}
|
|
@@ -1853,7 +1772,7 @@ function useStore(selector) {
|
|
|
1853
1772
|
const lastValueRef = useLazyRef(
|
|
1854
1773
|
() => null
|
|
1855
1774
|
);
|
|
1856
|
-
const getSnapshot =
|
|
1775
|
+
const getSnapshot = React19__namespace.useCallback(() => {
|
|
1857
1776
|
const state = store.getState();
|
|
1858
1777
|
const prevValue = lastValueRef.current;
|
|
1859
1778
|
if (prevValue && prevValue.state === state) {
|
|
@@ -1863,13 +1782,13 @@ function useStore(selector) {
|
|
|
1863
1782
|
lastValueRef.current = { value: nextValue, state };
|
|
1864
1783
|
return nextValue;
|
|
1865
1784
|
}, [store, selector, lastValueRef]);
|
|
1866
|
-
return
|
|
1785
|
+
return React19__namespace.useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);
|
|
1867
1786
|
}
|
|
1868
|
-
var FileUploadContext =
|
|
1787
|
+
var FileUploadContext = React19__namespace.createContext(
|
|
1869
1788
|
null
|
|
1870
1789
|
);
|
|
1871
1790
|
function useFileUploadContext(consumerName) {
|
|
1872
|
-
const context =
|
|
1791
|
+
const context = React19__namespace.useContext(FileUploadContext);
|
|
1873
1792
|
if (!context) {
|
|
1874
1793
|
throw new Error(`\`${consumerName}\` must be used within \`${ROOT_NAME}\``);
|
|
1875
1794
|
}
|
|
@@ -1901,15 +1820,15 @@ function FileUpload(props) {
|
|
|
1901
1820
|
className,
|
|
1902
1821
|
...rootProps
|
|
1903
1822
|
} = props;
|
|
1904
|
-
const inputId =
|
|
1905
|
-
const dropzoneId =
|
|
1906
|
-
const listId =
|
|
1907
|
-
const labelId =
|
|
1823
|
+
const inputId = React19__namespace.useId();
|
|
1824
|
+
const dropzoneId = React19__namespace.useId();
|
|
1825
|
+
const listId = React19__namespace.useId();
|
|
1826
|
+
const labelId = React19__namespace.useId();
|
|
1908
1827
|
const dir = reactDirection.useDirection(dirProp);
|
|
1909
1828
|
const listeners = useLazyRef(() => /* @__PURE__ */ new Set()).current;
|
|
1910
1829
|
const files = useLazyRef(() => /* @__PURE__ */ new Map()).current;
|
|
1911
1830
|
const urlCache = useLazyRef(() => /* @__PURE__ */ new WeakMap()).current;
|
|
1912
|
-
const inputRef =
|
|
1831
|
+
const inputRef = React19__namespace.useRef(null);
|
|
1913
1832
|
const isControlled = value !== void 0;
|
|
1914
1833
|
const propsRef = useAsRef({
|
|
1915
1834
|
onValueChange,
|
|
@@ -1919,7 +1838,7 @@ function FileUpload(props) {
|
|
|
1919
1838
|
onFileValidate,
|
|
1920
1839
|
onUpload
|
|
1921
1840
|
});
|
|
1922
|
-
const store =
|
|
1841
|
+
const store = React19__namespace.useMemo(() => {
|
|
1923
1842
|
let state = {
|
|
1924
1843
|
files,
|
|
1925
1844
|
dragOver: false,
|
|
@@ -2048,7 +1967,7 @@ function FileUpload(props) {
|
|
|
2048
1967
|
}
|
|
2049
1968
|
};
|
|
2050
1969
|
}, [listeners, files, invalid, propsRef, urlCache]);
|
|
2051
|
-
const acceptTypes =
|
|
1970
|
+
const acceptTypes = React19__namespace.useMemo(
|
|
2052
1971
|
() => accept?.split(",").map((t) => t.trim()) ?? null,
|
|
2053
1972
|
[accept]
|
|
2054
1973
|
);
|
|
@@ -2066,14 +1985,14 @@ function FileUpload(props) {
|
|
|
2066
1985
|
});
|
|
2067
1986
|
};
|
|
2068
1987
|
}).current;
|
|
2069
|
-
|
|
1988
|
+
React19__namespace.useEffect(() => {
|
|
2070
1989
|
if (isControlled) {
|
|
2071
1990
|
store.dispatch({ type: "SET_FILES", files: value });
|
|
2072
1991
|
} else if (defaultValue && defaultValue.length > 0 && !store.getState().files.size) {
|
|
2073
1992
|
store.dispatch({ type: "SET_FILES", files: defaultValue });
|
|
2074
1993
|
}
|
|
2075
1994
|
}, [value, defaultValue, isControlled, store]);
|
|
2076
|
-
|
|
1995
|
+
React19__namespace.useEffect(() => {
|
|
2077
1996
|
return () => {
|
|
2078
1997
|
for (const file of files.keys()) {
|
|
2079
1998
|
const cachedUrl = urlCache.get(file);
|
|
@@ -2083,7 +2002,7 @@ function FileUpload(props) {
|
|
|
2083
2002
|
}
|
|
2084
2003
|
};
|
|
2085
2004
|
}, [files, urlCache]);
|
|
2086
|
-
const onFilesUpload =
|
|
2005
|
+
const onFilesUpload = React19__namespace.useCallback(
|
|
2087
2006
|
async (files2) => {
|
|
2088
2007
|
try {
|
|
2089
2008
|
for (const file of files2) {
|
|
@@ -2121,7 +2040,7 @@ function FileUpload(props) {
|
|
|
2121
2040
|
},
|
|
2122
2041
|
[store, propsRef, onProgress]
|
|
2123
2042
|
);
|
|
2124
|
-
const onFilesChange =
|
|
2043
|
+
const onFilesChange = React19__namespace.useCallback(
|
|
2125
2044
|
(originalFiles) => {
|
|
2126
2045
|
if (disabled) return;
|
|
2127
2046
|
let filesToProcess = [...originalFiles];
|
|
@@ -2219,7 +2138,7 @@ function FileUpload(props) {
|
|
|
2219
2138
|
disabled
|
|
2220
2139
|
]
|
|
2221
2140
|
);
|
|
2222
|
-
const onInputChange =
|
|
2141
|
+
const onInputChange = React19__namespace.useCallback(
|
|
2223
2142
|
(event) => {
|
|
2224
2143
|
const files2 = Array.from(event.target.files ?? []);
|
|
2225
2144
|
onFilesChange(files2);
|
|
@@ -2227,7 +2146,7 @@ function FileUpload(props) {
|
|
|
2227
2146
|
},
|
|
2228
2147
|
[onFilesChange]
|
|
2229
2148
|
);
|
|
2230
|
-
const contextValue =
|
|
2149
|
+
const contextValue = React19__namespace.useMemo(
|
|
2231
2150
|
() => ({
|
|
2232
2151
|
dropzoneId,
|
|
2233
2152
|
inputId,
|
|
@@ -2245,17 +2164,17 @@ function FileUpload(props) {
|
|
|
2245
2164
|
contextValue.dropzoneId,
|
|
2246
2165
|
inputProps?.["aria-describedby"]
|
|
2247
2166
|
].filter(Boolean).join(" ").trim();
|
|
2248
|
-
return /* @__PURE__ */
|
|
2167
|
+
return /* @__PURE__ */ React19__namespace.createElement(StoreContext.Provider, { value: store }, /* @__PURE__ */ React19__namespace.createElement(FileUploadContext.Provider, { value: contextValue }, /* @__PURE__ */ React19__namespace.createElement(
|
|
2249
2168
|
RootPrimitive,
|
|
2250
2169
|
{
|
|
2251
2170
|
"data-disabled": disabled ? "" : void 0,
|
|
2252
2171
|
"data-slot": "file-upload",
|
|
2253
2172
|
dir,
|
|
2254
2173
|
...rootProps,
|
|
2255
|
-
className:
|
|
2174
|
+
className: chunkQRI5TMES_cjs.cn("relative flex flex-col gap-2", className)
|
|
2256
2175
|
},
|
|
2257
2176
|
children,
|
|
2258
|
-
/* @__PURE__ */
|
|
2177
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
2259
2178
|
"input",
|
|
2260
2179
|
{
|
|
2261
2180
|
type: "file",
|
|
@@ -2274,7 +2193,7 @@ function FileUpload(props) {
|
|
|
2274
2193
|
...inputProps
|
|
2275
2194
|
}
|
|
2276
2195
|
),
|
|
2277
|
-
/* @__PURE__ */
|
|
2196
|
+
/* @__PURE__ */ React19__namespace.createElement("div", { id: labelId, className: "sr-only" }, label ?? "File upload")
|
|
2278
2197
|
)));
|
|
2279
2198
|
}
|
|
2280
2199
|
function FileUploadDropzone(props) {
|
|
@@ -2303,7 +2222,7 @@ function FileUploadDropzone(props) {
|
|
|
2303
2222
|
onPaste: onPasteProp,
|
|
2304
2223
|
onKeyDown: onKeyDownProp
|
|
2305
2224
|
});
|
|
2306
|
-
const onClick =
|
|
2225
|
+
const onClick = React19__namespace.useCallback(
|
|
2307
2226
|
(event) => {
|
|
2308
2227
|
propsRef.current.onClick?.(event);
|
|
2309
2228
|
if (event.defaultPrevented) return;
|
|
@@ -2315,7 +2234,7 @@ function FileUploadDropzone(props) {
|
|
|
2315
2234
|
},
|
|
2316
2235
|
[context.inputRef, propsRef]
|
|
2317
2236
|
);
|
|
2318
|
-
const onDragOver =
|
|
2237
|
+
const onDragOver = React19__namespace.useCallback(
|
|
2319
2238
|
(event) => {
|
|
2320
2239
|
propsRef.current.onDragOver?.(event);
|
|
2321
2240
|
if (event.defaultPrevented) return;
|
|
@@ -2324,7 +2243,7 @@ function FileUploadDropzone(props) {
|
|
|
2324
2243
|
},
|
|
2325
2244
|
[store, propsRef]
|
|
2326
2245
|
);
|
|
2327
|
-
const onDragEnter =
|
|
2246
|
+
const onDragEnter = React19__namespace.useCallback(
|
|
2328
2247
|
(event) => {
|
|
2329
2248
|
propsRef.current.onDragEnter?.(event);
|
|
2330
2249
|
if (event.defaultPrevented) return;
|
|
@@ -2333,7 +2252,7 @@ function FileUploadDropzone(props) {
|
|
|
2333
2252
|
},
|
|
2334
2253
|
[store, propsRef]
|
|
2335
2254
|
);
|
|
2336
|
-
const onDragLeave =
|
|
2255
|
+
const onDragLeave = React19__namespace.useCallback(
|
|
2337
2256
|
(event) => {
|
|
2338
2257
|
propsRef.current.onDragLeave?.(event);
|
|
2339
2258
|
if (event.defaultPrevented) return;
|
|
@@ -2346,7 +2265,7 @@ function FileUploadDropzone(props) {
|
|
|
2346
2265
|
},
|
|
2347
2266
|
[store, propsRef]
|
|
2348
2267
|
);
|
|
2349
|
-
const onDrop =
|
|
2268
|
+
const onDrop = React19__namespace.useCallback(
|
|
2350
2269
|
(event) => {
|
|
2351
2270
|
propsRef.current.onDrop?.(event);
|
|
2352
2271
|
if (event.defaultPrevented) return;
|
|
@@ -2366,7 +2285,7 @@ function FileUploadDropzone(props) {
|
|
|
2366
2285
|
},
|
|
2367
2286
|
[store, context.inputRef, propsRef]
|
|
2368
2287
|
);
|
|
2369
|
-
const onPaste =
|
|
2288
|
+
const onPaste = React19__namespace.useCallback(
|
|
2370
2289
|
(event) => {
|
|
2371
2290
|
propsRef.current.onPaste?.(event);
|
|
2372
2291
|
if (event.defaultPrevented) return;
|
|
@@ -2398,7 +2317,7 @@ function FileUploadDropzone(props) {
|
|
|
2398
2317
|
},
|
|
2399
2318
|
[store, context.inputRef, propsRef]
|
|
2400
2319
|
);
|
|
2401
|
-
const onKeyDown =
|
|
2320
|
+
const onKeyDown = React19__namespace.useCallback(
|
|
2402
2321
|
(event) => {
|
|
2403
2322
|
propsRef.current.onKeyDown?.(event);
|
|
2404
2323
|
if (!event.defaultPrevented && (event.key === "Enter" || event.key === " ")) {
|
|
@@ -2409,7 +2328,7 @@ function FileUploadDropzone(props) {
|
|
|
2409
2328
|
[context.inputRef, propsRef]
|
|
2410
2329
|
);
|
|
2411
2330
|
const DropzonePrimitive = asChild ? reactSlot.Slot : "div";
|
|
2412
|
-
return /* @__PURE__ */
|
|
2331
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
2413
2332
|
DropzonePrimitive,
|
|
2414
2333
|
{
|
|
2415
2334
|
role: "region",
|
|
@@ -2424,7 +2343,7 @@ function FileUploadDropzone(props) {
|
|
|
2424
2343
|
dir: context.dir,
|
|
2425
2344
|
tabIndex: context.disabled ? -1 : 0,
|
|
2426
2345
|
...dropzoneProps,
|
|
2427
|
-
className:
|
|
2346
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
2428
2347
|
"relative flex select-none flex-col items-center justify-center gap-2 rounded-lg border-2 border-dashed p-6 outline-none transition-colors hover:bg-accent/30 focus-visible:border-ring/50 data-disabled:pointer-events-none data-dragging:border-primary/30 data-dragging:bg-accent/30 data-invalid:ring-destructive/20",
|
|
2429
2348
|
className
|
|
2430
2349
|
),
|
|
@@ -2451,7 +2370,7 @@ function FileUploadList(props) {
|
|
|
2451
2370
|
const shouldRender = forceMount || fileCount > 0;
|
|
2452
2371
|
if (!shouldRender) return null;
|
|
2453
2372
|
const ListPrimitive = asChild ? reactSlot.Slot : "div";
|
|
2454
|
-
return /* @__PURE__ */
|
|
2373
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
2455
2374
|
ListPrimitive,
|
|
2456
2375
|
{
|
|
2457
2376
|
role: "list",
|
|
@@ -2462,7 +2381,7 @@ function FileUploadList(props) {
|
|
|
2462
2381
|
"data-state": shouldRender ? "active" : "inactive",
|
|
2463
2382
|
dir: context.dir,
|
|
2464
2383
|
...listProps,
|
|
2465
|
-
className:
|
|
2384
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
2466
2385
|
"data-[state=inactive]:fade-out-0 data-[state=active]:fade-in-0 data-[state=inactive]:slide-out-to-top-2 data-[state=active]:slide-in-from-top-2 flex flex-col gap-2 data-[state=active]:animate-in data-[state=inactive]:animate-out",
|
|
2467
2386
|
orientation === "horizontal" && "flex-row overflow-x-auto p-1.5",
|
|
2468
2387
|
className
|
|
@@ -2470,9 +2389,9 @@ function FileUploadList(props) {
|
|
|
2470
2389
|
}
|
|
2471
2390
|
);
|
|
2472
2391
|
}
|
|
2473
|
-
var FileUploadItemContext =
|
|
2392
|
+
var FileUploadItemContext = React19__namespace.createContext(null);
|
|
2474
2393
|
function useFileUploadItemContext(consumerName) {
|
|
2475
|
-
const context =
|
|
2394
|
+
const context = React19__namespace.useContext(FileUploadItemContext);
|
|
2476
2395
|
if (!context) {
|
|
2477
2396
|
throw new Error(`\`${consumerName}\` must be used within \`${ITEM_NAME}\``);
|
|
2478
2397
|
}
|
|
@@ -2480,7 +2399,7 @@ function useFileUploadItemContext(consumerName) {
|
|
|
2480
2399
|
}
|
|
2481
2400
|
function FileUploadItem(props) {
|
|
2482
2401
|
const { value, asChild, className, ...itemProps } = props;
|
|
2483
|
-
const id =
|
|
2402
|
+
const id = React19__namespace.useId();
|
|
2484
2403
|
const statusId = `${id}-status`;
|
|
2485
2404
|
const nameId = `${id}-name`;
|
|
2486
2405
|
const sizeId = `${id}-size`;
|
|
@@ -2492,7 +2411,7 @@ function FileUploadItem(props) {
|
|
|
2492
2411
|
const files = Array.from(state.files.keys());
|
|
2493
2412
|
return files.indexOf(value) + 1;
|
|
2494
2413
|
});
|
|
2495
|
-
const itemContext =
|
|
2414
|
+
const itemContext = React19__namespace.useMemo(
|
|
2496
2415
|
() => ({
|
|
2497
2416
|
id,
|
|
2498
2417
|
fileState,
|
|
@@ -2506,7 +2425,7 @@ function FileUploadItem(props) {
|
|
|
2506
2425
|
if (!fileState) return null;
|
|
2507
2426
|
const statusText = fileState.error ? `Error: ${fileState.error}` : fileState.status === "uploading" ? `Uploading: ${fileState.progress}% complete` : fileState.status === "success" ? "Upload complete" : "Ready to upload";
|
|
2508
2427
|
const ItemPrimitive = asChild ? reactSlot.Slot : "div";
|
|
2509
|
-
return /* @__PURE__ */
|
|
2428
|
+
return /* @__PURE__ */ React19__namespace.createElement(FileUploadItemContext.Provider, { value: itemContext }, /* @__PURE__ */ React19__namespace.createElement(
|
|
2510
2429
|
ItemPrimitive,
|
|
2511
2430
|
{
|
|
2512
2431
|
role: "listitem",
|
|
@@ -2518,20 +2437,20 @@ function FileUploadItem(props) {
|
|
|
2518
2437
|
"data-slot": "file-upload-item",
|
|
2519
2438
|
dir: context.dir,
|
|
2520
2439
|
...itemProps,
|
|
2521
|
-
className:
|
|
2440
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
2522
2441
|
"relative flex items-center gap-2.5 rounded-md border p-3",
|
|
2523
2442
|
className
|
|
2524
2443
|
)
|
|
2525
2444
|
},
|
|
2526
2445
|
props.children,
|
|
2527
|
-
/* @__PURE__ */
|
|
2446
|
+
/* @__PURE__ */ React19__namespace.createElement("span", { id: statusId, className: "sr-only" }, statusText)
|
|
2528
2447
|
));
|
|
2529
2448
|
}
|
|
2530
2449
|
function FileUploadItemPreview(props) {
|
|
2531
2450
|
const { render, asChild, children, className, ...previewProps } = props;
|
|
2532
2451
|
const itemContext = useFileUploadItemContext(ITEM_PREVIEW_NAME);
|
|
2533
2452
|
const context = useFileUploadContext(ITEM_PREVIEW_NAME);
|
|
2534
|
-
const getDefaultRender =
|
|
2453
|
+
const getDefaultRender = React19__namespace.useCallback(
|
|
2535
2454
|
(file) => {
|
|
2536
2455
|
if (itemContext.fileState?.file.type.startsWith("image/")) {
|
|
2537
2456
|
let url = context.urlCache.get(file);
|
|
@@ -2541,14 +2460,14 @@ function FileUploadItemPreview(props) {
|
|
|
2541
2460
|
}
|
|
2542
2461
|
return (
|
|
2543
2462
|
// biome-ignore lint/performance/noImgElement: dynamic file URLs from user uploads don't work well with Next.js Image optimization
|
|
2544
|
-
/* @__PURE__ */
|
|
2463
|
+
/* @__PURE__ */ React19__namespace.createElement("img", { src: url, alt: file.name, className: "size-full object-cover" })
|
|
2545
2464
|
);
|
|
2546
2465
|
}
|
|
2547
2466
|
return getFileIcon(file);
|
|
2548
2467
|
},
|
|
2549
2468
|
[itemContext.fileState?.file.type, context.urlCache]
|
|
2550
2469
|
);
|
|
2551
|
-
const onPreviewRender =
|
|
2470
|
+
const onPreviewRender = React19__namespace.useCallback(
|
|
2552
2471
|
(file) => {
|
|
2553
2472
|
if (render) {
|
|
2554
2473
|
return render(file, () => getDefaultRender(file));
|
|
@@ -2559,13 +2478,13 @@ function FileUploadItemPreview(props) {
|
|
|
2559
2478
|
);
|
|
2560
2479
|
if (!itemContext.fileState) return null;
|
|
2561
2480
|
const ItemPreviewPrimitive = asChild ? reactSlot.Slot : "div";
|
|
2562
|
-
return /* @__PURE__ */
|
|
2481
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
2563
2482
|
ItemPreviewPrimitive,
|
|
2564
2483
|
{
|
|
2565
2484
|
"aria-labelledby": itemContext.nameId,
|
|
2566
2485
|
"data-slot": "file-upload-preview",
|
|
2567
2486
|
...previewProps,
|
|
2568
|
-
className:
|
|
2487
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
2569
2488
|
"relative flex size-10 shrink-0 items-center justify-center overflow-hidden rounded border bg-accent/50 [&>svg]:size-10",
|
|
2570
2489
|
className
|
|
2571
2490
|
)
|
|
@@ -2586,35 +2505,35 @@ function FileUploadItemMetadata(props) {
|
|
|
2586
2505
|
const itemContext = useFileUploadItemContext(ITEM_METADATA_NAME);
|
|
2587
2506
|
if (!itemContext.fileState) return null;
|
|
2588
2507
|
const ItemMetadataPrimitive = asChild ? reactSlot.Slot : "div";
|
|
2589
|
-
return /* @__PURE__ */
|
|
2508
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
2590
2509
|
ItemMetadataPrimitive,
|
|
2591
2510
|
{
|
|
2592
2511
|
"data-slot": "file-upload-metadata",
|
|
2593
2512
|
dir: context.dir,
|
|
2594
2513
|
...metadataProps,
|
|
2595
|
-
className:
|
|
2514
|
+
className: chunkQRI5TMES_cjs.cn("flex min-w-0 flex-1 flex-col", className)
|
|
2596
2515
|
},
|
|
2597
|
-
children ?? /* @__PURE__ */
|
|
2516
|
+
children ?? /* @__PURE__ */ React19__namespace.createElement(React19__namespace.Fragment, null, /* @__PURE__ */ React19__namespace.createElement(
|
|
2598
2517
|
"span",
|
|
2599
2518
|
{
|
|
2600
2519
|
id: itemContext.nameId,
|
|
2601
|
-
className:
|
|
2520
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
2602
2521
|
"truncate font-medium text-sm",
|
|
2603
2522
|
size === "sm" && "font-normal text-[13px] leading-snug"
|
|
2604
2523
|
)
|
|
2605
2524
|
},
|
|
2606
2525
|
itemContext.fileState.file.name
|
|
2607
|
-
), /* @__PURE__ */
|
|
2526
|
+
), /* @__PURE__ */ React19__namespace.createElement(
|
|
2608
2527
|
"span",
|
|
2609
2528
|
{
|
|
2610
2529
|
id: itemContext.sizeId,
|
|
2611
|
-
className:
|
|
2530
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
2612
2531
|
"truncate text-xs opacity-70",
|
|
2613
2532
|
size === "sm" && "text-[11px] leading-snug"
|
|
2614
2533
|
)
|
|
2615
2534
|
},
|
|
2616
2535
|
formatBytes(itemContext.fileState.file.size)
|
|
2617
|
-
), itemContext.fileState.error && /* @__PURE__ */
|
|
2536
|
+
), itemContext.fileState.error && /* @__PURE__ */ React19__namespace.createElement(
|
|
2618
2537
|
"span",
|
|
2619
2538
|
{
|
|
2620
2539
|
id: itemContext.messageId,
|
|
@@ -2628,7 +2547,7 @@ function FileUploadItemDelete(props) {
|
|
|
2628
2547
|
const { asChild, onClick: onClickProp, ...deleteProps } = props;
|
|
2629
2548
|
const store = useStoreContext(ITEM_DELETE_NAME);
|
|
2630
2549
|
const itemContext = useFileUploadItemContext(ITEM_DELETE_NAME);
|
|
2631
|
-
const onClick =
|
|
2550
|
+
const onClick = React19__namespace.useCallback(
|
|
2632
2551
|
(event) => {
|
|
2633
2552
|
onClickProp?.(event);
|
|
2634
2553
|
if (!itemContext.fileState || event.defaultPrevented) return;
|
|
@@ -2641,7 +2560,7 @@ function FileUploadItemDelete(props) {
|
|
|
2641
2560
|
);
|
|
2642
2561
|
if (!itemContext.fileState) return null;
|
|
2643
2562
|
const ItemDeletePrimitive = asChild ? reactSlot.Slot : "button";
|
|
2644
|
-
return /* @__PURE__ */
|
|
2563
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
2645
2564
|
ItemDeletePrimitive,
|
|
2646
2565
|
{
|
|
2647
2566
|
type: "button",
|
|
@@ -2680,16 +2599,16 @@ function FileInput({
|
|
|
2680
2599
|
onFileRemove,
|
|
2681
2600
|
...props
|
|
2682
2601
|
}) {
|
|
2683
|
-
const normalizedValue =
|
|
2602
|
+
const normalizedValue = React19__namespace.useMemo(() => {
|
|
2684
2603
|
const safeValue = Array.isArray(value) ? value : [];
|
|
2685
2604
|
return multiple ? safeValue : safeValue.slice(0, 1);
|
|
2686
2605
|
}, [multiple, value]);
|
|
2687
|
-
const [cropperOpen, setCropperOpen] =
|
|
2688
|
-
const [imageToCrop, setImageToCrop] =
|
|
2689
|
-
const [crop, setCrop] =
|
|
2690
|
-
const [zoom, setZoom] =
|
|
2691
|
-
const [croppedAreaPixels, setCroppedAreaPixels] =
|
|
2692
|
-
const validateFile =
|
|
2606
|
+
const [cropperOpen, setCropperOpen] = React19__namespace.useState(false);
|
|
2607
|
+
const [imageToCrop, setImageToCrop] = React19__namespace.useState(null);
|
|
2608
|
+
const [crop, setCrop] = React19__namespace.useState({ x: 0, y: 0 });
|
|
2609
|
+
const [zoom, setZoom] = React19__namespace.useState(1);
|
|
2610
|
+
const [croppedAreaPixels, setCroppedAreaPixels] = React19__namespace.useState(null);
|
|
2611
|
+
const validateFile = React19__namespace.useCallback(
|
|
2693
2612
|
(file) => {
|
|
2694
2613
|
if (accept) {
|
|
2695
2614
|
const acceptedTypes = accept.split(",").map((type) => type.trim());
|
|
@@ -2724,7 +2643,7 @@ function FileInput({
|
|
|
2724
2643
|
},
|
|
2725
2644
|
[accept, maxSize]
|
|
2726
2645
|
);
|
|
2727
|
-
const mapRejectedFileError =
|
|
2646
|
+
const mapRejectedFileError = React19__namespace.useCallback(
|
|
2728
2647
|
(file, message) => {
|
|
2729
2648
|
const normalizedMessage = message.toLowerCase();
|
|
2730
2649
|
if (normalizedMessage.includes("maximum") && normalizedMessage.includes("files")) {
|
|
@@ -2743,27 +2662,27 @@ function FileInput({
|
|
|
2743
2662
|
},
|
|
2744
2663
|
[maxSize]
|
|
2745
2664
|
);
|
|
2746
|
-
const handleFileValidate =
|
|
2665
|
+
const handleFileValidate = React19__namespace.useCallback(
|
|
2747
2666
|
(file) => {
|
|
2748
2667
|
const validationError = validateFile(file);
|
|
2749
2668
|
return validationError?.message ?? null;
|
|
2750
2669
|
},
|
|
2751
2670
|
[validateFile]
|
|
2752
2671
|
);
|
|
2753
|
-
const handleFileReject =
|
|
2672
|
+
const handleFileReject = React19__namespace.useCallback(
|
|
2754
2673
|
(file, message) => {
|
|
2755
2674
|
const validationError = mapRejectedFileError(file, message);
|
|
2756
2675
|
onValidationError?.([validationError]);
|
|
2757
2676
|
},
|
|
2758
2677
|
[mapRejectedFileError, onValidationError]
|
|
2759
2678
|
);
|
|
2760
|
-
const handleBlur =
|
|
2679
|
+
const handleBlur = React19__namespace.useCallback(() => {
|
|
2761
2680
|
onBlur?.();
|
|
2762
2681
|
}, [onBlur]);
|
|
2763
|
-
const fileIdentity =
|
|
2682
|
+
const fileIdentity = React19__namespace.useCallback((file) => {
|
|
2764
2683
|
return `${file.name}-${file.size}-${file.lastModified}`;
|
|
2765
2684
|
}, []);
|
|
2766
|
-
const handleValueChange =
|
|
2685
|
+
const handleValueChange = React19__namespace.useCallback(
|
|
2767
2686
|
(incomingFiles) => {
|
|
2768
2687
|
const nextFiles = multiple ? incomingFiles : incomingFiles.slice(-1);
|
|
2769
2688
|
if (onFileRemove && nextFiles.length < normalizedValue.length) {
|
|
@@ -2799,7 +2718,7 @@ function FileInput({
|
|
|
2799
2718
|
fileIdentity
|
|
2800
2719
|
]
|
|
2801
2720
|
);
|
|
2802
|
-
const createCroppedImage =
|
|
2721
|
+
const createCroppedImage = React19__namespace.useCallback(
|
|
2803
2722
|
async (imageUrl, cropArea) => {
|
|
2804
2723
|
return new Promise((resolve, reject) => {
|
|
2805
2724
|
const image = new Image();
|
|
@@ -2843,7 +2762,7 @@ function FileInput({
|
|
|
2843
2762
|
},
|
|
2844
2763
|
[]
|
|
2845
2764
|
);
|
|
2846
|
-
const handleCropSave =
|
|
2765
|
+
const handleCropSave = React19__namespace.useCallback(async () => {
|
|
2847
2766
|
if (!imageToCrop || !croppedAreaPixels) return;
|
|
2848
2767
|
try {
|
|
2849
2768
|
const croppedBlob = await createCroppedImage(
|
|
@@ -2891,7 +2810,7 @@ function FileInput({
|
|
|
2891
2810
|
onChange,
|
|
2892
2811
|
onCropComplete
|
|
2893
2812
|
]);
|
|
2894
|
-
const handleCropCancel =
|
|
2813
|
+
const handleCropCancel = React19__namespace.useCallback(() => {
|
|
2895
2814
|
if (imageToCrop) {
|
|
2896
2815
|
URL.revokeObjectURL(imageToCrop.url);
|
|
2897
2816
|
}
|
|
@@ -2901,32 +2820,32 @@ function FileInput({
|
|
|
2901
2820
|
setZoom(1);
|
|
2902
2821
|
setCroppedAreaPixels(null);
|
|
2903
2822
|
}, [imageToCrop]);
|
|
2904
|
-
const handleCrop =
|
|
2823
|
+
const handleCrop = React19__namespace.useCallback((file) => {
|
|
2905
2824
|
if (!file.type.startsWith("image/")) return;
|
|
2906
2825
|
const previewUrl = URL.createObjectURL(file);
|
|
2907
2826
|
setImageToCrop({ file, url: previewUrl });
|
|
2908
2827
|
setCropperOpen(true);
|
|
2909
2828
|
}, []);
|
|
2910
|
-
const onCropChange =
|
|
2829
|
+
const onCropChange = React19__namespace.useCallback((nextCrop) => {
|
|
2911
2830
|
setCrop(nextCrop);
|
|
2912
2831
|
}, []);
|
|
2913
|
-
const onZoomChange =
|
|
2832
|
+
const onZoomChange = React19__namespace.useCallback((nextZoom) => {
|
|
2914
2833
|
setZoom(nextZoom);
|
|
2915
2834
|
}, []);
|
|
2916
|
-
const onCropCompleteInternal =
|
|
2835
|
+
const onCropCompleteInternal = React19__namespace.useCallback(
|
|
2917
2836
|
(_, nextCroppedAreaPixels) => {
|
|
2918
2837
|
setCroppedAreaPixels(nextCroppedAreaPixels);
|
|
2919
2838
|
},
|
|
2920
2839
|
[]
|
|
2921
2840
|
);
|
|
2922
|
-
const formatFileSize =
|
|
2841
|
+
const formatFileSize = React19__namespace.useCallback((bytes) => {
|
|
2923
2842
|
if (bytes === 0) return "0 Bytes";
|
|
2924
2843
|
const unit = 1024;
|
|
2925
2844
|
const units = ["Bytes", "KB", "MB", "GB"];
|
|
2926
2845
|
const index = Math.floor(Math.log(bytes) / Math.log(unit));
|
|
2927
2846
|
return Math.round(bytes / Math.pow(unit, index) * 100) / 100 + " " + units[index];
|
|
2928
2847
|
}, []);
|
|
2929
|
-
|
|
2848
|
+
React19__namespace.useEffect(() => {
|
|
2930
2849
|
return () => {
|
|
2931
2850
|
if (imageToCrop) {
|
|
2932
2851
|
URL.revokeObjectURL(imageToCrop.url);
|
|
@@ -2934,7 +2853,7 @@ function FileInput({
|
|
|
2934
2853
|
};
|
|
2935
2854
|
}, [imageToCrop]);
|
|
2936
2855
|
const fileCountLabel = normalizedValue.length > 0 ? `${normalizedValue.length} file(s) selected` : placeholder;
|
|
2937
|
-
return /* @__PURE__ */
|
|
2856
|
+
return /* @__PURE__ */ React19__namespace.createElement(React19__namespace.Fragment, null, /* @__PURE__ */ React19__namespace.createElement(
|
|
2938
2857
|
FileUpload,
|
|
2939
2858
|
{
|
|
2940
2859
|
name,
|
|
@@ -2950,7 +2869,7 @@ function FileInput({
|
|
|
2950
2869
|
required: required && normalizedValue.length === 0,
|
|
2951
2870
|
invalid: Boolean(error || props["aria-invalid"]),
|
|
2952
2871
|
label: "File upload",
|
|
2953
|
-
className:
|
|
2872
|
+
className: chunkQRI5TMES_cjs.cn(className),
|
|
2954
2873
|
inputProps: {
|
|
2955
2874
|
...props,
|
|
2956
2875
|
onBlur: handleBlur,
|
|
@@ -2960,12 +2879,12 @@ function FileInput({
|
|
|
2960
2879
|
"aria-describedby": props["aria-describedby"]
|
|
2961
2880
|
}
|
|
2962
2881
|
},
|
|
2963
|
-
/* @__PURE__ */
|
|
2882
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
2964
2883
|
FileUploadDropzone,
|
|
2965
2884
|
{
|
|
2966
2885
|
role: "button",
|
|
2967
2886
|
"aria-label": placeholder,
|
|
2968
|
-
className:
|
|
2887
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
2969
2888
|
"flex min-h-32 w-full cursor-pointer items-center justify-center border-input bg-transparent p-6 transition-colors",
|
|
2970
2889
|
"hover:bg-accent/50 hover:border-ring",
|
|
2971
2890
|
"data-[dragging]:bg-accent data-[dragging]:border-ring",
|
|
@@ -2973,7 +2892,7 @@ function FileInput({
|
|
|
2973
2892
|
error && "border-destructive"
|
|
2974
2893
|
)
|
|
2975
2894
|
},
|
|
2976
|
-
/* @__PURE__ */
|
|
2895
|
+
/* @__PURE__ */ React19__namespace.createElement("div", { className: "flex flex-col items-center gap-2 text-center" }, /* @__PURE__ */ React19__namespace.createElement(
|
|
2977
2896
|
"svg",
|
|
2978
2897
|
{
|
|
2979
2898
|
width: "48",
|
|
@@ -2986,23 +2905,23 @@ function FileInput({
|
|
|
2986
2905
|
strokeLinejoin: "round",
|
|
2987
2906
|
"aria-hidden": "true"
|
|
2988
2907
|
},
|
|
2989
|
-
/* @__PURE__ */
|
|
2990
|
-
/* @__PURE__ */
|
|
2991
|
-
/* @__PURE__ */
|
|
2992
|
-
), /* @__PURE__ */
|
|
2908
|
+
/* @__PURE__ */ React19__namespace.createElement("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }),
|
|
2909
|
+
/* @__PURE__ */ React19__namespace.createElement("polyline", { points: "17 8 12 3 7 8" }),
|
|
2910
|
+
/* @__PURE__ */ React19__namespace.createElement("line", { x1: "12", y1: "3", x2: "12", y2: "15" })
|
|
2911
|
+
), /* @__PURE__ */ React19__namespace.createElement("p", { className: "text-sm font-medium" }, fileCountLabel), accept && /* @__PURE__ */ React19__namespace.createElement("p", { className: "text-xs" }, "Accepted: ", accept), /* @__PURE__ */ React19__namespace.createElement("p", { className: "text-xs" }, "Max size: ", formatFileSize(maxSize)))
|
|
2993
2912
|
),
|
|
2994
|
-
/* @__PURE__ */
|
|
2913
|
+
/* @__PURE__ */ React19__namespace.createElement(FileUploadList, { className: "mt-4" }, normalizedValue.map((file, index) => {
|
|
2995
2914
|
const progressValue = uploadProgress[file.name];
|
|
2996
2915
|
const hasProgress = showProgress && typeof progressValue === "number";
|
|
2997
|
-
return /* @__PURE__ */
|
|
2916
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
2998
2917
|
FileUploadItem,
|
|
2999
2918
|
{
|
|
3000
2919
|
key: `${file.name}-${index}`,
|
|
3001
2920
|
value: file,
|
|
3002
2921
|
className: "flex items-center gap-3 border-border bg-card text-card-foreground hover:bg-primary/50 transition-colors"
|
|
3003
2922
|
},
|
|
3004
|
-
showPreview ? /* @__PURE__ */
|
|
3005
|
-
/* @__PURE__ */
|
|
2923
|
+
showPreview ? /* @__PURE__ */ React19__namespace.createElement(FileUploadItemPreview, { className: "h-12 w-12 rounded [&>img]:h-full [&>img]:w-full [&>img]:object-cover [&>svg]:size-6" }) : null,
|
|
2924
|
+
/* @__PURE__ */ React19__namespace.createElement("div", { className: "flex min-w-0 flex-1 flex-col" }, /* @__PURE__ */ React19__namespace.createElement(FileUploadItemMetadata, { className: "min-w-0" }), /* @__PURE__ */ React19__namespace.createElement("span", { className: "text-xs" }, formatFileSize(file.size)), hasProgress ? /* @__PURE__ */ React19__namespace.createElement("div", { className: "mt-1 flex items-center gap-2" }, /* @__PURE__ */ React19__namespace.createElement(
|
|
3006
2925
|
"div",
|
|
3007
2926
|
{
|
|
3008
2927
|
className: "h-1.5 flex-1 overflow-hidden rounded-full bg-accent/40",
|
|
@@ -3012,16 +2931,16 @@ function FileInput({
|
|
|
3012
2931
|
"aria-valuemax": 100,
|
|
3013
2932
|
"aria-label": `Upload progress: ${progressValue}%`
|
|
3014
2933
|
},
|
|
3015
|
-
/* @__PURE__ */
|
|
2934
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
3016
2935
|
"div",
|
|
3017
2936
|
{
|
|
3018
2937
|
className: "h-full bg-primary transition-all",
|
|
3019
2938
|
style: { width: `${progressValue}%` }
|
|
3020
2939
|
}
|
|
3021
2940
|
)
|
|
3022
|
-
), /* @__PURE__ */
|
|
3023
|
-
enableCropping && file.type.startsWith("image/") ? /* @__PURE__ */
|
|
3024
|
-
|
|
2941
|
+
), /* @__PURE__ */ React19__namespace.createElement("span", { className: "text-xs" }, progressValue, "%")) : null),
|
|
2942
|
+
enableCropping && file.type.startsWith("image/") ? /* @__PURE__ */ React19__namespace.createElement(
|
|
2943
|
+
chunkQRI5TMES_cjs.Button,
|
|
3025
2944
|
{
|
|
3026
2945
|
type: "button",
|
|
3027
2946
|
variant: "ghost",
|
|
@@ -3034,7 +2953,7 @@ function FileInput({
|
|
|
3034
2953
|
className: "h-8 w-8 p-0",
|
|
3035
2954
|
"aria-label": `Crop ${file.name}`
|
|
3036
2955
|
},
|
|
3037
|
-
/* @__PURE__ */
|
|
2956
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
3038
2957
|
"svg",
|
|
3039
2958
|
{
|
|
3040
2959
|
width: "20",
|
|
@@ -3047,12 +2966,12 @@ function FileInput({
|
|
|
3047
2966
|
strokeLinejoin: "round",
|
|
3048
2967
|
"aria-hidden": "true"
|
|
3049
2968
|
},
|
|
3050
|
-
/* @__PURE__ */
|
|
3051
|
-
/* @__PURE__ */
|
|
2969
|
+
/* @__PURE__ */ React19__namespace.createElement("path", { d: "M6.13 1L6 16a2 2 0 0 0 2 2h15" }),
|
|
2970
|
+
/* @__PURE__ */ React19__namespace.createElement("path", { d: "M1 6.13L16 6a2 2 0 0 1 2 2v15" })
|
|
3052
2971
|
)
|
|
3053
2972
|
) : null,
|
|
3054
|
-
/* @__PURE__ */
|
|
3055
|
-
|
|
2973
|
+
/* @__PURE__ */ React19__namespace.createElement(FileUploadItemDelete, { asChild: true }, /* @__PURE__ */ React19__namespace.createElement(
|
|
2974
|
+
chunkQRI5TMES_cjs.Button,
|
|
3056
2975
|
{
|
|
3057
2976
|
type: "button",
|
|
3058
2977
|
variant: "ghost",
|
|
@@ -3061,7 +2980,7 @@ function FileInput({
|
|
|
3061
2980
|
className: "h-8 w-8 p-0",
|
|
3062
2981
|
"aria-label": `Remove ${file.name}`
|
|
3063
2982
|
},
|
|
3064
|
-
/* @__PURE__ */
|
|
2983
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
3065
2984
|
"svg",
|
|
3066
2985
|
{
|
|
3067
2986
|
width: "20",
|
|
@@ -3074,13 +2993,13 @@ function FileInput({
|
|
|
3074
2993
|
strokeLinejoin: "round",
|
|
3075
2994
|
"aria-hidden": "true"
|
|
3076
2995
|
},
|
|
3077
|
-
/* @__PURE__ */
|
|
3078
|
-
/* @__PURE__ */
|
|
2996
|
+
/* @__PURE__ */ React19__namespace.createElement("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
|
|
2997
|
+
/* @__PURE__ */ React19__namespace.createElement("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
|
|
3079
2998
|
)
|
|
3080
2999
|
))
|
|
3081
3000
|
);
|
|
3082
3001
|
}))
|
|
3083
|
-
), /* @__PURE__ */
|
|
3002
|
+
), /* @__PURE__ */ React19__namespace.createElement(
|
|
3084
3003
|
Dialog,
|
|
3085
3004
|
{
|
|
3086
3005
|
open: cropperOpen && Boolean(imageToCrop),
|
|
@@ -3090,15 +3009,15 @@ function FileInput({
|
|
|
3090
3009
|
}
|
|
3091
3010
|
}
|
|
3092
3011
|
},
|
|
3093
|
-
imageToCrop ? /* @__PURE__ */
|
|
3012
|
+
imageToCrop ? /* @__PURE__ */ React19__namespace.createElement(
|
|
3094
3013
|
DialogContent,
|
|
3095
3014
|
{
|
|
3096
3015
|
showCloseButton: false,
|
|
3097
3016
|
className: "max-w-3xl gap-0 p-0",
|
|
3098
3017
|
"aria-describedby": void 0
|
|
3099
3018
|
},
|
|
3100
|
-
/* @__PURE__ */
|
|
3101
|
-
|
|
3019
|
+
/* @__PURE__ */ React19__namespace.createElement(DialogHeader, { className: "flex-row items-center justify-between border-b border-border px-4 py-3" }, /* @__PURE__ */ React19__namespace.createElement(DialogTitle, null, "Crop Image"), /* @__PURE__ */ React19__namespace.createElement(DialogClose, { asChild: true }, /* @__PURE__ */ React19__namespace.createElement(
|
|
3020
|
+
chunkQRI5TMES_cjs.Button,
|
|
3102
3021
|
{
|
|
3103
3022
|
type: "button",
|
|
3104
3023
|
variant: "ghost",
|
|
@@ -3106,7 +3025,7 @@ function FileInput({
|
|
|
3106
3025
|
className: "h-8 w-8 p-0",
|
|
3107
3026
|
"aria-label": "Close"
|
|
3108
3027
|
},
|
|
3109
|
-
/* @__PURE__ */
|
|
3028
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
3110
3029
|
"svg",
|
|
3111
3030
|
{
|
|
3112
3031
|
width: "16",
|
|
@@ -3119,11 +3038,11 @@ function FileInput({
|
|
|
3119
3038
|
strokeLinejoin: "round",
|
|
3120
3039
|
"aria-hidden": "true"
|
|
3121
3040
|
},
|
|
3122
|
-
/* @__PURE__ */
|
|
3123
|
-
/* @__PURE__ */
|
|
3041
|
+
/* @__PURE__ */ React19__namespace.createElement("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
|
|
3042
|
+
/* @__PURE__ */ React19__namespace.createElement("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
|
|
3124
3043
|
)
|
|
3125
3044
|
))),
|
|
3126
|
-
/* @__PURE__ */
|
|
3045
|
+
/* @__PURE__ */ React19__namespace.createElement("div", { className: "p-4" }, /* @__PURE__ */ React19__namespace.createElement(
|
|
3127
3046
|
"div",
|
|
3128
3047
|
{
|
|
3129
3048
|
className: "relative h-96 w-full overflow-hidden rounded-md bg-accent/40",
|
|
@@ -3145,7 +3064,7 @@ function FileInput({
|
|
|
3145
3064
|
document.addEventListener("mouseup", handleMouseUp);
|
|
3146
3065
|
}
|
|
3147
3066
|
},
|
|
3148
|
-
/* @__PURE__ */
|
|
3067
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
3149
3068
|
"img",
|
|
3150
3069
|
{
|
|
3151
3070
|
src: imageToCrop.url,
|
|
@@ -3180,7 +3099,7 @@ function FileInput({
|
|
|
3180
3099
|
}
|
|
3181
3100
|
}
|
|
3182
3101
|
),
|
|
3183
|
-
/* @__PURE__ */
|
|
3102
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
3184
3103
|
"div",
|
|
3185
3104
|
{
|
|
3186
3105
|
className: "pointer-events-none absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 rounded border-2 border-primary",
|
|
@@ -3189,9 +3108,9 @@ function FileInput({
|
|
|
3189
3108
|
aspectRatio: cropAspectRatio ? String(cropAspectRatio) : void 0
|
|
3190
3109
|
}
|
|
3191
3110
|
},
|
|
3192
|
-
/* @__PURE__ */
|
|
3111
|
+
/* @__PURE__ */ React19__namespace.createElement("div", { className: "absolute inset-0 grid grid-cols-3 grid-rows-3" }, /* @__PURE__ */ React19__namespace.createElement("div", { className: "border-r border-b border-primary/30" }), /* @__PURE__ */ React19__namespace.createElement("div", { className: "border-r border-b border-primary/30" }), /* @__PURE__ */ React19__namespace.createElement("div", { className: "border-b border-primary/30" }), /* @__PURE__ */ React19__namespace.createElement("div", { className: "border-r border-b border-primary/30" }), /* @__PURE__ */ React19__namespace.createElement("div", { className: "border-r border-b border-primary/30" }), /* @__PURE__ */ React19__namespace.createElement("div", { className: "border-b border-primary/30" }), /* @__PURE__ */ React19__namespace.createElement("div", { className: "border-r border-primary/30" }), /* @__PURE__ */ React19__namespace.createElement("div", { className: "border-r border-primary/30" }), /* @__PURE__ */ React19__namespace.createElement("div", null))
|
|
3193
3112
|
)
|
|
3194
|
-
), /* @__PURE__ */
|
|
3113
|
+
), /* @__PURE__ */ React19__namespace.createElement("div", { className: "mt-4 flex items-center gap-3" }, /* @__PURE__ */ React19__namespace.createElement(
|
|
3195
3114
|
"label",
|
|
3196
3115
|
{
|
|
3197
3116
|
htmlFor: "zoom-slider",
|
|
@@ -3200,7 +3119,7 @@ function FileInput({
|
|
|
3200
3119
|
"Zoom: ",
|
|
3201
3120
|
zoom.toFixed(1),
|
|
3202
3121
|
"x"
|
|
3203
|
-
), /* @__PURE__ */
|
|
3122
|
+
), /* @__PURE__ */ React19__namespace.createElement(
|
|
3204
3123
|
"input",
|
|
3205
3124
|
{
|
|
3206
3125
|
id: "zoom-slider",
|
|
@@ -3214,7 +3133,7 @@ function FileInput({
|
|
|
3214
3133
|
"aria-label": "Zoom level"
|
|
3215
3134
|
}
|
|
3216
3135
|
))),
|
|
3217
|
-
/* @__PURE__ */
|
|
3136
|
+
/* @__PURE__ */ React19__namespace.createElement("div", { className: "flex items-center justify-end gap-2 border-t border-border p-4" }, /* @__PURE__ */ React19__namespace.createElement(chunkQRI5TMES_cjs.Button, { type: "button", variant: "outline", onClick: handleCropCancel }, "Cancel"), /* @__PURE__ */ React19__namespace.createElement(chunkQRI5TMES_cjs.Button, { type: "button", onClick: handleCropSave }, "Save"))
|
|
3218
3137
|
) : null
|
|
3219
3138
|
));
|
|
3220
3139
|
}
|
|
@@ -3230,11 +3149,11 @@ function Calendar({
|
|
|
3230
3149
|
...props
|
|
3231
3150
|
}) {
|
|
3232
3151
|
const defaultClassNames = reactDayPicker.getDefaultClassNames();
|
|
3233
|
-
return /* @__PURE__ */
|
|
3152
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
3234
3153
|
reactDayPicker.DayPicker,
|
|
3235
3154
|
{
|
|
3236
3155
|
showOutsideDays,
|
|
3237
|
-
className:
|
|
3156
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
3238
3157
|
"bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent",
|
|
3239
3158
|
String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,
|
|
3240
3159
|
String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,
|
|
@@ -3246,106 +3165,106 @@ function Calendar({
|
|
|
3246
3165
|
...formatters
|
|
3247
3166
|
},
|
|
3248
3167
|
classNames: {
|
|
3249
|
-
root:
|
|
3250
|
-
months:
|
|
3168
|
+
root: chunkQRI5TMES_cjs.cn("w-fit", defaultClassNames.root),
|
|
3169
|
+
months: chunkQRI5TMES_cjs.cn(
|
|
3251
3170
|
"flex gap-4 flex-col md:flex-row relative",
|
|
3252
3171
|
defaultClassNames.months
|
|
3253
3172
|
),
|
|
3254
|
-
month:
|
|
3255
|
-
nav:
|
|
3173
|
+
month: chunkQRI5TMES_cjs.cn("flex flex-col w-full gap-4", defaultClassNames.month),
|
|
3174
|
+
nav: chunkQRI5TMES_cjs.cn(
|
|
3256
3175
|
"flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between",
|
|
3257
3176
|
defaultClassNames.nav
|
|
3258
3177
|
),
|
|
3259
|
-
button_previous:
|
|
3260
|
-
|
|
3178
|
+
button_previous: chunkQRI5TMES_cjs.cn(
|
|
3179
|
+
chunkQRI5TMES_cjs.buttonVariants({ variant: buttonVariant }),
|
|
3261
3180
|
"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",
|
|
3262
3181
|
defaultClassNames.button_previous
|
|
3263
3182
|
),
|
|
3264
|
-
button_next:
|
|
3265
|
-
|
|
3183
|
+
button_next: chunkQRI5TMES_cjs.cn(
|
|
3184
|
+
chunkQRI5TMES_cjs.buttonVariants({ variant: buttonVariant }),
|
|
3266
3185
|
"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",
|
|
3267
3186
|
defaultClassNames.button_next
|
|
3268
3187
|
),
|
|
3269
|
-
month_caption:
|
|
3188
|
+
month_caption: chunkQRI5TMES_cjs.cn(
|
|
3270
3189
|
"flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)",
|
|
3271
3190
|
defaultClassNames.month_caption
|
|
3272
3191
|
),
|
|
3273
|
-
dropdowns:
|
|
3192
|
+
dropdowns: chunkQRI5TMES_cjs.cn(
|
|
3274
3193
|
"w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5",
|
|
3275
3194
|
defaultClassNames.dropdowns
|
|
3276
3195
|
),
|
|
3277
|
-
dropdown_root:
|
|
3196
|
+
dropdown_root: chunkQRI5TMES_cjs.cn(
|
|
3278
3197
|
"relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md",
|
|
3279
3198
|
defaultClassNames.dropdown_root
|
|
3280
3199
|
),
|
|
3281
|
-
dropdown:
|
|
3200
|
+
dropdown: chunkQRI5TMES_cjs.cn(
|
|
3282
3201
|
"absolute bg-popover inset-0 opacity-0",
|
|
3283
3202
|
defaultClassNames.dropdown
|
|
3284
3203
|
),
|
|
3285
|
-
caption_label:
|
|
3204
|
+
caption_label: chunkQRI5TMES_cjs.cn(
|
|
3286
3205
|
"select-none font-medium",
|
|
3287
3206
|
captionLayout === "label" ? "text-sm" : "rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:opacity-70 [&>svg]:size-3.5",
|
|
3288
3207
|
defaultClassNames.caption_label
|
|
3289
3208
|
),
|
|
3290
3209
|
table: "w-full border-collapse",
|
|
3291
|
-
weekdays:
|
|
3292
|
-
weekday:
|
|
3210
|
+
weekdays: chunkQRI5TMES_cjs.cn("flex", defaultClassNames.weekdays),
|
|
3211
|
+
weekday: chunkQRI5TMES_cjs.cn(
|
|
3293
3212
|
"opacity-70 rounded-md flex-1 font-normal text-[0.8rem] select-none",
|
|
3294
3213
|
defaultClassNames.weekday
|
|
3295
3214
|
),
|
|
3296
|
-
week:
|
|
3297
|
-
week_number_header:
|
|
3215
|
+
week: chunkQRI5TMES_cjs.cn("flex w-full mt-2", defaultClassNames.week),
|
|
3216
|
+
week_number_header: chunkQRI5TMES_cjs.cn(
|
|
3298
3217
|
"select-none w-(--cell-size)",
|
|
3299
3218
|
defaultClassNames.week_number_header
|
|
3300
3219
|
),
|
|
3301
|
-
week_number:
|
|
3220
|
+
week_number: chunkQRI5TMES_cjs.cn(
|
|
3302
3221
|
"text-[0.8rem] select-none opacity-70",
|
|
3303
3222
|
defaultClassNames.week_number
|
|
3304
3223
|
),
|
|
3305
|
-
day:
|
|
3224
|
+
day: chunkQRI5TMES_cjs.cn(
|
|
3306
3225
|
"relative w-full h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none",
|
|
3307
3226
|
props.showWeekNumber ? "[&:nth-child(2)[data-selected=true]_button]:rounded-l-md" : "[&:first-child[data-selected=true]_button]:rounded-l-md",
|
|
3308
3227
|
defaultClassNames.day
|
|
3309
3228
|
),
|
|
3310
|
-
range_start:
|
|
3229
|
+
range_start: chunkQRI5TMES_cjs.cn(
|
|
3311
3230
|
"rounded-l-md bg-accent",
|
|
3312
3231
|
defaultClassNames.range_start
|
|
3313
3232
|
),
|
|
3314
|
-
range_middle:
|
|
3315
|
-
range_end:
|
|
3316
|
-
today:
|
|
3233
|
+
range_middle: chunkQRI5TMES_cjs.cn("rounded-none", defaultClassNames.range_middle),
|
|
3234
|
+
range_end: chunkQRI5TMES_cjs.cn("rounded-r-md bg-accent", defaultClassNames.range_end),
|
|
3235
|
+
today: chunkQRI5TMES_cjs.cn(
|
|
3317
3236
|
"bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",
|
|
3318
3237
|
defaultClassNames.today
|
|
3319
3238
|
),
|
|
3320
|
-
outside:
|
|
3239
|
+
outside: chunkQRI5TMES_cjs.cn(
|
|
3321
3240
|
"opacity-50",
|
|
3322
3241
|
defaultClassNames.outside
|
|
3323
3242
|
),
|
|
3324
|
-
disabled:
|
|
3243
|
+
disabled: chunkQRI5TMES_cjs.cn(
|
|
3325
3244
|
"opacity-50",
|
|
3326
3245
|
defaultClassNames.disabled
|
|
3327
3246
|
),
|
|
3328
|
-
hidden:
|
|
3247
|
+
hidden: chunkQRI5TMES_cjs.cn("invisible", defaultClassNames.hidden),
|
|
3329
3248
|
...classNames
|
|
3330
3249
|
},
|
|
3331
3250
|
components: {
|
|
3332
3251
|
Root: ({ className: className2, rootRef, ...props2 }) => {
|
|
3333
|
-
return /* @__PURE__ */
|
|
3252
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
3334
3253
|
"div",
|
|
3335
3254
|
{
|
|
3336
3255
|
"data-slot": "calendar",
|
|
3337
3256
|
ref: rootRef,
|
|
3338
|
-
className:
|
|
3257
|
+
className: chunkQRI5TMES_cjs.cn(className2),
|
|
3339
3258
|
...props2
|
|
3340
3259
|
}
|
|
3341
3260
|
);
|
|
3342
3261
|
},
|
|
3343
3262
|
Chevron: ({ className: className2, orientation, ...props2 }) => {
|
|
3344
3263
|
if (orientation === "left") {
|
|
3345
|
-
return /* @__PURE__ */
|
|
3264
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
3346
3265
|
"svg",
|
|
3347
3266
|
{
|
|
3348
|
-
className:
|
|
3267
|
+
className: chunkQRI5TMES_cjs.cn("size-4", className2),
|
|
3349
3268
|
viewBox: "0 0 24 24",
|
|
3350
3269
|
fill: "none",
|
|
3351
3270
|
stroke: "currentColor",
|
|
@@ -3354,14 +3273,14 @@ function Calendar({
|
|
|
3354
3273
|
strokeLinejoin: "round",
|
|
3355
3274
|
...props2
|
|
3356
3275
|
},
|
|
3357
|
-
/* @__PURE__ */
|
|
3276
|
+
/* @__PURE__ */ React19__namespace.createElement("polyline", { points: "15 18 9 12 15 6" })
|
|
3358
3277
|
);
|
|
3359
3278
|
}
|
|
3360
3279
|
if (orientation === "right") {
|
|
3361
|
-
return /* @__PURE__ */
|
|
3280
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
3362
3281
|
"svg",
|
|
3363
3282
|
{
|
|
3364
|
-
className:
|
|
3283
|
+
className: chunkQRI5TMES_cjs.cn("size-4", className2),
|
|
3365
3284
|
viewBox: "0 0 24 24",
|
|
3366
3285
|
fill: "none",
|
|
3367
3286
|
stroke: "currentColor",
|
|
@@ -3370,13 +3289,13 @@ function Calendar({
|
|
|
3370
3289
|
strokeLinejoin: "round",
|
|
3371
3290
|
...props2
|
|
3372
3291
|
},
|
|
3373
|
-
/* @__PURE__ */
|
|
3292
|
+
/* @__PURE__ */ React19__namespace.createElement("polyline", { points: "9 18 15 12 9 6" })
|
|
3374
3293
|
);
|
|
3375
3294
|
}
|
|
3376
|
-
return /* @__PURE__ */
|
|
3295
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
3377
3296
|
"svg",
|
|
3378
3297
|
{
|
|
3379
|
-
className:
|
|
3298
|
+
className: chunkQRI5TMES_cjs.cn("size-4", className2),
|
|
3380
3299
|
viewBox: "0 0 24 24",
|
|
3381
3300
|
fill: "none",
|
|
3382
3301
|
stroke: "currentColor",
|
|
@@ -3385,12 +3304,12 @@ function Calendar({
|
|
|
3385
3304
|
strokeLinejoin: "round",
|
|
3386
3305
|
...props2
|
|
3387
3306
|
},
|
|
3388
|
-
/* @__PURE__ */
|
|
3307
|
+
/* @__PURE__ */ React19__namespace.createElement("polyline", { points: "6 9 12 15 18 9" })
|
|
3389
3308
|
);
|
|
3390
3309
|
},
|
|
3391
3310
|
DayButton: CalendarDayButton,
|
|
3392
3311
|
WeekNumber: ({ children, ...props2 }) => {
|
|
3393
|
-
return /* @__PURE__ */
|
|
3312
|
+
return /* @__PURE__ */ React19__namespace.createElement("td", { ...props2 }, /* @__PURE__ */ React19__namespace.createElement("div", { className: "flex size-(--cell-size) items-center justify-center text-center" }, children));
|
|
3394
3313
|
},
|
|
3395
3314
|
...components
|
|
3396
3315
|
},
|
|
@@ -3405,12 +3324,12 @@ function CalendarDayButton({
|
|
|
3405
3324
|
...props
|
|
3406
3325
|
}) {
|
|
3407
3326
|
const defaultClassNames = reactDayPicker.getDefaultClassNames();
|
|
3408
|
-
const ref =
|
|
3409
|
-
|
|
3327
|
+
const ref = React19__namespace.useRef(null);
|
|
3328
|
+
React19__namespace.useEffect(() => {
|
|
3410
3329
|
if (modifiers.focused) ref.current?.focus();
|
|
3411
3330
|
}, [modifiers.focused]);
|
|
3412
|
-
return /* @__PURE__ */
|
|
3413
|
-
|
|
3331
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
3332
|
+
chunkQRI5TMES_cjs.Button,
|
|
3414
3333
|
{
|
|
3415
3334
|
ref,
|
|
3416
3335
|
variant: "ghost",
|
|
@@ -3420,7 +3339,7 @@ function CalendarDayButton({
|
|
|
3420
3339
|
"data-range-start": modifiers.range_start,
|
|
3421
3340
|
"data-range-end": modifiers.range_end,
|
|
3422
3341
|
"data-range-middle": modifiers.range_middle,
|
|
3423
|
-
className:
|
|
3342
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
3424
3343
|
// Core structure
|
|
3425
3344
|
"flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal",
|
|
3426
3345
|
// Selected states - uses CSS variables
|
|
@@ -3461,11 +3380,11 @@ function DatePickerDayButton({
|
|
|
3461
3380
|
children,
|
|
3462
3381
|
...props
|
|
3463
3382
|
}) {
|
|
3464
|
-
return /* @__PURE__ */
|
|
3383
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
3465
3384
|
"button",
|
|
3466
3385
|
{
|
|
3467
3386
|
type: "button",
|
|
3468
|
-
className:
|
|
3387
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
3469
3388
|
"flex items-center justify-center h-8 w-8 rounded-md border-none bg-transparent cursor-pointer text-sm transition-colors",
|
|
3470
3389
|
"hover:bg-accent",
|
|
3471
3390
|
modifiers.selected && "bg-primary text-primary-foreground font-semibold",
|
|
@@ -3497,18 +3416,18 @@ function DatePicker({
|
|
|
3497
3416
|
showIcon = true,
|
|
3498
3417
|
...props
|
|
3499
3418
|
}) {
|
|
3500
|
-
const [isOpen, setIsOpen] =
|
|
3501
|
-
const [hasInteracted, setHasInteracted] =
|
|
3502
|
-
const [selectedMonth, setSelectedMonth] =
|
|
3419
|
+
const [isOpen, setIsOpen] = React19__namespace.useState(false);
|
|
3420
|
+
const [hasInteracted, setHasInteracted] = React19__namespace.useState(false);
|
|
3421
|
+
const [selectedMonth, setSelectedMonth] = React19__namespace.useState(
|
|
3503
3422
|
value || /* @__PURE__ */ new Date()
|
|
3504
3423
|
);
|
|
3505
|
-
const inputRef =
|
|
3506
|
-
|
|
3424
|
+
const inputRef = React19__namespace.useRef(null);
|
|
3425
|
+
React19__namespace.useEffect(() => {
|
|
3507
3426
|
if (value) {
|
|
3508
3427
|
setSelectedMonth(value);
|
|
3509
3428
|
}
|
|
3510
3429
|
}, [value]);
|
|
3511
|
-
const disabledMatchers =
|
|
3430
|
+
const disabledMatchers = React19__namespace.useMemo(() => {
|
|
3512
3431
|
const matchers = [];
|
|
3513
3432
|
if (minDate) {
|
|
3514
3433
|
matchers.push({ before: minDate });
|
|
@@ -3524,7 +3443,7 @@ function DatePicker({
|
|
|
3524
3443
|
}
|
|
3525
3444
|
return matchers;
|
|
3526
3445
|
}, [disabledDates, isDateDisabled, maxDate, minDate]);
|
|
3527
|
-
const handleDateSelect =
|
|
3446
|
+
const handleDateSelect = React19__namespace.useCallback(
|
|
3528
3447
|
(date) => {
|
|
3529
3448
|
if (!date) return;
|
|
3530
3449
|
onChange(date);
|
|
@@ -3534,7 +3453,7 @@ function DatePicker({
|
|
|
3534
3453
|
},
|
|
3535
3454
|
[onBlur, onChange]
|
|
3536
3455
|
);
|
|
3537
|
-
const handleClear =
|
|
3456
|
+
const handleClear = React19__namespace.useCallback(
|
|
3538
3457
|
(e) => {
|
|
3539
3458
|
e.stopPropagation();
|
|
3540
3459
|
onChange(null);
|
|
@@ -3543,7 +3462,7 @@ function DatePicker({
|
|
|
3543
3462
|
},
|
|
3544
3463
|
[onChange]
|
|
3545
3464
|
);
|
|
3546
|
-
const handleOpenChange =
|
|
3465
|
+
const handleOpenChange = React19__namespace.useCallback(
|
|
3547
3466
|
(nextOpen) => {
|
|
3548
3467
|
if (disabled) {
|
|
3549
3468
|
setIsOpen(false);
|
|
@@ -3563,33 +3482,33 @@ function DatePicker({
|
|
|
3563
3482
|
},
|
|
3564
3483
|
[disabled, hasInteracted, isOpen, onBlur]
|
|
3565
3484
|
);
|
|
3566
|
-
const handleInputBlur =
|
|
3485
|
+
const handleInputBlur = React19__namespace.useCallback(() => {
|
|
3567
3486
|
if (!isOpen) {
|
|
3568
3487
|
onBlur?.();
|
|
3569
3488
|
}
|
|
3570
3489
|
}, [isOpen, onBlur]);
|
|
3571
|
-
const handleInputClick =
|
|
3490
|
+
const handleInputClick = React19__namespace.useCallback(() => {
|
|
3572
3491
|
if (!hasInteracted) {
|
|
3573
3492
|
setHasInteracted(true);
|
|
3574
3493
|
}
|
|
3575
3494
|
}, [hasInteracted]);
|
|
3576
3495
|
const hasValue = Boolean(value);
|
|
3577
3496
|
const displayValue = formatDate(value, format);
|
|
3578
|
-
const combinedClassName =
|
|
3579
|
-
return /* @__PURE__ */
|
|
3497
|
+
const combinedClassName = chunkQRI5TMES_cjs.cn("relative", className);
|
|
3498
|
+
return /* @__PURE__ */ React19__namespace.createElement("div", { className: combinedClassName }, /* @__PURE__ */ React19__namespace.createElement(
|
|
3580
3499
|
"input",
|
|
3581
3500
|
{
|
|
3582
3501
|
type: "hidden",
|
|
3583
3502
|
name,
|
|
3584
3503
|
value: value ? value.toISOString() : ""
|
|
3585
3504
|
}
|
|
3586
|
-
), /* @__PURE__ */
|
|
3505
|
+
), /* @__PURE__ */ React19__namespace.createElement(Popover, { open: isOpen, onOpenChange: handleOpenChange }, /* @__PURE__ */ React19__namespace.createElement("div", { className: "relative" }, showIcon && /* @__PURE__ */ React19__namespace.createElement(
|
|
3587
3506
|
"span",
|
|
3588
3507
|
{
|
|
3589
3508
|
className: "absolute left-3 top-1/2 -translate-y-1/2 pointer-events-none",
|
|
3590
3509
|
"aria-hidden": "true"
|
|
3591
3510
|
},
|
|
3592
|
-
/* @__PURE__ */
|
|
3511
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
3593
3512
|
"svg",
|
|
3594
3513
|
{
|
|
3595
3514
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -3602,19 +3521,19 @@ function DatePicker({
|
|
|
3602
3521
|
strokeLinejoin: "round",
|
|
3603
3522
|
strokeWidth: "2"
|
|
3604
3523
|
},
|
|
3605
|
-
/* @__PURE__ */
|
|
3524
|
+
/* @__PURE__ */ React19__namespace.createElement("path", { d: "M8 2v4m8-4v4m5 8V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8M3 10h18m-5 10l2 2l4-4" })
|
|
3606
3525
|
)
|
|
3607
|
-
), /* @__PURE__ */
|
|
3526
|
+
), /* @__PURE__ */ React19__namespace.createElement(PopoverTrigger, { asChild: true }, /* @__PURE__ */ React19__namespace.createElement(
|
|
3608
3527
|
"input",
|
|
3609
3528
|
{
|
|
3610
3529
|
ref: inputRef,
|
|
3611
3530
|
id: props.id,
|
|
3612
3531
|
type: "text",
|
|
3613
|
-
className:
|
|
3532
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
3614
3533
|
"flex h-9 w-full rounded-md border border-input bg-transparent py-1 text-base shadow-sm transition-colors",
|
|
3615
3534
|
"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
|
|
3616
3535
|
"disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
|
|
3617
|
-
|
|
3536
|
+
chunkQRI5TMES_cjs.INPUT_AUTOFILL_RESET_CLASSES,
|
|
3618
3537
|
showIcon ? "pl-10" : "pl-3",
|
|
3619
3538
|
clearable && value ? "pr-10" : "pr-3",
|
|
3620
3539
|
!error && hasValue && "ring-2 ring-ring",
|
|
@@ -3631,7 +3550,7 @@ function DatePicker({
|
|
|
3631
3550
|
"aria-required": required || props["aria-required"],
|
|
3632
3551
|
readOnly: true
|
|
3633
3552
|
}
|
|
3634
|
-
)), clearable && value && !disabled && /* @__PURE__ */
|
|
3553
|
+
)), clearable && value && !disabled && /* @__PURE__ */ React19__namespace.createElement(
|
|
3635
3554
|
"button",
|
|
3636
3555
|
{
|
|
3637
3556
|
type: "button",
|
|
@@ -3641,7 +3560,7 @@ function DatePicker({
|
|
|
3641
3560
|
tabIndex: -1
|
|
3642
3561
|
},
|
|
3643
3562
|
"\u2715"
|
|
3644
|
-
)), !disabled && /* @__PURE__ */
|
|
3563
|
+
)), !disabled && /* @__PURE__ */ React19__namespace.createElement(
|
|
3645
3564
|
PopoverContent,
|
|
3646
3565
|
{
|
|
3647
3566
|
align: "start",
|
|
@@ -3651,7 +3570,7 @@ function DatePicker({
|
|
|
3651
3570
|
event.preventDefault();
|
|
3652
3571
|
}
|
|
3653
3572
|
},
|
|
3654
|
-
/* @__PURE__ */
|
|
3573
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
3655
3574
|
Calendar,
|
|
3656
3575
|
{
|
|
3657
3576
|
mode: "single",
|
|
@@ -3735,11 +3654,11 @@ function TimePicker({
|
|
|
3735
3654
|
showIcon = true,
|
|
3736
3655
|
...props
|
|
3737
3656
|
}) {
|
|
3738
|
-
const inputRef =
|
|
3739
|
-
const [nativeValue, setNativeValue] =
|
|
3657
|
+
const inputRef = React19__namespace.useRef(null);
|
|
3658
|
+
const [nativeValue, setNativeValue] = React19__namespace.useState(
|
|
3740
3659
|
normalizeToNativeTime(value)
|
|
3741
3660
|
);
|
|
3742
|
-
|
|
3661
|
+
React19__namespace.useEffect(() => {
|
|
3743
3662
|
setNativeValue(normalizeToNativeTime(value));
|
|
3744
3663
|
}, [value]);
|
|
3745
3664
|
const handleChange = (e) => {
|
|
@@ -3755,13 +3674,13 @@ function TimePicker({
|
|
|
3755
3674
|
};
|
|
3756
3675
|
const hasValue = Boolean(value);
|
|
3757
3676
|
const stepInSeconds = Math.max(1, minuteStep * 60);
|
|
3758
|
-
return /* @__PURE__ */
|
|
3677
|
+
return /* @__PURE__ */ React19__namespace.createElement("div", { className: chunkQRI5TMES_cjs.cn("relative", className) }, /* @__PURE__ */ React19__namespace.createElement("input", { type: "hidden", name, value }), /* @__PURE__ */ React19__namespace.createElement("div", { className: "relative" }, showIcon && /* @__PURE__ */ React19__namespace.createElement(
|
|
3759
3678
|
"span",
|
|
3760
3679
|
{
|
|
3761
3680
|
className: "absolute left-3 top-1/2 -translate-y-1/2 pointer-events-none",
|
|
3762
3681
|
"aria-hidden": "true"
|
|
3763
3682
|
},
|
|
3764
|
-
/* @__PURE__ */
|
|
3683
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
3765
3684
|
"svg",
|
|
3766
3685
|
{
|
|
3767
3686
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -3774,17 +3693,17 @@ function TimePicker({
|
|
|
3774
3693
|
strokeLinejoin: "round",
|
|
3775
3694
|
strokeWidth: "2"
|
|
3776
3695
|
},
|
|
3777
|
-
/* @__PURE__ */
|
|
3778
|
-
/* @__PURE__ */
|
|
3696
|
+
/* @__PURE__ */ React19__namespace.createElement("circle", { cx: "12", cy: "12", r: "10" }),
|
|
3697
|
+
/* @__PURE__ */ React19__namespace.createElement("path", { d: "M12 6v6l4 2" })
|
|
3779
3698
|
)
|
|
3780
|
-
), /* @__PURE__ */
|
|
3781
|
-
Input,
|
|
3699
|
+
), /* @__PURE__ */ React19__namespace.createElement(
|
|
3700
|
+
chunkQRI5TMES_cjs.Input,
|
|
3782
3701
|
{
|
|
3783
3702
|
ref: inputRef,
|
|
3784
3703
|
type: "time",
|
|
3785
|
-
className:
|
|
3704
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
3786
3705
|
"appearance-none [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none",
|
|
3787
|
-
|
|
3706
|
+
chunkQRI5TMES_cjs.INPUT_AUTOFILL_RESET_CLASSES,
|
|
3788
3707
|
showIcon ? "pl-10" : "pl-3",
|
|
3789
3708
|
clearable && value ? "pr-10" : "pr-3",
|
|
3790
3709
|
!error && hasValue && "ring-2 ring-ring",
|
|
@@ -3802,8 +3721,8 @@ function TimePicker({
|
|
|
3802
3721
|
"aria-required": required || props["aria-required"],
|
|
3803
3722
|
...props
|
|
3804
3723
|
}
|
|
3805
|
-
), clearable && value && !disabled && /* @__PURE__ */
|
|
3806
|
-
|
|
3724
|
+
), clearable && value && !disabled && /* @__PURE__ */ React19__namespace.createElement(
|
|
3725
|
+
chunkQRI5TMES_cjs.Button,
|
|
3807
3726
|
{
|
|
3808
3727
|
type: "button",
|
|
3809
3728
|
variant: "ghost",
|
|
@@ -3813,7 +3732,7 @@ function TimePicker({
|
|
|
3813
3732
|
"aria-label": "Clear time",
|
|
3814
3733
|
tabIndex: -1
|
|
3815
3734
|
},
|
|
3816
|
-
/* @__PURE__ */
|
|
3735
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
3817
3736
|
"svg",
|
|
3818
3737
|
{
|
|
3819
3738
|
width: "14",
|
|
@@ -3826,8 +3745,8 @@ function TimePicker({
|
|
|
3826
3745
|
strokeLinejoin: "round",
|
|
3827
3746
|
"aria-hidden": "true"
|
|
3828
3747
|
},
|
|
3829
|
-
/* @__PURE__ */
|
|
3830
|
-
/* @__PURE__ */
|
|
3748
|
+
/* @__PURE__ */ React19__namespace.createElement("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
|
|
3749
|
+
/* @__PURE__ */ React19__namespace.createElement("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
|
|
3831
3750
|
)
|
|
3832
3751
|
)));
|
|
3833
3752
|
}
|
|
@@ -3874,23 +3793,23 @@ function DateRangePicker({
|
|
|
3874
3793
|
separator = " - ",
|
|
3875
3794
|
...props
|
|
3876
3795
|
}) {
|
|
3877
|
-
const [isOpen, setIsOpen] =
|
|
3878
|
-
const [hasInteracted, setHasInteracted] =
|
|
3879
|
-
const [selectedMonth, setSelectedMonth] =
|
|
3796
|
+
const [isOpen, setIsOpen] = React19__namespace.useState(false);
|
|
3797
|
+
const [hasInteracted, setHasInteracted] = React19__namespace.useState(false);
|
|
3798
|
+
const [selectedMonth, setSelectedMonth] = React19__namespace.useState(
|
|
3880
3799
|
value.start || /* @__PURE__ */ new Date()
|
|
3881
3800
|
);
|
|
3882
|
-
const [rangeStart, setRangeStart] =
|
|
3883
|
-
const [rangeEnd, setRangeEnd] =
|
|
3884
|
-
const [hoverDate, setHoverDate] =
|
|
3885
|
-
const inputRef =
|
|
3886
|
-
|
|
3801
|
+
const [rangeStart, setRangeStart] = React19__namespace.useState(value.start);
|
|
3802
|
+
const [rangeEnd, setRangeEnd] = React19__namespace.useState(value.end);
|
|
3803
|
+
const [hoverDate, setHoverDate] = React19__namespace.useState(null);
|
|
3804
|
+
const inputRef = React19__namespace.useRef(null);
|
|
3805
|
+
React19__namespace.useEffect(() => {
|
|
3887
3806
|
setRangeStart(value.start);
|
|
3888
3807
|
setRangeEnd(value.end);
|
|
3889
3808
|
if (value.start) {
|
|
3890
3809
|
setSelectedMonth(value.start);
|
|
3891
3810
|
}
|
|
3892
3811
|
}, [value]);
|
|
3893
|
-
const disabledMatchers =
|
|
3812
|
+
const disabledMatchers = React19__namespace.useMemo(() => {
|
|
3894
3813
|
const matchers = [];
|
|
3895
3814
|
if (minDate) {
|
|
3896
3815
|
matchers.push({ before: minDate });
|
|
@@ -3906,7 +3825,7 @@ function DateRangePicker({
|
|
|
3906
3825
|
}
|
|
3907
3826
|
return matchers;
|
|
3908
3827
|
}, [disabledDates, isDateDisabled, maxDate, minDate]);
|
|
3909
|
-
const handleDateSelect =
|
|
3828
|
+
const handleDateSelect = React19__namespace.useCallback(
|
|
3910
3829
|
(date) => {
|
|
3911
3830
|
if (!rangeStart || rangeEnd) {
|
|
3912
3831
|
setRangeStart(date);
|
|
@@ -3936,7 +3855,7 @@ function DateRangePicker({
|
|
|
3936
3855
|
},
|
|
3937
3856
|
[onBlur, onChange, rangeEnd, rangeStart]
|
|
3938
3857
|
);
|
|
3939
|
-
const handleClear =
|
|
3858
|
+
const handleClear = React19__namespace.useCallback(
|
|
3940
3859
|
(e) => {
|
|
3941
3860
|
e.stopPropagation();
|
|
3942
3861
|
setRangeStart(null);
|
|
@@ -3948,7 +3867,7 @@ function DateRangePicker({
|
|
|
3948
3867
|
},
|
|
3949
3868
|
[onChange]
|
|
3950
3869
|
);
|
|
3951
|
-
const handleOpenChange =
|
|
3870
|
+
const handleOpenChange = React19__namespace.useCallback(
|
|
3952
3871
|
(nextOpen) => {
|
|
3953
3872
|
if (disabled) {
|
|
3954
3873
|
setIsOpen(false);
|
|
@@ -3969,17 +3888,17 @@ function DateRangePicker({
|
|
|
3969
3888
|
},
|
|
3970
3889
|
[disabled, hasInteracted, isOpen, onBlur]
|
|
3971
3890
|
);
|
|
3972
|
-
const handleInputBlur =
|
|
3891
|
+
const handleInputBlur = React19__namespace.useCallback(() => {
|
|
3973
3892
|
if (!isOpen) {
|
|
3974
3893
|
onBlur?.();
|
|
3975
3894
|
}
|
|
3976
3895
|
}, [isOpen, onBlur]);
|
|
3977
|
-
const handleInputClick =
|
|
3896
|
+
const handleInputClick = React19__namespace.useCallback(() => {
|
|
3978
3897
|
if (!hasInteracted) {
|
|
3979
3898
|
setHasInteracted(true);
|
|
3980
3899
|
}
|
|
3981
3900
|
}, [hasInteracted]);
|
|
3982
|
-
const RangeDayButton =
|
|
3901
|
+
const RangeDayButton = React19__namespace.useCallback(
|
|
3983
3902
|
({
|
|
3984
3903
|
day,
|
|
3985
3904
|
modifiers,
|
|
@@ -3998,12 +3917,12 @@ function DateRangePicker({
|
|
|
3998
3917
|
const isInHoverRange = !!rangeStart && !rangeEnd && !!hoverDate && isDateInRange(date, rangeStart, hoverDate);
|
|
3999
3918
|
const isRangeHighlight = (isInCommittedRange || isInHoverRange) && !isRangeEndpoint;
|
|
4000
3919
|
const isToday = isSameDay(date, /* @__PURE__ */ new Date());
|
|
4001
|
-
return /* @__PURE__ */
|
|
3920
|
+
return /* @__PURE__ */ React19__namespace.createElement(
|
|
4002
3921
|
"button",
|
|
4003
3922
|
{
|
|
4004
3923
|
type: "button",
|
|
4005
3924
|
...rest,
|
|
4006
|
-
className:
|
|
3925
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
4007
3926
|
"flex items-center justify-center h-8 w-8 rounded-md border-none bg-transparent cursor-pointer text-sm transition-colors",
|
|
4008
3927
|
"hover:bg-accent",
|
|
4009
3928
|
isRangeEndpoint && "bg-primary text-primary-foreground font-semibold",
|
|
@@ -4041,28 +3960,28 @@ function DateRangePicker({
|
|
|
4041
3960
|
to: rangeEnd ?? void 0
|
|
4042
3961
|
} : void 0;
|
|
4043
3962
|
const displayValue = rangeStart && rangeEnd ? `${formatDate2(rangeStart, format)}${separator}${formatDate2(rangeEnd, format)}` : rangeStart ? formatDate2(rangeStart, format) : "";
|
|
4044
|
-
const combinedClassName =
|
|
4045
|
-
return /* @__PURE__ */
|
|
3963
|
+
const combinedClassName = chunkQRI5TMES_cjs.cn("relative", className);
|
|
3964
|
+
return /* @__PURE__ */ React19__namespace.createElement("div", { className: combinedClassName }, /* @__PURE__ */ React19__namespace.createElement(
|
|
4046
3965
|
"input",
|
|
4047
3966
|
{
|
|
4048
3967
|
type: "hidden",
|
|
4049
3968
|
name: `${name}[start]`,
|
|
4050
3969
|
value: rangeStart ? rangeStart.toISOString() : ""
|
|
4051
3970
|
}
|
|
4052
|
-
), /* @__PURE__ */
|
|
3971
|
+
), /* @__PURE__ */ React19__namespace.createElement(
|
|
4053
3972
|
"input",
|
|
4054
3973
|
{
|
|
4055
3974
|
type: "hidden",
|
|
4056
3975
|
name: `${name}[end]`,
|
|
4057
3976
|
value: rangeEnd ? rangeEnd.toISOString() : ""
|
|
4058
3977
|
}
|
|
4059
|
-
), /* @__PURE__ */
|
|
3978
|
+
), /* @__PURE__ */ React19__namespace.createElement(Popover, { open: isOpen, onOpenChange: handleOpenChange }, /* @__PURE__ */ React19__namespace.createElement("div", { className: "relative" }, showIcon && /* @__PURE__ */ React19__namespace.createElement(
|
|
4060
3979
|
"span",
|
|
4061
3980
|
{
|
|
4062
3981
|
className: "absolute left-3 top-1/2 -translate-y-1/2 pointer-events-none",
|
|
4063
3982
|
"aria-hidden": "true"
|
|
4064
3983
|
},
|
|
4065
|
-
/* @__PURE__ */
|
|
3984
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
4066
3985
|
"svg",
|
|
4067
3986
|
{
|
|
4068
3987
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -4075,19 +3994,19 @@ function DateRangePicker({
|
|
|
4075
3994
|
strokeLinejoin: "round",
|
|
4076
3995
|
strokeWidth: "2"
|
|
4077
3996
|
},
|
|
4078
|
-
/* @__PURE__ */
|
|
3997
|
+
/* @__PURE__ */ React19__namespace.createElement("path", { d: "M8 2v4m8-4v4m5 8V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8M3 10h18m-5 10l2 2l4-4" })
|
|
4079
3998
|
)
|
|
4080
|
-
), /* @__PURE__ */
|
|
3999
|
+
), /* @__PURE__ */ React19__namespace.createElement(PopoverTrigger, { asChild: true }, /* @__PURE__ */ React19__namespace.createElement(
|
|
4081
4000
|
"input",
|
|
4082
4001
|
{
|
|
4083
4002
|
ref: inputRef,
|
|
4084
4003
|
id: props.id,
|
|
4085
4004
|
type: "text",
|
|
4086
|
-
className:
|
|
4005
|
+
className: chunkQRI5TMES_cjs.cn(
|
|
4087
4006
|
"flex h-9 w-full rounded-md border border-input bg-transparent py-1 text-base shadow-sm transition-colors",
|
|
4088
4007
|
"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
|
|
4089
4008
|
"disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
|
|
4090
|
-
|
|
4009
|
+
chunkQRI5TMES_cjs.INPUT_AUTOFILL_RESET_CLASSES,
|
|
4091
4010
|
showIcon ? "pl-10" : "pl-3",
|
|
4092
4011
|
clearable && (rangeStart || rangeEnd) ? "pr-10" : "pr-3",
|
|
4093
4012
|
!error && hasValue && "ring-2 ring-ring",
|
|
@@ -4104,7 +4023,7 @@ function DateRangePicker({
|
|
|
4104
4023
|
"aria-required": required || props["aria-required"],
|
|
4105
4024
|
readOnly: true
|
|
4106
4025
|
}
|
|
4107
|
-
)), clearable && (rangeStart || rangeEnd) && !disabled && /* @__PURE__ */
|
|
4026
|
+
)), clearable && (rangeStart || rangeEnd) && !disabled && /* @__PURE__ */ React19__namespace.createElement(
|
|
4108
4027
|
"button",
|
|
4109
4028
|
{
|
|
4110
4029
|
type: "button",
|
|
@@ -4114,7 +4033,7 @@ function DateRangePicker({
|
|
|
4114
4033
|
tabIndex: -1
|
|
4115
4034
|
},
|
|
4116
4035
|
"\u2715"
|
|
4117
|
-
)), !disabled && /* @__PURE__ */
|
|
4036
|
+
)), !disabled && /* @__PURE__ */ React19__namespace.createElement(
|
|
4118
4037
|
PopoverContent,
|
|
4119
4038
|
{
|
|
4120
4039
|
align: "start",
|
|
@@ -4124,7 +4043,7 @@ function DateRangePicker({
|
|
|
4124
4043
|
event.preventDefault();
|
|
4125
4044
|
}
|
|
4126
4045
|
},
|
|
4127
|
-
/* @__PURE__ */
|
|
4046
|
+
/* @__PURE__ */ React19__namespace.createElement(
|
|
4128
4047
|
Calendar,
|
|
4129
4048
|
{
|
|
4130
4049
|
mode: "range",
|
|
@@ -4147,7 +4066,7 @@ function DateRangePicker({
|
|
|
4147
4066
|
showOutsideDays: true
|
|
4148
4067
|
}
|
|
4149
4068
|
),
|
|
4150
|
-
rangeStart && !rangeEnd && /* @__PURE__ */
|
|
4069
|
+
rangeStart && !rangeEnd && /* @__PURE__ */ React19__namespace.createElement("div", { className: "border-t border-input px-3 py-2 text-center text-xs opacity-70" }, "Select end date")
|
|
4151
4070
|
)));
|
|
4152
4071
|
}
|
|
4153
4072
|
DateRangePicker.displayName = "DateRangePicker";
|
|
@@ -4162,7 +4081,6 @@ exports.Radio = Radio;
|
|
|
4162
4081
|
exports.Select = Select2;
|
|
4163
4082
|
exports.Switch = Switch2;
|
|
4164
4083
|
exports.TextArea = TextArea;
|
|
4165
|
-
exports.TextInput = TextInput;
|
|
4166
4084
|
exports.TimePicker = TimePicker;
|
|
4167
|
-
//# sourceMappingURL=chunk-
|
|
4168
|
-
//# sourceMappingURL=chunk-
|
|
4085
|
+
//# sourceMappingURL=chunk-ED4UK63G.cjs.map
|
|
4086
|
+
//# sourceMappingURL=chunk-ED4UK63G.cjs.map
|