@wow-two-beta/ui 0.0.14 → 0.0.16
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/actions/index.d.ts +1 -0
- package/dist/actions/index.d.ts.map +1 -1
- package/dist/actions/index.js +3 -3
- package/dist/actions/speedDial/SpeedDial.d.ts +38 -0
- package/dist/actions/speedDial/SpeedDial.d.ts.map +1 -0
- package/dist/actions/speedDial/index.d.ts +3 -0
- package/dist/actions/speedDial/index.d.ts.map +1 -0
- package/dist/{chunk-FS6DTWWH.js → chunk-2VAZKEQD.js} +6 -231
- package/dist/chunk-2VAZKEQD.js.map +1 -0
- package/dist/{chunk-RIW2V3N4.js → chunk-3IN5ULKY.js} +213 -5
- package/dist/chunk-3IN5ULKY.js.map +1 -0
- package/dist/{chunk-UGHPZ3I7.js → chunk-4ESR253U.js} +331 -5
- package/dist/chunk-4ESR253U.js.map +1 -0
- package/dist/chunk-ASIHQQDQ.js +27 -0
- package/dist/chunk-ASIHQQDQ.js.map +1 -0
- package/dist/chunk-FFQENBTW.js +31 -0
- package/dist/chunk-FFQENBTW.js.map +1 -0
- package/dist/{chunk-BQTO7XY6.js → chunk-ILYL6ROC.js} +548 -33
- package/dist/chunk-ILYL6ROC.js.map +1 -0
- package/dist/{chunk-YMSAS7M7.js → chunk-NC2CBGX2.js} +24 -4
- package/dist/chunk-NC2CBGX2.js.map +1 -0
- package/dist/{chunk-ULAOIBCP.js → chunk-NRAJPSEK.js} +164 -7
- package/dist/chunk-NRAJPSEK.js.map +1 -0
- package/dist/chunk-SM2TOB4U.js +641 -0
- package/dist/chunk-SM2TOB4U.js.map +1 -0
- package/dist/{chunk-ASXB42MH.js → chunk-W7LQZKTH.js} +246 -42
- package/dist/chunk-W7LQZKTH.js.map +1 -0
- package/dist/chunk-XHGWBSIR.js +222 -0
- package/dist/chunk-XHGWBSIR.js.map +1 -0
- package/dist/chunk-ZCA365IX.js +44 -0
- package/dist/chunk-ZCA365IX.js.map +1 -0
- package/dist/display/carousel/Carousel.d.ts +47 -0
- package/dist/display/carousel/Carousel.d.ts.map +1 -0
- package/dist/display/carousel/index.d.ts +3 -0
- package/dist/display/carousel/index.d.ts.map +1 -0
- package/dist/display/index.d.ts +1 -0
- package/dist/display/index.d.ts.map +1 -1
- package/dist/display/index.js +4 -3
- package/dist/feedback/index.d.ts +2 -0
- package/dist/feedback/index.d.ts.map +1 -1
- package/dist/feedback/index.js +4 -1
- package/dist/feedback/loadingOverlay/LoadingOverlay.d.ts +19 -0
- package/dist/feedback/loadingOverlay/LoadingOverlay.d.ts.map +1 -0
- package/dist/feedback/loadingOverlay/index.d.ts +2 -0
- package/dist/feedback/loadingOverlay/index.d.ts.map +1 -0
- package/dist/feedback/toaster/Toaster.d.ts +49 -0
- package/dist/feedback/toaster/Toaster.d.ts.map +1 -0
- package/dist/feedback/toaster/index.d.ts +2 -0
- package/dist/feedback/toaster/index.d.ts.map +1 -0
- package/dist/forms/editable/Editable.d.ts +37 -0
- package/dist/forms/editable/Editable.d.ts.map +1 -0
- package/dist/forms/editable/index.d.ts +3 -0
- package/dist/forms/editable/index.d.ts.map +1 -0
- package/dist/forms/fileUpload/FileUpload.d.ts +25 -0
- package/dist/forms/fileUpload/FileUpload.d.ts.map +1 -0
- package/dist/forms/fileUpload/index.d.ts +2 -0
- package/dist/forms/fileUpload/index.d.ts.map +1 -0
- package/dist/forms/index.d.ts +3 -0
- package/dist/forms/index.d.ts.map +1 -1
- package/dist/forms/index.js +8 -4
- package/dist/forms/tagsInput/TagsInput.d.ts +26 -0
- package/dist/forms/tagsInput/TagsInput.d.ts.map +1 -0
- package/dist/forms/tagsInput/index.d.ts +2 -0
- package/dist/forms/tagsInput/index.d.ts.map +1 -0
- package/dist/index.js +13 -9
- package/dist/layout/index.d.ts +1 -0
- package/dist/layout/index.d.ts.map +1 -1
- package/dist/layout/index.js +3 -1
- package/dist/layout/resizablePanels/ResizablePanels.d.ts +27 -0
- package/dist/layout/resizablePanels/ResizablePanels.d.ts.map +1 -0
- package/dist/layout/resizablePanels/index.d.ts +3 -0
- package/dist/layout/resizablePanels/index.d.ts.map +1 -0
- package/dist/nav/commandPalette/CommandPalette.d.ts +48 -0
- package/dist/nav/commandPalette/CommandPalette.d.ts.map +1 -0
- package/dist/nav/commandPalette/index.d.ts +3 -0
- package/dist/nav/commandPalette/index.d.ts.map +1 -0
- package/dist/nav/index.d.ts +1 -0
- package/dist/nav/index.d.ts.map +1 -1
- package/dist/nav/index.js +6 -3
- package/dist/overlays/index.js +5 -3
- package/dist/primitives/announce/Announce.d.ts +13 -0
- package/dist/primitives/announce/Announce.d.ts.map +1 -0
- package/dist/primitives/announce/index.d.ts +2 -0
- package/dist/primitives/announce/index.d.ts.map +1 -0
- package/dist/primitives/index.d.ts +1 -0
- package/dist/primitives/index.d.ts.map +1 -1
- package/dist/primitives/index.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-ASXB42MH.js.map +0 -1
- package/dist/chunk-BQTO7XY6.js.map +0 -1
- package/dist/chunk-FS6DTWWH.js.map +0 -1
- package/dist/chunk-NKGNOOXJ.js +0 -330
- package/dist/chunk-NKGNOOXJ.js.map +0 -1
- package/dist/chunk-RIW2V3N4.js.map +0 -1
- package/dist/chunk-UGHPZ3I7.js.map +0 -1
- package/dist/chunk-ULAOIBCP.js.map +0 -1
- package/dist/chunk-YMSAS7M7.js.map +0 -1
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { listboxVariants, listboxItemVariants, listboxGroupLabelVariants, listboxSeparatorVariants, listboxEmptyVariants } from './chunk-FFQENBTW.js';
|
|
2
|
+
import { PopoverTrigger, Popover, PopoverContent } from './chunk-2VAZKEQD.js';
|
|
3
|
+
import { Tag } from './chunk-ZCA365IX.js';
|
|
2
4
|
import { useControlled } from './chunk-4P2TFUVW.js';
|
|
3
|
-
import { useFormControl, FormControlProvider, RovingFocusGroup, useRovingFocusItem, Portal, AnchoredPositioner, DismissableLayer } from './chunk-YMSAS7M7.js';
|
|
4
|
-
import { useId } from './chunk-KDXJQNB6.js';
|
|
5
5
|
import { tv, dataAttr } from './chunk-BMBIZLO4.js';
|
|
6
6
|
import { Icon } from './chunk-TDX22OWF.js';
|
|
7
|
+
import { useFormControl, FormControlProvider, RovingFocusGroup, useRovingFocusItem, Portal, AnchoredPositioner, DismissableLayer } from './chunk-NC2CBGX2.js';
|
|
7
8
|
import { composeRefs } from './chunk-DN7WBRIV.js';
|
|
9
|
+
import { useId } from './chunk-KDXJQNB6.js';
|
|
8
10
|
import { cn } from './chunk-KZ4VFY2T.js';
|
|
9
11
|
import * as React from 'react';
|
|
10
12
|
import { forwardRef, useRef, useImperativeHandle, useState, Children, isValidElement, cloneElement, useId as useId$1, createContext, useMemo, useCallback, useEffect, useContext } from 'react';
|
|
11
13
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
12
|
-
import { Minus, Plus, EyeOff, Eye, Search, X, Check, Upload, ChevronDown, Calendar as Calendar$1, Clock, ChevronLeft, ChevronRight } from 'lucide-react';
|
|
14
|
+
import { Minus, Plus, EyeOff, Eye, Search, X, Check, Upload, ChevronDown, Calendar as Calendar$1, Clock, UploadCloud, ChevronLeft, ChevronRight } from 'lucide-react';
|
|
13
15
|
|
|
14
16
|
var Label = forwardRef(
|
|
15
17
|
({ className, required, htmlFor, id, children, ...props }, ref) => {
|
|
@@ -1115,32 +1117,6 @@ var FilePicker = forwardRef(
|
|
|
1115
1117
|
}
|
|
1116
1118
|
);
|
|
1117
1119
|
FilePicker.displayName = "FilePicker";
|
|
1118
|
-
|
|
1119
|
-
// src/forms/listbox/Listbox.variants.ts
|
|
1120
|
-
var listboxVariants = tv({
|
|
1121
|
-
base: "flex max-h-72 flex-col gap-0.5 overflow-y-auto rounded-md border border-border bg-popover p-1 text-sm text-popover-foreground shadow-md outline-none"
|
|
1122
|
-
});
|
|
1123
|
-
var listboxItemVariants = tv({
|
|
1124
|
-
base: "relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none",
|
|
1125
|
-
variants: {
|
|
1126
|
-
state: {
|
|
1127
|
-
default: "text-popover-foreground",
|
|
1128
|
-
active: "bg-muted text-foreground",
|
|
1129
|
-
selected: "bg-primary-soft text-primary-soft-foreground",
|
|
1130
|
-
disabled: "pointer-events-none opacity-50"
|
|
1131
|
-
}
|
|
1132
|
-
},
|
|
1133
|
-
defaultVariants: { state: "default" }
|
|
1134
|
-
});
|
|
1135
|
-
var listboxGroupLabelVariants = tv({
|
|
1136
|
-
base: "px-2 py-1.5 text-xs font-semibold text-muted-foreground"
|
|
1137
|
-
});
|
|
1138
|
-
var listboxSeparatorVariants = tv({
|
|
1139
|
-
base: "-mx-1 my-1 h-px bg-border"
|
|
1140
|
-
});
|
|
1141
|
-
var listboxEmptyVariants = tv({
|
|
1142
|
-
base: "px-2 py-6 text-center text-sm text-muted-foreground"
|
|
1143
|
-
});
|
|
1144
1120
|
var ListboxContext = createContext(null);
|
|
1145
1121
|
function useListboxContext() {
|
|
1146
1122
|
const ctx = useContext(ListboxContext);
|
|
@@ -3725,7 +3701,546 @@ var StepperPanel = forwardRef(function StepperPanel2({ value, className, childre
|
|
|
3725
3701
|
Stepper.List = StepperList;
|
|
3726
3702
|
Stepper.Step = StepperStep;
|
|
3727
3703
|
Stepper.Panel = StepperPanel;
|
|
3704
|
+
var TagsInput = forwardRef(function TagsInput2({
|
|
3705
|
+
value,
|
|
3706
|
+
defaultValue,
|
|
3707
|
+
onValueChange,
|
|
3708
|
+
inputValue,
|
|
3709
|
+
onInputChange,
|
|
3710
|
+
placeholder = "Add tag\u2026",
|
|
3711
|
+
delimiters = [","],
|
|
3712
|
+
validate = (t) => t.trim().length > 0,
|
|
3713
|
+
allowDuplicates = false,
|
|
3714
|
+
max,
|
|
3715
|
+
invalid,
|
|
3716
|
+
disabled,
|
|
3717
|
+
readOnly,
|
|
3718
|
+
name,
|
|
3719
|
+
tagVariant = "neutral",
|
|
3720
|
+
size,
|
|
3721
|
+
className,
|
|
3722
|
+
onKeyDown,
|
|
3723
|
+
onBlur,
|
|
3724
|
+
...rest
|
|
3725
|
+
}, forwardedRef) {
|
|
3726
|
+
const [tags, setTags] = useControlled({
|
|
3727
|
+
controlled: value,
|
|
3728
|
+
default: defaultValue ?? [],
|
|
3729
|
+
onChange: onValueChange
|
|
3730
|
+
});
|
|
3731
|
+
const [text, setText] = useControlled({
|
|
3732
|
+
controlled: inputValue,
|
|
3733
|
+
default: "",
|
|
3734
|
+
onChange: onInputChange
|
|
3735
|
+
});
|
|
3736
|
+
const inputRef = useRef(null);
|
|
3737
|
+
const [pendingDelete, setPendingDelete] = useState(false);
|
|
3738
|
+
const state = invalid ? "invalid" : "default";
|
|
3739
|
+
const commit = useCallback(
|
|
3740
|
+
(raw) => {
|
|
3741
|
+
const trimmed = raw.trim();
|
|
3742
|
+
if (!trimmed || !validate(trimmed)) return;
|
|
3743
|
+
if (!allowDuplicates && tags.includes(trimmed)) return;
|
|
3744
|
+
if (max != null && tags.length >= max) return;
|
|
3745
|
+
setTags([...tags, trimmed]);
|
|
3746
|
+
setText("");
|
|
3747
|
+
},
|
|
3748
|
+
[tags, validate, allowDuplicates, max, setTags, setText]
|
|
3749
|
+
);
|
|
3750
|
+
const removeAt = useCallback(
|
|
3751
|
+
(idx) => {
|
|
3752
|
+
setTags(tags.filter((_, i) => i !== idx));
|
|
3753
|
+
},
|
|
3754
|
+
[tags, setTags]
|
|
3755
|
+
);
|
|
3756
|
+
const handleKeyDown = (e) => {
|
|
3757
|
+
onKeyDown?.(e);
|
|
3758
|
+
if (e.defaultPrevented || disabled || readOnly) return;
|
|
3759
|
+
if (e.key === "Enter" || e.key === "Tab" && text) {
|
|
3760
|
+
if (text) {
|
|
3761
|
+
e.preventDefault();
|
|
3762
|
+
commit(text);
|
|
3763
|
+
setPendingDelete(false);
|
|
3764
|
+
}
|
|
3765
|
+
return;
|
|
3766
|
+
}
|
|
3767
|
+
if (delimiters.includes(e.key)) {
|
|
3768
|
+
e.preventDefault();
|
|
3769
|
+
commit(text);
|
|
3770
|
+
setPendingDelete(false);
|
|
3771
|
+
return;
|
|
3772
|
+
}
|
|
3773
|
+
if (e.key === "Backspace" && !text && tags.length > 0) {
|
|
3774
|
+
if (pendingDelete) {
|
|
3775
|
+
e.preventDefault();
|
|
3776
|
+
removeAt(tags.length - 1);
|
|
3777
|
+
setPendingDelete(false);
|
|
3778
|
+
} else {
|
|
3779
|
+
setPendingDelete(true);
|
|
3780
|
+
}
|
|
3781
|
+
return;
|
|
3782
|
+
}
|
|
3783
|
+
setPendingDelete(false);
|
|
3784
|
+
};
|
|
3785
|
+
const handleContainerClick = (e) => {
|
|
3786
|
+
if (e.target === e.currentTarget) inputRef.current?.focus();
|
|
3787
|
+
};
|
|
3788
|
+
return /* @__PURE__ */ jsxs(
|
|
3789
|
+
"div",
|
|
3790
|
+
{
|
|
3791
|
+
role: "group",
|
|
3792
|
+
onClick: handleContainerClick,
|
|
3793
|
+
"data-disabled": disabled || void 0,
|
|
3794
|
+
"data-readonly": readOnly || void 0,
|
|
3795
|
+
"data-invalid": invalid || void 0,
|
|
3796
|
+
className: cn(
|
|
3797
|
+
inputBaseVariants({ size, state }),
|
|
3798
|
+
"h-auto min-h-10 flex-wrap items-center gap-1.5 py-1.5",
|
|
3799
|
+
disabled && "cursor-not-allowed opacity-60",
|
|
3800
|
+
className
|
|
3801
|
+
),
|
|
3802
|
+
children: [
|
|
3803
|
+
tags.map((t, i) => /* @__PURE__ */ jsx(
|
|
3804
|
+
Tag,
|
|
3805
|
+
{
|
|
3806
|
+
variant: tagVariant,
|
|
3807
|
+
"data-pending-delete": pendingDelete && i === tags.length - 1 ? "" : void 0,
|
|
3808
|
+
onClose: !disabled && !readOnly ? () => removeAt(i) : void 0,
|
|
3809
|
+
className: cn(pendingDelete && i === tags.length - 1 && "ring-1 ring-ring"),
|
|
3810
|
+
children: t
|
|
3811
|
+
},
|
|
3812
|
+
`${t}-${i}`
|
|
3813
|
+
)),
|
|
3814
|
+
/* @__PURE__ */ jsx(
|
|
3815
|
+
"input",
|
|
3816
|
+
{
|
|
3817
|
+
...rest,
|
|
3818
|
+
ref: composeRefs(forwardedRef, inputRef),
|
|
3819
|
+
type: "text",
|
|
3820
|
+
value: text,
|
|
3821
|
+
placeholder: tags.length === 0 ? placeholder : void 0,
|
|
3822
|
+
disabled,
|
|
3823
|
+
readOnly,
|
|
3824
|
+
"aria-invalid": invalid || void 0,
|
|
3825
|
+
onChange: (e) => setText(e.target.value),
|
|
3826
|
+
onKeyDown: handleKeyDown,
|
|
3827
|
+
onBlur: (e) => {
|
|
3828
|
+
onBlur?.(e);
|
|
3829
|
+
if (text) commit(text);
|
|
3830
|
+
setPendingDelete(false);
|
|
3831
|
+
},
|
|
3832
|
+
className: "min-w-[6rem] flex-1 border-0 bg-transparent p-0 text-sm outline-none placeholder:text-subtle-foreground disabled:cursor-not-allowed"
|
|
3833
|
+
}
|
|
3834
|
+
),
|
|
3835
|
+
name && /* @__PURE__ */ jsx("input", { type: "hidden", name, value: tags.join(",") })
|
|
3836
|
+
]
|
|
3837
|
+
}
|
|
3838
|
+
);
|
|
3839
|
+
});
|
|
3840
|
+
TagsInput.displayName = "TagsInput";
|
|
3841
|
+
function matchesAccept(file, accept) {
|
|
3842
|
+
if (!accept) return true;
|
|
3843
|
+
const tokens = accept.split(",").map((t) => t.trim().toLowerCase()).filter(Boolean);
|
|
3844
|
+
if (tokens.length === 0) return true;
|
|
3845
|
+
const fileType = file.type.toLowerCase();
|
|
3846
|
+
const fileName = file.name.toLowerCase();
|
|
3847
|
+
return tokens.some((t) => {
|
|
3848
|
+
if (t.startsWith(".")) return fileName.endsWith(t);
|
|
3849
|
+
if (t.endsWith("/*")) return fileType.startsWith(t.slice(0, -1));
|
|
3850
|
+
return fileType === t;
|
|
3851
|
+
});
|
|
3852
|
+
}
|
|
3853
|
+
var FileUpload = forwardRef(function FileUpload2({
|
|
3854
|
+
accept,
|
|
3855
|
+
multiple = false,
|
|
3856
|
+
maxSize,
|
|
3857
|
+
maxFiles,
|
|
3858
|
+
onFilesChange,
|
|
3859
|
+
disabled,
|
|
3860
|
+
invalid,
|
|
3861
|
+
label = "Drop files here, or click to browse",
|
|
3862
|
+
hint,
|
|
3863
|
+
children,
|
|
3864
|
+
className,
|
|
3865
|
+
name,
|
|
3866
|
+
...rest
|
|
3867
|
+
}, forwardedRef) {
|
|
3868
|
+
const inputRef = useRef(null);
|
|
3869
|
+
useImperativeHandle(forwardedRef, () => inputRef.current);
|
|
3870
|
+
const dragCounter = useRef(0);
|
|
3871
|
+
const [dragState, setDragState] = useState("idle");
|
|
3872
|
+
const partition = useCallback(
|
|
3873
|
+
(files) => {
|
|
3874
|
+
const accepted = [];
|
|
3875
|
+
const rejected = [];
|
|
3876
|
+
const arr = Array.from(files);
|
|
3877
|
+
for (const f of arr) {
|
|
3878
|
+
if (!matchesAccept(f, accept)) {
|
|
3879
|
+
rejected.push({ file: f, reason: "type" });
|
|
3880
|
+
continue;
|
|
3881
|
+
}
|
|
3882
|
+
if (maxSize != null && f.size > maxSize) {
|
|
3883
|
+
rejected.push({ file: f, reason: "size" });
|
|
3884
|
+
continue;
|
|
3885
|
+
}
|
|
3886
|
+
accepted.push(f);
|
|
3887
|
+
}
|
|
3888
|
+
if (maxFiles != null && accepted.length > maxFiles) {
|
|
3889
|
+
const overflow = accepted.splice(maxFiles);
|
|
3890
|
+
for (const f of overflow) rejected.push({ file: f, reason: "count" });
|
|
3891
|
+
}
|
|
3892
|
+
return [accepted, rejected];
|
|
3893
|
+
},
|
|
3894
|
+
[accept, maxSize, maxFiles]
|
|
3895
|
+
);
|
|
3896
|
+
const openPicker = () => {
|
|
3897
|
+
if (!disabled) inputRef.current?.click();
|
|
3898
|
+
};
|
|
3899
|
+
const handleDragEnter = (e) => {
|
|
3900
|
+
if (disabled) return;
|
|
3901
|
+
e.preventDefault();
|
|
3902
|
+
dragCounter.current += 1;
|
|
3903
|
+
const items = e.dataTransfer?.items;
|
|
3904
|
+
let reject = false;
|
|
3905
|
+
if (items && (accept || maxSize)) {
|
|
3906
|
+
if (accept) {
|
|
3907
|
+
const tokens = accept.split(",").map((t) => t.trim().toLowerCase()).filter(Boolean);
|
|
3908
|
+
for (let i = 0; i < items.length; i++) {
|
|
3909
|
+
const it = items[i];
|
|
3910
|
+
if (!it || it.kind !== "file") continue;
|
|
3911
|
+
const t = it.type.toLowerCase();
|
|
3912
|
+
const ok = tokens.some((tk) => {
|
|
3913
|
+
if (tk.startsWith(".")) return false;
|
|
3914
|
+
if (tk.endsWith("/*")) return t.startsWith(tk.slice(0, -1));
|
|
3915
|
+
return t === tk;
|
|
3916
|
+
});
|
|
3917
|
+
if (!ok) {
|
|
3918
|
+
reject = true;
|
|
3919
|
+
break;
|
|
3920
|
+
}
|
|
3921
|
+
}
|
|
3922
|
+
}
|
|
3923
|
+
}
|
|
3924
|
+
setDragState(reject ? "reject" : "over");
|
|
3925
|
+
};
|
|
3926
|
+
const handleDragOver = (e) => {
|
|
3927
|
+
if (disabled) return;
|
|
3928
|
+
e.preventDefault();
|
|
3929
|
+
e.dataTransfer.dropEffect = "copy";
|
|
3930
|
+
};
|
|
3931
|
+
const handleDragLeave = (e) => {
|
|
3932
|
+
if (disabled) return;
|
|
3933
|
+
e.preventDefault();
|
|
3934
|
+
dragCounter.current -= 1;
|
|
3935
|
+
if (dragCounter.current <= 0) {
|
|
3936
|
+
dragCounter.current = 0;
|
|
3937
|
+
setDragState("idle");
|
|
3938
|
+
}
|
|
3939
|
+
};
|
|
3940
|
+
const handleDrop = (e) => {
|
|
3941
|
+
if (disabled) return;
|
|
3942
|
+
e.preventDefault();
|
|
3943
|
+
dragCounter.current = 0;
|
|
3944
|
+
setDragState("idle");
|
|
3945
|
+
const files = e.dataTransfer?.files;
|
|
3946
|
+
if (!files || files.length === 0) return;
|
|
3947
|
+
const [accepted, rejected] = partition(files);
|
|
3948
|
+
onFilesChange?.(accepted, rejected);
|
|
3949
|
+
};
|
|
3950
|
+
const handleKeyDown = (e) => {
|
|
3951
|
+
if (disabled) return;
|
|
3952
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
3953
|
+
e.preventDefault();
|
|
3954
|
+
openPicker();
|
|
3955
|
+
}
|
|
3956
|
+
};
|
|
3957
|
+
const showError = invalid || dragState === "reject";
|
|
3958
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-3", className), children: [
|
|
3959
|
+
/* @__PURE__ */ jsxs(
|
|
3960
|
+
"div",
|
|
3961
|
+
{
|
|
3962
|
+
role: "button",
|
|
3963
|
+
tabIndex: disabled ? -1 : 0,
|
|
3964
|
+
"aria-disabled": disabled || void 0,
|
|
3965
|
+
"data-drag-state": dragState,
|
|
3966
|
+
"data-invalid": showError || void 0,
|
|
3967
|
+
onClick: openPicker,
|
|
3968
|
+
onKeyDown: handleKeyDown,
|
|
3969
|
+
onDragEnter: handleDragEnter,
|
|
3970
|
+
onDragOver: handleDragOver,
|
|
3971
|
+
onDragLeave: handleDragLeave,
|
|
3972
|
+
onDrop: handleDrop,
|
|
3973
|
+
className: cn(
|
|
3974
|
+
"flex flex-col items-center justify-center gap-2 rounded-md border-2 border-dashed border-input bg-background px-6 py-10 text-center text-sm text-muted-foreground transition-colors",
|
|
3975
|
+
"hover:border-border-strong hover:bg-muted/40",
|
|
3976
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
3977
|
+
dragState === "over" && "border-primary bg-primary-soft/30 text-foreground",
|
|
3978
|
+
showError && "border-destructive bg-destructive-soft/30 text-destructive",
|
|
3979
|
+
disabled && "cursor-not-allowed opacity-60 hover:border-input hover:bg-background"
|
|
3980
|
+
),
|
|
3981
|
+
children: [
|
|
3982
|
+
/* @__PURE__ */ jsx(
|
|
3983
|
+
Icon,
|
|
3984
|
+
{
|
|
3985
|
+
icon: UploadCloud,
|
|
3986
|
+
size: 28,
|
|
3987
|
+
className: cn(
|
|
3988
|
+
"text-muted-foreground",
|
|
3989
|
+
dragState === "over" && "text-primary",
|
|
3990
|
+
showError && "text-destructive"
|
|
3991
|
+
)
|
|
3992
|
+
}
|
|
3993
|
+
),
|
|
3994
|
+
/* @__PURE__ */ jsx("div", { className: "font-medium text-foreground", children: label }),
|
|
3995
|
+
hint && /* @__PURE__ */ jsx("div", { className: "text-xs", children: hint }),
|
|
3996
|
+
/* @__PURE__ */ jsx(
|
|
3997
|
+
"input",
|
|
3998
|
+
{
|
|
3999
|
+
...rest,
|
|
4000
|
+
ref: inputRef,
|
|
4001
|
+
type: "file",
|
|
4002
|
+
accept,
|
|
4003
|
+
multiple,
|
|
4004
|
+
disabled,
|
|
4005
|
+
name,
|
|
4006
|
+
className: "sr-only",
|
|
4007
|
+
onChange: (e) => {
|
|
4008
|
+
const files = e.target.files;
|
|
4009
|
+
if (!files || files.length === 0) return;
|
|
4010
|
+
const [accepted, rejected] = partition(files);
|
|
4011
|
+
onFilesChange?.(accepted, rejected);
|
|
4012
|
+
e.target.value = "";
|
|
4013
|
+
}
|
|
4014
|
+
}
|
|
4015
|
+
)
|
|
4016
|
+
]
|
|
4017
|
+
}
|
|
4018
|
+
),
|
|
4019
|
+
children
|
|
4020
|
+
] });
|
|
4021
|
+
});
|
|
4022
|
+
FileUpload.displayName = "FileUpload";
|
|
4023
|
+
var EditableContext = createContext(null);
|
|
4024
|
+
function useEditableContext() {
|
|
4025
|
+
const ctx = useContext(EditableContext);
|
|
4026
|
+
if (!ctx) throw new Error("Editable.* must be used inside <Editable>");
|
|
4027
|
+
return ctx;
|
|
4028
|
+
}
|
|
4029
|
+
function Editable({
|
|
4030
|
+
value: valueProp,
|
|
4031
|
+
defaultValue,
|
|
4032
|
+
onValueChange,
|
|
4033
|
+
editing: editingProp,
|
|
4034
|
+
defaultEditing = false,
|
|
4035
|
+
onEditingChange,
|
|
4036
|
+
placeholder = "Click to edit",
|
|
4037
|
+
submitOnBlur = true,
|
|
4038
|
+
submitOnEnter = true,
|
|
4039
|
+
cancelOnEscape = true,
|
|
4040
|
+
disabled = false,
|
|
4041
|
+
readOnly = false,
|
|
4042
|
+
name,
|
|
4043
|
+
className,
|
|
4044
|
+
children
|
|
4045
|
+
}) {
|
|
4046
|
+
const [value, setValue] = useControlled({
|
|
4047
|
+
controlled: valueProp,
|
|
4048
|
+
default: defaultValue ?? "",
|
|
4049
|
+
onChange: onValueChange
|
|
4050
|
+
});
|
|
4051
|
+
const [editing, setEditing] = useControlled({
|
|
4052
|
+
controlled: editingProp,
|
|
4053
|
+
default: defaultEditing,
|
|
4054
|
+
onChange: onEditingChange
|
|
4055
|
+
});
|
|
4056
|
+
const [draft, setDraft] = useState(value);
|
|
4057
|
+
const inputRef = useRef(null);
|
|
4058
|
+
useEffect(() => {
|
|
4059
|
+
if (editing) setDraft(value);
|
|
4060
|
+
}, [editing, value]);
|
|
4061
|
+
const submit = useCallback(() => {
|
|
4062
|
+
setValue(draft);
|
|
4063
|
+
setEditing(false);
|
|
4064
|
+
}, [draft, setValue, setEditing]);
|
|
4065
|
+
const cancel = useCallback(() => {
|
|
4066
|
+
setDraft(value);
|
|
4067
|
+
setEditing(false);
|
|
4068
|
+
}, [value, setEditing]);
|
|
4069
|
+
const ctx = useMemo(
|
|
4070
|
+
() => ({
|
|
4071
|
+
value,
|
|
4072
|
+
draft,
|
|
4073
|
+
setDraft,
|
|
4074
|
+
editing,
|
|
4075
|
+
setEditing,
|
|
4076
|
+
submit,
|
|
4077
|
+
cancel,
|
|
4078
|
+
placeholder,
|
|
4079
|
+
disabled,
|
|
4080
|
+
readOnly,
|
|
4081
|
+
submitOnBlur,
|
|
4082
|
+
submitOnEnter,
|
|
4083
|
+
cancelOnEscape,
|
|
4084
|
+
inputRef
|
|
4085
|
+
}),
|
|
4086
|
+
[
|
|
4087
|
+
value,
|
|
4088
|
+
draft,
|
|
4089
|
+
editing,
|
|
4090
|
+
setEditing,
|
|
4091
|
+
submit,
|
|
4092
|
+
cancel,
|
|
4093
|
+
placeholder,
|
|
4094
|
+
disabled,
|
|
4095
|
+
readOnly,
|
|
4096
|
+
submitOnBlur,
|
|
4097
|
+
submitOnEnter,
|
|
4098
|
+
cancelOnEscape
|
|
4099
|
+
]
|
|
4100
|
+
);
|
|
4101
|
+
return /* @__PURE__ */ jsx(EditableContext.Provider, { value: ctx, children: /* @__PURE__ */ jsxs("div", { className: cn("inline-flex items-center gap-1.5", className), children: [
|
|
4102
|
+
children,
|
|
4103
|
+
name && /* @__PURE__ */ jsx("input", { type: "hidden", name, value })
|
|
4104
|
+
] }) });
|
|
4105
|
+
}
|
|
4106
|
+
var EditablePreview = forwardRef(
|
|
4107
|
+
function EditablePreview2({ className, onClick, onKeyDown, ...rest }, forwardedRef) {
|
|
4108
|
+
const ctx = useEditableContext();
|
|
4109
|
+
if (ctx.editing) return null;
|
|
4110
|
+
const isEmpty = !ctx.value;
|
|
4111
|
+
const interactive = !ctx.disabled && !ctx.readOnly;
|
|
4112
|
+
return /* @__PURE__ */ jsx(
|
|
4113
|
+
"span",
|
|
4114
|
+
{
|
|
4115
|
+
ref: forwardedRef,
|
|
4116
|
+
role: interactive ? "button" : void 0,
|
|
4117
|
+
tabIndex: interactive ? 0 : -1,
|
|
4118
|
+
"aria-disabled": !interactive || void 0,
|
|
4119
|
+
onClick: (e) => {
|
|
4120
|
+
onClick?.(e);
|
|
4121
|
+
if (e.defaultPrevented || !interactive) return;
|
|
4122
|
+
ctx.setEditing(true);
|
|
4123
|
+
},
|
|
4124
|
+
onKeyDown: (e) => {
|
|
4125
|
+
onKeyDown?.(e);
|
|
4126
|
+
if (e.defaultPrevented || !interactive) return;
|
|
4127
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
4128
|
+
e.preventDefault();
|
|
4129
|
+
ctx.setEditing(true);
|
|
4130
|
+
}
|
|
4131
|
+
},
|
|
4132
|
+
className: cn(
|
|
4133
|
+
"cursor-text rounded-sm px-1 py-0.5 text-sm text-foreground transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
4134
|
+
isEmpty && "italic text-subtle-foreground",
|
|
4135
|
+
!interactive && "cursor-default hover:bg-transparent",
|
|
4136
|
+
className
|
|
4137
|
+
),
|
|
4138
|
+
...rest,
|
|
4139
|
+
children: ctx.value || ctx.placeholder
|
|
4140
|
+
}
|
|
4141
|
+
);
|
|
4142
|
+
}
|
|
4143
|
+
);
|
|
4144
|
+
var EditableInput = forwardRef(
|
|
4145
|
+
function EditableInput2({ className, size, state, onKeyDown, onBlur, ...rest }, forwardedRef) {
|
|
4146
|
+
const ctx = useEditableContext();
|
|
4147
|
+
useEffect(() => {
|
|
4148
|
+
if (ctx.editing && ctx.inputRef.current) {
|
|
4149
|
+
ctx.inputRef.current.focus();
|
|
4150
|
+
const len = ctx.inputRef.current.value.length;
|
|
4151
|
+
ctx.inputRef.current.setSelectionRange(len, len);
|
|
4152
|
+
}
|
|
4153
|
+
}, [ctx.editing, ctx.inputRef]);
|
|
4154
|
+
if (!ctx.editing) return null;
|
|
4155
|
+
const handleKeyDown = (e) => {
|
|
4156
|
+
onKeyDown?.(e);
|
|
4157
|
+
if (e.defaultPrevented) return;
|
|
4158
|
+
if (ctx.submitOnEnter && e.key === "Enter") {
|
|
4159
|
+
e.preventDefault();
|
|
4160
|
+
ctx.submit();
|
|
4161
|
+
} else if (ctx.cancelOnEscape && e.key === "Escape") {
|
|
4162
|
+
e.preventDefault();
|
|
4163
|
+
ctx.cancel();
|
|
4164
|
+
}
|
|
4165
|
+
};
|
|
4166
|
+
return /* @__PURE__ */ jsx(
|
|
4167
|
+
"input",
|
|
4168
|
+
{
|
|
4169
|
+
ref: composeRefs(forwardedRef, ctx.inputRef),
|
|
4170
|
+
type: "text",
|
|
4171
|
+
value: ctx.draft,
|
|
4172
|
+
disabled: ctx.disabled,
|
|
4173
|
+
readOnly: ctx.readOnly,
|
|
4174
|
+
onChange: (e) => ctx.setDraft(e.target.value),
|
|
4175
|
+
onKeyDown: handleKeyDown,
|
|
4176
|
+
onBlur: (e) => {
|
|
4177
|
+
onBlur?.(e);
|
|
4178
|
+
if (e.defaultPrevented) return;
|
|
4179
|
+
if (ctx.submitOnBlur) ctx.submit();
|
|
4180
|
+
},
|
|
4181
|
+
className: cn(inputBaseVariants({ size, state }), className),
|
|
4182
|
+
...rest
|
|
4183
|
+
}
|
|
4184
|
+
);
|
|
4185
|
+
}
|
|
4186
|
+
);
|
|
4187
|
+
var EditableSubmit = forwardRef(
|
|
4188
|
+
function EditableSubmit2({ className, onClick, children, type = "button", ...rest }, forwardedRef) {
|
|
4189
|
+
const ctx = useEditableContext();
|
|
4190
|
+
if (!ctx.editing) return null;
|
|
4191
|
+
return /* @__PURE__ */ jsx(
|
|
4192
|
+
"button",
|
|
4193
|
+
{
|
|
4194
|
+
ref: forwardedRef,
|
|
4195
|
+
type,
|
|
4196
|
+
"aria-label": "Submit",
|
|
4197
|
+
onMouseDown: (e) => e.preventDefault(),
|
|
4198
|
+
onClick: (e) => {
|
|
4199
|
+
onClick?.(e);
|
|
4200
|
+
if (e.defaultPrevented) return;
|
|
4201
|
+
ctx.submit();
|
|
4202
|
+
},
|
|
4203
|
+
className: cn(
|
|
4204
|
+
"inline-flex h-8 w-8 items-center justify-center rounded-md text-success transition-colors hover:bg-success-soft focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
4205
|
+
className
|
|
4206
|
+
),
|
|
4207
|
+
...rest,
|
|
4208
|
+
children: children ?? /* @__PURE__ */ jsx(Icon, { icon: Check, size: 14 })
|
|
4209
|
+
}
|
|
4210
|
+
);
|
|
4211
|
+
}
|
|
4212
|
+
);
|
|
4213
|
+
var EditableCancel = forwardRef(
|
|
4214
|
+
function EditableCancel2({ className, onClick, children, type = "button", ...rest }, forwardedRef) {
|
|
4215
|
+
const ctx = useEditableContext();
|
|
4216
|
+
if (!ctx.editing) return null;
|
|
4217
|
+
return /* @__PURE__ */ jsx(
|
|
4218
|
+
"button",
|
|
4219
|
+
{
|
|
4220
|
+
ref: forwardedRef,
|
|
4221
|
+
type,
|
|
4222
|
+
"aria-label": "Cancel",
|
|
4223
|
+
onMouseDown: (e) => e.preventDefault(),
|
|
4224
|
+
onClick: (e) => {
|
|
4225
|
+
onClick?.(e);
|
|
4226
|
+
if (e.defaultPrevented) return;
|
|
4227
|
+
ctx.cancel();
|
|
4228
|
+
},
|
|
4229
|
+
className: cn(
|
|
4230
|
+
"inline-flex h-8 w-8 items-center justify-center rounded-md text-destructive transition-colors hover:bg-destructive-soft focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
4231
|
+
className
|
|
4232
|
+
),
|
|
4233
|
+
...rest,
|
|
4234
|
+
children: children ?? /* @__PURE__ */ jsx(Icon, { icon: X, size: 14 })
|
|
4235
|
+
}
|
|
4236
|
+
);
|
|
4237
|
+
}
|
|
4238
|
+
);
|
|
4239
|
+
Editable.Preview = EditablePreview;
|
|
4240
|
+
Editable.Input = EditableInput;
|
|
4241
|
+
Editable.Submit = EditableSubmit;
|
|
4242
|
+
Editable.Cancel = EditableCancel;
|
|
3728
4243
|
|
|
3729
|
-
export { Calendar, CharacterCount, Checkbox, CheckboxField, CheckboxGroup, ChoiceCard, ColorArea, ColorField, ColorPicker, ColorSlider, ColorSwatch, ColorSwatchPicker, ColorWheel, Combobox, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxSeparator, CurrencyInput, DateField, DatePicker, DateRangePicker, EmailInput, Fieldset, FilePicker, FormErrorMessage, FormField, FormHelperText, InputAddon, InputGroup, Label, LabeledInput, Legend, Listbox, ListboxEmpty, ListboxGroup, ListboxItem, ListboxSeparator, MaskedInput, MultiSelect, MultiSelectContent, MultiSelectItem, MultiSelectTags, MultiSelectTrigger, NumberInput, PasswordInput, PasswordStrength, PercentInput, PinInput, Radio, RadioField, RadioGroup, RangeCalendar, SearchInput, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Slider, Stepper, StepperList, StepperPanel, StepperStep, Switch, SwitchField, TelInput, TextInput, Textarea, TimeField, TimePicker, UrlInput, colorSwatchVariants };
|
|
3730
|
-
//# sourceMappingURL=chunk-
|
|
3731
|
-
//# sourceMappingURL=chunk-
|
|
4244
|
+
export { Calendar, CharacterCount, Checkbox, CheckboxField, CheckboxGroup, ChoiceCard, ColorArea, ColorField, ColorPicker, ColorSlider, ColorSwatch, ColorSwatchPicker, ColorWheel, Combobox, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxSeparator, CurrencyInput, DateField, DatePicker, DateRangePicker, Editable, EditableCancel, EditableInput, EditablePreview, EditableSubmit, EmailInput, Fieldset, FilePicker, FileUpload, FormErrorMessage, FormField, FormHelperText, InputAddon, InputGroup, Label, LabeledInput, Legend, Listbox, ListboxEmpty, ListboxGroup, ListboxItem, ListboxSeparator, MaskedInput, MultiSelect, MultiSelectContent, MultiSelectItem, MultiSelectTags, MultiSelectTrigger, NumberInput, PasswordInput, PasswordStrength, PercentInput, PinInput, Radio, RadioField, RadioGroup, RangeCalendar, SearchInput, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Slider, Stepper, StepperList, StepperPanel, StepperStep, Switch, SwitchField, TagsInput, TelInput, TextInput, Textarea, TimeField, TimePicker, UrlInput, colorSwatchVariants };
|
|
4245
|
+
//# sourceMappingURL=chunk-ILYL6ROC.js.map
|
|
4246
|
+
//# sourceMappingURL=chunk-ILYL6ROC.js.map
|