@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
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Carousel.tsx"],"names":[],"mappings":"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","file":"chunk-ZA2AXUIB.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { ChevronLeft, ChevronRight } from './Icons';\n\nexport interface CarouselProps {\n children: React.ReactNode;\n loop?: boolean;\n autoplay?: boolean;\n autoplayInterval?: number;\n showControls?: boolean;\n showDots?: boolean;\n ariaLabel?: string;\n className?: string;\n onIndexChange?: (index: number) => void;\n}\n\nexport function Carousel({\n children,\n loop = false,\n autoplay = false,\n autoplayInterval = 4000,\n showControls = true,\n showDots = true,\n ariaLabel = 'Carrusel',\n className,\n onIndexChange,\n}: CarouselProps) {\n const slides = React.Children.toArray(children);\n const total = slides.length;\n const [index, setIndex] = React.useState(0);\n\n // Stable handlers: use the functional setIndex form so the callbacks\n // don't have to close over `index`. They re-create only when `loop`,\n // `total`, or `onIndexChange` change — meaning carousel arrow buttons\n // and autoplay can rely on referential stability across navigations.\n const go = React.useCallback(\n (target: number) => {\n const clamped = loop ? (target + total) % total : Math.max(0, Math.min(target, total - 1));\n setIndex(clamped);\n onIndexChange?.(clamped);\n },\n [loop, total, onIndexChange]\n );\n\n const next = React.useCallback(() => {\n setIndex((i) => {\n const t = loop ? (i + 1) % total : Math.min(i + 1, total - 1);\n onIndexChange?.(t);\n return t;\n });\n }, [loop, total, onIndexChange]);\n\n const prev = React.useCallback(() => {\n setIndex((i) => {\n const t = loop ? (i - 1 + total) % total : Math.max(0, i - 1);\n onIndexChange?.(t);\n return t;\n });\n }, [loop, total, onIndexChange]);\n\n React.useEffect(() => {\n if (!autoplay || total <= 1) return;\n const id = setInterval(next, autoplayInterval);\n return () => clearInterval(id);\n }, [autoplay, autoplayInterval, total, next]);\n\n const onKey = React.useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowLeft') prev();\n if (e.key === 'ArrowRight') next();\n },\n [next, prev]\n );\n\n return (\n <div\n className={cx('carousel', className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n aria-label={ariaLabel}\n tabIndex={0}\n onKeyDown={onKey}\n >\n <div className=\"carousel__viewport\">\n <div className=\"carousel__track\" style={{ transform: `translateX(-${index * 100}%)` }}>\n {slides.map((slide, i) => (\n <div\n key={i}\n className=\"carousel__slide\"\n role=\"group\"\n aria-roledescription=\"slide\"\n aria-label={`${i + 1} de ${total}`}\n aria-hidden={i !== index}\n >\n {slide}\n </div>\n ))}\n </div>\n {showControls && total > 1 && (\n <>\n <button\n type=\"button\"\n className=\"carousel__control carousel__control--prev\"\n aria-label=\"Anterior\"\n onClick={prev}\n disabled={!loop && index === 0}\n >\n <ChevronLeft size={20} />\n </button>\n <button\n type=\"button\"\n className=\"carousel__control carousel__control--next\"\n aria-label=\"Siguiente\"\n onClick={next}\n disabled={!loop && index === total - 1}\n >\n <ChevronRight size={20} />\n </button>\n </>\n )}\n </div>\n {showDots && total > 1 && (\n <ul className=\"carousel__dots\" role=\"tablist\">\n {slides.map((_, i) => (\n <li key={i}>\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={i === index}\n aria-label={`Ir a la diapositiva ${i + 1}`}\n className={cx('carousel__dot', i === index && 'is-active')}\n onClick={() => go(i)}\n />\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/Carousel.tsx"],"names":[],"mappings":"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","file":"chunk-VXJTDBSM.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { ChevronLeft, ChevronRight } from './Icons';\n\nexport interface CarouselProps {\n children: React.ReactNode;\n loop?: boolean;\n autoplay?: boolean;\n autoplayInterval?: number;\n showControls?: boolean;\n showDots?: boolean;\n ariaLabel?: string;\n className?: string;\n onIndexChange?: (index: number) => void;\n}\n\nexport function Carousel({\n children,\n loop = false,\n autoplay = false,\n autoplayInterval = 4000,\n showControls = true,\n showDots = true,\n ariaLabel = 'Carrusel',\n className,\n onIndexChange,\n}: CarouselProps) {\n const slides = React.Children.toArray(children);\n const total = slides.length;\n const [index, setIndex] = React.useState(0);\n\n // Stable handlers: use the functional setIndex form so the callbacks\n // don't have to close over `index`. They re-create only when `loop`,\n // `total`, or `onIndexChange` change — meaning carousel arrow buttons\n // and autoplay can rely on referential stability across navigations.\n const go = React.useCallback(\n (target: number) => {\n const clamped = loop ? (target + total) % total : Math.max(0, Math.min(target, total - 1));\n setIndex(clamped);\n onIndexChange?.(clamped);\n },\n [loop, total, onIndexChange]\n );\n\n const next = React.useCallback(() => {\n setIndex((i) => {\n const t = loop ? (i + 1) % total : Math.min(i + 1, total - 1);\n onIndexChange?.(t);\n return t;\n });\n }, [loop, total, onIndexChange]);\n\n const prev = React.useCallback(() => {\n setIndex((i) => {\n const t = loop ? (i - 1 + total) % total : Math.max(0, i - 1);\n onIndexChange?.(t);\n return t;\n });\n }, [loop, total, onIndexChange]);\n\n React.useEffect(() => {\n if (!autoplay || total <= 1) return;\n const id = setInterval(next, autoplayInterval);\n return () => clearInterval(id);\n }, [autoplay, autoplayInterval, total, next]);\n\n const onKey = React.useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowLeft') prev();\n if (e.key === 'ArrowRight') next();\n },\n [next, prev]\n );\n\n return (\n <div\n className={cx('carousel', className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n aria-label={ariaLabel}\n tabIndex={0}\n onKeyDown={onKey}\n >\n <div className=\"carousel__viewport\">\n <div className=\"carousel__track\" style={{ transform: `translateX(-${index * 100}%)` }}>\n {slides.map((slide, i) => (\n <div\n key={i}\n className=\"carousel__slide\"\n role=\"group\"\n aria-roledescription=\"slide\"\n aria-label={`${i + 1} de ${total}`}\n aria-hidden={i !== index}\n >\n {slide}\n </div>\n ))}\n </div>\n {showControls && total > 1 && (\n <>\n <button\n type=\"button\"\n className=\"carousel__control carousel__control--prev\"\n aria-label=\"Anterior\"\n onClick={prev}\n disabled={!loop && index === 0}\n >\n <ChevronLeft size={20} />\n </button>\n <button\n type=\"button\"\n className=\"carousel__control carousel__control--next\"\n aria-label=\"Siguiente\"\n onClick={next}\n disabled={!loop && index === total - 1}\n >\n <ChevronRight size={20} />\n </button>\n </>\n )}\n </div>\n {showDots && total > 1 && (\n <ul className=\"carousel__dots\" role=\"tablist\">\n {slides.map((_, i) => (\n <li key={i}>\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={i === index}\n aria-label={`Ir a la diapositiva ${i + 1}`}\n className={cx('carousel__dot', i === index && 'is-active')}\n onClick={() => go(i)}\n />\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n"]}
@@ -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');
@@ -54,7 +54,7 @@ function FilterSection({ title, defaultOpen = true, children, className, ...rest
54
54
  onClick: () => setOpen((o) => !o),
55
55
  children: [
56
56
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: title }),
57
- open ? /* @__PURE__ */ jsxRuntime.jsx(chunk3HA3VO2I_js.ChevronUp, { size: 14 }) : /* @__PURE__ */ jsxRuntime.jsx(chunk3HA3VO2I_js.ChevronDown, { size: 14 })
57
+ open ? /* @__PURE__ */ jsxRuntime.jsx(chunkC4AKMVDZ_js.ChevronUp, { size: 14 }) : /* @__PURE__ */ jsxRuntime.jsx(chunkC4AKMVDZ_js.ChevronDown, { size: 14 })
58
58
  ]
59
59
  }
60
60
  ),
