@soyfri/shared-library 3.1.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/ActionMenu-BXRVKopM.js +106 -0
  2. package/ActionMenu-BXRVKopM.js.map +1 -0
  3. package/ActionMenu-wNWkDZWh.cjs +105 -0
  4. package/ActionMenu-wNWkDZWh.cjs.map +1 -0
  5. package/AppBarMenuToggle-BpXBMeca.js +128 -0
  6. package/AppBarMenuToggle-BpXBMeca.js.map +1 -0
  7. package/AppBarMenuToggle-D_RJGtHO.cjs +127 -0
  8. package/AppBarMenuToggle-D_RJGtHO.cjs.map +1 -0
  9. package/{Autocomplete-CejWztBY.cjs → Autocomplete-Bd3bN4Cw.cjs} +16 -11
  10. package/Autocomplete-Bd3bN4Cw.cjs.map +1 -0
  11. package/{Autocomplete-C_lW1VER.js → Autocomplete-E5aSUGVK.js} +16 -11
  12. package/Autocomplete-E5aSUGVK.js.map +1 -0
  13. package/{Avatar-Dw5rzayR.cjs → Avatar-BjyfSNvP.cjs} +3 -7
  14. package/Avatar-BjyfSNvP.cjs.map +1 -0
  15. package/{Avatar-H8akSege.js → Avatar-C_C4bcb9.js} +3 -7
  16. package/Avatar-C_C4bcb9.js.map +1 -0
  17. package/{Checkbox-gB5YKkVo.js → Checkbox-BL4kvHFB.js} +3 -2
  18. package/Checkbox-BL4kvHFB.js.map +1 -0
  19. package/{Checkbox-BCqMFWt4.cjs → Checkbox-Bx4Asmg7.cjs} +3 -2
  20. package/Checkbox-Bx4Asmg7.cjs.map +1 -0
  21. package/{DatePicker-t7uDTZMl.cjs → DatePicker-CMcQddi1.cjs} +45 -42
  22. package/DatePicker-CMcQddi1.cjs.map +1 -0
  23. package/{DatePicker-_IGWc3I5.js → DatePicker-D__RSgs-.js} +45 -42
  24. package/DatePicker-D__RSgs-.js.map +1 -0
  25. package/{DateTimePicker-BxQyjTCY.cjs → DateTimePicker-BVJGq1A0.cjs} +7 -15
  26. package/DateTimePicker-BVJGq1A0.cjs.map +1 -0
  27. package/{DateTimePicker-CrmWav_j.js → DateTimePicker-LeaE716a.js} +7 -15
  28. package/DateTimePicker-LeaE716a.js.map +1 -0
  29. package/DrawerItem--OTb3X9v.cjs +270 -0
  30. package/DrawerItem--OTb3X9v.cjs.map +1 -0
  31. package/DrawerItem-DKlMQ-xs.js +271 -0
  32. package/DrawerItem-DKlMQ-xs.js.map +1 -0
  33. package/Flyout-DCcDBYKT.js +117 -0
  34. package/Flyout-DCcDBYKT.js.map +1 -0
  35. package/Flyout-fycujUVf.cjs +116 -0
  36. package/Flyout-fycujUVf.cjs.map +1 -0
  37. package/Gallery-ClBJxCMc.js +491 -0
  38. package/Gallery-ClBJxCMc.js.map +1 -0
  39. package/Gallery-Cn1Bj_ao.cjs +490 -0
  40. package/Gallery-Cn1Bj_ao.cjs.map +1 -0
  41. package/Icon-CUwK2c8z.js +108 -0
  42. package/Icon-CUwK2c8z.js.map +1 -0
  43. package/Icon-ChnAivGo.cjs +107 -0
  44. package/Icon-ChnAivGo.cjs.map +1 -0
  45. package/{Input-BL1NUIbr.js → Input-BibHlnGN.js} +6 -8
  46. package/Input-BibHlnGN.js.map +1 -0
  47. package/{Input-BcLJlPRo.cjs → Input-Bpjw7qwq.cjs} +6 -8
  48. package/Input-Bpjw7qwq.cjs.map +1 -0
  49. package/InputGroup-BZ7cmAcg.cjs +140 -0
  50. package/InputGroup-BZ7cmAcg.cjs.map +1 -0
  51. package/InputGroup-D5pXKGjZ.js +141 -0
  52. package/InputGroup-D5pXKGjZ.js.map +1 -0
  53. package/MenuButton-C4s8rG05.cjs +79 -0
  54. package/MenuButton-C4s8rG05.cjs.map +1 -0
  55. package/MenuButton-CZRN4P6x.js +80 -0
  56. package/MenuButton-CZRN4P6x.js.map +1 -0
  57. package/{RadioGroup-Dd0rHXSX.cjs → RadioGroup-DVvmmDs3.cjs} +3 -2
  58. package/RadioGroup-DVvmmDs3.cjs.map +1 -0
  59. package/{RadioGroup-bO-ahP9T.js → RadioGroup-cKCpag8W.js} +3 -2
  60. package/RadioGroup-cKCpag8W.js.map +1 -0
  61. package/{Select-BY5Y0qZ1.js → Select-BaY3zJhq.js} +4 -3
  62. package/Select-BaY3zJhq.js.map +1 -0
  63. package/{Select-CURrHSyl.cjs → Select-WpHNCHHz.cjs} +4 -3
  64. package/Select-WpHNCHHz.cjs.map +1 -0
  65. package/{Switch-CQFOopYy.cjs → Switch-B4ex7yKR.cjs} +3 -2
  66. package/Switch-B4ex7yKR.cjs.map +1 -0
  67. package/{Switch-D72dpkH2.js → Switch-CY1Dd2ff.js} +3 -2
  68. package/Switch-CY1Dd2ff.js.map +1 -0
  69. package/{Table-C4OM6rrC.cjs → Table-DaNgX7PO.cjs} +8 -11
  70. package/{Table-C4OM6rrC.cjs.map → Table-DaNgX7PO.cjs.map} +1 -1
  71. package/{Table-C2LbW0B1.js → Table-aNFAOuQk.js} +8 -11
  72. package/{Table-C2LbW0B1.js.map → Table-aNFAOuQk.js.map} +1 -1
  73. package/TimelineItem-0jRPFT11.js +68 -0
  74. package/TimelineItem-0jRPFT11.js.map +1 -0
  75. package/TimelineItem-BbhUWJhU.cjs +84 -0
  76. package/TimelineItem-BbhUWJhU.cjs.map +1 -0
  77. package/Tooltip-BB77JBcg.js +42 -0
  78. package/Tooltip-BB77JBcg.js.map +1 -0
  79. package/Tooltip-DpAsWGpN.cjs +41 -0
  80. package/Tooltip-DpAsWGpN.cjs.map +1 -0
  81. package/components/ActionMenu/ActionMenu.cjs +4 -104
  82. package/components/ActionMenu/ActionMenu.cjs.map +1 -1
  83. package/components/ActionMenu/ActionMenu.js +4 -104
  84. package/components/ActionMenu/ActionMenu.js.map +1 -1
  85. package/components/AppBar/AppBar.cjs +6 -126
  86. package/components/AppBar/AppBar.cjs.map +1 -1
  87. package/components/AppBar/AppBar.js +6 -126
  88. package/components/AppBar/AppBar.js.map +1 -1
  89. package/components/Autocomplete/Autocomplete.cjs +1 -1
  90. package/components/Autocomplete/Autocomplete.js +1 -1
  91. package/components/Avatar/Avatar.cjs +1 -1
  92. package/components/Avatar/Avatar.js +1 -1
  93. package/components/Checkbox/Checkbox.cjs +1 -1
  94. package/components/Checkbox/Checkbox.js +1 -1
  95. package/components/DatePicker/DatePicker.cjs +1 -1
  96. package/components/DatePicker/DatePicker.js +1 -1
  97. package/components/DateTimePicker/DateTimePicker.cjs +1 -1
  98. package/components/DateTimePicker/DateTimePicker.js +1 -1
  99. package/components/Drawer/Drawer.cjs +5 -269
  100. package/components/Drawer/Drawer.cjs.map +1 -1
  101. package/components/Drawer/Drawer.js +5 -269
  102. package/components/Drawer/Drawer.js.map +1 -1
  103. package/components/Flyout/Flyout.cjs +2 -114
  104. package/components/Flyout/Flyout.cjs.map +1 -1
  105. package/components/Flyout/Flyout.js +2 -114
  106. package/components/Flyout/Flyout.js.map +1 -1
  107. package/components/Gallery/Gallery.cjs +3 -489
  108. package/components/Gallery/Gallery.cjs.map +1 -1
  109. package/components/Gallery/Gallery.js +3 -489
  110. package/components/Gallery/Gallery.js.map +1 -1
  111. package/components/Icon/Icon.cjs +3 -106
  112. package/components/Icon/Icon.cjs.map +1 -1
  113. package/components/Icon/Icon.js +3 -106
  114. package/components/Icon/Icon.js.map +1 -1
  115. package/components/Input/Input.cjs +1 -1
  116. package/components/Input/Input.js +1 -1
  117. package/components/InputGroup/InputGroup.cjs +3 -137
  118. package/components/InputGroup/InputGroup.cjs.map +1 -1
  119. package/components/InputGroup/InputGroup.js +3 -137
  120. package/components/InputGroup/InputGroup.js.map +1 -1
  121. package/components/MenuButton/MenuButton.cjs +2 -75
  122. package/components/MenuButton/MenuButton.cjs.map +1 -1
  123. package/components/MenuButton/MenuButton.d.ts +6 -0
  124. package/components/MenuButton/MenuButton.js +2 -75
  125. package/components/MenuButton/MenuButton.js.map +1 -1
  126. package/components/RadioGroup/RadioGroup.cjs +1 -1
  127. package/components/RadioGroup/RadioGroup.js +1 -1
  128. package/components/Select/Select.cjs +1 -1
  129. package/components/Select/Select.js +1 -1
  130. package/components/Switch/Switch.cjs +1 -1
  131. package/components/Switch/Switch.js +1 -1
  132. package/components/Table/Table.cjs +1 -1
  133. package/components/Table/Table.js +1 -1
  134. package/components/Timeline/Timeline.cjs +4 -83
  135. package/components/Timeline/Timeline.cjs.map +1 -1
  136. package/components/Timeline/Timeline.js +4 -66
  137. package/components/Timeline/Timeline.js.map +1 -1
  138. package/components/Tooltip/Tooltip.cjs +2 -39
  139. package/components/Tooltip/Tooltip.cjs.map +1 -1
  140. package/components/Tooltip/Tooltip.js +2 -39
  141. package/components/Tooltip/Tooltip.js.map +1 -1
  142. package/{formField.sx-BAX7KwMR.cjs → formField.sx-BZj7TaMa.cjs} +29 -4
  143. package/formField.sx-BZj7TaMa.cjs.map +1 -0
  144. package/{formField.sx-8_QRnKxv.js → formField.sx-DD1sxwWH.js} +29 -4
  145. package/formField.sx-DD1sxwWH.js.map +1 -0
  146. package/index.cjs +36 -10
  147. package/index.cjs.map +1 -1
  148. package/index.d.ts +11 -0
  149. package/index.js +36 -10
  150. package/index.js.map +1 -1
  151. package/package.json +1 -1
  152. package/styles.css +375 -0
  153. package/theme/tokens.d.ts +12 -2
  154. package/{tokens-jaWWNk39.cjs → tokens-BGPazVFO.cjs} +4 -2
  155. package/tokens-BGPazVFO.cjs.map +1 -0
  156. package/{tokens-BRrcP_p_.js → tokens-DE2fV3a9.js} +12 -10
  157. package/tokens-DE2fV3a9.js.map +1 -0
  158. package/Autocomplete-C_lW1VER.js.map +0 -1
  159. package/Autocomplete-CejWztBY.cjs.map +0 -1
  160. package/Avatar-Dw5rzayR.cjs.map +0 -1
  161. package/Avatar-H8akSege.js.map +0 -1
  162. package/Checkbox-BCqMFWt4.cjs.map +0 -1
  163. package/Checkbox-gB5YKkVo.js.map +0 -1
  164. package/DatePicker-_IGWc3I5.js.map +0 -1
  165. package/DatePicker-t7uDTZMl.cjs.map +0 -1
  166. package/DateTimePicker-BxQyjTCY.cjs.map +0 -1
  167. package/DateTimePicker-CrmWav_j.js.map +0 -1
  168. package/Input-BL1NUIbr.js.map +0 -1
  169. package/Input-BcLJlPRo.cjs.map +0 -1
  170. package/RadioGroup-Dd0rHXSX.cjs.map +0 -1
  171. package/RadioGroup-bO-ahP9T.js.map +0 -1
  172. package/Select-BY5Y0qZ1.js.map +0 -1
  173. package/Select-CURrHSyl.cjs.map +0 -1
  174. package/Switch-CQFOopYy.cjs.map +0 -1
  175. package/Switch-D72dpkH2.js.map +0 -1
  176. package/formField.sx-8_QRnKxv.js.map +0 -1
  177. package/formField.sx-BAX7KwMR.cjs.map +0 -1
  178. package/tokens-BRrcP_p_.js.map +0 -1
  179. package/tokens-jaWWNk39.cjs.map +0 -1
