@misael703/ui 1.31.0 → 1.33.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 (165) hide show
  1. package/README.md +17 -1
  2. package/dist/{chunk-ULRTSRBP.mjs → chunk-37TC4VQO.mjs} +3 -3
  3. package/dist/{chunk-ULRTSRBP.mjs.map → chunk-37TC4VQO.mjs.map} +1 -1
  4. package/dist/{chunk-DCNHRBN6.js → chunk-3J26VOMQ.js} +4 -4
  5. package/dist/{chunk-DCNHRBN6.js.map → chunk-3J26VOMQ.js.map} +1 -1
  6. package/dist/{chunk-2PYCF6XS.js → chunk-4R5BHEDE.js} +4 -4
  7. package/dist/{chunk-2PYCF6XS.js.map → chunk-4R5BHEDE.js.map} +1 -1
  8. package/dist/{chunk-EHJNOVHL.mjs → chunk-6KVN77YG.mjs} +3 -3
  9. package/dist/{chunk-EHJNOVHL.mjs.map → chunk-6KVN77YG.mjs.map} +1 -1
  10. package/dist/{chunk-74ALPTUE.js → chunk-6SSTTJV4.js} +4 -4
  11. package/dist/{chunk-74ALPTUE.js.map → chunk-6SSTTJV4.js.map} +1 -1
  12. package/dist/{chunk-JWDUUZ7S.mjs → chunk-7MJW6ACR.mjs} +5 -5
  13. package/dist/{chunk-JWDUUZ7S.mjs.map → chunk-7MJW6ACR.mjs.map} +1 -1
  14. package/dist/{chunk-ITYDWKUE.js → chunk-A6RSCEJT.js} +4 -4
  15. package/dist/{chunk-ITYDWKUE.js.map → chunk-A6RSCEJT.js.map} +1 -1
  16. package/dist/{chunk-CWP6W6BU.js → chunk-AGMDYCGG.js} +4 -4
  17. package/dist/{chunk-CWP6W6BU.js.map → chunk-AGMDYCGG.js.map} +1 -1
  18. package/dist/{chunk-PUXXDABJ.mjs → chunk-AVPMOZ4Q.mjs} +3 -3
  19. package/dist/{chunk-PUXXDABJ.mjs.map → chunk-AVPMOZ4Q.mjs.map} +1 -1
  20. package/dist/{chunk-VHYTJD6Z.mjs → chunk-BJGMROKL.mjs} +21 -3
  21. package/dist/chunk-BJGMROKL.mjs.map +1 -0
  22. package/dist/{chunk-6QG4W5G6.js → chunk-BJHR3ALO.js} +10 -10
  23. package/dist/{chunk-6QG4W5G6.js.map → chunk-BJHR3ALO.js.map} +1 -1
  24. package/dist/{chunk-3HA3VO2I.js → chunk-C4AKMVDZ.js} +23 -2
  25. package/dist/chunk-C4AKMVDZ.js.map +1 -0
  26. package/dist/{chunk-7IPB5A75.mjs → chunk-DBV6FV4V.mjs} +3 -3
  27. package/dist/{chunk-7IPB5A75.mjs.map → chunk-DBV6FV4V.mjs.map} +1 -1
  28. package/dist/{chunk-E2W2OSGG.mjs → chunk-DH3IXJRJ.mjs} +3 -3
  29. package/dist/{chunk-E2W2OSGG.mjs.map → chunk-DH3IXJRJ.mjs.map} +1 -1
  30. package/dist/{chunk-WQAGBJTY.js → chunk-DJGWCSKQ.js} +12 -12
  31. package/dist/{chunk-WQAGBJTY.js.map → chunk-DJGWCSKQ.js.map} +1 -1
  32. package/dist/{chunk-AS4NTE2Q.js → chunk-DYZM6NZU.js} +5 -5
  33. package/dist/{chunk-AS4NTE2Q.js.map → chunk-DYZM6NZU.js.map} +1 -1
  34. package/dist/{chunk-5ZI3IKRP.mjs → chunk-E6JUMXZM.mjs} +3 -3
  35. package/dist/{chunk-5ZI3IKRP.mjs.map → chunk-E6JUMXZM.mjs.map} +1 -1
  36. package/dist/{chunk-SEYLCARU.mjs → chunk-ECZR37QC.mjs} +3 -3
  37. package/dist/{chunk-SEYLCARU.mjs.map → chunk-ECZR37QC.mjs.map} +1 -1
  38. package/dist/{chunk-RBN52555.mjs → chunk-ESOUBZQJ.mjs} +3 -3
  39. package/dist/{chunk-RBN52555.mjs.map → chunk-ESOUBZQJ.mjs.map} +1 -1
  40. package/dist/{chunk-ZKPFXBE7.js → chunk-EW7PJQYR.js} +8 -8
  41. package/dist/{chunk-ZKPFXBE7.js.map → chunk-EW7PJQYR.js.map} +1 -1
  42. package/dist/{chunk-4CPGEYY3.js → chunk-GGILBESE.js} +5 -5
  43. package/dist/{chunk-4CPGEYY3.js.map → chunk-GGILBESE.js.map} +1 -1
  44. package/dist/{chunk-KXN6KNGE.js → chunk-GHSI2DHL.js} +75 -31
  45. package/dist/chunk-GHSI2DHL.js.map +1 -0
  46. package/dist/{chunk-VG5JCUPO.js → chunk-GSL6LVPL.js} +12 -12
  47. package/dist/{chunk-VG5JCUPO.js.map → chunk-GSL6LVPL.js.map} +1 -1
  48. package/dist/{chunk-NOEX3LCS.mjs → chunk-I4DNKFCV.mjs} +69 -25
  49. package/dist/chunk-I4DNKFCV.mjs.map +1 -0
  50. package/dist/{chunk-HEI6PUMK.js → chunk-JKBJ2AKX.js} +4 -4
  51. package/dist/{chunk-HEI6PUMK.js.map → chunk-JKBJ2AKX.js.map} +1 -1
  52. package/dist/{chunk-P2DHZE7T.mjs → chunk-JNHASKGK.mjs} +4 -4
  53. package/dist/{chunk-P2DHZE7T.mjs.map → chunk-JNHASKGK.mjs.map} +1 -1
  54. package/dist/{chunk-L7IEAJSD.js → chunk-K2KG2NIT.js} +4 -4
  55. package/dist/{chunk-L7IEAJSD.js.map → chunk-K2KG2NIT.js.map} +1 -1
  56. package/dist/{chunk-J45LTOIA.js → chunk-KXDLNZWQ.js} +9 -9
  57. package/dist/{chunk-J45LTOIA.js.map → chunk-KXDLNZWQ.js.map} +1 -1
  58. package/dist/{chunk-6PTQE6P6.mjs → chunk-M4I2MAO3.mjs} +4 -4
  59. package/dist/{chunk-6PTQE6P6.mjs.map → chunk-M4I2MAO3.mjs.map} +1 -1
  60. package/dist/{chunk-X62VJCF3.js → chunk-MJAFMXPQ.js} +6 -6
  61. package/dist/{chunk-X62VJCF3.js.map → chunk-MJAFMXPQ.js.map} +1 -1
  62. package/dist/{chunk-QC3XHUF4.js → chunk-NIIDSI6V.js} +5 -5
  63. package/dist/{chunk-QC3XHUF4.js.map → chunk-NIIDSI6V.js.map} +1 -1
  64. package/dist/{chunk-KNKIJOES.js → chunk-NO3YQXB5.js} +10 -10
  65. package/dist/{chunk-KNKIJOES.js.map → chunk-NO3YQXB5.js.map} +1 -1
  66. package/dist/{chunk-LGGNY6CR.mjs → chunk-OIYIWG53.mjs} +3 -3
  67. package/dist/{chunk-LGGNY6CR.mjs.map → chunk-OIYIWG53.mjs.map} +1 -1
  68. package/dist/{chunk-NSVOLN37.mjs → chunk-PX4LOZPZ.mjs} +12 -12
  69. package/dist/{chunk-NSVOLN37.mjs.map → chunk-PX4LOZPZ.mjs.map} +1 -1
  70. package/dist/{chunk-KDCMQRYI.mjs → chunk-Q4RVZHC6.mjs} +5 -5
  71. package/dist/{chunk-KDCMQRYI.mjs.map → chunk-Q4RVZHC6.mjs.map} +1 -1
  72. package/dist/{chunk-V54BL7YF.mjs → chunk-RGQ4VV2S.mjs} +3 -3
  73. package/dist/{chunk-V54BL7YF.mjs.map → chunk-RGQ4VV2S.mjs.map} +1 -1
  74. package/dist/{chunk-VX2D4AGI.mjs → chunk-RPCMGRG7.mjs} +3 -3
  75. package/dist/{chunk-VX2D4AGI.mjs.map → chunk-RPCMGRG7.mjs.map} +1 -1
  76. package/dist/{chunk-NQGUJ4B5.mjs → chunk-S2HLK4QZ.mjs} +3 -3
  77. package/dist/{chunk-NQGUJ4B5.mjs.map → chunk-S2HLK4QZ.mjs.map} +1 -1
  78. package/dist/{chunk-LOQG2PQC.js → chunk-SH34AAZX.js} +8 -8
  79. package/dist/{chunk-LOQG2PQC.js.map → chunk-SH34AAZX.js.map} +1 -1
  80. package/dist/{chunk-TS3WC3G4.mjs → chunk-SUQLII3F.mjs} +3 -3
  81. package/dist/{chunk-TS3WC3G4.mjs.map → chunk-SUQLII3F.mjs.map} +1 -1
  82. package/dist/{chunk-S4BZUUKZ.js → chunk-TX4BUYX4.js} +4 -4
  83. package/dist/{chunk-S4BZUUKZ.js.map → chunk-TX4BUYX4.js.map} +1 -1
  84. package/dist/{chunk-TYL5CFWF.mjs → chunk-URGXXUY3.mjs} +4 -4
  85. package/dist/{chunk-TYL5CFWF.mjs.map → chunk-URGXXUY3.mjs.map} +1 -1
  86. package/dist/{chunk-7LZ4SQRQ.mjs → chunk-VG5FQ6SU.mjs} +3 -3
  87. package/dist/{chunk-7LZ4SQRQ.mjs.map → chunk-VG5FQ6SU.mjs.map} +1 -1
  88. package/dist/{chunk-ZA2AXUIB.mjs → chunk-VXJTDBSM.mjs} +3 -3
  89. package/dist/{chunk-ZA2AXUIB.mjs.map → chunk-VXJTDBSM.mjs.map} +1 -1
  90. package/dist/{chunk-EAVUJY3H.js → chunk-WAGJKBGW.js} +5 -5
  91. package/dist/{chunk-EAVUJY3H.js.map → chunk-WAGJKBGW.js.map} +1 -1
  92. package/dist/{chunk-2LHXOVX2.mjs → chunk-XRWMJVSI.mjs} +3 -3
  93. package/dist/{chunk-2LHXOVX2.mjs.map → chunk-XRWMJVSI.mjs.map} +1 -1
  94. package/dist/{chunk-DTWQA7TN.mjs → chunk-XSUX5CU6.mjs} +3 -3
  95. package/dist/{chunk-DTWQA7TN.mjs.map → chunk-XSUX5CU6.mjs.map} +1 -1
  96. package/dist/{chunk-FTBA676Q.js → chunk-YHRNSINQ.js} +9 -9
  97. package/dist/{chunk-FTBA676Q.js.map → chunk-YHRNSINQ.js.map} +1 -1
  98. package/dist/{chunk-U3F5EBK3.js → chunk-ZFFKQLSM.js} +8 -8
  99. package/dist/{chunk-U3F5EBK3.js.map → chunk-ZFFKQLSM.js.map} +1 -1
  100. package/dist/{chunk-MKDSS4XD.js → chunk-ZZFJNKKI.js} +5 -5
  101. package/dist/{chunk-MKDSS4XD.js.map → chunk-ZZFJNKKI.js.map} +1 -1
  102. package/dist/components/AdvancedPickers.d.mts +19 -3
  103. package/dist/components/AdvancedPickers.d.ts +19 -3
  104. package/dist/components/AdvancedPickers.js +6 -6
  105. package/dist/components/AdvancedPickers.mjs +2 -2
  106. package/dist/components/AppShell.js +3 -3
  107. package/dist/components/AppShell.mjs +1 -1
  108. package/dist/components/Carousel.js +3 -3
  109. package/dist/components/Carousel.mjs +2 -2
  110. package/dist/components/Code.js +4 -4
  111. package/dist/components/Code.mjs +2 -2
  112. package/dist/components/Comments.js +6 -6
  113. package/dist/components/Comments.mjs +3 -3
  114. package/dist/components/Commerce.js +14 -14
  115. package/dist/components/Commerce.mjs +3 -3
  116. package/dist/components/DataTable.js +10 -10
  117. package/dist/components/DataTable.mjs +4 -4
  118. package/dist/components/Display.js +13 -13
  119. package/dist/components/Display.mjs +2 -2
  120. package/dist/components/Display2.js +6 -6
  121. package/dist/components/Display2.mjs +2 -2
  122. package/dist/components/Display3.js +9 -9
  123. package/dist/components/Display3.mjs +3 -3
  124. package/dist/components/Editing.js +9 -9
  125. package/dist/components/Editing.mjs +4 -4
  126. package/dist/components/Filters.js +8 -8
  127. package/dist/components/Filters.mjs +2 -2
  128. package/dist/components/Form.js +12 -12
  129. package/dist/components/Form.mjs +2 -2
  130. package/dist/components/Gallery.js +4 -4
  131. package/dist/components/Gallery.mjs +2 -2
  132. package/dist/components/Icons.d.mts +4 -1
  133. package/dist/components/Icons.d.ts +4 -1
  134. package/dist/components/Icons.js +84 -72
  135. package/dist/components/Icons.mjs +1 -1
  136. package/dist/components/Inputs.js +6 -6
  137. package/dist/components/Inputs.mjs +2 -2
  138. package/dist/components/InputsExtra.js +11 -11
  139. package/dist/components/InputsExtra.mjs +2 -2
  140. package/dist/components/Layout.js +21 -21
  141. package/dist/components/Layout.mjs +2 -2
  142. package/dist/components/Marketing.js +5 -5
  143. package/dist/components/Marketing.mjs +2 -2
  144. package/dist/components/NavigationMenu.js +3 -3
  145. package/dist/components/NavigationMenu.mjs +2 -2
  146. package/dist/components/Notifications.js +3 -3
  147. package/dist/components/Notifications.mjs +2 -2
  148. package/dist/components/Overlay.js +4 -4
  149. package/dist/components/Overlay.mjs +2 -2
  150. package/dist/components/Permissions.js +4 -4
  151. package/dist/components/Permissions.mjs +3 -3
  152. package/dist/components/Pickers.js +7 -7
  153. package/dist/components/Pickers.mjs +2 -2
  154. package/dist/components/Toast.js +4 -4
  155. package/dist/components/Toast.mjs +2 -2
  156. package/dist/index.d.mts +1 -1
  157. package/dist/index.d.ts +1 -1
  158. package/dist/index.js +228 -216
  159. package/dist/index.mjs +25 -25
  160. package/dist/styles.css +1 -1
  161. package/package.json +1 -1
  162. package/dist/chunk-3HA3VO2I.js.map +0 -1
  163. package/dist/chunk-KXN6KNGE.js.map +0 -1
  164. package/dist/chunk-NOEX3LCS.mjs.map +0 -1
  165. package/dist/chunk-VHYTJD6Z.mjs.map +0 -1
