@wipco/sdui 0.50.6 → 1.0.1
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/{DatePicker-BK_jsV7i.d.ts → DatePicker-C_TT_SOw.d.ts} +25 -0
- package/dist/{chunk-OEWTVLPZ.js → chunk-2HLXCKK7.js} +2 -2
- package/dist/{chunk-PWVHAUJC.js → chunk-2YP5N4VV.js} +6 -4
- package/dist/{chunk-QTHYLNJW.js → chunk-37SFFW37.js} +2 -13
- package/dist/{chunk-YQOMSWW5.js → chunk-5WW4MBRO.js} +1 -1
- package/dist/{chunk-LIOS3PF2.js → chunk-5XPZ3RSA.js} +3 -4
- package/dist/{chunk-ZD3VNVRF.js → chunk-7BGDSSAN.js} +5 -13
- package/dist/{chunk-Y2LIEWQX.js → chunk-7FZTUI6U.js} +6 -5
- package/dist/{chunk-HJ5VSXR4.js → chunk-7P7N43JV.js} +2 -2
- package/dist/{chunk-55VB6SDU.js → chunk-A5XQOEVH.js} +23 -20
- package/dist/{chunk-77LKJCMM.js → chunk-A6LAIGUS.js} +20 -108
- package/dist/{chunk-YXS5FXVS.js → chunk-AC5TI3BE.js} +7 -16
- package/dist/{chunk-AIOJYVJ2.js → chunk-AXGF4M57.js} +1 -1
- package/dist/{chunk-5MPK3NZK.js → chunk-B6WMC2AN.js} +3 -3
- package/dist/{chunk-C6ZV4VBN.js → chunk-C37U3GCC.js} +4 -4
- package/dist/{chunk-265YPW4W.js → chunk-DMLDKW7K.js} +1 -1
- package/dist/{chunk-FZ72IDVF.js → chunk-E6ISNQK3.js} +2 -2
- package/dist/{chunk-STX2AX6Y.js → chunk-FLAN7CV3.js} +7 -39
- package/dist/{chunk-IV5YTVHR.js → chunk-GE6BYNQJ.js} +18 -33
- package/dist/{chunk-ZX36LKJ7.js → chunk-GTGS2QRL.js} +7 -6
- package/dist/{chunk-NL3I6F2I.js → chunk-HBBTENSV.js} +3 -3
- package/dist/{chunk-RUU7WBGR.js → chunk-I45EUZC6.js} +19 -9
- package/dist/{chunk-JBKNIALK.js → chunk-I5SD7XRA.js} +9 -6
- package/dist/{chunk-X7GHY2RI.js → chunk-IFKYGJXP.js} +14 -42
- package/dist/{chunk-J3YMUR6R.js → chunk-IZ3JA2BR.js} +3 -3
- package/dist/{chunk-AUW5RP24.js → chunk-JIV4YHCZ.js} +7 -6
- package/dist/{chunk-M6KM3FJS.js → chunk-JYAR7D5U.js} +2 -2
- package/dist/{chunk-DKPNFEVU.js → chunk-KO6OEY3G.js} +19 -6
- package/dist/{chunk-JHHMFL5D.js → chunk-LFEJLOFN.js} +28 -16
- package/dist/chunk-MMIGOPO5.js +111 -0
- package/dist/{chunk-YSSNP6JM.js → chunk-N25YP7ID.js} +6 -21
- package/dist/{chunk-F2W2FWOT.js → chunk-N5RKM6IC.js} +7 -7
- package/dist/{chunk-C4HYWZML.js → chunk-O4IISNE7.js} +1 -1
- package/dist/chunk-Q4SWUINA.js +51 -0
- package/dist/{chunk-TUOG7EEI.js → chunk-RNOUXUBO.js} +418 -22
- package/dist/{chunk-4VZI3PLI.js → chunk-RYHEV5E3.js} +15 -39
- package/dist/{chunk-AVRNQOB5.js → chunk-SAPBDJJQ.js} +14 -13
- package/dist/{chunk-OPJ4DYNI.js → chunk-SJ3737RA.js} +156 -158
- package/dist/{chunk-UMANGYRD.js → chunk-TFGNKFL2.js} +1 -1
- package/dist/{chunk-KYGSMUUU.js → chunk-VY7MVBSE.js} +2 -2
- package/dist/{chunk-VDBUXYEB.js → chunk-WOYMEEPH.js} +8 -8
- package/dist/{chunk-I5Z2RVDF.js → chunk-WSLT32Q4.js} +278 -30
- package/dist/{chunk-NYUHSMUU.js → chunk-XGFDY43I.js} +2 -2
- package/dist/{chunk-ODKZF4IT.js → chunk-YOZN35HD.js} +17 -9
- package/dist/{chunk-EKP6Z3G6.js → chunk-YVTV4ZV6.js} +1 -1
- package/dist/{chunk-6BCWFPNJ.js → chunk-YWUDBLO6.js} +2 -2
- package/dist/chunk-Z4PYMTTS.js +41 -0
- package/dist/{chunk-WXIQLWIX.js → chunk-ZFNFPXPR.js} +2 -2
- package/dist/{chunk-7GOWOSX6.js → chunk-ZORQPB6B.js} +11 -5
- package/dist/index.d.ts +1096 -941
- package/dist/index.js +369 -610
- package/dist/meta.d.ts +13 -12
- package/dist/meta.js +84 -16
- package/dist/rich/ExcelUploadCard.d.ts +7 -0
- package/dist/rich/ExcelUploadCard.js +17 -13
- package/dist/rich.d.ts +1 -1
- package/dist/rich.js +25 -12
- package/dist/styles.css +10 -2
- package/dist/{types-D14eqLpf.d.ts → types-C7y9CpgF.d.ts} +7 -5
- package/dist/widgets/ApprovalLineEditor.js +7 -6
- package/dist/widgets/ApprovalOverridesEditor.d.ts +11 -1
- package/dist/widgets/ApprovalOverridesEditor.js +9 -8
- package/dist/widgets/ApprovalStepper.js +3 -3
- package/dist/widgets/AutocompleteField.d.ts +1 -0
- package/dist/widgets/AutocompleteField.js +7 -6
- package/dist/widgets/ColumnBoard.js +3 -3
- package/dist/widgets/DiffView.js +3 -3
- package/dist/widgets/Disclosure.js +3 -3
- package/dist/widgets/EventCalendar.d.ts +16 -1
- package/dist/widgets/EventCalendar.js +3 -3
- package/dist/widgets/FileDropzone.js +7 -6
- package/dist/widgets/ImageLightbox.js +5 -4
- package/dist/widgets/InlineEdit.js +3 -3
- package/dist/widgets/JsonField.js +3 -3
- package/dist/widgets/LiveClock.js +2 -2
- package/dist/widgets/OptionSchemaEditor.js +4 -4
- package/dist/widgets/OptionValueFields.d.ts +5 -0
- package/dist/widgets/OptionValueFields.js +4 -4
- package/dist/widgets/OrgChart.js +4 -3
- package/dist/widgets/OrgChartBoard.d.ts +93 -4
- package/dist/widgets/OrgChartBoard.js +9 -6
- package/dist/widgets/PeriodFilter.js +4 -4
- package/dist/widgets/PermissionMatrixEditor.d.ts +16 -0
- package/dist/widgets/PermissionMatrixEditor.js +4 -4
- package/dist/widgets/PositionSelect.d.ts +6 -1
- package/dist/widgets/PositionSelect.js +5 -4
- package/dist/widgets/PrintSheet.js +3 -3
- package/dist/widgets/ProfileEditDiffCard.d.ts +6 -0
- package/dist/widgets/ProfileEditDiffCard.js +4 -4
- package/dist/widgets/QRDisplay.js +4 -4
- package/dist/widgets/RankBoard.d.ts +6 -0
- package/dist/widgets/RankBoard.js +6 -5
- package/dist/widgets/RecordSheet.js +2 -2
- package/dist/widgets/RoleMemberPicker.d.ts +11 -5
- package/dist/widgets/RoleMemberPicker.js +5 -4
- package/dist/widgets/SearchableMultiPicker.js +5 -5
- package/dist/widgets/SecureScreen.d.ts +12 -0
- package/dist/widgets/SecureScreen.js +3 -3
- package/dist/widgets/StackedMeter.js +2 -2
- package/dist/widgets/StagePeriodEditor.js +4 -5
- package/dist/widgets/Strip.js +2 -2
- package/dist/widgets/SummaryTable.js +2 -2
- package/dist/widgets/TagMultiSelect.d.ts +0 -1
- package/dist/widgets/TagMultiSelect.js +4 -4
- package/dist/widgets/Timeline.js +4 -4
- package/dist/widgets/TreePicker.js +6 -6
- package/dist/widgets/TreeView.js +5 -5
- package/dist/widgets/index.d.ts +3 -3
- package/dist/widgets/index.js +81 -79
- package/package.json +1 -1
- package/dist/chunk-EKVA7T7P.js +0 -198
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { useRef, useState, useEffect, useCallback } from 'react';
|
|
2
|
+
|
|
3
|
+
// src/widgets/usePanZoomCanvas.ts
|
|
4
|
+
var MIN_ZOOM = 0.35;
|
|
5
|
+
var MAX_ZOOM = 1.8;
|
|
6
|
+
var clamp = (value, min, max) => Math.min(max, Math.max(min, value));
|
|
7
|
+
function applyZoom(current, nextScale, focal) {
|
|
8
|
+
const scale = clamp(nextScale, MIN_ZOOM, MAX_ZOOM);
|
|
9
|
+
return {
|
|
10
|
+
scale,
|
|
11
|
+
x: focal.x - (focal.x - current.x) / current.scale * scale,
|
|
12
|
+
y: focal.y - (focal.y - current.y) / current.scale * scale
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function usePanZoomCanvas(options) {
|
|
16
|
+
const { stopSelector, initialView } = options;
|
|
17
|
+
const viewportRef = useRef(null);
|
|
18
|
+
const dragRef = useRef(null);
|
|
19
|
+
const [view, setView] = useState(initialView);
|
|
20
|
+
const [dragging, setDragging] = useState(false);
|
|
21
|
+
const [isFullscreen, setIsFullscreen] = useState(false);
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
const handleFullscreenChange = () => {
|
|
24
|
+
setIsFullscreen(document.fullscreenElement === viewportRef.current);
|
|
25
|
+
};
|
|
26
|
+
document.addEventListener("fullscreenchange", handleFullscreenChange);
|
|
27
|
+
return () => document.removeEventListener("fullscreenchange", handleFullscreenChange);
|
|
28
|
+
}, []);
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
const viewport = viewportRef.current;
|
|
31
|
+
if (!viewport) return;
|
|
32
|
+
const onWheel = (event) => {
|
|
33
|
+
event.preventDefault();
|
|
34
|
+
const rect = viewport.getBoundingClientRect();
|
|
35
|
+
const focal = { x: event.clientX - rect.left, y: event.clientY - rect.top };
|
|
36
|
+
setView(
|
|
37
|
+
(current) => applyZoom(current, current.scale * (event.deltaY > 0 ? 0.9 : 1.1), focal)
|
|
38
|
+
);
|
|
39
|
+
};
|
|
40
|
+
viewport.addEventListener("wheel", onWheel, { passive: false });
|
|
41
|
+
return () => viewport.removeEventListener("wheel", onWheel);
|
|
42
|
+
}, []);
|
|
43
|
+
const viewportCenter = useCallback(() => {
|
|
44
|
+
const rect = viewportRef.current?.getBoundingClientRect();
|
|
45
|
+
if (!rect) return { x: 0, y: 0 };
|
|
46
|
+
return { x: rect.width / 2, y: rect.height / 2 };
|
|
47
|
+
}, []);
|
|
48
|
+
const zoomAt = useCallback((nextScale, focal) => {
|
|
49
|
+
setView((current) => applyZoom(current, nextScale, focal));
|
|
50
|
+
}, []);
|
|
51
|
+
const handlePointerDown = (event) => {
|
|
52
|
+
if (event.target.closest(stopSelector)) return;
|
|
53
|
+
dragRef.current = {
|
|
54
|
+
pointerId: event.pointerId,
|
|
55
|
+
startX: event.clientX,
|
|
56
|
+
startY: event.clientY,
|
|
57
|
+
originX: view.x,
|
|
58
|
+
originY: view.y
|
|
59
|
+
};
|
|
60
|
+
setDragging(true);
|
|
61
|
+
event.currentTarget.setPointerCapture(event.pointerId);
|
|
62
|
+
};
|
|
63
|
+
const handlePointerMove = (event) => {
|
|
64
|
+
const drag = dragRef.current;
|
|
65
|
+
if (!drag || drag.pointerId !== event.pointerId) return;
|
|
66
|
+
setView((current) => ({
|
|
67
|
+
...current,
|
|
68
|
+
x: drag.originX + event.clientX - drag.startX,
|
|
69
|
+
y: drag.originY + event.clientY - drag.startY
|
|
70
|
+
}));
|
|
71
|
+
};
|
|
72
|
+
const handlePointerUp = (event) => {
|
|
73
|
+
if (dragRef.current?.pointerId !== event.pointerId) return;
|
|
74
|
+
dragRef.current = null;
|
|
75
|
+
setDragging(false);
|
|
76
|
+
if (event.currentTarget.hasPointerCapture(event.pointerId)) {
|
|
77
|
+
event.currentTarget.releasePointerCapture(event.pointerId);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
const toggleFullscreen = async () => {
|
|
81
|
+
const viewport = viewportRef.current;
|
|
82
|
+
if (!viewport) return;
|
|
83
|
+
try {
|
|
84
|
+
if (document.fullscreenElement === viewport) {
|
|
85
|
+
await document.exitFullscreen();
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
await viewport.requestFullscreen();
|
|
89
|
+
} catch {
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
return {
|
|
93
|
+
viewportRef,
|
|
94
|
+
view,
|
|
95
|
+
setView,
|
|
96
|
+
dragging,
|
|
97
|
+
isFullscreen,
|
|
98
|
+
viewportCenter,
|
|
99
|
+
zoomAt,
|
|
100
|
+
toggleFullscreen,
|
|
101
|
+
/** 뷰포트 div에 그대로 spread — 패닝 4종 핸들러. */
|
|
102
|
+
pointerHandlers: {
|
|
103
|
+
onPointerDown: handlePointerDown,
|
|
104
|
+
onPointerMove: handlePointerMove,
|
|
105
|
+
onPointerUp: handlePointerUp,
|
|
106
|
+
onPointerCancel: handlePointerUp
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export { MAX_ZOOM, MIN_ZOOM, usePanZoomCanvas };
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { ellipsisStyle, unwrapRows } from './chunk-Q4SWUINA.js';
|
|
2
|
+
import { includesLooseSearch } from './chunk-WOYMEEPH.js';
|
|
3
|
+
import { useSduiAdapter, hostFetchOf } from './chunk-KO6OEY3G.js';
|
|
4
|
+
import { Icon, Button, Input, Spinner } from './chunk-RNOUXUBO.js';
|
|
5
|
+
import { boxed } from './chunk-5WW4MBRO.js';
|
|
5
6
|
import { useId, useRef, useMemo, useState, useEffect } from 'react';
|
|
6
7
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
7
8
|
|
|
@@ -19,18 +20,8 @@ function endpointSearchFn(endpoint, searchParam, hostFetch) {
|
|
|
19
20
|
}
|
|
20
21
|
};
|
|
21
22
|
}
|
|
22
|
-
function isRecord(value) {
|
|
23
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
24
|
-
}
|
|
25
23
|
function toAutocompleteOptions(payload) {
|
|
26
|
-
|
|
27
|
-
if (isRecord(payload)) {
|
|
28
|
-
for (const key of ["items", "data", "results", "rows"]) {
|
|
29
|
-
const inner = payload[key];
|
|
30
|
-
if (Array.isArray(inner)) return inner.filter(isRecord);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
return [];
|
|
24
|
+
return unwrapRows(payload);
|
|
34
25
|
}
|
|
35
26
|
function pickText(option, key) {
|
|
36
27
|
if (!key) return "";
|
|
@@ -38,12 +29,6 @@ function pickText(option, key) {
|
|
|
38
29
|
if (raw === null || raw === void 0) return "";
|
|
39
30
|
return String(raw);
|
|
40
31
|
}
|
|
41
|
-
var ellipsisStyle = {
|
|
42
|
-
display: "block",
|
|
43
|
-
overflow: "hidden",
|
|
44
|
-
textOverflow: "ellipsis",
|
|
45
|
-
whiteSpace: "nowrap"
|
|
46
|
-
};
|
|
47
32
|
var statusRowStyle = {
|
|
48
33
|
padding: "var(--wp-space-2) var(--wp-space-3)"
|
|
49
34
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { ImageLightbox } from './chunk-
|
|
2
|
-
import { useSduiSandbox, useSduiAdapter, hostRawFetchOf, defaultAdapter, useSduiAssetResolver } from './chunk-
|
|
3
|
-
import { Spinner, Icon, IconButton } from './chunk-
|
|
4
|
-
import { boxed } from './chunk-
|
|
1
|
+
import { ImageLightbox } from './chunk-VY7MVBSE.js';
|
|
2
|
+
import { useSduiSandbox, useSduiAdapter, hostRawFetchOf, defaultAdapter, useSduiAssetResolver } from './chunk-KO6OEY3G.js';
|
|
3
|
+
import { Spinner, Icon, IconButton } from './chunk-RNOUXUBO.js';
|
|
4
|
+
import { boxed } from './chunk-5WW4MBRO.js';
|
|
5
5
|
import { useState, useRef, useEffect, useCallback } from 'react';
|
|
6
6
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
7
7
|
|
|
@@ -58,7 +58,7 @@ function FileDropzoneImpl({
|
|
|
58
58
|
const [busy, setBusy] = useState(false);
|
|
59
59
|
const [progress, setProgress] = useState(null);
|
|
60
60
|
const [warnings, setWarnings] = useState([]);
|
|
61
|
-
const [localMode, setLocalMode] = useState(!endpoint);
|
|
61
|
+
const [localMode, setLocalMode] = useState(!endpoint && !upload);
|
|
62
62
|
const [dragOver, setDragOver] = useState(false);
|
|
63
63
|
const [hovering, setHovering] = useState(false);
|
|
64
64
|
const [hoverItemId, setHoverItemId] = useState(null);
|
|
@@ -84,7 +84,7 @@ function FileDropzoneImpl({
|
|
|
84
84
|
setBusy(true);
|
|
85
85
|
onBusyChange?.(true);
|
|
86
86
|
const failures = [];
|
|
87
|
-
let local = localMode || !endpoint || sandbox || !canUpload;
|
|
87
|
+
let local = localMode || !endpoint && !upload || sandbox || !canUpload;
|
|
88
88
|
try {
|
|
89
89
|
for (let index = 0; index < queue.length; index += 1) {
|
|
90
90
|
const file = queue[index];
|
|
@@ -201,7 +201,7 @@ function FileDropzoneImpl({
|
|
|
201
201
|
}
|
|
202
202
|
forget();
|
|
203
203
|
},
|
|
204
|
-
[commit, deleteEndpoint, onRemove]
|
|
204
|
+
[commit, deleteEndpoint, onRemove, rawFetch]
|
|
205
205
|
);
|
|
206
206
|
const openPicker = () => {
|
|
207
207
|
if (canAdd) inputRef.current?.click();
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { isPlainObject } from './chunk-RNOUXUBO.js';
|
|
2
|
+
|
|
3
|
+
// src/widgets/shared.ts
|
|
4
|
+
function unwrapRows(payload) {
|
|
5
|
+
if (Array.isArray(payload)) return payload.filter(isPlainObject);
|
|
6
|
+
if (isPlainObject(payload)) {
|
|
7
|
+
for (const key of ["items", "data", "results", "rows"]) {
|
|
8
|
+
const inner = payload[key];
|
|
9
|
+
if (Array.isArray(inner)) return inner.filter(isPlainObject);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
var PAGE_SIZE = 500;
|
|
15
|
+
var MAX_PAGES = 20;
|
|
16
|
+
async function fetchAllPages(api, endpoint, pick) {
|
|
17
|
+
const all = [];
|
|
18
|
+
const sep = endpoint.includes("?") ? "&" : "?";
|
|
19
|
+
for (let page = 0; page < MAX_PAGES; page += 1) {
|
|
20
|
+
const body = await api(`${endpoint}${sep}limit=${PAGE_SIZE}&offset=${page * PAGE_SIZE}`, {
|
|
21
|
+
method: "GET"
|
|
22
|
+
});
|
|
23
|
+
const rows = pick(body ?? {});
|
|
24
|
+
all.push(...rows);
|
|
25
|
+
const total = typeof body?.total === "number" ? body.total : null;
|
|
26
|
+
if (rows.length === 0) break;
|
|
27
|
+
if (total !== null ? all.length >= total : rows.length < PAGE_SIZE) break;
|
|
28
|
+
}
|
|
29
|
+
return all;
|
|
30
|
+
}
|
|
31
|
+
var uidCounter = 0;
|
|
32
|
+
var uid = (prefix) => `${prefix}-${Date.now()}-${++uidCounter}`;
|
|
33
|
+
var orderCircleStyle = {
|
|
34
|
+
display: "inline-flex",
|
|
35
|
+
alignItems: "center",
|
|
36
|
+
justifyContent: "center",
|
|
37
|
+
width: 28,
|
|
38
|
+
height: 28,
|
|
39
|
+
flex: "none",
|
|
40
|
+
borderRadius: "var(--wp-radius-pill)",
|
|
41
|
+
background: "var(--wp-surface-brand-tint)",
|
|
42
|
+
color: "var(--wp-text-brand)"
|
|
43
|
+
};
|
|
44
|
+
var ellipsisStyle = {
|
|
45
|
+
display: "block",
|
|
46
|
+
overflow: "hidden",
|
|
47
|
+
textOverflow: "ellipsis",
|
|
48
|
+
whiteSpace: "nowrap"
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
export { ellipsisStyle, fetchAllPages, orderCircleStyle, uid, unwrapRows };
|