@gen-epix/ui-core-components 4.0.0 → 4.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/_chunks/isObject.js +13 -0
- package/dist/_chunks/isObject.js.map +1 -0
- package/dist/_chunks/rolldown-runtime.js +2 -2
- package/dist/components/BackdropSpinner/BackdropSpinner.d.ts +5 -0
- package/dist/components/BackdropSpinner/index.d.ts +1 -0
- package/dist/components/BackdropSpinner/index.js +19 -0
- package/dist/components/BackdropSpinner/index.js.map +1 -0
- package/dist/components/Confirmation/Confirmation.d.ts +2 -0
- package/dist/components/Confirmation/ConfirmationRender.d.ts +11 -0
- package/dist/components/Confirmation/index.d.ts +2 -0
- package/dist/components/Confirmation/index.js +58 -0
- package/dist/components/Confirmation/index.js.map +1 -0
- package/dist/components/CopyToClipboardButton/CopyToClipboardButton.d.ts +13 -0
- package/dist/components/CopyToClipboardButton/index.d.ts +1 -0
- package/dist/components/CopyToClipboardButton/index.js +101 -0
- package/dist/components/CopyToClipboardButton/index.js.map +1 -0
- package/dist/components/Dialog/Dialog.d.ts +27 -0
- package/dist/components/Dialog/index.d.ts +1 -0
- package/dist/components/Dialog/index.js +83 -0
- package/dist/components/Dialog/index.js.map +1 -0
- package/dist/components/LinearProgressWithLabel/LinearProgressWithLabel.d.ts +5 -0
- package/dist/components/LinearProgressWithLabel/index.d.ts +1 -0
- package/dist/components/LinearProgressWithLabel/index.js +31 -0
- package/dist/components/LinearProgressWithLabel/index.js.map +1 -0
- package/dist/components/LoadingIndicator/LoadingIndicator.d.ts +2 -0
- package/dist/components/LoadingIndicator/index.d.ts +1 -0
- package/dist/components/LoadingIndicator/index.js +12 -0
- package/dist/components/LoadingIndicator/index.js.map +1 -0
- package/dist/components/NestedMenu/IconMenuItem.d.ts +18 -0
- package/dist/components/NestedMenu/NestedDropdown.d.ts +17 -0
- package/dist/components/NestedMenu/NestedMenuItem.d.ts +22 -0
- package/dist/components/NestedMenu/index.d.ts +4 -0
- package/dist/components/NestedMenu/index.js +240 -0
- package/dist/components/NestedMenu/index.js.map +1 -0
- package/dist/components/NestedMenu/nestedMenuItemsFromObject.d.ts +11 -0
- package/dist/components/Spinner/Spinner.d.ts +11 -0
- package/dist/components/Spinner/index.d.ts +1 -0
- package/dist/components/Spinner/index.js +63 -0
- package/dist/components/Spinner/index.js.map +1 -0
- package/dist/components/Stepper/Stepper.d.ts +17 -0
- package/dist/components/Stepper/index.d.ts +2 -0
- package/dist/components/Stepper/index.js +1087 -0
- package/dist/components/Stepper/index.js.map +1 -0
- package/dist/components/Stepper/stepperModel.d.ts +4 -0
- package/dist/context/uiCoreComponentsConfigContext/UiCoreComponentsConfigContextProvider.d.ts +6 -0
- package/dist/context/uiCoreComponentsConfigContext/index.d.ts +3 -0
- package/dist/context/uiCoreComponentsConfigContext/index.js +14 -0
- package/dist/context/uiCoreComponentsConfigContext/index.js.map +1 -0
- package/dist/context/uiCoreComponentsConfigContext/uiCoreComponentsConfigContext.d.ts +7 -0
- package/dist/context/uiCoreComponentsConfigContext/useUiCoreComponentsConfigContext.d.ts +2 -0
- package/dist/hoc/withDialog/index.d.ts +1 -0
- package/dist/hoc/withDialog/index.js +69 -0
- package/dist/hoc/withDialog/index.js.map +1 -0
- package/dist/hoc/withDialog/withDialog.d.ts +33 -0
- package/dist/locale/en.json +14 -93
- package/dist/locale/nl.json +14 -93
- package/dist/models/nestedMenu.d.ts +17 -0
- package/dist/models/nestedMenu.js +0 -0
- package/package.json +3 -3
- package/dist/@types/ui-form.d.ts +0 -2
- package/dist/@types/yup.d.ts +0 -30
- package/dist/_chunks/Autocomplete.js +0 -229
- package/dist/_chunks/Autocomplete.js.map +0 -1
- package/dist/_chunks/DatePicker.js +0 -126
- package/dist/_chunks/DatePicker.js.map +0 -1
- package/dist/_chunks/FormUtil.js +0 -1350
- package/dist/_chunks/FormUtil.js.map +0 -1
- package/dist/_chunks/RichTextEditor.js +0 -22721
- package/dist/_chunks/RichTextEditor.js.map +0 -1
- package/dist/_chunks/TransferList.js +0 -453
- package/dist/_chunks/TransferList.js.map +0 -1
- package/dist/_chunks/UploadButton.js +0 -91
- package/dist/_chunks/UploadButton.js.map +0 -1
- package/dist/_chunks/classnames.js +0 -33
- package/dist/_chunks/classnames.js.map +0 -1
- package/dist/_chunks/index.esm.js +0 -348
- package/dist/_chunks/index.esm.js.map +0 -1
- package/dist/_chunks/isEqual.js +0 -348
- package/dist/_chunks/isEqual.js.map +0 -1
- package/dist/_chunks/isObjectLike.js +0 -304
- package/dist/_chunks/isObjectLike.js.map +0 -1
- package/dist/_chunks/isValid.js +0 -28
- package/dist/_chunks/isValid.js.map +0 -1
- package/dist/_chunks/sv.js +0 -434
- package/dist/_chunks/sv.js.map +0 -1
- package/dist/components/fields/Autocomplete/Autocomplete.d.ts +0 -19
- package/dist/components/fields/Autocomplete/AutocompleteSelectAllContext.d.ts +0 -2
- package/dist/components/fields/Autocomplete/AutocompleteSelectAllPaper.d.ts +0 -2
- package/dist/components/fields/Autocomplete/index.d.ts +0 -1
- package/dist/components/fields/Autocomplete/index.js +0 -2
- package/dist/components/fields/CheckboxGroup/CheckboxGroup.d.ts +0 -18
- package/dist/components/fields/CheckboxGroup/index.d.ts +0 -1
- package/dist/components/fields/CheckboxGroup/index.js +0 -114
- package/dist/components/fields/CheckboxGroup/index.js.map +0 -1
- package/dist/components/fields/DatePicker/DatePicker.d.ts +0 -15
- package/dist/components/fields/DatePicker/DatePickerInputAdornment.d.ts +0 -8
- package/dist/components/fields/DatePicker/index.d.ts +0 -1
- package/dist/components/fields/DatePicker/index.js +0 -2
- package/dist/components/fields/DateRangePicker/DateRangePicker.d.ts +0 -17
- package/dist/components/fields/DateRangePicker/index.d.ts +0 -1
- package/dist/components/fields/DateRangePicker/index.js +0 -1648
- package/dist/components/fields/DateRangePicker/index.js.map +0 -1
- package/dist/components/fields/NumberField/NumberField.d.ts +0 -19
- package/dist/components/fields/NumberField/index.d.ts +0 -1
- package/dist/components/fields/NumberField/index.js +0 -180
- package/dist/components/fields/NumberField/index.js.map +0 -1
- package/dist/components/fields/NumberRangeInput/NumberRangeInput.d.ts +0 -15
- package/dist/components/fields/NumberRangeInput/index.d.ts +0 -1
- package/dist/components/fields/NumberRangeInput/index.js +0 -192
- package/dist/components/fields/NumberRangeInput/index.js.map +0 -1
- package/dist/components/fields/RadioGroup/RadioGroup.d.ts +0 -16
- package/dist/components/fields/RadioGroup/index.d.ts +0 -1
- package/dist/components/fields/RadioGroup/index.js +0 -72
- package/dist/components/fields/RadioGroup/index.js.map +0 -1
- package/dist/components/fields/RichTextEditor/RichTextEditor.d.ts +0 -13
- package/dist/components/fields/RichTextEditor/RichTextEditorContent.d.ts +0 -4
- package/dist/components/fields/RichTextEditor/index.d.ts +0 -2
- package/dist/components/fields/RichTextEditor/index.js +0 -2
- package/dist/components/fields/RichTextEditor/useRichTextEditorExtensions.d.ts +0 -10
- package/dist/components/fields/Select/Select.d.ts +0 -16
- package/dist/components/fields/Select/index.d.ts +0 -1
- package/dist/components/fields/Select/index.js +0 -129
- package/dist/components/fields/Select/index.js.map +0 -1
- package/dist/components/fields/Switch/Switch.d.ts +0 -13
- package/dist/components/fields/Switch/index.d.ts +0 -1
- package/dist/components/fields/Switch/index.js +0 -68
- package/dist/components/fields/Switch/index.js.map +0 -1
- package/dist/components/fields/TextField/TextField.d.ts +0 -18
- package/dist/components/fields/TextField/index.d.ts +0 -1
- package/dist/components/fields/TextField/index.js +0 -108
- package/dist/components/fields/TextField/index.js.map +0 -1
- package/dist/components/fields/ToggleButtonGroup/ToggleButtonGroup.d.ts +0 -14
- package/dist/components/fields/ToggleButtonGroup/index.d.ts +0 -1
- package/dist/components/fields/ToggleButtonGroup/index.js +0 -57
- package/dist/components/fields/ToggleButtonGroup/index.js.map +0 -1
- package/dist/components/fields/TransferList/TransferList.d.ts +0 -16
- package/dist/components/fields/TransferList/index.d.ts +0 -1
- package/dist/components/fields/TransferList/index.js +0 -2
- package/dist/components/fields/UploadButton/UploadButton.d.ts +0 -15
- package/dist/components/fields/UploadButton/index.d.ts +0 -1
- package/dist/components/fields/UploadButton/index.js +0 -2
- package/dist/components/helpers/FormFieldHelperText/FormFieldHelperText.d.ts +0 -8
- package/dist/components/helpers/FormFieldHelperText/index.d.ts +0 -1
- package/dist/components/helpers/FormFieldHelperText/index.js +0 -50
- package/dist/components/helpers/FormFieldHelperText/index.js.map +0 -1
- package/dist/components/helpers/FormFieldLoadingIndicator/FormFieldLoadingIndicator.d.ts +0 -4
- package/dist/components/helpers/FormFieldLoadingIndicator/index.d.ts +0 -1
- package/dist/components/helpers/FormFieldLoadingIndicator/index.js +0 -16
- package/dist/components/helpers/FormFieldLoadingIndicator/index.js.map +0 -1
- package/dist/components/helpers/GenericForm/GenericForm.d.ts +0 -18
- package/dist/components/helpers/GenericForm/index.d.ts +0 -1
- package/dist/components/helpers/GenericForm/index.js +0 -156
- package/dist/components/helpers/GenericForm/index.js.map +0 -1
- package/dist/hooks/useIsFormFieldRequiredFromSchema/index.d.ts +0 -1
- package/dist/hooks/useIsFormFieldRequiredFromSchema/index.js +0 -18
- package/dist/hooks/useIsFormFieldRequiredFromSchema/index.js.map +0 -1
- package/dist/hooks/useIsFormFieldRequiredFromSchema/useIsFormFieldRequiredFromSchema.d.ts +0 -4
- package/dist/models/form.d.ts +0 -112
- package/dist/models/form.js +0 -8
- package/dist/models/form.js.map +0 -1
- package/dist/setup/setup.d.ts +0 -1
- package/dist/setup/setup.js +0 -166
- package/dist/setup/setup.js.map +0 -1
- package/dist/utils/FormUtil/FormUtil.d.ts +0 -19
- package/dist/utils/FormUtil/index.d.ts +0 -1
- package/dist/utils/FormUtil/index.js +0 -2
- package/dist/utils/SchemaUtil/SchemaUtil.d.ts +0 -9
- package/dist/utils/SchemaUtil/index.d.ts +0 -1
- package/dist/utils/SchemaUtil/index.js +0 -30
- package/dist/utils/SchemaUtil/index.js.map +0 -1
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { useCallback as e, useImperativeHandle as t, useRef as n, useState as r } from "react";
|
|
2
|
+
import { Box as i, ClickAwayListener as a, Tooltip as o, useTheme as s } from "@mui/material";
|
|
3
|
+
import { useTranslation as c } from "react-i18next";
|
|
4
|
+
import { jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
5
|
+
import d from "@mui/material/MenuItem";
|
|
6
|
+
import { styled as f } from "@mui/material/styles";
|
|
7
|
+
import p from "@mui/material/Typography";
|
|
8
|
+
import m from "@mui/material/Button";
|
|
9
|
+
import h from "@mui/icons-material/ExpandMore";
|
|
10
|
+
import g from "@mui/material/Menu";
|
|
11
|
+
import _ from "@mui/icons-material/ChevronRight";
|
|
12
|
+
//#region src/components/NestedMenu/IconMenuItem.tsx
|
|
13
|
+
var v = f(d)({
|
|
14
|
+
display: "flex",
|
|
15
|
+
justifyContent: "space-between",
|
|
16
|
+
paddingLeft: "4px",
|
|
17
|
+
paddingRight: "4px"
|
|
18
|
+
}), y = f(p)({
|
|
19
|
+
paddingLeft: "8px",
|
|
20
|
+
paddingRight: "8px",
|
|
21
|
+
textAlign: "left"
|
|
22
|
+
}), b = f(i)({ display: "flex" }), x = ({ checked: e, className: t, label: n, leftIcon: r, MenuItemProps: i, ref: a, rightIcon: o, ...s }) => /* @__PURE__ */ u(v, {
|
|
23
|
+
...i,
|
|
24
|
+
className: t,
|
|
25
|
+
ref: a,
|
|
26
|
+
...s,
|
|
27
|
+
"aria-checked": e,
|
|
28
|
+
role: e ? "menuitemcheckbox" : "menuitem",
|
|
29
|
+
children: [/* @__PURE__ */ u(b, { children: [r, /* @__PURE__ */ l(y, { children: n })] }), o]
|
|
30
|
+
}), S = {
|
|
31
|
+
anchor: {
|
|
32
|
+
horizontal: "right",
|
|
33
|
+
vertical: "top"
|
|
34
|
+
},
|
|
35
|
+
transform: {
|
|
36
|
+
horizontal: "left",
|
|
37
|
+
vertical: "top"
|
|
38
|
+
}
|
|
39
|
+
}, C = {
|
|
40
|
+
anchor: {
|
|
41
|
+
horizontal: "left",
|
|
42
|
+
vertical: "top"
|
|
43
|
+
},
|
|
44
|
+
transform: {
|
|
45
|
+
horizontal: "right",
|
|
46
|
+
vertical: "top"
|
|
47
|
+
}
|
|
48
|
+
}, w = ({ ref: a, ...o }) => {
|
|
49
|
+
let s = n(null), c = n(null), d = n(null), [f, p] = r(null), [m, h] = r(!1), [v, y] = r(S), { callback: b, checked: w, children: T, className: E, ContainerProps: D = {}, label: O, leftIcon: k = null, MenuProps: A, parentMenuOpen: j, rightIcon: M = /* @__PURE__ */ l(_, {}), tabIndex: N, ...P } = o;
|
|
50
|
+
t(a, () => s.current);
|
|
51
|
+
let F = e((e) => {
|
|
52
|
+
s.current = e, p(e);
|
|
53
|
+
}, []), I = e(() => {
|
|
54
|
+
b && b();
|
|
55
|
+
}, [b]), L = e((e) => {
|
|
56
|
+
h(!0), D.onMouseEnter && D.onMouseEnter(e);
|
|
57
|
+
}, [D]), R = e((e) => {
|
|
58
|
+
h(!1), D.onMouseLeave && D.onMouseLeave(e);
|
|
59
|
+
}, [D]), z = e(() => {
|
|
60
|
+
h(!1);
|
|
61
|
+
}, []), B = e(() => {
|
|
62
|
+
let e = c.current?.ownerDocument.activeElement ?? null;
|
|
63
|
+
if (d.current?.children) {
|
|
64
|
+
for (let t of d.current.children) if (t === e) return !0;
|
|
65
|
+
}
|
|
66
|
+
return !1;
|
|
67
|
+
}, []), V = e((e) => {
|
|
68
|
+
e.target === c.current && h(!0), D.onFocus && D.onFocus(e);
|
|
69
|
+
}, [D]), H = e(() => {
|
|
70
|
+
setTimeout(() => {
|
|
71
|
+
B() || h(!1);
|
|
72
|
+
});
|
|
73
|
+
}, [B]), U = e((e) => {
|
|
74
|
+
if (e.key === "Escape") return;
|
|
75
|
+
B() && e.stopPropagation();
|
|
76
|
+
let t = c.current?.ownerDocument.activeElement;
|
|
77
|
+
e.key === "Enter" && e.target === c.current && b && b(), e.key === "ArrowLeft" && B() && c.current?.focus(), e.key === "ArrowRight" && e.target === c.current && e.target === t && (d.current?.children[0])?.focus();
|
|
78
|
+
}, [b, B]), W = m && j, G = e((e) => {
|
|
79
|
+
let t = s.current;
|
|
80
|
+
if (e === null || t === null) return;
|
|
81
|
+
let n = d.current?.clientWidth ?? 0, { width: r, x: i } = t.getBoundingClientRect(), a = document.body.clientWidth;
|
|
82
|
+
y(i + r + n > a ? C : S);
|
|
83
|
+
}, []), K;
|
|
84
|
+
return o.disabled || (K = N ?? -1), /* @__PURE__ */ u(i, {
|
|
85
|
+
...D,
|
|
86
|
+
onBlur: H,
|
|
87
|
+
onFocus: V,
|
|
88
|
+
onKeyDown: U,
|
|
89
|
+
onMouseEnter: L,
|
|
90
|
+
onMouseLeave: R,
|
|
91
|
+
ref: c,
|
|
92
|
+
tabIndex: K,
|
|
93
|
+
children: [/* @__PURE__ */ l(x, {
|
|
94
|
+
checked: w,
|
|
95
|
+
className: E,
|
|
96
|
+
label: O,
|
|
97
|
+
leftIcon: k,
|
|
98
|
+
MenuItemProps: P,
|
|
99
|
+
onClick: I,
|
|
100
|
+
ref: F,
|
|
101
|
+
rightIcon: M
|
|
102
|
+
}), /* @__PURE__ */ l(g, {
|
|
103
|
+
anchorEl: f,
|
|
104
|
+
anchorOrigin: v.anchor,
|
|
105
|
+
autoFocus: !1,
|
|
106
|
+
disableAutoFocus: !0,
|
|
107
|
+
disableEnforceFocus: !0,
|
|
108
|
+
onClose: z,
|
|
109
|
+
open: W,
|
|
110
|
+
ref: G,
|
|
111
|
+
sx: { pointerEvents: "none" },
|
|
112
|
+
transformOrigin: v.transform,
|
|
113
|
+
...A,
|
|
114
|
+
children: /* @__PURE__ */ l(i, {
|
|
115
|
+
ref: d,
|
|
116
|
+
sx: { pointerEvents: "auto" },
|
|
117
|
+
children: T
|
|
118
|
+
})
|
|
119
|
+
})]
|
|
120
|
+
});
|
|
121
|
+
}, T = ({ handleClose: e, isOpen: t, menuItemsData: n }) => n.map((n) => {
|
|
122
|
+
let { active: r, autoCloseDisabled: i, callback: a, checked: s, disabled: c, divider: u, items: d, label: f, leftIcon: p, rightIcon: m, sx: h, tooltip: g } = n;
|
|
123
|
+
if (!c && d && d.length > 0) return /* @__PURE__ */ l(o, {
|
|
124
|
+
arrow: !0,
|
|
125
|
+
placement: "right",
|
|
126
|
+
title: void 0,
|
|
127
|
+
children: /* @__PURE__ */ l(w, {
|
|
128
|
+
callback: a,
|
|
129
|
+
checked: s,
|
|
130
|
+
disabled: c,
|
|
131
|
+
label: f,
|
|
132
|
+
leftIcon: p,
|
|
133
|
+
parentMenuOpen: t,
|
|
134
|
+
rightIcon: m,
|
|
135
|
+
sx: {
|
|
136
|
+
...h || {},
|
|
137
|
+
"& p": { fontWeight: r ? 700 : void 0 }
|
|
138
|
+
},
|
|
139
|
+
children: T({
|
|
140
|
+
handleClose: e,
|
|
141
|
+
isOpen: t,
|
|
142
|
+
menuItemsData: d
|
|
143
|
+
})
|
|
144
|
+
}, f)
|
|
145
|
+
}, f);
|
|
146
|
+
let _ = /* @__PURE__ */ l(x, {
|
|
147
|
+
checked: s,
|
|
148
|
+
disabled: c,
|
|
149
|
+
divider: u,
|
|
150
|
+
label: f,
|
|
151
|
+
leftIcon: p,
|
|
152
|
+
onClick: () => {
|
|
153
|
+
i || e(), a && a();
|
|
154
|
+
},
|
|
155
|
+
rightIcon: m,
|
|
156
|
+
sx: {
|
|
157
|
+
...h || {},
|
|
158
|
+
"& p": { fontWeight: r ? 700 : void 0 }
|
|
159
|
+
}
|
|
160
|
+
}, f);
|
|
161
|
+
return c ? _ : /* @__PURE__ */ l(o, {
|
|
162
|
+
arrow: !0,
|
|
163
|
+
placement: "right",
|
|
164
|
+
title: g ?? f,
|
|
165
|
+
children: _
|
|
166
|
+
}, f);
|
|
167
|
+
}), E = ({ ref: t, ...n }) => {
|
|
168
|
+
let [d, f] = r(null), p = !!d, { t: _ } = c(), v = s(), { ButtonProps: y, ContainerProps: b, menuItemsData: x, MenuProps: S, onClick: C, showTopLevelTooltip: w, ...E } = n, D = e((e) => {
|
|
169
|
+
f(e.currentTarget), C && C(e);
|
|
170
|
+
}, [C]), O = e(() => {
|
|
171
|
+
f(null);
|
|
172
|
+
}, []), k = e(() => {
|
|
173
|
+
O();
|
|
174
|
+
}, [O]), A = e(() => {
|
|
175
|
+
O();
|
|
176
|
+
}, [O]), j = T({
|
|
177
|
+
handleClose: O,
|
|
178
|
+
isOpen: p,
|
|
179
|
+
menuItemsData: x?.items ?? []
|
|
180
|
+
}), M = /* @__PURE__ */ l(m, {
|
|
181
|
+
endIcon: /* @__PURE__ */ l(h, {}),
|
|
182
|
+
onClick: D,
|
|
183
|
+
...y,
|
|
184
|
+
"aria-expanded": p ? "true" : "false",
|
|
185
|
+
sx: {
|
|
186
|
+
...y.sx ?? {},
|
|
187
|
+
"& .MuiButton-endIcon": {
|
|
188
|
+
display: "inline-block",
|
|
189
|
+
position: "absolute",
|
|
190
|
+
right: "8px",
|
|
191
|
+
top: "2px"
|
|
192
|
+
},
|
|
193
|
+
display: "inline-block",
|
|
194
|
+
height: "24px",
|
|
195
|
+
lineHeight: "16px",
|
|
196
|
+
overflow: "hidden",
|
|
197
|
+
paddingRight: "24px",
|
|
198
|
+
position: "relative",
|
|
199
|
+
textOverflow: "ellipsis",
|
|
200
|
+
whiteSpace: "nowrap",
|
|
201
|
+
width: "100%"
|
|
202
|
+
},
|
|
203
|
+
children: x?.label ?? _`Menu`
|
|
204
|
+
});
|
|
205
|
+
return /* @__PURE__ */ l(a, {
|
|
206
|
+
onClickAway: k,
|
|
207
|
+
children: /* @__PURE__ */ u(i, {
|
|
208
|
+
ref: t,
|
|
209
|
+
sx: { maxWidth: "100%" },
|
|
210
|
+
...b,
|
|
211
|
+
...E,
|
|
212
|
+
children: [
|
|
213
|
+
(y.disabled || !w) && M,
|
|
214
|
+
!y.disabled && w && /* @__PURE__ */ l(o, {
|
|
215
|
+
arrow: !0,
|
|
216
|
+
placement: "right",
|
|
217
|
+
slotProps: { tooltip: { sx: { marginLeft: `${v.spacing(0)} !important` } } },
|
|
218
|
+
title: x?.tooltip ?? x?.label ?? _`Menu`,
|
|
219
|
+
children: M
|
|
220
|
+
}),
|
|
221
|
+
/* @__PURE__ */ l(g, {
|
|
222
|
+
anchorEl: d,
|
|
223
|
+
hideBackdrop: !0,
|
|
224
|
+
onClose: A,
|
|
225
|
+
open: p,
|
|
226
|
+
slotProps: {
|
|
227
|
+
paper: { style: { pointerEvents: "auto" } },
|
|
228
|
+
root: { style: { pointerEvents: "none" } }
|
|
229
|
+
},
|
|
230
|
+
...S,
|
|
231
|
+
children: j
|
|
232
|
+
})
|
|
233
|
+
]
|
|
234
|
+
})
|
|
235
|
+
});
|
|
236
|
+
};
|
|
237
|
+
//#endregion
|
|
238
|
+
export { x as IconMenuItem, E as NestedDropdown, w as NestedMenuItem, T as nestedMenuItemsFromObject };
|
|
239
|
+
|
|
240
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/components/NestedMenu/IconMenuItem.tsx","../../../src/components/NestedMenu/NestedMenuItem.tsx","../../../src/components/NestedMenu/nestedMenuItemsFromObject.tsx","../../../src/components/NestedMenu/NestedDropdown.tsx"],"sourcesContent":["import type { MenuItemProps } from '@mui/material/MenuItem';\nimport MenuItem from '@mui/material/MenuItem';\nimport { styled } from '@mui/material/styles';\nimport Typography from '@mui/material/Typography';\nimport { Box } from '@mui/material';\nimport type { SxProps } from '@mui/material';\nimport type {\n MouseEvent,\n ReactNode,\n Ref,\n} from 'react';\n\nconst StyledMenuItem = styled(MenuItem)({\n display: 'flex',\n justifyContent: 'space-between',\n paddingLeft: '4px',\n paddingRight: '4px',\n});\n\nconst StyledTypography = styled(Typography)({\n paddingLeft: '8px',\n paddingRight: '8px',\n textAlign: 'left',\n});\n\nconst FlexBox = styled(Box)({\n display: 'flex',\n});\n\ntype IconMenuItemProps = {\n readonly checked?: 'false' | 'mixed' | 'true';\n readonly className?: string;\n readonly disabled?: boolean;\n readonly divider?: boolean;\n readonly label?: string;\n readonly leftIcon?: ReactNode;\n // eslint-disable-next-line @typescript-eslint/naming-convention\n readonly MenuItemProps?: MenuItemProps;\n readonly onClick?: (event: MouseEvent<HTMLElement>) => void;\n readonly ref?: Ref<HTMLLIElement>;\n readonly rightIcon?: ReactNode;\n readonly sx?: SxProps;\n};\n\nexport const IconMenuItem = ({ checked, className, label, leftIcon, MenuItemProps, ref, rightIcon, ...props }: IconMenuItemProps) => {\n return (\n <StyledMenuItem\n {...MenuItemProps}\n className={className}\n ref={ref}\n {...props}\n aria-checked={checked}\n role={checked ? 'menuitemcheckbox' : 'menuitem'}\n >\n <FlexBox>\n {leftIcon}\n <StyledTypography>\n {label}\n </StyledTypography>\n </FlexBox>\n {rightIcon}\n </StyledMenuItem>\n );\n};\n","import type { MenuProps } from '@mui/material/Menu';\nimport Menu from '@mui/material/Menu';\nimport type { MenuItemProps } from '@mui/material/MenuItem';\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\nimport type {\n ElementType,\n FocusEvent,\n HTMLAttributes,\n KeyboardEvent,\n MouseEvent,\n ReactNode,\n Ref,\n} from 'react';\nimport {\n useCallback,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\nimport type { PopoverOrigin } from '@mui/material';\nimport { Box } from '@mui/material';\n\nimport { IconMenuItem } from './IconMenuItem';\n\ntype Origins = {\n anchor: PopoverOrigin;\n transform: PopoverOrigin;\n};\n\nconst rightOrigins: Origins = {\n anchor: {\n horizontal: 'right',\n vertical: 'top',\n },\n transform: {\n horizontal: 'left',\n vertical: 'top',\n },\n};\n\nconst leftOrigins: Origins = {\n anchor: {\n horizontal: 'left',\n vertical: 'top',\n },\n transform: {\n horizontal: 'right',\n vertical: 'top',\n },\n};\n\nexport type NestedMenuItemProps = {\n readonly active?: boolean;\n readonly button?: true;\n readonly callback?: () => void;\n readonly checked?: 'false' | 'mixed' | 'true';\n readonly children?: ReactNode;\n readonly className?: string;\n readonly component?: ElementType;\n // eslint-disable-next-line @typescript-eslint/naming-convention\n readonly ContainerProps?: HTMLAttributes<HTMLElement>;\n readonly disabled?: boolean;\n readonly label?: string;\n readonly leftIcon?: ReactNode;\n // eslint-disable-next-line @typescript-eslint/naming-convention\n readonly MenuProps?: Partial<Omit<MenuProps, 'children'>>;\n readonly parentMenuOpen: boolean;\n readonly ref?: Ref<HTMLLIElement>;\n readonly rightIcon?: ReactNode;\n readonly tabIndex?: number;\n} & Omit<MenuItemProps, 'button'>;\n\nexport const NestedMenuItem = ({ ref, ...props }: NestedMenuItemProps) => {\n const menuItemRef = useRef<HTMLLIElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const menuContainerRef = useRef<HTMLDivElement>(null);\n const [anchorEl, setAnchorEl] = useState<HTMLLIElement | null>(null);\n const [isSubMenuOpen, setIsSubMenuOpen] = useState(false);\n const [origins, setOrigins] = useState<Origins>(rightOrigins);\n\n const {\n callback,\n checked,\n children,\n className,\n ContainerProps = {},\n label,\n leftIcon = null,\n MenuProps,\n parentMenuOpen,\n rightIcon = <ChevronRightIcon />,\n tabIndex: tabIndexProp,\n ...MenuItemProps\n } = props;\n\n useImperativeHandle(ref, () => menuItemRef.current);\n\n const setMenuItemNode = useCallback((node: HTMLLIElement | null): void => {\n menuItemRef.current = node;\n setAnchorEl(node);\n }, []);\n\n const onIconMenuItemClick = useCallback((): void => {\n if (callback) {\n callback();\n }\n }, [callback]);\n\n const onMouseEnter = useCallback((e: MouseEvent<HTMLElement>): void => {\n setIsSubMenuOpen(true);\n\n if (ContainerProps.onMouseEnter) {\n ContainerProps.onMouseEnter(e);\n }\n }, [ContainerProps]);\n\n const onMouseLeave = useCallback((e: MouseEvent<HTMLElement>): void => {\n setIsSubMenuOpen(false);\n\n if (ContainerProps.onMouseLeave) {\n ContainerProps.onMouseLeave(e);\n }\n }, [ContainerProps]);\n\n const onMenuClose = useCallback((): void => {\n setIsSubMenuOpen(false);\n }, []);\n\n // Check if any immediate children are active\n const isSubmenuFocused = useCallback(() => {\n const isActive = containerRef.current?.ownerDocument.activeElement ?? null;\n\n if (menuContainerRef.current?.children) {\n for (const child of menuContainerRef.current.children) {\n if (child === isActive) {\n return true;\n }\n }\n }\n\n return false;\n }, []);\n\n const onFocus = useCallback((e: FocusEvent<HTMLElement>) => {\n if (e.target === containerRef.current) {\n setIsSubMenuOpen(true);\n }\n\n if (ContainerProps.onFocus) {\n ContainerProps.onFocus(e);\n }\n }, [ContainerProps]);\n\n const onBlur = useCallback(() => {\n setTimeout(() => {\n if (!isSubmenuFocused()) {\n setIsSubMenuOpen(false);\n }\n });\n }, [isSubmenuFocused]);\n\n const onKeyDown = useCallback((e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n return;\n }\n\n if (isSubmenuFocused()) {\n e.stopPropagation();\n }\n\n const isActive = containerRef.current?.ownerDocument.activeElement;\n\n // if pressing enter key, run callback\n if (e.key === 'Enter' && e.target === containerRef.current && callback) {\n callback();\n }\n\n if (e.key === 'ArrowLeft' && isSubmenuFocused()) {\n containerRef.current?.focus();\n }\n\n if (e.key === 'ArrowRight' && e.target === containerRef.current && e.target === isActive) {\n const firstChild = menuContainerRef.current?.children[0] as HTMLDivElement;\n firstChild?.focus();\n }\n }, [callback, isSubmenuFocused]);\n\n const open = isSubMenuOpen && parentMenuOpen;\n\n const menuRef = useCallback((node: HTMLElement | null) => {\n const menuItem = menuItemRef.current;\n\n if (node === null || menuItem === null) {\n return;\n }\n\n const subMenuWidth = menuContainerRef.current?.clientWidth ?? 0;\n const { width, x } = menuItem.getBoundingClientRect();\n const bodyWidth = document.body.clientWidth;\n\n setOrigins(x + width + subMenuWidth > bodyWidth ? leftOrigins : rightOrigins);\n }, []);\n\n // Root element must have a `tabIndex` attribute for keyboard navigation\n let tabIndex;\n if (!props.disabled) {\n tabIndex = tabIndexProp ?? -1;\n }\n\n return (\n <Box\n {...ContainerProps}\n onBlur={onBlur}\n onFocus={onFocus}\n onKeyDown={onKeyDown}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n ref={containerRef}\n tabIndex={tabIndex}\n >\n\n <IconMenuItem\n checked={checked}\n className={className}\n label={label}\n leftIcon={leftIcon}\n MenuItemProps={MenuItemProps}\n onClick={onIconMenuItemClick}\n ref={setMenuItemNode}\n rightIcon={rightIcon}\n />\n <Menu\n // from capturing events for clicks and hovers\n\n anchorEl={anchorEl}\n anchorOrigin={origins.anchor}\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus={false}\n disableAutoFocus\n disableEnforceFocus\n onClose={onMenuClose}\n open={open}\n ref={menuRef}\n // Set pointer events to 'none' to prevent the invisible Popover div\n sx={{\n pointerEvents: 'none',\n }}\n transformOrigin={origins.transform}\n {...MenuProps}\n >\n <Box\n ref={menuContainerRef}\n sx={{ pointerEvents: 'auto' }}\n >\n {children}\n </Box>\n </Menu>\n\n </Box>\n );\n};\n","import { Tooltip } from '@mui/material';\n\nimport type { MenuItemData } from '../../models/nestedMenu';\n\nimport { IconMenuItem } from './IconMenuItem';\nimport { NestedMenuItem } from './NestedMenuItem';\n\nexport interface NestedMenuItemsFromObjectProps {\n handleClose: () => void;\n isOpen: boolean;\n menuItemsData: MenuItemData[];\n}\n\n/**\n * Create a JSX element with nested elements creating a nested menu.\n * Every menu item should have a uid provided\n */\nexport const nestedMenuItemsFromObject = ({\n handleClose,\n isOpen,\n menuItemsData: items,\n}: NestedMenuItemsFromObjectProps) => {\n return items.map((item) => {\n const { active, autoCloseDisabled, callback, checked, disabled, divider, items: menuItemsData, label, leftIcon, rightIcon, sx, tooltip } = item;\n if (!disabled && menuItemsData && menuItemsData.length > 0) {\n return (\n <Tooltip\n arrow\n key={label}\n placement={'right'}\n title={undefined}\n >\n <NestedMenuItem\n callback={callback}\n checked={checked}\n disabled={disabled}\n key={label}\n label={label}\n leftIcon={leftIcon}\n parentMenuOpen={isOpen}\n rightIcon={rightIcon}\n sx={{\n ...(sx || {}),\n '& p': {\n fontWeight: active ? 700 : undefined,\n },\n }}\n >\n {/* Call this function to nest more items */}\n {nestedMenuItemsFromObject({\n handleClose,\n isOpen,\n menuItemsData,\n })}\n </NestedMenuItem>\n </Tooltip>\n );\n }\n\n const iconMenuItem = (\n <IconMenuItem\n checked={checked}\n disabled={disabled}\n divider={divider}\n key={label}\n label={label}\n leftIcon={leftIcon}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={() => {\n if (!autoCloseDisabled) {\n handleClose();\n }\n if (callback) {\n callback();\n }\n }}\n rightIcon={rightIcon}\n sx={{\n ...(sx || {}),\n '& p': {\n fontWeight: active ? 700 : undefined,\n },\n }}\n />\n );\n if (disabled) {\n return iconMenuItem;\n }\n\n // No children elements, return MenuItem\n return (\n <Tooltip\n arrow\n key={label}\n placement={'right'}\n title={tooltip ?? label}\n >\n {iconMenuItem}\n </Tooltip>\n );\n });\n};\n","import type { ButtonProps } from '@mui/material/Button';\nimport Button from '@mui/material/Button';\nimport type { MenuProps } from '@mui/material/Menu';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport Menu from '@mui/material/Menu';\nimport type {\n MouseEvent,\n ReactNode,\n Ref,\n} from 'react';\nimport {\n useCallback,\n useState,\n} from 'react';\nimport type { BoxProps } from '@mui/material';\nimport {\n Box,\n ClickAwayListener,\n Tooltip,\n useTheme,\n} from '@mui/material';\nimport { useTranslation } from 'react-i18next';\n\nimport type { MenuItemData } from '../../models/nestedMenu';\n\nimport { nestedMenuItemsFromObject } from './nestedMenuItemsFromObject';\n\ninterface NestedDropdownProps {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n readonly ButtonProps?: Partial<ButtonProps>;\n readonly children?: ReactNode;\n // eslint-disable-next-line @typescript-eslint/naming-convention\n readonly ContainerProps?: Partial<BoxProps>;\n readonly menuItemsData?: MenuItemData;\n // eslint-disable-next-line @typescript-eslint/naming-convention\n readonly MenuProps?: Partial<MenuProps>;\n readonly onClick?: (e: MouseEvent<HTMLButtonElement>) => void;\n readonly ref?: Ref<HTMLDivElement>;\n readonly showTopLevelTooltip?: boolean;\n}\n\nexport const NestedDropdown = ({ ref, ...props }: NestedDropdownProps) => {\n const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null);\n const open = Boolean(anchorEl);\n const { t } = useTranslation();\n const theme = useTheme();\n\n const { ButtonProps, ContainerProps, menuItemsData: data, MenuProps, onClick, showTopLevelTooltip, ...rest } = props;\n\n const onButtonClick = useCallback((event: MouseEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget);\n if (onClick) {\n onClick(event);\n }\n }, [onClick]);\n const handleClose = useCallback(() => {\n setAnchorEl(null);\n }, []);\n const onClickAway = useCallback(() => {\n handleClose();\n }, [handleClose]);\n const onMenuClose = useCallback(() => {\n handleClose();\n }, [handleClose]);\n\n const menuItems = nestedMenuItemsFromObject({\n handleClose,\n isOpen: open,\n menuItemsData: data?.items ?? [],\n });\n\n const buttonElement = (\n <Button\n endIcon={<ExpandMoreIcon />}\n onClick={onButtonClick}\n {...ButtonProps}\n aria-expanded={open ? 'true' : 'false'}\n sx={{\n ...(ButtonProps.sx ?? {}),\n '& .MuiButton-endIcon': {\n display: 'inline-block',\n position: 'absolute',\n right: '8px',\n top: '2px',\n },\n display: 'inline-block',\n height: '24px',\n lineHeight: '16px',\n overflow: 'hidden',\n paddingRight: '24px',\n position: 'relative',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n width: '100%',\n }}\n >\n {data?.label ?? t`Menu`}\n </Button>\n );\n\n return (\n <ClickAwayListener onClickAway={onClickAway}>\n <Box\n ref={ref}\n sx={{\n maxWidth: '100%',\n }}\n {...ContainerProps}\n {...rest}\n >\n {(ButtonProps.disabled || !showTopLevelTooltip) && buttonElement}\n {(!ButtonProps.disabled && showTopLevelTooltip) && (\n <Tooltip\n arrow\n placement={'right'}\n slotProps={{\n tooltip: {\n sx: {\n marginLeft: `${theme.spacing(0)} !important`,\n },\n },\n }}\n title={data?.tooltip ?? data?.label ?? t`Menu`}\n >\n {buttonElement}\n </Tooltip>\n )}\n <Menu\n anchorEl={anchorEl}\n hideBackdrop\n onClose={onMenuClose}\n open={open}\n slotProps={{\n paper: { style: { pointerEvents: 'auto' } },\n root: { style: { pointerEvents: 'none' } },\n }}\n {...MenuProps}\n >\n {menuItems}\n </Menu>\n </Box>\n </ClickAwayListener>\n\n );\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { MenuItemData } from '../../models/nestedMenu';
|
|
2
|
+
export interface NestedMenuItemsFromObjectProps {
|
|
3
|
+
handleClose: () => void;
|
|
4
|
+
isOpen: boolean;
|
|
5
|
+
menuItemsData: MenuItemData[];
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Create a JSX element with nested elements creating a nested menu.
|
|
9
|
+
* Every menu item should have a uid provided
|
|
10
|
+
*/
|
|
11
|
+
export declare const nestedMenuItemsFromObject: ({ handleClose, isOpen, menuItemsData: items, }: NestedMenuItemsFromObjectProps) => import("react").JSX.Element[];
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CircularProgressProps } from '@mui/material';
|
|
2
|
+
import { ReactElement } from 'react';
|
|
3
|
+
export type SpinnerProps = {
|
|
4
|
+
readonly color?: 'inherit' | 'primary' | 'secondary';
|
|
5
|
+
readonly inline?: boolean;
|
|
6
|
+
readonly label?: string;
|
|
7
|
+
readonly size?: CircularProgressProps['size'];
|
|
8
|
+
readonly takingLongerLabel?: string;
|
|
9
|
+
readonly takingLongerTimeoutMs?: number;
|
|
10
|
+
};
|
|
11
|
+
export declare const Spinner: ({ color, inline, label, size, takingLongerLabel, takingLongerTimeoutMs }: SpinnerProps) => ReactElement;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './Spinner';
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { useUiCoreComponentsConfigContext as e } from "../../context/uiCoreComponentsConfigContext/index.js";
|
|
2
|
+
import { useEffect as t, useState as n } from "react";
|
|
3
|
+
import { Box as r, CircularProgress as i, Typography as a } from "@mui/material";
|
|
4
|
+
import { useTranslation as o } from "react-i18next";
|
|
5
|
+
import { jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
6
|
+
import { visuallyHidden as l } from "@mui/utils";
|
|
7
|
+
//#region src/components/Spinner/Spinner.tsx
|
|
8
|
+
var u = ({ color: u = "primary", inline: d, label: f, size: p, takingLongerLabel: m, takingLongerTimeoutMs: h }) => {
|
|
9
|
+
let [g, _] = n(!1), { t: v } = o(), y = e();
|
|
10
|
+
return t(() => {
|
|
11
|
+
let e = setTimeout(() => {
|
|
12
|
+
_(!0);
|
|
13
|
+
}, h ?? y.spinner.defaultTakingLongerTimeoutMs);
|
|
14
|
+
return () => {
|
|
15
|
+
clearTimeout(e);
|
|
16
|
+
};
|
|
17
|
+
}, [h, y.spinner.defaultTakingLongerTimeoutMs]), /* @__PURE__ */ c(r, {
|
|
18
|
+
"aria-busy": "true",
|
|
19
|
+
role: "status",
|
|
20
|
+
sx: {
|
|
21
|
+
alignItems: "center",
|
|
22
|
+
bottom: d ? "auto" : 0,
|
|
23
|
+
display: "flex",
|
|
24
|
+
flexDirection: "column",
|
|
25
|
+
justifyContent: "center",
|
|
26
|
+
left: d ? "auto" : 0,
|
|
27
|
+
position: d ? "relative" : "absolute",
|
|
28
|
+
right: d ? "auto" : 0,
|
|
29
|
+
top: d ? "auto" : 0,
|
|
30
|
+
width: d ? "100%" : "auto"
|
|
31
|
+
},
|
|
32
|
+
children: [
|
|
33
|
+
/* @__PURE__ */ s(r, {
|
|
34
|
+
sx: { margin: 1 },
|
|
35
|
+
children: /* @__PURE__ */ s(i, {
|
|
36
|
+
color: u,
|
|
37
|
+
size: p ?? y.spinner.defaultCircularProgressSize
|
|
38
|
+
})
|
|
39
|
+
}),
|
|
40
|
+
/* @__PURE__ */ s(r, {
|
|
41
|
+
sx: {
|
|
42
|
+
...f ? void 0 : l,
|
|
43
|
+
margin: 1
|
|
44
|
+
},
|
|
45
|
+
children: /* @__PURE__ */ s(a, {
|
|
46
|
+
"aria-live": "polite",
|
|
47
|
+
children: f ?? v`Loading`
|
|
48
|
+
})
|
|
49
|
+
}),
|
|
50
|
+
g && /* @__PURE__ */ s(r, {
|
|
51
|
+
sx: { margin: 1 },
|
|
52
|
+
children: /* @__PURE__ */ s(a, {
|
|
53
|
+
"aria-live": "polite",
|
|
54
|
+
children: m || v`This is taking longer than expected. We are still trying.`
|
|
55
|
+
})
|
|
56
|
+
})
|
|
57
|
+
]
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
//#endregion
|
|
61
|
+
export { u as Spinner };
|
|
62
|
+
|
|
63
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/components/Spinner/Spinner.tsx"],"sourcesContent":["import type { CircularProgressProps } from '@mui/material';\nimport {\n Box,\n CircularProgress,\n Typography,\n} from '@mui/material';\nimport type { ReactElement } from 'react';\nimport {\n useEffect,\n useState,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { visuallyHidden } from '@mui/utils';\n\nimport { useUiCoreComponentsConfigContext } from '../../context/uiCoreComponentsConfigContext';\n\n\nexport type SpinnerProps = {\n readonly color?: 'inherit' | 'primary' | 'secondary';\n readonly inline?: boolean;\n readonly label?: string;\n readonly size?: CircularProgressProps['size'];\n readonly takingLongerLabel?: string;\n readonly takingLongerTimeoutMs?: number;\n};\n\nexport const Spinner = ({ color = 'primary', inline, label, size, takingLongerLabel, takingLongerTimeoutMs }: SpinnerProps): ReactElement => {\n const [isTakingLonger, setIsTakingLonger] = useState(false);\n const { t } = useTranslation();\n\n const uiCoreComponentsConfig = useUiCoreComponentsConfigContext();\n\n useEffect(() => {\n const handle = setTimeout(() => {\n setIsTakingLonger(true);\n }, takingLongerTimeoutMs ?? uiCoreComponentsConfig.spinner.defaultTakingLongerTimeoutMs);\n return () => {\n clearTimeout(handle);\n };\n }, [takingLongerTimeoutMs, uiCoreComponentsConfig.spinner.defaultTakingLongerTimeoutMs]);\n\n return (\n <Box\n aria-busy={'true'}\n role={'status'}\n sx={{\n alignItems: 'center',\n bottom: inline ? 'auto' : 0,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n left: inline ? 'auto' : 0,\n position: inline ? 'relative' : 'absolute',\n right: inline ? 'auto' : 0,\n top: inline ? 'auto' : 0,\n width: inline ? '100%' : 'auto',\n }}\n >\n <Box\n sx={{\n margin: 1,\n }}\n >\n <CircularProgress\n color={color}\n size={size ?? uiCoreComponentsConfig.spinner.defaultCircularProgressSize}\n />\n </Box>\n <Box\n sx={{\n ...(!label ? visuallyHidden : undefined),\n margin: 1,\n }}\n >\n <Typography\n aria-live={'polite'}\n >\n {label ?? t`Loading`}\n </Typography>\n </Box>\n {isTakingLonger && (\n <Box\n sx={{\n margin: 1,\n }}\n >\n <Typography\n aria-live={'polite'}\n >\n {takingLongerLabel || t`This is taking longer than expected. We are still trying.`}\n </Typography>\n </Box>\n )}\n </Box>\n );\n};\n"],"mappings":";;;;;;;AA0BA,IAAa,KAAW,EAAE,WAAQ,WAAW,WAAQ,UAAO,SAAM,sBAAmB,+BAAwD;CAC3I,IAAM,CAAC,GAAgB,KAAqB,EAAS,EAAK,GACpD,EAAE,SAAM,EAAe,GAEvB,IAAyB,EAAiC;CAWhE,OATA,QAAgB;EACd,IAAM,IAAS,iBAAiB;GAC9B,EAAkB,EAAI;EACxB,GAAG,KAAyB,EAAuB,QAAQ,4BAA4B;EACvF,aAAa;GACX,aAAa,CAAM;EACrB;CACF,GAAG,CAAC,GAAuB,EAAuB,QAAQ,4BAA4B,CAAC,GAGrF,kBAAC,GAAD;EACE,aAAW;EACX,MAAM;EACN,IAAI;GACF,YAAY;GACZ,QAAQ,IAAS,SAAS;GAC1B,SAAS;GACT,eAAe;GACf,gBAAgB;GAChB,MAAM,IAAS,SAAS;GACxB,UAAU,IAAS,aAAa;GAChC,OAAO,IAAS,SAAS;GACzB,KAAK,IAAS,SAAS;GACvB,OAAO,IAAS,SAAS;EAC3B;EAdF,UAAA;GAgBE,kBAAC,GAAD;IACE,IAAI,EACF,QAAQ,EACV;IAEA,UAAA,kBAAC,GAAD;KACS;KACP,MAAM,KAAQ,EAAuB,QAAQ;IAC9C,CAAA;GACE,CAAA;GACL,kBAAC,GAAD;IACE,IAAI;KACF,GAAK,IAAyB,KAAA,IAAjB;KACb,QAAQ;IACV;IAEA,UAAA,kBAAC,GAAD;KACE,aAAW;KAEV,UAAA,KAAS,CAAC;IACD,CAAA;GACT,CAAA;GACJ,KACC,kBAAC,GAAD;IACE,IAAI,EACF,QAAQ,EACV;IAEA,UAAA,kBAAC,GAAD;KACE,aAAW;KAEV,UAAA,KAAqB,CAAC;IACb,CAAA;GACT,CAAA;EAEJ;;AAET"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BoxProps } from '@mui/material';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { STEPPER_DIRECTION } from './stepperModel';
|
|
4
|
+
export type Step = {
|
|
5
|
+
content?: ReactNode;
|
|
6
|
+
index?: string;
|
|
7
|
+
key: string;
|
|
8
|
+
label: string;
|
|
9
|
+
optional?: boolean;
|
|
10
|
+
};
|
|
11
|
+
export type StepperProps = {
|
|
12
|
+
readonly activeStep: string;
|
|
13
|
+
readonly direction?: STEPPER_DIRECTION;
|
|
14
|
+
readonly hideCompletedIndicator?: boolean;
|
|
15
|
+
readonly steps: Step[];
|
|
16
|
+
} & BoxProps;
|
|
17
|
+
export declare const Stepper: ({ activeStep, direction, hideCompletedIndicator, steps, ...boxProps }: StepperProps) => import("react").JSX.Element;
|