@@ -3,7 +3,7 @@
3
3
 
4
4
  var chunkRJJH6UZU_js = require('./chunk-RJJH6UZU.js');
5
5
  var chunkU6ZXX4WF_js = require('./chunk-U6ZXX4WF.js');
6
- var chunk3HA3VO2I_js = require('./chunk-3HA3VO2I.js');
6
+ var chunkC4AKMVDZ_js = require('./chunk-C4AKMVDZ.js');
7
7
  var chunkPASF6T4H_js = require('./chunk-PASF6T4H.js');
8
8
  var React = require('react');
9
9
  var jsxRuntime = require('react/jsx-runtime');
@@ -63,7 +63,7 @@ function ImageGallery({
63
63
  className: "gallery__nav gallery__nav--prev",
64
64
  "aria-label": t["gallery.prev"],
65
65
  onClick: () => setIndex((i) => (i - 1 + images.length) % images.length),
66
- children: /* @__PURE__ */ jsxRuntime.jsx(chunk3HA3VO2I_js.ChevronLeft, { size: 20 })
66
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunkC4AKMVDZ_js.ChevronLeft, { size: 20 })
67
67
  }
68
68
  ),
69
69
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -73,7 +73,7 @@ function ImageGallery({
73
73
  className: "gallery__nav gallery__nav--next",
74
74
  "aria-label": t["gallery.next"],
75
75
  onClick: () => setIndex((i) => (i + 1) % images.length),
76
- children: /* @__PURE__ */ jsxRuntime.jsx(chunk3HA3VO2I_js.ChevronRight, { size: 20 })
76
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunkC4AKMVDZ_js.ChevronRight, { size: 20 })
77
77
  }
78
78
  )
79
79
  ] })
@@ -126,7 +126,7 @@ function Lightbox({ open, onClose, images, index, onChange }) {
126
126
  className: "lightbox__close",
127
127
  "aria-label": t["gallery.close"],
128
128
  onClick: onClose,
129
- children: /* @__PURE__ */ jsxRuntime.jsx(chunk3HA3VO2I_js.X, { size: 20 })
129
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunkC4AKMVDZ_js.X, { size: 20 })
130
130
  }
131
131
  ),
132
132
  images.length > 1 && onChange && /* @__PURE__ */ jsxRuntime.jsx(
@@ -139,7 +139,7 @@ function Lightbox({ open, onClose, images, index, onChange }) {
139
139
  e.stopPropagation();
140
140
  onChange((index - 1 + images.length) % images.length);
141
141
  },
142
- children: /* @__PURE__ */ jsxRuntime.jsx(chunk3HA3VO2I_js.ChevronLeft, { size: 24 })
142
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunkC4AKMVDZ_js.ChevronLeft, { size: 24 })
143
143
  }
144
144
  ),
145
145
  /* @__PURE__ */ jsxRuntime.jsx("img", { src: current.src, alt: current.alt ?? "", className: "lightbox__image", onClick: (e) => e.stopPropagation() }),
@@ -153,7 +153,7 @@ function Lightbox({ open, onClose, images, index, onChange }) {
153
153
  e.stopPropagation();
154
154
  onChange((index + 1) % images.length);
155
155
  },
156
- children: /* @__PURE__ */ jsxRuntime.jsx(chunk3HA3VO2I_js.ChevronRight, { size: 24 })
156
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunkC4AKMVDZ_js.ChevronRight, { size: 24 })
157
157
  }
158
158
  ),
