@soyfri/shared-library 2.0.0-beta.13 → 2.0.0-beta.15

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 (289) hide show
  1. package/{Autocomplete-C2x-lBvZ.cjs → Autocomplete-4i0dNDKr.cjs} +55 -33
  2. package/Autocomplete-4i0dNDKr.cjs.map +1 -0
  3. package/{Autocomplete-BA-cGASd.js → Autocomplete-i3-V38n1.js} +56 -34
  4. package/Autocomplete-i3-V38n1.js.map +1 -0
  5. package/{Avatar-BJTr-PBd.js → Avatar-CgT7955R.js} +18 -19
  6. package/Avatar-CgT7955R.js.map +1 -0
  7. package/{Avatar-9L7YMxya.cjs → Avatar-CuSrK8Wn.cjs} +18 -19
  8. package/Avatar-CuSrK8Wn.cjs.map +1 -0
  9. package/Button-C17mExpd.cjs.map +1 -1
  10. package/Button-UkkP-bNw.js.map +1 -1
  11. package/Card-B1wtavyl.js +98 -0
  12. package/Card-B1wtavyl.js.map +1 -0
  13. package/Card-DfdU610V.cjs +97 -0
  14. package/Card-DfdU610V.cjs.map +1 -0
  15. package/Checkbox-BCqMFWt4.cjs +187 -0
  16. package/Checkbox-BCqMFWt4.cjs.map +1 -0
  17. package/Checkbox-gB5YKkVo.js +188 -0
  18. package/Checkbox-gB5YKkVo.js.map +1 -0
  19. package/{DatePicker-DLSfkgGA.cjs → DatePicker-CtCFqXDw.cjs} +41 -64
  20. package/DatePicker-CtCFqXDw.cjs.map +1 -0
  21. package/{DatePicker-8f_9bwhS.js → DatePicker-D0Bz9Ryg.js} +37 -60
  22. package/DatePicker-D0Bz9Ryg.js.map +1 -0
  23. package/{DateTimePicker-D4L9GAod.js → DateTimePicker-77w-9TP5.js} +27 -17
  24. package/DateTimePicker-77w-9TP5.js.map +1 -0
  25. package/{DateTimePicker-CWNW09-O.cjs → DateTimePicker-CTnRQCZo.cjs} +31 -21
  26. package/DateTimePicker-CTnRQCZo.cjs.map +1 -0
  27. package/{Input-DI0jfq5X.cjs → Input-jYapjJYM.cjs} +27 -14
  28. package/Input-jYapjJYM.cjs.map +1 -0
  29. package/{Input-Cp911l23.js → Input-rVVhI_wk.js} +24 -11
  30. package/Input-rVVhI_wk.js.map +1 -0
  31. package/{Modal-Bm_HH9cv.cjs → Modal-BN5s-Tfk.cjs} +126 -98
  32. package/Modal-BN5s-Tfk.cjs.map +1 -0
  33. package/{Modal-Bnz6d9m9.js → Modal-BRZMPwDj.js} +134 -106
  34. package/Modal-BRZMPwDj.js.map +1 -0
  35. package/{RadioGroup-CxqDHap1.cjs → RadioGroup-Dd0rHXSX.cjs} +10 -8
  36. package/RadioGroup-Dd0rHXSX.cjs.map +1 -0
  37. package/{RadioGroup-DMi9FvMP.js → RadioGroup-bO-ahP9T.js} +10 -8
  38. package/RadioGroup-bO-ahP9T.js.map +1 -0
  39. package/Select-B6jE3WH_.cjs +253 -0
  40. package/Select-B6jE3WH_.cjs.map +1 -0
  41. package/Select-bSVQokFX.js +254 -0
  42. package/Select-bSVQokFX.js.map +1 -0
  43. package/StatusMessage-B3nXpuRl.cjs +88 -0
  44. package/StatusMessage-B3nXpuRl.cjs.map +1 -0
  45. package/StatusMessage-D0WgSBx7.js +89 -0
  46. package/StatusMessage-D0WgSBx7.js.map +1 -0
  47. package/Step-BArsou1V.js +301 -0
  48. package/Step-BArsou1V.js.map +1 -0
  49. package/Step-Nd7SJbRZ.cjs +300 -0
  50. package/Step-Nd7SJbRZ.cjs.map +1 -0
  51. package/{Switch-BIeobv6i.cjs → Switch-CQFOopYy.cjs} +6 -3
  52. package/Switch-CQFOopYy.cjs.map +1 -0
  53. package/{Switch-DQEOxM2R.js → Switch-D72dpkH2.js} +6 -3
  54. package/Switch-D72dpkH2.js.map +1 -0
  55. package/{Tab-Co31KY2k.cjs → Tab-BbP8jBcK.cjs} +43 -28
  56. package/Tab-BbP8jBcK.cjs.map +1 -0
  57. package/Tab-BxSxKJsP.js +111 -0
  58. package/Tab-BxSxKJsP.js.map +1 -0
  59. package/components/ActionMenu/ActionMenu.cjs +52 -52
  60. package/components/ActionMenu/ActionMenu.cjs.map +1 -1
  61. package/components/ActionMenu/ActionMenu.d.ts +20 -36
  62. package/components/ActionMenu/ActionMenu.js +55 -55
  63. package/components/ActionMenu/ActionMenu.js.map +1 -1
  64. package/components/ActionMenu/index.d.ts +2 -2
  65. package/components/AppBar/AppBar.cjs +2 -219
  66. package/components/AppBar/AppBar.cjs.map +1 -1
  67. package/components/AppBar/AppBar.d.ts +6 -6
  68. package/components/AppBar/AppBar.js +5 -222
  69. package/components/AppBar/AppBar.js.map +1 -1
  70. package/components/AppBar/index.d.ts +0 -6
  71. package/components/Autocomplete/Autocomplete.cjs +1 -1
  72. package/components/Autocomplete/Autocomplete.d.ts +8 -6
  73. package/components/Autocomplete/Autocomplete.helpers.d.ts +8 -4
  74. package/components/Autocomplete/Autocomplete.js +1 -1
  75. package/components/Autocomplete/_parts/AutocompleteOption.d.ts +5 -8
  76. package/components/Autocomplete/index.d.ts +1 -1
  77. package/components/Avatar/Avatar.cjs +1 -1
  78. package/components/Avatar/Avatar.js +1 -1
  79. package/components/Avatar/index.d.ts +1 -0
  80. package/components/Button/Button.d.ts +5 -5
  81. package/components/Button/index.d.ts +1 -0
  82. package/components/Card/Card.cjs +1 -4
  83. package/components/Card/Card.cjs.map +1 -1
  84. package/components/Card/Card.d.ts +3 -50
  85. package/components/Card/Card.js +1 -4
  86. package/components/Card/Card.sx.d.ts +3 -6
  87. package/components/Card/index.d.ts +1 -1
  88. package/components/Checkbox/Checkbox.cjs +6 -0
  89. package/components/Checkbox/Checkbox.cjs.map +1 -0
  90. package/components/Checkbox/Checkbox.d.ts +55 -0
  91. package/components/Checkbox/Checkbox.js +6 -0
  92. package/components/Checkbox/Checkbox.js.map +1 -0
  93. package/components/Checkbox/Checkbox.sx.d.ts +13 -0
  94. package/components/Checkbox/index.d.ts +2 -0
  95. package/components/Checkbox.d.ts +6 -0
  96. package/components/Chip/Chip.cjs +2 -1
  97. package/components/Chip/Chip.cjs.map +1 -1
  98. package/components/Chip/Chip.js +3 -2
  99. package/components/Chip/index.d.ts +2 -1
  100. package/components/Chip.d.ts +4 -0
  101. package/components/DatePicker/DatePicker.cjs +1 -1
  102. package/components/DatePicker/DatePicker.d.ts +1 -13
  103. package/components/DatePicker/DatePicker.js +1 -1
  104. package/components/DatePicker/index.d.ts +1 -1
  105. package/components/DateTimePicker/DateTimePicker.cjs +1 -1
  106. package/components/DateTimePicker/DateTimePicker.d.ts +10 -6
  107. package/components/DateTimePicker/DateTimePicker.definitions.d.ts +2 -0
  108. package/components/DateTimePicker/DateTimePicker.helpers.d.ts +4 -2
  109. package/components/DateTimePicker/DateTimePicker.js +1 -1
  110. package/components/DateTimePicker/index.d.ts +1 -1
  111. package/components/Drawer/Drawer.cjs +10 -6
  112. package/components/Drawer/Drawer.cjs.map +1 -1
  113. package/components/Drawer/Drawer.js +11 -7
  114. package/components/Drawer/Drawer.js.map +1 -1
  115. package/components/Drawer/DrawerItem.d.ts +6 -1
  116. package/components/Gallery/Gallery.cjs +154 -79
  117. package/components/Gallery/Gallery.cjs.map +1 -1
  118. package/components/Gallery/Gallery.d.ts +25 -9
  119. package/components/Gallery/Gallery.js +154 -79
  120. package/components/Gallery/Gallery.js.map +1 -1
  121. package/components/Gallery/GalleryLightbox.d.ts +6 -10
  122. package/components/Gallery/GalleryMain.d.ts +3 -7
  123. package/components/Gallery/GalleryThumbnails.d.ts +7 -11
  124. package/components/Gallery/index.d.ts +2 -1
  125. package/components/Gallery.d.ts +4 -0
  126. package/components/Icon/Icon.cjs +6 -8
  127. package/components/Icon/Icon.cjs.map +1 -1
  128. package/components/Icon/Icon.d.ts +11 -17
  129. package/components/Icon/Icon.js +6 -8
  130. package/components/Icon/Icon.js.map +1 -1
  131. package/components/Icon/index.d.ts +2 -1
  132. package/components/Icon.d.ts +4 -0
  133. package/components/Input/Input.cjs +1 -1
  134. package/components/Input/Input.d.ts +9 -2
  135. package/components/Input/Input.helpers.d.ts +3 -3
  136. package/components/Input/Input.js +1 -1
  137. package/components/Input/index.d.ts +1 -1
  138. package/components/InputGroup/InputGroup.cjs +23 -22
  139. package/components/InputGroup/InputGroup.cjs.map +1 -1
  140. package/components/InputGroup/InputGroup.d.ts +4 -4
  141. package/components/InputGroup/InputGroup.js +22 -21
  142. package/components/InputGroup/InputGroup.js.map +1 -1
  143. package/components/InputGroup/index.d.ts +2 -1
  144. package/components/InputGroup.d.ts +4 -0
  145. package/components/Modal/Modal.cjs +1 -1
  146. package/components/Modal/Modal.d.ts +20 -5
  147. package/components/Modal/Modal.js +6 -6
  148. package/components/Modal/ModalBody.d.ts +6 -1
  149. package/components/Modal/ModalFooter.d.ts +4 -4
  150. package/components/Modal/ModalHeader.d.ts +6 -1
  151. package/components/Modal/index.d.ts +2 -0
  152. package/components/RadioGroup/RadioGroup.cjs +1 -1
  153. package/components/RadioGroup/RadioGroup.d.ts +9 -3
  154. package/components/RadioGroup/RadioGroup.js +1 -1
  155. package/components/RadioGroup/index.d.ts +1 -1
  156. package/components/Select/Select.cjs +1 -1
  157. package/components/Select/Select.d.ts +13 -18
  158. package/components/Select/Select.helpers.d.ts +5 -19
  159. package/components/Select/Select.js +1 -1
  160. package/components/Select/index.d.ts +1 -1
  161. package/components/Stat/Stat.cjs +2 -2
  162. package/components/Stat/Stat.js +3 -3
  163. package/components/Stat/Stat.js.map +1 -1
  164. package/components/Stat/index.d.ts +2 -1
  165. package/components/Stat.d.ts +4 -0
  166. package/components/StatusMessage/StatusMessage.cjs +1 -1
  167. package/components/StatusMessage/StatusMessage.d.ts +20 -36
  168. package/components/StatusMessage/StatusMessage.js +1 -1
  169. package/components/Stepper/Stepper.cjs +6 -2
  170. package/components/Stepper/Stepper.cjs.map +1 -1
  171. package/components/Stepper/Stepper.d.ts +9 -8
  172. package/components/Stepper/Stepper.js +6 -2
  173. package/{hooks/Wizard/WizardContext.d.ts → components/Stepper/StepperContext.d.ts} +28 -22
  174. package/components/Stepper/_hooks/useHorizontalScroll.d.ts +19 -0
  175. package/components/Stepper/_parts/StepperScrollArrow.d.ts +19 -0
  176. package/components/Stepper/index.d.ts +6 -2
  177. package/components/Stepper.d.ts +4 -0
  178. package/components/Switch/Switch.cjs +1 -1
  179. package/components/Switch/Switch.d.ts +7 -2
  180. package/components/Switch/Switch.js +1 -1
  181. package/components/Tabs/Tabs.cjs +3 -2
  182. package/components/Tabs/Tabs.cjs.map +1 -1
  183. package/components/Tabs/Tabs.d.ts +21 -16
  184. package/components/Tabs/Tabs.js +3 -2
  185. package/components/Tabs/index.d.ts +4 -2
  186. package/components/Tabs.d.ts +4 -0
  187. package/components/Timeline/Timeline.cjs +3 -3
  188. package/components/Timeline/Timeline.cjs.map +1 -1
  189. package/components/Timeline/Timeline.d.ts +4 -8
  190. package/components/Timeline/Timeline.js +2 -2
  191. package/components/Timeline/Timeline.js.map +1 -1
  192. package/components/Timeline/index.d.ts +4 -3
  193. package/components/Timeline.d.ts +4 -0
  194. package/components/_shared/mergeSx.d.ts +7 -0
  195. package/{formField.sx-DfVbMe0V.js → formField.sx-8_QRnKxv.js} +2 -11
  196. package/formField.sx-8_QRnKxv.js.map +1 -0
  197. package/{formField.sx-CQ1mbk9M.cjs → formField.sx-BAX7KwMR.cjs} +10 -19
  198. package/formField.sx-BAX7KwMR.cjs.map +1 -0
  199. package/index.cjs +38 -15
  200. package/index.cjs.map +1 -1
  201. package/index.d.ts +3 -0
  202. package/index.js +33 -19
  203. package/index.js.map +1 -1
  204. package/mergeSx-BXoNZjB_.js +10 -0
  205. package/mergeSx-BXoNZjB_.js.map +1 -0
  206. package/mergeSx-Dbccoo_H.cjs +9 -0
  207. package/mergeSx-Dbccoo_H.cjs.map +1 -0
  208. package/mui.d.ts +2 -1
  209. package/package.json +32 -42
  210. package/theme/componentStyles.d.ts +1 -1
  211. package/tokens-BRrcP_p_.js +21 -0
  212. package/tokens-BRrcP_p_.js.map +1 -0
  213. package/tokens-jaWWNk39.cjs +20 -0
  214. package/tokens-jaWWNk39.cjs.map +1 -0
  215. package/utils/index.d.ts +2 -0
  216. package/{components/ScrollTopButton → utils}/scrollToTop.d.ts +6 -7
  217. package/Autocomplete-BA-cGASd.js.map +0 -1
  218. package/Autocomplete-C2x-lBvZ.cjs.map +0 -1
  219. package/Avatar-9L7YMxya.cjs.map +0 -1
  220. package/Avatar-BJTr-PBd.js.map +0 -1
  221. package/Card-DG_crfkK.cjs +0 -185
  222. package/Card-DG_crfkK.cjs.map +0 -1
  223. package/Card-Ug-ttVSh.js +0 -186
  224. package/Card-Ug-ttVSh.js.map +0 -1
  225. package/DatePicker-8f_9bwhS.js.map +0 -1
  226. package/DatePicker-DLSfkgGA.cjs.map +0 -1
  227. package/DateTimePicker-CWNW09-O.cjs.map +0 -1
  228. package/DateTimePicker-D4L9GAod.js.map +0 -1
  229. package/Input-Cp911l23.js.map +0 -1
  230. package/Input-DI0jfq5X.cjs.map +0 -1
  231. package/Modal-Bm_HH9cv.cjs.map +0 -1
  232. package/Modal-Bnz6d9m9.js.map +0 -1
  233. package/RadioGroup-CxqDHap1.cjs.map +0 -1
  234. package/RadioGroup-DMi9FvMP.js.map +0 -1
  235. package/Select-3CBOfM2H.js +0 -447
  236. package/Select-3CBOfM2H.js.map +0 -1
  237. package/Select-Bku4f4f8.cjs +0 -446
  238. package/Select-Bku4f4f8.cjs.map +0 -1
  239. package/StatusMessage-C5B6oGZ_.cjs +0 -78
  240. package/StatusMessage-C5B6oGZ_.cjs.map +0 -1
  241. package/StatusMessage-D1GlfQdz.js +0 -79
  242. package/StatusMessage-D1GlfQdz.js.map +0 -1
  243. package/Step-Dq0N72YB.js +0 -49
  244. package/Step-Dq0N72YB.js.map +0 -1
  245. package/Step-a8U8O-91.cjs +0 -48
  246. package/Step-a8U8O-91.cjs.map +0 -1
  247. package/Switch-BIeobv6i.cjs.map +0 -1
  248. package/Switch-DQEOxM2R.js.map +0 -1
  249. package/Tab-Co31KY2k.cjs.map +0 -1
  250. package/Tab-DiK62gRz.js +0 -96
  251. package/Tab-DiK62gRz.js.map +0 -1
  252. package/components/AppBar/AppBarBrand.d.ts +0 -31
  253. package/components/AppBar/AppBarUserMenu.d.ts +0 -65
  254. package/components/Autocomplete/Autocomplete.types.d.ts +0 -1
  255. package/components/DatePicker/DatePicker.types.d.ts +0 -1
  256. package/components/DateTimePicker/DateTimePicker.types.d.ts +0 -1
  257. package/components/Input/Input.types.d.ts +0 -1
  258. package/components/PageLoader/PageLoader.cjs +0 -61
  259. package/components/PageLoader/PageLoader.cjs.map +0 -1
  260. package/components/PageLoader/PageLoader.d.ts +0 -38
  261. package/components/PageLoader/PageLoader.js +0 -61
  262. package/components/PageLoader/PageLoader.js.map +0 -1
  263. package/components/PageLoader/index.d.ts +0 -2
  264. package/components/PageLoader.d.ts +0 -6
  265. package/components/RadioGroup/RadioGroup.types.d.ts +0 -1
  266. package/components/ScrollTopButton/ScrollTopButton.cjs +0 -79
  267. package/components/ScrollTopButton/ScrollTopButton.cjs.map +0 -1
  268. package/components/ScrollTopButton/ScrollTopButton.d.ts +0 -48
  269. package/components/ScrollTopButton/ScrollTopButton.js +0 -79
  270. package/components/ScrollTopButton/ScrollTopButton.js.map +0 -1
  271. package/components/ScrollTopButton/index.d.ts +0 -4
  272. package/components/ScrollTopButton.d.ts +0 -6
  273. package/components/Select/Select.definitions.d.ts +0 -17
  274. package/components/Select/Select.types.d.ts +0 -1
  275. package/components/Select/_parts/SelectSearchHeader.d.ts +0 -15
  276. package/formField.sx-CQ1mbk9M.cjs.map +0 -1
  277. package/formField.sx-DfVbMe0V.js.map +0 -1
  278. package/hooks/Wizard/Wizard.cjs +0 -7
  279. package/hooks/Wizard/Wizard.cjs.map +0 -1
  280. package/hooks/Wizard/Wizard.js +0 -7
  281. package/hooks/Wizard/Wizard.js.map +0 -1
  282. package/hooks/Wizard/index.d.ts +0 -3
  283. package/hooks/Wizard/useWizard.d.ts +0 -9
  284. package/hooks/Wizard.d.ts +0 -2
  285. package/useWizard-CWdIxZzX.cjs +0 -94
  286. package/useWizard-CWdIxZzX.cjs.map +0 -1
  287. package/useWizard-CWq--C3o.js +0 -95
  288. package/useWizard-CWq--C3o.js.map +0 -1
  289. /package/{styles.css → index.css} +0 -0
