@startdownnotez404/ui 1.3.5 → 1.3.6
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/AutocompleteField-653233JU.mjs +203 -0
- package/dist/AutocompleteField-653233JU.mjs.map +1 -0
- package/dist/AvatarField-KFASMVZU.mjs +378 -0
- package/dist/AvatarField-KFASMVZU.mjs.map +1 -0
- package/dist/{DateField-ZYMZFHL4.mjs → DateField-CDJ6W6XF.mjs} +19 -7
- package/dist/DateField-CDJ6W6XF.mjs.map +1 -0
- package/dist/DateRangeField-ZWSFT5KV.mjs +118 -0
- package/dist/DateRangeField-ZWSFT5KV.mjs.map +1 -0
- package/dist/{DateTimeField-TPTJ7YIZ.mjs → DateTimeField-SFAF4I6A.mjs} +36 -11
- package/dist/DateTimeField-SFAF4I6A.mjs.map +1 -0
- package/dist/FileUploadField-TSNCSLXX.mjs +101 -0
- package/dist/FileUploadField-TSNCSLXX.mjs.map +1 -0
- package/dist/{JSONEditorField-TMRWGXVR.mjs → JSONEditorField-3KXC2GOG.mjs} +7 -6
- package/dist/{JSONEditorField-TMRWGXVR.mjs.map → JSONEditorField-3KXC2GOG.mjs.map} +1 -1
- package/dist/{PopperMenu-LJ36RPBW.mjs → PopperMenu-PSHLKIEZ.mjs} +26 -12
- package/dist/{PopperMenu-LJ36RPBW.mjs.map → PopperMenu-PSHLKIEZ.mjs.map} +1 -1
- package/dist/{TelField-LOGRVZ4I.mjs → TelField-FRQT2UBJ.mjs} +8 -7
- package/dist/{TelField-LOGRVZ4I.mjs.map → TelField-FRQT2UBJ.mjs.map} +1 -1
- package/dist/TimeField-XVWXBJID.mjs +94 -0
- package/dist/TimeField-XVWXBJID.mjs.map +1 -0
- package/dist/alert.d.mts +148 -18
- package/dist/alert.d.ts +148 -18
- package/dist/alert.js +698 -254
- package/dist/alert.js.map +1 -1
- package/dist/alert.mjs +46 -10
- package/dist/autocomplete.d.mts +438 -4
- package/dist/autocomplete.d.ts +438 -4
- package/dist/autocomplete.js +632 -21
- package/dist/autocomplete.js.map +1 -1
- package/dist/autocomplete.mjs +26 -7
- package/dist/avatar.js +2 -1
- package/dist/avatar.js.map +1 -1
- package/dist/avatar.mjs +12 -11
- package/dist/box.mjs +2 -1
- package/dist/button.mjs +3 -2
- package/dist/chart.mjs +3 -2
- package/dist/checkbox.mjs +3 -2
- package/dist/chunk-2FK24ZPJ.mjs +78 -0
- package/dist/chunk-2FK24ZPJ.mjs.map +1 -0
- package/dist/{chunk-V26V2S3W.mjs → chunk-3O3N6X6D.mjs} +3 -3
- package/dist/{chunk-Y74ALKBL.mjs → chunk-4MSPA7U7.mjs} +11 -9
- package/dist/{chunk-Y74ALKBL.mjs.map → chunk-4MSPA7U7.mjs.map} +1 -1
- package/dist/{chunk-24XDGNJ6.mjs → chunk-4P45Z5LR.mjs} +63 -41
- package/dist/chunk-4P45Z5LR.mjs.map +1 -0
- package/dist/chunk-4SSJY32J.mjs +1182 -0
- package/dist/chunk-4SSJY32J.mjs.map +1 -0
- package/dist/{chunk-XJ2SXC2Q.mjs → chunk-6B6I27TT.mjs} +18 -16
- package/dist/{chunk-XJ2SXC2Q.mjs.map → chunk-6B6I27TT.mjs.map} +1 -1
- package/dist/chunk-6JKMEH2L.mjs +205 -0
- package/dist/chunk-6JKMEH2L.mjs.map +1 -0
- package/dist/{chunk-IN3O4R7Q.mjs → chunk-7O526A2D.mjs} +6 -4
- package/dist/{chunk-IN3O4R7Q.mjs.map → chunk-7O526A2D.mjs.map} +1 -1
- package/dist/chunk-AFLEG5ZC.mjs +28 -0
- package/dist/chunk-AFLEG5ZC.mjs.map +1 -0
- package/dist/{chunk-UGMRJMFZ.mjs → chunk-BO5CU4ZM.mjs} +4 -4
- package/dist/{chunk-JIU5GVM7.mjs → chunk-D4XPNSSI.mjs} +5 -3
- package/dist/{chunk-JIU5GVM7.mjs.map → chunk-D4XPNSSI.mjs.map} +1 -1
- package/dist/chunk-DPIMA5IO.mjs +72 -0
- package/dist/chunk-DPIMA5IO.mjs.map +1 -0
- package/dist/chunk-F2CGFVIZ.mjs +83 -0
- package/dist/chunk-F2CGFVIZ.mjs.map +1 -0
- package/dist/{chunk-R5MKQN6D.mjs → chunk-FBLSJQWK.mjs} +3 -3
- package/dist/{chunk-BGB7JHIU.mjs → chunk-FMGZCOJC.mjs} +5 -3
- package/dist/{chunk-BGB7JHIU.mjs.map → chunk-FMGZCOJC.mjs.map} +1 -1
- package/dist/{chunk-UTVSYS6S.mjs → chunk-FNSIQ2B7.mjs} +18 -6
- package/dist/chunk-FNSIQ2B7.mjs.map +1 -0
- package/dist/{chunk-JWANK42G.mjs → chunk-FUZ2JNTZ.mjs} +3 -3
- package/dist/{chunk-CRYIEYZZ.mjs → chunk-HAJWE62X.mjs} +66 -42
- package/dist/chunk-HAJWE62X.mjs.map +1 -0
- package/dist/{chunk-CWFWRZWU.mjs → chunk-KSN33A6I.mjs} +3 -2
- package/dist/{chunk-CWFWRZWU.mjs.map → chunk-KSN33A6I.mjs.map} +1 -1
- package/dist/chunk-KYTHGFFY.mjs +866 -0
- package/dist/chunk-KYTHGFFY.mjs.map +1 -0
- package/dist/{chunk-QKGCW37O.mjs → chunk-LDFM46LV.mjs} +5 -3
- package/dist/{chunk-QKGCW37O.mjs.map → chunk-LDFM46LV.mjs.map} +1 -1
- package/dist/chunk-LQNDBPHU.mjs +142 -0
- package/dist/chunk-LQNDBPHU.mjs.map +1 -0
- package/dist/{chunk-E3I2VDHZ.mjs → chunk-M2PYXSAF.mjs} +6 -4
- package/dist/{chunk-E3I2VDHZ.mjs.map → chunk-M2PYXSAF.mjs.map} +1 -1
- package/dist/{chunk-DELCADNF.mjs → chunk-ODVKRIVN.mjs} +30 -30
- package/dist/{chunk-HR3A4H4E.mjs → chunk-PEJL2T2K.mjs} +13 -11
- package/dist/{chunk-HR3A4H4E.mjs.map → chunk-PEJL2T2K.mjs.map} +1 -1
- package/dist/{chunk-OGNGPI3M.mjs → chunk-PL55YKT4.mjs} +2 -2
- package/dist/{chunk-S6EZVRZC.mjs → chunk-PNSJC6PC.mjs} +5 -28
- package/dist/chunk-PNSJC6PC.mjs.map +1 -0
- package/dist/{chunk-TDRA5EZI.mjs → chunk-PUREEN2J.mjs} +7 -7
- package/dist/chunk-QFS5CENY.mjs +659 -0
- package/dist/chunk-QFS5CENY.mjs.map +1 -0
- package/dist/chunk-RSN7NH2J.mjs +250 -0
- package/dist/chunk-RSN7NH2J.mjs.map +1 -0
- package/dist/{chunk-UDREPVEY.mjs → chunk-RVSMEZE3.mjs} +12 -78
- package/dist/chunk-RVSMEZE3.mjs.map +1 -0
- package/dist/{chunk-SRWPHN2N.mjs → chunk-S64IYJ6Y.mjs} +2 -2
- package/dist/{chunk-ZG3NQI77.mjs → chunk-SMD7OEUW.mjs} +6 -4
- package/dist/{chunk-ZG3NQI77.mjs.map → chunk-SMD7OEUW.mjs.map} +1 -1
- package/dist/{chunk-NJYNJLT7.mjs → chunk-SWFB3A3G.mjs} +2 -2
- package/dist/{chunk-RXBQ7KXF.mjs → chunk-USXGNKWJ.mjs} +98 -44
- package/dist/chunk-USXGNKWJ.mjs.map +1 -0
- package/dist/{chunk-OJV6V7YZ.mjs → chunk-VL7V52YD.mjs} +27 -20
- package/dist/chunk-VL7V52YD.mjs.map +1 -0
- package/dist/{chunk-2ZZJTBTE.mjs → chunk-WJZ3IYET.mjs} +2 -2
- package/dist/chunk-XAJAMVAG.mjs +1720 -0
- package/dist/chunk-XAJAMVAG.mjs.map +1 -0
- package/dist/chunk-YIJ5QVJ6.mjs +277 -0
- package/dist/chunk-YIJ5QVJ6.mjs.map +1 -0
- package/dist/{chunk-T6AMRENK.mjs → chunk-YRW5NKD7.mjs} +148 -112
- package/dist/chunk-YRW5NKD7.mjs.map +1 -0
- package/dist/chunk-ZMJKG2UI.mjs +71 -0
- package/dist/chunk-ZMJKG2UI.mjs.map +1 -0
- package/dist/confirm.d.mts +48 -0
- package/dist/confirm.d.ts +48 -0
- package/dist/confirm.js +334 -0
- package/dist/confirm.js.map +1 -0
- package/dist/confirm.mjs +20 -0
- package/dist/datePicker.d.mts +256 -14
- package/dist/datePicker.d.ts +256 -14
- package/dist/datePicker.js +1624 -145
- package/dist/datePicker.js.map +1 -1
- package/dist/datePicker.mjs +19 -6
- package/dist/dialog.d.mts +166 -0
- package/dist/dialog.d.ts +166 -0
- package/dist/dialog.js +362 -0
- package/dist/dialog.js.map +1 -0
- package/dist/dialog.mjs +45 -0
- package/dist/emptyState.d.mts +17 -0
- package/dist/emptyState.d.ts +17 -0
- package/dist/emptyState.js +253 -0
- package/dist/emptyState.js.map +1 -0
- package/dist/emptyState.mjs +12 -0
- package/dist/emptyState.mjs.map +1 -0
- package/dist/errorState.d.mts +18 -0
- package/dist/errorState.d.ts +18 -0
- package/dist/{displayFile.js → errorState.js} +107 -156
- package/dist/errorState.js.map +1 -0
- package/dist/errorState.mjs +15 -0
- package/dist/errorState.mjs.map +1 -0
- package/dist/fileUpload.d.mts +197 -0
- package/dist/fileUpload.d.ts +197 -0
- package/dist/fileUpload.js +1483 -0
- package/dist/fileUpload.js.map +1 -0
- package/dist/fileUpload.mjs +65 -0
- package/dist/fileUpload.mjs.map +1 -0
- package/dist/flowMap.mjs +7 -6
- package/dist/flowMap.mjs.map +1 -1
- package/dist/image.js +1195 -429
- package/dist/image.js.map +1 -1
- package/dist/image.mjs +8 -6
- package/dist/index.d.ts +7 -2
- package/dist/index.js +8606 -4087
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +314 -152
- package/dist/inlineError.d.mts +16 -0
- package/dist/inlineError.d.ts +16 -0
- package/dist/inlineError.js +297 -0
- package/dist/inlineError.js.map +1 -0
- package/dist/inlineError.mjs +15 -0
- package/dist/inlineError.mjs.map +1 -0
- package/dist/input.mjs +8 -7
- package/dist/jsonEditor.mjs +3 -2
- package/dist/list.mjs +7 -6
- package/dist/loading.mjs +8 -6
- package/dist/markdown.mjs +7 -6
- package/dist/markdown.mjs.map +1 -1
- package/dist/menu.mjs +9 -8
- package/dist/modal.js +2 -1
- package/dist/modal.js.map +1 -1
- package/dist/modal.mjs +7 -5
- package/dist/process.d.mts +33 -75
- package/dist/process.d.ts +33 -75
- package/dist/process.js +1275 -203
- package/dist/process.js.map +1 -1
- package/dist/process.mjs +12 -9
- package/dist/scrollToLoad.mjs +4 -3
- package/dist/select.mjs +10 -9
- package/dist/skeleton.d.mts +15 -1
- package/dist/skeleton.d.ts +15 -1
- package/dist/skeleton.js +114 -2
- package/dist/skeleton.js.map +1 -1
- package/dist/skeleton.mjs +6 -3
- package/dist/stepper.mjs +4 -3
- package/dist/tab.mjs +10 -9
- package/dist/table.d.mts +269 -85
- package/dist/table.d.ts +269 -85
- package/dist/table.js +5102 -3153
- package/dist/table.js.map +1 -1
- package/dist/table.mjs +21 -19
- package/dist/theme.js +1766 -432
- package/dist/theme.js.map +1 -1
- package/dist/theme.mjs +32 -25
- package/dist/timeline.mjs +4 -3
- package/dist/toast.d.mts +49 -0
- package/dist/toast.d.ts +49 -0
- package/dist/toast.js +175 -0
- package/dist/toast.js.map +1 -0
- package/dist/toast.mjs +9 -0
- package/dist/toast.mjs.map +1 -0
- package/dist/toggleButtonGroup.mjs +3 -2
- package/dist/useForm.d.mts +270 -86
- package/dist/useForm.d.ts +270 -86
- package/dist/useForm.js +4672 -2727
- package/dist/useForm.js.map +1 -1
- package/dist/useForm.mjs +18 -16
- package/dist/useSearch.mjs +13 -12
- package/dist/variablesRenderer.mjs +8 -7
- package/package.json +3 -3
- package/dist/AutocompleteField-ZKNU2IRR.mjs +0 -181
- package/dist/AutocompleteField-ZKNU2IRR.mjs.map +0 -1
- package/dist/AvatarField-SAODT3CZ.mjs +0 -275
- package/dist/AvatarField-SAODT3CZ.mjs.map +0 -1
- package/dist/DateField-ZYMZFHL4.mjs.map +0 -1
- package/dist/DateTimeField-TPTJ7YIZ.mjs.map +0 -1
- package/dist/FileUploadField-NTMWBJER.mjs +0 -78
- package/dist/FileUploadField-NTMWBJER.mjs.map +0 -1
- package/dist/chunk-24XDGNJ6.mjs.map +0 -1
- package/dist/chunk-27KYFU7R.mjs +0 -30
- package/dist/chunk-27KYFU7R.mjs.map +0 -1
- package/dist/chunk-AAH2O24U.mjs +0 -325
- package/dist/chunk-AAH2O24U.mjs.map +0 -1
- package/dist/chunk-CRYIEYZZ.mjs.map +0 -1
- package/dist/chunk-EEH7HACG.mjs +0 -249
- package/dist/chunk-EEH7HACG.mjs.map +0 -1
- package/dist/chunk-EKPULYPU.mjs +0 -497
- package/dist/chunk-EKPULYPU.mjs.map +0 -1
- package/dist/chunk-OJV6V7YZ.mjs.map +0 -1
- package/dist/chunk-RXBQ7KXF.mjs.map +0 -1
- package/dist/chunk-S6EZVRZC.mjs.map +0 -1
- package/dist/chunk-SGCUDWO3.mjs +0 -396
- package/dist/chunk-SGCUDWO3.mjs.map +0 -1
- package/dist/chunk-T6AMRENK.mjs.map +0 -1
- package/dist/chunk-UDREPVEY.mjs.map +0 -1
- package/dist/chunk-UTVSYS6S.mjs.map +0 -1
- package/dist/chunk-XIMFP6RB.mjs +0 -161
- package/dist/chunk-XIMFP6RB.mjs.map +0 -1
- package/dist/displayFile.d.mts +0 -95
- package/dist/displayFile.d.ts +0 -95
- package/dist/displayFile.js.map +0 -1
- package/dist/displayFile.mjs +0 -19
- package/dist/fileUploader.d.mts +0 -86
- package/dist/fileUploader.d.ts +0 -86
- package/dist/fileUploader.js +0 -722
- package/dist/fileUploader.js.map +0 -1
- package/dist/fileUploader.mjs +0 -16
- /package/dist/{chunk-V26V2S3W.mjs.map → chunk-3O3N6X6D.mjs.map} +0 -0
- /package/dist/{chunk-UGMRJMFZ.mjs.map → chunk-BO5CU4ZM.mjs.map} +0 -0
- /package/dist/{chunk-R5MKQN6D.mjs.map → chunk-FBLSJQWK.mjs.map} +0 -0
- /package/dist/{chunk-JWANK42G.mjs.map → chunk-FUZ2JNTZ.mjs.map} +0 -0
- /package/dist/{chunk-DELCADNF.mjs.map → chunk-ODVKRIVN.mjs.map} +0 -0
- /package/dist/{chunk-OGNGPI3M.mjs.map → chunk-PL55YKT4.mjs.map} +0 -0
- /package/dist/{chunk-TDRA5EZI.mjs.map → chunk-PUREEN2J.mjs.map} +0 -0
- /package/dist/{chunk-SRWPHN2N.mjs.map → chunk-S64IYJ6Y.mjs.map} +0 -0
- /package/dist/{chunk-NJYNJLT7.mjs.map → chunk-SWFB3A3G.mjs.map} +0 -0
- /package/dist/{chunk-2ZZJTBTE.mjs.map → chunk-WJZ3IYET.mjs.map} +0 -0
- /package/dist/{displayFile.mjs.map → confirm.mjs.map} +0 -0
- /package/dist/{fileUploader.mjs.map → dialog.mjs.map} +0 -0
|
@@ -1,20 +1,15 @@
|
|
|
1
|
+
import {
|
|
2
|
+
FileUpload
|
|
3
|
+
} from "./chunk-4SSJY32J.mjs";
|
|
1
4
|
import {
|
|
2
5
|
MuiModal
|
|
3
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-RVSMEZE3.mjs";
|
|
4
7
|
import {
|
|
5
|
-
CircularProgress
|
|
6
|
-
LinearProgress
|
|
8
|
+
CircularProgress
|
|
7
9
|
} from "./chunk-WYYP3Y34.mjs";
|
|
8
10
|
import {
|
|
9
11
|
useAlert
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import {
|
|
12
|
-
FileThumbnail
|
|
13
|
-
} from "./chunk-AAH2O24U.mjs";
|
|
14
|
-
import {
|
|
15
|
-
Button,
|
|
16
|
-
IconButton_default
|
|
17
|
-
} from "./chunk-JIU5GVM7.mjs";
|
|
12
|
+
} from "./chunk-YIJ5QVJ6.mjs";
|
|
18
13
|
import {
|
|
19
14
|
default100 as default7,
|
|
20
15
|
default101 as default8,
|
|
@@ -23,49 +18,22 @@ import {
|
|
|
23
18
|
default57 as default5,
|
|
24
19
|
default95 as default6
|
|
25
20
|
} from "./chunk-ZVFYOXDE.mjs";
|
|
21
|
+
import {
|
|
22
|
+
Button,
|
|
23
|
+
IconButton_default
|
|
24
|
+
} from "./chunk-D4XPNSSI.mjs";
|
|
26
25
|
import {
|
|
27
26
|
default as default3
|
|
28
27
|
} from "./chunk-4RPFRNXG.mjs";
|
|
29
28
|
import {
|
|
30
|
-
default as default2
|
|
29
|
+
default as default2
|
|
30
|
+
} from "./chunk-PNSJC6PC.mjs";
|
|
31
|
+
import {
|
|
31
32
|
mergeSx
|
|
32
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-AFLEG5ZC.mjs";
|
|
33
34
|
|
|
34
35
|
// src/components/compound/Process/src/ProcessModal.tsx
|
|
35
|
-
import { useState as useState3, useEffect as useEffect4, useCallback as useCallback2 } from "react";
|
|
36
|
-
|
|
37
|
-
// src/components/compound/Process/src/ProcessItem.tsx
|
|
38
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
39
|
-
var ProcessItem = ({ file, progress }) => {
|
|
40
|
-
const isComplete = progress >= 100;
|
|
41
|
-
return /* @__PURE__ */ jsxs(default2, { sx: { display: "flex", gap: 2, alignItems: "center", mb: 2, p: 1, border: "1px solid", borderColor: "var(--process-item-border)", borderRadius: 1 }, children: [
|
|
42
|
-
/* @__PURE__ */ jsx(FileThumbnail, { file, size: 48 }),
|
|
43
|
-
/* @__PURE__ */ jsxs(default2, { sx: { flex: 1, minWidth: 0 }, children: [
|
|
44
|
-
/* @__PURE__ */ jsxs(default2, { sx: { display: "flex", justifyContent: "space-between", mb: 0.5 }, children: [
|
|
45
|
-
/* @__PURE__ */ jsx(default3, { variant: "body2", noWrap: true, sx: { fontWeight: 500 }, children: file.filename }),
|
|
46
|
-
/* @__PURE__ */ jsx(default3, { variant: "caption", sx: { pl: 0.5, color: "var(--process-item-secondary-color)" }, children: file.displaySize })
|
|
47
|
-
] }),
|
|
48
|
-
/* @__PURE__ */ jsxs(default2, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
|
|
49
|
-
/* @__PURE__ */ jsx(
|
|
50
|
-
LinearProgress,
|
|
51
|
-
{
|
|
52
|
-
variant: "determinate",
|
|
53
|
-
value: progress,
|
|
54
|
-
sx: {
|
|
55
|
-
flex: 1,
|
|
56
|
-
height: 6
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
),
|
|
60
|
-
/* @__PURE__ */ jsxs(default3, { variant: "caption", sx: { minWidth: 35, textAlign: "right", color: "var(--process-item-secondary-color)" }, children: [
|
|
61
|
-
Math.round(progress),
|
|
62
|
-
"%"
|
|
63
|
-
] })
|
|
64
|
-
] })
|
|
65
|
-
] }),
|
|
66
|
-
/* @__PURE__ */ jsx(default2, { sx: { display: "flex", alignItems: "center", width: 24, justifyContent: "center" }, children: isComplete && /* @__PURE__ */ jsx(default5, { color: "success", fontSize: "small" }) })
|
|
67
|
-
] });
|
|
68
|
-
};
|
|
36
|
+
import { useState as useState3, useEffect as useEffect4, useCallback as useCallback2, useMemo as useMemo3 } from "react";
|
|
69
37
|
|
|
70
38
|
// src/components/compound/Process/src/hooks/useProgressTracking.ts
|
|
71
39
|
import { useState, useEffect, useMemo, useCallback } from "react";
|
|
@@ -73,10 +41,10 @@ function useProgressTracking(files, observerRef) {
|
|
|
73
41
|
const [progressMap, setProgressMap] = useState(/* @__PURE__ */ new Map());
|
|
74
42
|
const handleProgress = useCallback((file, progress) => {
|
|
75
43
|
setProgressMap((prev) => {
|
|
76
|
-
if (prev.get(file.
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
return
|
|
44
|
+
if (prev.get(file.id) === progress) return prev;
|
|
45
|
+
const next = new Map(prev);
|
|
46
|
+
next.set(file.id, progress);
|
|
47
|
+
return next;
|
|
80
48
|
});
|
|
81
49
|
}, []);
|
|
82
50
|
useEffect(() => {
|
|
@@ -92,7 +60,7 @@ function useProgressTracking(files, observerRef) {
|
|
|
92
60
|
}, [progressMap, files, observerRef]);
|
|
93
61
|
const allComplete = useMemo(() => {
|
|
94
62
|
if (files.length === 0) return false;
|
|
95
|
-
return files.every((f) => (progressMap.get(f.
|
|
63
|
+
return files.every((f) => (progressMap.get(f.id) || 0) >= 100);
|
|
96
64
|
}, [files, progressMap]);
|
|
97
65
|
return { progressMap, handleProgress, allComplete };
|
|
98
66
|
}
|
|
@@ -102,7 +70,7 @@ import React, { useRef, useEffect as useEffect3, useMemo as useMemo2 } from "rea
|
|
|
102
70
|
|
|
103
71
|
// src/components/compound/Process/src/ProcessAlert.tsx
|
|
104
72
|
import { useEffect as useEffect2, useState as useState2 } from "react";
|
|
105
|
-
import { jsx
|
|
73
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
106
74
|
var ProcessAlertContent = ({
|
|
107
75
|
allComplete,
|
|
108
76
|
fileCount,
|
|
@@ -110,11 +78,11 @@ var ProcessAlertContent = ({
|
|
|
110
78
|
onMaximize,
|
|
111
79
|
minimized
|
|
112
80
|
}) => {
|
|
113
|
-
return /* @__PURE__ */
|
|
114
|
-
/* @__PURE__ */
|
|
115
|
-
/* @__PURE__ */
|
|
116
|
-
/* @__PURE__ */
|
|
117
|
-
!allComplete && /* @__PURE__ */
|
|
81
|
+
return /* @__PURE__ */ jsxs(default2, { sx: { display: "flex", alignItems: "center", gap: 2, minWidth: 280 }, children: [
|
|
82
|
+
/* @__PURE__ */ jsx(default2, { sx: { display: "flex", alignItems: "center", justifyContent: "center" }, children: allComplete ? /* @__PURE__ */ jsx(default5, {}) : /* @__PURE__ */ jsx(CircularProgress, { variant: "determinate", value: totalProgress, size: 24, thickness: 5 }) }),
|
|
83
|
+
/* @__PURE__ */ jsxs(default2, { sx: { flex: 1, minWidth: 0 }, children: [
|
|
84
|
+
/* @__PURE__ */ jsx(default3, { variant: "subtitle2", sx: { fontWeight: 600, lineHeight: 1.2 }, children: allComplete ? "Uploads complete" : "Uploading files..." }),
|
|
85
|
+
!allComplete && /* @__PURE__ */ jsxs(default3, { variant: "caption", display: "block", sx: { opacity: 0.8 }, children: [
|
|
118
86
|
fileCount,
|
|
119
87
|
" item",
|
|
120
88
|
fileCount !== 1 ? "s" : "",
|
|
@@ -123,7 +91,7 @@ var ProcessAlertContent = ({
|
|
|
123
91
|
"%"
|
|
124
92
|
] })
|
|
125
93
|
] }),
|
|
126
|
-
minimized && /* @__PURE__ */
|
|
94
|
+
minimized && /* @__PURE__ */ jsx(IconButton_default, { size: "small", onClick: onMaximize, title: "Maximize", sx: { color: "inherit" }, children: /* @__PURE__ */ jsx(default6, {}) })
|
|
127
95
|
] });
|
|
128
96
|
};
|
|
129
97
|
var ProcessAlertObserver = ({ observer, onMaximize }) => {
|
|
@@ -134,7 +102,7 @@ var ProcessAlertObserver = ({ observer, onMaximize }) => {
|
|
|
134
102
|
});
|
|
135
103
|
}, [observer]);
|
|
136
104
|
const allComplete = state.fileCount > 0 && state.totalProgress >= 100;
|
|
137
|
-
return /* @__PURE__ */
|
|
105
|
+
return /* @__PURE__ */ jsx(
|
|
138
106
|
ProcessAlertContent,
|
|
139
107
|
{
|
|
140
108
|
allComplete,
|
|
@@ -232,11 +200,11 @@ function useProcessAlert({
|
|
|
232
200
|
var processModalRootSx = {
|
|
233
201
|
"--process-description-color": "var(--mui-palette-text-secondary)",
|
|
234
202
|
"--process-item-secondary-color": "var(--mui-palette-text-secondary)",
|
|
235
|
-
"--process-item-border": "var(--mui-palette-
|
|
203
|
+
"--process-item-border": "var(--mui-palette-border-1)"
|
|
236
204
|
};
|
|
237
205
|
|
|
238
206
|
// src/components/compound/Process/src/ProcessModal.tsx
|
|
239
|
-
import { Fragment, jsx as
|
|
207
|
+
import { Fragment, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
240
208
|
var useDefaultProgress = () => 0;
|
|
241
209
|
var ProcessLogicRunner = ({
|
|
242
210
|
file,
|
|
@@ -260,7 +228,8 @@ var ProcessModal = ({
|
|
|
260
228
|
onStop,
|
|
261
229
|
minimizable = false,
|
|
262
230
|
minimizePlacement = "bottom-right",
|
|
263
|
-
autoClose = false
|
|
231
|
+
autoClose = false,
|
|
232
|
+
itemVariant = "row"
|
|
264
233
|
}) => {
|
|
265
234
|
const [open, setOpen] = openProps;
|
|
266
235
|
const [minimized, setMinimized] = useState3(false);
|
|
@@ -272,7 +241,22 @@ var ProcessModal = ({
|
|
|
272
241
|
minimizePlacement,
|
|
273
242
|
onMaximize: handleMaximize
|
|
274
243
|
});
|
|
275
|
-
const { progressMap, handleProgress, allComplete } = useProgressTracking(
|
|
244
|
+
const { progressMap, handleProgress, allComplete } = useProgressTracking(
|
|
245
|
+
files,
|
|
246
|
+
observerRef
|
|
247
|
+
);
|
|
248
|
+
const queueValue = useMemo3(
|
|
249
|
+
() => files.map((file) => {
|
|
250
|
+
const progress = progressMap.get(file.id) ?? 0;
|
|
251
|
+
const clamped = Math.max(0, Math.min(100, progress));
|
|
252
|
+
return {
|
|
253
|
+
...file,
|
|
254
|
+
progress: clamped,
|
|
255
|
+
status: clamped >= 100 ? "success" : "uploading"
|
|
256
|
+
};
|
|
257
|
+
}),
|
|
258
|
+
[files, progressMap]
|
|
259
|
+
);
|
|
276
260
|
useEffect4(() => {
|
|
277
261
|
if (autoClose && allComplete && open) {
|
|
278
262
|
const timer = setTimeout(() => {
|
|
@@ -290,8 +274,8 @@ var ProcessModal = ({
|
|
|
290
274
|
setOpen(false);
|
|
291
275
|
};
|
|
292
276
|
if (!open) return null;
|
|
293
|
-
return /* @__PURE__ */
|
|
294
|
-
files.map((file) => /* @__PURE__ */
|
|
277
|
+
return /* @__PURE__ */ jsxs2(Fragment, { children: [
|
|
278
|
+
files.map((file) => /* @__PURE__ */ jsx2(
|
|
295
279
|
ProcessLogicRunner,
|
|
296
280
|
{
|
|
297
281
|
file,
|
|
@@ -299,9 +283,9 @@ var ProcessModal = ({
|
|
|
299
283
|
onProgress: handleProgress,
|
|
300
284
|
paused
|
|
301
285
|
},
|
|
302
|
-
file.
|
|
286
|
+
file.id
|
|
303
287
|
)),
|
|
304
|
-
minimized ? null : /* @__PURE__ */
|
|
288
|
+
minimized ? null : /* @__PURE__ */ jsx2(
|
|
305
289
|
MuiModal,
|
|
306
290
|
{
|
|
307
291
|
openProps,
|
|
@@ -316,61 +300,113 @@ var ProcessModal = ({
|
|
|
316
300
|
title: "Minimize"
|
|
317
301
|
} : void 0
|
|
318
302
|
},
|
|
319
|
-
children: /* @__PURE__ */
|
|
320
|
-
description
|
|
321
|
-
|
|
322
|
-
ProcessItem,
|
|
303
|
+
children: /* @__PURE__ */ jsxs2(default2, { sx: mergeSx({ py: 2 }, processModalRootSx), children: [
|
|
304
|
+
description ? /* @__PURE__ */ jsx2(
|
|
305
|
+
default3,
|
|
323
306
|
{
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
)
|
|
329
|
-
/* @__PURE__ */
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
children: "Stop"
|
|
339
|
-
}
|
|
340
|
-
),
|
|
341
|
-
onPause && /* @__PURE__ */ jsx3(
|
|
342
|
-
Button,
|
|
307
|
+
variant: "body2",
|
|
308
|
+
sx: { mb: 3, color: "var(--process-description-color)" },
|
|
309
|
+
children: description
|
|
310
|
+
}
|
|
311
|
+
) : null,
|
|
312
|
+
/* @__PURE__ */ jsx2(
|
|
313
|
+
default2,
|
|
314
|
+
{
|
|
315
|
+
sx: {
|
|
316
|
+
maxHeight: "60vh",
|
|
317
|
+
overflowY: "auto"
|
|
318
|
+
},
|
|
319
|
+
children: /* @__PURE__ */ jsx2(
|
|
320
|
+
FileUpload,
|
|
343
321
|
{
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
322
|
+
value: queueValue,
|
|
323
|
+
readOnly: true,
|
|
324
|
+
hideDropzone: true,
|
|
325
|
+
disableRemove: true,
|
|
326
|
+
itemVariant,
|
|
327
|
+
"data-testid": "process-file-queue"
|
|
349
328
|
}
|
|
350
329
|
)
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
330
|
+
}
|
|
331
|
+
),
|
|
332
|
+
/* @__PURE__ */ jsxs2(
|
|
333
|
+
default2,
|
|
334
|
+
{
|
|
335
|
+
sx: { mt: 3, display: "flex", justifyContent: "flex-end", gap: 2 },
|
|
336
|
+
children: [
|
|
337
|
+
!allComplete ? /* @__PURE__ */ jsxs2(Fragment, { children: [
|
|
338
|
+
onStop ? /* @__PURE__ */ jsx2(
|
|
339
|
+
Button,
|
|
340
|
+
{
|
|
341
|
+
variant: "outlined",
|
|
342
|
+
color: "error",
|
|
343
|
+
startIcon: /* @__PURE__ */ jsx2(default9, {}),
|
|
344
|
+
onClick: handleStop,
|
|
345
|
+
children: "Stop"
|
|
346
|
+
}
|
|
347
|
+
) : null,
|
|
348
|
+
onPause ? /* @__PURE__ */ jsx2(
|
|
349
|
+
Button,
|
|
350
|
+
{
|
|
351
|
+
variant: "outlined",
|
|
352
|
+
color: "warning",
|
|
353
|
+
startIcon: paused ? /* @__PURE__ */ jsx2(default7, {}) : /* @__PURE__ */ jsx2(default8, {}),
|
|
354
|
+
onClick: handlePauseToggle,
|
|
355
|
+
children: paused ? "Resume" : "Pause"
|
|
356
|
+
}
|
|
357
|
+
) : null
|
|
358
|
+
] }) : null,
|
|
359
|
+
allComplete ? /* @__PURE__ */ jsx2(
|
|
360
|
+
Button,
|
|
361
|
+
{
|
|
362
|
+
variant: "contained",
|
|
363
|
+
onClick: () => setOpen(false),
|
|
364
|
+
disabled: !allComplete && !onStop,
|
|
365
|
+
startIcon: /* @__PURE__ */ jsx2(default5, {}),
|
|
366
|
+
color: "success",
|
|
367
|
+
children: "Done"
|
|
368
|
+
}
|
|
369
|
+
) : null
|
|
370
|
+
]
|
|
371
|
+
}
|
|
372
|
+
)
|
|
364
373
|
] })
|
|
365
374
|
}
|
|
366
375
|
)
|
|
367
376
|
] });
|
|
368
377
|
};
|
|
369
378
|
|
|
379
|
+
// src/components/compound/Process/src/ProcessItem.tsx
|
|
380
|
+
import { useMemo as useMemo4 } from "react";
|
|
381
|
+
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
382
|
+
var ProcessItem = ({ file, progress }) => {
|
|
383
|
+
const value = useMemo4(() => {
|
|
384
|
+
const clamped = Math.max(0, Math.min(100, progress));
|
|
385
|
+
return [
|
|
386
|
+
{
|
|
387
|
+
...file,
|
|
388
|
+
progress: clamped,
|
|
389
|
+
status: clamped >= 100 ? "success" : "uploading"
|
|
390
|
+
}
|
|
391
|
+
];
|
|
392
|
+
}, [file, progress]);
|
|
393
|
+
return /* @__PURE__ */ jsx3(
|
|
394
|
+
FileUpload,
|
|
395
|
+
{
|
|
396
|
+
value,
|
|
397
|
+
readOnly: true,
|
|
398
|
+
hideDropzone: true,
|
|
399
|
+
disableRemove: true,
|
|
400
|
+
itemVariant: "row",
|
|
401
|
+
"data-testid": "process-item"
|
|
402
|
+
}
|
|
403
|
+
);
|
|
404
|
+
};
|
|
405
|
+
|
|
370
406
|
export {
|
|
371
|
-
ProcessItem,
|
|
372
407
|
ProcessAlertContent,
|
|
373
408
|
ProcessAlertObserver,
|
|
374
|
-
ProcessModal
|
|
409
|
+
ProcessModal,
|
|
410
|
+
ProcessItem
|
|
375
411
|
};
|
|
376
|
-
//# sourceMappingURL=chunk-
|
|
412
|
+
//# sourceMappingURL=chunk-YRW5NKD7.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/compound/Process/src/ProcessModal.tsx","../src/components/compound/Process/src/hooks/useProgressTracking.ts","../src/components/compound/Process/src/hooks/useProcessAlert.ts","../src/components/compound/Process/src/ProcessAlert.tsx","../src/components/compound/Process/src/_utils/ProgressObserver.ts","../src/components/compound/Process/src/theme.ts","../src/components/compound/Process/src/ProcessItem.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback, useMemo } from 'react'\nimport { Box } from '@/ele/Box'\nimport { Typography } from '@/ele/Typography'\nimport { Button } from '@/ele/Button'\nimport {\n PauseIcon,\n PlayIcon,\n StopIcon,\n RemoveIcon as MinimizeIcon,\n CheckCircleIcon,\n} from '@/icons/MuiIcon'\nimport { MuiModal } from '@/ele/Modal'\nimport {\n FileUpload,\n type FileUploadItem,\n} from '@/ele/FileUpload'\nimport { ProcessModalProps, ProgressHook } from './types'\nimport { useProgressTracking, useProcessAlert } from './hooks'\nimport { processModalRootSx } from './theme'\nimport { mergeSx } from '@/_utils/_func'\n\nconst useDefaultProgress: ProgressHook = () => 0\n\nconst ProcessLogicRunner = ({\n file,\n useProgress,\n onProgress,\n paused,\n}: {\n file: FileUploadItem\n useProgress: ProgressHook\n onProgress: (file: FileUploadItem, progress: number) => void\n paused: boolean\n}) => {\n const progress = useProgress(file, paused)\n useEffect(() => {\n onProgress(file, progress)\n }, [file, progress, onProgress])\n return null\n}\n\nexport const ProcessModal: React.FC<ProcessModalProps> = ({\n openProps,\n files,\n title = 'Uploading Documents',\n description = 'Please wait while we upload your files.',\n useProgress = useDefaultProgress,\n onPause,\n onStop,\n minimizable = false,\n minimizePlacement = 'bottom-right',\n autoClose = false,\n itemVariant = 'row',\n}) => {\n const [open, setOpen] = openProps\n const [minimized, setMinimized] = useState(false)\n const [paused, setPaused] = useState(false)\n\n const handleMaximize = useCallback(() => setMinimized(false), [])\n\n const { observerRef } = useProcessAlert({\n open,\n minimized,\n minimizePlacement,\n onMaximize: handleMaximize,\n })\n\n const { progressMap, handleProgress, allComplete } = useProgressTracking(\n files,\n observerRef,\n )\n\n const queueValue = useMemo<FileUploadItem[]>(\n () =>\n files.map((file) => {\n const progress = progressMap.get(file.id) ?? 0\n const clamped = Math.max(0, Math.min(100, progress))\n return {\n ...file,\n progress: clamped,\n status: clamped >= 100 ? 'success' : 'uploading',\n }\n }),\n [files, progressMap],\n )\n\n useEffect(() => {\n if (autoClose && allComplete && open) {\n const timer = setTimeout(() => {\n setOpen(false)\n }, 1000)\n return () => clearTimeout(timer)\n }\n }, [autoClose, allComplete, open, setOpen])\n\n const handlePauseToggle = () => {\n setPaused(!paused)\n if (onPause) onPause()\n }\n\n const handleStop = () => {\n if (onStop) onStop()\n setOpen(false)\n }\n\n if (!open) return null\n\n return (\n <>\n {files.map((file) => (\n <ProcessLogicRunner\n key={file.id}\n file={file}\n useProgress={useProgress}\n onProgress={handleProgress}\n paused={paused}\n />\n ))}\n\n {minimized ? null : (\n <MuiModal\n openProps={openProps}\n title={title}\n size={{ w: 500 }}\n slots={{\n closeIcon: minimizable ? MinimizeIcon : undefined,\n }}\n slotProps={{\n closeButton: minimizable\n ? {\n onClick: () => setMinimized(true),\n title: 'Minimize',\n }\n : undefined,\n }}\n >\n <Box sx={mergeSx({ py: 2 }, processModalRootSx)}>\n {description ? (\n <Typography\n variant=\"body2\"\n sx={{ mb: 3, color: 'var(--process-description-color)' }}\n >\n {description}\n </Typography>\n ) : null}\n\n <Box\n sx={{\n maxHeight: '60vh',\n overflowY: 'auto',\n }}\n >\n <FileUpload\n value={queueValue}\n readOnly\n hideDropzone\n disableRemove\n itemVariant={itemVariant}\n data-testid=\"process-file-queue\"\n />\n </Box>\n\n <Box\n sx={{ mt: 3, display: 'flex', justifyContent: 'flex-end', gap: 2 }}\n >\n {!allComplete ? (\n <>\n {onStop ? (\n <Button\n variant=\"outlined\"\n color=\"error\"\n startIcon={<StopIcon />}\n onClick={handleStop}\n >\n Stop\n </Button>\n ) : null}\n {onPause ? (\n <Button\n variant=\"outlined\"\n color=\"warning\"\n startIcon={paused ? <PlayIcon /> : <PauseIcon />}\n onClick={handlePauseToggle}\n >\n {paused ? 'Resume' : 'Pause'}\n </Button>\n ) : null}\n </>\n ) : null}\n\n {allComplete ? (\n <Button\n variant=\"contained\"\n onClick={() => setOpen(false)}\n disabled={!allComplete && !onStop}\n startIcon={<CheckCircleIcon />}\n color=\"success\"\n >\n Done\n </Button>\n ) : null}\n </Box>\n </Box>\n </MuiModal>\n )}\n </>\n )\n}\n","import { useState, useEffect, useMemo, useCallback } from 'react'\nimport type React from 'react'\nimport type { FileUploadItem } from '@/ele/FileUpload'\nimport { ProgressObserver } from '../_utils/ProgressObserver'\n\nexport function useProgressTracking(\n files: FileUploadItem[],\n observerRef: React.RefObject<ProgressObserver>,\n) {\n const [progressMap, setProgressMap] = useState<Map<string, number>>(new Map())\n\n const handleProgress = useCallback((file: FileUploadItem, progress: number) => {\n setProgressMap((prev) => {\n if (prev.get(file.id) === progress) return prev\n const next = new Map(prev)\n next.set(file.id, progress)\n return next\n })\n }, [])\n\n useEffect(() => {\n if (files.length === 0) return\n let total = 0\n let completed = 0\n progressMap.forEach((v) => {\n total += v\n if (v >= 100) completed++\n })\n const avg = Math.round(total / files.length)\n observerRef.current.update(files.length, completed, avg)\n }, [progressMap, files, observerRef])\n\n const allComplete = useMemo(() => {\n if (files.length === 0) return false\n return files.every((f) => (progressMap.get(f.id) || 0) >= 100)\n }, [files, progressMap])\n\n return { progressMap, handleProgress, allComplete }\n}\n","import React, { useRef, useEffect, useMemo } from 'react';\nimport { SnackbarKey } from 'notistack';\nimport { useAlert, type AlertOptions } from '@/compound/Alert';\nimport { ProcessAlertObserver } from '../ProcessAlert';\nimport { ProgressObserver } from '../_utils/ProgressObserver';\nimport type { ProcessModalProps } from '../types';\n\ninterface UseProcessAlertParams {\n open: boolean;\n minimized: boolean;\n minimizePlacement: NonNullable<ProcessModalProps['minimizePlacement']>;\n onMaximize: () => void;\n}\n\nexport function useProcessAlert({\n open,\n minimized,\n minimizePlacement,\n onMaximize,\n}: UseProcessAlertParams) {\n const { enqueueInfo, closeSnackbar } = useAlert();\n const observerRef = useRef(new ProgressObserver());\n const snackbarIdRef = useRef<SnackbarKey | null>(null);\n\n const alertAnchorOrigin = useMemo<NonNullable<AlertOptions['anchorOrigin']>>(() => (\n {\n 'bottom-right': { vertical: 'bottom', horizontal: 'right' },\n 'bottom-left': { vertical: 'bottom', horizontal: 'left' },\n 'top-right': { vertical: 'top', horizontal: 'right' },\n 'top-left': { vertical: 'top', horizontal: 'left' },\n } as const\n )[minimizePlacement], [minimizePlacement]);\n\n // Sync minimized state to observer\n useEffect(() => {\n observerRef.current.setMinimized(minimized);\n }, [minimized]);\n\n // Alert open/close lifecycle\n useEffect(() => {\n if (open) {\n if (!snackbarIdRef.current) {\n const message = React.createElement(ProcessAlertObserver, {\n observer: observerRef.current,\n onMaximize,\n });\n const result = enqueueInfo(message, {\n autoHideDuration: null,\n icon: null,\n anchorOrigin: alertAnchorOrigin,\n });\n if (result.success) {\n snackbarIdRef.current = result.data;\n }\n }\n } else {\n if (snackbarIdRef.current) {\n closeSnackbar(snackbarIdRef.current);\n snackbarIdRef.current = null;\n }\n }\n }, [alertAnchorOrigin, closeSnackbar, enqueueInfo, open, onMaximize]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (snackbarIdRef.current) {\n closeSnackbar(snackbarIdRef.current);\n snackbarIdRef.current = null;\n }\n };\n }, [closeSnackbar]);\n\n return { observerRef };\n}\n","import { useEffect, useState } from 'react';\nimport { Box } from '@/ele/Box';\nimport { Typography } from '@/ele/Typography';\nimport { IconButton } from '@/ele/Button';\nimport { FullscreenIcon, CheckCircleIcon } from '@/icons/MuiIcon';\nimport { CircularProgress } from '@/ele/Progress';\nimport { ProgressObserver } from './_utils/ProgressObserver';\n\n// The display component (stateless mostly)\nexport const ProcessAlertContent = ({ \n allComplete, \n fileCount, \n totalProgress, \n onMaximize,\n minimized\n}: { \n allComplete: boolean; \n fileCount: number; \n totalProgress: number; \n onMaximize: () => void;\n minimized: boolean;\n}) => {\n return (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2, minWidth: 280 }}>\n {/* We don't render Icon here because MuiAlertVariant/Info handles the main icon usually. \n However, user might want the progress circle AS the icon. \n But MuiAlertVariant renders 'icon' prop.\n We are inside 'message'.\n */}\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n {/* Explicitly show progress here, assuming we replace or hide the default Alert icon via props if needed, or just show standard info icon + this progress */}\n {allComplete ? <CheckCircleIcon /> : <CircularProgress variant=\"determinate\" value={totalProgress} size={24} thickness={5} />}\n </Box>\n \n <Box sx={{ flex: 1, minWidth: 0 }}>\n <Typography variant=\"subtitle2\" sx={{ fontWeight: 600, lineHeight: 1.2 }}>\n {allComplete ? \"Uploads complete\" : \"Uploading files...\"}\n </Typography>\n {!allComplete && (\n <Typography variant=\"caption\" display=\"block\" sx={{ opacity: 0.8 }}>\n {fileCount} item{fileCount !== 1 ? 's' : ''} • {totalProgress}%\n </Typography>\n )}\n </Box>\n\n {minimized && (\n <IconButton size=\"small\" onClick={onMaximize} title=\"Maximize\" sx={{ color: 'inherit' }}>\n <FullscreenIcon />\n </IconButton>\n )}\n </Box>\n );\n};\n\n// The observer wrapper\nexport const ProcessAlertObserver = ({ observer, onMaximize }: { observer: ProgressObserver, onMaximize: () => void }) => {\n const [state, setState] = useState({ fileCount: 0, completedCount: 0, totalProgress: 0, minimized: false });\n\n useEffect(() => {\n return observer.subscribe((newState) => {\n setState(newState);\n });\n }, [observer]);\n\n // Derived\n const allComplete = state.fileCount > 0 && state.totalProgress >= 100;\n\n return (\n <ProcessAlertContent \n allComplete={allComplete}\n fileCount={state.fileCount}\n totalProgress={state.totalProgress}\n onMaximize={onMaximize}\n minimized={state.minimized}\n />\n );\n};\n","export interface ProgressState {\n fileCount: number;\n completedCount: number;\n totalProgress: number;\n minimized: boolean;\n}\n\nexport type ProgressListener = (state: ProgressState) => void;\n\nexport class ProgressObserver {\n private listeners: ProgressListener[] = [];\n private state: ProgressState = {\n fileCount: 0,\n completedCount: 0,\n totalProgress: 0,\n minimized: false\n };\n\n subscribe(listener: ProgressListener) {\n this.listeners.push(listener);\n // Immediate callback with current state\n listener(this.state);\n return () => {\n this.listeners = this.listeners.filter(l => l !== listener);\n };\n }\n\n update(fileCount: number, completedCount: number, totalProgress: number) {\n this.state = { ...this.state, fileCount, completedCount, totalProgress };\n this.notify();\n }\n\n setMinimized(minimized: boolean) {\n this.state = { ...this.state, minimized };\n this.notify();\n }\n\n private notify() {\n this.listeners.forEach(l => l(this.state));\n }\n}\n","import type { SxProps, Theme } from '@mui/material/styles'\n\n/**\n * Root-level CSS variable aliases for the ProcessModal compound component.\n * File queue styling comes from elemental FileUpload (soft quiet rows/tiles).\n */\nexport const processModalRootSx: SxProps<Theme> = {\n '--process-description-color': 'var(--mui-palette-text-secondary)',\n '--process-item-secondary-color': 'var(--mui-palette-text-secondary)',\n '--process-item-border': 'var(--mui-palette-border-1)',\n}\n","'use client'\nimport React, { useMemo } from 'react'\nimport {\n FileUpload,\n type FileUploadItem,\n} from '@/ele/FileUpload'\n\nexport type ProcessItemProps = {\n file: FileUploadItem\n progress: number\n}\n\n/**\n * Single-file progress row — soft FileUpload readOnly queue item.\n * Prefer ProcessModal's batched FileUpload list for multi-file UIs.\n */\nexport const ProcessItem: React.FC<ProcessItemProps> = ({ file, progress }) => {\n const value = useMemo<FileUploadItem[]>(() => {\n const clamped = Math.max(0, Math.min(100, progress))\n return [\n {\n ...file,\n progress: clamped,\n status: clamped >= 100 ? 'success' : 'uploading',\n },\n ]\n }, [file, progress])\n\n return (\n <FileUpload\n value={value}\n readOnly\n hideDropzone\n disableRemove\n itemVariant=\"row\"\n data-testid=\"process-item\"\n />\n )\n}\n"],"mappings":"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","names":["useState","useEffect","useCallback","useMemo","useEffect","useMemo","useEffect","useState","default","useState","useEffect","useMemo","useEffect","jsx","jsxs","useEffect","useState","useCallback","useMemo","default","useMemo","jsx","useMemo"]}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import {
|
|
2
|
+
default115 as default4
|
|
3
|
+
} from "./chunk-ZVFYOXDE.mjs";
|
|
4
|
+
import {
|
|
5
|
+
default as default3
|
|
6
|
+
} from "./chunk-4RPFRNXG.mjs";
|
|
7
|
+
import {
|
|
8
|
+
default as default2
|
|
9
|
+
} from "./chunk-PNSJC6PC.mjs";
|
|
10
|
+
|
|
11
|
+
// src/components/elemental/EmptyState/src/theme.ts
|
|
12
|
+
var emptyStateRootSx = {
|
|
13
|
+
"--empty-icon-color": "var(--mui-palette-text-secondary)",
|
|
14
|
+
"--empty-border": "var(--mui-palette-border-1)",
|
|
15
|
+
display: "flex",
|
|
16
|
+
flexDirection: "column",
|
|
17
|
+
alignItems: "center",
|
|
18
|
+
justifyContent: "center",
|
|
19
|
+
textAlign: "center",
|
|
20
|
+
gap: 1,
|
|
21
|
+
px: 3,
|
|
22
|
+
py: 4,
|
|
23
|
+
borderRadius: "16px",
|
|
24
|
+
border: "1px dashed var(--empty-border)",
|
|
25
|
+
backgroundColor: "color-mix(in srgb, var(--mui-palette-background-paper) 70%, transparent)",
|
|
26
|
+
boxSizing: "border-box",
|
|
27
|
+
minHeight: 160
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
// src/components/elemental/EmptyState/src/EmptyState.tsx
|
|
31
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
32
|
+
function EmptyState({
|
|
33
|
+
icon,
|
|
34
|
+
title,
|
|
35
|
+
description,
|
|
36
|
+
action,
|
|
37
|
+
sx
|
|
38
|
+
}) {
|
|
39
|
+
return /* @__PURE__ */ jsxs(
|
|
40
|
+
default2,
|
|
41
|
+
{
|
|
42
|
+
role: "status",
|
|
43
|
+
"data-testid": "empty-state",
|
|
44
|
+
sx: [emptyStateRootSx, ...Array.isArray(sx) ? sx : sx ? [sx] : []],
|
|
45
|
+
children: [
|
|
46
|
+
/* @__PURE__ */ jsx(
|
|
47
|
+
default2,
|
|
48
|
+
{
|
|
49
|
+
"aria-hidden": true,
|
|
50
|
+
sx: {
|
|
51
|
+
color: "var(--empty-icon-color)",
|
|
52
|
+
display: "flex",
|
|
53
|
+
fontSize: 40,
|
|
54
|
+
lineHeight: 1,
|
|
55
|
+
opacity: 0.85
|
|
56
|
+
},
|
|
57
|
+
children: icon ?? /* @__PURE__ */ jsx(default4, { sx: { fontSize: 40 } })
|
|
58
|
+
}
|
|
59
|
+
),
|
|
60
|
+
typeof title === "string" ? /* @__PURE__ */ jsx(default3, { variant: "subtitle1", sx: { m: 0, fontWeight: 600 }, children: title }) : title,
|
|
61
|
+
description ? typeof description === "string" ? /* @__PURE__ */ jsx(default3, { variant: "body2", color: "text.secondary", sx: { m: 0, maxWidth: 360 }, children: description }) : description : null,
|
|
62
|
+
action ? /* @__PURE__ */ jsx(default2, { sx: { mt: 0.5 }, children: action }) : null
|
|
63
|
+
]
|
|
64
|
+
}
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export {
|
|
69
|
+
EmptyState
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=chunk-ZMJKG2UI.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/elemental/EmptyState/src/theme.ts","../src/components/elemental/EmptyState/src/EmptyState.tsx"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material/styles'\n\nexport const emptyStateRootSx: SxProps<Theme> = {\n '--empty-icon-color': 'var(--mui-palette-text-secondary)',\n '--empty-border': 'var(--mui-palette-border-1)',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n gap: 1,\n px: 3,\n py: 4,\n borderRadius: '16px',\n border: '1px dashed var(--empty-border)',\n backgroundColor: 'color-mix(in srgb, var(--mui-palette-background-paper) 70%, transparent)',\n boxSizing: 'border-box',\n minHeight: 160,\n}\n","'use client'\nimport type React from 'react'\nimport { Box } from '@/ele/Box'\nimport { Typography } from '@/ele/Typography'\nimport { InboxOutlinedIcon } from '@/icons/MuiIcon'\nimport { emptyStateRootSx } from './theme'\n\nexport type EmptyStateProps = {\n icon?: React.ReactNode\n title: React.ReactNode\n description?: React.ReactNode\n action?: React.ReactNode\n sx?: React.ComponentProps<typeof Box>['sx']\n}\n\n/**\n * Soft empty placeholder with optional icon, description, and action.\n */\nexport function EmptyState({\n icon,\n title,\n description,\n action,\n sx,\n}: EmptyStateProps) {\n return (\n <Box\n role=\"status\"\n data-testid=\"empty-state\"\n sx={[emptyStateRootSx, ...(Array.isArray(sx) ? sx : sx ? [sx] : [])] as never}\n >\n <Box\n aria-hidden\n sx={{\n color: 'var(--empty-icon-color)',\n display: 'flex',\n fontSize: 40,\n lineHeight: 1,\n opacity: 0.85,\n }}\n >\n {icon ?? <InboxOutlinedIcon sx={{ fontSize: 40 }} />}\n </Box>\n {typeof title === 'string' ? (\n <Typography variant=\"subtitle1\" sx={{ m: 0, fontWeight: 600 }}>\n {title}\n </Typography>\n ) : (\n title\n )}\n {description ? (\n typeof description === 'string' ? (\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ m: 0, maxWidth: 360 }}>\n {description}\n </Typography>\n ) : (\n description\n )\n ) : null}\n {action ? <Box sx={{ mt: 0.5 }}>{action}</Box> : null}\n </Box>\n )\n}\n"],"mappings":";;;;;;;;;;;AAEO,IAAM,mBAAmC;AAAA,EAC9C,sBAAsB;AAAA,EACtB,kBAAkB;AAAA,EAClB,SAAS;AAAA,EACT,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,WAAW;AACb;;;ACQI,SAea,KAfb;AARG,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAoB;AAClB,SACE;AAAA,IAACA;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,eAAY;AAAA,MACZ,IAAI,CAAC,kBAAkB,GAAI,MAAM,QAAQ,EAAE,IAAI,KAAK,KAAK,CAAC,EAAE,IAAI,CAAC,CAAE;AAAA,MAEnE;AAAA;AAAA,UAACA;AAAA,UAAA;AAAA,YACC,eAAW;AAAA,YACX,IAAI;AAAA,cACF,OAAO;AAAA,cACP,SAAS;AAAA,cACT,UAAU;AAAA,cACV,YAAY;AAAA,cACZ,SAAS;AAAA,YACX;AAAA,YAEC,kBAAQ,oBAACA,UAAA,EAAkB,IAAI,EAAE,UAAU,GAAG,GAAG;AAAA;AAAA,QACpD;AAAA,QACC,OAAO,UAAU,WAChB,oBAACA,UAAA,EAAW,SAAQ,aAAY,IAAI,EAAE,GAAG,GAAG,YAAY,IAAI,GACzD,iBACH,IAEA;AAAA,QAED,cACC,OAAO,gBAAgB,WACrB,oBAACA,UAAA,EAAW,SAAQ,SAAQ,OAAM,kBAAiB,IAAI,EAAE,GAAG,GAAG,UAAU,IAAI,GAC1E,uBACH,IAEA,cAEA;AAAA,QACH,SAAS,oBAACA,UAAA,EAAI,IAAI,EAAE,IAAI,IAAI,GAAI,kBAAO,IAAS;AAAA;AAAA;AAAA,EACnD;AAEJ;","names":["default"]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import React, { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
type ConfirmOptions = {
|
|
5
|
+
title: ReactNode;
|
|
6
|
+
body?: ReactNode;
|
|
7
|
+
confirmLabel?: string;
|
|
8
|
+
cancelLabel?: string;
|
|
9
|
+
/** Styles primary as destructive (error). */
|
|
10
|
+
danger?: boolean;
|
|
11
|
+
};
|
|
12
|
+
type ConfirmDialogProps = ConfirmOptions & {
|
|
13
|
+
open: boolean;
|
|
14
|
+
onConfirm: () => void;
|
|
15
|
+
onCancel: () => void;
|
|
16
|
+
/** Disable buttons while an async confirm is in flight. */
|
|
17
|
+
loading?: boolean;
|
|
18
|
+
};
|
|
19
|
+
type ConfirmRequest = ConfirmOptions & {
|
|
20
|
+
resolve: (value: boolean) => void;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Soft confirm modal. Esc and Cancel resolve as cancel.
|
|
25
|
+
* Use controlled props, or the promise-style `confirm()` helper.
|
|
26
|
+
*/
|
|
27
|
+
declare function ConfirmDialog({ open, title, body, confirmLabel, cancelLabel, danger, loading, onConfirm, onCancel, }: ConfirmDialogProps): react_jsx_runtime.JSX.Element | null;
|
|
28
|
+
|
|
29
|
+
type ConfirmProviderProps = {
|
|
30
|
+
children?: React.ReactNode;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Host for the imperative confirm() helper.
|
|
34
|
+
*/
|
|
35
|
+
declare function ConfirmProvider({ children }: ConfirmProviderProps): react_jsx_runtime.JSX.Element;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Promise-style confirm. Resolves true on primary, false on Cancel/Esc/backdrop.
|
|
39
|
+
* Requires ConfirmProvider (mounted by ThemeProvider by default).
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* const ok = await confirm({ title: 'Delete?', body: 'Cannot undo.', danger: true })
|
|
43
|
+
*/
|
|
44
|
+
declare function confirm(options: ConfirmOptions): Promise<boolean>;
|
|
45
|
+
|
|
46
|
+
declare function useConfirm(): (options: ConfirmOptions) => Promise<boolean>;
|
|
47
|
+
|
|
48
|
+
export { ConfirmDialog, type ConfirmDialogProps, type ConfirmOptions, ConfirmProvider, type ConfirmRequest, confirm, useConfirm };
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import React, { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
type ConfirmOptions = {
|
|
5
|
+
title: ReactNode;
|
|
6
|
+
body?: ReactNode;
|
|
7
|
+
confirmLabel?: string;
|
|
8
|
+
cancelLabel?: string;
|
|
9
|
+
/** Styles primary as destructive (error). */
|
|
10
|
+
danger?: boolean;
|
|
11
|
+
};
|
|
12
|
+
type ConfirmDialogProps = ConfirmOptions & {
|
|
13
|
+
open: boolean;
|
|
14
|
+
onConfirm: () => void;
|
|
15
|
+
onCancel: () => void;
|
|
16
|
+
/** Disable buttons while an async confirm is in flight. */
|
|
17
|
+
loading?: boolean;
|
|
18
|
+
};
|
|
19
|
+
type ConfirmRequest = ConfirmOptions & {
|
|
20
|
+
resolve: (value: boolean) => void;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Soft confirm modal. Esc and Cancel resolve as cancel.
|
|
25
|
+
* Use controlled props, or the promise-style `confirm()` helper.
|
|
26
|
+
*/
|
|
27
|
+
declare function ConfirmDialog({ open, title, body, confirmLabel, cancelLabel, danger, loading, onConfirm, onCancel, }: ConfirmDialogProps): react_jsx_runtime.JSX.Element | null;
|
|
28
|
+
|
|
29
|
+
type ConfirmProviderProps = {
|
|
30
|
+
children?: React.ReactNode;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Host for the imperative confirm() helper.
|
|
34
|
+
*/
|
|
35
|
+
declare function ConfirmProvider({ children }: ConfirmProviderProps): react_jsx_runtime.JSX.Element;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Promise-style confirm. Resolves true on primary, false on Cancel/Esc/backdrop.
|
|
39
|
+
* Requires ConfirmProvider (mounted by ThemeProvider by default).
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* const ok = await confirm({ title: 'Delete?', body: 'Cannot undo.', danger: true })
|
|
43
|
+
*/
|
|
44
|
+
declare function confirm(options: ConfirmOptions): Promise<boolean>;
|
|
45
|
+
|
|
46
|
+
declare function useConfirm(): (options: ConfirmOptions) => Promise<boolean>;
|
|
47
|
+
|
|
48
|
+
export { ConfirmDialog, type ConfirmDialogProps, type ConfirmOptions, ConfirmProvider, type ConfirmRequest, confirm, useConfirm };
|