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