@@ -35,10 +35,14 @@ import { useTheme } from "@mui/material/styles";
35
35
  import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs";
36
36
  import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider";
37
37
  import { DatePicker as DatePicker$1 } from "@mui/x-date-pickers/DatePicker";
38
+ import { esES } from "@mui/x-date-pickers/locales";
38
39
  import require$$0 from "dayjs";
39
- import { b as buildFormFieldSx } from "./formField.sx-8_QRnKxv.js";
40
- import { F as FIELD_INPUT_PADDING_Y } from "./tokens-BRrcP_p_.js";
40
+ import { b as buildFormFieldSx } from "./formField.sx-DD1sxwWH.js";
41
41
  import { r as resolvePreset } from "./resolvePreset-K6_BfWHD.js";
42
+ import { F as FIELD_BORDER_RADIUS } from "./tokens-DE2fV3a9.js";
43
+ function getDefaultExportFromCjs(x) {
44
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
45
+ }
42
46
  var enGb$1 = { exports: {} };
43
47
  var enGb = enGb$1.exports;
44
48
  var hasRequiredEnGb;
@@ -61,22 +65,12 @@ function requireEnGb() {
61
65
  })(enGb$1);
62
66
  return enGb$1.exports;
63
67
  }
64
- requireEnGb();
68
+ var enGbExports = requireEnGb();
69
+ const enGbLocale = /* @__PURE__ */ getDefaultExportFromCjs(enGbExports);
65
70
  const buildDatePickerSx = (borderRadius, labelPosition) => buildFormFieldSx({
66
71
  borderRadius,
67
72
  labelPosition,
68
- includePickersApi: true,
69
- extraOutsideSx: {
70
- "& .MuiInputBase-input": {
71
- paddingTop: FIELD_INPUT_PADDING_Y,
72
- paddingBottom: FIELD_INPUT_PADDING_Y
73
- },
74
- // Secciones editables del PickersTextField (DD/MM/YYYY en API nueva).
75
- "& .MuiPickersInputBase-sectionsContainer": {
76
- paddingTop: FIELD_INPUT_PADDING_Y,
77
- paddingBottom: FIELD_INPUT_PADDING_Y
78
- }
79
- }
73
+ includePickersApi: true
80
74
  });
