@godxjp/ui 8.2.0 → 8.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-V45EK6S7.js → chunk-56NYZNVY.js} +1 -1
- package/dist/{chunk-C5H655GK.js → chunk-6PA2YHRE.js} +129 -30
- package/dist/{chunk-Q7AU6WDX.js → chunk-6YK3IJXW.js} +1 -1
- package/dist/chunk-B73NA66T.js +122 -0
- package/dist/{chunk-3EMDVI7X.js → chunk-CAEL2ZD2.js} +1 -1
- package/dist/{chunk-MISVV4IT.js → chunk-GKXPALFT.js} +1 -1
- package/dist/{chunk-N43OKOFT.js → chunk-GLEEJYGQ.js} +1 -1
- package/dist/chunk-HCM4JAC2.js +134 -0
- package/dist/chunk-HL3G4SVG.js +131 -0
- package/dist/{chunk-3FUXNL5A.js → chunk-INSF6K3Y.js} +4 -40
- package/dist/chunk-JKHWLPM5.js +101 -0
- package/dist/chunk-LFW37FGG.js +68 -0
- package/dist/{chunk-67HEX3OS.js → chunk-LJLGABFV.js} +2 -2
- package/dist/{chunk-IAKROVSG.js → chunk-N3JPLJ3B.js} +2 -2
- package/dist/chunk-QLMXEJSY.js +114 -0
- package/dist/{chunk-SEG2YBXF.js → chunk-QTUJSRDH.js} +9 -1
- package/dist/chunk-W4REF4TD.js +42 -0
- package/dist/chunk-WGWI7EGL.js +83 -0
- package/dist/{chunk-TMDGV4CN.js → chunk-ZRRLOOBX.js} +1 -10
- package/dist/{chunk-PZ4LO723.js → chunk-ZY5NUG4B.js} +2 -7
- package/dist/components/admin/index.d.ts +3 -16
- package/dist/components/admin/index.js +24 -19
- package/dist/components/data-display/card.d.ts +2 -2
- package/dist/components/data-display/carousel.d.ts +25 -0
- package/dist/components/data-display/carousel.js +2 -0
- package/dist/components/data-display/index.d.ts +2 -0
- package/dist/components/data-display/index.js +4 -3
- package/dist/components/data-entry/autocomplete.js +4 -4
- package/dist/components/data-entry/calendar.js +2 -2
- package/dist/components/data-entry/cascader.js +2 -2
- package/dist/components/data-entry/combobox.d.ts +22 -0
- package/dist/components/data-entry/combobox.js +6 -0
- package/dist/components/data-entry/date-picker.js +3 -3
- package/dist/components/data-entry/date-range-picker.js +3 -3
- package/dist/components/data-entry/index.d.ts +2 -0
- package/dist/components/data-entry/index.js +19 -16
- package/dist/components/data-entry/select.js +4 -4
- package/dist/components/data-entry/time-input.d.ts +12 -0
- package/dist/components/data-entry/time-input.js +3 -0
- package/dist/components/data-entry/time-picker.js +2 -2
- package/dist/components/data-entry/transfer.js +4 -3
- package/dist/components/data-entry/tree-select.js +2 -2
- package/dist/components/data-entry/upload.js +2 -2
- package/dist/components/feedback/alert.js +1 -1
- package/dist/components/feedback/index.js +2 -2
- package/dist/components/layout/index.d.ts +2 -0
- package/dist/components/layout/index.js +2 -1
- package/dist/components/layout/resizable.d.ts +18 -0
- package/dist/components/layout/resizable.js +2 -0
- package/dist/components/navigation/context-menu.d.ts +25 -0
- package/dist/components/navigation/context-menu.js +2 -0
- package/dist/components/navigation/index.d.ts +8 -1
- package/dist/components/navigation/index.js +10 -7
- package/dist/components/navigation/menubar.d.ts +29 -0
- package/dist/components/navigation/menubar.js +2 -0
- package/dist/components/navigation/navigation-menu.d.ts +13 -0
- package/dist/components/navigation/navigation-menu.js +2 -0
- package/dist/components/navigation/pagination.js +5 -5
- package/dist/components/query/index.js +2 -2
- package/dist/components/ui/index.d.ts +13 -0
- package/dist/components/ui/index.js +23 -16
- package/dist/{filter-bar-DvVXm_d1.d.ts → filter-bar-WjnQOs2C.d.ts} +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +33 -26
- package/dist/lib/hooks.d.ts +17 -0
- package/dist/lib/hooks.js +1 -0
- package/dist/props/index.js +1 -1
- package/dist/props/registry.js +1 -1
- package/dist/styles/data-display-layout.css +55 -0
- package/dist/styles/data-entry-layout.css +93 -0
- package/dist/styles/index.css +2 -0
- package/dist/styles/layout.css +35 -3
- package/dist/styles/navigation-layout.css +271 -0
- package/package.json +38 -1
- package/dist/{chunk-TV7WEENM.js → chunk-6J7GRCDA.js} +1 -1
- package/dist/{chunk-RGPF3HU6.js → chunk-6YBYAEXD.js} +1 -1
- package/dist/{chunk-YXJ3FS6O.js → chunk-CLU46QR2.js} +0 -0
- package/dist/{chunk-PKGPNZA4.js → chunk-HB2OHB5X.js} +1 -1
- package/dist/{chunk-7577VIAC.js → chunk-IOGU3ZWF.js} +1 -1
- package/dist/{chunk-N5SDFNSJ.js → chunk-JBHXILI4.js} +1 -1
- package/dist/{chunk-WY4RSEYC.js → chunk-KDBGFJJI.js} +2 -2
- package/dist/{chunk-NGT3I6OG.js → chunk-PIQXAOWS.js} +1 -1
|
@@ -1,52 +1,16 @@
|
|
|
1
|
-
import { Input } from './chunk-VOHTRR5X.js';
|
|
2
1
|
import { reactNodeText } from './chunk-SMLKNECP.js';
|
|
3
2
|
import { Checkbox } from './chunk-O24Z3ULJ.js';
|
|
4
|
-
import {
|
|
3
|
+
import { Input } from './chunk-VOHTRR5X.js';
|
|
5
4
|
import { Button } from './chunk-M4PZNAMV.js';
|
|
5
|
+
import { ScrollArea } from './chunk-3KPEZ5CF.js';
|
|
6
6
|
import { Label } from './chunk-7PWBC4BY.js';
|
|
7
7
|
import { useTranslation } from './chunk-RLGHEV4A.js';
|
|
8
|
+
import { useDebouncedValue } from './chunk-LFW37FGG.js';
|
|
8
9
|
import { cn } from './chunk-U7N2A7A3.js';
|
|
9
10
|
import * as React from 'react';
|
|
10
|
-
import { useState, useEffect } from 'react';
|
|
11
11
|
import { Search, X, ChevronRight, ChevronLeft } from 'lucide-react';
|
|
12
12
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
13
13
|
|
|
14
|
-
function useDebouncedValue(value, delay = 250) {
|
|
15
|
-
const [debounced, setDebounced] = useState(value);
|
|
16
|
-
useEffect(() => {
|
|
17
|
-
const t = setTimeout(() => {
|
|
18
|
-
setDebounced(value);
|
|
19
|
-
}, delay);
|
|
20
|
-
return () => {
|
|
21
|
-
clearTimeout(t);
|
|
22
|
-
};
|
|
23
|
-
}, [value, delay]);
|
|
24
|
-
return debounced;
|
|
25
|
-
}
|
|
26
|
-
function useTimeoutFlag(signal, ms = 2e3) {
|
|
27
|
-
const [active, setActive] = useState(false);
|
|
28
|
-
useEffect(() => {
|
|
29
|
-
if (!signal) {
|
|
30
|
-
const id = window.setTimeout(() => {
|
|
31
|
-
setActive(false);
|
|
32
|
-
}, 0);
|
|
33
|
-
return () => {
|
|
34
|
-
clearTimeout(id);
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
const showId = window.setTimeout(() => {
|
|
38
|
-
setActive(true);
|
|
39
|
-
}, 0);
|
|
40
|
-
const hideId = window.setTimeout(() => {
|
|
41
|
-
setActive(false);
|
|
42
|
-
}, ms);
|
|
43
|
-
return () => {
|
|
44
|
-
clearTimeout(showId);
|
|
45
|
-
clearTimeout(hideId);
|
|
46
|
-
};
|
|
47
|
-
}, [signal, ms]);
|
|
48
|
-
return Boolean(signal) && active;
|
|
49
|
-
}
|
|
50
14
|
function SearchInput({
|
|
51
15
|
value: controlledValue,
|
|
52
16
|
defaultValue = "",
|
|
@@ -296,4 +260,4 @@ function Transfer({
|
|
|
296
260
|
] });
|
|
297
261
|
}
|
|
298
262
|
|
|
299
|
-
export { SearchInput, Transfer
|
|
263
|
+
export { SearchInput, Transfer };
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { Command, CommandInput, CommandList, CommandEmpty, CommandItem } from './chunk-HTEL5DQI.js';
|
|
2
|
+
import { Button } from './chunk-M4PZNAMV.js';
|
|
3
|
+
import { Popover, PopoverTrigger, PopoverContent } from './chunk-DY5C44UP.js';
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
var Combobox = ({
|
|
8
|
+
options,
|
|
9
|
+
value: controlledValue,
|
|
10
|
+
defaultValue = "",
|
|
11
|
+
onValueChange,
|
|
12
|
+
placeholder,
|
|
13
|
+
searchPlaceholder,
|
|
14
|
+
emptyText = "No result",
|
|
15
|
+
disabled = false,
|
|
16
|
+
name,
|
|
17
|
+
id,
|
|
18
|
+
className
|
|
19
|
+
}) => {
|
|
20
|
+
const [open, setOpen] = React.useState(false);
|
|
21
|
+
const [search, setSearch] = React.useState("");
|
|
22
|
+
const [internalValue, setInternalValue] = React.useState(defaultValue);
|
|
23
|
+
const isControlled = controlledValue !== void 0;
|
|
24
|
+
const value = isControlled ? controlledValue : internalValue;
|
|
25
|
+
const selectedLabel = options.find((option) => option.value === value)?.label ?? placeholder ?? "Select";
|
|
26
|
+
const resolvedSearch = search.trim().toLowerCase();
|
|
27
|
+
const filtered = resolvedSearch ? options.filter((option) => {
|
|
28
|
+
const haystack = `${option.label} ${option.value}`.toLowerCase();
|
|
29
|
+
return haystack.includes(resolvedSearch);
|
|
30
|
+
}) : options;
|
|
31
|
+
const setValue = (next) => {
|
|
32
|
+
if (!isControlled) setInternalValue(next);
|
|
33
|
+
onValueChange?.(next);
|
|
34
|
+
setOpen(false);
|
|
35
|
+
};
|
|
36
|
+
return /* @__PURE__ */ jsxs(
|
|
37
|
+
Popover,
|
|
38
|
+
{
|
|
39
|
+
open,
|
|
40
|
+
onOpenChange: (next) => {
|
|
41
|
+
setOpen(next);
|
|
42
|
+
if (!next) setSearch("");
|
|
43
|
+
},
|
|
44
|
+
children: [
|
|
45
|
+
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
46
|
+
Button,
|
|
47
|
+
{
|
|
48
|
+
id,
|
|
49
|
+
type: "button",
|
|
50
|
+
"data-slot": "combobox-trigger",
|
|
51
|
+
variant: "outline",
|
|
52
|
+
role: "combobox",
|
|
53
|
+
"aria-expanded": open,
|
|
54
|
+
disabled,
|
|
55
|
+
className,
|
|
56
|
+
children: [
|
|
57
|
+
/* @__PURE__ */ jsx("span", { className: value ? void 0 : "text-muted-foreground", children: value ? selectedLabel : placeholder ?? "Select" }),
|
|
58
|
+
/* @__PURE__ */ jsx("span", { className: "ui-combobox-caret", "aria-hidden": "true" })
|
|
59
|
+
]
|
|
60
|
+
}
|
|
61
|
+
) }),
|
|
62
|
+
name ? /* @__PURE__ */ jsx("input", { type: "hidden", name, value }) : null,
|
|
63
|
+
/* @__PURE__ */ jsx(
|
|
64
|
+
PopoverContent,
|
|
65
|
+
{
|
|
66
|
+
className: "ui-combobox-content",
|
|
67
|
+
align: "start",
|
|
68
|
+
sideOffset: 4,
|
|
69
|
+
collisionPadding: 12,
|
|
70
|
+
children: /* @__PURE__ */ jsxs(Command, { shouldFilter: false, className: "ui-combobox-command", children: [
|
|
71
|
+
/* @__PURE__ */ jsx(
|
|
72
|
+
CommandInput,
|
|
73
|
+
{
|
|
74
|
+
className: "ui-combobox-search",
|
|
75
|
+
value: search,
|
|
76
|
+
onValueChange: setSearch,
|
|
77
|
+
placeholder: searchPlaceholder ?? "Search..."
|
|
78
|
+
}
|
|
79
|
+
),
|
|
80
|
+
/* @__PURE__ */ jsx(CommandList, { className: "ui-combobox-list", children: filtered.length === 0 ? /* @__PURE__ */ jsx(CommandEmpty, { children: /* @__PURE__ */ jsx("span", { className: "ui-combobox-empty", children: emptyText }) }) : filtered.map((option) => /* @__PURE__ */ jsx(
|
|
81
|
+
CommandItem,
|
|
82
|
+
{
|
|
83
|
+
value: option.value,
|
|
84
|
+
className: "ui-combobox-item",
|
|
85
|
+
"data-selected": value === option.value || void 0,
|
|
86
|
+
onSelect: () => {
|
|
87
|
+
setValue(option.value);
|
|
88
|
+
},
|
|
89
|
+
children: option.label
|
|
90
|
+
},
|
|
91
|
+
option.value
|
|
92
|
+
)) })
|
|
93
|
+
] })
|
|
94
|
+
}
|
|
95
|
+
)
|
|
96
|
+
]
|
|
97
|
+
}
|
|
98
|
+
);
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
export { Combobox };
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { useState, useEffect } from 'react';
|
|
2
|
+
|
|
3
|
+
// src/lib/hooks.ts
|
|
4
|
+
function useDebouncedValue(value, delay = 250) {
|
|
5
|
+
const [debounced, setDebounced] = useState(value);
|
|
6
|
+
useEffect(() => {
|
|
7
|
+
const t = setTimeout(() => {
|
|
8
|
+
setDebounced(value);
|
|
9
|
+
}, delay);
|
|
10
|
+
return () => {
|
|
11
|
+
clearTimeout(t);
|
|
12
|
+
};
|
|
13
|
+
}, [value, delay]);
|
|
14
|
+
return debounced;
|
|
15
|
+
}
|
|
16
|
+
function useTimeoutFlag(signal, ms = 2e3) {
|
|
17
|
+
const [active, setActive] = useState(false);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
if (!signal) {
|
|
20
|
+
const id = window.setTimeout(() => {
|
|
21
|
+
setActive(false);
|
|
22
|
+
}, 0);
|
|
23
|
+
return () => {
|
|
24
|
+
clearTimeout(id);
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
const showId = window.setTimeout(() => {
|
|
28
|
+
setActive(true);
|
|
29
|
+
}, 0);
|
|
30
|
+
const hideId = window.setTimeout(() => {
|
|
31
|
+
setActive(false);
|
|
32
|
+
}, ms);
|
|
33
|
+
return () => {
|
|
34
|
+
clearTimeout(showId);
|
|
35
|
+
clearTimeout(hideId);
|
|
36
|
+
};
|
|
37
|
+
}, [signal, ms]);
|
|
38
|
+
return Boolean(signal) && active;
|
|
39
|
+
}
|
|
40
|
+
function useMediaQuery(query) {
|
|
41
|
+
const isBrowser = typeof window !== "undefined";
|
|
42
|
+
const getMatch = () => isBrowser ? window.matchMedia(query).matches : false;
|
|
43
|
+
const [matches, setMatches] = useState(getMatch());
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
if (!isBrowser) return void 0;
|
|
46
|
+
const mediaQuery = window.matchMedia(query);
|
|
47
|
+
const updateMatch = () => {
|
|
48
|
+
setMatches(mediaQuery.matches);
|
|
49
|
+
};
|
|
50
|
+
updateMatch();
|
|
51
|
+
if (typeof mediaQuery.addEventListener === "function") {
|
|
52
|
+
mediaQuery.addEventListener("change", updateMatch);
|
|
53
|
+
return () => {
|
|
54
|
+
mediaQuery.removeEventListener("change", updateMatch);
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
mediaQuery.addListener(updateMatch);
|
|
58
|
+
return () => {
|
|
59
|
+
mediaQuery.removeListener(updateMatch);
|
|
60
|
+
};
|
|
61
|
+
}, [isBrowser, query]);
|
|
62
|
+
return matches;
|
|
63
|
+
}
|
|
64
|
+
function useIsMobile() {
|
|
65
|
+
return useMediaQuery("(max-width: 767px)");
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export { useDebouncedValue, useIsMobile, useMediaQuery, useTimeoutFlag };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Calendar } from './chunk-
|
|
1
|
+
import { Calendar } from './chunk-IOGU3ZWF.js';
|
|
2
2
|
import { Input } from './chunk-VOHTRR5X.js';
|
|
3
|
-
import { Popover, PopoverTrigger, PopoverContent } from './chunk-DY5C44UP.js';
|
|
4
3
|
import { Button } from './chunk-M4PZNAMV.js';
|
|
4
|
+
import { Popover, PopoverTrigger, PopoverContent } from './chunk-DY5C44UP.js';
|
|
5
5
|
import { useTranslation, usePickerLocales } from './chunk-RLGHEV4A.js';
|
|
6
6
|
import { toIsoDate, parseDateInput } from './chunk-FXFJF4YA.js';
|
|
7
7
|
import { cn } from './chunk-U7N2A7A3.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Calendar } from './chunk-
|
|
1
|
+
import { Calendar } from './chunk-IOGU3ZWF.js';
|
|
2
2
|
import { Input } from './chunk-VOHTRR5X.js';
|
|
3
|
-
import { Popover, PopoverTrigger, PopoverContent } from './chunk-DY5C44UP.js';
|
|
4
3
|
import { Button } from './chunk-M4PZNAMV.js';
|
|
4
|
+
import { Popover, PopoverTrigger, PopoverContent } from './chunk-DY5C44UP.js';
|
|
5
5
|
import { useTranslation, usePickerLocales } from './chunk-RLGHEV4A.js';
|
|
6
6
|
import { toIsoDate, parseDateInput } from './chunk-FXFJF4YA.js';
|
|
7
7
|
import { cn } from './chunk-U7N2A7A3.js';
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { normalizeHhmm, isValidHhmm } from './chunk-FXFJF4YA.js';
|
|
2
|
+
import { cn } from './chunk-U7N2A7A3.js';
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
function clampStep(step) {
|
|
7
|
+
if (!step || Number.isNaN(step)) return 1;
|
|
8
|
+
const parsed = Math.max(1, Math.floor(step));
|
|
9
|
+
if (!Number.isFinite(parsed)) return 1;
|
|
10
|
+
return Math.min(59, parsed);
|
|
11
|
+
}
|
|
12
|
+
function applyStep(value, step) {
|
|
13
|
+
const normalized = normalizeHhmm(value);
|
|
14
|
+
if (!normalized) return value;
|
|
15
|
+
const [hourText, minuteText] = normalized.split(":");
|
|
16
|
+
const hour = Number(hourText);
|
|
17
|
+
const minute = Number(minuteText);
|
|
18
|
+
const floored = Math.floor(minute / step) * step;
|
|
19
|
+
const safeMinute = Math.min(59, Math.max(0, floored));
|
|
20
|
+
return `${String(hour).padStart(2, "0")}:${String(safeMinute).padStart(2, "0")}`;
|
|
21
|
+
}
|
|
22
|
+
function maskTime(raw) {
|
|
23
|
+
const digits = raw.replace(/\D/g, "").slice(0, 4);
|
|
24
|
+
if (digits.length <= 2) return digits;
|
|
25
|
+
return `${digits.slice(0, 2)}:${digits.slice(2)}`;
|
|
26
|
+
}
|
|
27
|
+
function TimeInput({
|
|
28
|
+
value: controlledValue,
|
|
29
|
+
defaultValue = "",
|
|
30
|
+
onValueChange,
|
|
31
|
+
placeholder,
|
|
32
|
+
step = 1,
|
|
33
|
+
className,
|
|
34
|
+
name,
|
|
35
|
+
id,
|
|
36
|
+
...props
|
|
37
|
+
}) {
|
|
38
|
+
const safeStep = clampStep(step);
|
|
39
|
+
const [internal, setInternal] = React.useState(defaultValue);
|
|
40
|
+
const [displayValue, setDisplayValue] = React.useState(controlledValue ?? defaultValue);
|
|
41
|
+
const isControlled = controlledValue !== void 0;
|
|
42
|
+
const value = isControlled ? controlledValue ?? "" : internal;
|
|
43
|
+
React.useEffect(() => {
|
|
44
|
+
if (!isControlled) return;
|
|
45
|
+
setDisplayValue(controlledValue ?? "");
|
|
46
|
+
}, [controlledValue, isControlled]);
|
|
47
|
+
React.useEffect(() => {
|
|
48
|
+
if (isControlled) return;
|
|
49
|
+
setDisplayValue(internal);
|
|
50
|
+
}, [internal, isControlled]);
|
|
51
|
+
const commit = React.useCallback(
|
|
52
|
+
(next, fromBlur = false) => {
|
|
53
|
+
const normalized = normalizeHhmm(next);
|
|
54
|
+
if (!normalized) return;
|
|
55
|
+
const snapped = applyStep(normalized, safeStep);
|
|
56
|
+
if (!isControlled) {
|
|
57
|
+
setInternal(snapped);
|
|
58
|
+
}
|
|
59
|
+
if (isValidHhmm(snapped)) {
|
|
60
|
+
onValueChange?.(snapped);
|
|
61
|
+
setDisplayValue(snapped);
|
|
62
|
+
}
|
|
63
|
+
if (fromBlur && value !== snapped) {
|
|
64
|
+
onValueChange?.(snapped);
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
[isControlled, onValueChange, safeStep, value]
|
|
68
|
+
);
|
|
69
|
+
return /* @__PURE__ */ jsx(
|
|
70
|
+
"input",
|
|
71
|
+
{
|
|
72
|
+
id,
|
|
73
|
+
name,
|
|
74
|
+
value: displayValue,
|
|
75
|
+
"data-slot": "time-input",
|
|
76
|
+
className: cn("ui-time-input", className),
|
|
77
|
+
"aria-invalid": displayValue !== "" && !isValidHhmm(displayValue) ? "true" : void 0,
|
|
78
|
+
placeholder: placeholder ?? "HH:mm",
|
|
79
|
+
inputMode: "numeric",
|
|
80
|
+
autoComplete: "off",
|
|
81
|
+
...props,
|
|
82
|
+
onChange: (event) => {
|
|
83
|
+
const masked = maskTime(event.target.value);
|
|
84
|
+
setDisplayValue(masked);
|
|
85
|
+
const normalized = normalizeHhmm(masked);
|
|
86
|
+
if (normalized) {
|
|
87
|
+
const snapped = applyStep(normalized, safeStep);
|
|
88
|
+
if (!isControlled) {
|
|
89
|
+
setInternal(snapped);
|
|
90
|
+
}
|
|
91
|
+
onValueChange?.(snapped);
|
|
92
|
+
setDisplayValue(snapped);
|
|
93
|
+
}
|
|
94
|
+
props.onChange?.(event);
|
|
95
|
+
},
|
|
96
|
+
onBlur: (event) => {
|
|
97
|
+
commit(event.target.value, true);
|
|
98
|
+
const normalized = normalizeHhmm(event.target.value);
|
|
99
|
+
if (!normalized) {
|
|
100
|
+
setDisplayValue(value);
|
|
101
|
+
}
|
|
102
|
+
props.onBlur?.(event);
|
|
103
|
+
},
|
|
104
|
+
onKeyDown: (event) => {
|
|
105
|
+
if (event.key === "Enter") {
|
|
106
|
+
commit(event.currentTarget.value, true);
|
|
107
|
+
}
|
|
108
|
+
props.onKeyDown?.(event);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export { TimeInput };
|
|
@@ -3,7 +3,15 @@ import * as React from 'react';
|
|
|
3
3
|
import * as AvatarPrimitive from '@radix-ui/react-avatar';
|
|
4
4
|
import { jsx } from 'react/jsx-runtime';
|
|
5
5
|
|
|
6
|
-
var Avatar = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
6
|
+
var Avatar = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
7
|
+
AvatarPrimitive.Root,
|
|
8
|
+
{
|
|
9
|
+
ref,
|
|
10
|
+
"data-slot": "avatar",
|
|
11
|
+
className: cn("ui-avatar", className),
|
|
12
|
+
...props
|
|
13
|
+
}
|
|
14
|
+
));
|
|
7
15
|
Avatar.displayName = AvatarPrimitive.Root.displayName;
|
|
8
16
|
var AvatarImage = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
9
17
|
AvatarPrimitive.Image,
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { cn } from './chunk-U7N2A7A3.js';
|
|
2
|
+
import * as ResizablePrimitive from 'react-resizable-panels';
|
|
3
|
+
import { jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
var ResizablePanelGroup = ({
|
|
6
|
+
className,
|
|
7
|
+
...props
|
|
8
|
+
}) => /* @__PURE__ */ jsx(
|
|
9
|
+
ResizablePrimitive.Group,
|
|
10
|
+
{
|
|
11
|
+
"data-slot": "resizable-panel-group",
|
|
12
|
+
className: cn("ui-resizable-panel-group", className),
|
|
13
|
+
...props
|
|
14
|
+
}
|
|
15
|
+
);
|
|
16
|
+
ResizablePanelGroup.displayName = "ResizablePanelGroup";
|
|
17
|
+
var ResizablePanel = ({
|
|
18
|
+
className,
|
|
19
|
+
...props
|
|
20
|
+
}) => /* @__PURE__ */ jsx(
|
|
21
|
+
ResizablePrimitive.Panel,
|
|
22
|
+
{
|
|
23
|
+
"data-slot": "resizable-panel",
|
|
24
|
+
className: cn("ui-resizable-panel", className),
|
|
25
|
+
...props
|
|
26
|
+
}
|
|
27
|
+
);
|
|
28
|
+
ResizablePanel.displayName = "ResizablePanel";
|
|
29
|
+
var ResizableHandle = ({
|
|
30
|
+
className,
|
|
31
|
+
...props
|
|
32
|
+
}) => /* @__PURE__ */ jsx(
|
|
33
|
+
ResizablePrimitive.Separator,
|
|
34
|
+
{
|
|
35
|
+
"data-slot": "resizable-handle",
|
|
36
|
+
className: cn("ui-resizable-handle", className),
|
|
37
|
+
...props
|
|
38
|
+
}
|
|
39
|
+
);
|
|
40
|
+
ResizableHandle.displayName = "ResizableHandle";
|
|
41
|
+
|
|
42
|
+
export { ResizableHandle, ResizablePanel, ResizablePanelGroup };
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { cn } from './chunk-U7N2A7A3.js';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu';
|
|
4
|
+
import { ChevronDown } from 'lucide-react';
|
|
5
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
var NavigationMenu = NavigationMenuPrimitive.Root;
|
|
8
|
+
var NavigationMenuList = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
9
|
+
NavigationMenuPrimitive.List,
|
|
10
|
+
{
|
|
11
|
+
ref,
|
|
12
|
+
"data-slot": "navigation-menu-list",
|
|
13
|
+
className: cn("ui-navigation-menu-list", className),
|
|
14
|
+
...props
|
|
15
|
+
}
|
|
16
|
+
));
|
|
17
|
+
NavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName;
|
|
18
|
+
var NavigationMenuItem = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
19
|
+
NavigationMenuPrimitive.Item,
|
|
20
|
+
{
|
|
21
|
+
ref,
|
|
22
|
+
"data-slot": "navigation-menu-item",
|
|
23
|
+
className: cn("ui-navigation-menu-item", className),
|
|
24
|
+
...props
|
|
25
|
+
}
|
|
26
|
+
));
|
|
27
|
+
NavigationMenuItem.displayName = NavigationMenuPrimitive.Item.displayName;
|
|
28
|
+
var NavigationMenuTrigger = React.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
29
|
+
NavigationMenuPrimitive.Trigger,
|
|
30
|
+
{
|
|
31
|
+
ref,
|
|
32
|
+
"data-slot": "navigation-menu-trigger",
|
|
33
|
+
className: cn("ui-navigation-menu-trigger", className),
|
|
34
|
+
...props,
|
|
35
|
+
children: [
|
|
36
|
+
children,
|
|
37
|
+
/* @__PURE__ */ jsx(ChevronDown, { className: "ui-navigation-menu-trigger-icon", "aria-hidden": "true" })
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
));
|
|
41
|
+
NavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName;
|
|
42
|
+
var NavigationMenuContent = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
43
|
+
NavigationMenuPrimitive.Content,
|
|
44
|
+
{
|
|
45
|
+
ref,
|
|
46
|
+
"data-slot": "navigation-menu-content",
|
|
47
|
+
className: cn("ui-navigation-menu-content", className),
|
|
48
|
+
...props
|
|
49
|
+
}
|
|
50
|
+
));
|
|
51
|
+
NavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName;
|
|
52
|
+
var NavigationMenuLink = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
53
|
+
NavigationMenuPrimitive.Link,
|
|
54
|
+
{
|
|
55
|
+
ref,
|
|
56
|
+
"data-slot": "navigation-menu-link",
|
|
57
|
+
className: cn("ui-navigation-menu-link", className),
|
|
58
|
+
...props
|
|
59
|
+
}
|
|
60
|
+
));
|
|
61
|
+
NavigationMenuLink.displayName = NavigationMenuPrimitive.Link.displayName;
|
|
62
|
+
var NavigationMenuIndicator = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
63
|
+
NavigationMenuPrimitive.Indicator,
|
|
64
|
+
{
|
|
65
|
+
ref,
|
|
66
|
+
"data-slot": "navigation-menu-indicator",
|
|
67
|
+
className: cn("ui-navigation-menu-indicator", className),
|
|
68
|
+
...props
|
|
69
|
+
}
|
|
70
|
+
));
|
|
71
|
+
NavigationMenuIndicator.displayName = NavigationMenuPrimitive.Indicator.displayName;
|
|
72
|
+
var NavigationMenuViewport = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
73
|
+
NavigationMenuPrimitive.Viewport,
|
|
74
|
+
{
|
|
75
|
+
ref,
|
|
76
|
+
"data-slot": "navigation-menu-viewport",
|
|
77
|
+
className: cn("ui-navigation-menu-viewport", className),
|
|
78
|
+
...props
|
|
79
|
+
}
|
|
80
|
+
));
|
|
81
|
+
NavigationMenuViewport.displayName = NavigationMenuPrimitive.Viewport.displayName;
|
|
82
|
+
|
|
83
|
+
export { NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport };
|
|
@@ -56,16 +56,7 @@ AlertBase.displayName = "Alert";
|
|
|
56
56
|
var AlertTitle = React.forwardRef(
|
|
57
57
|
({ className, ...props }, ref) => {
|
|
58
58
|
const tone = React.useContext(AlertContext);
|
|
59
|
-
return /* @__PURE__ */ jsx(
|
|
60
|
-
"p",
|
|
61
|
-
{
|
|
62
|
-
ref,
|
|
63
|
-
"data-slot": "alert-title",
|
|
64
|
-
"data-tone": tone,
|
|
65
|
-
className,
|
|
66
|
-
...props
|
|
67
|
-
}
|
|
68
|
-
);
|
|
59
|
+
return /* @__PURE__ */ jsx("p", { ref, "data-slot": "alert-title", "data-tone": tone, className, ...props });
|
|
69
60
|
}
|
|
70
61
|
);
|
|
71
62
|
AlertTitle.displayName = "AlertTitle";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from './chunk-
|
|
1
|
+
import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from './chunk-CAEL2ZD2.js';
|
|
2
2
|
import { Button } from './chunk-M4PZNAMV.js';
|
|
3
3
|
import { useTranslation, useOptionalAppContext, APP_LOCALES, resolveTimezonePickerOptions, getTimezoneLabel, APP_TIME_FORMAT_OPTIONS, getTimeFormatLabel } from './chunk-RLGHEV4A.js';
|
|
4
4
|
import { APP_DATE_FORMAT_OPTIONS, getDateFormatLabel } from './chunk-FXFJF4YA.js';
|
|
@@ -8,12 +8,7 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
8
8
|
import { Link } from 'react-router-dom';
|
|
9
9
|
import * as React from 'react';
|
|
10
10
|
|
|
11
|
-
function Toolbar({
|
|
12
|
-
onClear,
|
|
13
|
-
hasActiveFilters = true,
|
|
14
|
-
className,
|
|
15
|
-
children
|
|
16
|
-
}) {
|
|
11
|
+
function Toolbar({ onClear, hasActiveFilters = true, className, children }) {
|
|
17
12
|
const { t } = useTranslation();
|
|
18
13
|
return /* @__PURE__ */ jsxs("div", { className: cn("ui-toolbar", className), children: [
|
|
19
14
|
children,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { B as BreadcrumbItem } from '../../navigation.prop-BKlxd-j7.js';
|
|
2
2
|
export { c as FlexProp, I as InlineProp, P as PageContainerProp, P as PageContainerProps, d as PageHeaderProp, i as StackProp } from '../../layout.prop-Baq9muDN.js';
|
|
3
|
-
export { F as FilterBar, a as FilterGroup, P as PageHeader, T as Toolbar, b as ToolbarGroup } from '../../filter-bar-
|
|
3
|
+
export { F as FilterBar, a as FilterGroup, P as PageHeader, T as Toolbar, b as ToolbarGroup } from '../../filter-bar-WjnQOs2C.js';
|
|
4
4
|
export { F as Flex, I as Inline, P as PageContainer, S as Stack } from '../../inline-DqfYlGKj.js';
|
|
5
5
|
export { C as ColumnDef, D as DataTable, a as Density, b as Descriptions, E as EmptyState } from '../../data-table-B_q7j992.js';
|
|
6
6
|
export { Badge } from '../data-display/badge.js';
|
|
@@ -18,6 +18,7 @@ export { Steps } from '../navigation/steps.js';
|
|
|
18
18
|
export { AlertDialog, Dialog, DialogConfirm, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from '../feedback/dialog.js';
|
|
19
19
|
export { Toaster } from '../feedback/sonner.js';
|
|
20
20
|
export { L as LegacyToastOptions, t as toast, u as useToast } from '../../use-toast-Dsw3yE2S.js';
|
|
21
|
+
export { useDebouncedValue, useTimeoutFlag } from '../../lib/hooks.js';
|
|
21
22
|
import { b as FormatDatetimeOptions, a as FormatDateOptions } from '../../format-date-ByyZoqI5.js';
|
|
22
23
|
export { j as formatDate } from '../../format-date-ByyZoqI5.js';
|
|
23
24
|
export { L as collectUploadCommitActions, M as createUploadItem } from '../../data-entry.prop-CDkOajPj.js';
|
|
@@ -49,20 +50,6 @@ import 'sonner';
|
|
|
49
50
|
import 'date-fns';
|
|
50
51
|
import '../../types-mvzYGrma.js';
|
|
51
52
|
|
|
52
|
-
/**
|
|
53
|
-
* Returns a debounced view of `value`, updated only after `delay` ms of no
|
|
54
|
-
* change. Use for search inputs to avoid querying on every keystroke.
|
|
55
|
-
*
|
|
56
|
-
* setState runs only inside setTimeout (async) — compliant with
|
|
57
|
-
* react-hooks/set-state-in-effect.
|
|
58
|
-
*/
|
|
59
|
-
declare function useDebouncedValue<T>(value: T, delay?: number): T;
|
|
60
|
-
/**
|
|
61
|
-
* Returns true while `ms` haven't elapsed since `signal` last flipped truthy.
|
|
62
|
-
* setState is scheduled asynchronously (setTimeout 0 / ms) — Rules of React safe.
|
|
63
|
-
*/
|
|
64
|
-
declare function useTimeoutFlag(signal: unknown, ms?: number): boolean;
|
|
65
|
-
|
|
66
53
|
type FormatOptions = FormatDatetimeOptions & FormatDateOptions;
|
|
67
54
|
/** @deprecated Prefer `formatDate(value, { kind: "datetime" })`. */
|
|
68
55
|
declare function formatDateTime(value: string | Date | null | undefined, options?: FormatOptions): string;
|
|
@@ -80,4 +67,4 @@ declare function shortId(id: string | null | undefined): string;
|
|
|
80
67
|
* to a generic message for non-Error objects (avoids dumping stack traces). */
|
|
81
68
|
declare function humanError(err: unknown): string;
|
|
82
69
|
|
|
83
|
-
export { formatBytes, formatCurrency, formatDateLong, formatDateTime, formatRelative, humanError, shortId
|
|
70
|
+
export { formatBytes, formatCurrency, formatDateLong, formatDateTime, formatRelative, humanError, shortId };
|
|
@@ -1,42 +1,47 @@
|
|
|
1
1
|
import '../../chunk-HKD6ERY7.js';
|
|
2
|
-
export {
|
|
3
|
-
import '../../chunk-
|
|
4
|
-
|
|
5
|
-
import '../../chunk-
|
|
6
|
-
export { Pagination } from '../../chunk-
|
|
2
|
+
export { FilterBar, FilterGroup, PageHeader, Toolbar, ToolbarGroup } from '../../chunk-ZY5NUG4B.js';
|
|
3
|
+
import '../../chunk-HL3G4SVG.js';
|
|
4
|
+
import '../../chunk-B73NA66T.js';
|
|
5
|
+
import '../../chunk-WGWI7EGL.js';
|
|
6
|
+
export { Pagination } from '../../chunk-56NYZNVY.js';
|
|
7
7
|
export { Steps } from '../../chunk-OJZ6C2HM.js';
|
|
8
8
|
export { Tabs, TabsContent, TabsList, TabsTrigger } from '../../chunk-V3N266PT.js';
|
|
9
|
-
export {
|
|
10
|
-
|
|
11
|
-
import '../../chunk-
|
|
9
|
+
export { PageContainer, Stack } from '../../chunk-CLU46QR2.js';
|
|
10
|
+
import '../../chunk-FRU44GA2.js';
|
|
11
|
+
import '../../chunk-TO33OY4L.js';
|
|
12
|
+
import '../../chunk-W4REF4TD.js';
|
|
13
|
+
export { AlertMutationFeedback, ButtonRefetch, DataState, InfiniteQueryState, MutationFeedback, PrefetchLink, QueryRefetchButton, flattenItemPages } from '../../chunk-GLEEJYGQ.js';
|
|
14
|
+
export { SearchInput, Transfer } from '../../chunk-INSF6K3Y.js';
|
|
15
|
+
export { TreeSelect } from '../../chunk-6J7GRCDA.js';
|
|
16
|
+
export { Upload, collectUploadCommitActions, createUploadItem, useUploadDraft } from '../../chunk-PIQXAOWS.js';
|
|
17
|
+
import '../../chunk-CAEL2ZD2.js';
|
|
12
18
|
import '../../chunk-CRERCLIZ.js';
|
|
13
|
-
export {
|
|
14
|
-
|
|
19
|
+
export { Cascader } from '../../chunk-HB2OHB5X.js';
|
|
20
|
+
import '../../chunk-SMLKNECP.js';
|
|
21
|
+
import '../../chunk-O24Z3ULJ.js';
|
|
22
|
+
export { ChoiceField, Field } from '../../chunk-26CPAKUP.js';
|
|
15
23
|
export { toast, useToast } from '../../chunk-B3WX53JQ.js';
|
|
16
24
|
export { SkeletonCard, SkeletonDetail, SkeletonRows, SkeletonStat, SkeletonTable } from '../../chunk-AINW5WYN.js';
|
|
17
25
|
import '../../chunk-32WO3YLB.js';
|
|
18
|
-
export { Alert, AlertActions, AlertContent, AlertDescription, AlertQueryError, AlertTitle } from '../../chunk-
|
|
26
|
+
export { Alert, AlertActions, AlertContent, AlertDescription, AlertQueryError, AlertTitle } from '../../chunk-ZRRLOOBX.js';
|
|
19
27
|
export { formatBytes, formatCurrency, formatDateLong, formatDateTime, formatRelative, humanError, shortId } from '../../chunk-4R7QL3MW.js';
|
|
20
28
|
export { AlertDialog, Dialog, DialogConfirm, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from '../../chunk-P4HFJQID.js';
|
|
21
29
|
export { Toaster } from '../../chunk-TO7URV7U.js';
|
|
22
|
-
import '../../chunk-
|
|
23
|
-
import '../../chunk-VOHTRR5X.js';
|
|
24
|
-
export { Cascader } from '../../chunk-PKGPNZA4.js';
|
|
25
|
-
import '../../chunk-SMLKNECP.js';
|
|
26
|
-
import '../../chunk-O24Z3ULJ.js';
|
|
27
|
-
export { ChoiceField, Field } from '../../chunk-26CPAKUP.js';
|
|
30
|
+
import '../../chunk-KDBGFJJI.js';
|
|
28
31
|
import '../../chunk-HTEL5DQI.js';
|
|
29
|
-
|
|
32
|
+
import '../../chunk-VOHTRR5X.js';
|
|
33
|
+
export { DataTable, Descriptions, EmptyState } from '../../chunk-JBHXILI4.js';
|
|
30
34
|
import '../../chunk-DV52WNXO.js';
|
|
31
35
|
export { Flex, Inline } from '../../chunk-TILFZBTE.js';
|
|
36
|
+
import '../../chunk-M4PZNAMV.js';
|
|
32
37
|
export { Badge } from '../../chunk-UIYEAUWA.js';
|
|
33
38
|
import '../../chunk-DY5C44UP.js';
|
|
34
39
|
import '../../chunk-3KPEZ5CF.js';
|
|
35
40
|
import '../../chunk-4MMIMZMK.js';
|
|
36
41
|
import '../../chunk-IBK5D2Q6.js';
|
|
37
|
-
import '../../chunk-M4PZNAMV.js';
|
|
38
42
|
export { FormField } from '../../chunk-F7PG4OEV.js';
|
|
39
43
|
import '../../chunk-7PWBC4BY.js';
|
|
40
44
|
import '../../chunk-RLGHEV4A.js';
|
|
41
45
|
export { formatDate } from '../../chunk-FXFJF4YA.js';
|
|
46
|
+
export { useDebouncedValue, useTimeoutFlag } from '../../chunk-LFW37FGG.js';
|
|
42
47
|
import '../../chunk-U7N2A7A3.js';
|