@@ -71,7 +71,7 @@ function BulkActionBar({ selectedCount, label, onClear, className, children, ...
71
71
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkPASF6T4H_js.cx("bulk-bar", className), role: "region", "aria-label": t["filters.bulkActions"], ...rest, children: [
72
72
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bulk-bar__count", children: [
73
73
  label ?? countText,
74
- onClear && /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "bulk-bar__clear", "aria-label": t["filters.deselectAll"], onClick: onClear, children: /* @__PURE__ */ jsxRuntime.jsx(chunk3HA3VO2I_js.X, { size: 14 }) })
74
+ onClear && /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "bulk-bar__clear", "aria-label": t["filters.deselectAll"], onClick: onClear, children: /* @__PURE__ */ jsxRuntime.jsx(chunkC4AKMVDZ_js.X, { size: 14 }) })
75
75
  ] }),
76
76
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bulk-bar__actions", children })
77
77
  ] });
@@ -147,5 +147,5 @@ exports.FilterField = FilterField;
147
147
  exports.FilterPanel = FilterPanel;
148
148
  exports.FilterSection = FilterSection;
149
149
  exports.SortDropdown = SortDropdown;
150
- //# sourceMappingURL=chunk-EAVUJY3H.js.map
151
- //# sourceMappingURL=chunk-EAVUJY3H.js.map
150
+ //# sourceMappingURL=chunk-WAGJKBGW.js.map
151
+ //# sourceMappingURL=chunk-WAGJKBGW.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Filters.tsx"],"names":["useLocale","jsxs","cx","jsx","React","ChevronUp","ChevronDown","format","X"],"mappings":"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","file":"chunk-EAVUJY3H.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { ChevronDown, ChevronUp, X } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\n\n// ---------- FilterPanel -------------------------------------------------\nexport interface FilterPanelProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n title?: React.ReactNode;\n onClearAll?: () => void;\n activeCount?: number;\n}\n\nexport function FilterPanel({ title, onClearAll, activeCount, className, children, ...rest }: FilterPanelProps) {\n const t = useLocale();\n const heading = title ?? t['filters.panel'];\n return (\n <aside className={cx('filter-panel', className)} aria-label={t['filters.panel']} {...rest}>\n <div className=\"filter-panel__head\">\n <span className=\"filter-panel__title\">\n {heading}\n {typeof activeCount === 'number' && activeCount > 0 && (\n <span className=\"filter-panel__count\">{activeCount}</span>\n )}\n </span>\n {onClearAll && activeCount !== undefined && activeCount > 0 && (\n <button type=\"button\" className=\"filter-panel__clear\" onClick={onClearAll}>\n {t['filters.clear']}\n </button>\n )}\n </div>\n <div className=\"filter-panel__body\">{children}</div>\n </aside>\n );\n}\n\nexport interface FilterSectionProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n title: React.ReactNode;\n defaultOpen?: boolean;\n}\n\nexport function FilterSection({ title, defaultOpen = true, children, className, ...rest }: FilterSectionProps) {\n const [open, setOpen] = React.useState(defaultOpen);\n return (\n <div className={cx('filter-section', className)} {...rest}>\n <button\n type=\"button\"\n className=\"filter-section__head\"\n aria-expanded={open}\n onClick={() => setOpen((o) => !o)}\n >\n <span>{title}</span>\n {open ? <ChevronUp size={14} /> : <ChevronDown size={14} />}\n </button>\n {open && <div className=\"filter-section__body\">{children}</div>}\n </div>\n );\n}\n\n// ---------- BulkActionBar ----------------------------------------------\nexport interface BulkActionBarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Cantidad de items seleccionados. La barra se oculta si es 0. */\n selectedCount: number;\n /** Texto opcional, default: \"{N} seleccionado(s)\". */\n label?: React.ReactNode;\n onClear?: () => void;\n}\n\nexport function BulkActionBar({ selectedCount, label, onClear, className, children, ...rest }: BulkActionBarProps) {\n const t = useLocale();\n if (selectedCount <= 0) return null;\n const countText = format(\n selectedCount === 1 ? t['filters.selectedOne'] : t['filters.selectedMany'],\n { n: selectedCount }\n );\n return (\n <div className={cx('bulk-bar', className)} role=\"region\" aria-label={t['filters.bulkActions']} {...rest}>\n <div className=\"bulk-bar__count\">\n {label ?? countText}\n {onClear && (\n <button type=\"button\" className=\"bulk-bar__clear\" aria-label={t['filters.deselectAll']} onClick={onClear}>\n <X size={14} />\n </button>\n )}\n </div>\n <div className=\"bulk-bar__actions\">{children}</div>\n </div>\n );\n}\n\n// ---------- SortDropdown -----------------------------------------------\nexport interface SortOption<T = string> {\n value: T;\n label: React.ReactNode;\n}\n\nexport interface SortDropdownProps<T = string> {\n value: T;\n options: SortOption<T>[];\n onChange: (value: T) => void;\n label?: React.ReactNode;\n className?: string;\n id?: string;\n}\n\nexport function SortDropdown<T extends string = string>({\n value, options, onChange, label, className, id,\n}: SortDropdownProps<T>) {\n const t = useLocale();\n return (\n <label className={cx('sort-dropdown', className)}>\n <span className=\"sort-dropdown__label\">{label ?? t['filters.sortBy']}</span>\n <select\n id={id}\n className=\"sort-dropdown__select select\"\n value={value}\n onChange={(e) => onChange(e.target.value as T)}\n >\n {options.map((o) => (\n <option key={String(o.value)} value={String(o.value)}>\n {typeof o.label === 'string' ? o.label : String(o.value)}\n </option>\n ))}\n </select>\n </label>\n );\n}\n\n// ---------- FilterBar / FilterField ------------------------------------\n// Horizontal, dense filter row (the bar ON TOP of a table) — the counterpart\n// to FilterPanel's vertical facet sidebar. Without this, consumers hand-roll\n// a flex cluster: heterogeneous control heights + the kit's loud brand label\n// register make a 7-field row wrap and look ragged. FilterBar owns the grid,\n// applies `.fields--dense` (36px controls, kit-owned), and FilterField uses a\n// deliberately quiet label register — without mutating the global `--tt-label`\n// brand token, so forms elsewhere are untouched.\n\nexport interface FilterBarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Right-aligned slot for row-level actions (e.g. clear-all, export). */\n actions?: React.ReactNode;\n /** Min column width (px) before the responsive grid wraps. Default 160. */\n minColWidth?: number;\n /**\n * Fixed column count instead of width-driven auto-fit. Use for a\n * deterministic N-up row rather than wrapping by available width.\n */\n columns?: number;\n}\n\nexport function FilterBar({\n actions, minColWidth = 160, columns, className, children, style, ...rest\n}: FilterBarProps): React.JSX.Element {\n const gridVars = {\n ...(columns ? { '--filter-cols': String(columns) } : { '--filter-col-min': `${minColWidth}px` }),\n ...style,\n } as React.CSSProperties;\n return (\n <div\n className={cx('filter-bar', 'fields--dense', columns ? 'filter-bar--fixed-cols' : undefined, className)}\n style={gridVars}\n {...rest}\n >\n <div className=\"filter-bar__fields\">{children}</div>\n {actions != null && <div className=\"filter-bar__actions\">{actions}</div>}\n </div>\n );\n}\n\nexport interface FilterFieldProps {\n label: React.ReactNode;\n /** Override the auto-generated id (when the control sets its own id). */\n htmlFor?: string;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function FilterField({\n label, htmlFor, children, className,\n}: FilterFieldProps): React.JSX.Element {\n const reactId = React.useId();\n // Effective id, in priority order: explicit htmlFor → the control's own id\n // → a generated one. Used for BOTH the label's `for` and the control, so a\n // consumer-set id stays authoritative and the label still points at it.\n const childId = React.isValidElement(children)\n ? (children.props as { id?: string }).id\n : undefined;\n const id = htmlFor ?? childId ?? reactId;\n const child = React.isValidElement(children)\n ? React.cloneElement(children as React.ReactElement<{ id?: string }>, { id })\n : children;\n return (\n <div className={cx('filter-field', className)}>\n <label htmlFor={id} className=\"filter-field__label\">{label}</label>\n {child}\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/Filters.tsx"],"names":["useLocale","jsxs","cx","jsx","React","ChevronUp","ChevronDown","format","X"],"mappings":"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","file":"chunk-WAGJKBGW.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { ChevronDown, ChevronUp, X } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\n\n// ---------- FilterPanel -------------------------------------------------\nexport interface FilterPanelProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n title?: React.ReactNode;\n onClearAll?: () => void;\n activeCount?: number;\n}\n\nexport function FilterPanel({ title, onClearAll, activeCount, className, children, ...rest }: FilterPanelProps) {\n const t = useLocale();\n const heading = title ?? t['filters.panel'];\n return (\n <aside className={cx('filter-panel', className)} aria-label={t['filters.panel']} {...rest}>\n <div className=\"filter-panel__head\">\n <span className=\"filter-panel__title\">\n {heading}\n {typeof activeCount === 'number' && activeCount > 0 && (\n <span className=\"filter-panel__count\">{activeCount}</span>\n )}\n </span>\n {onClearAll && activeCount !== undefined && activeCount > 0 && (\n <button type=\"button\" className=\"filter-panel__clear\" onClick={onClearAll}>\n {t['filters.clear']}\n </button>\n )}\n </div>\n <div className=\"filter-panel__body\">{children}</div>\n </aside>\n );\n}\n\nexport interface FilterSectionProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n title: React.ReactNode;\n defaultOpen?: boolean;\n}\n\nexport function FilterSection({ title, defaultOpen = true, children, className, ...rest }: FilterSectionProps) {\n const [open, setOpen] = React.useState(defaultOpen);\n return (\n <div className={cx('filter-section', className)} {...rest}>\n <button\n type=\"button\"\n className=\"filter-section__head\"\n aria-expanded={open}\n onClick={() => setOpen((o) => !o)}\n >\n <span>{title}</span>\n {open ? <ChevronUp size={14} /> : <ChevronDown size={14} />}\n </button>\n {open && <div className=\"filter-section__body\">{children}</div>}\n </div>\n );\n}\n\n// ---------- BulkActionBar ----------------------------------------------\nexport interface BulkActionBarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Cantidad de items seleccionados. La barra se oculta si es 0. */\n selectedCount: number;\n /** Texto opcional, default: \"{N} seleccionado(s)\". */\n label?: React.ReactNode;\n onClear?: () => void;\n}\n\nexport function BulkActionBar({ selectedCount, label, onClear, className, children, ...rest }: BulkActionBarProps) {\n const t = useLocale();\n if (selectedCount <= 0) return null;\n const countText = format(\n selectedCount === 1 ? t['filters.selectedOne'] : t['filters.selectedMany'],\n { n: selectedCount }\n );\n return (\n <div className={cx('bulk-bar', className)} role=\"region\" aria-label={t['filters.bulkActions']} {...rest}>\n <div className=\"bulk-bar__count\">\n {label ?? countText}\n {onClear && (\n <button type=\"button\" className=\"bulk-bar__clear\" aria-label={t['filters.deselectAll']} onClick={onClear}>\n <X size={14} />\n </button>\n )}\n </div>\n <div className=\"bulk-bar__actions\">{children}</div>\n </div>\n );\n}\n\n// ---------- SortDropdown -----------------------------------------------\nexport interface SortOption<T = string> {\n value: T;\n label: React.ReactNode;\n}\n\nexport interface SortDropdownProps<T = string> {\n value: T;\n options: SortOption<T>[];\n onChange: (value: T) => void;\n label?: React.ReactNode;\n className?: string;\n id?: string;\n}\n\nexport function SortDropdown<T extends string = string>({\n value, options, onChange, label, className, id,\n}: SortDropdownProps<T>) {\n const t = useLocale();\n return (\n <label className={cx('sort-dropdown', className)}>\n <span className=\"sort-dropdown__label\">{label ?? t['filters.sortBy']}</span>\n <select\n id={id}\n className=\"sort-dropdown__select select\"\n value={value}\n onChange={(e) => onChange(e.target.value as T)}\n >\n {options.map((o) => (\n <option key={String(o.value)} value={String(o.value)}>\n {typeof o.label === 'string' ? o.label : String(o.value)}\n </option>\n ))}\n </select>\n </label>\n );\n}\n\n// ---------- FilterBar / FilterField ------------------------------------\n// Horizontal, dense filter row (the bar ON TOP of a table) — the counterpart\n// to FilterPanel's vertical facet sidebar. Without this, consumers hand-roll\n// a flex cluster: heterogeneous control heights + the kit's loud brand label\n// register make a 7-field row wrap and look ragged. FilterBar owns the grid,\n// applies `.fields--dense` (36px controls, kit-owned), and FilterField uses a\n// deliberately quiet label register — without mutating the global `--tt-label`\n// brand token, so forms elsewhere are untouched.\n\nexport interface FilterBarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Right-aligned slot for row-level actions (e.g. clear-all, export). */\n actions?: React.ReactNode;\n /** Min column width (px) before the responsive grid wraps. Default 160. */\n minColWidth?: number;\n /**\n * Fixed column count instead of width-driven auto-fit. Use for a\n * deterministic N-up row rather than wrapping by available width.\n */\n columns?: number;\n}\n\nexport function FilterBar({\n actions, minColWidth = 160, columns, className, children, style, ...rest\n}: FilterBarProps): React.JSX.Element {\n const gridVars = {\n ...(columns ? { '--filter-cols': String(columns) } : { '--filter-col-min': `${minColWidth}px` }),\n ...style,\n } as React.CSSProperties;\n return (\n <div\n className={cx('filter-bar', 'fields--dense', columns ? 'filter-bar--fixed-cols' : undefined, className)}\n style={gridVars}\n {...rest}\n >\n <div className=\"filter-bar__fields\">{children}</div>\n {actions != null && <div className=\"filter-bar__actions\">{actions}</div>}\n </div>\n );\n}\n\nexport interface FilterFieldProps {\n label: React.ReactNode;\n /** Override the auto-generated id (when the control sets its own id). */\n htmlFor?: string;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function FilterField({\n label, htmlFor, children, className,\n}: FilterFieldProps): React.JSX.Element {\n const reactId = React.useId();\n // Effective id, in priority order: explicit htmlFor → the control's own id\n // → a generated one. Used for BOTH the label's `for` and the control, so a\n // consumer-set id stays authoritative and the label still points at it.\n const childId = React.isValidElement(children)\n ? (children.props as { id?: string }).id\n : undefined;\n const id = htmlFor ?? childId ?? reactId;\n const child = React.isValidElement(children)\n ? React.cloneElement(children as React.ReactElement<{ id?: string }>, { id })\n : children;\n return (\n <div className={cx('filter-field', className)}>\n <label htmlFor={id} className=\"filter-field__label\">{label}</label>\n {child}\n </div>\n );\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { Star, ChevronDown } from './chunk-VHYTJD6Z.mjs';
2
+ import { Star, ChevronDown } from './chunk-BJGMROKL.mjs';
3
3
  import { cx } from './chunk-IEPCH3JB.mjs';
