@wipco/sdui 1.8.1 → 1.8.3
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-HSS7MTJK.js → chunk-3PGKBTBZ.js} +1 -1
- package/dist/{chunk-2TUCSOZR.js → chunk-4SVSS7VO.js} +1 -1
- package/dist/{chunk-LKSGAILO.js → chunk-5JXXCRXA.js} +76 -14
- package/dist/{chunk-IWLLM45X.js → chunk-CFFSCGDV.js} +222 -39
- package/dist/{chunk-OB425KVK.js → chunk-DTCZPXOT.js} +1 -1
- package/dist/{chunk-LAGO4H4U.js → chunk-H7RLEDKJ.js} +1 -1
- package/dist/{chunk-ECBSYHZU.js → chunk-I2URQNZZ.js} +1 -1
- package/dist/{chunk-L2WC45T3.js → chunk-OI2GPBIL.js} +1 -1
- package/dist/{chunk-RDQO43Y5.js → chunk-UDJVLMDH.js} +1 -1
- package/dist/{chunk-6AFQPHLW.js → chunk-UNQ6VAVD.js} +1 -1
- package/dist/{chunk-HSHVR6VH.js → chunk-ZDWCLHIY.js} +1 -1
- package/dist/index.js +4 -4
- package/dist/meta.js +8 -2
- package/dist/rich.js +1 -1
- package/dist/widgets/ApprovalLineEditor.js +3 -3
- package/dist/widgets/ApprovalOverridesEditor.js +4 -4
- package/dist/widgets/AutocompleteField.js +3 -3
- package/dist/widgets/FileDropzone.d.ts +8 -0
- package/dist/widgets/FileDropzone.js +1 -1
- package/dist/widgets/PeriodFilter.js +2 -2
- package/dist/widgets/SearchableMultiPicker.js +3 -3
- package/dist/widgets/StagePeriodEditor.js +2 -2
- package/dist/widgets/TreePicker.js +4 -4
- package/dist/widgets/TreeView.js +3 -3
- package/dist/widgets/index.js +18 -18
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DatePicker, TimePicker } from './chunk-
|
|
1
|
+
import { DatePicker, TimePicker } from './chunk-5JXXCRXA.js';
|
|
2
2
|
import { Field } from './chunk-KIHN7DGA.js';
|
|
3
3
|
import { boxed } from './chunk-3JTBOABA.js';
|
|
4
4
|
import { useState, useRef, useEffect, useMemo } from 'react';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { orderCircleStyle, ellipsisStyle, unwrapRows, uid } from './chunk-YOLT2TPX.js';
|
|
2
|
-
import { includesLooseSearch } from './chunk-
|
|
2
|
+
import { includesLooseSearch } from './chunk-I2URQNZZ.js';
|
|
3
3
|
import { useSduiAdapter, hostFetchOf, defaultAdapter } from './chunk-XFNHHGFR.js';
|
|
4
4
|
import { Icon, Badge, IconButton, Field, Select, Input, Tag, Spinner, Button, isPlainObject } from './chunk-KIHN7DGA.js';
|
|
5
5
|
import { boxed } from './chunk-3JTBOABA.js';
|
|
@@ -360,6 +360,20 @@ function buildMonthCells(index, min, max, weekStartsOn = 0) {
|
|
|
360
360
|
}
|
|
361
361
|
return weeks;
|
|
362
362
|
}
|
|
363
|
+
function viewForSlot(anchorIdx, slot, monthCount) {
|
|
364
|
+
return slot === "start" ? anchorIdx : anchorIdx - monthCount + 1;
|
|
365
|
+
}
|
|
366
|
+
function initialRangeView(monthCount, anchorIdx, slot, endIdxs) {
|
|
367
|
+
if (endIdxs.length >= 2) {
|
|
368
|
+
const lo = Math.min(...endIdxs);
|
|
369
|
+
if (Math.max(...endIdxs) - lo < monthCount) return lo;
|
|
370
|
+
}
|
|
371
|
+
return viewForSlot(anchorIdx, slot, monthCount);
|
|
372
|
+
}
|
|
373
|
+
function alignRangeView(viewIdx, monthCount, anchorIdx, slot, endIdxs) {
|
|
374
|
+
if (endIdxs.every((idx) => idx >= viewIdx && idx <= viewIdx + monthCount - 1)) return viewIdx;
|
|
375
|
+
return viewForSlot(anchorIdx, slot, monthCount);
|
|
376
|
+
}
|
|
363
377
|
function sameDayInMonth(date, index) {
|
|
364
378
|
const first = monthStart(index);
|
|
365
379
|
const lastDay = new Date(first.getFullYear(), first.getMonth() + 1, 0).getDate();
|
|
@@ -379,14 +393,29 @@ function Calendar({
|
|
|
379
393
|
onFocusDateChange,
|
|
380
394
|
autoFocus = false,
|
|
381
395
|
locale,
|
|
382
|
-
selectedDates = []
|
|
396
|
+
selectedDates = [],
|
|
397
|
+
viewAlign
|
|
383
398
|
}) {
|
|
384
399
|
const focusIdx = monthIndex(focusDate);
|
|
385
|
-
const
|
|
400
|
+
const minIdx = minDate ? monthIndex(minDate) : -Infinity;
|
|
401
|
+
const maxIdx = maxDate ? monthIndex(maxDate) : Infinity;
|
|
402
|
+
const lastViewIdx = Math.max(minIdx, maxIdx - monthCount + 1);
|
|
403
|
+
const clampView = (idx) => clampIndex(idx, minIdx, lastViewIdx);
|
|
404
|
+
const [viewIdx, setViewIdx] = useState(
|
|
405
|
+
() => viewAlign ? clampView(initialRangeView(monthCount, monthIndex(viewAlign.anchor), viewAlign.slot, viewAlign.ends.map(monthIndex))) : focusIdx
|
|
406
|
+
);
|
|
407
|
+
const [alignSeq, setAlignSeq] = useState(viewAlign?.seq);
|
|
386
408
|
const [zoom, setZoom] = useState(null);
|
|
387
409
|
const gridRef = useRef(null);
|
|
388
410
|
const focusYmd = formatYmd(focusDate);
|
|
389
|
-
|
|
411
|
+
let baseIdx = viewIdx;
|
|
412
|
+
if (viewAlign && viewAlign.seq !== alignSeq) {
|
|
413
|
+
setAlignSeq(viewAlign.seq);
|
|
414
|
+
baseIdx = clampView(
|
|
415
|
+
alignRangeView(viewIdx, monthCount, monthIndex(viewAlign.anchor), viewAlign.slot, viewAlign.ends.map(monthIndex))
|
|
416
|
+
);
|
|
417
|
+
}
|
|
418
|
+
const visibleIdx = clampViewToFocus(focusIdx, baseIdx, monthCount);
|
|
390
419
|
if (visibleIdx !== viewIdx) setViewIdx(visibleIdx);
|
|
391
420
|
const claimFocusRef = useRef(false);
|
|
392
421
|
useEffect(() => {
|
|
@@ -402,12 +431,8 @@ function Calendar({
|
|
|
402
431
|
if (claim) grid.querySelector('[tabindex="0"]')?.focus();
|
|
403
432
|
}, [focusYmd]);
|
|
404
433
|
const todayYmd = formatYmd(/* @__PURE__ */ new Date());
|
|
405
|
-
const minIdx = minDate ? monthIndex(minDate) : -Infinity;
|
|
406
|
-
const maxIdx = maxDate ? monthIndex(maxDate) : Infinity;
|
|
407
434
|
const prevDisabled = visibleIdx <= minIdx;
|
|
408
435
|
const nextDisabled = visibleIdx + monthCount - 1 >= maxIdx;
|
|
409
|
-
const lastViewIdx = Math.max(minIdx, maxIdx - monthCount + 1);
|
|
410
|
-
const clampView = (idx) => clampIndex(idx, minIdx, lastViewIdx);
|
|
411
436
|
const moveFocus = (next) => {
|
|
412
437
|
onFocusDateChange(clampDate(next, minDate, maxDate));
|
|
413
438
|
};
|
|
@@ -530,11 +555,14 @@ function Calendar({
|
|
|
530
555
|
);
|
|
531
556
|
}) }) }),
|
|
532
557
|
/* @__PURE__ */ jsx("tbody", { className: "wp-dp__weeks", children: weeks.map((week, w) => /* @__PURE__ */ jsx("tr", { className: "wp-dp__week", children: week.map((cell) => {
|
|
533
|
-
|
|
558
|
+
if (cell.outside && monthCount > 1) {
|
|
559
|
+
return /* @__PURE__ */ jsx("td", { className: "wp-dp__day wp-dp__day--outside wp-dp__day--blank", children: /* @__PURE__ */ jsx("span", { className: "wp-dp__day-blank", "aria-hidden": "true" }) }, cell.ymd);
|
|
560
|
+
}
|
|
561
|
+
const state = cell.disabled || cell.outside ? {} : dayState(cell.date);
|
|
534
562
|
const classes = ["wp-dp__day"];
|
|
535
563
|
if (cell.outside) classes.push("wp-dp__day--outside");
|
|
536
564
|
if (cell.disabled) classes.push("wp-dp__day--disabled");
|
|
537
|
-
if (cell.ymd === todayYmd) classes.push("wp-dp__day--today");
|
|
565
|
+
if (cell.ymd === todayYmd && !cell.outside) classes.push("wp-dp__day--today");
|
|
538
566
|
if (state.selected) classes.push("wp-dp__day--selected");
|
|
539
567
|
if (state.rangeStart) classes.push("wp-dp__day--range-start");
|
|
540
568
|
if (state.rangeMiddle) classes.push("wp-dp__day--range-middle");
|
|
@@ -799,6 +827,36 @@ function DateRangePickerImpl({
|
|
|
799
827
|
const [focusDate, setFocusDate] = useState(() => fromDate ?? clampDate(/* @__PURE__ */ new Date(), minDate, maxDate));
|
|
800
828
|
const [grabFocus, setGrabFocus] = useState(false);
|
|
801
829
|
const [end, setEnd] = useState("from");
|
|
830
|
+
const [viewAlign, setViewAlign] = useState(void 0);
|
|
831
|
+
const programmaticFocusRef = useRef(false);
|
|
832
|
+
const alignFor = (which) => {
|
|
833
|
+
const ends = [fromDate, toDate].filter((d) => d !== void 0);
|
|
834
|
+
const own = which === "from" ? fromDate : toDate;
|
|
835
|
+
if (own) return { anchor: own, slot: which === "from" ? "start" : "end", ends };
|
|
836
|
+
const other = which === "from" ? toDate : fromDate;
|
|
837
|
+
if (other) return { anchor: other, slot: which === "from" ? "end" : "start", ends };
|
|
838
|
+
return void 0;
|
|
839
|
+
};
|
|
840
|
+
const requestAlign = (next) => {
|
|
841
|
+
setViewAlign((prev) => next ? { ...next, seq: (prev?.seq ?? 0) + 1 } : void 0);
|
|
842
|
+
};
|
|
843
|
+
const activateEnd = (which) => {
|
|
844
|
+
if (which === end) return;
|
|
845
|
+
setEnd(which);
|
|
846
|
+
if (!open || programmaticFocusRef.current) return;
|
|
847
|
+
const own = which === "from" ? fromDate : toDate;
|
|
848
|
+
if (!own) return;
|
|
849
|
+
setFocusDate(own);
|
|
850
|
+
requestAlign(alignFor(which));
|
|
851
|
+
};
|
|
852
|
+
const focusEndInput = (ref) => {
|
|
853
|
+
programmaticFocusRef.current = true;
|
|
854
|
+
try {
|
|
855
|
+
ref.current?.focus();
|
|
856
|
+
} finally {
|
|
857
|
+
programmaticFocusRef.current = false;
|
|
858
|
+
}
|
|
859
|
+
};
|
|
802
860
|
const dismiss = useCallback((reason) => {
|
|
803
861
|
setOpen(false);
|
|
804
862
|
if (reason === "escape") (end === "to" ? toRef : fromRef).current?.focus();
|
|
@@ -821,6 +879,7 @@ function DateRangePickerImpl({
|
|
|
821
879
|
setFocusDate(
|
|
822
880
|
(which === "to" ? toDate ?? fromDate : fromDate ?? toDate) ?? clampDate(/* @__PURE__ */ new Date(), minDate, maxDate)
|
|
823
881
|
);
|
|
882
|
+
requestAlign(alignFor(which));
|
|
824
883
|
setGrabFocus(claimFocus);
|
|
825
884
|
setOpen(true);
|
|
826
885
|
};
|
|
@@ -868,18 +927,18 @@ function DateRangePickerImpl({
|
|
|
868
927
|
const keepTo = toDate && date.getTime() > toDate.getTime() ? "" : toValue;
|
|
869
928
|
commit(ymd, keepTo);
|
|
870
929
|
setEnd("to");
|
|
871
|
-
toRef
|
|
930
|
+
focusEndInput(toRef);
|
|
872
931
|
return;
|
|
873
932
|
}
|
|
874
933
|
if (fromDate && date.getTime() < fromDate.getTime()) {
|
|
875
934
|
commit(ymd, "");
|
|
876
935
|
setEnd("to");
|
|
877
|
-
toRef
|
|
936
|
+
focusEndInput(toRef);
|
|
878
937
|
return;
|
|
879
938
|
}
|
|
880
939
|
commit(fromValue, ymd);
|
|
881
940
|
setOpen(false);
|
|
882
|
-
toRef
|
|
941
|
+
focusEndInput(toRef);
|
|
883
942
|
};
|
|
884
943
|
return /* @__PURE__ */ jsxs("div", { ref: hostRef, className: "wp-dp-host wp-dp-host--range", onBlur: handleBlur, children: [
|
|
885
944
|
/* @__PURE__ */ jsx(HoistedStyle, { id: "wp-datepicker", css: DP_CSS }),
|
|
@@ -900,7 +959,7 @@ function DateRangePickerImpl({
|
|
|
900
959
|
ariaLabel: loc.startLabel,
|
|
901
960
|
onValueChange: (raw) => handleTextChange("from", raw),
|
|
902
961
|
onKeyDown: handleKeyDown("from"),
|
|
903
|
-
onFocus: () =>
|
|
962
|
+
onFocus: () => activateEnd("from"),
|
|
904
963
|
onPointerDown: () => {
|
|
905
964
|
if (!disabled && !open) openCalendar("from", false);
|
|
906
965
|
}
|
|
@@ -922,7 +981,7 @@ function DateRangePickerImpl({
|
|
|
922
981
|
ariaLabel: loc.endLabel,
|
|
923
982
|
onValueChange: (raw) => handleTextChange("to", raw),
|
|
924
983
|
onKeyDown: handleKeyDown("to"),
|
|
925
|
-
onFocus: () =>
|
|
984
|
+
onFocus: () => activateEnd("to"),
|
|
926
985
|
onPointerDown: () => {
|
|
927
986
|
if (!disabled && !open) openCalendar("to", false);
|
|
928
987
|
}
|
|
@@ -951,6 +1010,7 @@ function DateRangePickerImpl({
|
|
|
951
1010
|
autoFocus: grabFocus,
|
|
952
1011
|
locale: loc,
|
|
953
1012
|
selectedDates: [fromDate, toDate].filter((d) => d !== void 0),
|
|
1013
|
+
viewAlign,
|
|
954
1014
|
dayState: (date) => {
|
|
955
1015
|
const t = date.getTime();
|
|
956
1016
|
const start = fromDate?.getTime();
|
|
@@ -1007,6 +1067,8 @@ var DP_CSS = `
|
|
|
1007
1067
|
.wp-dp__day-btn:focus-visible{outline:2px solid var(--wp-border-focus);outline-offset:-1px}
|
|
1008
1068
|
.wp-dp__day--today .wp-dp__day-btn{box-shadow:inset 0 0 0 1px var(--wp-border-focus)}
|
|
1009
1069
|
.wp-dp__day--outside{color:var(--wp-text-subtle)}
|
|
1070
|
+
/* \uB450 \uB2EC \uD45C\uC2DC\uC758 \uCC44\uC6C0 \uCE78 \u2014 \uB0A0\uC9DC \uCE78\uACFC \uAC19\uC740 \uC790\uB9AC\uB97C \uCC28\uC9C0\uD558\uB294 \uBE48\uCE78(6\uC8FC \uACA9\uC790 \uB192\uC774 \uC720\uC9C0, \uB450 \uD45C \uB192\uC774\uAC00 \uAC19\uB2E4) */
|
|
1071
|
+
.wp-dp__day-blank{display:block;width:32px;height:30px;margin:0 auto}
|
|
1010
1072
|
.wp-dp__day--disabled{color:var(--wp-text-disabled)}
|
|
1011
1073
|
.wp-dp__day--disabled .wp-dp__day-btn{cursor:default}
|
|
1012
1074
|
.wp-dp__day--selected .wp-dp__day-btn{background:var(--wp-action-primary-bg);color:var(--wp-action-primary-fg);font-weight:500}
|
|
@@ -6,6 +6,98 @@ import { useState, useRef, useEffect, useCallback } from 'react';
|
|
|
6
6
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
7
7
|
|
|
8
8
|
var THUMB_SIZE = 72;
|
|
9
|
+
var FILE_TILE_WIDTH = 168;
|
|
10
|
+
var IMAGE_EXTENSIONS = /* @__PURE__ */ new Set([
|
|
11
|
+
"jpg",
|
|
12
|
+
"jpeg",
|
|
13
|
+
"jpe",
|
|
14
|
+
"jfif",
|
|
15
|
+
"pjpeg",
|
|
16
|
+
"pjp",
|
|
17
|
+
"png",
|
|
18
|
+
"apng",
|
|
19
|
+
"gif",
|
|
20
|
+
"webp",
|
|
21
|
+
"avif",
|
|
22
|
+
"bmp",
|
|
23
|
+
"svg",
|
|
24
|
+
"ico",
|
|
25
|
+
"heic",
|
|
26
|
+
"heif",
|
|
27
|
+
"tif",
|
|
28
|
+
"tiff"
|
|
29
|
+
]);
|
|
30
|
+
var MIME_SHAPE = /^[a-z0-9][\w.+-]*\/[\w.+-]+/i;
|
|
31
|
+
function urlOf(item) {
|
|
32
|
+
return typeof item.url === "string" ? item.url : "";
|
|
33
|
+
}
|
|
34
|
+
function itemMime(item) {
|
|
35
|
+
const record = item;
|
|
36
|
+
for (const key of ["mimeType", "mime_type", "type"]) {
|
|
37
|
+
const value = record[key];
|
|
38
|
+
if (typeof value === "string" && MIME_SHAPE.test(value.trim())) return value.trim().toLowerCase();
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
function extensionOfPath(path) {
|
|
43
|
+
const segment = path.slice(Math.max(path.lastIndexOf("/"), path.lastIndexOf("\\")) + 1);
|
|
44
|
+
const dot = segment.lastIndexOf(".");
|
|
45
|
+
if (dot <= 0) return null;
|
|
46
|
+
const ext = segment.slice(dot + 1).toLowerCase();
|
|
47
|
+
return /^[a-z0-9]{1,10}$/.test(ext) ? ext : null;
|
|
48
|
+
}
|
|
49
|
+
function extensionOfUrl(url) {
|
|
50
|
+
if (/^(blob|data):/i.test(url.trim())) return null;
|
|
51
|
+
return extensionOfPath(url.split(/[?#]/, 1)[0]);
|
|
52
|
+
}
|
|
53
|
+
function dataUrlMime(url) {
|
|
54
|
+
const match = /^data:([^;,]+)/i.exec(url.trim());
|
|
55
|
+
return match && MIME_SHAPE.test(match[1]) ? match[1].toLowerCase() : null;
|
|
56
|
+
}
|
|
57
|
+
function itemLooksLikeImage(item, fileType) {
|
|
58
|
+
const mime = itemMime(item) ?? (fileType && MIME_SHAPE.test(fileType) ? fileType.toLowerCase() : null) ?? dataUrlMime(urlOf(item));
|
|
59
|
+
if (mime) return mime.startsWith("image/");
|
|
60
|
+
const ext = extensionOfUrl(urlOf(item)) ?? (item.name ? extensionOfPath(item.name) : null);
|
|
61
|
+
if (ext) return IMAGE_EXTENSIONS.has(ext);
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
function fileBadgeOf(item, fileType) {
|
|
65
|
+
const ext = (item.name ? extensionOfPath(item.name) : null) ?? extensionOfUrl(urlOf(item));
|
|
66
|
+
if (ext) return ext.toUpperCase();
|
|
67
|
+
const mime = itemMime(item) ?? (fileType && MIME_SHAPE.test(fileType) ? fileType.toLowerCase() : null);
|
|
68
|
+
const subtype = mime?.split("/")[1]?.split(/[;+]/)[0];
|
|
69
|
+
return subtype && /^[a-z0-9]{1,5}$/.test(subtype) ? subtype.toUpperCase() : null;
|
|
70
|
+
}
|
|
71
|
+
function displayNameOf(item) {
|
|
72
|
+
if (item.name && item.name.trim() !== "") return item.name;
|
|
73
|
+
const url = urlOf(item);
|
|
74
|
+
if (!/^(blob|data):/i.test(url.trim())) {
|
|
75
|
+
const path = url.split(/[?#]/, 1)[0];
|
|
76
|
+
const segment = path.slice(path.lastIndexOf("/") + 1);
|
|
77
|
+
if (segment !== "") {
|
|
78
|
+
try {
|
|
79
|
+
return decodeURIComponent(segment);
|
|
80
|
+
} catch {
|
|
81
|
+
return segment;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return "\uCCA8\uBD80 \uD30C\uC77C";
|
|
86
|
+
}
|
|
87
|
+
function safeFileHref(url) {
|
|
88
|
+
const value = url.replace(/[\u0000-\u0020]/g, "");
|
|
89
|
+
if (value === "") return null;
|
|
90
|
+
const scheme = /^([a-z][a-z0-9+.-]*):/i.exec(value);
|
|
91
|
+
if (!scheme) return url;
|
|
92
|
+
return /^(https?|blob)$/i.test(scheme[1]) ? url : null;
|
|
93
|
+
}
|
|
94
|
+
function acceptIsImageOnly(accept) {
|
|
95
|
+
const rules = accept.split(",").map((rule) => rule.trim().toLowerCase()).filter(Boolean);
|
|
96
|
+
if (rules.length === 0) return false;
|
|
97
|
+
return rules.every(
|
|
98
|
+
(rule) => rule.startsWith(".") ? IMAGE_EXTENSIONS.has(rule.slice(1)) : rule.startsWith("image/")
|
|
99
|
+
);
|
|
100
|
+
}
|
|
9
101
|
function matchesAccept(file, accept) {
|
|
10
102
|
const rules = accept.split(",").map((rule) => rule.trim().toLowerCase()).filter(Boolean);
|
|
11
103
|
if (rules.length === 0) return true;
|
|
@@ -65,6 +157,10 @@ function FileDropzoneImpl({
|
|
|
65
157
|
const inputRef = useRef(null);
|
|
66
158
|
const dragDepthRef = useRef(0);
|
|
67
159
|
const createdUrlsRef = useRef(/* @__PURE__ */ new Set());
|
|
160
|
+
const fileTypesRef = useRef(/* @__PURE__ */ new Map());
|
|
161
|
+
const rememberFileType = (id, file) => {
|
|
162
|
+
if (file.type) fileTypesRef.current.set(id, file.type);
|
|
163
|
+
};
|
|
68
164
|
useEffect(() => {
|
|
69
165
|
const created = createdUrlsRef.current;
|
|
70
166
|
return () => created.forEach((url) => URL.revokeObjectURL(url));
|
|
@@ -93,6 +189,7 @@ function FileDropzoneImpl({
|
|
|
93
189
|
try {
|
|
94
190
|
const item = await upload(file);
|
|
95
191
|
if (item && typeof item.id === "string" && typeof item.url === "string") {
|
|
192
|
+
rememberFileType(item.id, file);
|
|
96
193
|
commit([...itemsRef.current, { name: file.name, ...item }]);
|
|
97
194
|
} else {
|
|
98
195
|
failures.push(`${file.name} (\uC5C5\uB85C\uB354\uAC00 \uD56D\uBAA9\uC744 \uC8FC\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4)`);
|
|
@@ -116,10 +213,11 @@ function FileDropzoneImpl({
|
|
|
116
213
|
} else {
|
|
117
214
|
const json = await res.json().catch(() => null);
|
|
118
215
|
const body = unwrapUploaded(json);
|
|
119
|
-
const
|
|
216
|
+
const id2 = body?.id;
|
|
120
217
|
const url2 = body?.url;
|
|
121
|
-
if ((typeof
|
|
122
|
-
|
|
218
|
+
if ((typeof id2 === "string" || typeof id2 === "number") && typeof url2 === "string") {
|
|
219
|
+
rememberFileType(String(id2), file);
|
|
220
|
+
commit([...itemsRef.current, { id: String(id2), url: url2, name: file.name }]);
|
|
123
221
|
} else {
|
|
124
222
|
failures.push(`${file.name} (\uC751\uB2F5 \uD615\uC2DD \uC624\uB958)`);
|
|
125
223
|
}
|
|
@@ -132,7 +230,9 @@ function FileDropzoneImpl({
|
|
|
132
230
|
}
|
|
133
231
|
const url = URL.createObjectURL(file);
|
|
134
232
|
createdUrlsRef.current.add(url);
|
|
135
|
-
|
|
233
|
+
const id = localId();
|
|
234
|
+
rememberFileType(id, file);
|
|
235
|
+
commit([...itemsRef.current, { id, url, name: file.name }]);
|
|
136
236
|
}
|
|
137
237
|
} finally {
|
|
138
238
|
setProgress(null);
|
|
@@ -177,6 +277,7 @@ function FileDropzoneImpl({
|
|
|
177
277
|
(item) => {
|
|
178
278
|
const forget = () => {
|
|
179
279
|
commit(itemsRef.current.filter((current) => current.id !== item.id));
|
|
280
|
+
fileTypesRef.current.delete(item.id);
|
|
180
281
|
if (createdUrlsRef.current.has(item.url)) {
|
|
181
282
|
URL.revokeObjectURL(item.url);
|
|
182
283
|
createdUrlsRef.current.delete(item.url);
|
|
@@ -208,6 +309,7 @@ function FileDropzoneImpl({
|
|
|
208
309
|
};
|
|
209
310
|
const showLocalCaption = localMode || items.some((item) => item.id.startsWith("local-"));
|
|
210
311
|
const dropTinted = canAdd && (dragOver || hovering);
|
|
312
|
+
const imageOnly = acceptIsImageOnly(accept);
|
|
211
313
|
return /* @__PURE__ */ jsxs("div", { className: "wp-col", style: { gap: "var(--wp-space-2)" }, children: [
|
|
212
314
|
/* @__PURE__ */ jsx(
|
|
213
315
|
"input",
|
|
@@ -231,7 +333,7 @@ function FileDropzoneImpl({
|
|
|
231
333
|
role: "button",
|
|
232
334
|
tabIndex: canAdd ? 0 : -1,
|
|
233
335
|
"aria-disabled": !canAdd,
|
|
234
|
-
"aria-label": "\uC774\uBBF8\uC9C0 \uCCA8\uBD80",
|
|
336
|
+
"aria-label": imageOnly ? "\uC774\uBBF8\uC9C0 \uCCA8\uBD80" : "\uD30C\uC77C \uCCA8\uBD80",
|
|
235
337
|
onClick: openPicker,
|
|
236
338
|
onKeyDown: (event) => {
|
|
237
339
|
if (canAdd && (event.key === "Enter" || event.key === " ")) {
|
|
@@ -284,7 +386,7 @@ function FileDropzoneImpl({
|
|
|
284
386
|
style: { color: dropTinted ? "var(--wp-text-brand)" : "var(--wp-text-muted)" }
|
|
285
387
|
}
|
|
286
388
|
),
|
|
287
|
-
/* @__PURE__ */ jsx("span", { className: "wp-body-sm", style: { color: "var(--wp-text-default)" }, children: atCapacity ? `\uCD5C\uB300 ${maxCount}\uAC1C\uAE4C\uC9C0 \uCCA8\uBD80\uD588\uC2B5\uB2C8\uB2E4` :
|
|
389
|
+
/* @__PURE__ */ jsx("span", { className: "wp-body-sm", style: { color: "var(--wp-text-default)" }, children: atCapacity ? `\uCD5C\uB300 ${maxCount}\uAC1C\uAE4C\uC9C0 \uCCA8\uBD80\uD588\uC2B5\uB2C8\uB2E4` : `\uD074\uB9AD\uD558\uAC70\uB098 ${imageOnly ? "\uC774\uBBF8\uC9C0\uB97C" : "\uD30C\uC77C\uC744"} \uB04C\uC5B4\uB2E4 \uB193\uC73C\uC138\uC694` }),
|
|
288
390
|
hint ? /* @__PURE__ */ jsx("span", { className: "wp-caption", children: hint }) : null
|
|
289
391
|
] })
|
|
290
392
|
}
|
|
@@ -318,47 +420,128 @@ function FileDropzoneImpl({
|
|
|
318
420
|
}
|
|
319
421
|
) : null,
|
|
320
422
|
items.length > 0 ? /* @__PURE__ */ jsx("div", { style: { display: "flex", flexWrap: "wrap", gap: "var(--wp-space-2)" }, children: items.map((item) => {
|
|
321
|
-
const
|
|
423
|
+
const fileType = fileTypesRef.current.get(item.id);
|
|
424
|
+
const asImage = itemLooksLikeImage(item, fileType);
|
|
425
|
+
const resolved = resolveAsset(item.url, {
|
|
322
426
|
component: "FileDropzone",
|
|
323
|
-
prop: "src",
|
|
427
|
+
prop: asImage ? "src" : "href",
|
|
324
428
|
kind: "attribute"
|
|
325
429
|
});
|
|
430
|
+
const hovered = hoverItemId === item.id;
|
|
431
|
+
let preview;
|
|
432
|
+
if (asImage) {
|
|
433
|
+
preview = resolved === null ? /* @__PURE__ */ jsx(
|
|
434
|
+
"span",
|
|
435
|
+
{
|
|
436
|
+
"aria-label": item.name ?? "\uCCA8\uBD80 \uBBF8\uB9AC\uBCF4\uAE30 \uC5C6\uC74C",
|
|
437
|
+
role: "img",
|
|
438
|
+
style: {
|
|
439
|
+
display: "block",
|
|
440
|
+
width: THUMB_SIZE,
|
|
441
|
+
height: THUMB_SIZE,
|
|
442
|
+
borderRadius: "var(--wp-radius-md)",
|
|
443
|
+
border: "var(--wp-border-w) solid var(--wp-border-subtle)",
|
|
444
|
+
background: "var(--wp-surface-sunken)"
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
) : /* @__PURE__ */ jsx(
|
|
448
|
+
ImageLightbox,
|
|
449
|
+
{
|
|
450
|
+
src: resolved,
|
|
451
|
+
alt: item.name,
|
|
452
|
+
thumbStyle: {
|
|
453
|
+
width: THUMB_SIZE,
|
|
454
|
+
height: THUMB_SIZE,
|
|
455
|
+
objectFit: "cover",
|
|
456
|
+
display: "block",
|
|
457
|
+
borderRadius: "var(--wp-radius-md)",
|
|
458
|
+
border: "var(--wp-border-w) solid var(--wp-border-subtle)"
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
);
|
|
462
|
+
} else {
|
|
463
|
+
const href = sandbox || resolved === null ? null : safeFileHref(resolved);
|
|
464
|
+
const displayName = displayNameOf(item);
|
|
465
|
+
const badge = fileBadgeOf(item, fileType);
|
|
466
|
+
const tileStyle = {
|
|
467
|
+
display: "flex",
|
|
468
|
+
alignItems: "center",
|
|
469
|
+
gap: "var(--wp-space-2)",
|
|
470
|
+
boxSizing: "border-box",
|
|
471
|
+
width: FILE_TILE_WIDTH,
|
|
472
|
+
height: THUMB_SIZE,
|
|
473
|
+
padding: "0 var(--wp-space-2)",
|
|
474
|
+
borderRadius: "var(--wp-radius-md)",
|
|
475
|
+
border: `var(--wp-border-w) solid ${hovered && href ? "var(--wp-border-strong)" : "var(--wp-border-subtle)"}`,
|
|
476
|
+
background: "var(--wp-surface-sunken)",
|
|
477
|
+
color: "var(--wp-text-default)",
|
|
478
|
+
textDecoration: "none",
|
|
479
|
+
transition: "var(--wp-transition-surface)"
|
|
480
|
+
};
|
|
481
|
+
const tileBody = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
482
|
+
/* @__PURE__ */ jsxs(
|
|
483
|
+
"span",
|
|
484
|
+
{
|
|
485
|
+
style: {
|
|
486
|
+
display: "flex",
|
|
487
|
+
flexDirection: "column",
|
|
488
|
+
alignItems: "center",
|
|
489
|
+
gap: 2,
|
|
490
|
+
flex: "none",
|
|
491
|
+
minWidth: 28,
|
|
492
|
+
color: "var(--wp-text-muted)"
|
|
493
|
+
},
|
|
494
|
+
children: [
|
|
495
|
+
/* @__PURE__ */ jsx(Icon, { name: "file-text", size: 24 }),
|
|
496
|
+
badge ? /* @__PURE__ */ jsx("span", { className: "wp-overline", style: { lineHeight: 1 }, children: badge }) : null
|
|
497
|
+
]
|
|
498
|
+
}
|
|
499
|
+
),
|
|
500
|
+
/* @__PURE__ */ jsx(
|
|
501
|
+
"span",
|
|
502
|
+
{
|
|
503
|
+
className: "wp-caption",
|
|
504
|
+
style: {
|
|
505
|
+
flex: 1,
|
|
506
|
+
minWidth: 0,
|
|
507
|
+
color: "var(--wp-text-default)",
|
|
508
|
+
display: "-webkit-box",
|
|
509
|
+
WebkitLineClamp: 2,
|
|
510
|
+
WebkitBoxOrient: "vertical",
|
|
511
|
+
overflow: "hidden",
|
|
512
|
+
wordBreak: "break-all"
|
|
513
|
+
},
|
|
514
|
+
children: displayName
|
|
515
|
+
}
|
|
516
|
+
)
|
|
517
|
+
] });
|
|
518
|
+
preview = href ? /* @__PURE__ */ jsx(
|
|
519
|
+
"a",
|
|
520
|
+
{
|
|
521
|
+
href,
|
|
522
|
+
target: "_blank",
|
|
523
|
+
rel: "noopener",
|
|
524
|
+
title: displayName,
|
|
525
|
+
"aria-label": `${displayName}${badge ? ` (${badge})` : ""} \u2014 \uC0C8 \uD0ED\uC5D0\uC11C \uC5F4\uAE30`,
|
|
526
|
+
"data-file-tile": "",
|
|
527
|
+
style: tileStyle,
|
|
528
|
+
onClick: (event) => event.stopPropagation(),
|
|
529
|
+
children: tileBody
|
|
530
|
+
}
|
|
531
|
+
) : /* @__PURE__ */ jsx("span", { title: displayName, "data-file-tile": "", style: tileStyle, children: tileBody });
|
|
532
|
+
}
|
|
326
533
|
return /* @__PURE__ */ jsxs(
|
|
327
534
|
"div",
|
|
328
535
|
{
|
|
329
|
-
style: {
|
|
536
|
+
style: {
|
|
537
|
+
position: "relative",
|
|
538
|
+
width: asImage ? THUMB_SIZE : FILE_TILE_WIDTH,
|
|
539
|
+
height: THUMB_SIZE
|
|
540
|
+
},
|
|
330
541
|
onMouseEnter: () => setHoverItemId(item.id),
|
|
331
542
|
onMouseLeave: () => setHoverItemId((current) => current === item.id ? null : current),
|
|
332
543
|
children: [
|
|
333
|
-
|
|
334
|
-
"span",
|
|
335
|
-
{
|
|
336
|
-
"aria-label": item.name ?? "\uCCA8\uBD80 \uBBF8\uB9AC\uBCF4\uAE30 \uC5C6\uC74C",
|
|
337
|
-
role: "img",
|
|
338
|
-
style: {
|
|
339
|
-
display: "block",
|
|
340
|
-
width: THUMB_SIZE,
|
|
341
|
-
height: THUMB_SIZE,
|
|
342
|
-
borderRadius: "var(--wp-radius-md)",
|
|
343
|
-
border: "var(--wp-border-w) solid var(--wp-border-subtle)",
|
|
344
|
-
background: "var(--wp-surface-sunken)"
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
) : /* @__PURE__ */ jsx(
|
|
348
|
-
ImageLightbox,
|
|
349
|
-
{
|
|
350
|
-
src: thumbSrc,
|
|
351
|
-
alt: item.name,
|
|
352
|
-
thumbStyle: {
|
|
353
|
-
width: THUMB_SIZE,
|
|
354
|
-
height: THUMB_SIZE,
|
|
355
|
-
objectFit: "cover",
|
|
356
|
-
display: "block",
|
|
357
|
-
borderRadius: "var(--wp-radius-md)",
|
|
358
|
-
border: "var(--wp-border-w) solid var(--wp-border-subtle)"
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
),
|
|
544
|
+
preview,
|
|
362
545
|
/* @__PURE__ */ jsx(
|
|
363
546
|
"span",
|
|
364
547
|
{
|
|
@@ -369,7 +552,7 @@ function FileDropzoneImpl({
|
|
|
369
552
|
background: "var(--wp-surface-card)",
|
|
370
553
|
borderRadius: "var(--wp-radius-sm)",
|
|
371
554
|
boxShadow: "var(--wp-shadow-sm)",
|
|
372
|
-
opacity:
|
|
555
|
+
opacity: hovered ? 1 : 0,
|
|
373
556
|
transition: "opacity var(--wp-duration-fast) var(--wp-ease-out)"
|
|
374
557
|
},
|
|
375
558
|
children: /* @__PURE__ */ jsx(
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ellipsisStyle, unwrapRows } from './chunk-YOLT2TPX.js';
|
|
2
|
-
import { includesLooseSearch } from './chunk-
|
|
2
|
+
import { includesLooseSearch } from './chunk-I2URQNZZ.js';
|
|
3
3
|
import { useSduiAdapter, hostFetchOf } from './chunk-XFNHHGFR.js';
|
|
4
4
|
import { Icon, Button, Input, Spinner } from './chunk-KIHN7DGA.js';
|
|
5
5
|
import { boxed } from './chunk-3JTBOABA.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { includesLooseSearch } from './chunk-
|
|
1
|
+
import { includesLooseSearch } from './chunk-I2URQNZZ.js';
|
|
2
2
|
import { OverlayLayer } from './chunk-R2ORCOTG.js';
|
|
3
3
|
import { Button, Dialog, Input, Tag, Checkbox } from './chunk-KIHN7DGA.js';
|
|
4
4
|
import { boxed } from './chunk-3JTBOABA.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DateRangePicker } from './chunk-
|
|
1
|
+
import { DateRangePicker } from './chunk-5JXXCRXA.js';
|
|
2
2
|
import { useOverlayLayer } from './chunk-R2ORCOTG.js';
|
|
3
3
|
import { HoistedStyle } from './chunk-RIZRM7OO.js';
|
|
4
4
|
import { Input, Button, IconButton, Tag, Field, Checkbox } from './chunk-KIHN7DGA.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { buildCascadingTree } from './chunk-
|
|
1
|
+
import { buildCascadingTree } from './chunk-I2URQNZZ.js';
|
|
2
2
|
import { Input, IconButton, EmptyState, Icon, Badge } from './chunk-KIHN7DGA.js';
|
|
3
3
|
import { boxed } from './chunk-3JTBOABA.js';
|
|
4
4
|
import React, { useMemo, useState, useRef, useEffect } from 'react';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { resolveTreeNodes, TreeView } from './chunk-
|
|
1
|
+
import { resolveTreeNodes, TreeView } from './chunk-OI2GPBIL.js';
|
|
2
2
|
import { OverlayLayer } from './chunk-R2ORCOTG.js';
|
|
3
3
|
import { Field, Dialog, Icon, Button, Input } from './chunk-KIHN7DGA.js';
|
|
4
4
|
import { boxed } from './chunk-3JTBOABA.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TagMultiSelect } from './chunk-TCHXA35K.js';
|
|
2
|
-
import { ApprovalLineEditor, stepTypeIcon, stepLabel } from './chunk-
|
|
2
|
+
import { ApprovalLineEditor, stepTypeIcon, stepLabel } from './chunk-4SVSS7VO.js';
|
|
3
3
|
import { orderCircleStyle, unwrapRows, uid } from './chunk-YOLT2TPX.js';
|
|
4
4
|
import { useSduiAdapter, hostFetchOf, defaultAdapter } from './chunk-XFNHHGFR.js';
|
|
5
5
|
import { Card, Icon, Input, IconButton, Field, Button, Badge } from './chunk-KIHN7DGA.js';
|
package/dist/index.js
CHANGED
|
@@ -5,10 +5,10 @@ import { Text, Spacer, Show, Section, Row, PageHead, KeyValueList, Grid, Divider
|
|
|
5
5
|
export { Actions, Col, Divider, Grid, KeyValueList, PageHead, Row, Section, Show, Spacer, Text } from './chunk-YK7ZNV2C.js';
|
|
6
6
|
import { ImageViewer } from './chunk-PN5IJPA5.js';
|
|
7
7
|
export { ImageViewer } from './chunk-PN5IJPA5.js';
|
|
8
|
-
import { normalizeSearchFields, searchValuesFromParams, splitMultiValue, includesLooseSearch, cascadingValuePaths, SearchToolbar, searchFieldKeys, Popover } from './chunk-
|
|
9
|
-
export { SearchToolbar, cascadingValuePaths, cleanSearchValues, includesLooseSearch, joinMultiValue, normalizeSearchText, searchFieldKeys, searchValuesFromParams, splitMultiValue } from './chunk-
|
|
10
|
-
import { parseYmd, YMD_RE, TimePicker, DateRangePicker, DatePicker } from './chunk-
|
|
11
|
-
export { DatePicker, DateRangePicker, TimePicker } from './chunk-
|
|
8
|
+
import { normalizeSearchFields, searchValuesFromParams, splitMultiValue, includesLooseSearch, cascadingValuePaths, SearchToolbar, searchFieldKeys, Popover } from './chunk-I2URQNZZ.js';
|
|
9
|
+
export { SearchToolbar, cascadingValuePaths, cleanSearchValues, includesLooseSearch, joinMultiValue, normalizeSearchText, searchFieldKeys, searchValuesFromParams, splitMultiValue } from './chunk-I2URQNZZ.js';
|
|
10
|
+
import { parseYmd, YMD_RE, TimePicker, DateRangePicker, DatePicker } from './chunk-5JXXCRXA.js';
|
|
11
|
+
export { DatePicker, DateRangePicker, TimePicker } from './chunk-5JXXCRXA.js';
|
|
12
12
|
import './chunk-KJDHF6VU.js';
|
|
13
13
|
import { OverlayContainerContext, OverlayLayer, useAnyModalOpen } from './chunk-R2ORCOTG.js';
|
|
14
14
|
export { OverlayContainerContext, OverlayLayer, getOverlayRoot, useAnyModalOpen, useOverlayLayer } from './chunk-R2ORCOTG.js';
|
package/dist/meta.js
CHANGED
|
@@ -4376,7 +4376,7 @@ var FileDropzoneMeta = {
|
|
|
4376
4376
|
label: "\uD30C\uC77C \uCCA8\uBD80",
|
|
4377
4377
|
category: "input",
|
|
4378
4378
|
icon: "paperclip",
|
|
4379
|
-
description: "\uB4DC\uB798\uADF8 \uC564 \uB4DC\uB86D \uB2E4\uC911 \uCCA8\uBD80. \uC5C5\uB85C\uB4DC \uACBD\uB85C\uAC00 \uC5C6\uAC70\uB098 \uBC31\uC5D4\uB4DC\uAC00 503\uC774\uBA74 object URL \uB85C\uCEEC \uBBF8\uB9AC\uBCF4\uAE30\uB85C \uB5A8\uC5B4\uC9C4\uB2E4.",
|
|
4379
|
+
description: "\uB4DC\uB798\uADF8 \uC564 \uB4DC\uB86D \uB2E4\uC911 \uCCA8\uBD80. \uC774\uBBF8\uC9C0\uB294 \uC378\uB124\uC77C, PDF \uB4F1 \uADF8 \uBC16\uC758 \uD30C\uC77C\uC740 \uC0C8 \uD0ED\uC73C\uB85C \uC5EC\uB294 \uD30C\uC77C \uD0C0\uC77C\uB85C \uBCF4\uC778\uB2E4. \uC5C5\uB85C\uB4DC \uACBD\uB85C\uAC00 \uC5C6\uAC70\uB098 \uBC31\uC5D4\uB4DC\uAC00 503\uC774\uBA74 object URL \uB85C\uCEEC \uBBF8\uB9AC\uBCF4\uAE30\uB85C \uB5A8\uC5B4\uC9C4\uB2E4.",
|
|
4380
4380
|
props: [
|
|
4381
4381
|
{
|
|
4382
4382
|
name: "value",
|
|
@@ -4389,7 +4389,13 @@ var FileDropzoneMeta = {
|
|
|
4389
4389
|
item: [
|
|
4390
4390
|
{ name: "id", kind: "string", label: "\uC2DD\uBCC4\uC790", required: true },
|
|
4391
4391
|
{ name: "url", kind: "string", label: "URL", required: true },
|
|
4392
|
-
{ name: "name", kind: "string", label: "\uD30C\uC77C\uBA85" }
|
|
4392
|
+
{ name: "name", kind: "string", label: "\uD30C\uC77C\uBA85" },
|
|
4393
|
+
{
|
|
4394
|
+
name: "mimeType",
|
|
4395
|
+
kind: "string",
|
|
4396
|
+
label: "MIME \uD615\uC2DD",
|
|
4397
|
+
description: "image/\u2026 \uC774\uBA74 \uC378\uB124\uC77C, \uC544\uB2C8\uBA74 \uD30C\uC77C \uD0C0\uC77C(\uBB38\uC11C \uC544\uC774\uCF58\xB7\uD655\uC7A5\uC790\xB7\uD30C\uC77C\uBA85, \uB204\uB974\uBA74 \uC0C8 \uD0ED). mime_type\xB7type \uB3C4 \uC77D\uACE0, \uC5C6\uC73C\uBA74 URL\xB7\uD30C\uC77C\uBA85 \uD655\uC7A5\uC790\uB85C \uD310\uC815\uD55C\uB2E4."
|
|
4398
|
+
}
|
|
4393
4399
|
]
|
|
4394
4400
|
},
|
|
4395
4401
|
{
|
package/dist/rich.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useOptionalModule, DependencyPlaceholder } from './chunk-JRCHWX2B.js';
|
|
2
|
-
export { DatePicker, DateRangePicker, TimePicker } from './chunk-
|
|
2
|
+
export { DatePicker, DateRangePicker, TimePicker } from './chunk-5JXXCRXA.js';
|
|
3
3
|
import './chunk-KJDHF6VU.js';
|
|
4
4
|
import './chunk-R2ORCOTG.js';
|
|
5
5
|
import { HoistedStyle } from './chunk-RIZRM7OO.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { ApprovalLineEditor, stepLabel, stepTypeIcon } from '../chunk-
|
|
1
|
+
export { ApprovalLineEditor, stepLabel, stepTypeIcon } from '../chunk-4SVSS7VO.js';
|
|
2
2
|
import '../chunk-YOLT2TPX.js';
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-I2URQNZZ.js';
|
|
4
|
+
import '../chunk-5JXXCRXA.js';
|
|
5
5
|
import '../chunk-KJDHF6VU.js';
|
|
6
6
|
import '../chunk-R2ORCOTG.js';
|
|
7
7
|
import '../chunk-RIZRM7OO.js';
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { ApprovalOverridesEditor, facetsFrom } from '../chunk-
|
|
1
|
+
export { ApprovalOverridesEditor, facetsFrom } from '../chunk-ZDWCLHIY.js';
|
|
2
2
|
import '../chunk-TCHXA35K.js';
|
|
3
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-4SVSS7VO.js';
|
|
4
4
|
import '../chunk-YOLT2TPX.js';
|
|
5
|
-
import '../chunk-
|
|
6
|
-
import '../chunk-
|
|
5
|
+
import '../chunk-I2URQNZZ.js';
|
|
6
|
+
import '../chunk-5JXXCRXA.js';
|
|
7
7
|
import '../chunk-KJDHF6VU.js';
|
|
8
8
|
import '../chunk-R2ORCOTG.js';
|
|
9
9
|
import '../chunk-RIZRM7OO.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { AutocompleteField, endpointSearchFn, toAutocompleteOptions } from '../chunk-
|
|
1
|
+
export { AutocompleteField, endpointSearchFn, toAutocompleteOptions } from '../chunk-DTCZPXOT.js';
|
|
2
2
|
import '../chunk-YOLT2TPX.js';
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-I2URQNZZ.js';
|
|
4
|
+
import '../chunk-5JXXCRXA.js';
|
|
5
5
|
import '../chunk-KJDHF6VU.js';
|
|
6
6
|
import '../chunk-R2ORCOTG.js';
|
|
7
7
|
import '../chunk-RIZRM7OO.js';
|
|
@@ -5,6 +5,14 @@ type FileDropzoneItem = {
|
|
|
5
5
|
id: string;
|
|
6
6
|
url: string;
|
|
7
7
|
name?: string;
|
|
8
|
+
/**
|
|
9
|
+
* MIME 형식(예: `application/pdf`) — 있으면 이미지/파일 타일 판정의 1순위다.
|
|
10
|
+
* 서버 행을 그대로 채우는 앱은 snake_case(`mime_type`)로 주고, File 같은 객체는
|
|
11
|
+
* `type`으로 준다 — 셋 다 읽는다(`type`은 `x/y` 모양일 때만 MIME 으로 본다).
|
|
12
|
+
*/
|
|
13
|
+
mimeType?: string;
|
|
14
|
+
mime_type?: string;
|
|
15
|
+
type?: string;
|
|
8
16
|
};
|
|
9
17
|
interface FileDropzoneProps {
|
|
10
18
|
/** 백엔드 업로드 경로 (예: "/attachments"). 없으면 로컬 미리보기 모드 */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { PeriodFilter } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { PeriodFilter } from '../chunk-UNQ6VAVD.js';
|
|
2
|
+
import '../chunk-5JXXCRXA.js';
|
|
3
3
|
import '../chunk-KJDHF6VU.js';
|
|
4
4
|
import '../chunk-R2ORCOTG.js';
|
|
5
5
|
import '../chunk-RIZRM7OO.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { SearchableMultiPicker } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
1
|
+
export { SearchableMultiPicker } from '../chunk-H7RLEDKJ.js';
|
|
2
|
+
import '../chunk-I2URQNZZ.js';
|
|
3
|
+
import '../chunk-5JXXCRXA.js';
|
|
4
4
|
import '../chunk-KJDHF6VU.js';
|
|
5
5
|
import '../chunk-R2ORCOTG.js';
|
|
6
6
|
import '../chunk-RIZRM7OO.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { StagePeriodEditor } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { StagePeriodEditor } from '../chunk-3PGKBTBZ.js';
|
|
2
|
+
import '../chunk-5JXXCRXA.js';
|
|
3
3
|
import '../chunk-KJDHF6VU.js';
|
|
4
4
|
import '../chunk-R2ORCOTG.js';
|
|
5
5
|
import '../chunk-RIZRM7OO.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { TreePicker } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
1
|
+
export { TreePicker } from '../chunk-UDJVLMDH.js';
|
|
2
|
+
import '../chunk-OI2GPBIL.js';
|
|
3
|
+
import '../chunk-I2URQNZZ.js';
|
|
4
|
+
import '../chunk-5JXXCRXA.js';
|
|
5
5
|
import '../chunk-KJDHF6VU.js';
|
|
6
6
|
import '../chunk-R2ORCOTG.js';
|
|
7
7
|
import '../chunk-RIZRM7OO.js';
|
package/dist/widgets/TreeView.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { TreeView, ancestorIdsOf, buildTreeNodes, pruneExcluded, resolveTreeNodes, scrollRowIntoBox } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
1
|
+
export { TreeView, ancestorIdsOf, buildTreeNodes, pruneExcluded, resolveTreeNodes, scrollRowIntoBox } from '../chunk-OI2GPBIL.js';
|
|
2
|
+
import '../chunk-I2URQNZZ.js';
|
|
3
|
+
import '../chunk-5JXXCRXA.js';
|
|
4
4
|
import '../chunk-KJDHF6VU.js';
|
|
5
5
|
import '../chunk-R2ORCOTG.js';
|
|
6
6
|
import '../chunk-RIZRM7OO.js';
|
package/dist/widgets/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { TreePicker } from '../chunk-
|
|
2
|
-
export { TreePicker } from '../chunk-
|
|
3
|
-
import { TreeView } from '../chunk-
|
|
4
|
-
export { TreeView, buildTreeNodes } from '../chunk-
|
|
1
|
+
import { TreePicker } from '../chunk-UDJVLMDH.js';
|
|
2
|
+
export { TreePicker } from '../chunk-UDJVLMDH.js';
|
|
3
|
+
import { TreeView } from '../chunk-OI2GPBIL.js';
|
|
4
|
+
export { TreeView, buildTreeNodes } from '../chunk-OI2GPBIL.js';
|
|
5
5
|
import { SecureScreen } from '../chunk-ITFSPOOB.js';
|
|
6
6
|
export { SecureScreen } from '../chunk-ITFSPOOB.js';
|
|
7
7
|
import { StackedMeter } from '../chunk-EJIWOD7W.js';
|
|
8
8
|
export { StackedMeter } from '../chunk-EJIWOD7W.js';
|
|
9
|
-
import { StagePeriodEditor } from '../chunk-
|
|
10
|
-
export { StagePeriodEditor } from '../chunk-
|
|
9
|
+
import { StagePeriodEditor } from '../chunk-3PGKBTBZ.js';
|
|
10
|
+
export { StagePeriodEditor } from '../chunk-3PGKBTBZ.js';
|
|
11
11
|
import { Strip } from '../chunk-XAXROQKB.js';
|
|
12
12
|
export { Strip } from '../chunk-XAXROQKB.js';
|
|
13
13
|
import { SummaryTable } from '../chunk-VZOQRQAR.js';
|
|
@@ -30,8 +30,8 @@ import { RecordSheet } from '../chunk-VR4DQTWR.js';
|
|
|
30
30
|
export { RecordSheet } from '../chunk-VR4DQTWR.js';
|
|
31
31
|
import { RoleMemberPicker } from '../chunk-QP7AQEGZ.js';
|
|
32
32
|
export { RoleMemberPicker } from '../chunk-QP7AQEGZ.js';
|
|
33
|
-
import { SearchableMultiPicker } from '../chunk-
|
|
34
|
-
export { SearchableMultiPicker } from '../chunk-
|
|
33
|
+
import { SearchableMultiPicker } from '../chunk-H7RLEDKJ.js';
|
|
34
|
+
export { SearchableMultiPicker } from '../chunk-H7RLEDKJ.js';
|
|
35
35
|
import { JsonField } from '../chunk-PGAP2RLS.js';
|
|
36
36
|
export { JsonField } from '../chunk-PGAP2RLS.js';
|
|
37
37
|
import { LiveClock } from '../chunk-37BNG4DT.js';
|
|
@@ -48,9 +48,9 @@ import '../chunk-XRHR452N.js';
|
|
|
48
48
|
import '../chunk-XDR6HC4U.js';
|
|
49
49
|
import { PermissionMatrixEditor } from '../chunk-DNUO63VZ.js';
|
|
50
50
|
export { PermissionMatrixEditor, stickyInsetOf } from '../chunk-DNUO63VZ.js';
|
|
51
|
-
import { PeriodFilter } from '../chunk-
|
|
52
|
-
export { PeriodFilter } from '../chunk-
|
|
53
|
-
export { AutocompleteField, endpointSearchFn, toAutocompleteOptions } from '../chunk-
|
|
51
|
+
import { PeriodFilter } from '../chunk-UNQ6VAVD.js';
|
|
52
|
+
export { PeriodFilter } from '../chunk-UNQ6VAVD.js';
|
|
53
|
+
export { AutocompleteField, endpointSearchFn, toAutocompleteOptions } from '../chunk-DTCZPXOT.js';
|
|
54
54
|
import { ColumnBoard } from '../chunk-CUAGMSSG.js';
|
|
55
55
|
export { ColumnBoard } from '../chunk-CUAGMSSG.js';
|
|
56
56
|
import { DiffView } from '../chunk-DDX7KJAW.js';
|
|
@@ -59,7 +59,7 @@ import { Disclosure } from '../chunk-LONXOEZY.js';
|
|
|
59
59
|
export { Disclosure } from '../chunk-LONXOEZY.js';
|
|
60
60
|
import { EventCalendar } from '../chunk-KVQXQLAP.js';
|
|
61
61
|
export { EventCalendar, statusToneOf } from '../chunk-KVQXQLAP.js';
|
|
62
|
-
export { FileDropzone, unwrapUploaded } from '../chunk-
|
|
62
|
+
export { FileDropzone, unwrapUploaded } from '../chunk-CFFSCGDV.js';
|
|
63
63
|
import { ImageLightbox } from '../chunk-JDTVNS3H.js';
|
|
64
64
|
export { ImageLightbox } from '../chunk-JDTVNS3H.js';
|
|
65
65
|
import { InlineEdit } from '../chunk-FXEKHHEA.js';
|
|
@@ -67,15 +67,15 @@ export { InlineEdit } from '../chunk-FXEKHHEA.js';
|
|
|
67
67
|
import '../chunk-O3SD2HS6.js';
|
|
68
68
|
import '../chunk-YK7ZNV2C.js';
|
|
69
69
|
import '../chunk-PN5IJPA5.js';
|
|
70
|
-
import { ApprovalOverridesEditor } from '../chunk-
|
|
71
|
-
export { ApprovalOverridesEditor } from '../chunk-
|
|
70
|
+
import { ApprovalOverridesEditor } from '../chunk-ZDWCLHIY.js';
|
|
71
|
+
export { ApprovalOverridesEditor } from '../chunk-ZDWCLHIY.js';
|
|
72
72
|
import { TagMultiSelect } from '../chunk-TCHXA35K.js';
|
|
73
73
|
export { TagMultiSelect, pickSeedValues } from '../chunk-TCHXA35K.js';
|
|
74
|
-
import { ApprovalLineEditor } from '../chunk-
|
|
75
|
-
export { ApprovalLineEditor } from '../chunk-
|
|
74
|
+
import { ApprovalLineEditor } from '../chunk-4SVSS7VO.js';
|
|
75
|
+
export { ApprovalLineEditor } from '../chunk-4SVSS7VO.js';
|
|
76
76
|
import '../chunk-YOLT2TPX.js';
|
|
77
|
-
import '../chunk-
|
|
78
|
-
import '../chunk-
|
|
77
|
+
import '../chunk-I2URQNZZ.js';
|
|
78
|
+
import '../chunk-5JXXCRXA.js';
|
|
79
79
|
import '../chunk-KJDHF6VU.js';
|
|
80
80
|
import '../chunk-R2ORCOTG.js';
|
|
81
81
|
import '../chunk-RIZRM7OO.js';
|