@soyfri/shared-library 2.0.0-beta.9 → 2.0.0

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 (232) hide show
  1. package/Button-C17mExpd.cjs.map +1 -1
  2. package/Button-UkkP-bNw.js.map +1 -1
  3. package/README.md +182 -150
  4. package/components/ActionMenu/ActionMenu.cjs +52 -52
  5. package/components/ActionMenu/ActionMenu.cjs.map +1 -1
  6. package/components/ActionMenu/ActionMenu.d.ts +20 -36
  7. package/components/ActionMenu/ActionMenu.js +55 -55
  8. package/components/ActionMenu/ActionMenu.js.map +1 -1
  9. package/components/ActionMenu/index.d.ts +2 -2
  10. package/components/AppBar/AppBar.cjs +2 -219
  11. package/components/AppBar/AppBar.cjs.map +1 -1
  12. package/components/AppBar/AppBar.d.ts +6 -6
  13. package/components/AppBar/AppBar.js +5 -222
  14. package/components/AppBar/AppBar.js.map +1 -1
  15. package/components/AppBar/index.d.ts +0 -6
  16. package/components/Autocomplete/Autocomplete.cjs +93 -94
  17. package/components/Autocomplete/Autocomplete.cjs.map +1 -1
  18. package/components/Autocomplete/Autocomplete.d.ts +29 -26
  19. package/components/Autocomplete/Autocomplete.definitions.d.ts +2 -1
  20. package/components/Autocomplete/Autocomplete.helpers.d.ts +12 -8
  21. package/components/Autocomplete/Autocomplete.js +94 -95
  22. package/components/Autocomplete/Autocomplete.js.map +1 -1
  23. package/components/Autocomplete/_parts/AutocompleteChips.d.ts +7 -6
  24. package/components/Autocomplete/_parts/AutocompleteOption.d.ts +10 -13
  25. package/components/Autocomplete/index.d.ts +1 -1
  26. package/components/Avatar/Avatar.cjs +17 -18
  27. package/components/Avatar/Avatar.cjs.map +1 -1
  28. package/components/Avatar/Avatar.js +17 -18
  29. package/components/Avatar/Avatar.js.map +1 -1
  30. package/components/Avatar/index.d.ts +1 -0
  31. package/components/Button/Button.d.ts +5 -5
  32. package/components/Button/index.d.ts +1 -0
  33. package/components/Card/Card.cjs +3 -92
  34. package/components/Card/Card.cjs.map +1 -1
  35. package/components/Card/Card.d.ts +3 -50
  36. package/components/Card/Card.js +5 -94
  37. package/components/Card/Card.js.map +1 -1
  38. package/components/Card/Card.sx.d.ts +3 -6
  39. package/components/Card/index.d.ts +1 -1
  40. package/components/Checkbox/Checkbox.cjs +189 -0
  41. package/components/Checkbox/Checkbox.cjs.map +1 -0
  42. package/components/Checkbox/Checkbox.d.ts +55 -0
  43. package/components/Checkbox/Checkbox.js +189 -0
  44. package/components/Checkbox/Checkbox.js.map +1 -0
  45. package/components/Checkbox/Checkbox.sx.d.ts +13 -0
  46. package/components/Checkbox/index.d.ts +2 -0
  47. package/components/Checkbox.d.ts +6 -0
  48. package/components/Chip/Chip.cjs +2 -1
  49. package/components/Chip/Chip.cjs.map +1 -1
  50. package/components/Chip/Chip.js +2 -1
  51. package/components/Chip/Chip.js.map +1 -1
  52. package/components/Chip/index.d.ts +2 -1
  53. package/components/Chip.d.ts +4 -0
  54. package/components/DatePicker/DatePicker.cjs +40 -63
  55. package/components/DatePicker/DatePicker.cjs.map +1 -1
  56. package/components/DatePicker/DatePicker.d.ts +1 -13
  57. package/components/DatePicker/DatePicker.js +36 -59
  58. package/components/DatePicker/DatePicker.js.map +1 -1
  59. package/components/DatePicker/index.d.ts +1 -1
  60. package/components/DateTimePicker/DateTimePicker.cjs +58 -82
  61. package/components/DateTimePicker/DateTimePicker.cjs.map +1 -1
  62. package/components/DateTimePicker/DateTimePicker.d.ts +9 -17
  63. package/components/DateTimePicker/DateTimePicker.definitions.d.ts +2 -0
  64. package/components/DateTimePicker/DateTimePicker.helpers.d.ts +4 -2
  65. package/components/DateTimePicker/DateTimePicker.js +54 -78
  66. package/components/DateTimePicker/DateTimePicker.js.map +1 -1
  67. package/components/DateTimePicker/index.d.ts +1 -1
  68. package/components/Drawer/Drawer.cjs +12 -6
  69. package/components/Drawer/Drawer.cjs.map +1 -1
  70. package/components/Drawer/Drawer.d.ts +3 -1
  71. package/components/Drawer/Drawer.js +13 -7
  72. package/components/Drawer/Drawer.js.map +1 -1
  73. package/components/Drawer/DrawerItem.d.ts +6 -1
  74. package/components/Gallery/Gallery.cjs +154 -79
  75. package/components/Gallery/Gallery.cjs.map +1 -1
  76. package/components/Gallery/Gallery.d.ts +25 -9
  77. package/components/Gallery/Gallery.js +154 -79
  78. package/components/Gallery/Gallery.js.map +1 -1
  79. package/components/Gallery/GalleryLightbox.d.ts +6 -10
  80. package/components/Gallery/GalleryMain.d.ts +3 -7
  81. package/components/Gallery/GalleryThumbnails.d.ts +7 -11
  82. package/components/Gallery/index.d.ts +2 -1
  83. package/components/Gallery.d.ts +4 -0
  84. package/components/Icon/Icon.cjs +6 -8
  85. package/components/Icon/Icon.cjs.map +1 -1
  86. package/components/Icon/Icon.d.ts +11 -17
  87. package/components/Icon/Icon.js +6 -8
  88. package/components/Icon/Icon.js.map +1 -1
  89. package/components/Icon/index.d.ts +2 -1
  90. package/components/Icon.d.ts +4 -0
  91. package/components/Input/Input.cjs +26 -13
  92. package/components/Input/Input.cjs.map +1 -1
  93. package/components/Input/Input.d.ts +9 -2
  94. package/components/Input/Input.helpers.d.ts +3 -3
  95. package/components/Input/Input.js +23 -10
  96. package/components/Input/Input.js.map +1 -1
  97. package/components/Input/index.d.ts +1 -1
  98. package/components/InputGroup/InputGroup.cjs +23 -22
  99. package/components/InputGroup/InputGroup.cjs.map +1 -1
  100. package/components/InputGroup/InputGroup.d.ts +4 -4
  101. package/components/InputGroup/InputGroup.js +22 -21
  102. package/components/InputGroup/InputGroup.js.map +1 -1
  103. package/components/InputGroup/index.d.ts +2 -1
  104. package/components/InputGroup.d.ts +4 -0
  105. package/components/Modal/Modal.cjs +127 -98
  106. package/components/Modal/Modal.cjs.map +1 -1
  107. package/components/Modal/Modal.d.ts +20 -5
  108. package/components/Modal/Modal.js +130 -101
  109. package/components/Modal/Modal.js.map +1 -1
  110. package/components/Modal/ModalBody.d.ts +6 -1
  111. package/components/Modal/ModalFooter.d.ts +4 -4
  112. package/components/Modal/ModalHeader.d.ts +6 -1
  113. package/components/Modal/index.d.ts +4 -2
  114. package/components/Modal.d.ts +4 -0
  115. package/components/RadioGroup/RadioGroup.cjs +9 -7
  116. package/components/RadioGroup/RadioGroup.cjs.map +1 -1
  117. package/components/RadioGroup/RadioGroup.d.ts +9 -3
  118. package/components/RadioGroup/RadioGroup.js +9 -7
  119. package/components/RadioGroup/RadioGroup.js.map +1 -1
  120. package/components/RadioGroup/index.d.ts +1 -1
  121. package/components/Select/Select.cjs +129 -264
  122. package/components/Select/Select.cjs.map +1 -1
  123. package/components/Select/Select.d.ts +35 -20
  124. package/components/Select/Select.helpers.d.ts +6 -19
  125. package/components/Select/Select.js +134 -269
  126. package/components/Select/Select.js.map +1 -1
  127. package/components/Select/index.d.ts +1 -1
  128. package/components/Stat/Stat.cjs +2 -2
  129. package/components/Stat/Stat.cjs.map +1 -1
  130. package/components/Stat/Stat.js +2 -2
  131. package/components/Stat/Stat.js.map +1 -1
  132. package/components/Stat/index.d.ts +2 -1
  133. package/components/Stat.d.ts +4 -0
  134. package/components/StatusMessage/StatusMessage.cjs +84 -55
  135. package/components/StatusMessage/StatusMessage.cjs.map +1 -1
  136. package/components/StatusMessage/StatusMessage.d.ts +20 -36
  137. package/components/StatusMessage/StatusMessage.js +86 -57
  138. package/components/StatusMessage/StatusMessage.js.map +1 -1
  139. package/components/StatusMessage/StatusMessageContext.d.ts +16 -0
  140. package/components/StatusMessage/index.d.ts +4 -1
  141. package/components/StatusMessage.d.ts +4 -0
  142. package/components/Stepper/Stepper.cjs +289 -55
  143. package/components/Stepper/Stepper.cjs.map +1 -1
  144. package/components/Stepper/Stepper.d.ts +9 -20
  145. package/components/Stepper/Stepper.js +291 -57
  146. package/components/Stepper/Stepper.js.map +1 -1
  147. package/{hooks/Wizard/WizardContext.d.ts → components/Stepper/StepperContext.d.ts} +29 -23
  148. package/components/Stepper/_hooks/useHorizontalScroll.d.ts +19 -0
  149. package/components/Stepper/_parts/StepperScrollArrow.d.ts +19 -0
  150. package/components/Stepper/index.d.ts +6 -2
  151. package/components/Stepper.d.ts +4 -0
  152. package/components/Switch/Switch.cjs +5 -2
  153. package/components/Switch/Switch.cjs.map +1 -1
  154. package/components/Switch/Switch.d.ts +7 -2
  155. package/components/Switch/Switch.js +5 -2
  156. package/components/Switch/Switch.js.map +1 -1
  157. package/components/Tabs/Tabs.cjs +45 -29
  158. package/components/Tabs/Tabs.cjs.map +1 -1
  159. package/components/Tabs/Tabs.d.ts +21 -16
  160. package/components/Tabs/Tabs.js +46 -30
  161. package/components/Tabs/Tabs.js.map +1 -1
  162. package/components/Tabs/index.d.ts +4 -2
  163. package/components/Tabs.d.ts +4 -0
  164. package/components/Timeline/Timeline.cjs +3 -2
  165. package/components/Timeline/Timeline.cjs.map +1 -1
  166. package/components/Timeline/Timeline.d.ts +4 -8
  167. package/components/Timeline/Timeline.js +3 -2
  168. package/components/Timeline/Timeline.js.map +1 -1
  169. package/components/Timeline/index.d.ts +4 -2
  170. package/components/Timeline.d.ts +4 -0
  171. package/components/_shared/mergeSx.d.ts +7 -0
  172. package/{formField.sx-DfVbMe0V.js → formField.sx-8_QRnKxv.js} +2 -11
  173. package/formField.sx-8_QRnKxv.js.map +1 -0
  174. package/{formField.sx-CQ1mbk9M.cjs → formField.sx-BAX7KwMR.cjs} +10 -19
  175. package/formField.sx-BAX7KwMR.cjs.map +1 -0
  176. package/index.cjs +31 -2
  177. package/index.cjs.map +1 -1
  178. package/index.d.ts +1 -0
  179. package/index.js +16 -2
  180. package/index.js.map +1 -1
  181. package/mergeSx-BXoNZjB_.js +10 -0
  182. package/mergeSx-BXoNZjB_.js.map +1 -0
  183. package/mergeSx-Dbccoo_H.cjs +9 -0
  184. package/mergeSx-Dbccoo_H.cjs.map +1 -0
  185. package/mui.d.ts +3 -2
  186. package/package.json +6 -16
  187. package/theme/componentStyles.d.ts +1 -1
  188. package/tokens-BRrcP_p_.js +21 -0
  189. package/tokens-BRrcP_p_.js.map +1 -0
  190. package/tokens-jaWWNk39.cjs +20 -0
  191. package/tokens-jaWWNk39.cjs.map +1 -0
  192. package/utils/index.d.ts +2 -0
  193. package/{components/ScrollTopButton → utils}/scrollToTop.d.ts +6 -7
  194. package/components/AppBar/AppBarBrand.d.ts +0 -31
  195. package/components/AppBar/AppBarUserMenu.d.ts +0 -65
  196. package/components/Autocomplete/Autocomplete.types.d.ts +0 -1
  197. package/components/DatePicker/DatePicker.types.d.ts +0 -1
  198. package/components/DateTimePicker/DateTimePicker.types.d.ts +0 -1
  199. package/components/Input/Input.types.d.ts +0 -1
  200. package/components/PageLoader/PageLoader.cjs +0 -61
  201. package/components/PageLoader/PageLoader.cjs.map +0 -1
  202. package/components/PageLoader/PageLoader.d.ts +0 -38
  203. package/components/PageLoader/PageLoader.js +0 -61
  204. package/components/PageLoader/PageLoader.js.map +0 -1
  205. package/components/PageLoader/index.d.ts +0 -2
  206. package/components/PageLoader.d.ts +0 -6
  207. package/components/RadioGroup/RadioGroup.types.d.ts +0 -1
  208. package/components/ScrollTopButton/ScrollTopButton.cjs +0 -79
  209. package/components/ScrollTopButton/ScrollTopButton.cjs.map +0 -1
  210. package/components/ScrollTopButton/ScrollTopButton.d.ts +0 -48
  211. package/components/ScrollTopButton/ScrollTopButton.js +0 -79
  212. package/components/ScrollTopButton/ScrollTopButton.js.map +0 -1
  213. package/components/ScrollTopButton/index.d.ts +0 -4
  214. package/components/ScrollTopButton.d.ts +0 -6
  215. package/components/Select/Select.definitions.d.ts +0 -17
  216. package/components/Select/Select.types.d.ts +0 -1
  217. package/components/Select/_parts/SelectSearchHeader.d.ts +0 -15
  218. package/components/Select/_parts/SelectValue.d.ts +0 -22
  219. package/formField.sx-CQ1mbk9M.cjs.map +0 -1
  220. package/formField.sx-DfVbMe0V.js.map +0 -1
  221. package/hooks/Wizard/Wizard.cjs +0 -7
  222. package/hooks/Wizard/Wizard.cjs.map +0 -1
  223. package/hooks/Wizard/Wizard.js +0 -7
  224. package/hooks/Wizard/Wizard.js.map +0 -1
  225. package/hooks/Wizard/index.d.ts +0 -3
  226. package/hooks/Wizard/useWizard.d.ts +0 -9
  227. package/hooks/Wizard.d.ts +0 -2
  228. package/useWizard-CWdIxZzX.cjs +0 -94
  229. package/useWizard-CWdIxZzX.cjs.map +0 -1
  230. package/useWizard-CWq--C3o.js +0 -95
  231. package/useWizard-CWq--C3o.js.map +0 -1
  232. /package/{styles.css → index.css} +0 -0