4
4
  import * as React from 'react';
5
5
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -114,5 +114,5 @@ function CategoryNav({ categories, className, ...rest }) {
114
114
  }
115
115
 
116
116
  export { CategoryNav, Hero, Testimonial };
117
- //# sourceMappingURL=chunk-2LHXOVX2.mjs.map
118
- //# sourceMappingURL=chunk-2LHXOVX2.mjs.map
117
+ //# sourceMappingURL=chunk-XRWMJVSI.mjs.map
118
+ //# sourceMappingURL=chunk-XRWMJVSI.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Marketing.tsx"],"names":[],"mappings":"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","file":"chunk-2LHXOVX2.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { ChevronDown, Star } from './Icons';\n\n// ---------- Hero / Banner ----------------------------------------------\nexport interface HeroProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n eyebrow?: React.ReactNode;\n title: React.ReactNode;\n subtitle?: React.ReactNode;\n actions?: React.ReactNode;\n /** Imagen de fondo. */\n image?: string;\n /** Posiciona el contenido. Default: center. */\n align?: 'start' | 'center' | 'end';\n /** Variantes visuales. */\n tone?: 'brand' | 'inverse' | 'subtle' | 'image';\n /** Altura. */\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport function Hero({\n eyebrow, title, subtitle, actions, image,\n align = 'center', tone = 'brand', size = 'md',\n className, style, children, ...rest\n}: HeroProps) {\n const computedTone = image ? 'image' : tone;\n return (\n <section\n className={cx('hero', `hero--${computedTone}`, `hero--align-${align}`, `hero--${size}`, className)}\n style={image ? { backgroundImage: `url(${image})`, ...style } : style}\n {...rest}\n >\n <div className=\"hero__inner\">\n {eyebrow && <div className=\"hero__eyebrow\">{eyebrow}</div>}\n <h1 className=\"hero__title\">{title}</h1>\n {subtitle && <p className=\"hero__subtitle\">{subtitle}</p>}\n {actions && <div className=\"hero__actions\">{actions}</div>}\n {children}\n </div>\n </section>\n );\n}\n\n// ---------- Testimonial -------------------------------------------------\nexport interface TestimonialProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'role'> {\n quote: React.ReactNode;\n author: React.ReactNode;\n role?: React.ReactNode;\n company?: React.ReactNode;\n avatarSrc?: string;\n rating?: number; // 0..5\n}\n\nexport function Testimonial({\n quote, author, role, company, avatarSrc, rating,\n className, ...rest\n}: TestimonialProps) {\n return (\n <figure className={cx('testimonial', className)} {...rest}>\n {rating != null && (\n <div className=\"testimonial__rating\" aria-label={`${rating} de 5 estrellas`}>\n {Array.from({ length: 5 }, (_, i) => (\n <Star key={i} size={14} className={i < rating ? 'is-filled' : ''} />\n ))}\n </div>\n )}\n <blockquote className=\"testimonial__quote\">\"{quote}\"</blockquote>\n <figcaption className=\"testimonial__caption\">\n {avatarSrc && <img src={avatarSrc} alt=\"\" className=\"testimonial__avatar\" />}\n <div>\n <div className=\"testimonial__author\">{author}</div>\n {(role || company) && (\n <div className=\"testimonial__meta\">\n {role}{role && company ? ' · ' : ''}{company}\n </div>\n )}\n </div>\n </figcaption>\n </figure>\n );\n}\n\n// ---------- CategoryNav (mega menu) ------------------------------------\nexport interface CategoryItem {\n id: string;\n label: React.ReactNode;\n href?: string;\n /** Subcategorías agrupadas (mega menu). */\n groups?: Array<{ title: React.ReactNode; items: Array<{ label: React.ReactNode; href?: string }> }>;\n /** Si tiene groups, se muestra el mega menu en hover. */\n}\n\nexport interface CategoryNavProps extends React.HTMLAttributes<HTMLElement> {\n categories: CategoryItem[];\n}\n\nexport function CategoryNav({ categories, className, ...rest }: CategoryNavProps) {\n const [openId, setOpenId] = React.useState<string | null>(null);\n const ref = React.useRef<HTMLElement>(null);\n\n React.useEffect(() => {\n if (!openId) return;\n const onClick = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpenId(null);\n };\n const onKey = (e: KeyboardEvent) => { if (e.key === 'Escape') setOpenId(null); };\n document.addEventListener('mousedown', onClick);\n document.addEventListener('keydown', onKey);\n return () => {\n document.removeEventListener('mousedown', onClick);\n document.removeEventListener('keydown', onKey);\n };\n }, [openId]);\n\n return (\n <nav ref={ref} className={cx('category-nav', className)} aria-label=\"Categorías\" {...rest}>\n <ul className=\"category-nav__list\">\n {categories.map((c) => {\n const hasMega = !!(c.groups && c.groups.length);\n const isOpen = openId === c.id;\n return (\n <li key={c.id} className=\"category-nav__item\">\n {hasMega ? (\n <button\n type=\"button\"\n className={cx('category-nav__link', isOpen && 'is-open')}\n aria-expanded={isOpen}\n aria-haspopup=\"true\"\n onClick={() => setOpenId(isOpen ? null : c.id)}\n >\n {c.label}\n <ChevronDown size={12} />\n </button>\n ) : (\n <a href={c.href ?? '#'} className=\"category-nav__link\">{c.label}</a>\n )}\n {hasMega && isOpen && (\n // Click-to-open instead of hover so the mega menu works\n // identically on touch devices (no hover events) and is\n // accessible to keyboard/screen-reader users. Closes on\n // outside click via the document mousedown listener above.\n <div className=\"category-nav__mega\">\n {c.groups!.map((g, i) => (\n <div key={i} className=\"category-nav__group\">\n <div className=\"category-nav__group-title\">{g.title}</div>\n <ul className=\"category-nav__group-items\">\n {g.items.map((it, j) => (\n <li key={j}><a href={it.href ?? '#'}>{it.label}</a></li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/Marketing.tsx"],"names":[],"mappings":"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","file":"chunk-XRWMJVSI.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { ChevronDown, Star } from './Icons';\n\n// ---------- Hero / Banner ----------------------------------------------\nexport interface HeroProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n eyebrow?: React.ReactNode;\n title: React.ReactNode;\n subtitle?: React.ReactNode;\n actions?: React.ReactNode;\n /** Imagen de fondo. */\n image?: string;\n /** Posiciona el contenido. Default: center. */\n align?: 'start' | 'center' | 'end';\n /** Variantes visuales. */\n tone?: 'brand' | 'inverse' | 'subtle' | 'image';\n /** Altura. */\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport function Hero({\n eyebrow, title, subtitle, actions, image,\n align = 'center', tone = 'brand', size = 'md',\n className, style, children, ...rest\n}: HeroProps) {\n const computedTone = image ? 'image' : tone;\n return (\n <section\n className={cx('hero', `hero--${computedTone}`, `hero--align-${align}`, `hero--${size}`, className)}\n style={image ? { backgroundImage: `url(${image})`, ...style } : style}\n {...rest}\n >\n <div className=\"hero__inner\">\n {eyebrow && <div className=\"hero__eyebrow\">{eyebrow}</div>}\n <h1 className=\"hero__title\">{title}</h1>\n {subtitle && <p className=\"hero__subtitle\">{subtitle}</p>}\n {actions && <div className=\"hero__actions\">{actions}</div>}\n {children}\n </div>\n </section>\n );\n}\n\n// ---------- Testimonial -------------------------------------------------\nexport interface TestimonialProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'role'> {\n quote: React.ReactNode;\n author: React.ReactNode;\n role?: React.ReactNode;\n company?: React.ReactNode;\n avatarSrc?: string;\n rating?: number; // 0..5\n}\n\nexport function Testimonial({\n quote, author, role, company, avatarSrc, rating,\n className, ...rest\n}: TestimonialProps) {\n return (\n <figure className={cx('testimonial', className)} {...rest}>\n {rating != null && (\n <div className=\"testimonial__rating\" aria-label={`${rating} de 5 estrellas`}>\n {Array.from({ length: 5 }, (_, i) => (\n <Star key={i} size={14} className={i < rating ? 'is-filled' : ''} />\n ))}\n </div>\n )}\n <blockquote className=\"testimonial__quote\">\"{quote}\"</blockquote>\n <figcaption className=\"testimonial__caption\">\n {avatarSrc && <img src={avatarSrc} alt=\"\" className=\"testimonial__avatar\" />}\n <div>\n <div className=\"testimonial__author\">{author}</div>\n {(role || company) && (\n <div className=\"testimonial__meta\">\n {role}{role && company ? ' · ' : ''}{company}\n </div>\n )}\n </div>\n </figcaption>\n </figure>\n );\n}\n\n// ---------- CategoryNav (mega menu) ------------------------------------\nexport interface CategoryItem {\n id: string;\n label: React.ReactNode;\n href?: string;\n /** Subcategorías agrupadas (mega menu). */\n groups?: Array<{ title: React.ReactNode; items: Array<{ label: React.ReactNode; href?: string }> }>;\n /** Si tiene groups, se muestra el mega menu en hover. */\n}\n\nexport interface CategoryNavProps extends React.HTMLAttributes<HTMLElement> {\n categories: CategoryItem[];\n}\n\nexport function CategoryNav({ categories, className, ...rest }: CategoryNavProps) {\n const [openId, setOpenId] = React.useState<string | null>(null);\n const ref = React.useRef<HTMLElement>(null);\n\n React.useEffect(() => {\n if (!openId) return;\n const onClick = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpenId(null);\n };\n const onKey = (e: KeyboardEvent) => { if (e.key === 'Escape') setOpenId(null); };\n document.addEventListener('mousedown', onClick);\n document.addEventListener('keydown', onKey);\n return () => {\n document.removeEventListener('mousedown', onClick);\n document.removeEventListener('keydown', onKey);\n };\n }, [openId]);\n\n return (\n <nav ref={ref} className={cx('category-nav', className)} aria-label=\"Categorías\" {...rest}>\n <ul className=\"category-nav__list\">\n {categories.map((c) => {\n const hasMega = !!(c.groups && c.groups.length);\n const isOpen = openId === c.id;\n return (\n <li key={c.id} className=\"category-nav__item\">\n {hasMega ? (\n <button\n type=\"button\"\n className={cx('category-nav__link', isOpen && 'is-open')}\n aria-expanded={isOpen}\n aria-haspopup=\"true\"\n onClick={() => setOpenId(isOpen ? null : c.id)}\n >\n {c.label}\n <ChevronDown size={12} />\n </button>\n ) : (\n <a href={c.href ?? '#'} className=\"category-nav__link\">{c.label}</a>\n )}\n {hasMega && isOpen && (\n // Click-to-open instead of hover so the mega menu works\n // identically on touch devices (no hover events) and is\n // accessible to keyboard/screen-reader users. Closes on\n // outside click via the document mousedown listener above.\n <div className=\"category-nav__mega\">\n {c.groups!.map((g, i) => (\n <div key={i} className=\"category-nav__group\">\n <div className=\"category-nav__group-title\">{g.title}</div>\n <ul className=\"category-nav__group-items\">\n {g.items.map((it, j) => (\n <li key={j}><a href={it.href ?? '#'}>{it.label}</a></li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { Checkbox } from './chunk-TS3WC3G4.mjs';
2
+ import { Checkbox } from './chunk-SUQLII3F.mjs';
3
3
  import { format } from './chunk-KVOPVYZ5.mjs';