159
159
  images.length > 1 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "lightbox__counter", children: [
@@ -166,5 +166,5 @@ function Lightbox({ open, onClose, images, index, onChange }) {
166
166
 
167
167
  exports.ImageGallery = ImageGallery;
168
168
  exports.Lightbox = Lightbox;
169
- //# sourceMappingURL=chunk-LOQG2PQC.js.map
170
- //# sourceMappingURL=chunk-LOQG2PQC.js.map
169
+ //# sourceMappingURL=chunk-SH34AAZX.js.map
170
+ //# sourceMappingURL=chunk-SH34AAZX.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Gallery.tsx"],"names":["React","useLocale","jsxs","Fragment","cx","jsx","ChevronLeft","ChevronRight","format","X"],"mappings":"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","file":"chunk-LOQG2PQC.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { ChevronLeft, ChevronRight, X } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\n\n// ---------- ImageGallery ------------------------------------------------\nexport interface GalleryImage {\n src: string;\n alt?: string;\n thumbnail?: string; // si no se pasa, se usa src\n}\n\nexport interface ImageGalleryProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n images: GalleryImage[];\n /** Index inicial. */\n defaultIndex?: number;\n /** Click en imagen principal abre lightbox. Default: true. */\n enableLightbox?: boolean;\n /** Layout de thumbnails. */\n thumbnailPosition?: 'bottom' | 'left';\n}\n\nexport function ImageGallery({\n images, defaultIndex = 0, enableLightbox = true,\n thumbnailPosition = 'bottom', className, ...rest\n}: ImageGalleryProps) {\n const [index, setIndex] = React.useState(defaultIndex);\n const [lightboxOpen, setLightboxOpen] = React.useState(false);\n const t = useLocale();\n\n if (images.length === 0) return null;\n const safeIndex = Math.max(0, Math.min(index, images.length - 1));\n const current = images[safeIndex];\n\n return (\n <>\n <div className={cx('gallery', `gallery--thumbs-${thumbnailPosition}`, className)} {...rest}>\n <div className=\"gallery__main\">\n <img\n src={current.src}\n alt={current.alt ?? ''}\n className=\"gallery__image\"\n onClick={() => enableLightbox && setLightboxOpen(true)}\n style={{ cursor: enableLightbox ? 'zoom-in' : 'default' }}\n />\n {images.length > 1 && (\n <>\n <button\n type=\"button\"\n className=\"gallery__nav gallery__nav--prev\"\n aria-label={t['gallery.prev']}\n onClick={() => setIndex((i) => (i - 1 + images.length) % images.length)}\n >\n <ChevronLeft size={20} />\n </button>\n <button\n type=\"button\"\n className=\"gallery__nav gallery__nav--next\"\n aria-label={t['gallery.next']}\n onClick={() => setIndex((i) => (i + 1) % images.length)}\n >\n <ChevronRight size={20} />\n </button>\n </>\n )}\n </div>\n {images.length > 1 && (\n <div className=\"gallery__thumbs\" role=\"tablist\" aria-label={t['gallery.thumbnails']}>\n {images.map((img, i) => (\n <button\n key={i}\n type=\"button\"\n role=\"tab\"\n aria-selected={i === safeIndex}\n aria-label={format(t['gallery.imageNumber'], { n: i + 1 })}\n className={cx('gallery__thumb', i === safeIndex && 'is-active')}\n onClick={() => setIndex(i)}\n >\n <img src={img.thumbnail ?? img.src} alt={img.alt ?? ''} />\n </button>\n ))}\n </div>\n )}\n </div>\n\n {enableLightbox && (\n <Lightbox\n open={lightboxOpen}\n onClose={() => setLightboxOpen(false)}\n images={images}\n index={safeIndex}\n onChange={setIndex}\n />\n )}\n </>\n );\n}\n\n// ---------- Lightbox ---------------------------------------------------\nexport interface LightboxProps {\n open: boolean;\n onClose: () => void;\n images: GalleryImage[];\n index: number;\n onChange?: (i: number) => void;\n}\n\nexport function Lightbox({ open, onClose, images, index, onChange }: LightboxProps) {\n const t = useLocale();\n React.useEffect(() => {\n if (!open) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n else if (e.key === 'ArrowLeft' && onChange) onChange((index - 1 + images.length) % images.length);\n else if (e.key === 'ArrowRight' && onChange) onChange((index + 1) % images.length);\n };\n document.addEventListener('keydown', onKey);\n return () => document.removeEventListener('keydown', onKey);\n }, [open, index, images.length, onChange, onClose]);\n\n if (!open || images.length === 0) return null;\n const current = images[Math.max(0, Math.min(index, images.length - 1))];\n\n return (\n <div className=\"lightbox\" role=\"dialog\" aria-modal=\"true\" aria-label={t['gallery.viewer']} onClick={onClose}>\n <button\n type=\"button\"\n className=\"lightbox__close\"\n aria-label={t['gallery.close']}\n onClick={onClose}\n >\n <X size={20} />\n </button>\n {images.length > 1 && onChange && (\n <button\n type=\"button\"\n className=\"lightbox__nav lightbox__nav--prev\"\n aria-label={t['gallery.prev']}\n onClick={(e) => { e.stopPropagation(); onChange((index - 1 + images.length) % images.length); }}\n >\n <ChevronLeft size={24} />\n </button>\n )}\n <img src={current.src} alt={current.alt ?? ''} className=\"lightbox__image\" onClick={(e) => e.stopPropagation()} />\n {images.length > 1 && onChange && (\n <button\n type=\"button\"\n className=\"lightbox__nav lightbox__nav--next\"\n aria-label={t['gallery.next']}\n onClick={(e) => { e.stopPropagation(); onChange((index + 1) % images.length); }}\n >\n <ChevronRight size={24} />\n </button>\n )}\n {images.length > 1 && (\n <div className=\"lightbox__counter\">{index + 1} / {images.length}</div>\n )}\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/Gallery.tsx"],"names":["React","useLocale","jsxs","Fragment","cx","jsx","ChevronLeft","ChevronRight","format","X"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBO,SAAS,YAAA,CAAa;AAAA,EAC3B,MAAA;AAAA,EAAQ,YAAA,GAAe,CAAA;AAAA,EAAG,cAAA,GAAiB,IAAA;AAAA,EAC3C,iBAAA,GAAoB,QAAA;AAAA,EAAU,SAAA;AAAA,EAAW,GAAG;AAC9C,CAAA,EAAsB;AACpB,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAUA,0BAAS,YAAY,CAAA;AACrD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAUA,0BAAS,KAAK,CAAA;AAC5D,EAAA,MAAM,IAAIC,0BAAA,EAAU;AAEpB,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAChC,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAI,KAAA,EAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAC,CAAA;AAChE,EAAA,MAAM,OAAA,GAAU,OAAO,SAAS,CAAA;AAEhC,EAAA,uBACEC,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAD,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWE,mBAAA,CAAG,SAAA,EAAW,CAAA,gBAAA,EAAmB,iBAAiB,CAAA,CAAA,EAAI,SAAS,CAAA,EAAI,GAAG,IAAA,EACpF,QAAA,EAAA;AAAA,sBAAAF,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,eAAA,EACb,QAAA,EAAA;AAAA,wBAAAG,cAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAK,OAAA,CAAQ,GAAA;AAAA,YACb,GAAA,EAAK,QAAQ,GAAA,IAAO,EAAA;AAAA,YACpB,SAAA,EAAU,gBAAA;AAAA,YACV,OAAA,EAAS,MAAM,cAAA,IAAkB,eAAA,CAAgB,IAAI,CAAA;AAAA,YACrD,KAAA,EAAO,EAAE,MAAA,EAAQ,cAAA,GAAiB,YAAY,SAAA;AAAU;AAAA,SAC1D;AAAA,QACC,MAAA,CAAO,MAAA,GAAS,CAAA,oBACfH,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,0BAAAE,cAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,SAAA,EAAU,iCAAA;AAAA,cACV,YAAA,EAAY,EAAE,cAAc,CAAA;AAAA,cAC5B,OAAA,EAAS,MAAM,QAAA,CAAS,CAAC,CAAA,KAAA,CAAO,IAAI,CAAA,GAAI,MAAA,CAAO,MAAA,IAAU,MAAA,CAAO,MAAM,CAAA;AAAA,cAEtE,QAAA,kBAAAA,cAAA,CAACC,4BAAA,EAAA,EAAY,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,WACzB;AAAA,0BACAD,cAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,SAAA,EAAU,iCAAA;AAAA,cACV,YAAA,EAAY,EAAE,cAAc,CAAA;AAAA,cAC5B,OAAA,EAAS,MAAM,QAAA,CAAS,CAAC,OAAO,CAAA,GAAI,CAAA,IAAK,OAAO,MAAM,CAAA;AAAA,cAEtD,QAAA,kBAAAA,cAAA,CAACE,6BAAA,EAAA,EAAa,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA;AAC1B,SAAA,EACF;AAAA,OAAA,EAEJ,CAAA;AAAA,MACC,OAAO,MAAA,GAAS,CAAA,oBACfF,cAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iBAAA,EAAkB,IAAA,EAAK,SAAA,EAAU,YAAA,EAAY,EAAE,oBAAoB,CAAA,EAC/E,iBAAO,GAAA,CAAI,CAAC,KAAK,CAAA,qBAChBA,cAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAK,QAAA;AAAA,UACL,IAAA,EAAK,KAAA;AAAA,UACL,iBAAe,CAAA,KAAM,SAAA;AAAA,UACrB,YAAA,EAAYG,wBAAO,CAAA,CAAE,qBAAqB,GAAG,EAAE,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA;AAAA,UACzD,SAAA,EAAWJ,mBAAA,CAAG,gBAAA,EAAkB,CAAA,KAAM,aAAa,WAAW,CAAA;AAAA,UAC9D,OAAA,EAAS,MAAM,QAAA,CAAS,CAAC,CAAA;AAAA,UAEzB,QAAA,kBAAAC,cAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,GAAA,CAAI,SAAA,IAAa,IAAI,GAAA,EAAK,GAAA,EAAK,GAAA,CAAI,GAAA,IAAO,EAAA,EAAI;AAAA,SAAA;AAAA,QARnD;AAAA,OAUR,CAAA,EACH;AAAA,KAAA,EAEJ,CAAA;AAAA,IAEC,cAAA,oBACCA,cAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,YAAA;AAAA,QACN,OAAA,EAAS,MAAM,eAAA,CAAgB,KAAK,CAAA;AAAA,QACpC,MAAA;AAAA,QACA,KAAA,EAAO,SAAA;AAAA,QACP,QAAA,EAAU;AAAA;AAAA;AACZ,GAAA,EAEJ,CAAA;AAEJ;AAWO,SAAS,SAAS,EAAE,IAAA,EAAM,SAAS,MAAA,EAAQ,KAAA,EAAO,UAAS,EAAkB;AAClF,EAAA,MAAM,IAAIJ,0BAAA,EAAU;AACpB,EAAMD,2BAAU,MAAM;AACpB,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,KAAqB;AAClC,MAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,QAAA,EAAU,OAAA,EAAQ;AAAA,WAAA,IACvB,CAAA,CAAE,GAAA,KAAQ,WAAA,IAAe,QAAA,EAAU,QAAA,CAAA,CAAU,QAAQ,CAAA,GAAI,MAAA,CAAO,MAAA,IAAU,MAAA,CAAO,MAAM,CAAA;AAAA,WAAA,IACvF,CAAA,CAAE,QAAQ,YAAA,IAAgB,QAAA,YAAoB,KAAA,GAAQ,CAAA,IAAK,OAAO,MAAM,CAAA;AAAA,IACnF,CAAA;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,KAAK,CAAA;AAC1C,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,SAAA,EAAW,KAAK,CAAA;AAAA,EAC5D,CAAA,EAAG,CAAC,IAAA,EAAM,KAAA,EAAO,OAAO,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAC,CAAA;AAElD,EAAA,IAAI,CAAC,IAAA,IAAQ,MAAA,CAAO,MAAA,KAAW,GAAG,OAAO,IAAA;AACzC,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAC,CAAC,CAAA;AAEtE,EAAA,uBACEE,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EAAW,IAAA,EAAK,QAAA,EAAS,YAAA,EAAW,MAAA,EAAO,YAAA,EAAY,CAAA,CAAE,gBAAgB,CAAA,EAAG,SAAS,OAAA,EAClG,QAAA,EAAA;AAAA,oBAAAG,cAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAU,iBAAA;AAAA,QACV,YAAA,EAAY,EAAE,eAAe,CAAA;AAAA,QAC7B,OAAA,EAAS,OAAA;AAAA,QAET,QAAA,kBAAAA,cAAA,CAACI,kBAAA,EAAA,EAAE,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,KACf;AAAA,IACC,MAAA,CAAO,MAAA,GAAS,CAAA,IAAK,QAAA,oBACpBJ,cAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAU,mCAAA;AAAA,QACV,YAAA,EAAY,EAAE,cAAc,CAAA;AAAA,QAC5B,OAAA,EAAS,CAAC,CAAA,KAAM;AAAE,UAAA,CAAA,CAAE,eAAA,EAAgB;AAAG,UAAA,QAAA,CAAA,CAAU,KAAA,GAAQ,CAAA,GAAI,MAAA,CAAO,MAAA,IAAU,OAAO,MAAM,CAAA;AAAA,QAAG,CAAA;AAAA,QAE9F,QAAA,kBAAAA,cAAA,CAACC,4BAAA,EAAA,EAAY,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,KACzB;AAAA,mCAED,KAAA,EAAA,EAAI,GAAA,EAAK,OAAA,CAAQ,GAAA,EAAK,KAAK,OAAA,CAAQ,GAAA,IAAO,EAAA,EAAI,SAAA,EAAU,mBAAkB,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,iBAAgB,EAAG,CAAA;AAAA,IAC/G,MAAA,CAAO,MAAA,GAAS,CAAA,IAAK,QAAA,oBACpBD,cAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAU,mCAAA;AAAA,QACV,YAAA,EAAY,EAAE,cAAc,CAAA;AAAA,QAC5B,OAAA,EAAS,CAAC,CAAA,KAAM;AAAE,UAAA,CAAA,CAAE,eAAA,EAAgB;AAAG,UAAA,QAAA,CAAA,CAAU,KAAA,GAAQ,CAAA,IAAK,MAAA,CAAO,MAAM,CAAA;AAAA,QAAG,CAAA;AAAA,QAE9E,QAAA,kBAAAA,cAAA,CAACE,6BAAA,EAAA,EAAa,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,KAC1B;AAAA,IAED,OAAO,MAAA,GAAS,CAAA,oBACfL,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mBAAA,EAAqB,QAAA,EAAA;AAAA,MAAA,KAAA,GAAQ,CAAA;AAAA,MAAE,KAAA;AAAA,MAAI,MAAA,CAAO;AAAA,KAAA,EAAO;AAAA,GAAA,EAEpE,CAAA;AAEJ","file":"chunk-SH34AAZX.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { ChevronLeft, ChevronRight, X } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\n\n// ---------- ImageGallery ------------------------------------------------\nexport interface GalleryImage {\n src: string;\n alt?: string;\n thumbnail?: string; // si no se pasa, se usa src\n}\n\nexport interface ImageGalleryProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n images: GalleryImage[];\n /** Index inicial. */\n defaultIndex?: number;\n /** Click en imagen principal abre lightbox. Default: true. */\n enableLightbox?: boolean;\n /** Layout de thumbnails. */\n thumbnailPosition?: 'bottom' | 'left';\n}\n\nexport function ImageGallery({\n images, defaultIndex = 0, enableLightbox = true,\n thumbnailPosition = 'bottom', className, ...rest\n}: ImageGalleryProps) {\n const [index, setIndex] = React.useState(defaultIndex);\n const [lightboxOpen, setLightboxOpen] = React.useState(false);\n const t = useLocale();\n\n if (images.length === 0) return null;\n const safeIndex = Math.max(0, Math.min(index, images.length - 1));\n const current = images[safeIndex];\n\n return (\n <>\n <div className={cx('gallery', `gallery--thumbs-${thumbnailPosition}`, className)} {...rest}>\n <div className=\"gallery__main\">\n <img\n src={current.src}\n alt={current.alt ?? ''}\n className=\"gallery__image\"\n onClick={() => enableLightbox && setLightboxOpen(true)}\n style={{ cursor: enableLightbox ? 'zoom-in' : 'default' }}\n />\n {images.length > 1 && (\n <>\n <button\n type=\"button\"\n className=\"gallery__nav gallery__nav--prev\"\n aria-label={t['gallery.prev']}\n onClick={() => setIndex((i) => (i - 1 + images.length) % images.length)}\n >\n <ChevronLeft size={20} />\n </button>\n <button\n type=\"button\"\n className=\"gallery__nav gallery__nav--next\"\n aria-label={t['gallery.next']}\n onClick={() => setIndex((i) => (i + 1) % images.length)}\n >\n <ChevronRight size={20} />\n </button>\n </>\n )}\n </div>\n {images.length > 1 && (\n <div className=\"gallery__thumbs\" role=\"tablist\" aria-label={t['gallery.thumbnails']}>\n {images.map((img, i) => (\n <button\n key={i}\n type=\"button\"\n role=\"tab\"\n aria-selected={i === safeIndex}\n aria-label={format(t['gallery.imageNumber'], { n: i + 1 })}\n className={cx('gallery__thumb', i === safeIndex && 'is-active')}\n onClick={() => setIndex(i)}\n >\n <img src={img.thumbnail ?? img.src} alt={img.alt ?? ''} />\n </button>\n ))}\n </div>\n )}\n </div>\n\n {enableLightbox && (\n <Lightbox\n open={lightboxOpen}\n onClose={() => setLightboxOpen(false)}\n images={images}\n index={safeIndex}\n onChange={setIndex}\n />\n )}\n </>\n );\n}\n\n// ---------- Lightbox ---------------------------------------------------\nexport interface LightboxProps {\n open: boolean;\n onClose: () => void;\n images: GalleryImage[];\n index: number;\n onChange?: (i: number) => void;\n}\n\nexport function Lightbox({ open, onClose, images, index, onChange }: LightboxProps) {\n const t = useLocale();\n React.useEffect(() => {\n if (!open) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n else if (e.key === 'ArrowLeft' && onChange) onChange((index - 1 + images.length) % images.length);\n else if (e.key === 'ArrowRight' && onChange) onChange((index + 1) % images.length);\n };\n document.addEventListener('keydown', onKey);\n return () => document.removeEventListener('keydown', onKey);\n }, [open, index, images.length, onChange, onClose]);\n\n if (!open || images.length === 0) return null;\n const current = images[Math.max(0, Math.min(index, images.length - 1))];\n\n return (\n <div className=\"lightbox\" role=\"dialog\" aria-modal=\"true\" aria-label={t['gallery.viewer']} onClick={onClose}>\n <button\n type=\"button\"\n className=\"lightbox__close\"\n aria-label={t['gallery.close']}\n onClick={onClose}\n >\n <X size={20} />\n </button>\n {images.length > 1 && onChange && (\n <button\n type=\"button\"\n className=\"lightbox__nav lightbox__nav--prev\"\n aria-label={t['gallery.prev']}\n onClick={(e) => { e.stopPropagation(); onChange((index - 1 + images.length) % images.length); }}\n >\n <ChevronLeft size={24} />\n </button>\n )}\n <img src={current.src} alt={current.alt ?? ''} className=\"lightbox__image\" onClick={(e) => e.stopPropagation()} />\n {images.length > 1 && onChange && (\n <button\n type=\"button\"\n className=\"lightbox__nav lightbox__nav--next\"\n aria-label={t['gallery.next']}\n onClick={(e) => { e.stopPropagation(); onChange((index + 1) % images.length); }}\n >\n <ChevronRight size={24} />\n </button>\n )}\n {images.length > 1 && (\n <div className=\"lightbox__counter\">{index + 1} / {images.length}</div>\n )}\n </div>\n );\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { Check } from './chunk-VHYTJD6Z.mjs';
2
+ import { Check } from './chunk-BJGMROKL.mjs';
3
3
  import { cx } from './chunk-IEPCH3JB.mjs';
4
4
  import * as React from 'react';
5
5
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -139,5 +139,5 @@ var InputGroupAddon = React.forwardRef(
139
139
  );
140
140
 
141
141
  export { Checkbox, FormField, Input, InputGroup, InputGroupAddon, Label, Radio, Select, Switch, Textarea };
142
- //# sourceMappingURL=chunk-TS3WC3G4.mjs.map
143
- //# sourceMappingURL=chunk-TS3WC3G4.mjs.map
142
+ //# sourceMappingURL=chunk-SUQLII3F.mjs.map
143
+ //# sourceMappingURL=chunk-SUQLII3F.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Form.tsx"],"names":["Input","Textarea","Select","Checkbox","Radio","Switch","Label","InputGroup","InputGroupAddon"],"mappings":"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","file":"chunk-TS3WC3G4.mjs","sourcesContent":["import * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { Check as CheckIcon } from './Icons';\n\nexport interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n invalid?: boolean;\n iconLeft?: React.ReactNode;\n iconRight?: React.ReactNode;\n}\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(function Input(\n { invalid, iconLeft, iconRight, className, ...rest },\n ref\n) {\n if (iconLeft || iconRight) {\n return (\n <div className={cx('input-wrap', invalid && 'is-invalid', className)}>\n {iconLeft && <span className=\"input-wrap__icon input-wrap__icon--left\" aria-hidden=\"true\">{iconLeft}</span>}\n <input\n ref={ref}\n className={cx('input', !!iconLeft && 'input--has-left', !!iconRight && 'input--has-right')}\n aria-invalid={invalid || undefined}\n {...rest}\n />\n {iconRight && <span className=\"input-wrap__icon input-wrap__icon--right\" aria-hidden=\"true\">{iconRight}</span>}\n </div>\n );\n }\n return (\n <input\n ref={ref}\n className={cx('input', invalid && 'is-invalid', className)}\n aria-invalid={invalid || undefined}\n {...rest}\n />\n );\n});\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n invalid?: boolean;\n}\n\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea(\n { invalid, className, ...rest },\n ref\n) {\n return (\n <textarea\n ref={ref}\n className={cx('textarea', invalid && 'is-invalid', className)}\n aria-invalid={invalid || undefined}\n {...rest}\n />\n );\n});\n\nexport interface SelectProps extends React.SelectHTMLAttributes<HTMLSelectElement> {\n invalid?: boolean;\n}\n\nexport const Select = React.forwardRef<HTMLSelectElement, SelectProps>(function Select(\n { invalid, className, children, ...rest },\n ref\n) {\n return (\n <select\n ref={ref}\n className={cx('select', invalid && 'is-invalid', className)}\n aria-invalid={invalid || undefined}\n {...rest}\n >\n {children}\n </select>\n );\n});\n\nexport interface CheckboxProps extends React.InputHTMLAttributes<HTMLInputElement> {\n /** Optional label rendered next to the checkbox. */\n children?: React.ReactNode;\n invalid?: boolean;\n /** Tri-state mark (e.g. select-all partially checked). HTML attribute is JS-only. */\n indeterminate?: boolean;\n}\n\nexport const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(function Checkbox(\n { className, children, invalid, indeterminate, ...rest },\n ref\n) {\n // Bridge the forwarded ref with our internal ref so we can set the\n // indeterminate property (HTML doesn't expose it as an attribute).\n const innerRef = React.useRef<HTMLInputElement | null>(null);\n React.useEffect(() => {\n if (innerRef.current) innerRef.current.indeterminate = !!indeterminate;\n }, [indeterminate]);\n\n const setRef = (node: HTMLInputElement | null) => {\n innerRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLInputElement | null>).current = node;\n };\n\n return (\n <label className={cx('check', invalid && 'is-invalid', className)}>\n <input\n ref={setRef}\n type=\"checkbox\"\n aria-invalid={invalid || undefined}\n aria-checked={indeterminate ? 'mixed' : undefined}\n {...rest}\n />\n <span className=\"check__box\" aria-hidden=\"true\">\n <CheckIcon size={14} strokeWidth={3} />\n </span>\n {children != null && <span>{children}</span>}\n </label>\n );\n});\n\nexport interface RadioProps extends React.InputHTMLAttributes<HTMLInputElement> {\n /** Optional label rendered next to the radio. */\n children?: React.ReactNode;\n}\n\nexport const Radio = React.forwardRef<HTMLInputElement, RadioProps>(function Radio(\n { className, children, ...rest },\n ref\n) {\n return (\n <label className={cx('check', 'check--radio', className)}>\n <input ref={ref} type=\"radio\" {...rest} />\n <span className=\"check__box\" aria-hidden=\"true\" />\n {children != null && <span>{children}</span>}\n </label>\n );\n});\n\nexport interface SwitchProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n /** Optional label rendered next to the switch. */\n children?: React.ReactNode;\n invalid?: boolean;\n}\n\nexport const Switch = React.forwardRef<HTMLInputElement, SwitchProps>(function Switch(\n { className, children, invalid, ...rest },\n ref\n) {\n return (\n <label className={cx('switch', invalid && 'is-invalid', className)}>\n {/* role=\"switch\" overrides the native checkbox role so screen readers\n announce \"on/off\" semantics instead of \"checked/unchecked\". */}\n <input\n ref={ref}\n type=\"checkbox\"\n role=\"switch\"\n aria-invalid={invalid || undefined}\n {...rest}\n />\n <span className=\"switch__track\" aria-hidden=\"true\" />\n {children != null && <span>{children}</span>}\n </label>\n );\n});\n\nexport interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n required?: boolean;\n}\n\nexport const Label = React.forwardRef<HTMLLabelElement, LabelProps>(function Label(\n { required, className, children, ...rest },\n ref\n) {\n return (\n <label ref={ref} className={cx('label', className)} {...rest}>\n {children}\n {required && <span aria-label=\"requerido\" style={{ color: 'var(--color-danger)' }}> *</span>}\n </label>\n );\n});\n\nexport interface FormFieldProps {\n label?: React.ReactNode;\n hint?: React.ReactNode;\n error?: React.ReactNode;\n required?: boolean;\n /** Override the auto-generated id (e.g. when the input is rendered outside FormField). */\n htmlFor?: string;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function FormField({ label, hint, error, required, htmlFor, children, className }: FormFieldProps) {\n const reactId = React.useId();\n const id = htmlFor ?? reactId;\n const hintId = hint ? `${id}-hint` : undefined;\n const errorId = error ? `${id}-error` : undefined;\n const describedBy = [hintId, errorId].filter(Boolean).join(' ') || undefined;\n\n // Inject id + aria-describedby into the single child element so screen readers\n // announce the helper/error text. Consumer-provided values win.\n const child = React.isValidElement(children)\n ? React.cloneElement(\n children as React.ReactElement<{ id?: string; 'aria-describedby'?: string }>,\n {\n id: (children.props as { id?: string }).id ?? id,\n 'aria-describedby':\n (children.props as { 'aria-describedby'?: string })['aria-describedby'] ?? describedBy,\n }\n )\n : children;\n\n return (\n <div className={cx('form-field', className)}>\n {label && (\n <Label htmlFor={id} required={required}>\n {label}\n </Label>\n )}\n {child}\n {hint && !error && <div id={hintId} className=\"form-field__hint\">{hint}</div>}\n {error && <div id={errorId} className=\"form-field__error\" role=\"alert\">{error}</div>}\n </div>\n );\n}\n\n// ---------- InputGroup --------------------------------------------------\n// Permite combinar un Input con addons a la izquierda/derecha.\n// Uso: <InputGroup><InputGroupAddon>$</InputGroupAddon><Input /></InputGroup>\nexport const InputGroup = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function InputGroup({ className, ...rest }, ref) {\n return <div ref={ref} className={cx('input-group', className)} {...rest} />;\n }\n);\n\nexport const InputGroupAddon = React.forwardRef<HTMLSpanElement, React.HTMLAttributes<HTMLSpanElement>>(\n function InputGroupAddon({ className, ...rest }, ref) {\n return <span ref={ref} className={cx('input-group__addon', className)} {...rest} />;\n }\n);\n"]}
1
+ {"version":3,"sources":["../src/components/Form.tsx"],"names":["Input","Textarea","Select","Checkbox","Radio","Switch","Label","InputGroup","InputGroupAddon"],"mappings":"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","file":"chunk-SUQLII3F.mjs","sourcesContent":["import * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { Check as CheckIcon } from './Icons';\n\nexport interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n invalid?: boolean;\n iconLeft?: React.ReactNode;\n iconRight?: React.ReactNode;\n}\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(function Input(\n { invalid, iconLeft, iconRight, className, ...rest },\n ref\n) {\n if (iconLeft || iconRight) {\n return (\n <div className={cx('input-wrap', invalid && 'is-invalid', className)}>\n {iconLeft && <span className=\"input-wrap__icon input-wrap__icon--left\" aria-hidden=\"true\">{iconLeft}</span>}\n <input\n ref={ref}\n className={cx('input', !!iconLeft && 'input--has-left', !!iconRight && 'input--has-right')}\n aria-invalid={invalid || undefined}\n {...rest}\n />\n {iconRight && <span className=\"input-wrap__icon input-wrap__icon--right\" aria-hidden=\"true\">{iconRight}</span>}\n </div>\n );\n }\n return (\n <input\n ref={ref}\n className={cx('input', invalid && 'is-invalid', className)}\n aria-invalid={invalid || undefined}\n {...rest}\n />\n );\n});\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n invalid?: boolean;\n}\n\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea(\n { invalid, className, ...rest },\n ref\n) {\n return (\n <textarea\n ref={ref}\n className={cx('textarea', invalid && 'is-invalid', className)}\n aria-invalid={invalid || undefined}\n {...rest}\n />\n );\n});\n\nexport interface SelectProps extends React.SelectHTMLAttributes<HTMLSelectElement> {\n invalid?: boolean;\n}\n\nexport const Select = React.forwardRef<HTMLSelectElement, SelectProps>(function Select(\n { invalid, className, children, ...rest },\n ref\n) {\n return (\n <select\n ref={ref}\n className={cx('select', invalid && 'is-invalid', className)}\n aria-invalid={invalid || undefined}\n {...rest}\n >\n {children}\n </select>\n );\n});\n\nexport interface CheckboxProps extends React.InputHTMLAttributes<HTMLInputElement> {\n /** Optional label rendered next to the checkbox. */\n children?: React.ReactNode;\n invalid?: boolean;\n /** Tri-state mark (e.g. select-all partially checked). HTML attribute is JS-only. */\n indeterminate?: boolean;\n}\n\nexport const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(function Checkbox(\n { className, children, invalid, indeterminate, ...rest },\n ref\n) {\n // Bridge the forwarded ref with our internal ref so we can set the\n // indeterminate property (HTML doesn't expose it as an attribute).\n const innerRef = React.useRef<HTMLInputElement | null>(null);\n React.useEffect(() => {\n if (innerRef.current) innerRef.current.indeterminate = !!indeterminate;\n }, [indeterminate]);\n\n const setRef = (node: HTMLInputElement | null) => {\n innerRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLInputElement | null>).current = node;\n };\n\n return (\n <label className={cx('check', invalid && 'is-invalid', className)}>\n <input\n ref={setRef}\n type=\"checkbox\"\n aria-invalid={invalid || undefined}\n aria-checked={indeterminate ? 'mixed' : undefined}\n {...rest}\n />\n <span className=\"check__box\" aria-hidden=\"true\">\n <CheckIcon size={14} strokeWidth={3} />\n </span>\n {children != null && <span>{children}</span>}\n </label>\n );\n});\n\nexport interface RadioProps extends React.InputHTMLAttributes<HTMLInputElement> {\n /** Optional label rendered next to the radio. */\n children?: React.ReactNode;\n}\n\nexport const Radio = React.forwardRef<HTMLInputElement, RadioProps>(function Radio(\n { className, children, ...rest },\n ref\n) {\n return (\n <label className={cx('check', 'check--radio', className)}>\n <input ref={ref} type=\"radio\" {...rest} />\n <span className=\"check__box\" aria-hidden=\"true\" />\n {children != null && <span>{children}</span>}\n </label>\n );\n});\n\nexport interface SwitchProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n /** Optional label rendered next to the switch. */\n children?: React.ReactNode;\n invalid?: boolean;\n}\n\nexport const Switch = React.forwardRef<HTMLInputElement, SwitchProps>(function Switch(\n { className, children, invalid, ...rest },\n ref\n) {\n return (\n <label className={cx('switch', invalid && 'is-invalid', className)}>\n {/* role=\"switch\" overrides the native checkbox role so screen readers\n announce \"on/off\" semantics instead of \"checked/unchecked\". */}\n <input\n ref={ref}\n type=\"checkbox\"\n role=\"switch\"\n aria-invalid={invalid || undefined}\n {...rest}\n />\n <span className=\"switch__track\" aria-hidden=\"true\" />\n {children != null && <span>{children}</span>}\n </label>\n );\n});\n\nexport interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n required?: boolean;\n}\n\nexport const Label = React.forwardRef<HTMLLabelElement, LabelProps>(function Label(\n { required, className, children, ...rest },\n ref\n) {\n return (\n <label ref={ref} className={cx('label', className)} {...rest}>\n {children}\n {required && <span aria-label=\"requerido\" style={{ color: 'var(--color-danger)' }}> *</span>}\n </label>\n );\n});\n\nexport interface FormFieldProps {\n label?: React.ReactNode;\n hint?: React.ReactNode;\n error?: React.ReactNode;\n required?: boolean;\n /** Override the auto-generated id (e.g. when the input is rendered outside FormField). */\n htmlFor?: string;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function FormField({ label, hint, error, required, htmlFor, children, className }: FormFieldProps) {\n const reactId = React.useId();\n const id = htmlFor ?? reactId;\n const hintId = hint ? `${id}-hint` : undefined;\n const errorId = error ? `${id}-error` : undefined;\n const describedBy = [hintId, errorId].filter(Boolean).join(' ') || undefined;\n\n // Inject id + aria-describedby into the single child element so screen readers\n // announce the helper/error text. Consumer-provided values win.\n const child = React.isValidElement(children)\n ? React.cloneElement(\n children as React.ReactElement<{ id?: string; 'aria-describedby'?: string }>,\n {\n id: (children.props as { id?: string }).id ?? id,\n 'aria-describedby':\n (children.props as { 'aria-describedby'?: string })['aria-describedby'] ?? describedBy,\n }\n )\n : children;\n\n return (\n <div className={cx('form-field', className)}>\n {label && (\n <Label htmlFor={id} required={required}>\n {label}\n </Label>\n )}\n {child}\n {hint && !error && <div id={hintId} className=\"form-field__hint\">{hint}</div>}\n {error && <div id={errorId} className=\"form-field__error\" role=\"alert\">{error}</div>}\n </div>\n );\n}\n\n// ---------- InputGroup --------------------------------------------------\n// Permite combinar un Input con addons a la izquierda/derecha.\n// Uso: <InputGroup><InputGroupAddon>$</InputGroupAddon><Input /></InputGroup>\nexport const InputGroup = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function InputGroup({ className, ...rest }, ref) {\n return <div ref={ref} className={cx('input-group', className)} {...rest} />;\n }\n);\n\nexport const InputGroupAddon = React.forwardRef<HTMLSpanElement, React.HTMLAttributes<HTMLSpanElement>>(\n function InputGroupAddon({ className, ...rest }, ref) {\n return <span ref={ref} className={cx('input-group__addon', className)} {...rest} />;\n }\n);\n"]}
@@ -4,7 +4,7 @@
4
4
  var chunkWAGWB35Q_js = require('./chunk-WAGWB35Q.js');
5
5
  var chunkXMLBKK7X_js = require('./chunk-XMLBKK7X.js');
6
6
  var chunkCRKYET66_js = require('./chunk-CRKYET66.js');
7
- var chunk3HA3VO2I_js = require('./chunk-3HA3VO2I.js');
7
+ var chunkC4AKMVDZ_js = require('./chunk-C4AKMVDZ.js');
8
8
  var chunkPASF6T4H_js = require('./chunk-PASF6T4H.js');
9
9
  var React = require('react');
10
10
  var jsxRuntime = require('react/jsx-runtime');
@@ -95,7 +95,7 @@ function NavigationMenu({ items, className, ariaLabel = "Navegaci\xF3n principal
95
95
  const triggerCls = chunkPASF6T4H_js.cx("nav-menu__trigger", isOpen && "is-open");
96
96
  const content = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
97
97
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: item.label }),
98
- hasChildren && /* @__PURE__ */ jsxRuntime.jsx(chunk3HA3VO2I_js.ChevronDown, { size: 14, className: "nav-menu__chevron" })
98
+ hasChildren && /* @__PURE__ */ jsxRuntime.jsx(chunkC4AKMVDZ_js.ChevronDown, { size: 14, className: "nav-menu__chevron" })
99
99
  ] });
