@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.
Files changed (170) hide show
  1. package/dist/_chunks/isObject.js +13 -0
  2. package/dist/_chunks/isObject.js.map +1 -0
  3. package/dist/_chunks/rolldown-runtime.js +2 -2
  4. package/dist/components/BackdropSpinner/BackdropSpinner.d.ts +5 -0
  5. package/dist/components/BackdropSpinner/index.d.ts +1 -0
  6. package/dist/components/BackdropSpinner/index.js +19 -0
  7. package/dist/components/BackdropSpinner/index.js.map +1 -0
  8. package/dist/components/Confirmation/Confirmation.d.ts +2 -0
  9. package/dist/components/Confirmation/ConfirmationRender.d.ts +11 -0
  10. package/dist/components/Confirmation/index.d.ts +2 -0
  11. package/dist/components/Confirmation/index.js +58 -0
  12. package/dist/components/Confirmation/index.js.map +1 -0
  13. package/dist/components/CopyToClipboardButton/CopyToClipboardButton.d.ts +13 -0
  14. package/dist/components/CopyToClipboardButton/index.d.ts +1 -0
  15. package/dist/components/CopyToClipboardButton/index.js +101 -0
  16. package/dist/components/CopyToClipboardButton/index.js.map +1 -0
  17. package/dist/components/Dialog/Dialog.d.ts +27 -0
  18. package/dist/components/Dialog/index.d.ts +1 -0
  19. package/dist/components/Dialog/index.js +83 -0
  20. package/dist/components/Dialog/index.js.map +1 -0
  21. package/dist/components/LinearProgressWithLabel/LinearProgressWithLabel.d.ts +5 -0
  22. package/dist/components/LinearProgressWithLabel/index.d.ts +1 -0
  23. package/dist/components/LinearProgressWithLabel/index.js +31 -0
  24. package/dist/components/LinearProgressWithLabel/index.js.map +1 -0
  25. package/dist/components/LoadingIndicator/LoadingIndicator.d.ts +2 -0
  26. package/dist/components/LoadingIndicator/index.d.ts +1 -0
  27. package/dist/components/LoadingIndicator/index.js +12 -0
  28. package/dist/components/LoadingIndicator/index.js.map +1 -0
  29. package/dist/components/NestedMenu/IconMenuItem.d.ts +18 -0
  30. package/dist/components/NestedMenu/NestedDropdown.d.ts +17 -0
  31. package/dist/components/NestedMenu/NestedMenuItem.d.ts +22 -0
  32. package/dist/components/NestedMenu/index.d.ts +4 -0
  33. package/dist/components/NestedMenu/index.js +240 -0
  34. package/dist/components/NestedMenu/index.js.map +1 -0
  35. package/dist/components/NestedMenu/nestedMenuItemsFromObject.d.ts +11 -0
  36. package/dist/components/Spinner/Spinner.d.ts +11 -0
  37. package/dist/components/Spinner/index.d.ts +1 -0
  38. package/dist/components/Spinner/index.js +63 -0
  39. package/dist/components/Spinner/index.js.map +1 -0
  40. package/dist/components/Stepper/Stepper.d.ts +17 -0
  41. package/dist/components/Stepper/index.d.ts +2 -0
  42. package/dist/components/Stepper/index.js +1087 -0
  43. package/dist/components/Stepper/index.js.map +1 -0
  44. package/dist/components/Stepper/stepperModel.d.ts +4 -0
  45. package/dist/context/uiCoreComponentsConfigContext/UiCoreComponentsConfigContextProvider.d.ts +6 -0
  46. package/dist/context/uiCoreComponentsConfigContext/index.d.ts +3 -0
  47. package/dist/context/uiCoreComponentsConfigContext/index.js +14 -0
  48. package/dist/context/uiCoreComponentsConfigContext/index.js.map +1 -0
  49. package/dist/context/uiCoreComponentsConfigContext/uiCoreComponentsConfigContext.d.ts +7 -0
  50. package/dist/context/uiCoreComponentsConfigContext/useUiCoreComponentsConfigContext.d.ts +2 -0
  51. package/dist/hoc/withDialog/index.d.ts +1 -0
  52. package/dist/hoc/withDialog/index.js +69 -0
  53. package/dist/hoc/withDialog/index.js.map +1 -0
  54. package/dist/hoc/withDialog/withDialog.d.ts +33 -0
  55. package/dist/locale/en.json +14 -93
  56. package/dist/locale/nl.json +14 -93
  57. package/dist/models/nestedMenu.d.ts +17 -0
  58. package/dist/models/nestedMenu.js +0 -0
  59. package/package.json +3 -3
  60. package/dist/@types/ui-form.d.ts +0 -2
  61. package/dist/@types/yup.d.ts +0 -30
  62. package/dist/_chunks/Autocomplete.js +0 -229
  63. package/dist/_chunks/Autocomplete.js.map +0 -1
  64. package/dist/_chunks/DatePicker.js +0 -126
  65. package/dist/_chunks/DatePicker.js.map +0 -1
  66. package/dist/_chunks/FormUtil.js +0 -1350
  67. package/dist/_chunks/FormUtil.js.map +0 -1
  68. package/dist/_chunks/RichTextEditor.js +0 -22721
  69. package/dist/_chunks/RichTextEditor.js.map +0 -1
  70. package/dist/_chunks/TransferList.js +0 -453
  71. package/dist/_chunks/TransferList.js.map +0 -1
  72. package/dist/_chunks/UploadButton.js +0 -91
  73. package/dist/_chunks/UploadButton.js.map +0 -1
  74. package/dist/_chunks/classnames.js +0 -33
  75. package/dist/_chunks/classnames.js.map +0 -1
  76. package/dist/_chunks/index.esm.js +0 -348
  77. package/dist/_chunks/index.esm.js.map +0 -1
  78. package/dist/_chunks/isEqual.js +0 -348
  79. package/dist/_chunks/isEqual.js.map +0 -1
  80. package/dist/_chunks/isObjectLike.js +0 -304
  81. package/dist/_chunks/isObjectLike.js.map +0 -1
  82. package/dist/_chunks/isValid.js +0 -28
  83. package/dist/_chunks/isValid.js.map +0 -1
  84. package/dist/_chunks/sv.js +0 -434
  85. package/dist/_chunks/sv.js.map +0 -1
  86. package/dist/components/fields/Autocomplete/Autocomplete.d.ts +0 -19
  87. package/dist/components/fields/Autocomplete/AutocompleteSelectAllContext.d.ts +0 -2
  88. package/dist/components/fields/Autocomplete/AutocompleteSelectAllPaper.d.ts +0 -2
  89. package/dist/components/fields/Autocomplete/index.d.ts +0 -1
  90. package/dist/components/fields/Autocomplete/index.js +0 -2
  91. package/dist/components/fields/CheckboxGroup/CheckboxGroup.d.ts +0 -18
  92. package/dist/components/fields/CheckboxGroup/index.d.ts +0 -1
  93. package/dist/components/fields/CheckboxGroup/index.js +0 -114
  94. package/dist/components/fields/CheckboxGroup/index.js.map +0 -1
  95. package/dist/components/fields/DatePicker/DatePicker.d.ts +0 -15
  96. package/dist/components/fields/DatePicker/DatePickerInputAdornment.d.ts +0 -8
  97. package/dist/components/fields/DatePicker/index.d.ts +0 -1
  98. package/dist/components/fields/DatePicker/index.js +0 -2
  99. package/dist/components/fields/DateRangePicker/DateRangePicker.d.ts +0 -17
  100. package/dist/components/fields/DateRangePicker/index.d.ts +0 -1
  101. package/dist/components/fields/DateRangePicker/index.js +0 -1648
  102. package/dist/components/fields/DateRangePicker/index.js.map +0 -1
  103. package/dist/components/fields/NumberField/NumberField.d.ts +0 -19
  104. package/dist/components/fields/NumberField/index.d.ts +0 -1
  105. package/dist/components/fields/NumberField/index.js +0 -180
  106. package/dist/components/fields/NumberField/index.js.map +0 -1
  107. package/dist/components/fields/NumberRangeInput/NumberRangeInput.d.ts +0 -15
  108. package/dist/components/fields/NumberRangeInput/index.d.ts +0 -1
  109. package/dist/components/fields/NumberRangeInput/index.js +0 -192
  110. package/dist/components/fields/NumberRangeInput/index.js.map +0 -1
  111. package/dist/components/fields/RadioGroup/RadioGroup.d.ts +0 -16
  112. package/dist/components/fields/RadioGroup/index.d.ts +0 -1
  113. package/dist/components/fields/RadioGroup/index.js +0 -72
  114. package/dist/components/fields/RadioGroup/index.js.map +0 -1
  115. package/dist/components/fields/RichTextEditor/RichTextEditor.d.ts +0 -13
  116. package/dist/components/fields/RichTextEditor/RichTextEditorContent.d.ts +0 -4
  117. package/dist/components/fields/RichTextEditor/index.d.ts +0 -2
  118. package/dist/components/fields/RichTextEditor/index.js +0 -2
  119. package/dist/components/fields/RichTextEditor/useRichTextEditorExtensions.d.ts +0 -10
  120. package/dist/components/fields/Select/Select.d.ts +0 -16
  121. package/dist/components/fields/Select/index.d.ts +0 -1
  122. package/dist/components/fields/Select/index.js +0 -129
  123. package/dist/components/fields/Select/index.js.map +0 -1
  124. package/dist/components/fields/Switch/Switch.d.ts +0 -13
  125. package/dist/components/fields/Switch/index.d.ts +0 -1
  126. package/dist/components/fields/Switch/index.js +0 -68
  127. package/dist/components/fields/Switch/index.js.map +0 -1
  128. package/dist/components/fields/TextField/TextField.d.ts +0 -18
  129. package/dist/components/fields/TextField/index.d.ts +0 -1
  130. package/dist/components/fields/TextField/index.js +0 -108
  131. package/dist/components/fields/TextField/index.js.map +0 -1
  132. package/dist/components/fields/ToggleButtonGroup/ToggleButtonGroup.d.ts +0 -14
  133. package/dist/components/fields/ToggleButtonGroup/index.d.ts +0 -1
  134. package/dist/components/fields/ToggleButtonGroup/index.js +0 -57
  135. package/dist/components/fields/ToggleButtonGroup/index.js.map +0 -1
  136. package/dist/components/fields/TransferList/TransferList.d.ts +0 -16
  137. package/dist/components/fields/TransferList/index.d.ts +0 -1
  138. package/dist/components/fields/TransferList/index.js +0 -2
  139. package/dist/components/fields/UploadButton/UploadButton.d.ts +0 -15
  140. package/dist/components/fields/UploadButton/index.d.ts +0 -1
  141. package/dist/components/fields/UploadButton/index.js +0 -2
  142. package/dist/components/helpers/FormFieldHelperText/FormFieldHelperText.d.ts +0 -8
  143. package/dist/components/helpers/FormFieldHelperText/index.d.ts +0 -1
  144. package/dist/components/helpers/FormFieldHelperText/index.js +0 -50
  145. package/dist/components/helpers/FormFieldHelperText/index.js.map +0 -1
  146. package/dist/components/helpers/FormFieldLoadingIndicator/FormFieldLoadingIndicator.d.ts +0 -4
  147. package/dist/components/helpers/FormFieldLoadingIndicator/index.d.ts +0 -1
  148. package/dist/components/helpers/FormFieldLoadingIndicator/index.js +0 -16
  149. package/dist/components/helpers/FormFieldLoadingIndicator/index.js.map +0 -1
  150. package/dist/components/helpers/GenericForm/GenericForm.d.ts +0 -18
  151. package/dist/components/helpers/GenericForm/index.d.ts +0 -1
  152. package/dist/components/helpers/GenericForm/index.js +0 -156
  153. package/dist/components/helpers/GenericForm/index.js.map +0 -1
  154. package/dist/hooks/useIsFormFieldRequiredFromSchema/index.d.ts +0 -1
  155. package/dist/hooks/useIsFormFieldRequiredFromSchema/index.js +0 -18
  156. package/dist/hooks/useIsFormFieldRequiredFromSchema/index.js.map +0 -1
  157. package/dist/hooks/useIsFormFieldRequiredFromSchema/useIsFormFieldRequiredFromSchema.d.ts +0 -4
  158. package/dist/models/form.d.ts +0 -112
  159. package/dist/models/form.js +0 -8
  160. package/dist/models/form.js.map +0 -1
  161. package/dist/setup/setup.d.ts +0 -1
  162. package/dist/setup/setup.js +0 -166
  163. package/dist/setup/setup.js.map +0 -1
  164. package/dist/utils/FormUtil/FormUtil.d.ts +0 -19
  165. package/dist/utils/FormUtil/index.d.ts +0 -1
  166. package/dist/utils/FormUtil/index.js +0 -2
  167. package/dist/utils/SchemaUtil/SchemaUtil.d.ts +0 -9
  168. package/dist/utils/SchemaUtil/index.d.ts +0 -1
  169. package/dist/utils/SchemaUtil/index.js +0 -30
  170. 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;
@@ -0,0 +1,2 @@
1
+ export * from './Stepper';
2
+ export * from './stepperModel';