4
4
  import { useLocale } from './chunk-PBWX4LU2.mjs';
5
5
  import { cx } from './chunk-IEPCH3JB.mjs';
@@ -69,5 +69,5 @@ function PermissionMatrix({
69
69
  }
70
70
 
71
71
  export { PermissionMatrix };
72
- //# sourceMappingURL=chunk-DTWQA7TN.mjs.map
73
- //# sourceMappingURL=chunk-DTWQA7TN.mjs.map
72
+ //# sourceMappingURL=chunk-XSUX5CU6.mjs.map
73
+ //# sourceMappingURL=chunk-XSUX5CU6.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Permissions.tsx"],"names":[],"mappings":"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","file":"chunk-DTWQA7TN.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { Checkbox } from './Form';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\n\nexport interface PermissionRole { id: string; label: React.ReactNode }\nexport interface PermissionAction { id: string; label: React.ReactNode; description?: React.ReactNode }\n\nexport interface PermissionMatrixProps extends Omit<React.HTMLAttributes<HTMLTableElement>, 'onChange'> {\n roles: PermissionRole[];\n actions: PermissionAction[];\n /** Map de roleId → set de actionIds permitidos */\n value: Record<string, string[]>;\n onChange: (value: Record<string, string[]>) => void;\n readOnly?: boolean;\n}\n\nexport function PermissionMatrix({\n roles, actions, value, onChange, readOnly, className, ...rest\n}: PermissionMatrixProps) {\n const t = useLocale();\n const has = (roleId: string, actionId: string) => (value[roleId] ?? []).includes(actionId);\n\n const toggle = (roleId: string, actionId: string) => {\n if (readOnly) return;\n const current = new Set(value[roleId] ?? []);\n if (current.has(actionId)) current.delete(actionId);\n else current.add(actionId);\n onChange({ ...value, [roleId]: Array.from(current) });\n };\n\n const toggleAllForRole = (roleId: string, allow: boolean) => {\n if (readOnly) return;\n onChange({ ...value, [roleId]: allow ? actions.map((a) => a.id) : [] });\n };\n\n return (\n <div className={cx('permissions', className)}>\n <table className=\"permissions__table\" {...rest}>\n <thead>\n <tr>\n <th scope=\"col\" className=\"permissions__action-col\">{t['permissions.action']}</th>\n {roles.map((r) => {\n const count = (value[r.id] ?? []).length;\n const all = count === actions.length;\n return (\n <th key={r.id} scope=\"col\" className=\"permissions__role-col\">\n <div className=\"permissions__role-head\">\n <span>{r.label}</span>\n {!readOnly && (\n <button\n type=\"button\"\n className=\"permissions__role-toggle\"\n onClick={() => toggleAllForRole(r.id, !all)}\n >\n {all ? t['permissions.unmarkAll'] : t['permissions.markAll']}\n </button>\n )}\n </div>\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {actions.map((a) => (\n <tr key={a.id}>\n <th scope=\"row\" className=\"permissions__action-cell\">\n <div>{a.label}</div>\n {a.description && <div className=\"permissions__action-desc\">{a.description}</div>}\n </th>\n {roles.map((r) => (\n <td key={r.id} className=\"permissions__cell\">\n <Checkbox\n checked={has(r.id, a.id)}\n disabled={readOnly}\n onChange={() => toggle(r.id, a.id)}\n aria-label={format(t['permissions.cellLabel'], {\n action: typeof a.label === 'string' ? a.label : a.id,\n role: typeof r.label === 'string' ? r.label : r.id,\n })}\n />\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/Permissions.tsx"],"names":[],"mappings":"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","file":"chunk-XSUX5CU6.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { Checkbox } from './Form';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\n\nexport interface PermissionRole { id: string; label: React.ReactNode }\nexport interface PermissionAction { id: string; label: React.ReactNode; description?: React.ReactNode }\n\nexport interface PermissionMatrixProps extends Omit<React.HTMLAttributes<HTMLTableElement>, 'onChange'> {\n roles: PermissionRole[];\n actions: PermissionAction[];\n /** Map de roleId → set de actionIds permitidos */\n value: Record<string, string[]>;\n onChange: (value: Record<string, string[]>) => void;\n readOnly?: boolean;\n}\n\nexport function PermissionMatrix({\n roles, actions, value, onChange, readOnly, className, ...rest\n}: PermissionMatrixProps) {\n const t = useLocale();\n const has = (roleId: string, actionId: string) => (value[roleId] ?? []).includes(actionId);\n\n const toggle = (roleId: string, actionId: string) => {\n if (readOnly) return;\n const current = new Set(value[roleId] ?? []);\n if (current.has(actionId)) current.delete(actionId);\n else current.add(actionId);\n onChange({ ...value, [roleId]: Array.from(current) });\n };\n\n const toggleAllForRole = (roleId: string, allow: boolean) => {\n if (readOnly) return;\n onChange({ ...value, [roleId]: allow ? actions.map((a) => a.id) : [] });\n };\n\n return (\n <div className={cx('permissions', className)}>\n <table className=\"permissions__table\" {...rest}>\n <thead>\n <tr>\n <th scope=\"col\" className=\"permissions__action-col\">{t['permissions.action']}</th>\n {roles.map((r) => {\n const count = (value[r.id] ?? []).length;\n const all = count === actions.length;\n return (\n <th key={r.id} scope=\"col\" className=\"permissions__role-col\">\n <div className=\"permissions__role-head\">\n <span>{r.label}</span>\n {!readOnly && (\n <button\n type=\"button\"\n className=\"permissions__role-toggle\"\n onClick={() => toggleAllForRole(r.id, !all)}\n >\n {all ? t['permissions.unmarkAll'] : t['permissions.markAll']}\n </button>\n )}\n </div>\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {actions.map((a) => (\n <tr key={a.id}>\n <th scope=\"row\" className=\"permissions__action-cell\">\n <div>{a.label}</div>\n {a.description && <div className=\"permissions__action-desc\">{a.description}</div>}\n </th>\n {roles.map((r) => (\n <td key={r.id} className=\"permissions__cell\">\n <Checkbox\n checked={has(r.id, a.id)}\n disabled={readOnly}\n onChange={() => toggle(r.id, a.id)}\n aria-label={format(t['permissions.cellLabel'], {\n action: typeof a.label === 'string' ? a.label : a.id,\n role: typeof r.label === 'string' ? r.label : r.id,\n })}\n />\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n"]}
@@ -1,10 +1,10 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunkMKDSS4XD_js = require('./chunk-MKDSS4XD.js');
5
- var chunk74ALPTUE_js = require('./chunk-74ALPTUE.js');
4
+ var chunkZZFJNKKI_js = require('./chunk-ZZFJNKKI.js');
5
+ var chunk6SSTTJV4_js = require('./chunk-6SSTTJV4.js');
6
6
  var chunkU6ZXX4WF_js = require('./chunk-U6ZXX4WF.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');
@@ -55,7 +55,7 @@ function ConfirmDialog({
55
55
  }
56
56
  };
57
57
  return /* @__PURE__ */ jsxRuntime.jsx(
58
- chunkMKDSS4XD_js.Modal,
58
+ chunkZZFJNKKI_js.Modal,
59
59
  {
60
60
  open,
61
61
  onClose,
@@ -163,7 +163,7 @@ function TransferList({
163
163
  onClick: () => !it.disabled && toggleCheck(checked, setChecked, it.id),
164
164
  children: [
165
165
  /* @__PURE__ */ jsxRuntime.jsx("span", { onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsxRuntime.jsx(
166
- chunk74ALPTUE_js.Checkbox,
166
+ chunk6SSTTJV4_js.Checkbox,
167
167
  {
168
168
  checked: checked.has(it.id),
169
169
  disabled: it.disabled,
@@ -182,8 +182,8 @@ function TransferList({
182
182
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkPASF6T4H_js.cx("transfer", className), children: [
183
183
  renderColumn(srcTitle, left, leftChecked, setLeftChecked),
184
184
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "transfer__controls", children: [
185
- /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "btn btn--outline btn--sm", disabled: leftChecked.size === 0, onClick: moveRight, "aria-label": t["transfer.assignSelected"], children: /* @__PURE__ */ jsxRuntime.jsx(chunk3HA3VO2I_js.ChevronRight, { size: 16 }) }),
186
- /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "btn btn--outline btn--sm", disabled: rightChecked.size === 0, onClick: moveLeft, "aria-label": t["transfer.removeSelected"], children: /* @__PURE__ */ jsxRuntime.jsx(chunk3HA3VO2I_js.ChevronLeft, { size: 16 }) })
185
+ /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "btn btn--outline btn--sm", disabled: leftChecked.size === 0, onClick: moveRight, "aria-label": t["transfer.assignSelected"], children: /* @__PURE__ */ jsxRuntime.jsx(chunkC4AKMVDZ_js.ChevronRight, { size: 16 }) }),
186
+ /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "btn btn--outline btn--sm", disabled: rightChecked.size === 0, onClick: moveLeft, "aria-label": t["transfer.removeSelected"], children: /* @__PURE__ */ jsxRuntime.jsx(chunkC4AKMVDZ_js.ChevronLeft, { size: 16 }) })
187
187
  ] }),
188
188
  renderColumn(selTitle, right, rightChecked, setRightChecked)
189
189
  ] });