81
75
  const getDateValidationMessage = (error) => {
82
76
  switch (error) {
@@ -93,6 +87,7 @@ const getDateValidationMessage = (error) => {
93
87
  return "";
94
88
  }
95
89
  };
90
+ require$$0.locale(enGbLocale, void 0, true);
96
91
  const DatePicker = (_a) => {
97
92
  var _b = _a, {
98
93
  label,
@@ -102,7 +97,7 @@ const DatePicker = (_a) => {
102
97
  maxDate,
103
98
  disabled,
104
99
  readOnly,
105
- borderRadius = 10,
100
+ borderRadius = FIELD_BORDER_RADIUS,
106
101
  labelPosition = "outside",
107
102
  size = "small",
108
103
  helperText,
@@ -146,33 +141,41 @@ const DatePicker = (_a) => {
146
141
  ];
147
142
  const finalError = !!validationErrorMessage || !!errorProp;
148
143
  const finalHelperText = validationErrorMessage || helperText;
149
- return /* @__PURE__ */ jsx(LocalizationProvider, { dateAdapter: AdapterDayjs, adapterLocale, children: /* @__PURE__ */ jsx(
150
- DatePicker$1,
151
- __spreadValues({
152
- label,
153
- value: selectedDate,
154
- onChange: onDateChange,
155
- minDate,
156
- maxDate,
157
- onError: setValidationError,
158
- disabled,
159
- readOnly,
160
- className,
161
- sx: mergedSx,
162
- slotProps: __spreadProps(__spreadValues({}, slotPropsProp), {
163
- textField: __spreadProps(__spreadValues(__spreadValues({
164
- fullWidth: true,
165
- size,
166
- variant: "outlined"
167
- }, slotPropsProp == null ? void 0 : slotPropsProp.textField), textFieldProps), {
168
- error: !!finalError,
169
- helperText: finalHelperText
170
- })
171
- })
172
- }, rest)
173
- ) });
144
+ return /* @__PURE__ */ jsx(
145
+ LocalizationProvider,
146
+ {
147
+ dateAdapter: AdapterDayjs,
148
+ adapterLocale,
149
+ localeText: esES.components.MuiLocalizationProvider.defaultProps.localeText,
150
+ children: /* @__PURE__ */ jsx(
151
+ DatePicker$1,
152
+ __spreadValues({
153
+ label,
154
+ value: selectedDate,
155
+ onChange: onDateChange,
156
+ minDate,
157
+ maxDate,
158
+ onError: setValidationError,
159
+ disabled,
160
+ readOnly,
161
+ className,
162
+ sx: mergedSx,
163
+ slotProps: __spreadProps(__spreadValues({}, slotPropsProp), {
164
+ textField: __spreadProps(__spreadValues(__spreadValues({
165
+ fullWidth: true,
166
+ size,
167
+ variant: "outlined"
168
+ }, slotPropsProp == null ? void 0 : slotPropsProp.textField), textFieldProps), {
169
+ error: !!finalError,
170
+ helperText: finalHelperText
171
+ })
172
+ })
173
+ }, rest)
174
+ )
175
+ }
176
+ );
174
177
  };
175
178
  export {
176
179
  DatePicker as D
177
180
  };
178
- //# sourceMappingURL=DatePicker-_IGWc3I5.js.map
181
+ //# sourceMappingURL=DatePicker-D__RSgs-.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatePicker-D__RSgs-.js","sources":["../node_modules/dayjs/locale/en-gb.js","../src/components/DatePicker/DatePicker.sx.ts","../src/components/DatePicker/DatePicker.helpers.ts","../src/components/DatePicker/DatePicker.tsx"],"sourcesContent":["!function(e,a){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=a(require(\"dayjs\")):\"function\"==typeof define&&define.amd?define([\"dayjs\"],a):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_locale_en_gb=a(e.dayjs)}(this,(function(e){\"use strict\";function a(e){return e&&\"object\"==typeof e&&\"default\"in e?e:{default:e}}var t=a(e),_={name:\"en-gb\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekStart:1,yearStart:4,relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},ordinal:function(e){var a=[\"th\",\"st\",\"nd\",\"rd\"],t=e%100;return\"[\"+e+(a[(t-20)%10]||a[t]||a[0])+\"]\"}};return t.default.locale(_,null,!0),_}));","import type { SxProps, Theme } from '@mui/material';\n\nimport { buildFormFieldSx } from '../_shared/formField.sx';\nimport type { LabelPosition } from './DatePicker';\n\n/**\n * Builder de sx para el DatePicker. Reutiliza `buildFormFieldSx` con\n * `includePickersApi: true` para cubrir tanto la API clásica (MuiInputBase /\n * MuiOutlinedInput) como la nueva (MuiPickersInputBase / MuiPickersOutlinedInput)\n * del DatePicker de MUI X v8.\n */\nexport const buildDatePickerSx = (\n borderRadius: number | string,\n labelPosition: LabelPosition,\n): SxProps<Theme> =>\n buildFormFieldSx({\n borderRadius,\n labelPosition,\n includePickersApi: true,\n });\n","import type { DateValidationError } from '@mui/x-date-pickers/models';\n\n/**\n * Traduce el código de error del DatePicker de MUI X a un mensaje en español.\n * Se usa internamente para poblar `helperText` cuando hay error de validación\n * y el consumer no pasó un mensaje propio.\n */\nexport const getDateValidationMessage = (\n error: DateValidationError | null,\n): string => {\n switch (error) {\n case 'minDate':\n case 'maxDate':\n return 'Fecha fuera del rango permitido';\n case 'invalidDate':\n return 'Formato de fecha inválido';\n case 'disableFuture':\n return 'No se permiten fechas futuras';\n case 'disablePast':\n return 'No se permiten fechas pasadas';\n default:\n return '';\n }\n};\n","import React, { useMemo } from 'react';\nimport type { SxProps, Theme } from '@mui/material';\nimport { useTheme } from '@mui/material/styles';\nimport { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';\nimport {\n DatePicker as MuiDatePicker,\n type DatePickerProps as MuiDatePickerProps,\n} from '@mui/x-date-pickers/DatePicker';\nimport { DateValidationError } from '@mui/x-date-pickers/models';\nimport { esES } from '@mui/x-date-pickers/locales';\nimport dayjs, { Dayjs } from 'dayjs';\nimport enGbLocale from 'dayjs/locale/en-gb';\n\nimport { buildDatePickerSx } from './DatePicker.sx';\nimport { getDateValidationMessage } from './DatePicker.helpers';\nimport { resolvePreset } from '../_shared/resolvePreset';\nimport { FIELD_BORDER_RADIUS } from '../../theme/tokens';\n\n// Registrar el locale por defecto sin activarlo globalmente. El binding usado\n// (no un side-effect import pelado) evita que el tree-shaking del build de la\n// librería elimine el locale — con solo `import 'dayjs/locale/en-gb'` el chunk\n// publicado lo perdía y los pickers caían al formato 'en' (MM/DD/YYYY).\ndayjs.locale(enGbLocale, undefined, true);\n\n// ── Tipos de dominio ─────────────────────────────────────────────────────\nexport type LabelPosition = 'outside' | 'floating';\nexport type DatePickerSize = 'small' | 'medium';\n\n// ── Props base ───────────────────────────────────────────────────────────\nexport interface BaseDatePickerProps\n extends Omit<MuiDatePickerProps, 'value' | 'onChange' | 'slotProps'> {\n label?: string;\n minDate?: Dayjs;\n maxDate?: Dayjs;\n disabled?: boolean;\n readOnly?: boolean;\n /** Border radius del input. Default: 10 */\n borderRadius?: number | string;\n /** \"outside\" = label arriba del campo (default). \"floating\" = label clásico MUI dentro del borde */\n labelPosition?: LabelPosition;\n /** Tamaño del TextField renderizado. Default: 'small' */\n size?: DatePickerSize;\n /** helperText pasado al TextField (se sobrescribe por el error de validación si hay). */\n helperText?: string;\n /** Error external override. */\n error?: boolean;\n /** sx que se mergea al TextField interno del picker. */\n sx?: SxProps<Theme>;\n className?: string;\n /**\n * Nombre del preset de estilo registrado en `theme.styles.DatePicker`.\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 /** Locale para el adaptador dayjs. Default: 'en-gb'. */\n adapterLocale?: string;\n /** Passthrough a slotProps.textField. */\n textFieldProps?: Record<string, any>;\n /** Passthrough completo a slotProps del MuiDatePicker. */\n slotProps?: MuiDatePickerProps['slotProps'];\n}\n\n// ── API pública ──────────────────────────────────────────────────────────\nexport interface DatePickerProps extends BaseDatePickerProps {\n selectedDate: Dayjs | null;\n onDateChange: (date: Dayjs | null) => void;\n}\n\nexport const DatePicker: React.FC<DatePickerProps> = ({\n label,\n selectedDate,\n onDateChange,\n minDate,\n maxDate,\n disabled,\n readOnly,\n borderRadius = FIELD_BORDER_RADIUS,\n labelPosition = 'outside',\n size = 'small',\n helperText,\n error: errorProp,\n sx,\n className,\n preset,\n adapterLocale = 'en-gb',\n textFieldProps,\n slotProps: slotPropsProp,\n ...rest\n}) => {\n const [validationError, setValidationError] = React.useState<DateValidationError | null>(null);\n\n const validationErrorMessage = useMemo(\n () => getDateValidationMessage(validationError),\n [validationError],\n );\n\n const theme = useTheme();\n const presetSx = resolvePreset('DatePicker', preset, theme);\n\n const mergedSx = [\n ...(presetSx ? [presetSx] : [buildDatePickerSx(borderRadius, labelPosition)]),\n ...(Array.isArray(sx) ? sx : sx ? [sx] : []),\n ];\n\n const finalError = !!validationErrorMessage || !!errorProp;\n const finalHelperText = validationErrorMessage || helperText;\n\n return (\n <LocalizationProvider\n dateAdapter={AdapterDayjs}\n adapterLocale={adapterLocale}\n localeText={esES.components.MuiLocalizationProvider.defaultProps.localeText}\n >\n <MuiDatePicker\n label={label}\n value={selectedDate}\n onChange={onDateChange}\n minDate={minDate}\n maxDate={maxDate}\n onError={setValidationError}\n disabled={disabled}\n readOnly={readOnly}\n className={className}\n sx={mergedSx}\n slotProps={{\n ...slotPropsProp,\n textField: {\n fullWidth: true,\n size,\n variant: 'outlined',\n ...(slotPropsProp?.textField as Record<string, any> | undefined),\n ...textFieldProps,\n error: !!finalError,\n helperText: finalHelperText,\n } as any,\n }}\n {...rest}\n />\n </LocalizationProvider>\n );\n};\n\nexport default DatePicker;\n"],"names":["this","e","a","t","dayjs","React","MuiDatePicker"],"mappings":"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","x_google_ignoreList":[0]}
@@ -36,24 +36,15 @@ const styles = require("@mui/material/styles");
36
36
  const AdapterDayjs = require("@mui/x-date-pickers/AdapterDayjs");
37
37
  const LocalizationProvider = require("@mui/x-date-pickers/LocalizationProvider");
38
38
  const DateTimePicker$1 = require("@mui/x-date-pickers/DateTimePicker");
39
+ const locales = require("@mui/x-date-pickers/locales");
39
40
  const reactHookForm = require("react-hook-form");
40
- const formField_sx = require("./formField.sx-BAX7KwMR.cjs");
41
- const tokens = require("./tokens-jaWWNk39.cjs");
41
+ const formField_sx = require("./formField.sx-BZj7TaMa.cjs");
42
42
  const resolvePreset = require("./resolvePreset-CxTI6_Ln.cjs");
43
+ const tokens = require("./tokens-BGPazVFO.cjs");
43
44
  const buildDateTimePickerSx = (borderRadius, labelPosition) => formField_sx.buildFormFieldSx({
44
45
  borderRadius,
45
46
  labelPosition,
46
- includePickersApi: true,
47
- extraOutsideSx: {
48
- "& .MuiInputBase-input": {
49
- paddingTop: tokens.FIELD_INPUT_PADDING_Y,
50
- paddingBottom: tokens.FIELD_INPUT_PADDING_Y
51
- },
52
- "& .MuiPickersInputBase-sectionsContainer": {
53
- paddingTop: tokens.FIELD_INPUT_PADDING_Y,
54
- paddingBottom: tokens.FIELD_INPUT_PADDING_Y
55
- }
56
- }
47
+ includePickersApi: true
57
48
  });
58
49
  const getDateTimeValidationMessage = (error) => {
59
50
  switch (error) {
@@ -89,7 +80,7 @@ const DateTimePicker = (props) => {
89
80
  disabled,
90
81
  readOnly,
91
82
  inputFormat,
92
- borderRadius = 10,
83
+ borderRadius = tokens.FIELD_BORDER_RADIUS,
93
84
  labelPosition = "outside",
94
85
  size = "small",
95
86
  helperText,
@@ -158,6 +149,7 @@ const DateTimePicker = (props) => {
158
149
  {
159
150
  dateAdapter: AdapterDayjs.AdapterDayjs,
160
151
  adapterLocale,
152
+ localeText: locales.esES.components.MuiLocalizationProvider.defaultProps.localeText,
161
153
  children: /* @__PURE__ */ jsxRuntime.jsx(
162
154
  DateTimePicker$1.DateTimePicker,
163
155
  __spreadValues({
@@ -226,4 +218,4 @@ const DateTimePicker = (props) => {
226
218
  return renderPicker(selectedDateTime, onDateTimeChange);
227
219
  };
228
220
  exports.DateTimePicker = DateTimePicker;
229
- //# sourceMappingURL=DateTimePicker-BxQyjTCY.cjs.map
221
+ //# sourceMappingURL=DateTimePicker-BVJGq1A0.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateTimePicker-BVJGq1A0.cjs","sources":["../src/components/DateTimePicker/DateTimePicker.sx.ts","../src/components/DateTimePicker/DateTimePicker.helpers.ts","../src/components/DateTimePicker/DateTimePicker.tsx"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material';\n\nimport { buildFormFieldSx } from '../_shared/formField.sx';\nimport type { LabelPosition } from './DateTimePicker';\n\n/**\n * Builder de sx para el DateTimePicker. Mismo patrón que DatePicker.\n * Usa `includePickersApi: true` para soportar la API nueva de MUI X v8.\n */\nexport const buildDateTimePickerSx = (\n borderRadius: number | string,\n labelPosition: LabelPosition,\n): SxProps<Theme> =>\n buildFormFieldSx({\n borderRadius,\n labelPosition,\n includePickersApi: true,\n });\n","import type { DateTimeValidationError } from '@mui/x-date-pickers/models';\n\n/**\n * Traduce el error del DateTimePicker a un mensaje en español. Se usa\n * internamente para poblar `helperText` cuando hay error de validación.\n * Cubre tanto errores de fecha (`minDate`, `maxDate`, etc.) como de hora\n * (`minTime`, `maxTime`, `minutesStep`, etc.).\n */\nexport const getDateTimeValidationMessage = (\n error: DateTimeValidationError | null,\n): string => {\n switch (error) {\n case 'minDate':\n case 'maxDate':\n case 'minTime':\n case 'maxTime':\n return 'Fecha/hora fuera del rango permitido';\n case 'invalidDate':\n return 'Formato de fecha/hora inválido';\n case 'disableFuture':\n return 'No se permiten fechas/horas futuras';\n case 'disablePast':\n return 'No se permiten fechas/horas pasadas';\n case 'minutesStep':\n return 'Minutos no válidos para el paso configurado';\n default:\n return '';\n }\n};\n\n/**\n * Construye el `localeText` que MUI acepta para overridear los labels de los\n * botones del popover (Cancel / OK / Clear).\n */\nexport const buildLocaleText = (\n clearButtonText?: string,\n cancelButtonText?: string,\n acceptButtonText?: string,\n): Record<string, string> => {\n const text: Record<string, string> = {};\n if (clearButtonText) text.clearButtonLabel = clearButtonText;\n if (cancelButtonText) text.cancelButtonLabel = cancelButtonText;\n if (acceptButtonText) text.okButtonLabel = acceptButtonText;\n return text;\n};\n","import React, { useMemo } from 'react';\nimport type { SxProps, Theme } from '@mui/material';\nimport { useTheme } from '@mui/material/styles';\nimport { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';\nimport {\n DateTimePicker as MuiDateTimePicker,\n type DateTimePickerProps as MuiDateTimePickerProps,\n} from '@mui/x-date-pickers/DateTimePicker';\nimport type { DateTimeValidationError } from '@mui/x-date-pickers/models';\nimport { esES } from '@mui/x-date-pickers/locales';\nimport { Dayjs } from 'dayjs';\nimport { Controller, type Control, type RegisterOptions } from 'react-hook-form';\n\nimport { buildDateTimePickerSx } from './DateTimePicker.sx';\nimport {\n buildLocaleText,\n getDateTimeValidationMessage,\n} from './DateTimePicker.helpers';\nimport { resolvePreset } from '../_shared/resolvePreset';\nimport { FIELD_BORDER_RADIUS } from '../../theme/tokens';\n\n// ── Tipos de dominio ─────────────────────────────────────────────────────\nexport type LabelPosition = 'outside' | 'floating';\nexport type DateTimePickerSize = 'small' | 'medium';\n\n// ── Props base ───────────────────────────────────────────────────────────\nexport interface BaseDateTimePickerProps\n extends Omit<MuiDateTimePickerProps, 'value' | 'onChange' | 'slotProps' | 'format'> {\n label?: string;\n minDateTime?: Dayjs;\n maxDateTime?: Dayjs;\n disabled?: boolean;\n readOnly?: boolean;\n /** Formato de la fecha/hora. Default: 'DD/MM/YYYY HH:mm'. */\n inputFormat?: string;\n /** Border radius del input. Default: 10. */\n borderRadius?: number | string;\n /** \"outside\" (default) o \"floating\". */\n labelPosition?: LabelPosition;\n /** Tamaño del TextField. Default: 'small'. */\n size?: DateTimePickerSize;\n helperText?: string;\n error?: boolean;\n sx?: SxProps<Theme>;\n className?: string;\n /**\n * Nombre del preset de estilo registrado en `theme.styles.DateTimePicker`.\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 /** Locale del adaptador dayjs. */\n adapterLocale?: string;\n /** Textos de los botones del popover. */\n clearButtonText?: string;\n cancelButtonText?: string;\n acceptButtonText?: string;\n minutesStep?: number;\n minTime?: Dayjs;\n /** Si es true usa formato 12h (AM/PM), false = 24h. Default: false. */\n ampm?: boolean;\n viewRenderers?: MuiDateTimePickerProps['viewRenderers'];\n timeSteps?: MuiDateTimePickerProps['timeSteps'];\n textFieldProps?: Record<string, any>;\n /** Passthrough completo a slotProps del MuiDateTimePicker. */\n slotProps?: MuiDateTimePickerProps['slotProps'];\n}\n\n// ── Variantes discriminadas (RHF vs controlado) ──────────────────────────\nexport interface RHFDateTimePickerProps extends BaseDateTimePickerProps {\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?: (dateTime: Dayjs | null) => void;\n selectedDateTime?: never;\n onDateTimeChange?: never;\n}\n\nexport interface ControlledDateTimePickerProps extends BaseDateTimePickerProps {\n name?: string;\n control?: never;\n validation?: never;\n selectedDateTime: Dayjs | null;\n onDateTimeChange: (dateTime: Dayjs | null) => void;\n}\n\n// ── API pública final ────────────────────────────────────────────────────\nexport type DateTimePickerProps =\n | RHFDateTimePickerProps\n | ControlledDateTimePickerProps;\n\nexport const DateTimePicker: React.FC<DateTimePickerProps> = (props) => {\n const {\n label,\n minDateTime,\n maxDateTime,\n disabled,\n readOnly,\n inputFormat,\n borderRadius = FIELD_BORDER_RADIUS,\n labelPosition = 'outside',\n size = 'small',\n helperText,\n error: errorProp,\n sx,\n className,\n preset,\n adapterLocale,\n clearButtonText,\n cancelButtonText,\n acceptButtonText,\n minutesStep,\n minTime,\n ampm = false,\n viewRenderers,\n timeSteps,\n textFieldProps,\n slotProps: slotPropsProp,\n ...rest\n } = props as ControlledDateTimePickerProps & {\n control?: Control<any>;\n validation?: RegisterOptions;\n };\n\n const [validationError, setValidationError] = React.useState<DateTimeValidationError | null>(null);\n\n const validationErrorMessage = useMemo(\n () => getDateTimeValidationMessage(validationError),\n [validationError],\n );\n\n const customLocaleText = useMemo(\n () => buildLocaleText(clearButtonText, cancelButtonText, acceptButtonText),\n [clearButtonText, cancelButtonText, acceptButtonText],\n );\n\n const theme = useTheme();\n const presetSx = resolvePreset('DateTimePicker', preset, theme);\n\n const mergedSx = [\n ...(presetSx ? [presetSx] : [buildDateTimePickerSx(borderRadius, labelPosition)]),\n ...(Array.isArray(sx) ? sx : sx ? [sx] : []),\n ];\n\n const renderPicker = (\n value: Dayjs | null,\n onChange: (date: Dayjs | null) => void,\n onBlur?: () => void,\n inputRef?: React.Ref<any>,\n rhfError?: boolean,\n rhfHelperText?: string,\n ) => {\n const finalError = rhfError || !!validationErrorMessage || !!errorProp;\n const finalHelperText = rhfHelperText || validationErrorMessage || helperText;\n\n return (\n <LocalizationProvider\n dateAdapter={AdapterDayjs}\n adapterLocale={adapterLocale}\n localeText={esES.components.MuiLocalizationProvider.defaultProps.localeText}\n >\n <MuiDateTimePicker\n className={className}\n label={label}\n value={value}\n onChange={onChange}\n onError={setValidationError}\n minDateTime={minDateTime}\n maxDateTime={maxDateTime}\n minutesStep={minutesStep}\n disabled={disabled}\n readOnly={readOnly}\n minTime={minTime}\n format={inputFormat ?? 'DD/MM/YYYY HH:mm'}\n ampm={ampm}\n viewRenderers={viewRenderers}\n timeSteps={timeSteps}\n sx={mergedSx}\n slotProps={{\n ...slotPropsProp,\n textField: {\n fullWidth: true,\n size,\n variant: 'outlined',\n // Consumer overrides visuales / de comportamiento opcionales.\n ...(slotPropsProp?.textField as Record<string, any> | undefined),\n ...textFieldProps,\n // Props críticas al final: ganan al consumer para no romper la\n // integración con RHF ni desactivar el visual de error.\n onBlur,\n inputRef,\n error: !!finalError,\n helperText: finalHelperText,\n } as any,\n }}\n localeText={customLocaleText}\n {...rest}\n />\n </LocalizationProvider>\n );\n };\n\n if ('control' in props && props.control) {\n const { name, control, validation, onValueChange } = props as RHFDateTimePickerProps;\n return (\n <Controller\n name={name}\n control={control}\n rules={validation}\n render={({ field, fieldState: { error: fieldError } }) =>\n renderPicker(\n field.value ?? null,\n (next) => {\n field.onChange(next);\n onValueChange?.(next);\n },\n field.onBlur,\n field.ref,\n !!fieldError,\n fieldError?.message,\n )\n }\n />\n );\n }\n\n const { selectedDateTime, onDateTimeChange } = props as ControlledDateTimePickerProps;\n return renderPicker(selectedDateTime, onDateTimeChange);\n};\n\nexport default DateTimePicker;\n"],"names":["buildFormFieldSx","FIELD_BORDER_RADIUS","useMemo","useTheme","resolvePreset","jsx","LocalizationProvider","AdapterDayjs","esES","MuiDateTimePicker","Controller","_a"],"mappings":"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"}
@@ -35,24 +35,15 @@ import { useTheme } from "@mui/material/styles";
35
35
  import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs";
36
36
  import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider";
37
37
  import { DateTimePicker as DateTimePicker$1 } from "@mui/x-date-pickers/DateTimePicker";
38
+ import { esES } from "@mui/x-date-pickers/locales";
38
39
  import { Controller } from "react-hook-form";
39
- import { b as buildFormFieldSx } from "./formField.sx-8_QRnKxv.js";
40
- import { F as FIELD_INPUT_PADDING_Y } from "./tokens-BRrcP_p_.js";
40
+ import { b as buildFormFieldSx } from "./formField.sx-DD1sxwWH.js";
41
41
  import { r as resolvePreset } from "./resolvePreset-K6_BfWHD.js";
42
+ import { F as FIELD_BORDER_RADIUS } from "./tokens-DE2fV3a9.js";
42
43
  const buildDateTimePickerSx = (borderRadius, labelPosition) => buildFormFieldSx({
43
44
  borderRadius,
44
45
  labelPosition,
45
- includePickersApi: true,
46
- extraOutsideSx: {
47
- "& .MuiInputBase-input": {
48
- paddingTop: FIELD_INPUT_PADDING_Y,
49
- paddingBottom: FIELD_INPUT_PADDING_Y
50
- },
51
- "& .MuiPickersInputBase-sectionsContainer": {
52
- paddingTop: FIELD_INPUT_PADDING_Y,
53
- paddingBottom: FIELD_INPUT_PADDING_Y
54
- }
55
- }
46
+ includePickersApi: true
56
47
  });
57
48
  const getDateTimeValidationMessage = (error) => {
58
49
  switch (error) {
@@ -88,7 +79,7 @@ const DateTimePicker = (props) => {
88
79
  disabled,
89
80
  readOnly,
90
81
  inputFormat,
91
- borderRadius = 10,
82
+ borderRadius = FIELD_BORDER_RADIUS,
92
83
  labelPosition = "outside",
93
84
  size = "small",
94
85
  helperText,
@@ -157,6 +148,7 @@ const DateTimePicker = (props) => {
157
148
  {
158
149
  dateAdapter: AdapterDayjs,
159
150
  adapterLocale,
151
+ localeText: esES.components.MuiLocalizationProvider.defaultProps.localeText,
160
152
  children: /* @__PURE__ */ jsx(
161
153
  DateTimePicker$1,
162
154
  __spreadValues({
@@ -227,4 +219,4 @@ const DateTimePicker = (props) => {
227
219
  export {
228
220
  DateTimePicker as D
229
221
  };
230
- //# sourceMappingURL=DateTimePicker-CrmWav_j.js.map
222
+ //# sourceMappingURL=DateTimePicker-LeaE716a.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateTimePicker-LeaE716a.js","sources":["../src/components/DateTimePicker/DateTimePicker.sx.ts","../src/components/DateTimePicker/DateTimePicker.helpers.ts","../src/components/DateTimePicker/DateTimePicker.tsx"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material';\n\nimport { buildFormFieldSx } from '../_shared/formField.sx';\nimport type { LabelPosition } from './DateTimePicker';\n\n/**\n * Builder de sx para el DateTimePicker. Mismo patrón que DatePicker.\n * Usa `includePickersApi: true` para soportar la API nueva de MUI X v8.\n */\nexport const buildDateTimePickerSx = (\n borderRadius: number | string,\n labelPosition: LabelPosition,\n): SxProps<Theme> =>\n buildFormFieldSx({\n borderRadius,\n labelPosition,\n includePickersApi: true,\n });\n","import type { DateTimeValidationError } from '@mui/x-date-pickers/models';\n\n/**\n * Traduce el error del DateTimePicker a un mensaje en español. Se usa\n * internamente para poblar `helperText` cuando hay error de validación.\n * Cubre tanto errores de fecha (`minDate`, `maxDate`, etc.) como de hora\n * (`minTime`, `maxTime`, `minutesStep`, etc.).\n */\nexport const getDateTimeValidationMessage = (\n error: DateTimeValidationError | null,\n): string => {\n switch (error) {\n case 'minDate':\n case 'maxDate':\n case 'minTime':\n case 'maxTime':\n return 'Fecha/hora fuera del rango permitido';\n case 'invalidDate':\n return 'Formato de fecha/hora inválido';\n case 'disableFuture':\n return 'No se permiten fechas/horas futuras';\n case 'disablePast':\n return 'No se permiten fechas/horas pasadas';\n case 'minutesStep':\n return 'Minutos no válidos para el paso configurado';\n default:\n return '';\n }\n};\n\n/**\n * Construye el `localeText` que MUI acepta para overridear los labels de los\n * botones del popover (Cancel / OK / Clear).\n */\nexport const buildLocaleText = (\n clearButtonText?: string,\n cancelButtonText?: string,\n acceptButtonText?: string,\n): Record<string, string> => {\n const text: Record<string, string> = {};\n if (clearButtonText) text.clearButtonLabel = clearButtonText;\n if (cancelButtonText) text.cancelButtonLabel = cancelButtonText;\n if (acceptButtonText) text.okButtonLabel = acceptButtonText;\n return text;\n};\n","import React, { useMemo } from 'react';\nimport type { SxProps, Theme } from '@mui/material';\nimport { useTheme } from '@mui/material/styles';\nimport { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';\nimport {\n DateTimePicker as MuiDateTimePicker,\n type DateTimePickerProps as MuiDateTimePickerProps,\n} from '@mui/x-date-pickers/DateTimePicker';\nimport type { DateTimeValidationError } from '@mui/x-date-pickers/models';\nimport { esES } from '@mui/x-date-pickers/locales';\nimport { Dayjs } from 'dayjs';\nimport { Controller, type Control, type RegisterOptions } from 'react-hook-form';\n\nimport { buildDateTimePickerSx } from './DateTimePicker.sx';\nimport {\n buildLocaleText,\n getDateTimeValidationMessage,\n} from './DateTimePicker.helpers';\nimport { resolvePreset } from '../_shared/resolvePreset';\nimport { FIELD_BORDER_RADIUS } from '../../theme/tokens';\n\n// ── Tipos de dominio ─────────────────────────────────────────────────────\nexport type LabelPosition = 'outside' | 'floating';\nexport type DateTimePickerSize = 'small' | 'medium';\n\n// ── Props base ───────────────────────────────────────────────────────────\nexport interface BaseDateTimePickerProps\n extends Omit<MuiDateTimePickerProps, 'value' | 'onChange' | 'slotProps' | 'format'> {\n label?: string;\n minDateTime?: Dayjs;\n maxDateTime?: Dayjs;\n disabled?: boolean;\n readOnly?: boolean;\n /** Formato de la fecha/hora. Default: 'DD/MM/YYYY HH:mm'. */\n inputFormat?: string;\n /** Border radius del input. Default: 10. */\n borderRadius?: number | string;\n /** \"outside\" (default) o \"floating\". */\n labelPosition?: LabelPosition;\n /** Tamaño del TextField. Default: 'small'. */\n size?: DateTimePickerSize;\n helperText?: string;\n error?: boolean;\n sx?: SxProps<Theme>;\n className?: string;\n /**\n * Nombre del preset de estilo registrado en `theme.styles.DateTimePicker`.\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 /** Locale del adaptador dayjs. */\n adapterLocale?: string;\n /** Textos de los botones del popover. */\n clearButtonText?: string;\n cancelButtonText?: string;\n acceptButtonText?: string;\n minutesStep?: number;\n minTime?: Dayjs;\n /** Si es true usa formato 12h (AM/PM), false = 24h. Default: false. */\n ampm?: boolean;\n viewRenderers?: MuiDateTimePickerProps['viewRenderers'];\n timeSteps?: MuiDateTimePickerProps['timeSteps'];\n textFieldProps?: Record<string, any>;\n /** Passthrough completo a slotProps del MuiDateTimePicker. */\n slotProps?: MuiDateTimePickerProps['slotProps'];\n}\n\n// ── Variantes discriminadas (RHF vs controlado) ──────────────────────────\nexport interface RHFDateTimePickerProps extends BaseDateTimePickerProps {\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?: (dateTime: Dayjs | null) => void;\n selectedDateTime?: never;\n onDateTimeChange?: never;\n}\n\nexport interface ControlledDateTimePickerProps extends BaseDateTimePickerProps {\n name?: string;\n control?: never;\n validation?: never;\n selectedDateTime: Dayjs | null;\n onDateTimeChange: (dateTime: Dayjs | null) => void;\n}\n\n// ── API pública final ────────────────────────────────────────────────────\nexport type DateTimePickerProps =\n | RHFDateTimePickerProps\n | ControlledDateTimePickerProps;\n\nexport const DateTimePicker: React.FC<DateTimePickerProps> = (props) => {\n const {\n label,\n minDateTime,\n maxDateTime,\n disabled,\n readOnly,\n inputFormat,\n borderRadius = FIELD_BORDER_RADIUS,\n labelPosition = 'outside',\n size = 'small',\n helperText,\n error: errorProp,\n sx,\n className,\n preset,\n adapterLocale,\n clearButtonText,\n cancelButtonText,\n acceptButtonText,\n minutesStep,\n minTime,\n ampm = false,\n viewRenderers,\n timeSteps,\n textFieldProps,\n slotProps: slotPropsProp,\n ...rest\n } = props as ControlledDateTimePickerProps & {\n control?: Control<any>;\n validation?: RegisterOptions;\n };\n\n const [validationError, setValidationError] = React.useState<DateTimeValidationError | null>(null);\n\n const validationErrorMessage = useMemo(\n () => getDateTimeValidationMessage(validationError),\n [validationError],\n );\n\n const customLocaleText = useMemo(\n () => buildLocaleText(clearButtonText, cancelButtonText, acceptButtonText),\n [clearButtonText, cancelButtonText, acceptButtonText],\n );\n\n const theme = useTheme();\n const presetSx = resolvePreset('DateTimePicker', preset, theme);\n\n const mergedSx = [\n ...(presetSx ? [presetSx] : [buildDateTimePickerSx(borderRadius, labelPosition)]),\n ...(Array.isArray(sx) ? sx : sx ? [sx] : []),\n ];\n\n const renderPicker = (\n value: Dayjs | null,\n onChange: (date: Dayjs | null) => void,\n onBlur?: () => void,\n inputRef?: React.Ref<any>,\n rhfError?: boolean,\n rhfHelperText?: string,\n ) => {\n const finalError = rhfError || !!validationErrorMessage || !!errorProp;\n const finalHelperText = rhfHelperText || validationErrorMessage || helperText;\n\n return (\n <LocalizationProvider\n dateAdapter={AdapterDayjs}\n adapterLocale={adapterLocale}\n localeText={esES.components.MuiLocalizationProvider.defaultProps.localeText}\n >\n <MuiDateTimePicker\n className={className}\n label={label}\n value={value}\n onChange={onChange}\n onError={setValidationError}\n minDateTime={minDateTime}\n maxDateTime={maxDateTime}\n minutesStep={minutesStep}\n disabled={disabled}\n readOnly={readOnly}\n minTime={minTime}\n format={inputFormat ?? 'DD/MM/YYYY HH:mm'}\n ampm={ampm}\n viewRenderers={viewRenderers}\n timeSteps={timeSteps}\n sx={mergedSx}\n slotProps={{\n ...slotPropsProp,\n textField: {\n fullWidth: true,\n size,\n variant: 'outlined',\n // Consumer overrides visuales / de comportamiento opcionales.\n ...(slotPropsProp?.textField as Record<string, any> | undefined),\n ...textFieldProps,\n // Props críticas al final: ganan al consumer para no romper la\n // integración con RHF ni desactivar el visual de error.\n onBlur,\n inputRef,\n error: !!finalError,\n helperText: finalHelperText,\n } as any,\n }}\n localeText={customLocaleText}\n {...rest}\n />\n </LocalizationProvider>\n );\n };\n\n if ('control' in props && props.control) {\n const { name, control, validation, onValueChange } = props as RHFDateTimePickerProps;\n return (\n <Controller\n name={name}\n control={control}\n rules={validation}\n render={({ field, fieldState: { error: fieldError } }) =>\n renderPicker(\n field.value ?? null,\n (next) => {\n field.onChange(next);\n onValueChange?.(next);\n },\n field.onBlur,\n field.ref,\n !!fieldError,\n fieldError?.message,\n )\n }\n />\n );\n }\n\n const { selectedDateTime, onDateTimeChange } = props as ControlledDateTimePickerProps;\n return renderPicker(selectedDateTime, onDateTimeChange);\n};\n\nexport default DateTimePicker;\n"],"names":["React","MuiDateTimePicker","_a"],"mappings":"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"}
@@ -0,0 +1,270 @@
1
+ "use strict";
2
+ const jsxRuntime = require("react/jsx-runtime");
3
+ const React = require("react");
4
+ const material = require("@mui/material");
5
+ const styles = require("@mui/material/styles");
6
+ const ChevronLeftIcon = require("@mui/icons-material/ChevronLeft");
7
+ const ChevronRightIcon = require("@mui/icons-material/ChevronRight");
8
+ const resolvePreset = require("./resolvePreset-CxTI6_Ln.cjs");
9
+ const DrawerContext = React.createContext(null);
10
+ function useDrawerContext() {
11
+ const ctx = React.useContext(DrawerContext);
12
+ if (ctx) return ctx;
13
+ return { collapsed: false, width: 260 };
14
+ }
15
+ function buildDrawerSx({
16
+ width,
17
+ transitionDuration = 200
18
+ }) {
19
+ return {
20
+ width,
21
+ flexShrink: 0,
22
+ whiteSpace: "nowrap",
23
+ boxSizing: "border-box",
24
+ transition: (theme) => theme.transitions.create("width", {
25
+ easing: theme.transitions.easing.sharp,
26
+ duration: transitionDuration
27
+ }),
28
+ "& .MuiDrawer-paper": {
29
+ width,
30
+ boxSizing: "border-box",
31
+ overflowX: "hidden",
32
+ transition: (theme) => theme.transitions.create("width", {
33
+ easing: theme.transitions.easing.sharp,
34
+ duration: transitionDuration
35
+ })
36
+ }
37
+ };
38
+ }
39
+ function buildDrawerItemSx({
40
+ collapsed,
41
+ active,
42
+ danger
43
+ }) {
44
+ return (theme) => ({
45
+ minHeight: 44,
46
+ px: collapsed ? 1 : 2,
47
+ py: 1,
48
+ mx: 1,
49
+ my: 0.25,
50
+ borderRadius: 1,
51
+ display: "flex",
52
+ alignItems: "center",
53
+ justifyContent: collapsed ? "center" : "flex-start",
54
+ gap: collapsed ? 0 : 1.5,
55
+ cursor: "pointer",
56
+ color: danger ? theme.palette.error.main : active ? theme.palette.primary.main : theme.palette.text.primary,
57
+ backgroundColor: active ? theme.palette.action.selected : "transparent",
58
+ transition: theme.transitions.create(
59
+ ["background-color", "color", "padding"],
60
+ { duration: 150 }
61
+ ),
62
+ "&:hover": {
63
+ backgroundColor: danger ? styles.alpha(theme.palette.error.main, 0.08) : theme.palette.action.hover
64
+ },
65
+ "& .drawer-item__icon": {
66
+ display: "flex",
67
+ alignItems: "center",
68
+ justifyContent: "center",
69
+ flexShrink: 0,
70
+ minWidth: 24
71
+ },
72
+ "& .drawer-item__label": {
73
+ flex: 1,
74
+ minWidth: 0,
75
+ overflow: "hidden",
76
+ textOverflow: "ellipsis",
77
+ whiteSpace: "nowrap",
78
+ opacity: collapsed ? 0 : 1,
79
+ width: collapsed ? 0 : "auto",
80
+ transition: theme.transitions.create(["opacity", "width"], {
81
+ duration: collapsed ? 100 : 200
82
+ })
83
+ }
84
+ });
85
+ }
86
+ function Drawer({
87
+ children,
88
+ variant = "permanent",
89
+ anchor = "left",
90
+ collapsed = false,
91
+ onToggleCollapse,
92
+ open,
93
+ onClose,
94
+ expandedWidth = 260,
95
+ collapsedWidth = 72,
96
+ showCollapseButton,
97
+ header,
98
+ logo,
99
+ footer,
100
+ preset,
101
+ sx,
102
+ paperSx,
103
+ className
104
+ }) {
105
+ const theme = styles.useTheme();
106
+ const presetSx = resolvePreset.resolvePreset("Drawer", preset, theme);
107
+ const supportsCollapsed = variant !== "temporary";
108
+ const effectiveWidth = supportsCollapsed && collapsed ? collapsedWidth : expandedWidth;
109
+ const contextValue = React.useMemo(
110
+ () => ({
111
+ collapsed: supportsCollapsed && collapsed,
112
+ width: effectiveWidth
113
+ }),
114
+ [supportsCollapsed, collapsed, effectiveWidth]
115
+ );
116
+ const rootSx = [
117
+ buildDrawerSx({ width: effectiveWidth }),
118
+ ...presetSx ? [presetSx] : [],
119
+ ...Array.isArray(sx) ? sx : sx ? [sx] : []
120
+ ];
121
+ const shouldShowToggle = showCollapseButton != null ? showCollapseButton : supportsCollapsed && !!onToggleCollapse;
122
+ const openProp = variant === "permanent" ? true : open !== void 0 ? open : false;
123
+ return /* @__PURE__ */ jsxRuntime.jsx(DrawerContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxRuntime.jsxs(
124
+ material.Drawer,
125
+ {
126
+ variant,
127
+ anchor,
128
+ open: openProp,
129
+ onClose,
130
+ className,
131
+ sx: rootSx,
132
+ slotProps: {
133
+ paper: {
134
+ sx: paperSx
135
+ }
136
+ },
137
+ children: [
138
+ (logo || shouldShowToggle) && /* @__PURE__ */ jsxRuntime.jsxs(
139
+ material.Box,
140
+ {
141
+ sx: {
142
+ display: "flex",
143
+ flexDirection: contextValue.collapsed ? "column" : "row",
144
+ alignItems: "center",
145
+ justifyContent: contextValue.collapsed ? "center" : logo ? "space-between" : "flex-end",
146
+ gap: contextValue.collapsed ? 0.5 : 0,
147
+ px: contextValue.collapsed ? 1 : 2,
148
+ py: 1,
149
+ minHeight: 64,
150
+ flexShrink: 0
151
+ },
152
+ children: [
153
+ logo && /* @__PURE__ */ jsxRuntime.jsx(material.Box, { sx: { display: "flex", alignItems: "center", minWidth: 0 }, children: logo }),
154
+ shouldShowToggle && /* @__PURE__ */ jsxRuntime.jsx(
155
+ material.IconButton,
156
+ {
157
+ size: "small",
158
+ onClick: onToggleCollapse,
159
+ "aria-label": collapsed ? "Expandir menú" : "Colapsar menú",
160
+ children: collapsed ? /* @__PURE__ */ jsxRuntime.jsx(ChevronRightIcon, {}) : /* @__PURE__ */ jsxRuntime.jsx(ChevronLeftIcon, {})
161
+ }
162
+ )
163
+ ]
164
+ }
165
+ ),
166
+ header && !contextValue.collapsed && /* @__PURE__ */ jsxRuntime.jsx(
167
+ material.Box,
168
+ {
169
+ sx: {
170
+ display: "flex",
171
+ alignItems: "center",
172
+ px: 2,
173
+ py: 1.5,
174
+ minHeight: 56,
175
+ flexShrink: 0
176
+ },
177
+ children: /* @__PURE__ */ jsxRuntime.jsx(material.Box, { sx: { flex: 1, minWidth: 0 }, children: header })
178
+ }
179
+ ),
180
+ /* @__PURE__ */ jsxRuntime.jsx(
181
+ material.Box,
182
+ {
183
+ component: "nav",
184
+ sx: {
185
+ flex: 1,
186
+ overflowY: "auto",
187
+ overflowX: "hidden",
188
+ py: 1
189
+ },
190
+ children
191
+ }
192
+ ),
193
+ footer && /* @__PURE__ */ jsxRuntime.jsx(
194
+ material.Box,
195
+ {
196
+ sx: {
197
+ flexShrink: 0,
198
+ borderTop: (t) => `1px solid ${t.palette.divider}`,
199
+ p: contextValue.collapsed ? 1 : 1.5,
200
+ display: "flex",
201
+ justifyContent: contextValue.collapsed ? "center" : "flex-start"
202
+ },
203
+ children: footer
204
+ }
205
+ )
206
+ ]
207
+ }
208
+ ) });
209
+ }
210
+ function DrawerItem({
211
+ icon,
212
+ label,
213
+ tooltipText,
214
+ onClick,
215
+ active = false,
216
+ danger = false,
217
+ disabled = false,
218
+ endAdornment,
219
+ sx,
220
+ className
221
+ }) {
222
+ const { collapsed } = useDrawerContext();
223
+ const baseSx = buildDrawerItemSx({ collapsed, active, danger });
224
+ const mergedSx = [
225
+ baseSx,
226
+ disabled && { pointerEvents: "none", opacity: 0.5 },
227
+ ...Array.isArray(sx) ? sx : sx ? [sx] : []
228
+ ].filter(Boolean);
229
+ const content = /* @__PURE__ */ jsxRuntime.jsxs(
230
+ material.Box,
231
+ {
232
+ role: "button",
233
+ tabIndex: disabled ? -1 : 0,
234
+ "aria-disabled": disabled,
235
+ onClick: disabled ? void 0 : onClick,
236
+ onKeyDown: (event) => {
237
+ if (disabled) return;
238
+ if (event.key === "Enter" || event.key === " ") {
239
+ event.preventDefault();
240
+ onClick == null ? void 0 : onClick(event);
241
+ }
242
+ },
243
+ className,
244
+ sx: mergedSx,
245
+ children: [
246
+ icon && /* @__PURE__ */ jsxRuntime.jsx(material.Box, { className: "drawer-item__icon", component: "span", children: icon }),
247
+ /* @__PURE__ */ jsxRuntime.jsx(
248
+ material.Typography,
249
+ {
250
+ component: "span",
251
+ variant: "body2",
252
+ className: "drawer-item__label",
253
+ sx: { fontWeight: active ? 600 : 400 },
254
+ children: label
255
+ }
256
+ ),
257
+ !collapsed && endAdornment && /* @__PURE__ */ jsxRuntime.jsx(material.Box, { component: "span", sx: { flexShrink: 0, ml: "auto" }, children: endAdornment })
258
+ ]
259
+ }
260
+ );
261
+ const resolvedTooltip = tooltipText != null ? tooltipText : typeof label === "string" ? label : void 0;
262
+ if (collapsed && resolvedTooltip) {
263
+ return /* @__PURE__ */ jsxRuntime.jsx(material.Tooltip, { title: resolvedTooltip, placement: "right", arrow: true, children: content });
264
+ }
265
+ return content;
266
+ }
267
+ exports.Drawer = Drawer;
268
+ exports.DrawerItem = DrawerItem;
269
+ exports.useDrawerContext = useDrawerContext;
270
+ //# sourceMappingURL=DrawerItem--OTb3X9v.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DrawerItem--OTb3X9v.cjs","sources":["../src/components/Drawer/DrawerContext.ts","../src/components/Drawer/Drawer.sx.ts","../src/components/Drawer/Drawer.tsx","../src/components/Drawer/DrawerItem.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\n\n/**\n * Context interno del Drawer. Permite que los sub-componentes (DrawerItem,\n * DrawerSection, etc.) reaccionen al estado `collapsed` sin necesidad de\n * recibirlo por props explícitas.\n */\nexport interface DrawerContextValue {\n /** Si el drawer está en modo mini (solo iconos). */\n collapsed: boolean;\n /** Ancho actual del drawer (útil para sub-componentes que necesiten layout). */\n width: number;\n}\n\nexport const DrawerContext = createContext<DrawerContextValue | null>(null);\n\n/**\n * Hook para leer el estado del drawer desde cualquier sub-componente. Si se\n * llama fuera de un `<Drawer>`, devuelve valores por defecto (collapsed=false)\n * para que los items renderizados sueltos no exploten.\n */\nexport function useDrawerContext(): DrawerContextValue {\n const ctx = useContext(DrawerContext);\n if (ctx) return ctx;\n return { collapsed: false, width: 260 };\n}\n","import { alpha, type SxProps, type Theme } from '@mui/material/styles';\n\nexport interface BuildDrawerSxArgs {\n /** Ancho actual del drawer (expanded o collapsed). */\n width: number;\n /** Duración de la transición de ancho en ms. */\n transitionDuration?: number;\n}\n\n/**\n * sx aplicado al root del MuiDrawer. Controla el ancho animado y el paper\n * interno. Los estilos visuales del paper (background, border) se dejan en\n * manos del theme / preset.\n */\nexport function buildDrawerSx({\n width,\n transitionDuration = 200,\n}: BuildDrawerSxArgs): SxProps<Theme> {\n return {\n width,\n flexShrink: 0,\n whiteSpace: 'nowrap',\n boxSizing: 'border-box',\n transition: (theme) =>\n theme.transitions.create('width', {\n easing: theme.transitions.easing.sharp,\n duration: transitionDuration,\n }),\n '& .MuiDrawer-paper': {\n width,\n boxSizing: 'border-box',\n overflowX: 'hidden',\n transition: (theme) =>\n theme.transitions.create('width', {\n easing: theme.transitions.easing.sharp,\n duration: transitionDuration,\n }),\n },\n };\n}\n\nexport interface BuildDrawerItemSxArgs {\n collapsed: boolean;\n active?: boolean;\n danger?: boolean;\n}\n\n/**\n * sx para un item del drawer. Centra el icono cuando está colapsado y\n * tiñe el fondo cuando el item está activo.\n */\nexport function buildDrawerItemSx({\n collapsed,\n active,\n danger,\n}: BuildDrawerItemSxArgs): SxProps<Theme> {\n return (theme) => ({\n minHeight: 44,\n px: collapsed ? 1 : 2,\n py: 1,\n mx: 1,\n my: 0.25,\n borderRadius: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: collapsed ? 'center' : 'flex-start',\n gap: collapsed ? 0 : 1.5,\n cursor: 'pointer',\n color: danger\n ? theme.palette.error.main\n : active\n ? theme.palette.primary.main\n : theme.palette.text.primary,\n backgroundColor: active\n ? theme.palette.action.selected\n : 'transparent',\n transition: theme.transitions.create(\n ['background-color', 'color', 'padding'],\n { duration: 150 },\n ),\n '&:hover': {\n backgroundColor: danger\n ? alpha(theme.palette.error.main, 0.08)\n : theme.palette.action.hover,\n },\n '& .drawer-item__icon': {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n minWidth: 24,\n },\n '& .drawer-item__label': {\n flex: 1,\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n opacity: collapsed ? 0 : 1,\n width: collapsed ? 0 : 'auto',\n transition: theme.transitions.create(['opacity', 'width'], {\n duration: collapsed ? 100 : 200,\n }),\n },\n });\n}\n","import { useMemo, type ReactNode } from 'react';\nimport {\n Drawer as MuiDrawer,\n IconButton,\n Box,\n type DrawerProps as MuiDrawerProps,\n} from '@mui/material';\nimport {\n useTheme,\n type SxProps,\n type Theme,\n} from '@mui/material/styles';\nimport ChevronLeftIcon from '@mui/icons-material/ChevronLeft';\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\n\nimport { DrawerContext } from './DrawerContext';\nimport { buildDrawerSx } from './Drawer.sx';\nimport { resolvePreset } from '../_shared/resolvePreset';\n\n// ── Tipos públicos ──────────────────────────────────────────────────────\nexport type DrawerVariant = 'permanent' | 'persistent' | 'temporary';\nexport type DrawerAnchor = 'left' | 'right' | 'top' | 'bottom';\n\nexport interface DrawerProps {\n /** Contenido del drawer (típicamente `<DrawerItem>`s). */\n children?: ReactNode;\n /**\n * Variante del drawer:\n * - `permanent` (default): siempre visible en desktop, soporta collapsed (mini).\n * - `persistent`: se oculta/muestra, empuja el contenido principal.\n * - `temporary`: flotante con backdrop (típico móvil).\n */\n variant?: DrawerVariant;\n /** Lado del viewport. Default: `'left'`. */\n anchor?: DrawerAnchor;\n /**\n * Estado mini (solo iconos). Solo se aplica con `variant=\"permanent\"` o\n * `\"persistent\"`. Si no se provee, el drawer está siempre expandido.\n */\n collapsed?: boolean;\n /** Callback del botón de toggle (chevron). */\n onToggleCollapse?: () => void;\n /** Estado abierto/cerrado (aplica a `temporary` y `persistent`). */\n open?: boolean;\n /** Callback de cierre (backdrop o ESC en temporary). */\n onClose?: MuiDrawerProps['onClose'];\n /** Ancho en estado expandido. Default: 260. */\n expandedWidth?: number;\n /** Ancho en estado colapsado (solo iconos). Default: 72. */\n collapsedWidth?: number;\n /** Muestra el botón chevron para toggle collapsed. Default: true si `onToggleCollapse` está definido. */\n showCollapseButton?: boolean;\n /** Contenido del header (por encima de los items). Típicamente logo/brand. */\n header?: ReactNode;\n /**\n * Logo/brand que se muestra junto al botón de toggle.\n * - Expandido: logo a la izquierda, toggle a la derecha en la misma fila.\n * - Colapsado: logo arriba centrado, toggle debajo centrado (stack vertical).\n * Siempre visible (a diferencia de `header`, que se oculta al colapsar).\n */\n logo?: ReactNode;\n /** Contenido del footer (por debajo de los items). Típicamente user profile. */\n footer?: ReactNode;\n /**\n * Nombre del preset de estilo registrado en `theme.styles.Drawer`.\n * - `\"default\"` (o ausente) = estilo built-in del paquete.\n */\n preset?: string;\n /** sx aplicado al Drawer (root). Se mergea después del preset. */\n sx?: SxProps<Theme>;\n /** sx aplicado al Paper interno. */\n paperSx?: SxProps<Theme>;\n className?: string;\n}\n\nexport function Drawer({\n children,\n variant = 'permanent',\n anchor = 'left',\n collapsed = false,\n onToggleCollapse,\n open,\n onClose,\n expandedWidth = 260,\n collapsedWidth = 72,\n showCollapseButton,\n header,\n logo,\n footer,\n preset,\n sx,\n paperSx,\n className,\n}: DrawerProps) {\n const theme = useTheme();\n const presetSx = resolvePreset('Drawer', preset, theme);\n\n // El mini-variant solo tiene sentido en permanent / persistent.\n const supportsCollapsed = variant !== 'temporary';\n const effectiveWidth =\n supportsCollapsed && collapsed ? collapsedWidth : expandedWidth;\n\n const contextValue = useMemo(\n () => ({\n collapsed: supportsCollapsed && collapsed,\n width: effectiveWidth,\n }),\n [supportsCollapsed, collapsed, effectiveWidth],\n );\n\n const rootSx: SxProps<Theme> = [\n buildDrawerSx({ width: effectiveWidth }),\n ...(presetSx ? [presetSx] : []),\n ...(Array.isArray(sx) ? sx : sx ? [sx] : []),\n ];\n\n const shouldShowToggle =\n showCollapseButton ?? (supportsCollapsed && !!onToggleCollapse);\n\n const openProp =\n variant === 'permanent'\n ? true\n : open !== undefined\n ? open\n : false;\n\n return (\n <DrawerContext.Provider value={contextValue}>\n <MuiDrawer\n variant={variant}\n anchor={anchor}\n open={openProp}\n onClose={onClose}\n className={className}\n sx={rootSx}\n slotProps={{\n paper: {\n sx: paperSx,\n },\n }}\n >\n {(logo || shouldShowToggle) && (\n <Box\n sx={{\n display: 'flex',\n flexDirection: contextValue.collapsed ? 'column' : 'row',\n alignItems: 'center',\n justifyContent: contextValue.collapsed\n ? 'center'\n : logo\n ? 'space-between'\n : 'flex-end',\n gap: contextValue.collapsed ? 0.5 : 0,\n px: contextValue.collapsed ? 1 : 2,\n py: 1,\n minHeight: 64,\n flexShrink: 0,\n }}\n >\n {logo && (\n <Box sx={{ display: 'flex', alignItems: 'center', minWidth: 0 }}>\n {logo}\n </Box>\n )}\n {shouldShowToggle && (\n <IconButton\n size=\"small\"\n onClick={onToggleCollapse}\n aria-label={collapsed ? 'Expandir menú' : 'Colapsar menú'}\n >\n {collapsed ? <ChevronRightIcon /> : <ChevronLeftIcon />}\n </IconButton>\n )}\n </Box>\n )}\n\n {header && !contextValue.collapsed && (\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n px: 2,\n py: 1.5,\n minHeight: 56,\n flexShrink: 0,\n }}\n >\n <Box sx={{ flex: 1, minWidth: 0 }}>{header}</Box>\n </Box>\n )}\n\n <Box\n component=\"nav\"\n sx={{\n flex: 1,\n overflowY: 'auto',\n overflowX: 'hidden',\n py: 1,\n }}\n >\n {children}\n </Box>\n\n {footer && (\n <Box\n sx={{\n flexShrink: 0,\n borderTop: (t) => `1px solid ${t.palette.divider}`,\n p: contextValue.collapsed ? 1 : 1.5,\n display: 'flex',\n justifyContent: contextValue.collapsed\n ? 'center'\n : 'flex-start',\n }}\n >\n {footer}\n </Box>\n )}\n </MuiDrawer>\n </DrawerContext.Provider>\n );\n}\n\nexport default Drawer;\n","import React, { type ReactNode, type MouseEvent } from 'react';\nimport { Box, Tooltip, Typography } from '@mui/material';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\nimport { useDrawerContext } from './DrawerContext';\nimport { buildDrawerItemSx } from './Drawer.sx';\n\nexport interface DrawerItemProps {\n /** Icono del item. Se muestra siempre (expanded y collapsed). */\n icon?: ReactNode;\n /** Texto del item. Se oculta cuando el drawer está colapsado (muestra tooltip). */\n label: ReactNode;\n /**\n * Texto del tooltip en modo collapsed. Si no se provee y `label` es string,\n * se usa `label`. Necesario cuando `label` es un ReactNode complejo.\n */\n tooltipText?: string;\n /** Handler de click. */\n onClick?: (event: MouseEvent<HTMLDivElement>) => void;\n /** Marca el item como activo (destaca color y fondo). */\n active?: boolean;\n /** Marca el item como \"destructivo\" (p.ej. cerrar sesión): color error. */\n danger?: boolean;\n /** Deshabilita click + bajo opacidad. */\n disabled?: boolean;\n /** Contenido adicional a la derecha del label (badge, count, chevron). */\n endAdornment?: ReactNode;\n /** sx override del consumer, se mergea al final. */\n sx?: SxProps<Theme>;\n className?: string;\n}\n\n/**\n * Item de un Drawer de shared-library. Lee el estado `collapsed` del\n * DrawerContext para adaptar layout y mostrar tooltip en modo mini.\n *\n * Uso típico:\n * ```tsx\n * <Drawer collapsed={collapsed} onToggleCollapse={toggle}>\n * <DrawerItem icon={<HomeIcon />} label=\"Inicio\" active />\n * <DrawerItem icon={<UserIcon />} label=\"Perfil\" />\n * </Drawer>\n * ```\n */\nexport function DrawerItem({\n icon,\n label,\n tooltipText,\n onClick,\n active = false,\n danger = false,\n disabled = false,\n endAdornment,\n sx,\n className,\n}: DrawerItemProps) {\n const { collapsed } = useDrawerContext();\n\n const baseSx = buildDrawerItemSx({ collapsed, active, danger });\n\n const mergedSx: SxProps<Theme> = [\n baseSx,\n disabled && { pointerEvents: 'none', opacity: 0.5 },\n ...(Array.isArray(sx) ? sx : sx ? [sx] : []),\n ].filter(Boolean) as SxProps<Theme>;\n\n const content = (\n <Box\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled}\n onClick={disabled ? undefined : onClick}\n onKeyDown={(event) => {\n if (disabled) return;\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n onClick?.(event as unknown as MouseEvent<HTMLDivElement>);\n }\n }}\n className={className}\n sx={mergedSx}\n >\n {icon && (\n <Box className=\"drawer-item__icon\" component=\"span\">\n {icon}\n </Box>\n )}\n <Typography\n component=\"span\"\n variant=\"body2\"\n className=\"drawer-item__label\"\n sx={{ fontWeight: active ? 600 : 400 }}\n >\n {label}\n </Typography>\n {!collapsed && endAdornment && (\n <Box component=\"span\" sx={{ flexShrink: 0, ml: 'auto' }}>\n {endAdornment}\n </Box>\n )}\n </Box>\n );\n\n // Cuando está colapsado, envolvemos en tooltip para revelar el label al hover.\n // Prioriza `tooltipText` explícito; si no, cae al `label` si es string.\n const resolvedTooltip =\n tooltipText ?? (typeof label === 'string' ? label : undefined);\n\n if (collapsed && resolvedTooltip) {\n return (\n <Tooltip title={resolvedTooltip} placement=\"right\" arrow>\n {content}\n </Tooltip>\n );\n }\n\n return content;\n}\n\nexport default DrawerItem;\n"],"names":["createContext","useContext","alpha","useTheme","resolvePreset","useMemo","jsx","jsxs","MuiDrawer","Box","IconButton","Typography","Tooltip"],"mappings":";;;;;;;;AAcO,MAAM,gBAAgBA,MAAAA,cAAyC,IAAI;AAOnE,SAAS,mBAAuC;AACrD,QAAM,MAAMC,MAAAA,WAAW,aAAa;AACpC,MAAI,IAAK,QAAO;AAChB,SAAO,EAAE,WAAW,OAAO,OAAO,IAAA;AACpC;ACXO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA,qBAAqB;AACvB,GAAsC;AACpC,SAAO;AAAA,IACL;AAAA,IACA,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,YAAY,CAAC,UACX,MAAM,YAAY,OAAO,SAAS;AAAA,MAChC,QAAQ,MAAM,YAAY,OAAO;AAAA,MACjC,UAAU;AAAA,IAAA,CACX;AAAA,IACH,sBAAsB;AAAA,MACpB;AAAA,MACA,WAAW;AAAA,MACX,WAAW;AAAA,MACX,YAAY,CAAC,UACX,MAAM,YAAY,OAAO,SAAS;AAAA,QAChC,QAAQ,MAAM,YAAY,OAAO;AAAA,QACjC,UAAU;AAAA,MAAA,CACX;AAAA,IAAA;AAAA,EACL;AAEJ;AAYO,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AACF,GAA0C;AACxC,SAAO,CAAC,WAAW;AAAA,IACjB,WAAW;AAAA,IACX,IAAI,YAAY,IAAI;AAAA,IACpB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,cAAc;AAAA,IACd,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB,YAAY,WAAW;AAAA,IACvC,KAAK,YAAY,IAAI;AAAA,IACrB,QAAQ;AAAA,IACR,OAAO,SACH,MAAM,QAAQ,MAAM,OACpB,SACE,MAAM,QAAQ,QAAQ,OACtB,MAAM,QAAQ,KAAK;AAAA,IACzB,iBAAiB,SACb,MAAM,QAAQ,OAAO,WACrB;AAAA,IACJ,YAAY,MAAM,YAAY;AAAA,MAC5B,CAAC,oBAAoB,SAAS,SAAS;AAAA,MACvC,EAAE,UAAU,IAAA;AAAA,IAAI;AAAA,IAElB,WAAW;AAAA,MACT,iBAAiB,SACbC,aAAM,MAAM,QAAQ,MAAM,MAAM,IAAI,IACpC,MAAM,QAAQ,OAAO;AAAA,IAAA;AAAA,IAE3B,wBAAwB;AAAA,MACtB,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,YAAY;AAAA,MACZ,UAAU;AAAA,IAAA;AAAA,IAEZ,yBAAyB;AAAA,MACvB,MAAM;AAAA,MACN,UAAU;AAAA,MACV,UAAU;AAAA,MACV,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,SAAS,YAAY,IAAI;AAAA,MACzB,OAAO,YAAY,IAAI;AAAA,MACvB,YAAY,MAAM,YAAY,OAAO,CAAC,WAAW,OAAO,GAAG;AAAA,QACzD,UAAU,YAAY,MAAM;AAAA,MAAA,CAC7B;AAAA,IAAA;AAAA,EACH;AAEJ;AC9BO,SAAS,OAAO;AAAA,EACrB;AAAA,EACA,UAAU;AAAA,EACV,SAAS;AAAA,EACT,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAgB;AACd,QAAM,QAAQC,OAAAA,SAAA;AACd,QAAM,WAAWC,cAAAA,cAAc,UAAU,QAAQ,KAAK;AAGtD,QAAM,oBAAoB,YAAY;AACtC,QAAM,iBACJ,qBAAqB,YAAY,iBAAiB;AAEpD,QAAM,eAAeC,MAAAA;AAAAA,IACnB,OAAO;AAAA,MACL,WAAW,qBAAqB;AAAA,MAChC,OAAO;AAAA,IAAA;AAAA,IAET,CAAC,mBAAmB,WAAW,cAAc;AAAA,EAAA;AAG/C,QAAM,SAAyB;AAAA,IAC7B,cAAc,EAAE,OAAO,gBAAgB;AAAA,IACvC,GAAI,WAAW,CAAC,QAAQ,IAAI,CAAA;AAAA,IAC5B,GAAI,MAAM,QAAQ,EAAE,IAAI,KAAK,KAAK,CAAC,EAAE,IAAI,CAAA;AAAA,EAAC;AAG5C,QAAM,mBACJ,kDAAuB,qBAAqB,CAAC,CAAC;AAEhD,QAAM,WACJ,YAAY,cACR,OACA,SAAS,SACP,OACA;AAER,SACEC,2BAAAA,IAAC,cAAc,UAAd,EAAuB,OAAO,cAC7B,UAAAC,2BAAAA;AAAAA,IAACC,SAAAA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,IAAI;AAAA,MACJ,WAAW;AAAA,QACT,OAAO;AAAA,UACL,IAAI;AAAA,QAAA;AAAA,MACN;AAAA,MAGA,UAAA;AAAA,SAAA,QAAQ,qBACRD,2BAAAA;AAAAA,UAACE,SAAAA;AAAAA,UAAA;AAAA,YACC,IAAI;AAAA,cACF,SAAS;AAAA,cACT,eAAe,aAAa,YAAY,WAAW;AAAA,cACnD,YAAY;AAAA,cACZ,gBAAgB,aAAa,YACzB,WACA,OACE,kBACA;AAAA,cACN,KAAK,aAAa,YAAY,MAAM;AAAA,cACpC,IAAI,aAAa,YAAY,IAAI;AAAA,cACjC,IAAI;AAAA,cACJ,WAAW;AAAA,cACX,YAAY;AAAA,YAAA;AAAA,YAGb,UAAA;AAAA,cAAA,QACCH,2BAAAA,IAACG,SAAAA,KAAA,EAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,UAAU,EAAA,GACzD,UAAA,KAAA,CACH;AAAA,cAED,oBACCH,2BAAAA;AAAAA,gBAACI,SAAAA;AAAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAS;AAAA,kBACT,cAAY,YAAY,kBAAkB;AAAA,kBAEzC,UAAA,YAAYJ,+BAAC,kBAAA,CAAA,CAAiB,mCAAM,iBAAA,CAAA,CAAgB;AAAA,gBAAA;AAAA,cAAA;AAAA,YACvD;AAAA,UAAA;AAAA,QAAA;AAAA,QAKL,UAAU,CAAC,aAAa,aACvBA,2BAAAA;AAAAA,UAACG,SAAAA;AAAAA,UAAA;AAAA,YACC,IAAI;AAAA,cACF,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,IAAI;AAAA,cACJ,IAAI;AAAA,cACJ,WAAW;AAAA,cACX,YAAY;AAAA,YAAA;AAAA,YAGd,UAAAH,2BAAAA,IAACG,gBAAI,IAAI,EAAE,MAAM,GAAG,UAAU,KAAM,UAAA,OAAA,CAAO;AAAA,UAAA;AAAA,QAAA;AAAA,QAI/CH,2BAAAA;AAAAA,UAACG,SAAAA;AAAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,IAAI;AAAA,cACF,MAAM;AAAA,cACN,WAAW;AAAA,cACX,WAAW;AAAA,cACX,IAAI;AAAA,YAAA;AAAA,YAGL;AAAA,UAAA;AAAA,QAAA;AAAA,QAGF,UACCH,2BAAAA;AAAAA,UAACG,SAAAA;AAAAA,UAAA;AAAA,YACC,IAAI;AAAA,cACF,YAAY;AAAA,cACZ,WAAW,CAAC,MAAM,aAAa,EAAE,QAAQ,OAAO;AAAA,cAChD,GAAG,aAAa,YAAY,IAAI;AAAA,cAChC,SAAS;AAAA,cACT,gBAAgB,aAAa,YACzB,WACA;AAAA,YAAA;AAAA,YAGL,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA,GAGN;AAEJ;ACjLO,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AACF,GAAoB;AAClB,QAAM,EAAE,UAAA,IAAc,iBAAA;AAEtB,QAAM,SAAS,kBAAkB,EAAE,WAAW,QAAQ,QAAQ;AAE9D,QAAM,WAA2B;AAAA,IAC/B;AAAA,IACA,YAAY,EAAE,eAAe,QAAQ,SAAS,IAAA;AAAA,IAC9C,GAAI,MAAM,QAAQ,EAAE,IAAI,KAAK,KAAK,CAAC,EAAE,IAAI,CAAA;AAAA,EAAC,EAC1C,OAAO,OAAO;AAEhB,QAAM,UACJF,2BAAAA;AAAAA,IAACE,SAAAA;AAAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,UAAU,WAAW,KAAK;AAAA,MAC1B,iBAAe;AAAA,MACf,SAAS,WAAW,SAAY;AAAA,MAChC,WAAW,CAAC,UAAU;AACpB,YAAI,SAAU;AACd,YAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,KAAK;AAC9C,gBAAM,eAAA;AACN,6CAAU;AAAA,QACZ;AAAA,MACF;AAAA,MACA;AAAA,MACA,IAAI;AAAA,MAEH,UAAA;AAAA,QAAA,uCACEA,SAAAA,KAAA,EAAI,WAAU,qBAAoB,WAAU,QAC1C,UAAA,MACH;AAAA,QAEFH,2BAAAA;AAAAA,UAACK,SAAAA;AAAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,SAAQ;AAAA,YACR,WAAU;AAAA,YACV,IAAI,EAAE,YAAY,SAAS,MAAM,IAAA;AAAA,YAEhC,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAEF,CAAC,aAAa,gBACbL,2BAAAA,IAACG,SAAAA,OAAI,WAAU,QAAO,IAAI,EAAE,YAAY,GAAG,IAAI,OAAA,GAC5C,UAAA,aAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAON,QAAM,kBACJ,oCAAgB,OAAO,UAAU,WAAW,QAAQ;AAEtD,MAAI,aAAa,iBAAiB;AAChC,WACEH,+BAACM,SAAAA,WAAQ,OAAO,iBAAiB,WAAU,SAAQ,OAAK,MACrD,UAAA,QAAA,CACH;AAAA,EAEJ;AAEA,SAAO;AACT;;;;"}