@@ -1,79 +1,108 @@
1
- import { jsx, Fragment, jsxs } from "react/jsx-runtime";
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { useState, useId, createContext, useContext } from "react";
2
3
  import { Dialog, DialogContent, Box, Typography, DialogActions, Button, Alert } from "@mui/material";
3
- import { WarningAmber, ErrorOutline, CheckCircleOutline } from "@mui/icons-material";
4
+ import { CheckCircleOutline, ErrorOutline, WarningAmber } from "@mui/icons-material";
4
5
  const StatusMessage = ({
5
6
  title,
6
7
  description,
7
8
  messageType = "success",
8
9
  displayType = "alert",
9
10
  close,
10
- open = true
11
+ open: controlledOpen
11
12
  }) => {
12
- const getAlertVariant = () => {
13
- switch (messageType) {
14
- case "success":
15
- return "success";
16
- case "danger":
17
- return "error";
18
- case "warning":
19
- return "warning";
20
- default:
21
- return "info";
22
- }
23
- };
24
- const getIcon = () => {
25
- switch (messageType) {
26
- case "success":
27
- return /* @__PURE__ */ jsx(CheckCircleOutline, { sx: { fontSize: "64px", color: "success.main" } });
28
- case "danger":
29
- return /* @__PURE__ */ jsx(ErrorOutline, { sx: { fontSize: "64px", color: "error.main" } });
30
- case "warning":
31
- return /* @__PURE__ */ jsx(WarningAmber, { sx: { fontSize: "64px", color: "warning.main" } });
32
- default:
33
- return null;
34
- }
13
+ const [internalOpen, setInternalOpen] = useState(true);
14
+ const titleId = useId();
15
+ const descId = useId();
16
+ const isControlled = controlledOpen !== void 0;
17
+ const isOpen = isControlled ? controlledOpen : internalOpen;
18
+ const handleClose = () => {
19
+ if (!isControlled) setInternalOpen(false);
20
+ close == null ? void 0 : close();
35
21
  };
36
- const alertVariant = getAlertVariant();
37
- if (!description) {
38
- return null;
22
+ const alertVariant = messageType === "danger" ? "error" : messageType;
23
+ const icon = messageType === "success" ? /* @__PURE__ */ jsx(CheckCircleOutline, { sx: { fontSize: 64, color: "success.main" } }) : messageType === "danger" ? /* @__PURE__ */ jsx(ErrorOutline, { sx: { fontSize: 64, color: "error.main" } }) : /* @__PURE__ */ jsx(WarningAmber, { sx: { fontSize: 64, color: "warning.main" } });
24
+ if (!description) return null;
25
+ if (!isOpen) return null;
26
+ if (displayType === "modal") {
27
+ return /* @__PURE__ */ jsxs(
28
+ Dialog,
29
+ {
30
+ open: isOpen,
31
+ onClose: handleClose,
32
+ "aria-labelledby": title ? titleId : void 0,
33
+ "aria-describedby": descId,
34
+ maxWidth: "md",
35
+ slotProps: {
36
+ paper: {
37
+ sx: { borderRadius: "16px", p: 2 }
38
+ }
39
+ },
40
+ children: [
41
+ /* @__PURE__ */ jsxs(
42
+ DialogContent,
43
+ {
44
+ sx: {
45
+ display: "flex",
46
+ flexDirection: "column",
47
+ alignItems: "center",
48
+ textAlign: "center",
49
+ p: 4,
50
+ gap: 2
51
+ },
52
+ children: [
53
+ /* @__PURE__ */ jsx(Box, { sx: { mb: 2 }, children: icon }),
54
+ title && /* @__PURE__ */ jsx(
55
+ Typography,
56
+ {
57
+ id: titleId,
58
+ variant: "h4",
59
+ component: "h2",
60
+ sx: { fontWeight: "bold" },
61
+ children: title
62
+ }
63
+ ),
64
+ /* @__PURE__ */ jsx(Typography, { id: descId, variant: "body1", color: "text.secondary", children: description })
65
+ ]
66
+ }
67
+ ),
68
+ /* @__PURE__ */ jsx(DialogActions, { sx: { justifyContent: "center", p: 2 }, children: /* @__PURE__ */ jsx(Button, { onClick: handleClose, variant: "contained", color: alertVariant, children: "Aceptar" }) })
69
+ ]
70
+ }
71
+ );
39
72
  }
40
- return /* @__PURE__ */ jsx(Fragment, { children: displayType === "modal" ? /* @__PURE__ */ jsxs(
41
- Dialog,
42
- {
43
- open,
44
- onClose: close,
45
- "aria-labelledby": "message-dialog-title",
46
- maxWidth: "md",
47
- PaperProps: {
48
- sx: {
49
- borderRadius: "16px",
50
- p: 2
51
- }
52
- },
53
- children: [
54
- /* @__PURE__ */ jsxs(DialogContent, { sx: { display: "flex", flexDirection: "column", alignItems: "center", textAlign: "center", p: 4, gap: 2 }, children: [
55
- /* @__PURE__ */ jsx(Box, { sx: { mb: 2 }, children: getIcon() }),
56
- /* @__PURE__ */ jsx(Typography, { variant: "h4", component: "h2", sx: { fontWeight: "bold" }, children: title || "" }),
57
- /* @__PURE__ */ jsx(Typography, { variant: "body1", color: "text.secondary", children: description })
58
- ] }),
59
- close && /* @__PURE__ */ jsx(DialogActions, { sx: { justifyContent: "center", p: 2 }, children: /* @__PURE__ */ jsx(Button, { onClick: close, variant: "contained", color: alertVariant, children: "Aceptar" }) })
60
- ]
61
- }
62
- ) : /* @__PURE__ */ jsxs(
73
+ return /* @__PURE__ */ jsxs(
63
74
  Alert,
64
75
  {
65
76
  severity: alertVariant,
66
77
  sx: { mb: 2, mt: 2 },
67
- onClose: close,
68
- action: close && /* @__PURE__ */ jsx(Button, { onClick: close, size: "small", color: "inherit", children: "Cerrar" }),
78
+ onClose: close !== void 0 ? handleClose : void 0,
69
79
  children: [
70
- /* @__PURE__ */ jsx(Typography, { variant: "h6", sx: { fontWeight: "bold" }, children: title }),
80
+ title && /* @__PURE__ */ jsx(Typography, { variant: "h6", sx: { fontWeight: "bold" }, children: title }),
71
81
  /* @__PURE__ */ jsx(Typography, { variant: "body2", sx: { mt: 1 }, children: description })
72
82
  ]
73
83
  }
74
- ) });
84
+ );
85
+ };
86
+ const initialValues = {
87
+ state: void 0,
88
+ setMessage: () => {
89
+ },
90
+ cleanMessage: () => {
91
+ }
92
+ };
93
+ const StatusMessageContext = createContext(initialValues);
94
+ const useStatusMessageContext = () => useContext(StatusMessageContext);
95
+ const StatusMessageProvider = ({ children }) => {
96
+ const [stateMessage, setMessage] = useState(void 0);
97
+ const cleanMessage = () => {
98
+ setMessage(void 0);
99
+ };
100
+ return /* @__PURE__ */ jsx(StatusMessageContext.Provider, { value: { setMessage, cleanMessage, state: stateMessage }, children });
75
101
  };
76
102
  export {
77
- StatusMessage
103
+ StatusMessage,
104
+ StatusMessageProvider,
105
+ StatusMessage as default,
106
+ useStatusMessageContext
78
107
  };
79
108
  //# sourceMappingURL=StatusMessage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StatusMessage.js","sources":["../../../src/components/StatusMessage/StatusMessage.tsx"],"sourcesContent":["import React from 'react';\nimport {\n Alert,\n Box,\n Typography,\n Dialog,\n DialogContent,\n DialogActions,\n Button\n} from '@mui/material';\nimport {\n ErrorOutline as ErrorOutlineIcon,\n CheckCircleOutline as CheckCircleOutlineIcon,\n WarningAmber as WarningAmberIcon\n} from '@mui/icons-material';\n\n/**\n * `StatusMessage` es un componente de React que muestra mensajes de éxito, error o advertencia\n * en un modal o una alerta, utilizando el sistema de diseño de Material-UI.\n *\n * El componente puede mostrar alertas con estilos específicos o un modal personalizable\n * usando `Dialog` y otros componentes de MUI. También puede incluir una función opcional\n * para cerrar el mensaje.\n *\n * @param {StatusMessageProps} props - Las propiedades del componente.\n * @param {string | undefined} props.title - Título del mensaje que se muestra en el modal o alerta.\n * @param {string} [props.description] - Descripción o contenido detallado del mensaje.\n * @param {'success' | 'danger' | 'warning'} [props.messageType='success'] - Tipo de mensaje que determina el estilo visual. 'danger' se mapea a 'error' de MUI.\n * @param {'alert' | 'modal'} [props.displayType='alert'] - Determina si el mensaje se muestra como alerta o modal.\n * @param {() => void} [props.close] - Función opcional para ejecutar al cerrar el mensaje.\n * @returns {React.FC<StatusMessageProps>} Un componente funcional de React que muestra mensajes personalizados.\n *\n * @example\n * // Ejemplo de uso como una alerta:\n * <StatusMessage\n * title=\"Operación Exitosa\"\n * description=\"La operación se ha completado correctamente.\"\n * messageType=\"success\"\n * displayType=\"alert\"\n * />\n *\n * // Ejemplo de uso como un modal:\n * <StatusMessage\n * title=\"Advertencia\"\n * description=\"Se ha producido un error inesperado.\"\n * messageType=\"danger\"\n * displayType=\"modal\"\n * close={() => console.log('Modal cerrado')}\n * />\n */\n\nexport interface StatusMessageProps {\n title: string | undefined;\n description?: string;\n messageType?: 'success' | 'danger' | 'warning';\n displayType?: 'alert' | 'modal';\n close?: () => void;\n // Propiedad para controlar la visibilidad del modal desde el padre\n open?: boolean;\n}\n\nconst StatusMessage = ({\n title,\n description,\n messageType = 'success',\n displayType = 'alert',\n close,\n open = true,\n}: StatusMessageProps) => {\n\n const getAlertVariant = () => {\n switch (messageType) {\n case 'success':\n return 'success';\n case 'danger':\n return 'error';\n case 'warning':\n return 'warning';\n default:\n return 'info'; // Fallback\n }\n };\n\n const getIcon = () => {\n switch (messageType) {\n case 'success':\n return <CheckCircleOutlineIcon sx={{ fontSize: '64px', color: 'success.main' }} />;\n case 'danger':\n return <ErrorOutlineIcon sx={{ fontSize: '64px', color: 'error.main' }} />;\n case 'warning':\n return <WarningAmberIcon sx={{ fontSize: '64px', color: 'warning.main' }} />;\n default:\n return null;\n }\n };\n\n const alertVariant = getAlertVariant();\n\n if (!description) {\n return null;\n }\n\n return (\n <>\n {displayType === 'modal' ? (\n <Dialog\n open={open}\n onClose={close}\n aria-labelledby=\"message-dialog-title\"\n maxWidth=\"md\"\n PaperProps={{\n sx: {\n borderRadius: '16px',\n p: 2,\n },\n }}\n >\n <DialogContent sx={{ display: 'flex', flexDirection: 'column', alignItems: 'center', textAlign: 'center', p: 4, gap: 2 }}>\n <Box sx={{ mb: 2 }}>\n {getIcon()}\n </Box>\n <Typography variant=\"h4\" component=\"h2\" sx={{ fontWeight: 'bold' }}>\n {title || ''}\n </Typography>\n <Typography variant=\"body1\" color=\"text.secondary\">\n {description}\n </Typography>\n </DialogContent>\n {close && (\n <DialogActions sx={{ justifyContent: 'center', p: 2 }}>\n <Button onClick={close} variant=\"contained\" color={alertVariant}>\n Aceptar\n </Button>\n </DialogActions>\n )}\n </Dialog>\n ) : (\n <Alert\n severity={alertVariant}\n sx={{ mb: 2, mt: 2 }}\n onClose={close}\n action={\n close && (\n <Button onClick={close} size=\"small\" color=\"inherit\">\n Cerrar\n </Button>\n )\n }\n >\n <Typography variant=\"h6\" sx={{ fontWeight: 'bold' }}>\n {title}\n </Typography>\n <Typography variant=\"body2\" sx={{ mt: 1 }}>\n {description}\n </Typography>\n </Alert>\n )}\n </>\n );\n};\n\nexport default StatusMessage;\n"],"names":["CheckCircleOutlineIcon","ErrorOutlineIcon","WarningAmberIcon"],"mappings":";;;AA6DA,MAAM,gBAAgB,CAAC;AAAA,EACrB;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,cAAc;AAAA,EACd;AAAA,EACA,OAAO;AACT,MAA0B;AAExB,QAAM,kBAAkB,MAAM;AAC5B,YAAQ,aAAA;AAAA,MACN,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IAAA;AAAA,EAEb;AAEA,QAAM,UAAU,MAAM;AACpB,YAAQ,aAAA;AAAA,MACN,KAAK;AACH,eAAO,oBAACA,sBAAuB,IAAI,EAAE,UAAU,QAAQ,OAAO,kBAAkB;AAAA,MAClF,KAAK;AACH,eAAO,oBAACC,gBAAiB,IAAI,EAAE,UAAU,QAAQ,OAAO,gBAAgB;AAAA,MAC1E,KAAK;AACH,eAAO,oBAACC,gBAAiB,IAAI,EAAE,UAAU,QAAQ,OAAO,kBAAkB;AAAA,MAC5E;AACE,eAAO;AAAA,IAAA;AAAA,EAEb;AAEA,QAAM,eAAe,gBAAA;AAErB,MAAI,CAAC,aAAa;AAChB,WAAO;AAAA,EACT;AAEA,SACE,oBAAA,UAAA,EACG,0BAAgB,UACf;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,SAAS;AAAA,MACT,mBAAgB;AAAA,MAChB,UAAS;AAAA,MACT,YAAY;AAAA,QACV,IAAI;AAAA,UACF,cAAc;AAAA,UACd,GAAG;AAAA,QAAA;AAAA,MACL;AAAA,MAGF,UAAA;AAAA,QAAA,qBAAC,eAAA,EAAc,IAAI,EAAE,SAAS,QAAQ,eAAe,UAAU,YAAY,UAAU,WAAW,UAAU,GAAG,GAAG,KAAK,KACnH,UAAA;AAAA,UAAA,oBAAC,OAAI,IAAI,EAAE,IAAI,KACZ,qBACH;AAAA,UACA,oBAAC,YAAA,EAAW,SAAQ,MAAK,WAAU,MAAK,IAAI,EAAE,YAAY,OAAA,GACvD,UAAA,SAAS,GAAA,CACZ;AAAA,8BACC,YAAA,EAAW,SAAQ,SAAQ,OAAM,kBAC/B,UAAA,YAAA,CACH;AAAA,QAAA,GACF;AAAA,QACC,SACC,oBAAC,eAAA,EAAc,IAAI,EAAE,gBAAgB,UAAU,GAAG,EAAA,GAChD,UAAA,oBAAC,QAAA,EAAO,SAAS,OAAO,SAAQ,aAAY,OAAO,cAAc,qBAEjE,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,IAIJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,UAAU;AAAA,MACV,IAAI,EAAE,IAAI,GAAG,IAAI,EAAA;AAAA,MACjB,SAAS;AAAA,MACT,QACE,SACE,oBAAC,QAAA,EAAO,SAAS,OAAO,MAAK,SAAQ,OAAM,WAAU,UAAA,SAAA,CAErD;AAAA,MAIJ,UAAA;AAAA,QAAA,oBAAC,YAAA,EAAW,SAAQ,MAAK,IAAI,EAAE,YAAY,OAAA,GACxC,UAAA,MAAA,CACH;AAAA,QACA,oBAAC,cAAW,SAAQ,SAAQ,IAAI,EAAE,IAAI,EAAA,GACnC,UAAA,YAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAGN;AAEJ;"}
1
+ {"version":3,"file":"StatusMessage.js","sources":["../../../src/components/StatusMessage/StatusMessage.tsx","../../../src/components/StatusMessage/StatusMessageContext.tsx"],"sourcesContent":["import { useId, useState, type FC } from 'react';\nimport {\n Alert,\n Box,\n Typography,\n Dialog,\n DialogContent,\n DialogActions,\n Button,\n} from '@mui/material';\nimport {\n ErrorOutline as ErrorOutlineIcon,\n CheckCircleOutline as CheckCircleOutlineIcon,\n WarningAmber as WarningAmberIcon,\n} from '@mui/icons-material';\n\nexport interface StatusMessageProps {\n /** Título del mensaje. */\n title?: string;\n /** Descripción/contenido detallado. Requerido para que el componente renderice. */\n description?: string;\n /** Tipo de mensaje (controla color + icono). `danger` mapea a `error` de MUI. */\n messageType?: 'success' | 'danger' | 'warning';\n /** Forma de presentación: alerta inline o modal. Default: `'alert'`. */\n displayType?: 'alert' | 'modal';\n /** Callback al cerrar. Si se omite, no se muestra botón de cerrar. */\n close?: () => void;\n /**\n * Controla visibilidad. Si se omite, el componente maneja su propio\n * state (se oculta solo al llamar `close`). Si se pasa, queda controlled\n * y el consumer es responsable de actualizarlo.\n */\n open?: boolean;\n}\n\n/**\n * Mensaje de éxito / error / advertencia en forma de alerta inline o modal.\n *\n * - **Uncontrolled**: sin pasar `open`, el componente maneja su propia\n * visibilidad. Al llamar `close`, se oculta automáticamente.\n * - **Controlled**: pasando `open`, el consumer decide cuándo mostrar/ocultar.\n */\nexport const StatusMessage: FC<StatusMessageProps> = ({\n title,\n description,\n messageType = 'success',\n displayType = 'alert',\n close,\n open: controlledOpen,\n}) => {\n const [internalOpen, setInternalOpen] = useState(true);\n const titleId = useId();\n const descId = useId();\n\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n const handleClose = () => {\n if (!isControlled) setInternalOpen(false);\n close?.();\n };\n\n const alertVariant = messageType === 'danger' ? 'error' : messageType;\n\n const icon =\n messageType === 'success' ? (\n <CheckCircleOutlineIcon sx={{ fontSize: 64, color: 'success.main' }} />\n ) : messageType === 'danger' ? (\n <ErrorOutlineIcon sx={{ fontSize: 64, color: 'error.main' }} />\n ) : (\n <WarningAmberIcon sx={{ fontSize: 64, color: 'warning.main' }} />\n );\n\n if (!description) return null;\n if (!isOpen) return null;\n\n if (displayType === 'modal') {\n return (\n <Dialog\n open={isOpen}\n onClose={handleClose}\n aria-labelledby={title ? titleId : undefined}\n aria-describedby={descId}\n maxWidth=\"md\"\n slotProps={{\n paper: {\n sx: { borderRadius: '16px', p: 2 },\n },\n }}\n >\n <DialogContent\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n textAlign: 'center',\n p: 4,\n gap: 2,\n }}\n >\n <Box sx={{ mb: 2 }}>{icon}</Box>\n {title && (\n <Typography\n id={titleId}\n variant=\"h4\"\n component=\"h2\"\n sx={{ fontWeight: 'bold' }}\n >\n {title}\n </Typography>\n )}\n <Typography id={descId} variant=\"body1\" color=\"text.secondary\">\n {description}\n </Typography>\n </DialogContent>\n <DialogActions sx={{ justifyContent: 'center', p: 2 }}>\n <Button onClick={handleClose} variant=\"contained\" color={alertVariant}>\n Aceptar\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n return (\n <Alert\n severity={alertVariant}\n sx={{ mb: 2, mt: 2 }}\n onClose={close !== undefined ? handleClose : undefined}\n >\n {title && (\n <Typography variant=\"h6\" sx={{ fontWeight: 'bold' }}>\n {title}\n </Typography>\n )}\n <Typography variant=\"body2\" sx={{ mt: 1 }}>\n {description}\n </Typography>\n </Alert>\n );\n};\n\nexport default StatusMessage;\n","import {\n createContext,\n useState,\n useContext,\n type Dispatch,\n type SetStateAction,\n type ReactNode,\n} from 'react';\nimport type { StatusMessageProps } from './StatusMessage';\n\nexport type StatusMessageState = {\n [K in 'title' | 'description' | 'messageType']: StatusMessageProps[K] | undefined;\n} & Pick<StatusMessageProps, 'displayType'>;\n\ninterface StatusMessageContextValue {\n state: StatusMessageState | undefined;\n setMessage: Dispatch<SetStateAction<StatusMessageState | undefined>>;\n cleanMessage: () => void;\n}\n\nconst initialValues: StatusMessageContextValue = {\n state: undefined,\n setMessage: () => {},\n cleanMessage: () => {},\n};\n\nconst StatusMessageContext = createContext<StatusMessageContextValue>(initialValues);\n\nexport const useStatusMessageContext = () => useContext(StatusMessageContext);\n\ninterface StatusMessageProviderProps {\n children: ReactNode;\n}\n\nexport const StatusMessageProvider = ({ children }: StatusMessageProviderProps) => {\n const [stateMessage, setMessage] = useState<StatusMessageState | undefined>(undefined);\n const cleanMessage = () => {\n setMessage(undefined);\n };\n\n return (\n <StatusMessageContext.Provider value={{ setMessage, cleanMessage, state: stateMessage }}>\n {children}\n </StatusMessageContext.Provider>\n );\n};\n"],"names":["CheckCircleOutlineIcon","ErrorOutlineIcon","WarningAmberIcon"],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { Dispatch, SetStateAction, ReactNode } from 'react';
2
+ import { StatusMessageProps } from './StatusMessage';
3
+ export type StatusMessageState = {
4
+ [K in 'title' | 'description' | 'messageType']: StatusMessageProps[K] | undefined;
5
+ } & Pick<StatusMessageProps, 'displayType'>;
6
+ interface StatusMessageContextValue {
7
+ state: StatusMessageState | undefined;
8
+ setMessage: Dispatch<SetStateAction<StatusMessageState | undefined>>;
9
+ cleanMessage: () => void;
10
+ }
11
+ export declare const useStatusMessageContext: () => StatusMessageContextValue;
12
+ interface StatusMessageProviderProps {
13
+ children: ReactNode;
14
+ }
15
+ export declare const StatusMessageProvider: ({ children }: StatusMessageProviderProps) => import("react/jsx-runtime").JSX.Element;
16
+ export {};
@@ -1 +1,4 @@
1
- export { default as StatusMessage } from './StatusMessage';
1
+ export { StatusMessage, default } from './StatusMessage';
2
+ export type { StatusMessageProps } from './StatusMessage';
3
+ export { StatusMessageProvider, useStatusMessageContext } from './StatusMessageContext';
4
+ export type { StatusMessageState } from './StatusMessageContext';
@@ -1,2 +1,6 @@
1
1
  export * from './StatusMessage/index'
2
2
  export {}
3
+ import _default from './StatusMessage/index'
4
+ export default _default
5
+ export * from './StatusMessage/index'
6
+ export {}
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
  var __defProp = Object.defineProperty;
3
- var __defProps = Object.defineProperties;
4
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
5
3
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
6
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
5
  var __propIsEnum = Object.prototype.propertyIsEnumerable;
@@ -17,76 +15,312 @@ var __spreadValues = (a, b) => {
17
15
  }
18
16
  return a;
19
17
  };
20
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
21
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
18
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
22
19
  const jsxRuntime = require("react/jsx-runtime");
20
+ const React = require("react");
23
21
  const material = require("@mui/material");
24
- const useWizard = require("../../useWizard-CWdIxZzX.cjs");
22
+ const ChevronLeftIcon = require("@mui/icons-material/ChevronLeft");
23
+ const ChevronRightIcon = require("@mui/icons-material/ChevronRight");
24
+ const defaultValue = {
25
+ currentStep: 0,
26
+ totalSteps: 0,
27
+ isFirst: true,
28
+ isLast: true,
29
+ completed: false,
30
+ nextStep: () => {
31
+ },
32
+ prevStep: () => {
33
+ },
34
+ goToStep: () => {
35
+ },
36
+ submitStep: () => {
37
+ },
38
+ reset: () => {
39
+ }
40
+ };
41
+ const StepperContext = React.createContext(defaultValue);
42
+ function useStepper() {
43
+ return React.useContext(StepperContext);
44
+ }
45
+ const StepperProvider = ({
46
+ totalSteps,
47
+ initialStep = 0,
48
+ onSubmit,
49
+ onStepChange,
50
+ children
51
+ }) => {
52
+ const [currentStep, setCurrentStep] = React.useState(initialStep);
53
+ const [completed, setCompleted] = React.useState(false);
54
+ const changeStep = React.useCallback(
55
+ (newStep) => {
56
+ if (newStep < 0 || newStep >= totalSteps) return;
57
+ if (newStep === currentStep) return;
58
+ onStepChange == null ? void 0 : onStepChange(newStep, currentStep);
59
+ setCurrentStep(newStep);
60
+ },
61
+ [currentStep, totalSteps, onStepChange]
62
+ );
63
+ const nextStep = React.useCallback(() => {
64
+ changeStep(currentStep + 1);
65
+ }, [changeStep, currentStep]);
66
+ const prevStep = React.useCallback(() => {
67
+ changeStep(currentStep - 1);
68
+ }, [changeStep, currentStep]);
69
+ const goToStep = React.useCallback(
70
+ (stepNumber) => {
71
+ changeStep(stepNumber);
72
+ },
73
+ [changeStep]
74
+ );
75
+ const submitStep = React.useCallback(() => {
76
+ setCompleted(true);
77
+ onSubmit == null ? void 0 : onSubmit(currentStep);
78
+ }, [currentStep, onSubmit]);
79
+ const reset = React.useCallback(() => {
80
+ setCurrentStep(initialStep);
81
+ setCompleted(false);
82
+ }, [initialStep]);
83
+ const value = React.useMemo(
84
+ () => ({
85
+ currentStep,
86
+ totalSteps,
87
+ isFirst: currentStep === 0,
88
+ isLast: currentStep === totalSteps - 1,
89
+ completed,
90
+ nextStep,
91
+ prevStep,
92
+ goToStep,
93
+ submitStep,
94
+ reset
95
+ }),
96
+ [
97
+ currentStep,
98
+ totalSteps,
99
+ completed,
100
+ nextStep,
101
+ prevStep,
102
+ goToStep,
103
+ submitStep,
104
+ reset
105
+ ]
106
+ );
107
+ return /* @__PURE__ */ jsxRuntime.jsx(StepperContext.Provider, { value, children });
108
+ };
109
+ function useHorizontalScroll(enabled, deps = []) {
110
+ const scrollRef = React.useRef(null);
111
+ const [canScrollLeft, setCanScrollLeft] = React.useState(false);
112
+ const [canScrollRight, setCanScrollRight] = React.useState(false);
113
+ const updateScrollState = React.useCallback(() => {
114
+ const el = scrollRef.current;
115
+ if (!el) return;
116
+ const { scrollLeft, scrollWidth, clientWidth } = el;
117
+ setCanScrollLeft(scrollLeft > 1);
118
+ setCanScrollRight(scrollLeft + clientWidth < scrollWidth - 1);
119
+ }, []);
120
+ React.useLayoutEffect(() => {
121
+ if (!enabled) return;
122
+ updateScrollState();
123
+ }, [enabled, updateScrollState, ...deps]);
124
+ React.useEffect(() => {
125
+ if (!enabled) return;
126
+ const el = scrollRef.current;
127
+ if (!el) return;
128
+ el.addEventListener("scroll", updateScrollState, { passive: true });
129
+ const ro = new ResizeObserver(updateScrollState);
130
+ ro.observe(el);
131
+ return () => {
132
+ el.removeEventListener("scroll", updateScrollState);
133
+ ro.disconnect();
134
+ };
135
+ }, [enabled, updateScrollState]);
136
+ const scrollBy = React.useCallback((delta) => {
137
+ const el = scrollRef.current;
138
+ if (!el) return;
139
+ el.scrollBy({ left: delta, behavior: "smooth" });
140
+ }, []);
141
+ return { scrollRef, canScrollLeft, canScrollRight, scrollBy };
142
+ }
143
+ const StepperScrollArrow = ({
144
+ direction,
145
+ enabled,
146
+ visible,
147
+ onClick
148
+ }) => {
149
+ const isLeft = direction === "left";
150
+ const Icon = isLeft ? ChevronLeftIcon : ChevronRightIcon;
151
+ const ariaLabel = isLeft ? "Anterior" : "Siguiente";
152
+ return /* @__PURE__ */ jsxRuntime.jsx(
153
+ material.IconButton,
154
+ {
155
+ "aria-label": ariaLabel,
156
+ size: "small",
157
+ onClick,
158
+ disabled: !enabled,
159
+ sx: {
160
+ flex: "0 0 auto",
161
+ // Reservamos el slot siempre que haya overflow en algún lado,
162
+ // así el área scroll tiene un ancho estable (no saltan los
163
+ // steps cuando aparece/desaparece la flecha).
164
+ visibility: visible ? "visible" : "hidden"
165
+ },
166
+ children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { fontSize: "small" })
167
+ }
168
+ );
169
+ };
25
170
  const Stepper = ({
26
171
  children,
27
172
  orientation = "horizontal",
28
173
  alternateLabel = false,
29
- responsive = true,
30
- mobileBreakpoint = "sm",
31
- sx,
32
- currentStep: currentStepProp
174
+ currentStep: currentStepProp,
175
+ keepMounted = false,
176
+ sx
33
177
  }) => {
34
- const theme = material.useTheme();
35
- const isMobile = material.useMediaQuery(theme.breakpoints.down(mobileBreakpoint));
36
- const mobileAdapt = responsive && isMobile && orientation === "horizontal";
37
- const effectiveOrientation = mobileAdapt && children.length > 3 ? "vertical" : orientation;
38
- const hideLabelsOnMobile = mobileAdapt && children.length <= 3;
39
- const effectiveAlternateLabel = alternateLabel && effectiveOrientation === "horizontal";
40
- const wizard = useWizard.useWizard();
41
- const currentStep = currentStepProp !== void 0 ? currentStepProp : wizard.totalSteps > 0 ? wizard.currentStep : 0;
42
- return /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: __spreadValues({ width: "100%", overflowX: "hidden" }, sx), children: [
43
- /* @__PURE__ */ jsxRuntime.jsx(
44
- material.Stepper,
178
+ const stepperCtx = useStepper();
179
+ const currentStep = currentStepProp !== void 0 ? currentStepProp : stepperCtx.totalSteps > 0 ? stepperCtx.currentStep : 0;
180
+ const isHorizontal = orientation === "horizontal";
181
+ const steps = React.Children.toArray(children).filter(
182
+ (child) => {
183
+ var _a;
184
+ return React.isValidElement(child) && ((_a = child.type) == null ? void 0 : _a.displayName) === "Step";
185
+ }
186
+ );
187
+ const { scrollRef, canScrollLeft, canScrollRight, scrollBy } = useHorizontalScroll(
188
+ isHorizontal,
189
+ [steps.length, currentStep]
190
+ );
191
+ const showArrows = isHorizontal && (canScrollLeft || canScrollRight);
192
+ return /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx, children: [
193
+ /* @__PURE__ */ jsxRuntime.jsxs(
194
+ material.Box,
45
195
  {
46
- activeStep: currentStep,
47
- orientation: effectiveOrientation,
48
- alternativeLabel: effectiveAlternateLabel,
49
- sx: __spreadValues({}, effectiveOrientation === "horizontal" && {
50
- flexWrap: "wrap",
51
- rowGap: 1,
52
- "& .MuiStepLabel-label": { textAlign: "center" }
53
- }),
54
- children: children.map((child, idx) => {
55
- const { label, completed, disabled, className, sx: stepSx, dotColor, activeDotColor, completedDotColor, iconTextColor } = child.props;
56
- return /* @__PURE__ */ jsxRuntime.jsx(material.Step, { completed, disabled, className, sx: stepSx, children: /* @__PURE__ */ jsxRuntime.jsx(
57
- material.StepLabel,
196
+ sx: isHorizontal ? { display: "flex", alignItems: "center", width: "100%", gap: 0.5 } : void 0,
197
+ children: [
198
+ isHorizontal && /* @__PURE__ */ jsxRuntime.jsx(
199
+ StepperScrollArrow,
200
+ {
201
+ direction: "left",
202
+ enabled: canScrollLeft,
203
+ visible: showArrows,
204
+ onClick: () => scrollBy(-160)
205
+ }
206
+ ),
207
+ /* @__PURE__ */ jsxRuntime.jsx(
208
+ material.Box,
58
209
  {
59
- sx: __spreadProps(__spreadValues({
60
- pointerEvents: "none"
61
- }, hideLabelsOnMobile && {
62
- "& .MuiStepLabel-labelContainer": { display: "none" }
63
- }), {
64
- "& .MuiStepIcon-root": {
65
- color: dotColor
66
- },
67
- "& .MuiStepIcon-active": {
68
- color: activeDotColor
69
- },
70
- "& .MuiStepIcon-completed": {
71
- color: completedDotColor
72
- },
73
- "& .MuiStepIcon-text": {
74
- fill: iconTextColor
210
+ ref: scrollRef,
211
+ sx: isHorizontal ? {
212
+ flex: "1 1 auto",
213
+ minWidth: 0,
214
+ overflowX: "auto",
215
+ scrollBehavior: "smooth",
216
+ WebkitOverflowScrolling: "touch",
217
+ scrollbarWidth: "none",
218
+ "&::-webkit-scrollbar": { display: "none" }
219
+ } : void 0,
220
+ children: /* @__PURE__ */ jsxRuntime.jsx(
221
+ material.Stepper,
222
+ {
223
+ activeStep: currentStep,
224
+ orientation,
225
+ alternativeLabel: alternateLabel,
226
+ sx: __spreadValues(__spreadValues({}, isHorizontal && {
227
+ display: "inline-flex",
228
+ flexWrap: "nowrap",
229
+ minWidth: "100%",
230
+ width: "max-content",
231
+ "& .MuiStep-root": { flex: "0 0 auto", minWidth: 120 }
232
+ }), alternateLabel && { justifyContent: "center" }),
233
+ children: steps.map((step, idx) => {
234
+ var _a;
235
+ const {
236
+ label,
237
+ completed,
238
+ disabled,
239
+ className,
240
+ sx: stepSx,
241
+ dotColor,
242
+ activeDotColor,
243
+ completedDotColor,
244
+ iconTextColor
245
+ } = step.props;
246
+ const key = (_a = step.key) != null ? _a : idx;
247
+ return /* @__PURE__ */ jsxRuntime.jsx(
248
+ material.Step,
249
+ {
250
+ completed,
251
+ disabled,
252
+ className,
253
+ sx: stepSx,
254
+ children: /* @__PURE__ */ jsxRuntime.jsx(
255
+ material.StepLabel,
256
+ {
257
+ sx: {
258
+ pointerEvents: "none",
259
+ "& .MuiStepIcon-root": { color: dotColor },
260
+ "& .MuiStepIcon-active": { color: activeDotColor },
261
+ "& .MuiStepIcon-completed": { color: completedDotColor },
262
+ "& .MuiStepIcon-text": { fill: iconTextColor }
263
+ },
264
+ children: label
265
+ }
266
+ )
267
+ },
268
+ key
269
+ );
270
+ })
75
271
  }
76
- }),
77
- children: label
272
+ )
78
273
  }
79
- ) }, idx);
80
- })
274
+ ),
275
+ isHorizontal && /* @__PURE__ */ jsxRuntime.jsx(
276
+ StepperScrollArrow,
277
+ {
278
+ direction: "right",
279
+ enabled: canScrollRight,
280
+ visible: showArrows,
281
+ onClick: () => scrollBy(160)
282
+ }
283
+ )
284
+ ]
81
285
  }
82
286
  ),
83
- /* @__PURE__ */ jsxRuntime.jsx(material.Box, { mt: 2, children: children.map(
84
- (child, idx) => idx === currentStep ? /* @__PURE__ */ jsxRuntime.jsx(material.Box, { children: child.props.children }, idx) : null
85
- ) })
287
+ /* @__PURE__ */ jsxRuntime.jsx(
288
+ material.Box,
289
+ {
290
+ mt: 2,
291
+ sx: {
292
+ display: "flex",
293
+ justifyContent: "center"
294
+ },
295
+ children: keepMounted ? steps.map((step, idx) => {
296
+ var _a;
297
+ const key = (_a = step.key) != null ? _a : idx;
298
+ const isActive = idx === currentStep;
299
+ return /* @__PURE__ */ jsxRuntime.jsx(
300
+ material.Box,
301
+ {
302
+ sx: { display: isActive ? "block" : "none", width: "100%" },
303
+ "aria-hidden": !isActive,
304
+ children: step.props.children
305
+ },
306
+ key
307
+ );
308
+ }) : steps.map((step, idx) => {
309
+ var _a;
310
+ if (idx !== currentStep) return null;
311
+ const key = (_a = step.key) != null ? _a : idx;
312
+ return /* @__PURE__ */ jsxRuntime.jsx(material.Box, { children: step.props.children }, key);
313
+ })
314
+ }
315
+ )
86
316
  ] });
87
317
  };
88
318
  const Step = (_) => null;
89
319
  Step.displayName = "Step";
90
320
  exports.Step = Step;
91
321
  exports.Stepper = Stepper;
322
+ exports.StepperContext = StepperContext;
323
+ exports.StepperProvider = StepperProvider;
324
+ exports.default = Stepper;
325
+ exports.useStepper = useStepper;
92
326
  //# sourceMappingURL=Stepper.cjs.map