@@ -194,5 +194,5 @@ exports.DescriptionList = DescriptionList;
194
194
  exports.DescriptionListItem = DescriptionListItem;
195
195
  exports.DiffViewer = DiffViewer;
196
196
  exports.TransferList = TransferList;
197
- //# sourceMappingURL=chunk-FTBA676Q.js.map
198
- //# sourceMappingURL=chunk-FTBA676Q.js.map
197
+ //# sourceMappingURL=chunk-YHRNSINQ.js.map
198
+ //# sourceMappingURL=chunk-YHRNSINQ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Editing.tsx"],"names":["React","useLocale","jsx","Modal","jsxs","Fragment","cx","Checkbox","ChevronRight","ChevronLeft"],"mappings":"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","file":"chunk-FTBA676Q.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { Modal } from './Overlay';\nimport { ChevronLeft, ChevronRight } from './Icons';\nimport { Checkbox } from './Form';\nimport { useLocale } from '../locale/LocaleProvider';\n\n// ---------- ConfirmDialog -----------------------------------------------\nexport interface ConfirmDialogProps {\n open: boolean;\n onClose: () => void;\n onConfirm: () => void | Promise<void>;\n title: React.ReactNode;\n description?: React.ReactNode;\n confirmLabel?: React.ReactNode;\n cancelLabel?: React.ReactNode;\n /** 'danger' usa botón rojo. */\n tone?: 'default' | 'danger';\n /** Si true, deshabilita el confirm mientras se ejecuta. */\n loading?: boolean;\n}\n\nexport function ConfirmDialog({\n open, onClose, onConfirm, title, description,\n confirmLabel, cancelLabel,\n tone = 'default', loading,\n}: ConfirmDialogProps) {\n const [busy, setBusy] = React.useState(false);\n const isBusy = loading ?? busy;\n const t = useLocale();\n const confirmText = confirmLabel ?? t['common.confirm'];\n const cancelText = cancelLabel ?? t['common.cancel'];\n\n const handleConfirm = async () => {\n try {\n setBusy(true);\n await onConfirm();\n onClose();\n } finally {\n setBusy(false);\n }\n };\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n size=\"sm\"\n title={title}\n footer={\n <>\n <button type=\"button\" className=\"btn btn--ghost btn--md\" onClick={onClose} disabled={isBusy}>\n {cancelText}\n </button>\n <button\n type=\"button\"\n className={cx('btn', tone === 'danger' ? 'btn--danger' : 'btn--primary', 'btn--md')}\n onClick={handleConfirm}\n disabled={isBusy}\n aria-busy={isBusy || undefined}\n >\n {isBusy ? <span className=\"spinner spinner--inverse\" aria-hidden=\"true\" /> : null}\n {confirmText}\n </button>\n </>\n }\n >\n {description && <p className=\"confirm__desc\">{description}</p>}\n </Modal>\n );\n}\n\n// ---------- DescriptionList (KeyValue editable) ------------------------\nexport interface DescriptionListItemProps {\n label: React.ReactNode;\n value: React.ReactNode;\n /** Si se pasa, el valor se vuelve editable inline. */\n onEdit?: () => void;\n editable?: boolean;\n}\n\nexport function DescriptionList({ children, className, ...rest }: React.HTMLAttributes<HTMLDListElement>) {\n return <dl className={cx('desc-list', className)} {...rest}>{children}</dl>;\n}\n\nexport function DescriptionListItem({ label, value, onEdit, editable }: DescriptionListItemProps) {\n const t = useLocale();\n return (\n <>\n <dt className=\"desc-list__label\">{label}</dt>\n <dd className=\"desc-list__value\">\n <span>{value}</span>\n {editable && onEdit && (\n <button type=\"button\" className=\"desc-list__edit\" onClick={onEdit}>\n {t['descList.edit']}\n </button>\n )}\n </dd>\n </>\n );\n}\n\n// ---------- DiffViewer (before / after) --------------------------------\nexport interface DiffEntry {\n field: React.ReactNode;\n before: React.ReactNode;\n after: React.ReactNode;\n}\n\nexport interface DiffViewerProps extends React.HTMLAttributes<HTMLDivElement> {\n entries: DiffEntry[];\n}\n\nexport function DiffViewer({ entries, className, ...rest }: DiffViewerProps) {\n const t = useLocale();\n // data-label feeds the mobile stacked layout's ::before pseudo-elements\n // so the \"Antes\" / \"Después\" labels remain i18n-able.\n const beforeLabel = typeof t['diff.before'] === 'string' ? t['diff.before'] : undefined;\n const afterLabel = typeof t['diff.after'] === 'string' ? t['diff.after'] : undefined;\n return (\n <div className={cx('diff', className)} role=\"table\" aria-label={t['diff.label']} {...rest}>\n <div className=\"diff__head\" role=\"row\">\n <div role=\"columnheader\">{t['diff.field']}</div>\n <div role=\"columnheader\">{t['diff.before']}</div>\n <div role=\"columnheader\">{t['diff.after']}</div>\n </div>\n {entries.map((e, i) => (\n <div key={i} className=\"diff__row\" role=\"row\">\n <div className=\"diff__field\" role=\"cell\">{e.field}</div>\n <div className=\"diff__before\" role=\"cell\" data-label={beforeLabel}><del>{e.before}</del></div>\n <div className=\"diff__after\" role=\"cell\" data-label={afterLabel}><ins>{e.after}</ins></div>\n </div>\n ))}\n </div>\n );\n}\n\n// ---------- TransferList (dual list select) ----------------------------\nexport interface TransferItem {\n id: string;\n label: React.ReactNode;\n description?: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface TransferListProps {\n source: TransferItem[];\n selected: TransferItem[];\n onChange: (selected: TransferItem[]) => void;\n sourceTitle?: React.ReactNode;\n selectedTitle?: React.ReactNode;\n className?: string;\n}\n\nexport function TransferList({\n source, selected, onChange,\n sourceTitle, selectedTitle,\n className,\n}: TransferListProps) {\n const [leftChecked, setLeftChecked] = React.useState<Set<string>>(new Set());\n const [rightChecked, setRightChecked] = React.useState<Set<string>>(new Set());\n const t = useLocale();\n const srcTitle = sourceTitle ?? t['transfer.available'];\n const selTitle = selectedTitle ?? t['transfer.assigned'];\n\n // Without memo, every checkbox click rebuilt selectedIds and re-filtered\n // `source` to compute `left`. At ~500 source items that's a measurable\n // O(n) hit per click.\n const selectedIds = React.useMemo(\n () => new Set(selected.map((s) => s.id)),\n [selected]\n );\n const left = React.useMemo(\n () => source.filter((s) => !selectedIds.has(s.id)),\n [source, selectedIds]\n );\n const right = selected;\n\n const moveRight = () => {\n const toMove = left.filter((i) => leftChecked.has(i.id));\n onChange([...right, ...toMove]);\n setLeftChecked(new Set());\n };\n const moveLeft = () => {\n onChange(right.filter((i) => !rightChecked.has(i.id)));\n setRightChecked(new Set());\n };\n\n const toggleCheck = (set: Set<string>, setSet: (s: Set<string>) => void, id: string) => {\n const next = new Set(set);\n if (next.has(id)) next.delete(id); else next.add(id);\n setSet(next);\n };\n\n const renderColumn = (title: React.ReactNode, items: TransferItem[], checked: Set<string>, setChecked: (s: Set<string>) => void) => (\n <div className=\"transfer__col\">\n <div className=\"transfer__col-head\">\n <span className=\"transfer__col-title\">{title}</span>\n <span className=\"transfer__col-count\">{items.length}</span>\n </div>\n <ul className=\"transfer__list\" role=\"listbox\" aria-label={typeof title === 'string' ? title : undefined}>\n {items.length === 0 ? (\n <li className=\"transfer__empty\">{t['transfer.empty']}</li>\n ) : items.map((it) => (\n <li\n key={it.id}\n className={cx('transfer__item', checked.has(it.id) && 'is-checked', it.disabled && 'is-disabled')}\n role=\"option\"\n aria-selected={checked.has(it.id)}\n onClick={() => !it.disabled && toggleCheck(checked, setChecked, it.id)}\n >\n <span onClick={(e) => e.stopPropagation()}>\n <Checkbox\n checked={checked.has(it.id)}\n disabled={it.disabled}\n onChange={() => toggleCheck(checked, setChecked, it.id)}\n />\n </span>\n <div className=\"transfer__item-body\">\n <div>{it.label}</div>\n {it.description && <div className=\"transfer__item-desc\">{it.description}</div>}\n </div>\n </li>\n ))}\n </ul>\n </div>\n );\n\n return (\n <div className={cx('transfer', className)}>\n {renderColumn(srcTitle, left, leftChecked, setLeftChecked)}\n <div className=\"transfer__controls\">\n <button type=\"button\" className=\"btn btn--outline btn--sm\" disabled={leftChecked.size === 0} onClick={moveRight} aria-label={t['transfer.assignSelected']}>\n <ChevronRight size={16} />\n </button>\n <button type=\"button\" className=\"btn btn--outline btn--sm\" disabled={rightChecked.size === 0} onClick={moveLeft} aria-label={t['transfer.removeSelected']}>\n <ChevronLeft size={16} />\n </button>\n </div>\n {renderColumn(selTitle, right, rightChecked, setRightChecked)}\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/Editing.tsx"],"names":["React","useLocale","jsx","Modal","jsxs","Fragment","cx","Checkbox","ChevronRight","ChevronLeft"],"mappings":"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","file":"chunk-YHRNSINQ.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { Modal } from './Overlay';\nimport { ChevronLeft, ChevronRight } from './Icons';\nimport { Checkbox } from './Form';\nimport { useLocale } from '../locale/LocaleProvider';\n\n// ---------- ConfirmDialog -----------------------------------------------\nexport interface ConfirmDialogProps {\n open: boolean;\n onClose: () => void;\n onConfirm: () => void | Promise<void>;\n title: React.ReactNode;\n description?: React.ReactNode;\n confirmLabel?: React.ReactNode;\n cancelLabel?: React.ReactNode;\n /** 'danger' usa botón rojo. */\n tone?: 'default' | 'danger';\n /** Si true, deshabilita el confirm mientras se ejecuta. */\n loading?: boolean;\n}\n\nexport function ConfirmDialog({\n open, onClose, onConfirm, title, description,\n confirmLabel, cancelLabel,\n tone = 'default', loading,\n}: ConfirmDialogProps) {\n const [busy, setBusy] = React.useState(false);\n const isBusy = loading ?? busy;\n const t = useLocale();\n const confirmText = confirmLabel ?? t['common.confirm'];\n const cancelText = cancelLabel ?? t['common.cancel'];\n\n const handleConfirm = async () => {\n try {\n setBusy(true);\n await onConfirm();\n onClose();\n } finally {\n setBusy(false);\n }\n };\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n size=\"sm\"\n title={title}\n footer={\n <>\n <button type=\"button\" className=\"btn btn--ghost btn--md\" onClick={onClose} disabled={isBusy}>\n {cancelText}\n </button>\n <button\n type=\"button\"\n className={cx('btn', tone === 'danger' ? 'btn--danger' : 'btn--primary', 'btn--md')}\n onClick={handleConfirm}\n disabled={isBusy}\n aria-busy={isBusy || undefined}\n >\n {isBusy ? <span className=\"spinner spinner--inverse\" aria-hidden=\"true\" /> : null}\n {confirmText}\n </button>\n </>\n }\n >\n {description && <p className=\"confirm__desc\">{description}</p>}\n </Modal>\n );\n}\n\n// ---------- DescriptionList (KeyValue editable) ------------------------\nexport interface DescriptionListItemProps {\n label: React.ReactNode;\n value: React.ReactNode;\n /** Si se pasa, el valor se vuelve editable inline. */\n onEdit?: () => void;\n editable?: boolean;\n}\n\nexport function DescriptionList({ children, className, ...rest }: React.HTMLAttributes<HTMLDListElement>) {\n return <dl className={cx('desc-list', className)} {...rest}>{children}</dl>;\n}\n\nexport function DescriptionListItem({ label, value, onEdit, editable }: DescriptionListItemProps) {\n const t = useLocale();\n return (\n <>\n <dt className=\"desc-list__label\">{label}</dt>\n <dd className=\"desc-list__value\">\n <span>{value}</span>\n {editable && onEdit && (\n <button type=\"button\" className=\"desc-list__edit\" onClick={onEdit}>\n {t['descList.edit']}\n </button>\n )}\n </dd>\n </>\n );\n}\n\n// ---------- DiffViewer (before / after) --------------------------------\nexport interface DiffEntry {\n field: React.ReactNode;\n before: React.ReactNode;\n after: React.ReactNode;\n}\n\nexport interface DiffViewerProps extends React.HTMLAttributes<HTMLDivElement> {\n entries: DiffEntry[];\n}\n\nexport function DiffViewer({ entries, className, ...rest }: DiffViewerProps) {\n const t = useLocale();\n // data-label feeds the mobile stacked layout's ::before pseudo-elements\n // so the \"Antes\" / \"Después\" labels remain i18n-able.\n const beforeLabel = typeof t['diff.before'] === 'string' ? t['diff.before'] : undefined;\n const afterLabel = typeof t['diff.after'] === 'string' ? t['diff.after'] : undefined;\n return (\n <div className={cx('diff', className)} role=\"table\" aria-label={t['diff.label']} {...rest}>\n <div className=\"diff__head\" role=\"row\">\n <div role=\"columnheader\">{t['diff.field']}</div>\n <div role=\"columnheader\">{t['diff.before']}</div>\n <div role=\"columnheader\">{t['diff.after']}</div>\n </div>\n {entries.map((e, i) => (\n <div key={i} className=\"diff__row\" role=\"row\">\n <div className=\"diff__field\" role=\"cell\">{e.field}</div>\n <div className=\"diff__before\" role=\"cell\" data-label={beforeLabel}><del>{e.before}</del></div>\n <div className=\"diff__after\" role=\"cell\" data-label={afterLabel}><ins>{e.after}</ins></div>\n </div>\n ))}\n </div>\n );\n}\n\n// ---------- TransferList (dual list select) ----------------------------\nexport interface TransferItem {\n id: string;\n label: React.ReactNode;\n description?: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface TransferListProps {\n source: TransferItem[];\n selected: TransferItem[];\n onChange: (selected: TransferItem[]) => void;\n sourceTitle?: React.ReactNode;\n selectedTitle?: React.ReactNode;\n className?: string;\n}\n\nexport function TransferList({\n source, selected, onChange,\n sourceTitle, selectedTitle,\n className,\n}: TransferListProps) {\n const [leftChecked, setLeftChecked] = React.useState<Set<string>>(new Set());\n const [rightChecked, setRightChecked] = React.useState<Set<string>>(new Set());\n const t = useLocale();\n const srcTitle = sourceTitle ?? t['transfer.available'];\n const selTitle = selectedTitle ?? t['transfer.assigned'];\n\n // Without memo, every checkbox click rebuilt selectedIds and re-filtered\n // `source` to compute `left`. At ~500 source items that's a measurable\n // O(n) hit per click.\n const selectedIds = React.useMemo(\n () => new Set(selected.map((s) => s.id)),\n [selected]\n );\n const left = React.useMemo(\n () => source.filter((s) => !selectedIds.has(s.id)),\n [source, selectedIds]\n );\n const right = selected;\n\n const moveRight = () => {\n const toMove = left.filter((i) => leftChecked.has(i.id));\n onChange([...right, ...toMove]);\n setLeftChecked(new Set());\n };\n const moveLeft = () => {\n onChange(right.filter((i) => !rightChecked.has(i.id)));\n setRightChecked(new Set());\n };\n\n const toggleCheck = (set: Set<string>, setSet: (s: Set<string>) => void, id: string) => {\n const next = new Set(set);\n if (next.has(id)) next.delete(id); else next.add(id);\n setSet(next);\n };\n\n const renderColumn = (title: React.ReactNode, items: TransferItem[], checked: Set<string>, setChecked: (s: Set<string>) => void) => (\n <div className=\"transfer__col\">\n <div className=\"transfer__col-head\">\n <span className=\"transfer__col-title\">{title}</span>\n <span className=\"transfer__col-count\">{items.length}</span>\n </div>\n <ul className=\"transfer__list\" role=\"listbox\" aria-label={typeof title === 'string' ? title : undefined}>\n {items.length === 0 ? (\n <li className=\"transfer__empty\">{t['transfer.empty']}</li>\n ) : items.map((it) => (\n <li\n key={it.id}\n className={cx('transfer__item', checked.has(it.id) && 'is-checked', it.disabled && 'is-disabled')}\n role=\"option\"\n aria-selected={checked.has(it.id)}\n onClick={() => !it.disabled && toggleCheck(checked, setChecked, it.id)}\n >\n <span onClick={(e) => e.stopPropagation()}>\n <Checkbox\n checked={checked.has(it.id)}\n disabled={it.disabled}\n onChange={() => toggleCheck(checked, setChecked, it.id)}\n />\n </span>\n <div className=\"transfer__item-body\">\n <div>{it.label}</div>\n {it.description && <div className=\"transfer__item-desc\">{it.description}</div>}\n </div>\n </li>\n ))}\n </ul>\n </div>\n );\n\n return (\n <div className={cx('transfer', className)}>\n {renderColumn(srcTitle, left, leftChecked, setLeftChecked)}\n <div className=\"transfer__controls\">\n <button type=\"button\" className=\"btn btn--outline btn--sm\" disabled={leftChecked.size === 0} onClick={moveRight} aria-label={t['transfer.assignSelected']}>\n <ChevronRight size={16} />\n </button>\n <button type=\"button\" className=\"btn btn--outline btn--sm\" disabled={rightChecked.size === 0} onClick={moveLeft} aria-label={t['transfer.removeSelected']}>\n <ChevronLeft size={16} />\n </button>\n </div>\n {renderColumn(selTitle, right, rightChecked, setRightChecked)}\n </div>\n );\n}\n"]}
@@ -1,10 +1,10 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunkCWP6W6BU_js = require('./chunk-CWP6W6BU.js');
4
+ var chunkAGMDYCGG_js = require('./chunk-AGMDYCGG.js');
5
5
  var chunkMVJITG75_js = require('./chunk-MVJITG75.js');
