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

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 +28 -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
@@ -58,11 +58,12 @@ const Avatar = ({
58
58
  overlap
59
59
  }) => {
60
60
  var _a;
61
- const [errorIndex, setErrorIndex] = React.useState(/* @__PURE__ */ new Set());
62
- const handleImageError = (index) => {
63
- setErrorIndex((prev) => {
61
+ const [failedUrls, setFailedUrls] = React.useState(/* @__PURE__ */ new Set());
62
+ const handleImageError = (url) => {
63
+ setFailedUrls((prev) => {
64
+ if (prev.has(url)) return prev;
64
65
  const next = new Set(prev);
65
- next.add(index);
66
+ next.add(url);
66
67
  return next;
67
68
  });
68
69
  };
@@ -81,12 +82,13 @@ const Avatar = ({
81
82
  boxSizing: "content-box"
82
83
  };
83
84
  const renderSingleAvatar = (item, i) => {
84
- var _a2, _b;
85
- const hasImage = !!item.imageUrl && !errorIndex.has(i);
85
+ var _a2, _b, _c, _d, _e;
86
+ const hasImage = !!item.imageUrl && !failedUrls.has(item.imageUrl);
86
87
  const showBadgeFallback = !!item.badge;
88
+ const itemKey = (_c = item.imageUrl) != null ? _c : `${(_a2 = item.text) != null ? _a2 : ""}-${(_b = item.badge) != null ? _b : ""}-${i}`;
87
89
  const itemSx = __spreadProps(__spreadValues({
88
- bgcolor: (_a2 = item.backgroundColor) != null ? _a2 : "action.selected",
89
- color: (_b = item.color) != null ? _b : "text.secondary"
90
+ bgcolor: (_d = item.backgroundColor) != null ? _d : "action.selected",
91
+ color: (_e = item.color) != null ? _e : "text.secondary"
90
92
  }, i > 0 && { marginLeft: `-${effectiveOverlap}px` }), {
91
93
  zIndex: visibleItems.length - i
92
94
  });
@@ -94,18 +96,17 @@ const Avatar = ({
94
96
  const avatarEl = /* @__PURE__ */ jsxRuntime.jsx(
95
97
  material.Avatar,
96
98
  {
97
- "data-testid": "avatar",
98
99
  alt: item.text || "User avatar",
99
100
  src: hasImage ? item.imageUrl : void 0,
100
101
  imgProps: {
101
- "data-testid": "image",
102
- onError: () => handleImageError(i)
102
+ onError: () => {
103
+ if (item.imageUrl) handleImageError(item.imageUrl);
104
+ }
103
105
  },
104
106
  sx: finalSx,
105
- children: !hasImage && showBadgeFallback ? /* @__PURE__ */ jsxRuntime.jsx("span", { "data-testid": "badge", "aria-label": item.text, children: item.badge }) : !hasImage ? /* @__PURE__ */ jsxRuntime.jsx(
107
+ children: !hasImage && showBadgeFallback ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-label": item.text, children: item.badge }) : !hasImage ? /* @__PURE__ */ jsxRuntime.jsx(
106
108
  AccountCircleIcon,
107
109
  {
108
- "data-testid": "icon",
109
110
  "aria-label": item.text,
110
111
  sx: { width: "100%", height: "100%" }
111
112
  }
@@ -113,14 +114,13 @@ const Avatar = ({
113
114
  }
114
115
  );
115
116
  if (showTooltip && item.text) {
116
- return /* @__PURE__ */ jsxRuntime.jsx(material.Tooltip, { title: item.text, children: avatarEl }, i);
117
+ return /* @__PURE__ */ jsxRuntime.jsx(material.Tooltip, { title: item.text, children: avatarEl }, itemKey);
117
118
  }
118
- return /* @__PURE__ */ jsxRuntime.jsx(React.Fragment, { children: avatarEl }, i);
119
+ return /* @__PURE__ */ jsxRuntime.jsx(React.Fragment, { children: avatarEl }, itemKey);
119
120
  };
120
121
  return /* @__PURE__ */ jsxRuntime.jsxs(
121
122
  material.Box,
122
123
  {
123
- "data-testid": "avatar-container",
124
124
  className,
125
125
  sx: mergeSx(
126
126
  {
@@ -136,7 +136,6 @@ const Avatar = ({
136
136
  showText && ((_a = items[0]) == null ? void 0 : _a.text) && /* @__PURE__ */ jsxRuntime.jsxs(
137
137
  material.Typography,
138
138
  {
139
- "data-testid": "text",
140
139
  variant: "caption",
141
140
  sx: {
142
141
  ml: 1,
@@ -145,7 +144,7 @@ const Avatar = ({
145
144
  color: "text.primary"
146
145
  },
147
146
  children: [
148
- type && items.length === 1 && /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { component: "span", "data-testid": "type", sx: { mr: 0.5 }, children: [
147
+ type && items.length === 1 && /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { component: "span", sx: { mr: 0.5 }, children: [
149
148
  type,
150
149
  ":"
151
150
  ] }),
@@ -159,4 +158,4 @@ const Avatar = ({
159
158
  );
160
159
  };
161
160
  exports.Avatar = Avatar;
162
- //# sourceMappingURL=Avatar-9L7YMxya.cjs.map
161
+ //# sourceMappingURL=Avatar-CuSrK8Wn.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Avatar-CuSrK8Wn.cjs","sources":["../src/components/Avatar/Avatar.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport {\n Avatar as MuiAvatar,\n Box,\n Tooltip,\n Typography,\n type SxProps,\n type Theme,\n} from '@mui/material';\nimport AccountCircleIcon from '@mui/icons-material/AccountCircle';\n\nexport interface AvatarItem {\n text?: string;\n imageUrl?: string;\n badge?: string;\n color?: string;\n backgroundColor?: string;\n}\n\nexport type AvatarSize = 'sm' | 'md' | 'lg' | 'xl' | number;\n\nexport interface AvatarProps {\n type?: string;\n items: AvatarItem[];\n displayedAvatars?: number;\n size?: AvatarSize;\n showText?: boolean;\n showTooltip?: boolean;\n /**\n * sx aplicado al contenedor raíz.\n */\n sx?: SxProps<Theme>;\n /**\n * sx aplicado a cada MuiAvatar individual (se mergea sobre los defaults).\n */\n avatarSx?: SxProps<Theme>;\n className?: string;\n /**\n * Overlap (px) entre avatares cuando hay varios. Default depende del tamaño.\n */\n overlap?: number;\n}\n\n// Escala alineada con la escala de MUI (sm=32, md=40, lg=56, xl=96) con borde\n// proporcional para el efecto stacked.\nconst sizeMap: Record<\n Exclude<AvatarSize, number>,\n { px: number; border: number; font: number; overlap: number }\n> = {\n sm: { px: 32, border: 2, font: 14, overlap: 8 },\n md: { px: 40, border: 2, font: 16, overlap: 10 },\n lg: { px: 56, border: 3, font: 22, overlap: 14 },\n xl: { px: 96, border: 4, font: 36, overlap: 20 },\n};\n\nconst resolveSize = (size: AvatarSize) => {\n if (typeof size === 'number') {\n return {\n px: size,\n border: Math.max(2, Math.round(size * 0.05)),\n font: Math.round(size * 0.4),\n overlap: Math.round(size * 0.25),\n };\n }\n return sizeMap[size];\n};\n\nconst mergeSx = (base: SxProps<Theme>, extra?: SxProps<Theme>): SxProps<Theme> => {\n if (!extra) return base;\n const baseArr = Array.isArray(base) ? base : [base];\n const extraArr = Array.isArray(extra) ? extra : [extra];\n return [...baseArr, ...extraArr] as SxProps<Theme>;\n};\n\nexport const Avatar: React.FC<AvatarProps> = ({\n items,\n type,\n displayedAvatars = 4,\n size = 'sm',\n showText = true,\n showTooltip = false,\n sx,\n avatarSx,\n className,\n overlap,\n}) => {\n // Indexamos por URL (no por posición) para que cambios en `items` — reorder,\n // filtrado, paginación — no hagan que un avatar válido \"herede\" el estado de\n // imagen rota de un item anterior que estaba en la misma posición.\n const [failedUrls, setFailedUrls] = useState<Set<string>>(new Set());\n\n const handleImageError = (url: string) => {\n setFailedUrls((prev) => {\n if (prev.has(url)) return prev;\n const next = new Set(prev);\n next.add(url);\n return next;\n });\n };\n\n if (!items || items.length === 0) {\n return null;\n }\n\n const s = resolveSize(size);\n const effectiveOverlap = overlap ?? s.overlap;\n const visibleItems = items.slice(0, displayedAvatars);\n\n const baseAvatarSx: SxProps<Theme> = {\n width: s.px,\n height: s.px,\n fontSize: s.font,\n fontWeight: 700,\n border: (theme) => `${s.border}px solid ${theme.palette.background.paper}`,\n boxSizing: 'content-box',\n };\n\n const renderSingleAvatar = (item: AvatarItem, i: number) => {\n const hasImage = !!item.imageUrl && !failedUrls.has(item.imageUrl);\n const showBadgeFallback = !!item.badge;\n const itemKey = item.imageUrl ?? `${item.text ?? ''}-${item.badge ?? ''}-${i}`;\n\n // Defaults tirando al theme; item.color / item.backgroundColor tienen prioridad.\n const itemSx: SxProps<Theme> = {\n bgcolor: item.backgroundColor ?? 'action.selected',\n color: item.color ?? 'text.secondary',\n // Stacking manual: margen negativo al segundo avatar en adelante.\n ...(i > 0 && { marginLeft: `-${effectiveOverlap}px` }),\n zIndex: visibleItems.length - i,\n };\n\n const finalSx = mergeSx(mergeSx(baseAvatarSx, itemSx), avatarSx);\n\n const avatarEl = (\n <MuiAvatar\n alt={item.text || 'User avatar'}\n src={hasImage ? item.imageUrl : undefined}\n imgProps={{\n onError: () => {\n if (item.imageUrl) handleImageError(item.imageUrl);\n },\n }}\n sx={finalSx}\n >\n {!hasImage && showBadgeFallback ? (\n <span aria-label={item.text}>{item.badge}</span>\n ) : !hasImage ? (\n <AccountCircleIcon\n aria-label={item.text}\n sx={{ width: '100%', height: '100%' }}\n />\n ) : null}\n </MuiAvatar>\n );\n\n if (showTooltip && item.text) {\n return (\n <Tooltip key={itemKey} title={item.text}>\n {avatarEl}\n </Tooltip>\n );\n }\n return <React.Fragment key={itemKey}>{avatarEl}</React.Fragment>;\n };\n\n return (\n <Box\n className={className}\n sx={mergeSx(\n {\n display: 'flex',\n alignItems: 'center',\n lineHeight: 1,\n width: 'fit-content',\n },\n sx,\n )}\n >\n <Box sx={{ display: 'flex', alignItems: 'center' }}>\n {visibleItems.map((item, i) => renderSingleAvatar(item, i))}\n </Box>\n\n {showText && items[0]?.text && (\n <Typography\n variant=\"caption\"\n sx={{\n ml: 1,\n fontSize: '0.75rem',\n fontWeight: 400,\n color: 'text.primary',\n }}\n >\n {type && items.length === 1 && (\n <Box component=\"span\" sx={{ mr: 0.5 }}>\n {type}:\n </Box>\n )}\n {items[0].text}\n {items.length > 1 && ` +${items.length - 1}`}\n </Typography>\n )}\n </Box>\n );\n};\n\nexport default Avatar;\n"],"names":["useState","_a","jsx","MuiAvatar","Tooltip","jsxs","Box","Typography"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Button-C17mExpd.cjs","sources":["../src/components/Button/Button.tsx"],"sourcesContent":["import { Button as MuiButton } from \"@mui/material\";\nimport type { ButtonProps } from \"@mui/material/Button\";\nimport React from \"react\";\n\ntype PickButtonProps = Pick<ButtonProps, \"href\" | \"children\" | \"onClick\" | \"color\" | \"disabled\" | \"className\" | \"endIcon\" | \"startIcon\" | \"loading\" | \"loadingIndicator\" | \"variant\" | \"size\" | \"loadingPosition\" | \"type\" | \"sx\">;\n\nexport interface MyButtonProps extends PickButtonProps {\n children?: React.ReactNode;\n variant?: \"text\" | \"outlined\" | \"contained\";\n disabled?: boolean;\n endIcon?: React.ReactNode;\n startIcon?: React.ReactNode;\n size?: \"small\" | \"medium\" | \"large\";\n className?: string;\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n loading?: boolean;\n loadingIndicator?: React.ReactNode;\n loadingPosition?: \"start\" | \"end\" | \"center\";\n color?: \"primary\" | \"success\" | \"error\" | \"info\" | \"warning\"; //change for tailwind class colors\n href?: string;\n \"data-testid\"?: string;\n type?: \"button\" | \"submit\" ;\n}\n\nexport const Button: React.FC<MyButtonProps> = ({\n children,\n variant,\n disabled,\n startIcon,\n endIcon,\n size,\n className,\n onClick,\n loading,\n loadingPosition,\n loadingIndicator,\n color,\n href,\n \"data-testid\": dataTestId,\n type,\n sx\n}) => {\n return (\n <MuiButton\n disabled={disabled}\n variant={variant}\n startIcon={startIcon}\n endIcon={endIcon}\n size={size}\n className={className}\n onClick={onClick}\n loading={loading}\n loadingPosition={loadingPosition}\n loadingIndicator={loadingIndicator}\n sx={{ textTransform: \"none\", ...sx }}\n disableRipple={true}\n disableElevation={true}\n color={color}\n data-testid={dataTestId}\n href={href}\n type={type}\n >\n {children}\n </MuiButton>);\n};\n\nexport default Button;"],"names":["jsx","MuiButton"],"mappings":";;;;;;;;;;;;;;;;;;;AAwBO,MAAM,SAAkC,CAAC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AACF,MAAM;AACJ,SACEA,2BAAAA;AAAAA,IAACC,SAAAA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,IAAI,iBAAE,eAAe,UAAW;AAAA,MAChC,eAAe;AAAA,MACf,kBAAkB;AAAA,MAClB;AAAA,MACA,eAAa;AAAA,MACb;AAAA,MACA;AAAA,MAEC;AAAA,IAAA;AAAA,EAAA;AAEP;;"}
1
+ {"version":3,"file":"Button-C17mExpd.cjs","sources":["../src/components/Button/Button.tsx"],"sourcesContent":["import { Button as MuiButton } from \"@mui/material\";\nimport type { SxProps, Theme } from \"@mui/material/styles\";\nimport React from \"react\";\n\nexport interface ButtonProps {\n children?: React.ReactNode;\n variant?: \"text\" | \"outlined\" | \"contained\";\n disabled?: boolean;\n endIcon?: React.ReactNode;\n startIcon?: React.ReactNode;\n size?: \"small\" | \"medium\" | \"large\";\n className?: string;\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n loading?: boolean;\n loadingIndicator?: React.ReactNode;\n loadingPosition?: \"start\" | \"end\" | \"center\";\n color?: \"inherit\" | \"primary\" | \"secondary\" | \"success\" | \"error\" | \"info\" | \"warning\";\n href?: string;\n \"data-testid\"?: string;\n type?: \"button\" | \"submit\";\n sx?: SxProps<Theme>;\n}\n\nexport const Button: React.FC<ButtonProps> = ({\n children,\n variant,\n disabled,\n startIcon,\n endIcon,\n size,\n className,\n onClick,\n loading,\n loadingPosition,\n loadingIndicator,\n color,\n href,\n \"data-testid\": dataTestId,\n type,\n sx\n}) => {\n return (\n <MuiButton\n disabled={disabled}\n variant={variant}\n startIcon={startIcon}\n endIcon={endIcon}\n size={size}\n className={className}\n onClick={onClick}\n loading={loading}\n loadingPosition={loadingPosition}\n loadingIndicator={loadingIndicator}\n sx={{ textTransform: \"none\", ...sx }}\n disableRipple={true}\n disableElevation={true}\n color={color}\n data-testid={dataTestId}\n href={href}\n type={type}\n >\n {children}\n </MuiButton>);\n};\n\nexport default Button;"],"names":["jsx","MuiButton"],"mappings":";;;;;;;;;;;;;;;;;;;AAuBO,MAAM,SAAgC,CAAC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AACF,MAAM;AACJ,SACEA,2BAAAA;AAAAA,IAACC,SAAAA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,IAAI,iBAAE,eAAe,UAAW;AAAA,MAChC,eAAe;AAAA,MACf,kBAAkB;AAAA,MAClB;AAAA,MACA,eAAa;AAAA,MACb;AAAA,MACA;AAAA,MAEC;AAAA,IAAA;AAAA,EAAA;AAEP;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Button-UkkP-bNw.js","sources":["../src/components/Button/Button.tsx"],"sourcesContent":["import { Button as MuiButton } from \"@mui/material\";\nimport type { ButtonProps } from \"@mui/material/Button\";\nimport React from \"react\";\n\ntype PickButtonProps = Pick<ButtonProps, \"href\" | \"children\" | \"onClick\" | \"color\" | \"disabled\" | \"className\" | \"endIcon\" | \"startIcon\" | \"loading\" | \"loadingIndicator\" | \"variant\" | \"size\" | \"loadingPosition\" | \"type\" | \"sx\">;\n\nexport interface MyButtonProps extends PickButtonProps {\n children?: React.ReactNode;\n variant?: \"text\" | \"outlined\" | \"contained\";\n disabled?: boolean;\n endIcon?: React.ReactNode;\n startIcon?: React.ReactNode;\n size?: \"small\" | \"medium\" | \"large\";\n className?: string;\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n loading?: boolean;\n loadingIndicator?: React.ReactNode;\n loadingPosition?: \"start\" | \"end\" | \"center\";\n color?: \"primary\" | \"success\" | \"error\" | \"info\" | \"warning\"; //change for tailwind class colors\n href?: string;\n \"data-testid\"?: string;\n type?: \"button\" | \"submit\" ;\n}\n\nexport const Button: React.FC<MyButtonProps> = ({\n children,\n variant,\n disabled,\n startIcon,\n endIcon,\n size,\n className,\n onClick,\n loading,\n loadingPosition,\n loadingIndicator,\n color,\n href,\n \"data-testid\": dataTestId,\n type,\n sx\n}) => {\n return (\n <MuiButton\n disabled={disabled}\n variant={variant}\n startIcon={startIcon}\n endIcon={endIcon}\n size={size}\n className={className}\n onClick={onClick}\n loading={loading}\n loadingPosition={loadingPosition}\n loadingIndicator={loadingIndicator}\n sx={{ textTransform: \"none\", ...sx }}\n disableRipple={true}\n disableElevation={true}\n color={color}\n data-testid={dataTestId}\n href={href}\n type={type}\n >\n {children}\n </MuiButton>);\n};\n\nexport default Button;"],"names":["MuiButton"],"mappings":";;;;;;;;;;;;;;;;;;AAwBO,MAAM,SAAkC,CAAC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AACF,MAAM;AACJ,SACE;AAAA,IAACA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,IAAI,iBAAE,eAAe,UAAW;AAAA,MAChC,eAAe;AAAA,MACf,kBAAkB;AAAA,MAClB;AAAA,MACA,eAAa;AAAA,MACb;AAAA,MACA;AAAA,MAEC;AAAA,IAAA;AAAA,EAAA;AAEP;"}
1
+ {"version":3,"file":"Button-UkkP-bNw.js","sources":["../src/components/Button/Button.tsx"],"sourcesContent":["import { Button as MuiButton } from \"@mui/material\";\nimport type { SxProps, Theme } from \"@mui/material/styles\";\nimport React from \"react\";\n\nexport interface ButtonProps {\n children?: React.ReactNode;\n variant?: \"text\" | \"outlined\" | \"contained\";\n disabled?: boolean;\n endIcon?: React.ReactNode;\n startIcon?: React.ReactNode;\n size?: \"small\" | \"medium\" | \"large\";\n className?: string;\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n loading?: boolean;\n loadingIndicator?: React.ReactNode;\n loadingPosition?: \"start\" | \"end\" | \"center\";\n color?: \"inherit\" | \"primary\" | \"secondary\" | \"success\" | \"error\" | \"info\" | \"warning\";\n href?: string;\n \"data-testid\"?: string;\n type?: \"button\" | \"submit\";\n sx?: SxProps<Theme>;\n}\n\nexport const Button: React.FC<ButtonProps> = ({\n children,\n variant,\n disabled,\n startIcon,\n endIcon,\n size,\n className,\n onClick,\n loading,\n loadingPosition,\n loadingIndicator,\n color,\n href,\n \"data-testid\": dataTestId,\n type,\n sx\n}) => {\n return (\n <MuiButton\n disabled={disabled}\n variant={variant}\n startIcon={startIcon}\n endIcon={endIcon}\n size={size}\n className={className}\n onClick={onClick}\n loading={loading}\n loadingPosition={loadingPosition}\n loadingIndicator={loadingIndicator}\n sx={{ textTransform: \"none\", ...sx }}\n disableRipple={true}\n disableElevation={true}\n color={color}\n data-testid={dataTestId}\n href={href}\n type={type}\n >\n {children}\n </MuiButton>);\n};\n\nexport default Button;"],"names":["MuiButton"],"mappings":";;;;;;;;;;;;;;;;;;AAuBO,MAAM,SAAgC,CAAC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AACF,MAAM;AACJ,SACE;AAAA,IAACA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,IAAI,iBAAE,eAAe,UAAW;AAAA,MAChC,eAAe;AAAA,MACf,kBAAkB;AAAA,MAClB;AAAA,MACA,eAAa;AAAA,MACb;AAAA,MACA;AAAA,MAEC;AAAA,IAAA;AAAA,EAAA;AAEP;"}
@@ -0,0 +1,98 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ import { jsx } from "react/jsx-runtime";
21
+ import { useTheme, Card as Card$1 } from "@mui/material";
22
+ import { r as resolvePreset } from "./resolvePreset-K6_BfWHD.js";
23
+ const paddingMap = {
24
+ none: 0,
25
+ dense: 1.5,
26
+ normal: 2.5,
27
+ loose: 4
28
+ };
29
+ function buildCardSx({
30
+ variant,
31
+ padding,
32
+ clickable
33
+ }) {
34
+ return (theme) => __spreadProps(__spreadValues({
35
+ borderRadius: 2,
36
+ backgroundColor: "background.paper",
37
+ boxShadow: variant === "elevated" ? theme.shadows[1] : "none",
38
+ border: variant === "outlined" ? `1px solid ${theme.palette.divider}` : "none",
39
+ transition: theme.transitions.create(
40
+ ["box-shadow", "transform", "border-color"],
41
+ { duration: theme.transitions.duration.shorter }
42
+ ),
43
+ cursor: clickable ? "pointer" : "default"
44
+ }, clickable && {
45
+ "&:hover": {
46
+ boxShadow: variant === "elevated" ? theme.shadows[3] : variant === "outlined" ? theme.shadows[1] : "none",
47
+ transform: variant !== "plain" ? "translateY(-1px)" : "none"
48
+ },
49
+ "&:active": {
50
+ transform: "translateY(0)"
51
+ }
52
+ }), {
53
+ p: paddingMap[padding]
54
+ });
55
+ }
56
+ function Card({
57
+ children,
58
+ variant,
59
+ padding = "normal",
60
+ clickable = false,
61
+ preset,
62
+ raised,
63
+ sx,
64
+ onClick,
65
+ onBlur,
66
+ className,
67
+ "data-testid": dataTestId
68
+ }) {
69
+ const theme = useTheme();
70
+ const resolvedVariant = raised ? "elevated" : variant != null ? variant : "elevated";
71
+ const presetSx = resolvePreset("Card", preset, theme);
72
+ const rootSx = [
73
+ buildCardSx({
74
+ variant: resolvedVariant,
75
+ padding,
76
+ clickable: clickable || Boolean(onClick)
77
+ }),
78
+ ...presetSx ? [presetSx] : [],
79
+ ...Array.isArray(sx) ? sx : sx ? [sx] : []
80
+ ];
81
+ return /* @__PURE__ */ jsx(
82
+ Card$1,
83
+ {
84
+ sx: rootSx,
85
+ className,
86
+ "data-testid": dataTestId,
87
+ onClick,
88
+ onBlur,
89
+ elevation: 0,
90
+ children
91
+ }
92
+ );
93
+ }
94
+ export {
95
+ Card as C,
96
+ buildCardSx as b
97
+ };
98
+ //# sourceMappingURL=Card-B1wtavyl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card-B1wtavyl.js","sources":["../src/components/Card/Card.sx.ts","../src/components/Card/Card.tsx"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material/styles';\n\nexport type CardVariant = 'elevated' | 'outlined' | 'plain';\nexport type CardPadding = 'none' | 'dense' | 'normal' | 'loose';\n\nexport interface BuildCardSxArgs {\n variant: CardVariant;\n padding: CardPadding;\n clickable: boolean;\n}\n\nconst paddingMap: Record<CardPadding, number> = {\n none: 0,\n dense: 1.5,\n normal: 2.5,\n loose: 4,\n};\n\n/**\n * Estilo base del Card. La prop `sx` del consumer se compone encima junto al\n * preset resuelto (en Card.tsx). Este builder solo se ocupa de variant +\n * padding para que siga siendo predecible.\n */\nexport function buildCardSx({\n variant,\n padding,\n clickable,\n}: BuildCardSxArgs): SxProps<Theme> {\n return (theme) => ({\n borderRadius: 2,\n backgroundColor: 'background.paper',\n boxShadow: variant === 'elevated' ? theme.shadows[1] : 'none',\n border:\n variant === 'outlined'\n ? `1px solid ${theme.palette.divider}`\n : 'none',\n transition: theme.transitions.create(\n ['box-shadow', 'transform', 'border-color'],\n { duration: theme.transitions.duration.shorter },\n ),\n cursor: clickable ? 'pointer' : 'default',\n ...(clickable && {\n '&:hover': {\n boxShadow:\n variant === 'elevated'\n ? theme.shadows[3]\n : variant === 'outlined'\n ? theme.shadows[1]\n : 'none',\n transform: variant !== 'plain' ? 'translateY(-1px)' : 'none',\n },\n '&:active': {\n transform: 'translateY(0)',\n },\n }),\n p: paddingMap[padding],\n });\n}\n","import { type ReactNode } from 'react';\nimport { Card as MuiCard, useTheme } from '@mui/material';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\nimport { resolvePreset } from '../_shared/resolvePreset';\nimport { buildCardSx, type CardVariant, type CardPadding } from './Card.sx';\n\nexport interface CardProps {\n /** Contenido del Card. */\n children?: ReactNode;\n /**\n * Variante visual.\n * - `elevated` (default): sombra sutil.\n * - `outlined`: borde sin sombra.\n * - `plain`: sin borde ni sombra, útil para layouts con nesting.\n */\n variant?: CardVariant;\n /** Densidad del padding interno. */\n padding?: CardPadding;\n /** Si `true`, muestra feedback de hover/active (cursor, sombra). */\n clickable?: boolean;\n /**\n * Preset registrado en `theme.styles.Card`. `\"default\"` usa el estilo\n * built-in sin preset extra.\n */\n preset?: string;\n /**\n * MUI `raised` legacy — mantenido por backward-compat. Equivale a\n * `variant=\"elevated\"` con sombra mayor. Ignora `variant` si se usa.\n */\n raised?: boolean;\n /** sx del root. Se compone sobre el base + preset. */\n sx?: SxProps<Theme>;\n onClick?: () => void;\n onBlur?: () => void;\n className?: string;\n 'data-testid'?: string;\n}\n\nexport function Card({\n children,\n variant,\n padding = 'normal',\n clickable = false,\n preset,\n raised,\n sx,\n onClick,\n onBlur,\n className,\n 'data-testid': dataTestId,\n}: CardProps) {\n const theme = useTheme();\n\n const resolvedVariant: CardVariant = raised\n ? 'elevated'\n : (variant ?? 'elevated');\n\n const presetSx = resolvePreset('Card', preset, theme);\n\n const rootSx: SxProps<Theme> = [\n buildCardSx({\n variant: resolvedVariant,\n padding,\n clickable: clickable || Boolean(onClick),\n }),\n ...(presetSx ? [presetSx] : []),\n ...(Array.isArray(sx) ? sx : sx ? [sx] : []),\n ];\n\n return (\n <MuiCard\n sx={rootSx}\n className={className}\n data-testid={dataTestId}\n onClick={onClick}\n onBlur={onBlur}\n elevation={0}\n >\n {children}\n </MuiCard>\n );\n}\n\nexport default Card;\n"],"names":["MuiCard"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAWA,MAAM,aAA0C;AAAA,EAC9C,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT;AAOO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACF,GAAoC;AAClC,SAAO,CAAC,UAAW;AAAA,IACjB,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,WAAW,YAAY,aAAa,MAAM,QAAQ,CAAC,IAAI;AAAA,IACvD,QACE,YAAY,aACR,aAAa,MAAM,QAAQ,OAAO,KAClC;AAAA,IACN,YAAY,MAAM,YAAY;AAAA,MAC5B,CAAC,cAAc,aAAa,cAAc;AAAA,MAC1C,EAAE,UAAU,MAAM,YAAY,SAAS,QAAA;AAAA,IAAQ;AAAA,IAEjD,QAAQ,YAAY,YAAY;AAAA,KAC5B,aAAa;AAAA,IACf,WAAW;AAAA,MACT,WACE,YAAY,aACR,MAAM,QAAQ,CAAC,IACf,YAAY,aACV,MAAM,QAAQ,CAAC,IACf;AAAA,MACR,WAAW,YAAY,UAAU,qBAAqB;AAAA,IAAA;AAAA,IAExD,YAAY;AAAA,MACV,WAAW;AAAA,IAAA;AAAA,EACb,IAzBe;AAAA,IA2BjB,GAAG,WAAW,OAAO;AAAA,EAAA;AAEzB;AClBO,SAAS,KAAK;AAAA,EACnB;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AACjB,GAAc;AACZ,QAAM,QAAQ,SAAA;AAEd,QAAM,kBAA+B,SACjC,aACC,4BAAW;AAEhB,QAAM,WAAW,cAAc,QAAQ,QAAQ,KAAK;AAEpD,QAAM,SAAyB;AAAA,IAC7B,YAAY;AAAA,MACV,SAAS;AAAA,MACT;AAAA,MACA,WAAW,aAAa,QAAQ,OAAO;AAAA,IAAA,CACxC;AAAA,IACD,GAAI,WAAW,CAAC,QAAQ,IAAI,CAAA;AAAA,IAC5B,GAAI,MAAM,QAAQ,EAAE,IAAI,KAAK,KAAK,CAAC,EAAE,IAAI,CAAA;AAAA,EAAC;AAG5C,SACE;AAAA,IAACA;AAAAA,IAAA;AAAA,MACC,IAAI;AAAA,MACJ;AAAA,MACA,eAAa;AAAA,MACb;AAAA,MACA;AAAA,MACA,WAAW;AAAA,MAEV;AAAA,IAAA;AAAA,EAAA;AAGP;"}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __defProps = Object.defineProperties;
4
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
5
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
8
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
+ var __spreadValues = (a, b) => {
10
+ for (var prop in b || (b = {}))
11
+ if (__hasOwnProp.call(b, prop))
12
+ __defNormalProp(a, prop, b[prop]);
13
+ if (__getOwnPropSymbols)
14
+ for (var prop of __getOwnPropSymbols(b)) {
15
+ if (__propIsEnum.call(b, prop))
16
+ __defNormalProp(a, prop, b[prop]);
17
+ }
18
+ return a;
19
+ };
20
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
21
+ const jsxRuntime = require("react/jsx-runtime");
22
+ const material = require("@mui/material");
23
+ const resolvePreset = require("./resolvePreset-CxTI6_Ln.cjs");
24
+ const paddingMap = {
25
+ none: 0,
26
+ dense: 1.5,
27
+ normal: 2.5,
28
+ loose: 4
29
+ };
30
+ function buildCardSx({
31
+ variant,
32
+ padding,
33
+ clickable
34
+ }) {
35
+ return (theme) => __spreadProps(__spreadValues({
36
+ borderRadius: 2,
37
+ backgroundColor: "background.paper",
38
+ boxShadow: variant === "elevated" ? theme.shadows[1] : "none",
39
+ border: variant === "outlined" ? `1px solid ${theme.palette.divider}` : "none",
40
+ transition: theme.transitions.create(
41
+ ["box-shadow", "transform", "border-color"],
42
+ { duration: theme.transitions.duration.shorter }
43
+ ),
44
+ cursor: clickable ? "pointer" : "default"
45
+ }, clickable && {
46
+ "&:hover": {
47
+ boxShadow: variant === "elevated" ? theme.shadows[3] : variant === "outlined" ? theme.shadows[1] : "none",
48
+ transform: variant !== "plain" ? "translateY(-1px)" : "none"
49
+ },
50
+ "&:active": {
51
+ transform: "translateY(0)"
52
+ }
53
+ }), {
54
+ p: paddingMap[padding]
55
+ });
56
+ }
57
+ function Card({
58
+ children,
59
+ variant,
60
+ padding = "normal",
61
+ clickable = false,
62
+ preset,
63
+ raised,
64
+ sx,
65
+ onClick,
66
+ onBlur,
67
+ className,
68
+ "data-testid": dataTestId
69
+ }) {
70
+ const theme = material.useTheme();
71
+ const resolvedVariant = raised ? "elevated" : variant != null ? variant : "elevated";
72
+ const presetSx = resolvePreset.resolvePreset("Card", preset, theme);
73
+ const rootSx = [
74
+ buildCardSx({
75
+ variant: resolvedVariant,
76
+ padding,
77
+ clickable: clickable || Boolean(onClick)
78
+ }),
79
+ ...presetSx ? [presetSx] : [],
80
+ ...Array.isArray(sx) ? sx : sx ? [sx] : []
81
+ ];
82
+ return /* @__PURE__ */ jsxRuntime.jsx(
83
+ material.Card,
84
+ {
85
+ sx: rootSx,
86
+ className,
87
+ "data-testid": dataTestId,
88
+ onClick,
89
+ onBlur,
90
+ elevation: 0,
91
+ children
92
+ }
93
+ );
94
+ }
95
+ exports.Card = Card;
96
+ exports.buildCardSx = buildCardSx;
97
+ //# sourceMappingURL=Card-DfdU610V.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card-DfdU610V.cjs","sources":["../src/components/Card/Card.sx.ts","../src/components/Card/Card.tsx"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material/styles';\n\nexport type CardVariant = 'elevated' | 'outlined' | 'plain';\nexport type CardPadding = 'none' | 'dense' | 'normal' | 'loose';\n\nexport interface BuildCardSxArgs {\n variant: CardVariant;\n padding: CardPadding;\n clickable: boolean;\n}\n\nconst paddingMap: Record<CardPadding, number> = {\n none: 0,\n dense: 1.5,\n normal: 2.5,\n loose: 4,\n};\n\n/**\n * Estilo base del Card. La prop `sx` del consumer se compone encima junto al\n * preset resuelto (en Card.tsx). Este builder solo se ocupa de variant +\n * padding para que siga siendo predecible.\n */\nexport function buildCardSx({\n variant,\n padding,\n clickable,\n}: BuildCardSxArgs): SxProps<Theme> {\n return (theme) => ({\n borderRadius: 2,\n backgroundColor: 'background.paper',\n boxShadow: variant === 'elevated' ? theme.shadows[1] : 'none',\n border:\n variant === 'outlined'\n ? `1px solid ${theme.palette.divider}`\n : 'none',\n transition: theme.transitions.create(\n ['box-shadow', 'transform', 'border-color'],\n { duration: theme.transitions.duration.shorter },\n ),\n cursor: clickable ? 'pointer' : 'default',\n ...(clickable && {\n '&:hover': {\n boxShadow:\n variant === 'elevated'\n ? theme.shadows[3]\n : variant === 'outlined'\n ? theme.shadows[1]\n : 'none',\n transform: variant !== 'plain' ? 'translateY(-1px)' : 'none',\n },\n '&:active': {\n transform: 'translateY(0)',\n },\n }),\n p: paddingMap[padding],\n });\n}\n","import { type ReactNode } from 'react';\nimport { Card as MuiCard, useTheme } from '@mui/material';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\nimport { resolvePreset } from '../_shared/resolvePreset';\nimport { buildCardSx, type CardVariant, type CardPadding } from './Card.sx';\n\nexport interface CardProps {\n /** Contenido del Card. */\n children?: ReactNode;\n /**\n * Variante visual.\n * - `elevated` (default): sombra sutil.\n * - `outlined`: borde sin sombra.\n * - `plain`: sin borde ni sombra, útil para layouts con nesting.\n */\n variant?: CardVariant;\n /** Densidad del padding interno. */\n padding?: CardPadding;\n /** Si `true`, muestra feedback de hover/active (cursor, sombra). */\n clickable?: boolean;\n /**\n * Preset registrado en `theme.styles.Card`. `\"default\"` usa el estilo\n * built-in sin preset extra.\n */\n preset?: string;\n /**\n * MUI `raised` legacy — mantenido por backward-compat. Equivale a\n * `variant=\"elevated\"` con sombra mayor. Ignora `variant` si se usa.\n */\n raised?: boolean;\n /** sx del root. Se compone sobre el base + preset. */\n sx?: SxProps<Theme>;\n onClick?: () => void;\n onBlur?: () => void;\n className?: string;\n 'data-testid'?: string;\n}\n\nexport function Card({\n children,\n variant,\n padding = 'normal',\n clickable = false,\n preset,\n raised,\n sx,\n onClick,\n onBlur,\n className,\n 'data-testid': dataTestId,\n}: CardProps) {\n const theme = useTheme();\n\n const resolvedVariant: CardVariant = raised\n ? 'elevated'\n : (variant ?? 'elevated');\n\n const presetSx = resolvePreset('Card', preset, theme);\n\n const rootSx: SxProps<Theme> = [\n buildCardSx({\n variant: resolvedVariant,\n padding,\n clickable: clickable || Boolean(onClick),\n }),\n ...(presetSx ? [presetSx] : []),\n ...(Array.isArray(sx) ? sx : sx ? [sx] : []),\n ];\n\n return (\n <MuiCard\n sx={rootSx}\n className={className}\n data-testid={dataTestId}\n onClick={onClick}\n onBlur={onBlur}\n elevation={0}\n >\n {children}\n </MuiCard>\n );\n}\n\nexport default Card;\n"],"names":["useTheme","resolvePreset","jsx","MuiCard"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAWA,MAAM,aAA0C;AAAA,EAC9C,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT;AAOO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACF,GAAoC;AAClC,SAAO,CAAC,UAAW;AAAA,IACjB,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,WAAW,YAAY,aAAa,MAAM,QAAQ,CAAC,IAAI;AAAA,IACvD,QACE,YAAY,aACR,aAAa,MAAM,QAAQ,OAAO,KAClC;AAAA,IACN,YAAY,MAAM,YAAY;AAAA,MAC5B,CAAC,cAAc,aAAa,cAAc;AAAA,MAC1C,EAAE,UAAU,MAAM,YAAY,SAAS,QAAA;AAAA,IAAQ;AAAA,IAEjD,QAAQ,YAAY,YAAY;AAAA,KAC5B,aAAa;AAAA,IACf,WAAW;AAAA,MACT,WACE,YAAY,aACR,MAAM,QAAQ,CAAC,IACf,YAAY,aACV,MAAM,QAAQ,CAAC,IACf;AAAA,MACR,WAAW,YAAY,UAAU,qBAAqB;AAAA,IAAA;AAAA,IAExD,YAAY;AAAA,MACV,WAAW;AAAA,IAAA;AAAA,EACb,IAzBe;AAAA,IA2BjB,GAAG,WAAW,OAAO;AAAA,EAAA;AAEzB;AClBO,SAAS,KAAK;AAAA,EACnB;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AACjB,GAAc;AACZ,QAAM,QAAQA,SAAAA,SAAA;AAEd,QAAM,kBAA+B,SACjC,aACC,4BAAW;AAEhB,QAAM,WAAWC,cAAAA,cAAc,QAAQ,QAAQ,KAAK;AAEpD,QAAM,SAAyB;AAAA,IAC7B,YAAY;AAAA,MACV,SAAS;AAAA,MACT;AAAA,MACA,WAAW,aAAa,QAAQ,OAAO;AAAA,IAAA,CACxC;AAAA,IACD,GAAI,WAAW,CAAC,QAAQ,IAAI,CAAA;AAAA,IAC5B,GAAI,MAAM,QAAQ,EAAE,IAAI,KAAK,KAAK,CAAC,EAAE,IAAI,CAAA;AAAA,EAAC;AAG5C,SACEC,2BAAAA;AAAAA,IAACC,SAAAA;AAAAA,IAAA;AAAA,MACC,IAAI;AAAA,MACJ;AAAA,MACA,eAAa;AAAA,MACb;AAAA,MACA;AAAA,MACA,WAAW;AAAA,MAEV;AAAA,IAAA;AAAA,EAAA;AAGP;;;"}
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __defProps = Object.defineProperties;
4
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
5
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
8
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
+ var __spreadValues = (a, b) => {
10
+ for (var prop in b || (b = {}))
11
+ if (__hasOwnProp.call(b, prop))
12
+ __defNormalProp(a, prop, b[prop]);
13
+ if (__getOwnPropSymbols)
14
+ for (var prop of __getOwnPropSymbols(b)) {
15
+ if (__propIsEnum.call(b, prop))
16
+ __defNormalProp(a, prop, b[prop]);
17
+ }
18
+ return a;
19
+ };
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
+ const jsxRuntime = require("react/jsx-runtime");
34
+ const material = require("@mui/material");
35
+ const styles = require("@mui/material/styles");
36
+ const reactHookForm = require("react-hook-form");
37
+ const resolvePreset = require("./resolvePreset-CxTI6_Ln.cjs");
38
+ const toRadius = (borderRadius) => typeof borderRadius === "number" ? `${borderRadius}px` : borderRadius;
39
+ const FOCUS_TRANSITION = "border-color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms, box-shadow 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms";
40
+ const buildCheckboxSx = ({
41
+ bordered,
42
+ borderRadius,
43
+ hasLabel,
44
+ error
45
+ }) => {
46
+ const radius = toRadius(borderRadius);
47
+ if (!bordered) {
48
+ return {
49
+ "& .MuiFormHelperText-root": { marginLeft: 0 }
50
+ };
51
+ }
52
+ return (theme) => ({
53
+ "& .MuiFormControlLabel-root": __spreadValues(__spreadProps(__spreadValues({
54
+ marginLeft: 0,
55
+ marginRight: 0,
56
+ paddingX: 1.5,
57
+ paddingY: 0.5,
58
+ border: `1px solid ${error ? theme.palette.error.main : theme.palette.divider}`,
59
+ borderRadius: radius,
60
+ transition: FOCUS_TRANSITION
61
+ }, error && {
62
+ boxShadow: `0 0 0 1px ${theme.palette.error.main}`
63
+ }), {
64
+ "&:focus-within": {
65
+ borderColor: error ? theme.palette.error.main : theme.palette.primary.main,
66
+ boxShadow: `0 0 0 1px ${error ? theme.palette.error.main : theme.palette.primary.main}`
67
+ }
68
+ }), hasLabel && {
69
+ width: "100%",
70
+ justifyContent: "space-between"
71
+ }),
72
+ "& .MuiFormHelperText-root": {
73
+ marginLeft: 0
74
+ }
75
+ });
76
+ };
77
+ const Checkbox = (props) => {
78
+ const _a = props, {
79
+ label,
80
+ size = "medium",
81
+ color = "primary",
82
+ labelPlacement = "end",
83
+ indeterminate = false,
84
+ disabled = false,
85
+ error = false,
86
+ helperText,
87
+ bordered = false,
88
+ borderRadius = 10,
89
+ defaultChecked,
90
+ preset,
91
+ sx
92
+ } = _a, rest = __objRest(_a, [
93
+ "label",
94
+ "size",
95
+ "color",
96
+ "labelPlacement",
97
+ "indeterminate",
98
+ "disabled",
99
+ "error",
100
+ "helperText",
101
+ "bordered",
102
+ "borderRadius",
103
+ "defaultChecked",
104
+ "preset",
105
+ "sx"
106
+ ]);
107
+ const theme = styles.useTheme();
108
+ const presetSx = resolvePreset.resolvePreset("Checkbox", preset, theme);
109
+ const buildSx = (effectiveError) => [
110
+ buildCheckboxSx({
111
+ bordered,
112
+ borderRadius,
113
+ hasLabel: !!label,
114
+ error: effectiveError
115
+ }),
116
+ ...presetSx ? [presetSx] : [],
117
+ ...Array.isArray(sx) ? sx : sx ? [sx] : []
118
+ ];
119
+ const renderCheckbox = (checked2, onChange2, onBlur, inputRef) => {
120
+ const checkboxEl = /* @__PURE__ */ jsxRuntime.jsx(
121
+ material.Checkbox,
122
+ __spreadProps(__spreadValues({}, rest), {
123
+ size,
124
+ color,
125
+ checked: !!checked2,
126
+ indeterminate,
127
+ onChange: (_e, next) => onChange2(next),
128
+ onBlur,
129
+ inputRef,
130
+ disabled
131
+ })
132
+ );
133
+ return label ? /* @__PURE__ */ jsxRuntime.jsx(
134
+ material.FormControlLabel,
135
+ {
136
+ control: checkboxEl,
137
+ label,
138
+ labelPlacement,
139
+ disabled
140
+ }
141
+ ) : checkboxEl;
142
+ };
143
+ if ("control" in props && props.control) {
144
+ const { name, control, validation, onValueChange } = props;
145
+ return /* @__PURE__ */ jsxRuntime.jsx(
146
+ reactHookForm.Controller,
147
+ {
148
+ name,
149
+ control,
150
+ rules: validation,
151
+ defaultValue: defaultChecked,
152
+ render: ({ field, fieldState: { error: fieldError } }) => {
153
+ var _a2;
154
+ const finalError = !!fieldError || error;
155
+ const finalHelperText = (_a2 = fieldError == null ? void 0 : fieldError.message) != null ? _a2 : helperText;
156
+ return /* @__PURE__ */ jsxRuntime.jsxs(
157
+ material.FormControl,
158
+ {
159
+ error: finalError,
160
+ disabled,
161
+ sx: buildSx(finalError),
162
+ children: [
163
+ renderCheckbox(
164
+ !!field.value,
165
+ (next) => {
166
+ field.onChange(next);
167
+ onValueChange == null ? void 0 : onValueChange(next);
168
+ },
169
+ field.onBlur,
170
+ field.ref
171
+ ),
172
+ finalHelperText && /* @__PURE__ */ jsxRuntime.jsx(material.FormHelperText, { children: finalHelperText })
173
+ ]
174
+ }
175
+ );
176
+ }
177
+ }
178
+ );
179
+ }
180
+ const { checked, onChange } = props;
181
+ return /* @__PURE__ */ jsxRuntime.jsxs(material.FormControl, { error, disabled, sx: buildSx(error), children: [
182
+ renderCheckbox(checked, onChange),
183
+ helperText && /* @__PURE__ */ jsxRuntime.jsx(material.FormHelperText, { children: helperText })
184
+ ] });
185
+ };
186
+ exports.Checkbox = Checkbox;
187
+ //# sourceMappingURL=Checkbox-BCqMFWt4.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checkbox-BCqMFWt4.cjs","sources":["../src/components/Checkbox/Checkbox.sx.ts","../src/components/Checkbox/Checkbox.tsx"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material/styles';\n\nexport interface BuildCheckboxSxOptions {\n bordered: boolean;\n borderRadius: number | string;\n hasLabel: boolean;\n error: boolean;\n}\n\nconst toRadius = (borderRadius: number | string) =>\n typeof borderRadius === 'number' ? `${borderRadius}px` : borderRadius;\n\nconst FOCUS_TRANSITION =\n 'border-color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms, ' +\n 'box-shadow 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms';\n\n/**\n * Builder de sx para Checkbox. Cuando `bordered=true`, el contenedor del\n * `FormControlLabel` gana un borde estilo \"form field\" con focus ring y\n * estado de error (matchea InputGroup / Switch / RadioGroup).\n */\nexport const buildCheckboxSx = ({\n bordered,\n borderRadius,\n hasLabel,\n error,\n}: BuildCheckboxSxOptions): SxProps<Theme> => {\n const radius = toRadius(borderRadius);\n\n if (!bordered) {\n return {\n '& .MuiFormHelperText-root': { marginLeft: 0 },\n };\n }\n\n return (theme) => ({\n '& .MuiFormControlLabel-root': {\n marginLeft: 0,\n marginRight: 0,\n paddingX: 1.5,\n paddingY: 0.5,\n border: `1px solid ${\n error ? theme.palette.error.main : theme.palette.divider\n }`,\n borderRadius: radius,\n transition: FOCUS_TRANSITION,\n ...(error && {\n boxShadow: `0 0 0 1px ${theme.palette.error.main}`,\n }),\n '&:focus-within': {\n borderColor: error\n ? theme.palette.error.main\n : theme.palette.primary.main,\n boxShadow: `0 0 0 1px ${\n error ? theme.palette.error.main : theme.palette.primary.main\n }`,\n },\n ...(hasLabel && {\n width: '100%',\n justifyContent: 'space-between',\n }),\n },\n '& .MuiFormHelperText-root': {\n marginLeft: 0,\n },\n });\n};\n","import type { FC, Ref } from 'react';\nimport {\n Checkbox as MuiCheckbox,\n FormControl,\n FormControlLabel,\n FormHelperText,\n type CheckboxProps as MuiCheckboxProps,\n type SxProps,\n type Theme,\n} from '@mui/material';\nimport { useTheme } from '@mui/material/styles';\nimport { Controller, type Control, type RegisterOptions } from 'react-hook-form';\n\nimport { buildCheckboxSx } from './Checkbox.sx';\nimport { resolvePreset } from '../_shared/resolvePreset';\n\n// ── Tipos de dominio ─────────────────────────────────────────────────────\nexport type CheckboxSize = 'small' | 'medium';\nexport type CheckboxLabelPlacement = 'start' | 'end' | 'top' | 'bottom';\nexport type CheckboxColor =\n | 'default'\n | 'primary'\n | 'secondary'\n | 'success'\n | 'error'\n | 'info'\n | 'warning';\n\n// ── Props base (todo lo común entre RHF y controlado) ────────────────────\nexport interface BaseCheckboxProps\n extends Omit<\n MuiCheckboxProps,\n 'value' | 'onChange' | 'checked' | 'defaultChecked' | 'size' | 'color'\n > {\n /** Texto al lado del checkbox. Si está ausente, se renderiza solo el control. */\n label?: string;\n size?: CheckboxSize;\n /** Color del checkbox. Default: `'primary'`. */\n color?: CheckboxColor;\n /** Posición del label respecto al checkbox. Default: `'end'`. */\n labelPlacement?: CheckboxLabelPlacement;\n /** Estado indeterminate (tri-state). Típico para \"select all\" parcial. */\n indeterminate?: boolean;\n disabled?: boolean;\n error?: boolean;\n helperText?: string;\n /** Renderiza un contenedor con borde alrededor del checkbox + label. Default: false. */\n bordered?: boolean;\n /** Border radius del contenedor (cuando bordered). Default: 10. */\n borderRadius?: number | string;\n /** Valor inicial del checkbox en modo RHF. */\n defaultChecked?: boolean;\n /**\n * Nombre del preset de estilo registrado en `theme.styles.Checkbox`.\n * - `\"default\"` (o ausente) = estilo built-in del paquete.\n * - Cualquier otro string = mergea el preset encima del estilo built-in.\n */\n preset?: string;\n sx?: SxProps<Theme>;\n}\n\n// ── Variantes discriminadas (RHF vs controlado) ──────────────────────────\nexport interface RHFCheckboxProps extends BaseCheckboxProps {\n name: string;\n // `any` plano (no `Control<any>`): RHF tipa `Control<T>` con generics en\n // posiciones tanto contravariantes como covariantes (ej. `_subjects.state`).\n // Cuando el componente o su uso involucra generics adicionales, TS se\n // confunde narroweando el discriminated union y `Control<any>` no logra\n // absorber `Control<MyForm>` en la comparación estructural profunda. El\n // `any` plano elimina ese ruido. RHF adentro sigue teniendo sus tipos\n // fuertes — solo degradamos la superficie del prop del componente.\n control: any;\n validation?: RegisterOptions;\n /**\n * Side-effect que corre después de que RHF actualiza el form state.\n * Útil para cascadas entre campos. NO reemplaza al handler de RHF.\n */\n onValueChange?: (checked: boolean) => void;\n checked?: never;\n onChange?: never;\n}\n\nexport interface ControlledCheckboxProps extends BaseCheckboxProps {\n name?: string;\n control?: never;\n validation?: never;\n checked: boolean;\n onChange: (checked: boolean) => void;\n}\n\n// ── API pública final ────────────────────────────────────────────────────\nexport type CheckboxProps = RHFCheckboxProps | ControlledCheckboxProps;\n\nexport const Checkbox: FC<CheckboxProps> = (props) => {\n const {\n label,\n size = 'medium',\n color = 'primary',\n labelPlacement = 'end',\n indeterminate = false,\n disabled = false,\n error = false,\n helperText,\n bordered = false,\n borderRadius = 10,\n defaultChecked,\n preset,\n sx,\n ...rest\n } = props as ControlledCheckboxProps & {\n control?: Control<any>;\n validation?: RegisterOptions;\n };\n\n const theme = useTheme();\n const presetSx = resolvePreset('Checkbox', preset, theme);\n\n // Construye el sx con el estado de error efectivo; se llama por rama\n // (RHF usa el error del Controller, controlado usa el prop `error`).\n const buildSx = (effectiveError: boolean) => [\n buildCheckboxSx({\n bordered,\n borderRadius,\n hasLabel: !!label,\n error: effectiveError,\n }),\n ...(presetSx ? [presetSx] : []),\n ...(Array.isArray(sx) ? sx : sx ? [sx] : []),\n ];\n\n const renderCheckbox = (\n checked: boolean,\n onChange: (next: boolean) => void,\n onBlur?: () => void,\n inputRef?: Ref<HTMLInputElement>,\n ) => {\n const checkboxEl = (\n <MuiCheckbox\n {...rest}\n size={size}\n color={color}\n checked={!!checked}\n indeterminate={indeterminate}\n onChange={(_e, next) => onChange(next)}\n onBlur={onBlur}\n inputRef={inputRef}\n disabled={disabled}\n />\n );\n\n return label ? (\n <FormControlLabel\n control={checkboxEl}\n label={label}\n labelPlacement={labelPlacement}\n disabled={disabled}\n />\n ) : (\n checkboxEl\n );\n };\n\n // ── RHF mode ──────────────────────────────────────────────────────────\n if ('control' in props && props.control) {\n const { name, control, validation, onValueChange } = props as RHFCheckboxProps;\n return (\n <Controller\n name={name}\n control={control}\n rules={validation}\n defaultValue={defaultChecked}\n render={({ field, fieldState: { error: fieldError } }) => {\n const finalError = !!fieldError || error;\n const finalHelperText = fieldError?.message ?? helperText;\n return (\n <FormControl\n error={finalError}\n disabled={disabled}\n sx={buildSx(finalError)}\n >\n {renderCheckbox(\n !!field.value,\n (next) => {\n field.onChange(next);\n onValueChange?.(next);\n },\n field.onBlur,\n field.ref,\n )}\n {finalHelperText && <FormHelperText>{finalHelperText}</FormHelperText>}\n </FormControl>\n );\n }}\n />\n );\n }\n\n // ── Controlled mode ───────────────────────────────────────────────────\n const { checked, onChange } = props as ControlledCheckboxProps;\n return (\n <FormControl error={error} disabled={disabled} sx={buildSx(error)}>\n {renderCheckbox(checked, onChange)}\n {helperText && <FormHelperText>{helperText}</FormHelperText>}\n </FormControl>\n );\n};\n\nexport default Checkbox;\n"],"names":["useTheme","resolvePreset","checked","onChange","jsx","MuiCheckbox","FormControlLabel","Controller","_a","jsxs","FormControl","FormHelperText"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,MAAM,WAAW,CAAC,iBAChB,OAAO,iBAAiB,WAAW,GAAG,YAAY,OAAO;AAE3D,MAAM,mBACJ;AAQK,MAAM,kBAAkB,CAAC;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA8C;AAC5C,QAAM,SAAS,SAAS,YAAY;AAEpC,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,MACL,6BAA6B,EAAE,YAAY,EAAA;AAAA,IAAE;AAAA,EAEjD;AAEA,SAAO,CAAC,WAAW;AAAA,IACjB,+BAA+B;AAAA,MAC7B,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,UAAU;AAAA,MACV,UAAU;AAAA,MACV,QAAQ,aACN,QAAQ,MAAM,QAAQ,MAAM,OAAO,MAAM,QAAQ,OACnD;AAAA,MACA,cAAc;AAAA,MACd,YAAY;AAAA,OACR,SAAS;AAAA,MACX,WAAW,aAAa,MAAM,QAAQ,MAAM,IAAI;AAAA,IAAA,IAXrB;AAAA,MAa7B,kBAAkB;AAAA,QAChB,aAAa,QACT,MAAM,QAAQ,MAAM,OACpB,MAAM,QAAQ,QAAQ;AAAA,QAC1B,WAAW,aACT,QAAQ,MAAM,QAAQ,MAAM,OAAO,MAAM,QAAQ,QAAQ,IAC3D;AAAA,MAAA;AAAA,QAEE,YAAY;AAAA,MACd,OAAO;AAAA,MACP,gBAAgB;AAAA,IAAA;AAAA,IAGpB,6BAA6B;AAAA,MAC3B,YAAY;AAAA,IAAA;AAAA,EACd;AAEJ;AC2BO,MAAM,WAA8B,CAAC,UAAU;AACpD,QAeI,YAdF;AAAA;AAAA,IACA,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,WAAW;AAAA,IACX,QAAQ;AAAA,IACR;AAAA,IACA,WAAW;AAAA,IACX,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,MAEE,IADC,iBACD,IADC;AAAA,IAbH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAOF,QAAM,QAAQA,OAAAA,SAAA;AACd,QAAM,WAAWC,cAAAA,cAAc,YAAY,QAAQ,KAAK;AAIxD,QAAM,UAAU,CAAC,mBAA4B;AAAA,IAC3C,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA,UAAU,CAAC,CAAC;AAAA,MACZ,OAAO;AAAA,IAAA,CACR;AAAA,IACD,GAAI,WAAW,CAAC,QAAQ,IAAI,CAAA;AAAA,IAC5B,GAAI,MAAM,QAAQ,EAAE,IAAI,KAAK,KAAK,CAAC,EAAE,IAAI,CAAA;AAAA,EAAC;AAG5C,QAAM,iBAAiB,CACrBC,UACAC,WACA,QACA,aACG;AACH,UAAM,aACJC,2BAAAA;AAAAA,MAACC,SAAAA;AAAAA,MAAA,iCACK,OADL;AAAA,QAEC;AAAA,QACA;AAAA,QACA,SAAS,CAAC,CAACH;AAAAA,QACX;AAAA,QACA,UAAU,CAAC,IAAI,SAASC,UAAS,IAAI;AAAA,QACrC;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAAA;AAIJ,WAAO,QACLC,2BAAAA;AAAAA,MAACE,SAAAA;AAAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAAA,IAGF;AAAA,EAEJ;AAGA,MAAI,aAAa,SAAS,MAAM,SAAS;AACvC,UAAM,EAAE,MAAM,SAAS,YAAY,kBAAkB;AACrD,WACEF,2BAAAA;AAAAA,MAACG,cAAAA;AAAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,OAAO;AAAA,QACP,cAAc;AAAA,QACd,QAAQ,CAAC,EAAE,OAAO,YAAY,EAAE,OAAO,WAAA,QAAmB;;AACxD,gBAAM,aAAa,CAAC,CAAC,cAAc;AACnC,gBAAM,mBAAkBC,MAAA,yCAAY,YAAZ,OAAAA,MAAuB;AAC/C,iBACEC,2BAAAA;AAAAA,YAACC,SAAAA;AAAAA,YAAA;AAAA,cACC,OAAO;AAAA,cACP;AAAA,cACA,IAAI,QAAQ,UAAU;AAAA,cAErB,UAAA;AAAA,gBAAA;AAAA,kBACC,CAAC,CAAC,MAAM;AAAA,kBACR,CAAC,SAAS;AACR,0BAAM,SAAS,IAAI;AACnB,mEAAgB;AAAA,kBAClB;AAAA,kBACA,MAAM;AAAA,kBACN,MAAM;AAAA,gBAAA;AAAA,gBAEP,mBAAmBN,2BAAAA,IAACO,SAAAA,gBAAA,EAAgB,UAAA,gBAAA,CAAgB;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAG3D;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AAGA,QAAM,EAAE,SAAS,SAAA,IAAa;AAC9B,yCACGD,sBAAA,EAAY,OAAc,UAAoB,IAAI,QAAQ,KAAK,GAC7D,UAAA;AAAA,IAAA,eAAe,SAAS,QAAQ;AAAA,IAChC,cAAcN,2BAAAA,IAACO,SAAAA,gBAAA,EAAgB,UAAA,WAAA,CAAW;AAAA,EAAA,GAC7C;AAEJ;;"}