@@ -18,18 +18,6 @@ var __spreadValues = (a, b) => {
18
18
  return a;
19
19
  };
20
20
  var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
21
- var __objRest = (source, exclude) => {
22
- var target = {};
23
- for (var prop in source)
24
- if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
25
- target[prop] = source[prop];
26
- if (source != null && __getOwnPropSymbols)
27
- for (var prop of __getOwnPropSymbols(source)) {
28
- if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
29
- target[prop] = source[prop];
30
- }
31
- return target;
32
- };
33
21
  const jsxRuntime = require("react/jsx-runtime");
34
22
  const React = require("react");
35
23
  const material = require("@mui/material");
@@ -37,8 +25,9 @@ const InfoOutlinedIcon = require("@mui/icons-material/InfoOutlined");
37
25
  const WarningAmberIcon = require("@mui/icons-material/WarningAmber");
38
26
  const ErrorOutlineIcon = require("@mui/icons-material/ErrorOutline");
39
27
  const CheckCircleOutlineIcon = require("@mui/icons-material/CheckCircleOutline");
28
+ const Button = require("./Button-C17mExpd.cjs");
29
+ const mergeSx = require("./mergeSx-Dbccoo_H.cjs");
40
30
  const ModalFooter = ({
41
- // Renombrado
42
31
  children,
43
32
  showCloseButton = true,
44
33
  closeButtonText = "Cerrar",
@@ -46,42 +35,74 @@ const ModalFooter = ({
46
35
  onClose,
47
36
  actions = []
48
37
  }) => {
49
- return /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { padding: 2, borderTop: "1px solid #e0e0e0", display: "flex", justifyContent: "flex-end", gap: 1 }, children: [
50
- children,
51
- /* @__PURE__ */ jsxRuntime.jsxs(material.Stack, { direction: "row", spacing: 1, children: [
52
- showCloseButton && /* @__PURE__ */ jsxRuntime.jsx(
53
- material.Button,
54
- {
55
- onClick: onClose,
56
- disabled: closeButtonDisabled,
57
- variant: "outlined",
58
- color: "secondary",
59
- children: closeButtonText
60
- }
61
- ),
62
- actions.map((action, index) => {
63
- const { buttonProps } = action;
64
- return /* @__PURE__ */ jsxRuntime.jsx(
65
- material.Button,
66
- __spreadProps(__spreadValues({
67
- onClick: action.onClick,
68
- disabled: action.disabled,
69
- variant: action.variant || "contained",
70
- color: action.color || "primary"
71
- }, buttonProps), {
72
- children: action.text
73
- }),
74
- index
75
- );
76
- })
77
- ] })
78
- ] });
38
+ return /* @__PURE__ */ jsxRuntime.jsxs(
39
+ material.Box,
40
+ {
41
+ sx: {
42
+ padding: 2,
43
+ borderTop: (theme) => `1px solid ${theme.palette.divider}`,
44
+ display: "flex",
45
+ justifyContent: "flex-end",
46
+ gap: 1
47
+ },
48
+ children: [
49
+ children,
50
+ /* @__PURE__ */ jsxRuntime.jsxs(material.Stack, { direction: "row", spacing: 1, children: [
51
+ showCloseButton && /* @__PURE__ */ jsxRuntime.jsx(
52
+ Button.Button,
53
+ {
54
+ onClick: onClose,
55
+ disabled: closeButtonDisabled,
56
+ variant: "outlined",
57
+ color: "secondary",
58
+ children: closeButtonText
59
+ }
60
+ ),
61
+ actions.map((action) => {
62
+ const { buttonProps, text, onClick, disabled, variant, color } = action;
63
+ return /* @__PURE__ */ jsxRuntime.jsx(
64
+ Button.Button,
65
+ __spreadProps(__spreadValues({
66
+ onClick,
67
+ disabled,
68
+ variant: variant || "contained",
69
+ color: color || "primary"
70
+ }, buttonProps), {
71
+ children: text
72
+ }),
73
+ text
74
+ );
75
+ })
76
+ ] })
77
+ ]
78
+ }
79
+ );
80
+ };
81
+ ModalFooter.displayName = "ModalFooter";
82
+ const ModalHeader = ({ children, id }) => {
83
+ return /* @__PURE__ */ jsxRuntime.jsx(
84
+ material.Box,
85
+ {
86
+ sx: {
87
+ padding: 2,
88
+ borderBottom: (theme) => `1px solid ${theme.palette.divider}`,
89
+ display: "flex",
90
+ alignItems: "center",
91
+ justifyContent: "space-between"
92
+ },
93
+ children: /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { id, variant: "h6", component: "h2", children })
94
+ }
95
+ );
79
96
  };