6
6
  var chunkU6ZXX4WF_js = require('./chunk-U6ZXX4WF.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');
@@ -32,7 +32,7 @@ var React__namespace = /*#__PURE__*/_interopNamespace(React);
32
32
  function UserCell({ name, meta, avatarSrc, avatarAlt, size = 32, className, ...rest }) {
33
33
  const initialsName = typeof name === "string" ? name : void 0;
34
34
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkPASF6T4H_js.cx("user-cell", className), ...rest, children: [
35
- /* @__PURE__ */ jsxRuntime.jsx(chunkCWP6W6BU_js.Avatar, { src: avatarSrc, alt: avatarAlt, name: initialsName, size }),
35
+ /* @__PURE__ */ jsxRuntime.jsx(chunkAGMDYCGG_js.Avatar, { src: avatarSrc, alt: avatarAlt, name: initialsName, size }),
36
36
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "user-cell__body", children: [
37
37
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "user-cell__name", children: name }),
38
38
  meta && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "user-cell__meta", children: meta })
@@ -244,7 +244,7 @@ function TreeNode({
244
244
  e.stopPropagation();
245
245
  toggle(node.id);
246
246
  },
247
- children: isOpen ? /* @__PURE__ */ jsxRuntime.jsx(chunk3HA3VO2I_js.ChevronDown, { size: 14 }) : /* @__PURE__ */ jsxRuntime.jsx(chunk3HA3VO2I_js.ChevronRight, { size: 14 })
247
+ children: isOpen ? /* @__PURE__ */ jsxRuntime.jsx(chunkC4AKMVDZ_js.ChevronDown, { size: 14 }) : /* @__PURE__ */ jsxRuntime.jsx(chunkC4AKMVDZ_js.ChevronRight, { size: 14 })
248
248
  }