100
100
  return /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "nav-menu__item", children: [
101
101
  hasChildren ? /* @__PURE__ */ jsxRuntime.jsx(
@@ -195,5 +195,5 @@ function NavigationMenu({ items, className, ariaLabel = "Navegaci\xF3n principal
195
195
  }
196
196
 
197
197
  exports.NavigationMenu = NavigationMenu;
198
- //# sourceMappingURL=chunk-S4BZUUKZ.js.map
199
- //# sourceMappingURL=chunk-S4BZUUKZ.js.map
198
+ //# sourceMappingURL=chunk-TX4BUYX4.js.map
199
+ //# sourceMappingURL=chunk-TX4BUYX4.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/NavigationMenu.tsx"],"names":["React","usePopoverPosition","useDismiss","cx","jsxs","Fragment","jsx","ChevronDown","Portal"],"mappings":"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","file":"chunk-S4BZUUKZ.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { ChevronDown } from './Icons';\nimport { Portal } from './Portal';\nimport { usePopoverPosition } from '../hooks/usePopoverPosition';\nimport { useDismiss } from '../hooks/useDismiss';\n\nexport interface NavLink {\n id: string;\n label: React.ReactNode;\n href?: string;\n description?: React.ReactNode;\n icon?: React.ReactNode;\n onClick?: () => void;\n}\n\nexport interface NavMenuItem {\n id: string;\n label: React.ReactNode;\n href?: string;\n links?: NavLink[];\n featured?: NavLink;\n}\n\nexport interface NavigationMenuProps {\n items: NavMenuItem[];\n className?: string;\n ariaLabel?: string;\n linkAs?: (link: NavLink, content: React.ReactNode, className: string) => React.ReactNode;\n rootLinkAs?: (item: NavMenuItem, content: React.ReactNode, className: string) => React.ReactNode;\n}\n\nexport function NavigationMenu({ items, className, ariaLabel = 'Navegación principal', linkAs, rootLinkAs }: NavigationMenuProps) {\n const [openId, setOpenId] = React.useState<string | null>(null);\n // When the panel was opened by keyboard we move focus into it; pointer\n // (click/hover) opens leave focus with the user's cursor.\n const focusOnOpen = React.useRef(false);\n const rootRef = React.useRef<HTMLElement>(null);\n const panelRef = React.useRef<HTMLDivElement>(null);\n // The currently-open trigger; usePopoverPosition anchors to this and\n // focus returns here on close. One panel is open at a time, so a single\n // anchor ref is correct (see todo.md risk note).\n const anchorRef = React.useRef<HTMLElement | null>(null);\n const triggerRefs = React.useRef<Record<string, HTMLButtonElement | null>>({});\n\n const open = openId !== null;\n\n const pos = usePopoverPosition(anchorRef, panelRef, {\n open,\n side: 'bottom',\n align: 'start',\n offset: 8,\n });\n\n // Outside-click closes; Escape is handled on the panel so it can also\n // return focus to the trigger (WAI-ARIA disclosure/menu pattern).\n useDismiss({\n open,\n onDismiss: () => setOpenId(null),\n refs: [rootRef, panelRef],\n closeOnEscape: false,\n });\n\n const closeAndFocusTrigger = () => {\n const id = openId;\n setOpenId(null);\n if (id) triggerRefs.current[id]?.focus();\n };\n\n // `.nav-menu__link` is applied to every link node (default <a> and the\n // `linkAs` render-prop alike), so querying by class manages focus\n // uniformly regardless of how the consumer renders links.\n const panelLinks = (): HTMLElement[] =>\n Array.from(panelRef.current?.querySelectorAll<HTMLElement>('.nav-menu__link') ?? []);\n\n const focusLinkAt = (index: number) => {\n const links = panelLinks();\n if (links.length === 0) return;\n const wrapped = ((index % links.length) + links.length) % links.length;\n links[wrapped]?.focus();\n };\n\n React.useEffect(() => {\n if (open && focusOnOpen.current) {\n focusOnOpen.current = false;\n focusLinkAt(0);\n }\n }, [open]);\n\n const onPanelKeyDown = (e: React.KeyboardEvent) => {\n const links = panelLinks();\n const current = links.indexOf(document.activeElement as HTMLElement);\n if (e.key === 'Escape') {\n e.preventDefault();\n closeAndFocusTrigger();\n } else if (e.key === 'Tab') {\n setOpenId(null);\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n focusLinkAt(current + 1);\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n focusLinkAt(current - 1);\n } else if (e.key === 'Home') {\n e.preventDefault();\n focusLinkAt(0);\n } else if (e.key === 'End') {\n e.preventDefault();\n focusLinkAt(links.length - 1);\n }\n };\n\n return (\n <nav ref={rootRef} aria-label={ariaLabel} className={cx('nav-menu', className)}>\n <ul className=\"nav-menu__list\">\n {items.map((item) => {\n const hasChildren = !!item.links?.length;\n const isOpen = openId === item.id;\n const triggerCls = cx('nav-menu__trigger', isOpen && 'is-open');\n const content = (\n <>\n <span>{item.label}</span>\n {hasChildren && <ChevronDown size={14} className=\"nav-menu__chevron\" />}\n </>\n );\n\n return (\n <li key={item.id} className=\"nav-menu__item\">\n {hasChildren ? (\n <button\n type=\"button\"\n ref={(el) => { triggerRefs.current[item.id] = el; }}\n className={triggerCls}\n aria-expanded={isOpen}\n aria-haspopup=\"menu\"\n onClick={(e) => {\n if (isOpen) { setOpenId(null); return; }\n anchorRef.current = e.currentTarget;\n focusOnOpen.current = false;\n setOpenId(item.id);\n }}\n onMouseEnter={(e) => {\n if (!openId) return;\n anchorRef.current = e.currentTarget;\n focusOnOpen.current = false;\n setOpenId(item.id);\n }}\n onKeyDown={(e) => {\n if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n if (isOpen) { focusLinkAt(0); return; }\n anchorRef.current = e.currentTarget;\n focusOnOpen.current = true;\n setOpenId(item.id);\n } else if (e.key === 'Escape' && isOpen) {\n e.preventDefault();\n setOpenId(null);\n }\n }}\n >\n {content}\n </button>\n ) : rootLinkAs && item.href ? (\n rootLinkAs(item, content, triggerCls)\n ) : (\n <a className={triggerCls} href={item.href}>\n {content}\n </a>\n )}\n {hasChildren && isOpen && (\n <Portal>\n <div\n ref={panelRef}\n className=\"nav-menu__panel\"\n role=\"menu\"\n aria-label={typeof item.label === 'string' ? item.label : undefined}\n onKeyDown={onPanelKeyDown}\n style={{\n position: 'fixed',\n top: pos.top,\n left: pos.left,\n visibility: pos.ready ? 'visible' : 'hidden',\n }}\n >\n {item.featured && (\n <div className=\"nav-menu__featured\">\n <strong>{item.featured.label}</strong>\n {item.featured.description && <p>{item.featured.description}</p>}\n </div>\n )}\n <ul className=\"nav-menu__sublist\">\n {item.links!.map((link) => {\n const linkCls = 'nav-menu__link';\n const linkContent = (\n <>\n {link.icon && <span className=\"nav-menu__link-icon\">{link.icon}</span>}\n <span className=\"nav-menu__link-body\">\n <span className=\"nav-menu__link-label\">{link.label}</span>\n {link.description && <span className=\"nav-menu__link-desc\">{link.description}</span>}\n </span>\n </>\n );\n return (\n <li key={link.id} role=\"none\">\n {linkAs ? (\n linkAs(link, linkContent, linkCls)\n ) : (\n <a\n role=\"menuitem\"\n tabIndex={-1}\n className={linkCls}\n href={link.href}\n onClick={(e) => {\n if (link.onClick) {\n e.preventDefault();\n link.onClick();\n }\n closeAndFocusTrigger();\n }}\n >\n {linkContent}\n </a>\n )}\n </li>\n );\n })}\n </ul>\n </div>\n </Portal>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/NavigationMenu.tsx"],"names":["React","usePopoverPosition","useDismiss","cx","jsxs","Fragment","jsx","ChevronDown","Portal"],"mappings":"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","file":"chunk-TX4BUYX4.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { ChevronDown } from './Icons';\nimport { Portal } from './Portal';\nimport { usePopoverPosition } from '../hooks/usePopoverPosition';\nimport { useDismiss } from '../hooks/useDismiss';\n\nexport interface NavLink {\n id: string;\n label: React.ReactNode;\n href?: string;\n description?: React.ReactNode;\n icon?: React.ReactNode;\n onClick?: () => void;\n}\n\nexport interface NavMenuItem {\n id: string;\n label: React.ReactNode;\n href?: string;\n links?: NavLink[];\n featured?: NavLink;\n}\n\nexport interface NavigationMenuProps {\n items: NavMenuItem[];\n className?: string;\n ariaLabel?: string;\n linkAs?: (link: NavLink, content: React.ReactNode, className: string) => React.ReactNode;\n rootLinkAs?: (item: NavMenuItem, content: React.ReactNode, className: string) => React.ReactNode;\n}\n\nexport function NavigationMenu({ items, className, ariaLabel = 'Navegación principal', linkAs, rootLinkAs }: NavigationMenuProps) {\n const [openId, setOpenId] = React.useState<string | null>(null);\n // When the panel was opened by keyboard we move focus into it; pointer\n // (click/hover) opens leave focus with the user's cursor.\n const focusOnOpen = React.useRef(false);\n const rootRef = React.useRef<HTMLElement>(null);\n const panelRef = React.useRef<HTMLDivElement>(null);\n // The currently-open trigger; usePopoverPosition anchors to this and\n // focus returns here on close. One panel is open at a time, so a single\n // anchor ref is correct (see todo.md risk note).\n const anchorRef = React.useRef<HTMLElement | null>(null);\n const triggerRefs = React.useRef<Record<string, HTMLButtonElement | null>>({});\n\n const open = openId !== null;\n\n const pos = usePopoverPosition(anchorRef, panelRef, {\n open,\n side: 'bottom',\n align: 'start',\n offset: 8,\n });\n\n // Outside-click closes; Escape is handled on the panel so it can also\n // return focus to the trigger (WAI-ARIA disclosure/menu pattern).\n useDismiss({\n open,\n onDismiss: () => setOpenId(null),\n refs: [rootRef, panelRef],\n closeOnEscape: false,\n });\n\n const closeAndFocusTrigger = () => {\n const id = openId;\n setOpenId(null);\n if (id) triggerRefs.current[id]?.focus();\n };\n\n // `.nav-menu__link` is applied to every link node (default <a> and the\n // `linkAs` render-prop alike), so querying by class manages focus\n // uniformly regardless of how the consumer renders links.\n const panelLinks = (): HTMLElement[] =>\n Array.from(panelRef.current?.querySelectorAll<HTMLElement>('.nav-menu__link') ?? []);\n\n const focusLinkAt = (index: number) => {\n const links = panelLinks();\n if (links.length === 0) return;\n const wrapped = ((index % links.length) + links.length) % links.length;\n links[wrapped]?.focus();\n };\n\n React.useEffect(() => {\n if (open && focusOnOpen.current) {\n focusOnOpen.current = false;\n focusLinkAt(0);\n }\n }, [open]);\n\n const onPanelKeyDown = (e: React.KeyboardEvent) => {\n const links = panelLinks();\n const current = links.indexOf(document.activeElement as HTMLElement);\n if (e.key === 'Escape') {\n e.preventDefault();\n closeAndFocusTrigger();\n } else if (e.key === 'Tab') {\n setOpenId(null);\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n focusLinkAt(current + 1);\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n focusLinkAt(current - 1);\n } else if (e.key === 'Home') {\n e.preventDefault();\n focusLinkAt(0);\n } else if (e.key === 'End') {\n e.preventDefault();\n focusLinkAt(links.length - 1);\n }\n };\n\n return (\n <nav ref={rootRef} aria-label={ariaLabel} className={cx('nav-menu', className)}>\n <ul className=\"nav-menu__list\">\n {items.map((item) => {\n const hasChildren = !!item.links?.length;\n const isOpen = openId === item.id;\n const triggerCls = cx('nav-menu__trigger', isOpen && 'is-open');\n const content = (\n <>\n <span>{item.label}</span>\n {hasChildren && <ChevronDown size={14} className=\"nav-menu__chevron\" />}\n </>\n );\n\n return (\n <li key={item.id} className=\"nav-menu__item\">\n {hasChildren ? (\n <button\n type=\"button\"\n ref={(el) => { triggerRefs.current[item.id] = el; }}\n className={triggerCls}\n aria-expanded={isOpen}\n aria-haspopup=\"menu\"\n onClick={(e) => {\n if (isOpen) { setOpenId(null); return; }\n anchorRef.current = e.currentTarget;\n focusOnOpen.current = false;\n setOpenId(item.id);\n }}\n onMouseEnter={(e) => {\n if (!openId) return;\n anchorRef.current = e.currentTarget;\n focusOnOpen.current = false;\n setOpenId(item.id);\n }}\n onKeyDown={(e) => {\n if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n if (isOpen) { focusLinkAt(0); return; }\n anchorRef.current = e.currentTarget;\n focusOnOpen.current = true;\n setOpenId(item.id);\n } else if (e.key === 'Escape' && isOpen) {\n e.preventDefault();\n setOpenId(null);\n }\n }}\n >\n {content}\n </button>\n ) : rootLinkAs && item.href ? (\n rootLinkAs(item, content, triggerCls)\n ) : (\n <a className={triggerCls} href={item.href}>\n {content}\n </a>\n )}\n {hasChildren && isOpen && (\n <Portal>\n <div\n ref={panelRef}\n className=\"nav-menu__panel\"\n role=\"menu\"\n aria-label={typeof item.label === 'string' ? item.label : undefined}\n onKeyDown={onPanelKeyDown}\n style={{\n position: 'fixed',\n top: pos.top,\n left: pos.left,\n visibility: pos.ready ? 'visible' : 'hidden',\n }}\n >\n {item.featured && (\n <div className=\"nav-menu__featured\">\n <strong>{item.featured.label}</strong>\n {item.featured.description && <p>{item.featured.description}</p>}\n </div>\n )}\n <ul className=\"nav-menu__sublist\">\n {item.links!.map((link) => {\n const linkCls = 'nav-menu__link';\n const linkContent = (\n <>\n {link.icon && <span className=\"nav-menu__link-icon\">{link.icon}</span>}\n <span className=\"nav-menu__link-body\">\n <span className=\"nav-menu__link-label\">{link.label}</span>\n {link.description && <span className=\"nav-menu__link-desc\">{link.description}</span>}\n </span>\n </>\n );\n return (\n <li key={link.id} role=\"none\">\n {linkAs ? (\n linkAs(link, linkContent, linkCls)\n ) : (\n <a\n role=\"menuitem\"\n tabIndex={-1}\n className={linkCls}\n href={link.href}\n onClick={(e) => {\n if (link.onClick) {\n e.preventDefault();\n link.onClick();\n }\n closeAndFocusTrigger();\n }}\n >\n {linkContent}\n </a>\n )}\n </li>\n );\n })}\n </ul>\n </div>\n </Portal>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n"]}
@@ -1,8 +1,8 @@
1
1
  'use client';
2
- import { Avatar } from './chunk-E2W2OSGG.mjs';
2
+ import { Avatar } from './chunk-DH3IXJRJ.mjs';
3
3
  import { startOfMonth, addMonths, isSameDay } from './chunk-4QHE5H36.mjs';
4
4
  import { useLocale } from './chunk-PBWX4LU2.mjs';
5
- import { ChevronDown, ChevronRight } from './chunk-VHYTJD6Z.mjs';
5
+ import { ChevronDown, ChevronRight } from './chunk-BJGMROKL.mjs';
6
6
  import { cx } from './chunk-IEPCH3JB.mjs';
7
7
  import * as React from 'react';
8
8
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -328,5 +328,5 @@ function Calendar({ month: monthProp, events = [], onMonthChange, onDayClick, cl
328
328
  }
329
329
 
330
330
  export { Calendar, StatusIndicator, Timeline, TimelineItem, Tree, UserCell };
331
- //# sourceMappingURL=chunk-TYL5CFWF.mjs.map
332
- //# sourceMappingURL=chunk-TYL5CFWF.mjs.map
331
+ //# sourceMappingURL=chunk-URGXXUY3.mjs.map
332
+ //# sourceMappingURL=chunk-URGXXUY3.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Display3.tsx"],"names":["Timeline"],"mappings":"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","file":"chunk-TYL5CFWF.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { Avatar } from './Display2';\nimport { ChevronRight, ChevronDown } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { startOfMonth, addMonths, isSameDay } from '../utils/dateFormat';\n\n// ---------- UserCell ----------------------------------------------------\nexport interface UserCellProps extends React.HTMLAttributes<HTMLDivElement> {\n name: React.ReactNode;\n meta?: React.ReactNode; // role / email / etc.\n avatarSrc?: string;\n avatarAlt?: string;\n size?: 24 | 32 | 40 | 48;\n}\n\nexport function UserCell({ name, meta, avatarSrc, avatarAlt, size = 32, className, ...rest }: UserCellProps) {\n const initialsName = typeof name === 'string' ? name : undefined;\n return (\n <div className={cx('user-cell', className)} {...rest}>\n <Avatar src={avatarSrc} alt={avatarAlt} name={initialsName} size={size} />\n <div className=\"user-cell__body\">\n <div className=\"user-cell__name\">{name}</div>\n {meta && <div className=\"user-cell__meta\">{meta}</div>}\n </div>\n </div>\n );\n}\n\n// ---------- StatusIndicator (pulsing dot) ------------------------------\nexport type StatusTone = 'success' | 'warning' | 'danger' | 'info' | 'neutral';\n\nexport interface StatusIndicatorProps extends React.HTMLAttributes<HTMLSpanElement> {\n tone?: StatusTone;\n pulse?: boolean;\n label?: React.ReactNode;\n}\n\nexport function StatusIndicator({ tone = 'success', pulse, label, className, ...rest }: StatusIndicatorProps) {\n return (\n <span className={cx('status-indicator', className)} role=\"status\" {...rest}>\n <span className={cx('status-indicator__dot', `status-indicator__dot--${tone}`, pulse && 'is-pulsing')} aria-hidden=\"true\" />\n {label && <span className=\"status-indicator__label\">{label}</span>}\n </span>\n );\n}\n\n// ---------- Timeline ----------------------------------------------------\nexport type TimelineDensity = 'default' | 'compact';\n\nexport interface TimelineProps extends React.HTMLAttributes<HTMLOListElement> {\n /**\n * Visual density (v1.28.0). `compact` shrinks the marker, gap and font\n * sizes for use in cards / list summaries; semantically identical.\n */\n density?: TimelineDensity;\n}\n\nexport const Timeline = React.forwardRef<HTMLOListElement, TimelineProps>(\n function Timeline({ className, density = 'default', ...rest }, ref) {\n return <ol ref={ref} className={cx('timeline', density === 'compact' && 'timeline--compact', className)} {...rest} />;\n }\n);\n\n/**\n * Progress state of a Timeline entry (v1.28.0), orthogonal to `tone`.\n * - `done` — completed: filled marker (in `tone` color), solid connector above.\n * - `current` — happening now: ringed/pulsing marker, solid connector above.\n * - `pending` — not started: hollow muted marker, **dashed** connector above.\n *\n * Use it to scan progress on a list of events that grow over time (a despachos\n * order accumulating envíos/retiros until the last marks it complete). Default\n * (state omitted) keeps the 1.x look exactly.\n */\nexport type TimelineState = 'done' | 'current' | 'pending';\n\n/**\n * Visual emphasis for the entry's marker (v1.30.0), orthogonal to `state` and\n * `tone`. Default markers are 24×24 hollow with a tone-colored border, ideal\n * for the operational events that fill a timeline. `milestone` upgrades the\n * marker to 32×32 filled in the `tone` color with a subtle halo — for the\n * \"anchor\" events that the rest of the timeline hangs from (e.g. \"Orden\n * creada\" at the top of an order detail). Without this the hollow markers of\n * the operational events out-shout the anchor, inverting the hierarchy.\n *\n * `milestone` keeps the `state` semantics: a `pending` milestone stays hollow\n * (muted, no halo), preserving \"not yet\" while still occupying the larger\n * anchor slot. A `current` milestone gets the pulse halo (overrides the\n * static one).\n */\nexport type TimelineVariant = 'default' | 'milestone';\n\nexport interface TimelineItemProps extends Omit<React.LiHTMLAttributes<HTMLLIElement>, 'title'> {\n icon?: React.ReactNode;\n tone?: StatusTone;\n title: React.ReactNode;\n meta?: React.ReactNode;\n /** Progress state (see {@link TimelineState}). Optional. */\n state?: TimelineState;\n /**\n * Trailing slot on the title row, aligned to the right (v1.28.0). Useful for\n * a Badge marking event type (envío / retiro / nota), a timestamp on the\n * right edge, or a small action chip.\n */\n right?: React.ReactNode;\n /** Visual emphasis (see {@link TimelineVariant}). Optional, default unchanged. */\n variant?: TimelineVariant;\n}\n\nexport function TimelineItem({ icon, tone = 'neutral', title, meta, children, state, right, variant, className, ...rest }: TimelineItemProps) {\n return (\n <li\n className={cx(\n 'timeline__item',\n state && `timeline__item--${state}`,\n variant === 'milestone' && 'timeline__item--milestone',\n className,\n )}\n data-state={state}\n {...rest}\n >\n <span\n className={cx(\n 'timeline__marker',\n `timeline__marker--${tone}`,\n variant === 'milestone' && 'timeline__marker--milestone',\n )}\n aria-hidden=\"true\"\n >\n {icon}\n </span>\n <div className=\"timeline__body\">\n {right != null ? (\n // Title row wrapper only renders when there's a trailing slot, so\n // the DOM stays byte-identical for existing consumers (back-compat).\n <div className=\"timeline__title-row\">\n <div className=\"timeline__title\">{title}</div>\n <div className=\"timeline__right\">{right}</div>\n </div>\n ) : (\n <div className=\"timeline__title\">{title}</div>\n )}\n {meta && <div className=\"timeline__meta\">{meta}</div>}\n {children && <div className=\"timeline__content\">{children}</div>}\n </div>\n </li>\n );\n}\n\n// ---------- Tree --------------------------------------------------------\nexport interface TreeNodeData {\n id: string;\n label: React.ReactNode;\n icon?: React.ReactNode;\n children?: TreeNodeData[];\n meta?: React.ReactNode;\n}\n\nexport interface TreeProps extends Omit<React.HTMLAttributes<HTMLUListElement>, 'onSelect'> {\n nodes: TreeNodeData[];\n defaultExpanded?: string[];\n selectedId?: string;\n onSelect?: (id: string) => void;\n}\n\nfunction firstNodeId(nodes: TreeNodeData[]): string | undefined {\n return nodes[0]?.id;\n}\n\nexport function Tree({\n nodes,\n defaultExpanded = [],\n selectedId,\n onSelect,\n className,\n onKeyDown,\n ...rest\n}: TreeProps) {\n const [expanded, setExpanded] = React.useState<Set<string>>(new Set(defaultExpanded));\n const [activeId, setActiveId] = React.useState<string | undefined>(undefined);\n const rootRef = React.useRef<HTMLUListElement>(null);\n\n // Roving tabindex: one treeitem is tabbable at a time. Falls back to the\n // selected node, then the first node, so the tree is reachable on first Tab.\n const effectiveActive = activeId ?? selectedId ?? firstNodeId(nodes);\n\n const toggle = React.useCallback((id: string) => {\n setExpanded((curr) => {\n const next = new Set(curr);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n }, []);\n\n const visibleItems = (): HTMLElement[] =>\n Array.from(rootRef.current?.querySelectorAll<HTMLElement>('[role=\"treeitem\"]') ?? []);\n\n const focusItem = (el: HTMLElement | undefined): void => {\n if (!el) return;\n setActiveId(el.dataset.treeId);\n el.focus();\n };\n\n // WAI-ARIA TreeView keyboard model. Focus lives on the treeitem element;\n // querySelectorAll returns items in DOM order, which equals visual order\n // (collapsed branches are not rendered, so they are not navigable).\n const handleKeyDown = (e: React.KeyboardEvent<HTMLUListElement>): void => {\n onKeyDown?.(e);\n const targetEl = (e.target as HTMLElement).closest<HTMLElement>('[role=\"treeitem\"]');\n if (!targetEl || !rootRef.current?.contains(targetEl)) return;\n const list = visibleItems();\n const idx = list.indexOf(targetEl);\n if (idx === -1) return;\n const id = targetEl.dataset.treeId;\n if (!id) return;\n const depth = Number(targetEl.dataset.depth ?? 0);\n const expandedAttr = targetEl.getAttribute('aria-expanded');\n const hasChildren = expandedAttr !== null;\n const isOpen = expandedAttr === 'true';\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n focusItem(list[Math.min(idx + 1, list.length - 1)]);\n break;\n case 'ArrowUp':\n e.preventDefault();\n focusItem(list[Math.max(idx - 1, 0)]);\n break;\n case 'Home':\n e.preventDefault();\n focusItem(list[0]);\n break;\n case 'End':\n e.preventDefault();\n focusItem(list[list.length - 1]);\n break;\n case 'ArrowRight':\n e.preventDefault();\n if (hasChildren && !isOpen) toggle(id);\n else if (hasChildren && isOpen) focusItem(list[idx + 1]);\n break;\n case 'ArrowLeft':\n e.preventDefault();\n if (hasChildren && isOpen) {\n toggle(id);\n } else {\n for (let i = idx - 1; i >= 0; i--) {\n const candidate = list[i];\n if (candidate && Number(candidate.dataset.depth ?? 0) < depth) {\n focusItem(candidate);\n break;\n }\n }\n }\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n onSelect?.(id);\n break;\n default:\n break;\n }\n };\n\n return (\n <ul\n ref={rootRef}\n role=\"tree\"\n className={cx('tree', className)}\n onKeyDown={handleKeyDown}\n {...rest}\n >\n {nodes.map((n) => (\n <TreeNode\n key={n.id}\n node={n}\n depth={0}\n expanded={expanded}\n toggle={toggle}\n selectedId={selectedId}\n activeId={effectiveActive}\n onSelect={onSelect}\n onFocusItem={setActiveId}\n />\n ))}\n </ul>\n );\n}\n\ninterface TreeNodeProps {\n node: TreeNodeData;\n depth: number;\n expanded: Set<string>;\n toggle: (id: string) => void;\n selectedId?: string;\n activeId?: string;\n onSelect?: (id: string) => void;\n onFocusItem: (id: string) => void;\n}\n\nfunction TreeNode({\n node,\n depth,\n expanded,\n toggle,\n selectedId,\n activeId,\n onSelect,\n onFocusItem,\n}: TreeNodeProps) {\n const hasChildren = !!(node.children && node.children.length);\n const isOpen = expanded.has(node.id);\n const isSelected = selectedId === node.id;\n const isActive = activeId === node.id;\n return (\n <li role=\"none\" className=\"tree__node\">\n <div\n role=\"treeitem\"\n data-tree-id={node.id}\n data-depth={depth}\n aria-expanded={hasChildren ? isOpen : undefined}\n aria-selected={isSelected}\n tabIndex={isActive ? 0 : -1}\n className={cx('tree__row', isSelected && 'is-selected')}\n style={{ paddingLeft: `calc(var(--space-2) + var(--space-4) * ${depth})` }}\n onClick={() => {\n onFocusItem(node.id);\n onSelect?.(node.id);\n }}\n >\n {hasChildren ? (\n <button\n type=\"button\"\n tabIndex={-1}\n aria-hidden=\"true\"\n className=\"tree__chev\"\n onClick={(e) => { e.stopPropagation(); toggle(node.id); }}\n >\n {isOpen ? <ChevronDown size={14} /> : <ChevronRight size={14} />}\n </button>\n ) : (\n <span className=\"tree__chev tree__chev--placeholder\" aria-hidden=\"true\" />\n )}\n {node.icon && <span className=\"tree__icon\" aria-hidden=\"true\">{node.icon}</span>}\n <span className=\"tree__label\">{node.label}</span>\n {node.meta && <span className=\"tree__meta\">{node.meta}</span>}\n </div>\n {hasChildren && isOpen && (\n <ul role=\"group\" className=\"tree__children\">\n {node.children!.map((c) => (\n <TreeNode\n key={c.id}\n node={c}\n depth={depth + 1}\n expanded={expanded}\n toggle={toggle}\n selectedId={selectedId}\n activeId={activeId}\n onSelect={onSelect}\n onFocusItem={onFocusItem}\n />\n ))}\n </ul>\n )}\n </li>\n );\n}\n\n// ---------- Calendar (vista mes completa, no picker) -------------------\nexport interface CalendarEvent {\n date: Date;\n label: React.ReactNode;\n tone?: StatusTone;\n onClick?: () => void;\n}\n\nexport interface CalendarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Mes a mostrar. Default: mes actual. */\n month?: Date;\n events?: CalendarEvent[];\n onMonthChange?: (m: Date) => void;\n onDayClick?: (d: Date) => void;\n}\n\nexport function Calendar({ month: monthProp, events = [], onMonthChange, onDayClick, className, ...rest }: CalendarProps) {\n const [internalMonth, setInternalMonth] = React.useState(() => startOfMonth(monthProp ?? new Date()));\n const month = monthProp ? startOfMonth(monthProp) : internalMonth;\n const t = useLocale();\n const weekdays = t['calendar.weekdays'];\n const months = t['calendar.months'];\n const setMonth = (m: Date) => {\n if (!monthProp) setInternalMonth(m);\n onMonthChange?.(m);\n };\n\n const today = new Date();\n\n // primer día visible: lunes anterior al primer día del mes\n const firstDay = startOfMonth(month);\n const firstWeekday = (firstDay.getDay() + 6) % 7; // domingo=0 → 6, lunes=1 → 0\n const gridStart = new Date(firstDay);\n gridStart.setDate(firstDay.getDate() - firstWeekday);\n\n const days: Date[] = Array.from({ length: 42 }, (_, i) => {\n const d = new Date(gridStart);\n d.setDate(gridStart.getDate() + i);\n return d;\n });\n\n const eventsByDay = React.useMemo(() => {\n const m = new Map<string, CalendarEvent[]>();\n for (const ev of events) {\n const key = `${ev.date.getFullYear()}-${ev.date.getMonth()}-${ev.date.getDate()}`;\n const list = m.get(key) ?? [];\n list.push(ev);\n m.set(key, list);\n }\n return m;\n }, [events]);\n\n return (\n <div className={cx('calendar', className)} {...rest}>\n <div className=\"calendar__head\">\n <button type=\"button\" className=\"calendar__nav\" aria-label={t['calendar.prevMonth']} onClick={() => setMonth(addMonths(month, -1))}>\n <ChevronRight size={16} style={{ transform: 'rotate(180deg)' }} />\n </button>\n <div className=\"calendar__title\">{months[month.getMonth()]} {month.getFullYear()}</div>\n <button type=\"button\" className=\"calendar__nav\" aria-label={t['calendar.nextMonth']} onClick={() => setMonth(addMonths(month, 1))}>\n <ChevronRight size={16} />\n </button>\n </div>\n <div className=\"calendar__grid calendar__weekdays\">\n {weekdays.map((w) => <div key={w} className=\"calendar__weekday\">{w}</div>)}\n </div>\n <div className=\"calendar__grid\">\n {days.map((d, i) => {\n const inMonth = d.getMonth() === month.getMonth();\n const isToday = isSameDay(d, today);\n const key = `${d.getFullYear()}-${d.getMonth()}-${d.getDate()}`;\n const dayEvents = eventsByDay.get(key) ?? [];\n return (\n <button\n key={i}\n type=\"button\"\n className={cx('calendar__day', !inMonth && 'is-out', isToday && 'is-today')}\n onClick={() => onDayClick?.(d)}\n >\n <span className=\"calendar__daynum\">{d.getDate()}</span>\n {dayEvents.length > 0 && (\n <div className=\"calendar__events\">\n {dayEvents.slice(0, 2).map((ev, idx) => (\n <span\n key={idx}\n className={cx('calendar__event', `calendar__event--${ev.tone ?? 'neutral'}`)}\n onClick={(e) => { e.stopPropagation(); ev.onClick?.(); }}\n >\n {ev.label}\n </span>\n ))}\n {dayEvents.length > 2 && <span className=\"calendar__more\">+{dayEvents.length - 2}</span>}\n </div>\n )}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/Display3.tsx"],"names":["Timeline"],"mappings":"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","file":"chunk-URGXXUY3.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { Avatar } from './Display2';\nimport { ChevronRight, ChevronDown } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { startOfMonth, addMonths, isSameDay } from '../utils/dateFormat';\n\n// ---------- UserCell ----------------------------------------------------\nexport interface UserCellProps extends React.HTMLAttributes<HTMLDivElement> {\n name: React.ReactNode;\n meta?: React.ReactNode; // role / email / etc.\n avatarSrc?: string;\n avatarAlt?: string;\n size?: 24 | 32 | 40 | 48;\n}\n\nexport function UserCell({ name, meta, avatarSrc, avatarAlt, size = 32, className, ...rest }: UserCellProps) {\n const initialsName = typeof name === 'string' ? name : undefined;\n return (\n <div className={cx('user-cell', className)} {...rest}>\n <Avatar src={avatarSrc} alt={avatarAlt} name={initialsName} size={size} />\n <div className=\"user-cell__body\">\n <div className=\"user-cell__name\">{name}</div>\n {meta && <div className=\"user-cell__meta\">{meta}</div>}\n </div>\n </div>\n );\n}\n\n// ---------- StatusIndicator (pulsing dot) ------------------------------\nexport type StatusTone = 'success' | 'warning' | 'danger' | 'info' | 'neutral';\n\nexport interface StatusIndicatorProps extends React.HTMLAttributes<HTMLSpanElement> {\n tone?: StatusTone;\n pulse?: boolean;\n label?: React.ReactNode;\n}\n\nexport function StatusIndicator({ tone = 'success', pulse, label, className, ...rest }: StatusIndicatorProps) {\n return (\n <span className={cx('status-indicator', className)} role=\"status\" {...rest}>\n <span className={cx('status-indicator__dot', `status-indicator__dot--${tone}`, pulse && 'is-pulsing')} aria-hidden=\"true\" />\n {label && <span className=\"status-indicator__label\">{label}</span>}\n </span>\n );\n}\n\n// ---------- Timeline ----------------------------------------------------\nexport type TimelineDensity = 'default' | 'compact';\n\nexport interface TimelineProps extends React.HTMLAttributes<HTMLOListElement> {\n /**\n * Visual density (v1.28.0). `compact` shrinks the marker, gap and font\n * sizes for use in cards / list summaries; semantically identical.\n */\n density?: TimelineDensity;\n}\n\nexport const Timeline = React.forwardRef<HTMLOListElement, TimelineProps>(\n function Timeline({ className, density = 'default', ...rest }, ref) {\n return <ol ref={ref} className={cx('timeline', density === 'compact' && 'timeline--compact', className)} {...rest} />;\n }\n);\n\n/**\n * Progress state of a Timeline entry (v1.28.0), orthogonal to `tone`.\n * - `done` — completed: filled marker (in `tone` color), solid connector above.\n * - `current` — happening now: ringed/pulsing marker, solid connector above.\n * - `pending` — not started: hollow muted marker, **dashed** connector above.\n *\n * Use it to scan progress on a list of events that grow over time (a despachos\n * order accumulating envíos/retiros until the last marks it complete). Default\n * (state omitted) keeps the 1.x look exactly.\n */\nexport type TimelineState = 'done' | 'current' | 'pending';\n\n/**\n * Visual emphasis for the entry's marker (v1.30.0), orthogonal to `state` and\n * `tone`. Default markers are 24×24 hollow with a tone-colored border, ideal\n * for the operational events that fill a timeline. `milestone` upgrades the\n * marker to 32×32 filled in the `tone` color with a subtle halo — for the\n * \"anchor\" events that the rest of the timeline hangs from (e.g. \"Orden\n * creada\" at the top of an order detail). Without this the hollow markers of\n * the operational events out-shout the anchor, inverting the hierarchy.\n *\n * `milestone` keeps the `state` semantics: a `pending` milestone stays hollow\n * (muted, no halo), preserving \"not yet\" while still occupying the larger\n * anchor slot. A `current` milestone gets the pulse halo (overrides the\n * static one).\n */\nexport type TimelineVariant = 'default' | 'milestone';\n\nexport interface TimelineItemProps extends Omit<React.LiHTMLAttributes<HTMLLIElement>, 'title'> {\n icon?: React.ReactNode;\n tone?: StatusTone;\n title: React.ReactNode;\n meta?: React.ReactNode;\n /** Progress state (see {@link TimelineState}). Optional. */\n state?: TimelineState;\n /**\n * Trailing slot on the title row, aligned to the right (v1.28.0). Useful for\n * a Badge marking event type (envío / retiro / nota), a timestamp on the\n * right edge, or a small action chip.\n */\n right?: React.ReactNode;\n /** Visual emphasis (see {@link TimelineVariant}). Optional, default unchanged. */\n variant?: TimelineVariant;\n}\n\nexport function TimelineItem({ icon, tone = 'neutral', title, meta, children, state, right, variant, className, ...rest }: TimelineItemProps) {\n return (\n <li\n className={cx(\n 'timeline__item',\n state && `timeline__item--${state}`,\n variant === 'milestone' && 'timeline__item--milestone',\n className,\n )}\n data-state={state}\n {...rest}\n >\n <span\n className={cx(\n 'timeline__marker',\n `timeline__marker--${tone}`,\n variant === 'milestone' && 'timeline__marker--milestone',\n )}\n aria-hidden=\"true\"\n >\n {icon}\n </span>\n <div className=\"timeline__body\">\n {right != null ? (\n // Title row wrapper only renders when there's a trailing slot, so\n // the DOM stays byte-identical for existing consumers (back-compat).\n <div className=\"timeline__title-row\">\n <div className=\"timeline__title\">{title}</div>\n <div className=\"timeline__right\">{right}</div>\n </div>\n ) : (\n <div className=\"timeline__title\">{title}</div>\n )}\n {meta && <div className=\"timeline__meta\">{meta}</div>}\n {children && <div className=\"timeline__content\">{children}</div>}\n </div>\n </li>\n );\n}\n\n// ---------- Tree --------------------------------------------------------\nexport interface TreeNodeData {\n id: string;\n label: React.ReactNode;\n icon?: React.ReactNode;\n children?: TreeNodeData[];\n meta?: React.ReactNode;\n}\n\nexport interface TreeProps extends Omit<React.HTMLAttributes<HTMLUListElement>, 'onSelect'> {\n nodes: TreeNodeData[];\n defaultExpanded?: string[];\n selectedId?: string;\n onSelect?: (id: string) => void;\n}\n\nfunction firstNodeId(nodes: TreeNodeData[]): string | undefined {\n return nodes[0]?.id;\n}\n\nexport function Tree({\n nodes,\n defaultExpanded = [],\n selectedId,\n onSelect,\n className,\n onKeyDown,\n ...rest\n}: TreeProps) {\n const [expanded, setExpanded] = React.useState<Set<string>>(new Set(defaultExpanded));\n const [activeId, setActiveId] = React.useState<string | undefined>(undefined);\n const rootRef = React.useRef<HTMLUListElement>(null);\n\n // Roving tabindex: one treeitem is tabbable at a time. Falls back to the\n // selected node, then the first node, so the tree is reachable on first Tab.\n const effectiveActive = activeId ?? selectedId ?? firstNodeId(nodes);\n\n const toggle = React.useCallback((id: string) => {\n setExpanded((curr) => {\n const next = new Set(curr);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n }, []);\n\n const visibleItems = (): HTMLElement[] =>\n Array.from(rootRef.current?.querySelectorAll<HTMLElement>('[role=\"treeitem\"]') ?? []);\n\n const focusItem = (el: HTMLElement | undefined): void => {\n if (!el) return;\n setActiveId(el.dataset.treeId);\n el.focus();\n };\n\n // WAI-ARIA TreeView keyboard model. Focus lives on the treeitem element;\n // querySelectorAll returns items in DOM order, which equals visual order\n // (collapsed branches are not rendered, so they are not navigable).\n const handleKeyDown = (e: React.KeyboardEvent<HTMLUListElement>): void => {\n onKeyDown?.(e);\n const targetEl = (e.target as HTMLElement).closest<HTMLElement>('[role=\"treeitem\"]');\n if (!targetEl || !rootRef.current?.contains(targetEl)) return;\n const list = visibleItems();\n const idx = list.indexOf(targetEl);\n if (idx === -1) return;\n const id = targetEl.dataset.treeId;\n if (!id) return;\n const depth = Number(targetEl.dataset.depth ?? 0);\n const expandedAttr = targetEl.getAttribute('aria-expanded');\n const hasChildren = expandedAttr !== null;\n const isOpen = expandedAttr === 'true';\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n focusItem(list[Math.min(idx + 1, list.length - 1)]);\n break;\n case 'ArrowUp':\n e.preventDefault();\n focusItem(list[Math.max(idx - 1, 0)]);\n break;\n case 'Home':\n e.preventDefault();\n focusItem(list[0]);\n break;\n case 'End':\n e.preventDefault();\n focusItem(list[list.length - 1]);\n break;\n case 'ArrowRight':\n e.preventDefault();\n if (hasChildren && !isOpen) toggle(id);\n else if (hasChildren && isOpen) focusItem(list[idx + 1]);\n break;\n case 'ArrowLeft':\n e.preventDefault();\n if (hasChildren && isOpen) {\n toggle(id);\n } else {\n for (let i = idx - 1; i >= 0; i--) {\n const candidate = list[i];\n if (candidate && Number(candidate.dataset.depth ?? 0) < depth) {\n focusItem(candidate);\n break;\n }\n }\n }\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n onSelect?.(id);\n break;\n default:\n break;\n }\n };\n\n return (\n <ul\n ref={rootRef}\n role=\"tree\"\n className={cx('tree', className)}\n onKeyDown={handleKeyDown}\n {...rest}\n >\n {nodes.map((n) => (\n <TreeNode\n key={n.id}\n node={n}\n depth={0}\n expanded={expanded}\n toggle={toggle}\n selectedId={selectedId}\n activeId={effectiveActive}\n onSelect={onSelect}\n onFocusItem={setActiveId}\n />\n ))}\n </ul>\n );\n}\n\ninterface TreeNodeProps {\n node: TreeNodeData;\n depth: number;\n expanded: Set<string>;\n toggle: (id: string) => void;\n selectedId?: string;\n activeId?: string;\n onSelect?: (id: string) => void;\n onFocusItem: (id: string) => void;\n}\n\nfunction TreeNode({\n node,\n depth,\n expanded,\n toggle,\n selectedId,\n activeId,\n onSelect,\n onFocusItem,\n}: TreeNodeProps) {\n const hasChildren = !!(node.children && node.children.length);\n const isOpen = expanded.has(node.id);\n const isSelected = selectedId === node.id;\n const isActive = activeId === node.id;\n return (\n <li role=\"none\" className=\"tree__node\">\n <div\n role=\"treeitem\"\n data-tree-id={node.id}\n data-depth={depth}\n aria-expanded={hasChildren ? isOpen : undefined}\n aria-selected={isSelected}\n tabIndex={isActive ? 0 : -1}\n className={cx('tree__row', isSelected && 'is-selected')}\n style={{ paddingLeft: `calc(var(--space-2) + var(--space-4) * ${depth})` }}\n onClick={() => {\n onFocusItem(node.id);\n onSelect?.(node.id);\n }}\n >\n {hasChildren ? (\n <button\n type=\"button\"\n tabIndex={-1}\n aria-hidden=\"true\"\n className=\"tree__chev\"\n onClick={(e) => { e.stopPropagation(); toggle(node.id); }}\n >\n {isOpen ? <ChevronDown size={14} /> : <ChevronRight size={14} />}\n </button>\n ) : (\n <span className=\"tree__chev tree__chev--placeholder\" aria-hidden=\"true\" />\n )}\n {node.icon && <span className=\"tree__icon\" aria-hidden=\"true\">{node.icon}</span>}\n <span className=\"tree__label\">{node.label}</span>\n {node.meta && <span className=\"tree__meta\">{node.meta}</span>}\n </div>\n {hasChildren && isOpen && (\n <ul role=\"group\" className=\"tree__children\">\n {node.children!.map((c) => (\n <TreeNode\n key={c.id}\n node={c}\n depth={depth + 1}\n expanded={expanded}\n toggle={toggle}\n selectedId={selectedId}\n activeId={activeId}\n onSelect={onSelect}\n onFocusItem={onFocusItem}\n />\n ))}\n </ul>\n )}\n </li>\n );\n}\n\n// ---------- Calendar (vista mes completa, no picker) -------------------\nexport interface CalendarEvent {\n date: Date;\n label: React.ReactNode;\n tone?: StatusTone;\n onClick?: () => void;\n}\n\nexport interface CalendarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Mes a mostrar. Default: mes actual. */\n month?: Date;\n events?: CalendarEvent[];\n onMonthChange?: (m: Date) => void;\n onDayClick?: (d: Date) => void;\n}\n\nexport function Calendar({ month: monthProp, events = [], onMonthChange, onDayClick, className, ...rest }: CalendarProps) {\n const [internalMonth, setInternalMonth] = React.useState(() => startOfMonth(monthProp ?? new Date()));\n const month = monthProp ? startOfMonth(monthProp) : internalMonth;\n const t = useLocale();\n const weekdays = t['calendar.weekdays'];\n const months = t['calendar.months'];\n const setMonth = (m: Date) => {\n if (!monthProp) setInternalMonth(m);\n onMonthChange?.(m);\n };\n\n const today = new Date();\n\n // primer día visible: lunes anterior al primer día del mes\n const firstDay = startOfMonth(month);\n const firstWeekday = (firstDay.getDay() + 6) % 7; // domingo=0 → 6, lunes=1 → 0\n const gridStart = new Date(firstDay);\n gridStart.setDate(firstDay.getDate() - firstWeekday);\n\n const days: Date[] = Array.from({ length: 42 }, (_, i) => {\n const d = new Date(gridStart);\n d.setDate(gridStart.getDate() + i);\n return d;\n });\n\n const eventsByDay = React.useMemo(() => {\n const m = new Map<string, CalendarEvent[]>();\n for (const ev of events) {\n const key = `${ev.date.getFullYear()}-${ev.date.getMonth()}-${ev.date.getDate()}`;\n const list = m.get(key) ?? [];\n list.push(ev);\n m.set(key, list);\n }\n return m;\n }, [events]);\n\n return (\n <div className={cx('calendar', className)} {...rest}>\n <div className=\"calendar__head\">\n <button type=\"button\" className=\"calendar__nav\" aria-label={t['calendar.prevMonth']} onClick={() => setMonth(addMonths(month, -1))}>\n <ChevronRight size={16} style={{ transform: 'rotate(180deg)' }} />\n </button>\n <div className=\"calendar__title\">{months[month.getMonth()]} {month.getFullYear()}</div>\n <button type=\"button\" className=\"calendar__nav\" aria-label={t['calendar.nextMonth']} onClick={() => setMonth(addMonths(month, 1))}>\n <ChevronRight size={16} />\n </button>\n </div>\n <div className=\"calendar__grid calendar__weekdays\">\n {weekdays.map((w) => <div key={w} className=\"calendar__weekday\">{w}</div>)}\n </div>\n <div className=\"calendar__grid\">\n {days.map((d, i) => {\n const inMonth = d.getMonth() === month.getMonth();\n const isToday = isSameDay(d, today);\n const key = `${d.getFullYear()}-${d.getMonth()}-${d.getDate()}`;\n const dayEvents = eventsByDay.get(key) ?? [];\n return (\n <button\n key={i}\n type=\"button\"\n className={cx('calendar__day', !inMonth && 'is-out', isToday && 'is-today')}\n onClick={() => onDayClick?.(d)}\n >\n <span className=\"calendar__daynum\">{d.getDate()}</span>\n {dayEvents.length > 0 && (\n <div className=\"calendar__events\">\n {dayEvents.slice(0, 2).map((ev, idx) => (\n <span\n key={idx}\n className={cx('calendar__event', `calendar__event--${ev.tone ?? 'neutral'}`)}\n onClick={(e) => { e.stopPropagation(); ev.onClick?.(); }}\n >\n {ev.label}\n </span>\n ))}\n {dayEvents.length > 2 && <span className=\"calendar__more\">+{dayEvents.length - 2}</span>}\n </div>\n )}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n"]}
@@ -4,7 +4,7 @@ import { useEscape } from './chunk-6W7ZGWNA.mjs';
4
4
  import { useFocusTrap } from './chunk-XOV4D6J3.mjs';
5
5
  import { useScrollLock } from './chunk-R5DCDEB5.mjs';
6
6
  import { useLocale } from './chunk-PBWX4LU2.mjs';
7
- import { X } from './chunk-VHYTJD6Z.mjs';
7
+ import { X } from './chunk-BJGMROKL.mjs';
8
8
  import { cx } from './chunk-IEPCH3JB.mjs';
9
9
  import * as React from 'react';
10
10
  import { createPortal } from 'react-dom';
@@ -123,5 +123,5 @@ function Drawer({
123
123
  }
124
124
 
125
125
  export { Drawer, Modal };
126
- //# sourceMappingURL=chunk-7LZ4SQRQ.mjs.map
127
- //# sourceMappingURL=chunk-7LZ4SQRQ.mjs.map
126
+ //# sourceMappingURL=chunk-VG5FQ6SU.mjs.map
127
+ //# sourceMappingURL=chunk-VG5FQ6SU.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Overlay.tsx"],"names":[],"mappings":"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","file":"chunk-7LZ4SQRQ.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { cx } from '../utils/cx';\nimport { X } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { useDelayedUnmount } from '../hooks/useDelayedUnmount';\nimport { useFocusTrap, useEscape, useScrollLock } from '../hooks';\n\n// Exit animation duration in ms. Must match `--duration-exit` and the\n// `is-closing` keyframes in src/styles/index.css (`.modal-backdrop`,\n// `.drawer-backdrop`).\nconst EXIT_MS = 150;\n\nexport interface OverlayProps {\n open: boolean;\n onClose: () => void;\n title?: React.ReactNode;\n children?: React.ReactNode;\n footer?: React.ReactNode;\n size?: 'sm' | 'md' | 'lg';\n closeOnBackdrop?: boolean;\n closeOnEsc?: boolean;\n className?: string;\n}\n\nexport function Modal({\n open, onClose, title, children, footer, size = 'md',\n closeOnBackdrop = true, closeOnEsc = true, className,\n}: OverlayProps) {\n const ref = React.useRef<HTMLDivElement>(null);\n // True only when the press both started AND ended on the backdrop itself.\n // Fixes: press inside (e.g. text-selecting in an input) released over the\n // backdrop must NOT dismiss.\n const downOnBackdrop = React.useRef(false);\n const titleId = React.useId();\n const t = useLocale();\n // useDelayedUnmount keeps the DOM mounted during exit animation. The\n // a11y/scroll-lock hooks still consume `open` (the user's intent), not\n // `mounted` — we don't want to trap focus or block scroll while\n // animating out.\n const { mounted, closing } = useDelayedUnmount(open, EXIT_MS);\n useEscape(open, onClose, closeOnEsc);\n useFocusTrap(ref, open);\n useScrollLock(open);\n if (!mounted || typeof document === 'undefined') return null;\n return createPortal(\n <div\n className={cx('modal-backdrop', closing && 'is-closing')}\n onMouseDown={(e) => { downOnBackdrop.current = e.target === e.currentTarget; }}\n onClick={(e) => {\n if (closeOnBackdrop && downOnBackdrop.current && e.target === e.currentTarget) onClose();\n downOnBackdrop.current = false;\n }}\n >\n <div\n ref={ref}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n className={cx('modal', `modal--${size}`, closing && 'is-closing', className)}\n >\n {title && (\n <div className=\"modal__header\">\n <div id={titleId} className=\"modal__title\">{title}</div>\n <button type=\"button\" className=\"modal__close\" onClick={onClose} aria-label={t['modal.close']}><X size={18} /></button>\n </div>\n )}\n <div className=\"modal__body\">{children}</div>\n {footer && <div className=\"modal__footer\">{footer}</div>}\n </div>\n </div>,\n document.body\n );\n}\n\nexport interface DrawerProps extends OverlayProps {\n side?: 'left' | 'right';\n}\n\nexport function Drawer({\n open, onClose, title, children, footer, side = 'right',\n closeOnBackdrop = true, closeOnEsc = true, className,\n}: DrawerProps) {\n const ref = React.useRef<HTMLDivElement>(null);\n // True only when the press both started AND ended on the backdrop itself.\n // Fixes: press inside (e.g. text-selecting in an input) released over the\n // backdrop must NOT dismiss.\n const downOnBackdrop = React.useRef(false);\n const titleId = React.useId();\n const t = useLocale();\n const { mounted, closing } = useDelayedUnmount(open, EXIT_MS);\n useEscape(open, onClose, closeOnEsc);\n useFocusTrap(ref, open);\n useScrollLock(open);\n if (!mounted || typeof document === 'undefined') return null;\n return createPortal(\n <div\n className={cx('drawer-backdrop', closing && 'is-closing')}\n onMouseDown={(e) => { downOnBackdrop.current = e.target === e.currentTarget; }}\n onClick={(e) => {\n if (closeOnBackdrop && downOnBackdrop.current && e.target === e.currentTarget) onClose();\n downOnBackdrop.current = false;\n }}\n >\n <div\n ref={ref}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n className={cx('drawer', `drawer--${side}`, closing && 'is-closing', className)}\n >\n {title && (\n <div className=\"drawer__header\">\n <div id={titleId} className=\"drawer__title\">{title}</div>\n <button type=\"button\" className=\"drawer__close\" onClick={onClose} aria-label={t['drawer.close']}><X size={18} /></button>\n </div>\n )}\n <div className=\"drawer__body\">{children}</div>\n {footer && <div className=\"drawer__footer\">{footer}</div>}\n </div>\n </div>,\n document.body\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/Overlay.tsx"],"names":[],"mappings":"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","file":"chunk-VG5FQ6SU.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { cx } from '../utils/cx';\nimport { X } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { useDelayedUnmount } from '../hooks/useDelayedUnmount';\nimport { useFocusTrap, useEscape, useScrollLock } from '../hooks';\n\n// Exit animation duration in ms. Must match `--duration-exit` and the\n// `is-closing` keyframes in src/styles/index.css (`.modal-backdrop`,\n// `.drawer-backdrop`).\nconst EXIT_MS = 150;\n\nexport interface OverlayProps {\n open: boolean;\n onClose: () => void;\n title?: React.ReactNode;\n children?: React.ReactNode;\n footer?: React.ReactNode;\n size?: 'sm' | 'md' | 'lg';\n closeOnBackdrop?: boolean;\n closeOnEsc?: boolean;\n className?: string;\n}\n\nexport function Modal({\n open, onClose, title, children, footer, size = 'md',\n closeOnBackdrop = true, closeOnEsc = true, className,\n}: OverlayProps) {\n const ref = React.useRef<HTMLDivElement>(null);\n // True only when the press both started AND ended on the backdrop itself.\n // Fixes: press inside (e.g. text-selecting in an input) released over the\n // backdrop must NOT dismiss.\n const downOnBackdrop = React.useRef(false);\n const titleId = React.useId();\n const t = useLocale();\n // useDelayedUnmount keeps the DOM mounted during exit animation. The\n // a11y/scroll-lock hooks still consume `open` (the user's intent), not\n // `mounted` — we don't want to trap focus or block scroll while\n // animating out.\n const { mounted, closing } = useDelayedUnmount(open, EXIT_MS);\n useEscape(open, onClose, closeOnEsc);\n useFocusTrap(ref, open);\n useScrollLock(open);\n if (!mounted || typeof document === 'undefined') return null;\n return createPortal(\n <div\n className={cx('modal-backdrop', closing && 'is-closing')}\n onMouseDown={(e) => { downOnBackdrop.current = e.target === e.currentTarget; }}\n onClick={(e) => {\n if (closeOnBackdrop && downOnBackdrop.current && e.target === e.currentTarget) onClose();\n downOnBackdrop.current = false;\n }}\n >\n <div\n ref={ref}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n className={cx('modal', `modal--${size}`, closing && 'is-closing', className)}\n >\n {title && (\n <div className=\"modal__header\">\n <div id={titleId} className=\"modal__title\">{title}</div>\n <button type=\"button\" className=\"modal__close\" onClick={onClose} aria-label={t['modal.close']}><X size={18} /></button>\n </div>\n )}\n <div className=\"modal__body\">{children}</div>\n {footer && <div className=\"modal__footer\">{footer}</div>}\n </div>\n </div>,\n document.body\n );\n}\n\nexport interface DrawerProps extends OverlayProps {\n side?: 'left' | 'right';\n}\n\nexport function Drawer({\n open, onClose, title, children, footer, side = 'right',\n closeOnBackdrop = true, closeOnEsc = true, className,\n}: DrawerProps) {\n const ref = React.useRef<HTMLDivElement>(null);\n // True only when the press both started AND ended on the backdrop itself.\n // Fixes: press inside (e.g. text-selecting in an input) released over the\n // backdrop must NOT dismiss.\n const downOnBackdrop = React.useRef(false);\n const titleId = React.useId();\n const t = useLocale();\n const { mounted, closing } = useDelayedUnmount(open, EXIT_MS);\n useEscape(open, onClose, closeOnEsc);\n useFocusTrap(ref, open);\n useScrollLock(open);\n if (!mounted || typeof document === 'undefined') return null;\n return createPortal(\n <div\n className={cx('drawer-backdrop', closing && 'is-closing')}\n onMouseDown={(e) => { downOnBackdrop.current = e.target === e.currentTarget; }}\n onClick={(e) => {\n if (closeOnBackdrop && downOnBackdrop.current && e.target === e.currentTarget) onClose();\n downOnBackdrop.current = false;\n }}\n >\n <div\n ref={ref}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n className={cx('drawer', `drawer--${side}`, closing && 'is-closing', className)}\n >\n {title && (\n <div className=\"drawer__header\">\n <div id={titleId} className=\"drawer__title\">{title}</div>\n <button type=\"button\" className=\"drawer__close\" onClick={onClose} aria-label={t['drawer.close']}><X size={18} /></button>\n </div>\n )}\n <div className=\"drawer__body\">{children}</div>\n {footer && <div className=\"drawer__footer\">{footer}</div>}\n </div>\n </div>,\n document.body\n );\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { ChevronLeft, ChevronRight } from './chunk-VHYTJD6Z.mjs';
2
+ import { ChevronLeft, ChevronRight } from './chunk-BJGMROKL.mjs';
3
3
  import { cx } from './chunk-IEPCH3JB.mjs';
4
4
  import * as React from 'react';
5
5
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
@@ -117,5 +117,5 @@ function Carousel({
117
117
  }
118
118
 
119
119
  export { Carousel };
120
- //# sourceMappingURL=chunk-ZA2AXUIB.mjs.map
121
- //# sourceMappingURL=chunk-ZA2AXUIB.mjs.map
120
+ //# sourceMappingURL=chunk-VXJTDBSM.mjs.map
121
+ //# sourceMappingURL=chunk-VXJTDBSM.mjs.map