80
- const ModalHeader = ({ children }) => {
81
- return /* @__PURE__ */ jsxRuntime.jsx(material.Box, { sx: { padding: 2, borderBottom: "1px solid #e0e0e0", display: "flex", alignItems: "center", justifyContent: "space-between" }, children: /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h6", component: "h2", children }) });
97
+ ModalHeader.displayName = "ModalHeader";
98
+ const ModalBody = ({ children, id }) => {
99
+ return /* @__PURE__ */ jsxRuntime.jsx(material.Box, { id, sx: { padding: 2, overflowY: "auto", flexGrow: 1 }, children });
82
100
  };
83
- const ModalBody = ({ children }) => {
84
- return /* @__PURE__ */ jsxRuntime.jsx(material.Box, { sx: { padding: 2, overflowY: "auto", flexGrow: 1 }, children });
101
+ ModalBody.displayName = "ModalBody";
102
+ const isModalSlot = (child, Component, displayName) => {
103
+ if (child.type === Component) return true;
104
+ const type = child.type;
105
+ return (type == null ? void 0 : type.displayName) === displayName;
85
106
  };
86
107
  const modalStyle = {
87
108
  position: "absolute",
@@ -98,22 +119,22 @@ const severityConfig = {
98
119
  info: {
99
120
  color: "primary",
100
121
  icon: /* @__PURE__ */ jsxRuntime.jsx(InfoOutlinedIcon, { sx: { fontSize: 48 } }),
101
- bg: "primary.light"
122
+ paletteKey: "primary"
102
123
  },
103
124
  warning: {
104
125
  color: "warning",
105
126
  icon: /* @__PURE__ */ jsxRuntime.jsx(WarningAmberIcon, { sx: { fontSize: 48 } }),
106
- bg: "warning.light"
127
+ paletteKey: "warning"
107
128
  },
108
129
  error: {
109
130
  color: "error",
110
131
  icon: /* @__PURE__ */ jsxRuntime.jsx(ErrorOutlineIcon, { sx: { fontSize: 48 } }),
111
- bg: "error.light"
132
+ paletteKey: "error"
112
133
  },
113
134
  success: {
114
135
  color: "success",
115
136
  icon: /* @__PURE__ */ jsxRuntime.jsx(CheckCircleOutlineIcon, { sx: { fontSize: 48 } }),
116
- bg: "success.light"
137
+ paletteKey: "success"
117
138
  }
118
139
  };
119
140
  const Modal = React.forwardRef(
@@ -128,7 +149,12 @@ const Modal = React.forwardRef(
128
149
  closeButtonDisabled = false,
129
150
  actions = [],
130
151
  maxWidth = "sm",
152
+ hiddenHeader = false,
153
+ hiddenBody = false,
131
154
  hiddenFooter = false,
155
+ sx,
156
+ paperSx,
157
+ className,
132
158
  // Props del modo confirm
133
159
  onConfirm,
134
160
  confirmText = "Confirmar",
@@ -138,6 +164,8 @@ const Modal = React.forwardRef(
138
164
  }, ref) => {
139
165
  const [internalOpen, setInternalOpen] = React.useState(false);
140
166
  const [confirmLoading, setConfirmLoading] = React.useState(false);
167
+ const titleId = React.useId();
168
+ const descId = React.useId();
141
169
  const isOpen = controlledOpen !== void 0 ? controlledOpen : internalOpen;
142
170
  React.useImperativeHandle(ref, () => ({
143
171
  open: () => setInternalOpen(true),
@@ -155,15 +183,19 @@ const Modal = React.forwardRef(
155
183
  handleCloseInternal();
156
184
  return;
157
185
  }
186
+ const result = onConfirm();
187
+ if (!(result instanceof Promise)) {
188
+ handleCloseInternal();
189
+ return;
190
+ }
191
+ setConfirmLoading(true);
158
192
  try {
159
- const result = onConfirm();
160
- if (result instanceof Promise) {
161
- setConfirmLoading(true);
162
- await result;
163
- }
193
+ await result;
194
+ handleCloseInternal();
195
+ } catch (err) {
196
+ console.error("Modal onConfirm failed:", err);
164
197
  } finally {
165
198
  setConfirmLoading(false);
166
- handleCloseInternal();
167
199
  }
168
200
  };
169
201
  const theme = material.useTheme();
@@ -184,9 +216,11 @@ const Modal = React.forwardRef(
184
216
  case false:
185
217
  return "auto";
186
218
  default:
187
- return 500;
219
+ return typeof maxWidth === "string" ? maxWidth : 500;
188
220
  }
189
221
  };
222
+ const paperBaseSx = __spreadProps(__spreadValues({}, modalStyle), { width: getWidth() });
223
+ const mergedPaperSx = mergeSx.mergeSx(paperBaseSx, paperSx);
190
224
  if (mode === "confirm") {
191
225
  const config = severityConfig[severity];
192
226
  const message = confirmMessage != null ? confirmMessage : children;
@@ -195,9 +229,11 @@ const Modal = React.forwardRef(
195
229
  {
196
230
  open: isOpen,
197
231
  onClose: handleCloseInternal,
198
- "aria-labelledby": "modal-title",
232
+ "aria-labelledby": title ? titleId : void 0,
233
+ "aria-describedby": message ? descId : void 0,
199
234
  closeAfterTransition: true,
200
- children: /* @__PURE__ */ jsxRuntime.jsxs(material.Paper, { sx: __spreadProps(__spreadValues({}, modalStyle), { width: getWidth() }), children: [
235
+ sx,
236
+ children: /* @__PURE__ */ jsxRuntime.jsxs(material.Paper, { className, sx: mergedPaperSx, children: [
201
237
  /* @__PURE__ */ jsxRuntime.jsxs(material.Stack, { spacing: 2.5, sx: { p: 3, alignItems: "center", textAlign: "center" }, children: [
202
238
  /* @__PURE__ */ jsxRuntime.jsx(
203
239
  material.Box,
@@ -206,8 +242,8 @@ const Modal = React.forwardRef(
206
242
  width: 72,
207
243
  height: 72,
208
244
  borderRadius: "50%",
209
- backgroundColor: (t) => t.palette[severity === "info" ? "primary" : severity].light,
210
- color: (t) => t.palette[severity === "info" ? "primary" : severity].dark,
245
+ backgroundColor: (t) => t.palette[config.paletteKey].light,
246
+ color: (t) => t.palette[config.paletteKey].dark,
211
247
  display: "flex",
212
248
  alignItems: "center",
213
249
  justifyContent: "center",
@@ -216,8 +252,8 @@ const Modal = React.forwardRef(
216
252
  children: config.icon
217
253
  }
218
254
  ),
219
- title && /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h6", component: "h2", sx: { fontWeight: 700 }, children: title }),
220
- message && /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "body2", color: "text.secondary", children: message })
255
+ title && /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { id: titleId, variant: "h6", component: "h2", sx: { fontWeight: 700 }, children: title }),
256
+ message && /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { id: descId, variant: "body2", color: "text.secondary", children: message })
221
257
  ] }),
222
258
  /* @__PURE__ */ jsxRuntime.jsx(
223
259
  ModalFooter,
@@ -246,34 +282,24 @@ const Modal = React.forwardRef(
246
282
  let body = null;
247
283
  let footer = null;
248
284
  React.Children.forEach(children, (child) => {
249
- if (React.isValidElement(child)) {
250
- if (child.type === ModalHeader) {
251
- header = child;
252
- } else if (child.type === ModalBody) {
253
- body = child;
254
- } else if (child.type === ModalFooter) {
255
- const footerChild = child;
256
- const _a = footerChild.props, {
257
- showCloseButton: childShowCloseButton,
258
- closeButtonText: childCloseButtonText,
259
- closeButtonDisabled: childCloseButtonDisabled,
260
- onClose: childOnClose,
261
- actions: childActions
262
- } = _a, restOfFooterProps = __objRest(_a, [
263
- "showCloseButton",
264
- "closeButtonText",
265
- "closeButtonDisabled",
266
- "onClose",
267
- "actions"
268
- ]);
269
- footer = React.cloneElement(footerChild, __spreadValues({
270
- showCloseButton,
271
- closeButtonText,
272
- closeButtonDisabled,
273
- onClose: handleCloseInternal,
274
- actions
275
- }, restOfFooterProps));
276
- }
285
+ var _a, _b, _c, _d, _e;
286
+ if (!React.isValidElement(child)) return;
287
+ if (isModalSlot(child, ModalHeader, "ModalHeader")) {
288
+ const headerChild = child;
289
+ header = React.cloneElement(headerChild, __spreadValues({ id: titleId }, headerChild.props));
290
+ } else if (isModalSlot(child, ModalBody, "ModalBody")) {
291
+ const bodyChild = child;
292
+ body = React.cloneElement(bodyChild, __spreadValues({ id: descId }, bodyChild.props));
293
+ } else if (isModalSlot(child, ModalFooter, "ModalFooter")) {
294
+ const footerChild = child;
295
+ const childProps = footerChild.props;
296
+ footer = React.cloneElement(footerChild, {
297
+ showCloseButton: (_a = childProps.showCloseButton) != null ? _a : showCloseButton,
298
+ closeButtonText: (_b = childProps.closeButtonText) != null ? _b : closeButtonText,
299
+ closeButtonDisabled: (_c = childProps.closeButtonDisabled) != null ? _c : closeButtonDisabled,
300
+ onClose: (_d = childProps.onClose) != null ? _d : handleCloseInternal,
301
+ actions: (_e = childProps.actions) != null ? _e : actions
302
+ });
277
303
  }
278
304
  });
279
305
  if (!footer && !hiddenFooter) {
@@ -289,8 +315,8 @@ const Modal = React.forwardRef(
289
315
  );
290
316
  }
291
317
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
292
- header || title && /* @__PURE__ */ jsxRuntime.jsx(ModalHeader, { children: title }),
293
- body,
318
+ !hiddenHeader && (header || title && /* @__PURE__ */ jsxRuntime.jsx(ModalHeader, { id: titleId, children: title })),
319
+ !hiddenBody && body,
294
320
  footer
295
321
  ] });
296
322
  };
@@ -299,14 +325,16 @@ const Modal = React.forwardRef(
299
325
  {
300
326
  open: isOpen,
301
327
  onClose: handleCloseInternal,
302
- "aria-labelledby": "modal-title",
303
- "aria-describedby": "modal-description",
328
+ "aria-labelledby": titleId,
329
+ "aria-describedby": descId,
304
330
  closeAfterTransition: true,
305
- children: /* @__PURE__ */ jsxRuntime.jsx(material.Paper, { sx: __spreadProps(__spreadValues({}, modalStyle), { width: getWidth() }), children: renderChildren() })
331
+ sx,
332
+ children: /* @__PURE__ */ jsxRuntime.jsx(material.Paper, { className, sx: mergedPaperSx, children: renderChildren() })
306
333
  }
307
334
  );
308
335
  }
309
336
  );
337
+ Modal.displayName = "Modal";
310
338
  const ModalWithStatics = Modal;
311
339
  ModalWithStatics.Header = ModalHeader;
312
340
  ModalWithStatics.Body = ModalBody;
@@ -316,4 +344,4 @@ exports.ModalBody = ModalBody;
316
344
  exports.ModalFooter = ModalFooter;
317
345
  exports.ModalHeader = ModalHeader;
318
346
  exports.ModalWithStatics = ModalWithStatics;
319
- //# sourceMappingURL=Modal-Bm_HH9cv.cjs.map
347
+ //# sourceMappingURL=Modal-BN5s-Tfk.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Modal-BN5s-Tfk.cjs","sources":["../src/components/Modal/ModalFooter.tsx","../src/components/Modal/ModalHeader.tsx","../src/components/Modal/ModalBody.tsx","../src/components/Modal/Modal.tsx"],"sourcesContent":["import React from 'react';\nimport { Box, Stack } from '@mui/material';\nimport type { ButtonProps as MuiButtonProps } from '@mui/material/Button';\n\nimport { Button } from '../Button';\n\n// Interfaz para acciones personalizadas (se mantiene aquí)\nexport interface ModalAction {\n text: string;\n onClick?: () => void;\n disabled?: boolean;\n variant?: MuiButtonProps['variant'];\n color?: MuiButtonProps['color'];\n /**\n * Props adicionales que se forwardean al `<Button>` interno. Útil para casos\n * avanzados como conectar el botón con un `<form id=\"...\">` externo usando\n * `buttonProps={{ type: 'submit', form: 'my-form-id' }}`.\n */\n buttonProps?: Partial<MuiButtonProps> & { form?: string };\n}\n\nexport interface ModalFooterProps {\n children?: React.ReactNode;\n showCloseButton?: boolean;\n closeButtonText?: string;\n closeButtonDisabled?: boolean;\n onClose: () => void;\n actions?: ModalAction[];\n}\n\nexport const ModalFooter: React.FC<ModalFooterProps> = ({\n children,\n showCloseButton = true,\n closeButtonText = 'Cerrar',\n closeButtonDisabled = false,\n onClose,\n actions = [],\n}) => {\n return (\n <Box\n sx={{\n padding: 2,\n borderTop: (theme) => `1px solid ${theme.palette.divider}`,\n display: 'flex',\n justifyContent: 'flex-end',\n gap: 1,\n }}\n >\n {children}\n <Stack direction=\"row\" spacing={1}>\n {showCloseButton && (\n <Button\n onClick={onClose}\n disabled={closeButtonDisabled}\n variant=\"outlined\"\n color=\"secondary\"\n >\n {closeButtonText}\n </Button>\n )}\n {actions.map((action) => {\n const { buttonProps, text, onClick, disabled, variant, color } = action;\n return (\n <Button\n key={text}\n onClick={onClick}\n disabled={disabled}\n variant={variant || 'contained'}\n color={color || 'primary'}\n {...(buttonProps as any)}\n >\n {text}\n </Button>\n );\n })}\n </Stack>\n </Box>\n );\n};\n\nModalFooter.displayName = 'ModalFooter';\n\nexport default ModalFooter;\n","import React from 'react';\nimport { Box, Typography } from '@mui/material';\n\nexport interface ModalHeaderProps {\n children: React.ReactNode;\n /**\n * ID del elemento — usado para `aria-labelledby` del Modal. Se setea\n * automáticamente cuando el header se renderiza dentro de `<Modal>`.\n */\n id?: string;\n}\n\nexport const ModalHeader: React.FC<ModalHeaderProps> = ({ children, id }) => {\n return (\n <Box\n sx={{\n padding: 2,\n borderBottom: (theme) => `1px solid ${theme.palette.divider}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <Typography id={id} variant=\"h6\" component=\"h2\">\n {children}\n </Typography>\n </Box>\n );\n};\n\nModalHeader.displayName = 'ModalHeader';\n\nexport default ModalHeader;\n","import React from 'react';\nimport { Box } from '@mui/material';\n\nexport interface ModalBodyProps {\n children: React.ReactNode;\n /**\n * ID del elemento — usado para `aria-describedby` del Modal. Se setea\n * automáticamente cuando el body se renderiza dentro de `<Modal>`.\n */\n id?: string;\n}\n\nexport const ModalBody: React.FC<ModalBodyProps> = ({ children, id }) => {\n return (\n <Box id={id} sx={{ padding: 2, overflowY: 'auto', flexGrow: 1 }}>\n {children}\n </Box>\n );\n};\n\nModalBody.displayName = 'ModalBody';\n\nexport default ModalBody;\n","import {\n Children,\n cloneElement,\n forwardRef,\n isValidElement,\n useId,\n useImperativeHandle,\n useState,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport {\n Modal as MuiModal,\n Paper,\n useMediaQuery,\n useTheme,\n Box,\n Stack,\n Typography,\n} from '@mui/material';\nimport type { SxProps, Theme } from '@mui/material/styles';\nimport InfoOutlinedIcon from '@mui/icons-material/InfoOutlined';\nimport WarningAmberIcon from '@mui/icons-material/WarningAmber';\nimport ErrorOutlineIcon from '@mui/icons-material/ErrorOutline';\nimport CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline';\n\nimport type { DialogProps } from '@mui/material/Dialog';\nimport { ModalFooter, type ModalAction, type ModalFooterProps } from './ModalFooter';\nimport { ModalHeader } from './ModalHeader';\nimport { ModalBody } from './ModalBody';\nimport { mergeSx } from '../_shared/mergeSx';\n\n// Detección robusta de sub-componentes — funciona con wrappers / HMR que\n// rompen la igualdad de referencia (`child.type === ModalHeader`).\nconst isModalSlot = (\n child: ReactElement,\n Component: unknown,\n displayName: string,\n): boolean => {\n if (child.type === Component) return true;\n const type = child.type as { displayName?: string };\n return type?.displayName === displayName;\n};\n\n// Define la interfaz para los métodos que el padre puede llamar a través de la ref\nexport interface ModalRef {\n open: () => void;\n close: () => void;\n}\n\nexport type ModalMode = 'default' | 'confirm';\nexport type ModalSeverity = 'info' | 'warning' | 'error' | 'success';\n\nexport interface ModalProps {\n /**\n * Modo del modal.\n * - `default` (default): modal genérico con slots `Header`/`Body`/`Footer` y\n * `actions` custom.\n * - `confirm`: reemplaza al `ConfirmModal` legacy. Renderiza un layout\n * focalizado con icono por severidad, mensaje y botones \"Cancelar\" /\n * \"Confirmar\".\n */\n mode?: ModalMode;\n\n // ── Props comunes ────────────────────────────────────────────────────\n /** Controlado externamente. Omitir si se usa vía ref. */\n open?: boolean;\n /** Callback al cerrar. También se dispara al confirmar/cancelar. */\n onClose?: () => void;\n title?: string;\n children?: ReactNode;\n showCloseButton?: boolean;\n closeButtonText?: string;\n closeButtonDisabled?: boolean;\n actions?: ModalAction[];\n maxWidth?: DialogProps['maxWidth'];\n /** Oculta el header (incluso si hay `title` o se pasa un `<Modal.Header>`). */\n hiddenHeader?: boolean;\n /** Oculta el body (incluso si se pasa un `<Modal.Body>`). */\n hiddenBody?: boolean;\n /** Oculta el footer (incluso si se pasa un `<Modal.Footer>` o `actions`). */\n hiddenFooter?: boolean;\n /** sx del Modal root (MuiModal). */\n sx?: SxProps<Theme>;\n /** sx del Paper interno (contenedor visual). Se mergea sobre el default. */\n paperSx?: SxProps<Theme>;\n /** className del Paper interno. */\n className?: string;\n\n // ── Props del modo confirm ───────────────────────────────────────────\n /**\n * Callback de confirmación. Soporta promesa — si devuelve `Promise`, el\n * botón muestra estado `disabled` mientras resuelve.\n *\n * Si la promesa **rechaza**, el modal queda abierto para que el consumer\n * pueda mostrar el error en su UI. El modal se cierra solo en éxito.\n */\n onConfirm?: () => void | Promise<void>;\n /** Texto del botón primario en modo `confirm`. Default: \"Confirmar\". */\n confirmText?: string;\n /** Deshabilita el botón de confirmar. */\n confirmDisabled?: boolean;\n /**\n * Severidad visual en modo `confirm`. Controla el icono y el color del\n * botón de confirmación.\n * - `info` (default): primary\n * - `warning`: warning (amarillo)\n * - `error`: error (rojo) — típico para \"Eliminar\"\n * - `success`: success (verde) — típico para \"Aprobar\"\n */\n severity?: ModalSeverity;\n /**\n * Mensaje del confirm. Puede ser string o cualquier ReactNode. Si se omite,\n * se usa `children`.\n */\n confirmMessage?: ReactNode;\n}\n\nconst modalStyle = {\n position: 'absolute' as const,\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n width: '90%',\n maxHeight: '90vh',\n display: 'flex',\n flexDirection: 'column' as const,\n outline: 'none',\n};\n\nconst severityConfig: Record<\n ModalSeverity,\n { color: ModalAction['color']; icon: ReactNode; paletteKey: 'primary' | 'warning' | 'error' | 'success' }\n> = {\n info: {\n color: 'primary',\n icon: <InfoOutlinedIcon sx={{ fontSize: 48 }} />,\n paletteKey: 'primary',\n },\n warning: {\n color: 'warning',\n icon: <WarningAmberIcon sx={{ fontSize: 48 }} />,\n paletteKey: 'warning',\n },\n error: {\n color: 'error',\n icon: <ErrorOutlineIcon sx={{ fontSize: 48 }} />,\n paletteKey: 'error',\n },\n success: {\n color: 'success',\n icon: <CheckCircleOutlineIcon sx={{ fontSize: 48 }} />,\n paletteKey: 'success',\n },\n};\n\nexport const Modal = forwardRef<ModalRef, ModalProps>(\n (\n {\n mode = 'default',\n open: controlledOpen,\n onClose: controlledOnClose,\n title,\n children,\n showCloseButton = true,\n closeButtonText = 'Cerrar',\n closeButtonDisabled = false,\n actions = [],\n maxWidth = 'sm',\n hiddenHeader = false,\n hiddenBody = false,\n hiddenFooter = false,\n sx,\n paperSx,\n className,\n\n // Props del modo confirm\n onConfirm,\n confirmText = 'Confirmar',\n confirmDisabled = false,\n severity = 'info',\n confirmMessage,\n },\n ref,\n ) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const [confirmLoading, setConfirmLoading] = useState(false);\n\n // IDs estables para a11y: `aria-labelledby` y `aria-describedby`.\n const titleId = useId();\n const descId = useId();\n\n const isOpen = controlledOpen !== undefined ? controlledOpen : internalOpen;\n\n useImperativeHandle(ref, () => ({\n open: () => setInternalOpen(true),\n close: () => {\n setInternalOpen(false);\n controlledOnClose?.();\n },\n }));\n\n const handleCloseInternal = () => {\n setInternalOpen(false);\n controlledOnClose?.();\n };\n\n const handleConfirm = async () => {\n if (!onConfirm) {\n handleCloseInternal();\n return;\n }\n const result = onConfirm();\n if (!(result instanceof Promise)) {\n handleCloseInternal();\n return;\n }\n setConfirmLoading(true);\n try {\n await result;\n handleCloseInternal();\n } catch (err) {\n // No cerrar el modal en caso de error — el consumer es responsable\n // de mostrar un estado de error en su UI. Logueamos para trazabilidad\n // en dev.\n // eslint-disable-next-line no-console\n console.error('Modal onConfirm failed:', err);\n } finally {\n setConfirmLoading(false);\n }\n };\n\n const theme = useTheme();\n const isMobile = useMediaQuery(theme.breakpoints.down('sm'));\n\n const getWidth = () => {\n if (isMobile) return '95%';\n switch (maxWidth) {\n case 'xs':\n return 300;\n case 'sm':\n return 500;\n case 'md':\n return 700;\n case 'lg':\n return 900;\n case 'xl':\n return 1100;\n case false:\n return 'auto';\n default:\n // Soporta string custom: `maxWidth=\"600px\"` se pasa tal cual.\n return typeof maxWidth === 'string' ? maxWidth : 500;\n }\n };\n\n // Base sx del Paper + width responsive; el consumer puede pisarlos via `paperSx`.\n const paperBaseSx: SxProps<Theme> = { ...modalStyle, width: getWidth() };\n const mergedPaperSx = mergeSx(paperBaseSx, paperSx);\n\n // ── Render modo CONFIRM ─────────────────────────────────────────────\n if (mode === 'confirm') {\n const config = severityConfig[severity];\n const message = confirmMessage ?? children;\n\n return (\n <MuiModal\n open={isOpen}\n onClose={handleCloseInternal}\n aria-labelledby={title ? titleId : undefined}\n aria-describedby={message ? descId : undefined}\n closeAfterTransition\n sx={sx}\n >\n <Paper className={className} sx={mergedPaperSx}>\n <Stack spacing={2.5} sx={{ p: 3, alignItems: 'center', textAlign: 'center' }}>\n <Box\n sx={{\n width: 72,\n height: 72,\n borderRadius: '50%',\n backgroundColor: (t) => t.palette[config.paletteKey].light,\n color: (t) => t.palette[config.paletteKey].dark,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n opacity: 0.9,\n }}\n >\n {config.icon}\n </Box>\n {title && (\n <Typography id={titleId} variant=\"h6\" component=\"h2\" sx={{ fontWeight: 700 }}>\n {title}\n </Typography>\n )}\n {message && (\n <Typography id={descId} variant=\"body2\" color=\"text.secondary\">\n {message}\n </Typography>\n )}\n </Stack>\n <ModalFooter\n showCloseButton={showCloseButton}\n closeButtonText={closeButtonText}\n closeButtonDisabled={closeButtonDisabled || confirmLoading}\n onClose={handleCloseInternal}\n actions={[\n {\n text: confirmText,\n onClick: handleConfirm,\n disabled: confirmDisabled || confirmLoading,\n variant: 'contained',\n color: config.color,\n },\n ]}\n />\n </Paper>\n </MuiModal>\n );\n }\n\n // ── Render modo DEFAULT (compuesto) ─────────────────────────────────\n const renderChildren = () => {\n let header: ReactNode | null = null;\n let body: ReactNode | null = null;\n let footer: ReactNode | null = null;\n\n Children.forEach(children, (child) => {\n if (!isValidElement(child)) return;\n\n if (isModalSlot(child, ModalHeader, 'ModalHeader')) {\n const headerChild = child as ReactElement<{ id?: string }>;\n header = cloneElement(headerChild, { id: titleId, ...headerChild.props });\n } else if (isModalSlot(child, ModalBody, 'ModalBody')) {\n const bodyChild = child as ReactElement<{ id?: string }>;\n body = cloneElement(bodyChild, { id: descId, ...bodyChild.props });\n } else if (isModalSlot(child, ModalFooter, 'ModalFooter')) {\n const footerChild = child as ReactElement<ModalFooterProps>;\n // Props del child ganan sobre los del Modal padre: si el consumer\n // declara `<Modal.Footer showCloseButton={false}>`, ese valor se\n // respeta. Solo los que vengan `undefined` caen al default del padre.\n const childProps = footerChild.props;\n footer = cloneElement(footerChild, {\n showCloseButton: childProps.showCloseButton ?? showCloseButton,\n closeButtonText: childProps.closeButtonText ?? closeButtonText,\n closeButtonDisabled: childProps.closeButtonDisabled ?? closeButtonDisabled,\n onClose: childProps.onClose ?? handleCloseInternal,\n actions: childProps.actions ?? actions,\n });\n }\n });\n\n if (!footer && !hiddenFooter) {\n footer = (\n <ModalFooter\n showCloseButton={showCloseButton}\n closeButtonText={closeButtonText}\n closeButtonDisabled={closeButtonDisabled}\n onClose={handleCloseInternal}\n actions={actions}\n />\n );\n }\n\n return (\n <>\n {!hiddenHeader && (header || (title && <ModalHeader id={titleId}>{title}</ModalHeader>))}\n {!hiddenBody && body}\n {footer}\n </>\n );\n };\n\n return (\n <MuiModal\n open={isOpen}\n onClose={handleCloseInternal}\n aria-labelledby={titleId}\n aria-describedby={descId}\n closeAfterTransition\n sx={sx}\n >\n <Paper className={className} sx={mergedPaperSx}>\n {renderChildren()}\n </Paper>\n </MuiModal>\n );\n },\n);\n\nModal.displayName = 'Modal';\n\n// Define los sub-componentes como propiedades estáticas con tipos explícitos\ntype ModalComponent = ReturnType<typeof forwardRef<ModalRef, ModalProps>> & {\n Header: typeof ModalHeader;\n Body: typeof ModalBody;\n Footer: typeof ModalFooter;\n};\n\nconst ModalWithStatics = Modal as ModalComponent;\n\nModalWithStatics.Header = ModalHeader;\nModalWithStatics.Body = ModalBody;\nModalWithStatics.Footer = ModalFooter;\n\nexport default ModalWithStatics;\n"],"names":["jsxs","Box","Stack","jsx","Button","Typography","forwardRef","useState","useId","useImperativeHandle","useTheme","useMediaQuery","mergeSx","MuiModal","Paper","Children","isValidElement","cloneElement","Fragment"],"mappings":"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"}