249
249
  ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tree__chev tree__chev--placeholder", "aria-hidden": "true" }),
250
250
  node.icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tree__icon", "aria-hidden": "true", children: node.icon }),
@@ -301,13 +301,13 @@ function Calendar({ month: monthProp, events = [], onMonthChange, onDayClick, cl
301
301
  }, [events]);
302
302
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkPASF6T4H_js.cx("calendar", className), ...rest, children: [
303
303
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "calendar__head", children: [
304
- /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "calendar__nav", "aria-label": t["calendar.prevMonth"], onClick: () => setMonth(chunkMVJITG75_js.addMonths(month, -1)), children: /* @__PURE__ */ jsxRuntime.jsx(chunk3HA3VO2I_js.ChevronRight, { size: 16, style: { transform: "rotate(180deg)" } }) }),
304
+ /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "calendar__nav", "aria-label": t["calendar.prevMonth"], onClick: () => setMonth(chunkMVJITG75_js.addMonths(month, -1)), children: /* @__PURE__ */ jsxRuntime.jsx(chunkC4AKMVDZ_js.ChevronRight, { size: 16, style: { transform: "rotate(180deg)" } }) }),
305
305
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "calendar__title", children: [
306
306
  months[month.getMonth()],
307
307
  " ",
308
308
  month.getFullYear()
309
309
  ] }),
310
- /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "calendar__nav", "aria-label": t["calendar.nextMonth"], onClick: () => setMonth(chunkMVJITG75_js.addMonths(month, 1)), children: /* @__PURE__ */ jsxRuntime.jsx(chunk3HA3VO2I_js.ChevronRight, { size: 16 }) })
310
+ /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "calendar__nav", "aria-label": t["calendar.nextMonth"], onClick: () => setMonth(chunkMVJITG75_js.addMonths(month, 1)), children: /* @__PURE__ */ jsxRuntime.jsx(chunkC4AKMVDZ_js.ChevronRight, { size: 16 }) })
311
311
  ] }),
312
312
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "calendar__grid calendar__weekdays", children: weekdays.map((w) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "calendar__weekday", children: w }, w)) }),
313
313
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "calendar__grid", children: days.map((d, i) => {
@@ -355,5 +355,5 @@ exports.Timeline = Timeline;
355
355
  exports.TimelineItem = TimelineItem;
356
356
  exports.Tree = Tree;
357
357
  exports.UserCell = UserCell;
358
- //# sourceMappingURL=chunk-U3F5EBK3.js.map
359
- //# sourceMappingURL=chunk-U3F5EBK3.js.map
358
+ //# sourceMappingURL=chunk-ZFFKQLSM.js.map
359
+ //# sourceMappingURL=chunk-ZFFKQLSM.js.map