@misael703/ui 1.24.0 → 1.25.1

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 (203) hide show
  1. package/dist/{chunk-CGOUG3W5.mjs → chunk-24TLFBBQ.mjs} +3 -3
  2. package/dist/{chunk-CGOUG3W5.mjs.map → chunk-24TLFBBQ.mjs.map} +1 -1
  3. package/dist/{chunk-X2DBGT7M.mjs → chunk-2LHXOVX2.mjs} +3 -3
  4. package/dist/{chunk-X2DBGT7M.mjs.map → chunk-2LHXOVX2.mjs.map} +1 -1
  5. package/dist/{chunk-IZELILHK.js → chunk-2T5KZJGY.js} +5 -5
  6. package/dist/{chunk-IZELILHK.js.map → chunk-2T5KZJGY.js.map} +1 -1
  7. package/dist/{chunk-PKCLA2FD.mjs → chunk-2X66MNCR.mjs} +4 -4
  8. package/dist/{chunk-PKCLA2FD.mjs.map → chunk-2X66MNCR.mjs.map} +1 -1
  9. package/dist/{chunk-RQOTH7I7.js → chunk-3HA3VO2I.js} +40 -2
  10. package/dist/chunk-3HA3VO2I.js.map +1 -0
  11. package/dist/{chunk-56NJXIH7.js → chunk-3OT3FROI.js} +6 -6
  12. package/dist/{chunk-56NJXIH7.js.map → chunk-3OT3FROI.js.map} +1 -1
  13. package/dist/{chunk-JUSOPJZW.mjs → chunk-3U6C2BFM.mjs} +3 -3
  14. package/dist/{chunk-JUSOPJZW.mjs.map → chunk-3U6C2BFM.mjs.map} +1 -1
  15. package/dist/{chunk-55TOQMS2.js → chunk-4CPGEYY3.js} +5 -5
  16. package/dist/{chunk-55TOQMS2.js.map → chunk-4CPGEYY3.js.map} +1 -1
  17. package/dist/{chunk-B4I6BMNS.mjs → chunk-4N2PCBGA.mjs} +9 -6
  18. package/dist/chunk-4N2PCBGA.mjs.map +1 -0
  19. package/dist/{chunk-LYM2VPFL.js → chunk-4RHJW6JI.js} +4 -4
  20. package/dist/{chunk-LYM2VPFL.js.map → chunk-4RHJW6JI.js.map} +1 -1
  21. package/dist/{chunk-PRECODB3.js → chunk-5LSPN6Q6.js} +8 -5
  22. package/dist/chunk-5LSPN6Q6.js.map +1 -0
  23. package/dist/{chunk-LVLJ75ND.mjs → chunk-5OMB6FC5.mjs} +3 -3
  24. package/dist/{chunk-LVLJ75ND.mjs.map → chunk-5OMB6FC5.mjs.map} +1 -1
  25. package/dist/{chunk-PRML6VEF.mjs → chunk-5XT2LX3I.mjs} +10 -3
  26. package/dist/chunk-5XT2LX3I.mjs.map +1 -0
  27. package/dist/{chunk-S4YPRJQQ.js → chunk-6BRRRENF.js} +5 -5
  28. package/dist/{chunk-S4YPRJQQ.js.map → chunk-6BRRRENF.js.map} +1 -1
  29. package/dist/{chunk-RHPXE3E7.js → chunk-6DMU73SO.js} +10 -10
  30. package/dist/{chunk-RHPXE3E7.js.map → chunk-6DMU73SO.js.map} +1 -1
  31. package/dist/{chunk-IZ3FMCZ5.js → chunk-6HNR25ID.js} +4 -4
  32. package/dist/{chunk-IZ3FMCZ5.js.map → chunk-6HNR25ID.js.map} +1 -1
  33. package/dist/{chunk-HYUINOPJ.js → chunk-74ALPTUE.js} +4 -4
  34. package/dist/{chunk-HYUINOPJ.js.map → chunk-74ALPTUE.js.map} +1 -1
  35. package/dist/{chunk-RBJRQ44B.mjs → chunk-7IPB5A75.mjs} +3 -3
  36. package/dist/{chunk-RBJRQ44B.mjs.map → chunk-7IPB5A75.mjs.map} +1 -1
  37. package/dist/{chunk-VCBVLG3Q.js → chunk-A6DHNAM7.js} +4 -4
  38. package/dist/{chunk-VCBVLG3Q.js.map → chunk-A6DHNAM7.js.map} +1 -1
  39. package/dist/{chunk-2BPYXHGW.mjs → chunk-ADF5YEMJ.mjs} +3 -3
  40. package/dist/{chunk-2BPYXHGW.mjs.map → chunk-ADF5YEMJ.mjs.map} +1 -1
  41. package/dist/{chunk-EJ263Y5X.mjs → chunk-ARGGKLQD.mjs} +3 -3
  42. package/dist/{chunk-EJ263Y5X.mjs.map → chunk-ARGGKLQD.mjs.map} +1 -1
  43. package/dist/{chunk-ADQM725E.js → chunk-AS4NTE2Q.js} +5 -5
  44. package/dist/{chunk-ADQM725E.js.map → chunk-AS4NTE2Q.js.map} +1 -1
  45. package/dist/{chunk-VFZ2X655.mjs → chunk-AZTZAY2S.mjs} +4 -4
  46. package/dist/{chunk-VFZ2X655.mjs.map → chunk-AZTZAY2S.mjs.map} +1 -1
  47. package/dist/{chunk-OJNEGJ3P.mjs → chunk-B4BPE3LC.mjs} +4 -4
  48. package/dist/{chunk-OJNEGJ3P.mjs.map → chunk-B4BPE3LC.mjs.map} +1 -1
  49. package/dist/{chunk-FA6526ME.mjs → chunk-CDX256RG.mjs} +3 -3
  50. package/dist/{chunk-FA6526ME.mjs.map → chunk-CDX256RG.mjs.map} +1 -1
  51. package/dist/{chunk-7I5LFBQR.js → chunk-CRKYET66.js} +10 -3
  52. package/dist/chunk-CRKYET66.js.map +1 -0
  53. package/dist/{chunk-XLLARFVP.mjs → chunk-CUWWADL2.mjs} +4 -4
  54. package/dist/{chunk-XLLARFVP.mjs.map → chunk-CUWWADL2.mjs.map} +1 -1
  55. package/dist/{chunk-U3I4IMJI.js → chunk-CXYZK3TK.js} +6 -6
  56. package/dist/{chunk-U3I4IMJI.js.map → chunk-CXYZK3TK.js.map} +1 -1
  57. package/dist/{chunk-5QQ6BTD5.mjs → chunk-D4K255ZA.mjs} +5 -5
  58. package/dist/{chunk-5QQ6BTD5.mjs.map → chunk-D4K255ZA.mjs.map} +1 -1
  59. package/dist/{chunk-VDBGWTIG.js → chunk-DMMZWL7W.js} +4 -4
  60. package/dist/{chunk-VDBGWTIG.js.map → chunk-DMMZWL7W.js.map} +1 -1
  61. package/dist/{chunk-R6XMFBVH.mjs → chunk-EB4TS7VJ.mjs} +3 -3
  62. package/dist/{chunk-R6XMFBVH.mjs.map → chunk-EB4TS7VJ.mjs.map} +1 -1
  63. package/dist/{chunk-XCZVZVYJ.js → chunk-EFEEQBS3.js} +8 -8
  64. package/dist/{chunk-XCZVZVYJ.js.map → chunk-EFEEQBS3.js.map} +1 -1
  65. package/dist/{chunk-QZACPKQ4.js → chunk-F3O6JAL3.js} +4 -4
  66. package/dist/{chunk-QZACPKQ4.js.map → chunk-F3O6JAL3.js.map} +1 -1
  67. package/dist/{chunk-JYHY3UWA.js → chunk-H7HFKEUI.js} +8 -8
  68. package/dist/{chunk-JYHY3UWA.js.map → chunk-H7HFKEUI.js.map} +1 -1
  69. package/dist/{chunk-L353APIO.js → chunk-HEI6PUMK.js} +4 -4
  70. package/dist/{chunk-L353APIO.js.map → chunk-HEI6PUMK.js.map} +1 -1
  71. package/dist/{chunk-L4JQRY4U.mjs → chunk-I3ADS32J.mjs} +4 -4
  72. package/dist/{chunk-L4JQRY4U.mjs.map → chunk-I3ADS32J.mjs.map} +1 -1
  73. package/dist/{chunk-BCE5WXM6.mjs → chunk-JO5WBKF2.mjs} +5 -5
  74. package/dist/{chunk-BCE5WXM6.mjs.map → chunk-JO5WBKF2.mjs.map} +1 -1
  75. package/dist/{chunk-O72DMPH6.js → chunk-KS7CSKO6.js} +9 -9
  76. package/dist/{chunk-O72DMPH6.js.map → chunk-KS7CSKO6.js.map} +1 -1
  77. package/dist/{chunk-4SEJTTTV.mjs → chunk-LJG3AH7G.mjs} +3 -3
  78. package/dist/{chunk-4SEJTTTV.mjs.map → chunk-LJG3AH7G.mjs.map} +1 -1
  79. package/dist/{chunk-55ITZTLL.js → chunk-LJSNE6YQ.js} +8 -8
  80. package/dist/{chunk-55ITZTLL.js.map → chunk-LJSNE6YQ.js.map} +1 -1
  81. package/dist/{chunk-MJ6UOTWQ.js → chunk-M3RO3GSC.js} +12 -12
  82. package/dist/{chunk-MJ6UOTWQ.js.map → chunk-M3RO3GSC.js.map} +1 -1
  83. package/dist/{chunk-2I7NE7QR.mjs → chunk-MSEDQM7C.mjs} +3 -3
  84. package/dist/{chunk-2I7NE7QR.mjs.map → chunk-MSEDQM7C.mjs.map} +1 -1
  85. package/dist/{chunk-XW7DOPY4.mjs → chunk-MVY4UEFB.mjs} +3 -3
  86. package/dist/{chunk-XW7DOPY4.mjs.map → chunk-MVY4UEFB.mjs.map} +1 -1
  87. package/dist/{chunk-L4ITC2U6.mjs → chunk-NCXODB4O.mjs} +4 -4
  88. package/dist/{chunk-L4ITC2U6.mjs.map → chunk-NCXODB4O.mjs.map} +1 -1
  89. package/dist/{chunk-FGNHN34U.js → chunk-NDMMQZZZ.js} +12 -12
  90. package/dist/{chunk-FGNHN34U.js.map → chunk-NDMMQZZZ.js.map} +1 -1
  91. package/dist/{chunk-MOHWK6FH.js → chunk-OEFOGREP.js} +14 -14
  92. package/dist/{chunk-MOHWK6FH.js.map → chunk-OEFOGREP.js.map} +1 -1
  93. package/dist/{chunk-FS42XEU7.js → chunk-PPU5WKZS.js} +6 -6
  94. package/dist/{chunk-FS42XEU7.js.map → chunk-PPU5WKZS.js.map} +1 -1
  95. package/dist/{chunk-HRDLEOYO.mjs → chunk-PVSP7Y2F.mjs} +4 -4
  96. package/dist/{chunk-HRDLEOYO.mjs.map → chunk-PVSP7Y2F.mjs.map} +1 -1
  97. package/dist/{chunk-BSAHYKPF.js → chunk-Q3DKZR44.js} +5 -5
  98. package/dist/{chunk-BSAHYKPF.js.map → chunk-Q3DKZR44.js.map} +1 -1
  99. package/dist/{chunk-5A3MAGA3.mjs → chunk-QAOFEIG4.mjs} +4 -4
  100. package/dist/{chunk-5A3MAGA3.mjs.map → chunk-QAOFEIG4.mjs.map} +1 -1
  101. package/dist/{chunk-QM7BCSCL.mjs → chunk-RDX3D3P5.mjs} +3 -3
  102. package/dist/{chunk-QM7BCSCL.mjs.map → chunk-RDX3D3P5.mjs.map} +1 -1
  103. package/dist/{chunk-HAZDZYF4.mjs → chunk-SHS4QYYN.mjs} +3 -3
  104. package/dist/{chunk-HAZDZYF4.mjs.map → chunk-SHS4QYYN.mjs.map} +1 -1
  105. package/dist/{chunk-YSU3WFND.mjs → chunk-STZ7YDMR.mjs} +3 -3
  106. package/dist/{chunk-YSU3WFND.mjs.map → chunk-STZ7YDMR.mjs.map} +1 -1
  107. package/dist/{chunk-RCXLCU5A.js → chunk-TCFO7YBF.js} +6 -6
  108. package/dist/{chunk-RCXLCU5A.js.map → chunk-TCFO7YBF.js.map} +1 -1
  109. package/dist/{chunk-4QXDOJ7A.js → chunk-TD732KXM.js} +5 -5
  110. package/dist/{chunk-4QXDOJ7A.js.map → chunk-TD732KXM.js.map} +1 -1
  111. package/dist/{chunk-GVYZAOWU.mjs → chunk-TS3WC3G4.mjs} +3 -3
  112. package/dist/{chunk-GVYZAOWU.mjs.map → chunk-TS3WC3G4.mjs.map} +1 -1
  113. package/dist/{chunk-IKGW7HHG.js → chunk-VAAB5DXM.js} +9 -9
  114. package/dist/{chunk-IKGW7HHG.js.map → chunk-VAAB5DXM.js.map} +1 -1
  115. package/dist/{chunk-CIBJKJV3.mjs → chunk-VHYTJD6Z.mjs} +36 -3
  116. package/dist/chunk-VHYTJD6Z.mjs.map +1 -0
  117. package/dist/{chunk-JT2SFHBH.js → chunk-WGEEYXVZ.js} +4 -4
  118. package/dist/{chunk-JT2SFHBH.js.map → chunk-WGEEYXVZ.js.map} +1 -1
  119. package/dist/{chunk-IOBAPH6I.mjs → chunk-Y6EGYS4L.mjs} +3 -3
  120. package/dist/{chunk-IOBAPH6I.mjs.map → chunk-Y6EGYS4L.mjs.map} +1 -1
  121. package/dist/{chunk-GKSUYHGO.js → chunk-YLISYQNI.js} +4 -4
  122. package/dist/{chunk-GKSUYHGO.js.map → chunk-YLISYQNI.js.map} +1 -1
  123. package/dist/{chunk-ORUQ5GCU.mjs → chunk-ZA2AXUIB.mjs} +3 -3
  124. package/dist/{chunk-ORUQ5GCU.mjs.map → chunk-ZA2AXUIB.mjs.map} +1 -1
  125. package/dist/components/AdvancedPickers.js +7 -7
  126. package/dist/components/AdvancedPickers.mjs +3 -3
  127. package/dist/components/AppShell.js +4 -4
  128. package/dist/components/AppShell.mjs +2 -2
  129. package/dist/components/Carousel.js +3 -3
  130. package/dist/components/Carousel.mjs +2 -2
  131. package/dist/components/Code.js +4 -4
  132. package/dist/components/Code.mjs +2 -2
  133. package/dist/components/Comments.js +7 -7
  134. package/dist/components/Comments.mjs +4 -4
  135. package/dist/components/Commerce.js +14 -14
  136. package/dist/components/Commerce.mjs +3 -3
  137. package/dist/components/ContextMenu.js +3 -3
  138. package/dist/components/ContextMenu.mjs +2 -2
  139. package/dist/components/DataTable.js +10 -10
  140. package/dist/components/DataTable.mjs +4 -4
  141. package/dist/components/Display.js +13 -13
  142. package/dist/components/Display.mjs +2 -2
  143. package/dist/components/Display2.js +7 -7
  144. package/dist/components/Display2.mjs +3 -3
  145. package/dist/components/Display3.js +10 -10
  146. package/dist/components/Display3.mjs +4 -4
  147. package/dist/components/Editing.js +9 -9
  148. package/dist/components/Editing.mjs +4 -4
  149. package/dist/components/Filters.js +8 -8
  150. package/dist/components/Filters.mjs +2 -2
  151. package/dist/components/Form.js +12 -12
  152. package/dist/components/Form.mjs +2 -2
  153. package/dist/components/Gallery.js +4 -4
  154. package/dist/components/Gallery.mjs +2 -2
  155. package/dist/components/HoverCard.js +3 -3
  156. package/dist/components/HoverCard.mjs +2 -2
  157. package/dist/components/Icons.d.mts +6 -1
  158. package/dist/components/Icons.d.ts +6 -1
  159. package/dist/components/Icons.js +87 -67
  160. package/dist/components/Icons.mjs +1 -1
  161. package/dist/components/Inputs.js +6 -6
  162. package/dist/components/Inputs.mjs +2 -2
  163. package/dist/components/InputsExtra.js +11 -11
  164. package/dist/components/InputsExtra.mjs +2 -2
  165. package/dist/components/Layout.js +22 -22
  166. package/dist/components/Layout.mjs +3 -3
  167. package/dist/components/Marketing.js +5 -5
  168. package/dist/components/Marketing.mjs +2 -2
  169. package/dist/components/Menubar.js +3 -3
  170. package/dist/components/Menubar.mjs +2 -2
  171. package/dist/components/NavigationMenu.js +4 -4
  172. package/dist/components/NavigationMenu.mjs +3 -3
  173. package/dist/components/Notifications.js +3 -3
  174. package/dist/components/Notifications.mjs +2 -2
  175. package/dist/components/Overlay.js +4 -4
  176. package/dist/components/Overlay.mjs +2 -2
  177. package/dist/components/Permissions.js +4 -4
  178. package/dist/components/Permissions.mjs +3 -3
  179. package/dist/components/Pickers.js +8 -8
  180. package/dist/components/Pickers.mjs +3 -3
  181. package/dist/components/Popover.js +3 -3
  182. package/dist/components/Popover.mjs +2 -2
  183. package/dist/components/Toast.js +4 -4
  184. package/dist/components/Toast.mjs +2 -2
  185. package/dist/components/Toggle.d.mts +8 -0
  186. package/dist/components/Toggle.d.ts +8 -0
  187. package/dist/components/Toggle.js +6 -6
  188. package/dist/components/Toggle.mjs +1 -1
  189. package/dist/hooks/index.js +2 -2
  190. package/dist/hooks/index.mjs +1 -1
  191. package/dist/hooks/usePopoverPosition.js +2 -2
  192. package/dist/hooks/usePopoverPosition.mjs +1 -1
  193. package/dist/index.d.mts +1 -1
  194. package/dist/index.d.ts +1 -1
  195. package/dist/index.js +247 -227
  196. package/dist/index.mjs +31 -31
  197. package/package.json +1 -1
  198. package/dist/chunk-7I5LFBQR.js.map +0 -1
  199. package/dist/chunk-B4I6BMNS.mjs.map +0 -1
  200. package/dist/chunk-CIBJKJV3.mjs.map +0 -1
  201. package/dist/chunk-PRECODB3.js.map +0 -1
  202. package/dist/chunk-PRML6VEF.mjs.map +0 -1
  203. package/dist/chunk-RQOTH7I7.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Pickers.tsx"],"names":[],"mappings":"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","file":"chunk-L4JQRY4U.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { CalendarIcon, ChevronLeft, ChevronRight, X } from './Icons';\nimport { resolveDateFormat, formatDate, parseDate, dateFormatPlaceholder, startOfMonth, addMonths, isSameDay, buildMonthGrid, type DateFormat } from '../utils/dateFormat';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { Portal } from './Portal';\nimport { usePopoverPosition } from '../hooks/usePopoverPosition';\nimport { useDismiss } from '../hooks/useDismiss';\n\n// ---------- Combobox -----------------------------------------------------\nexport interface ComboboxOption<T = string> {\n value: T;\n label: string;\n description?: string;\n disabled?: boolean;\n}\n\nexport interface ComboboxProps<T = string> {\n value: T | null;\n onChange: (value: T | null) => void;\n options: ComboboxOption<T>[];\n placeholder?: string;\n emptyMessage?: string;\n filter?: (option: ComboboxOption<T>, query: string) => boolean;\n className?: string;\n invalid?: boolean;\n disabled?: boolean;\n id?: string;\n /**\n * Whether the trigger is a typeable text input that filters options.\n * Default `true` (the searchable Combobox). Set `false` for a non-typing\n * picker: button trigger + the same kit-styled listbox, no filter, full\n * list always. Closes the gap between native `<Select>` (jarring native\n * dropdown) and the searchable Combobox — same visual register, no input.\n */\n searchable?: boolean;\n /**\n * Custom renderer for each option's content in the listbox. Receives the\n * option; return any node (e.g. an id `Badge` + the name). Falls back to\n * `label` (+ `description`) when omitted. The searchable input still shows\n * `label` as text — only the listbox rows are customized.\n */\n renderOption?: (option: ComboboxOption<T>) => React.ReactNode;\n}\n\nconst defaultFilter = <T,>(o: ComboboxOption<T>, q: string) =>\n o.label.toLowerCase().includes(q.toLowerCase());\n\nexport function Combobox<T = string>({\n value, onChange, options, placeholder,\n emptyMessage, filter = defaultFilter,\n className, invalid, disabled, id,\n searchable = true, renderOption,\n}: ComboboxProps<T>) {\n const locale = useLocale();\n const ph = placeholder ?? locale['common.search'];\n const empty = emptyMessage ?? locale['common.noResults'];\n const [open, setOpen] = React.useState(false);\n const [query, setQuery] = React.useState('');\n const [active, setActive] = React.useState(0);\n const wrapRef = React.useRef<HTMLDivElement>(null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const listRef = React.useRef<HTMLUListElement>(null);\n // Stable per-instance listbox id so multiple Comboboxes don't collide on aria-controls.\n const reactId = React.useId();\n const listboxId = `${id ?? reactId}-listbox`;\n\n const selected = React.useMemo(\n () => options.find((o) => o.value === value) ?? null,\n [options, value]\n );\n const filtered = React.useMemo(\n () => (query ? options.filter((o) => filter(o, query)) : options),\n [options, query, filter]\n );\n\n const pos = usePopoverPosition(wrapRef, listRef, {\n open,\n side: 'bottom',\n align: 'start',\n offset: 4,\n matchAnchorWidth: true,\n });\n\n // Escape is handled by the input's onKeyDown; here we only need\n // outside-click (closeOnEscape: false avoids a double close).\n useDismiss({\n open,\n onDismiss: () => setOpen(false),\n refs: [wrapRef, listRef],\n closeOnEscape: false,\n });\n\n React.useEffect(() => { setActive(0); }, [query, open]);\n\n const onKey = (e: React.KeyboardEvent<HTMLElement>) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n if (!open) setOpen(true);\n else setActive((a) => Math.min(filtered.length - 1, a + 1));\n } else if (e.key === 'ArrowUp') {\n // Only navigate when the listbox is open (no-op otherwise).\n if (!open) return;\n e.preventDefault();\n setActive((a) => Math.max(0, a - 1));\n } else if (e.key === 'Enter') {\n // Only commit when the listbox is open — without this gate, Enter on\n // a button trigger that just opened would race with the open and\n // immediately select the first option.\n if (!open) return;\n e.preventDefault();\n const opt = filtered[active];\n if (opt && !opt.disabled) {\n onChange(opt.value);\n setQuery('');\n setOpen(false);\n }\n } else if (e.key === 'Escape') {\n setOpen(false);\n }\n };\n\n return (\n <div ref={wrapRef} className={cx('combobox', invalid && 'is-invalid', disabled && 'is-disabled', className)}>\n {searchable ? (\n <input\n ref={inputRef}\n id={id}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={open}\n aria-controls={listboxId}\n className=\"combobox__input\"\n placeholder={ph}\n disabled={disabled}\n value={open ? query : selected?.label ?? ''}\n onFocus={() => setOpen(true)}\n onChange={(e) => { setQuery(e.target.value); setOpen(true); }}\n onKeyDown={onKey}\n />\n ) : (\n // Non-typing trigger: button shaped like `.combobox__input` (same\n // border / radius / chevron) so the two variants line up visually.\n // No clear button — the user re-picks from the listbox instead.\n <button\n id={id}\n type=\"button\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={listboxId}\n className=\"combobox__trigger\"\n disabled={disabled}\n onClick={() => setOpen((o) => !o)}\n onKeyDown={onKey}\n >\n {selected ? (\n <span className=\"combobox__trigger-label\">{selected.label}</span>\n ) : (\n <span className=\"combobox__trigger-placeholder\">{ph}</span>\n )}\n </button>\n )}\n {searchable && selected && !open && (\n <button\n type=\"button\"\n className=\"combobox__clear\"\n onClick={() => { onChange(null); setQuery(''); inputRef.current?.focus(); }}\n aria-label={locale['picker.clearSelection']}\n ><X size={16} /></button>\n )}\n {open && (\n <Portal>\n <ul\n ref={listRef}\n id={listboxId}\n role=\"listbox\"\n className={cx('combobox__list', 'is-floating')}\n style={{\n position: 'fixed',\n top: pos.top,\n left: pos.left,\n width: pos.width,\n visibility: pos.ready ? 'visible' : 'hidden',\n }}\n >\n {filtered.length === 0 ? (\n <li className=\"combobox__empty\">{empty}</li>\n ) : (\n filtered.map((o, i) => (\n <li\n key={String(o.value)}\n role=\"option\"\n aria-selected={o.value === value}\n aria-disabled={o.disabled}\n className={cx('combobox__option', i === active && 'is-active', o.value === value && 'is-selected', o.disabled && 'is-disabled')}\n onMouseEnter={() => setActive(i)}\n onMouseDown={(e) => {\n e.preventDefault();\n if (o.disabled) return;\n onChange(o.value);\n setQuery('');\n setOpen(false);\n }}\n >\n {renderOption ? (\n renderOption(o)\n ) : (\n <>\n <span className=\"combobox__option-label\">{o.label}</span>\n {o.description && <span className=\"combobox__option-desc\">{o.description}</span>}\n </>\n )}\n </li>\n ))\n )}\n </ul>\n </Portal>\n )}\n </div>\n );\n}\n\n// ---------- DatePicker (text + calendar popover) -------------------------\nexport interface DatePickerProps {\n value: Date | null;\n onChange: (date: Date | null) => void;\n minDate?: Date;\n maxDate?: Date;\n placeholder?: string;\n disabled?: boolean;\n invalid?: boolean;\n className?: string;\n id?: string;\n /**\n * Display & parse format. Default `'auto'` derives from `configureBrand().locale`\n * (e.g. `es-CL` → `dd-mm-aaaa`, `en-US` → `mm-dd-aaaa`, `ja-JP` → `aaaa-mm-dd`).\n */\n format?: DateFormat;\n}\n\nexport function DatePicker({\n value, onChange, minDate, maxDate, placeholder,\n disabled, invalid, className, id, format = 'auto',\n}: DatePickerProps) {\n const locale = useLocale();\n const fmt = resolveDateFormat(format);\n const ph = placeholder ?? dateFormatPlaceholder(fmt);\n const weekdays = locale['picker.weekdaysShort'];\n const months = locale['calendar.months'];\n const [open, setOpen] = React.useState(false);\n const [view, setView] = React.useState(() => startOfMonth(value ?? new Date()));\n const wrapRef = React.useRef<HTMLDivElement>(null);\n const popoverRef = React.useRef<HTMLDivElement>(null);\n\n // Portaled to body (escapes overflow ancestors) with flip/clamp and\n // scroll/resize reposition — same primitive as Combobox above. No\n // returnFocusRef: the input opens on focus, so refocusing it on close\n // would immediately reopen the calendar (Combobox omits it for the same\n // reason). Escape still closes via useDismiss's default handler.\n const pos = usePopoverPosition(wrapRef, popoverRef, {\n open,\n side: 'bottom',\n align: 'start',\n offset: 4,\n });\n\n useDismiss({\n open,\n onDismiss: () => setOpen(false),\n refs: [wrapRef, popoverRef],\n });\n\n React.useEffect(() => {\n if (value) setView(startOfMonth(value));\n }, [value]);\n\n const { cells } = buildMonthGrid(view, 0);\n\n const isDisabled = (d: Date) =>\n (minDate && d < new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate())) ||\n (maxDate && d > new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate()));\n\n return (\n <div ref={wrapRef} className={cx('datepicker', invalid && 'is-invalid', disabled && 'is-disabled', className)}>\n <input\n id={id}\n type=\"text\"\n className=\"datepicker__input\"\n placeholder={ph}\n disabled={disabled}\n value={value ? formatDate(value, fmt) : ''}\n onChange={(e) => {\n const d = parseDate(e.target.value, fmt);\n onChange(d);\n }}\n onFocus={() => setOpen(true)}\n aria-invalid={invalid || undefined}\n />\n <button\n type=\"button\"\n className=\"datepicker__toggle\"\n onClick={() => setOpen((o) => !o)}\n disabled={disabled}\n aria-label={locale['picker.openCalendar']}\n ><CalendarIcon size={16} /></button>\n {open && (\n <Portal>\n <div\n ref={popoverRef}\n className={cx('datepicker__popover', 'is-floating')}\n role=\"dialog\"\n style={{\n position: 'fixed',\n top: pos.top,\n left: pos.left,\n visibility: pos.ready ? 'visible' : 'hidden',\n }}\n >\n <div className=\"datepicker__nav\">\n <button type=\"button\" onClick={() => setView((v) => addMonths(v, -1))} aria-label={locale['calendar.prevMonth']}><ChevronLeft size={16} /></button>\n <span className=\"datepicker__title\">{months[view.getMonth()]} {view.getFullYear()}</span>\n <button type=\"button\" onClick={() => setView((v) => addMonths(v, 1))} aria-label={locale['calendar.nextMonth']}><ChevronRight size={16} /></button>\n </div>\n <div className=\"datepicker__grid\">\n {weekdays.map((w, i) => <span key={i} className=\"datepicker__dow\">{w}</span>)}\n {cells.map((d, i) => {\n if (!d) return <span key={`b${i}`} />;\n const sel = value && isSameDay(d, value);\n const today = isSameDay(d, new Date());\n const off = isDisabled(d);\n return (\n <button\n key={i}\n type=\"button\"\n className={cx('datepicker__day', sel && 'is-selected', today && 'is-today', off && 'is-disabled')}\n disabled={!!off}\n onClick={() => { onChange(d); setOpen(false); }}\n >\n {d.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n </Portal>\n )}\n </div>\n );\n}\n\n// ---------- FileUpload (drop zone) ---------------------------------------\nexport interface FileUploadProps {\n onFiles: (files: File[]) => void;\n accept?: string;\n multiple?: boolean;\n maxSize?: number; // bytes\n disabled?: boolean;\n className?: string;\n hint?: React.ReactNode;\n /** Accessible name for the drop zone (e.g. \"Subir foto de perfil\"). */\n 'aria-label'?: string;\n}\n\nexport function FileUpload({\n onFiles, accept, multiple = false, maxSize, disabled, className, hint,\n 'aria-label': ariaLabel,\n}: FileUploadProps) {\n const [drag, setDrag] = React.useState(false);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const hintId = React.useId();\n const locale = useLocale();\n const handle = (list: FileList | null) => {\n if (!list) return;\n let arr = Array.from(list);\n if (maxSize) arr = arr.filter((f) => f.size <= maxSize);\n if (!multiple) arr = arr.slice(0, 1);\n onFiles(arr);\n };\n return (\n <div\n className={cx('file-upload', drag && 'is-drag', disabled && 'is-disabled', className)}\n onDragOver={(e) => { e.preventDefault(); if (!disabled) setDrag(true); }}\n onDragLeave={() => setDrag(false)}\n onDrop={(e) => { e.preventDefault(); setDrag(false); if (!disabled) handle(e.dataTransfer.files); }}\n onClick={() => !disabled && inputRef.current?.click()}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-label={ariaLabel}\n aria-describedby={hint ? hintId : undefined}\n onKeyDown={(e) => { if ((e.key === 'Enter' || e.key === ' ') && !disabled) inputRef.current?.click(); }}\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n hidden\n onChange={(e) => handle(e.target.files)}\n />\n <div className=\"file-upload__icon\" aria-hidden=\"true\">⤴</div>\n <div className=\"file-upload__title\">{locale['fileUpload.title']}</div>\n {hint && <div id={hintId} className=\"file-upload__hint\">{hint}</div>}\n </div>\n );\n}\n\n// ---------- GridPickerField (shared shell: YearPicker / MonthPicker) ------\ninterface GridCell {\n key: string;\n label: React.ReactNode;\n selected?: boolean;\n /** Dimmed (outside the current decade) — YearPicker only. */\n outside?: boolean;\n disabled?: boolean;\n onSelect: () => void;\n}\n\ninterface GridPickerFieldProps {\n rootClass: string;\n displayValue: string;\n placeholder: string;\n ariaLabel: string;\n navTitle: React.ReactNode;\n prevLabel: string;\n nextLabel: string;\n onPrev: () => void;\n onNext: () => void;\n cells: GridCell[];\n disabled?: boolean;\n invalid?: boolean;\n id?: string;\n className?: string;\n}\n\nfunction GridPickerField({\n rootClass, displayValue, placeholder, ariaLabel, navTitle,\n prevLabel, nextLabel, onPrev, onNext, cells,\n disabled, invalid, id, className,\n}: GridPickerFieldProps) {\n const [open, setOpen] = React.useState(false);\n const wrapRef = React.useRef<HTMLDivElement>(null);\n const popoverRef = React.useRef<HTMLDivElement>(null);\n\n // Same floating primitive as DatePicker (Portal + flip/clamp + dismiss).\n const pos = usePopoverPosition(wrapRef, popoverRef, {\n open,\n side: 'bottom',\n align: 'start',\n offset: 4,\n });\n useDismiss({ open, onDismiss: () => setOpen(false), refs: [wrapRef, popoverRef] });\n\n return (\n <div\n ref={wrapRef}\n className={cx(rootClass, 'gridpicker', invalid && 'is-invalid', disabled && 'is-disabled', className)}\n >\n <input\n id={id}\n type=\"text\"\n readOnly\n className=\"gridpicker__input\"\n placeholder={placeholder}\n disabled={disabled}\n value={displayValue}\n onFocus={() => setOpen(true)}\n onClick={() => setOpen(true)}\n aria-invalid={invalid || undefined}\n />\n <button\n type=\"button\"\n className=\"gridpicker__toggle\"\n onClick={() => setOpen((o) => !o)}\n disabled={disabled}\n aria-label={ariaLabel}\n >\n <CalendarIcon size={16} />\n </button>\n {open && (\n <Portal>\n <div\n ref={popoverRef}\n className={cx('gridpicker__popover', 'is-floating')}\n role=\"dialog\"\n style={{\n position: 'fixed',\n top: pos.top,\n left: pos.left,\n visibility: pos.ready ? 'visible' : 'hidden',\n }}\n >\n <div className=\"gridpicker__nav\">\n <button type=\"button\" onClick={onPrev} aria-label={prevLabel}><ChevronLeft size={16} /></button>\n <span className=\"gridpicker__title\">{navTitle}</span>\n <button type=\"button\" onClick={onNext} aria-label={nextLabel}><ChevronRight size={16} /></button>\n </div>\n <div className=\"gridpicker__grid\">\n {cells.map((c) => (\n <button\n key={c.key}\n type=\"button\"\n className={cx('gridpicker__cell', c.selected && 'is-selected', c.outside && 'is-out')}\n disabled={c.disabled}\n onClick={() => { c.onSelect(); setOpen(false); }}\n >\n {c.label}\n </button>\n ))}\n </div>\n </div>\n </Portal>\n )}\n </div>\n );\n}\n\n// ---------- YearPicker ---------------------------------------------------\nexport interface YearPickerProps {\n value: number | null;\n onChange: (year: number | null) => void;\n minYear?: number;\n maxYear?: number;\n placeholder?: string;\n disabled?: boolean;\n invalid?: boolean;\n id?: string;\n className?: string;\n}\n\nexport function YearPicker({\n value, onChange, minYear, maxYear, placeholder,\n disabled, invalid, id, className,\n}: YearPickerProps) {\n const t = useLocale();\n const base = value ?? new Date().getFullYear();\n const [decade, setDecade] = React.useState(Math.floor(base / 10) * 10);\n\n React.useEffect(() => {\n if (value != null) setDecade(Math.floor(value / 10) * 10);\n }, [value]);\n\n const cells: GridCell[] = Array.from({ length: 12 }, (_, i) => {\n const year = decade - 1 + i;\n return {\n key: String(year),\n label: year,\n selected: value === year,\n outside: year < decade || year > decade + 9,\n disabled: (minYear != null && year < minYear) || (maxYear != null && year > maxYear),\n onSelect: () => onChange(year),\n };\n });\n\n return (\n <GridPickerField\n rootClass=\"yearpicker\"\n displayValue={value != null ? String(value) : ''}\n placeholder={placeholder ?? t['picker.selectYear']}\n ariaLabel={t['picker.openCalendar']}\n navTitle={`${decade}-${decade + 9}`}\n prevLabel={t['picker.prevDecade']}\n nextLabel={t['picker.nextDecade']}\n onPrev={() => setDecade((d) => d - 10)}\n onNext={() => setDecade((d) => d + 10)}\n cells={cells}\n disabled={disabled}\n invalid={invalid}\n id={id}\n className={className}\n />\n );\n}\n\n// ---------- MonthPicker --------------------------------------------------\nexport interface MonthPickerProps {\n value: Date | null;\n onChange: (date: Date | null) => void;\n minDate?: Date;\n maxDate?: Date;\n placeholder?: string;\n disabled?: boolean;\n invalid?: boolean;\n id?: string;\n className?: string;\n}\n\nexport function MonthPicker({\n value, onChange, minDate, maxDate, placeholder,\n disabled, invalid, id, className,\n}: MonthPickerProps) {\n const t = useLocale();\n const months = t['calendar.months'];\n const base = value ?? new Date();\n const [year, setYear] = React.useState(base.getFullYear());\n\n React.useEffect(() => {\n if (value) setYear(value.getFullYear());\n }, [value]);\n\n const monthStart = (y: number, m: number) => new Date(y, m, 1);\n const outOfRange = (m: number) =>\n (minDate != null && monthStart(year, m) < monthStart(minDate.getFullYear(), minDate.getMonth())) ||\n (maxDate != null && monthStart(year, m) > monthStart(maxDate.getFullYear(), maxDate.getMonth()));\n\n const cells: GridCell[] = months.map((name, m) => ({\n key: String(m),\n label: name,\n selected: !!value && value.getFullYear() === year && value.getMonth() === m,\n disabled: outOfRange(m),\n onSelect: () => onChange(new Date(year, m, 1)),\n }));\n\n return (\n <GridPickerField\n rootClass=\"monthpicker\"\n displayValue={value ? `${months[value.getMonth()]} ${value.getFullYear()}` : ''}\n placeholder={placeholder ?? t['picker.selectMonth']}\n ariaLabel={t['picker.openCalendar']}\n navTitle={String(year)}\n prevLabel={t['picker.prevYear']}\n nextLabel={t['picker.nextYear']}\n onPrev={() => setYear((y) => y - 1)}\n onNext={() => setYear((y) => y + 1)}\n cells={cells}\n disabled={disabled}\n invalid={invalid}\n id={id}\n className={className}\n />\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/Pickers.tsx"],"names":[],"mappings":"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","file":"chunk-I3ADS32J.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { CalendarIcon, ChevronLeft, ChevronRight, X } from './Icons';\nimport { resolveDateFormat, formatDate, parseDate, dateFormatPlaceholder, startOfMonth, addMonths, isSameDay, buildMonthGrid, type DateFormat } from '../utils/dateFormat';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { Portal } from './Portal';\nimport { usePopoverPosition } from '../hooks/usePopoverPosition';\nimport { useDismiss } from '../hooks/useDismiss';\n\n// ---------- Combobox -----------------------------------------------------\nexport interface ComboboxOption<T = string> {\n value: T;\n label: string;\n description?: string;\n disabled?: boolean;\n}\n\nexport interface ComboboxProps<T = string> {\n value: T | null;\n onChange: (value: T | null) => void;\n options: ComboboxOption<T>[];\n placeholder?: string;\n emptyMessage?: string;\n filter?: (option: ComboboxOption<T>, query: string) => boolean;\n className?: string;\n invalid?: boolean;\n disabled?: boolean;\n id?: string;\n /**\n * Whether the trigger is a typeable text input that filters options.\n * Default `true` (the searchable Combobox). Set `false` for a non-typing\n * picker: button trigger + the same kit-styled listbox, no filter, full\n * list always. Closes the gap between native `<Select>` (jarring native\n * dropdown) and the searchable Combobox — same visual register, no input.\n */\n searchable?: boolean;\n /**\n * Custom renderer for each option's content in the listbox. Receives the\n * option; return any node (e.g. an id `Badge` + the name). Falls back to\n * `label` (+ `description`) when omitted. The searchable input still shows\n * `label` as text — only the listbox rows are customized.\n */\n renderOption?: (option: ComboboxOption<T>) => React.ReactNode;\n}\n\nconst defaultFilter = <T,>(o: ComboboxOption<T>, q: string) =>\n o.label.toLowerCase().includes(q.toLowerCase());\n\nexport function Combobox<T = string>({\n value, onChange, options, placeholder,\n emptyMessage, filter = defaultFilter,\n className, invalid, disabled, id,\n searchable = true, renderOption,\n}: ComboboxProps<T>) {\n const locale = useLocale();\n const ph = placeholder ?? locale['common.search'];\n const empty = emptyMessage ?? locale['common.noResults'];\n const [open, setOpen] = React.useState(false);\n const [query, setQuery] = React.useState('');\n const [active, setActive] = React.useState(0);\n const wrapRef = React.useRef<HTMLDivElement>(null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const listRef = React.useRef<HTMLUListElement>(null);\n // Stable per-instance listbox id so multiple Comboboxes don't collide on aria-controls.\n const reactId = React.useId();\n const listboxId = `${id ?? reactId}-listbox`;\n\n const selected = React.useMemo(\n () => options.find((o) => o.value === value) ?? null,\n [options, value]\n );\n const filtered = React.useMemo(\n () => (query ? options.filter((o) => filter(o, query)) : options),\n [options, query, filter]\n );\n\n const pos = usePopoverPosition(wrapRef, listRef, {\n open,\n side: 'bottom',\n align: 'start',\n offset: 4,\n matchAnchorWidth: true,\n });\n\n // Escape is handled by the input's onKeyDown; here we only need\n // outside-click (closeOnEscape: false avoids a double close).\n useDismiss({\n open,\n onDismiss: () => setOpen(false),\n refs: [wrapRef, listRef],\n closeOnEscape: false,\n });\n\n React.useEffect(() => { setActive(0); }, [query, open]);\n\n const onKey = (e: React.KeyboardEvent<HTMLElement>) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n if (!open) setOpen(true);\n else setActive((a) => Math.min(filtered.length - 1, a + 1));\n } else if (e.key === 'ArrowUp') {\n // Only navigate when the listbox is open (no-op otherwise).\n if (!open) return;\n e.preventDefault();\n setActive((a) => Math.max(0, a - 1));\n } else if (e.key === 'Enter') {\n // Only commit when the listbox is open — without this gate, Enter on\n // a button trigger that just opened would race with the open and\n // immediately select the first option.\n if (!open) return;\n e.preventDefault();\n const opt = filtered[active];\n if (opt && !opt.disabled) {\n onChange(opt.value);\n setQuery('');\n setOpen(false);\n }\n } else if (e.key === 'Escape') {\n setOpen(false);\n }\n };\n\n return (\n <div ref={wrapRef} className={cx('combobox', invalid && 'is-invalid', disabled && 'is-disabled', className)}>\n {searchable ? (\n <input\n ref={inputRef}\n id={id}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={open}\n aria-controls={listboxId}\n className=\"combobox__input\"\n placeholder={ph}\n disabled={disabled}\n value={open ? query : selected?.label ?? ''}\n onFocus={() => setOpen(true)}\n onChange={(e) => { setQuery(e.target.value); setOpen(true); }}\n onKeyDown={onKey}\n />\n ) : (\n // Non-typing trigger: button shaped like `.combobox__input` (same\n // border / radius / chevron) so the two variants line up visually.\n // No clear button — the user re-picks from the listbox instead.\n <button\n id={id}\n type=\"button\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={listboxId}\n className=\"combobox__trigger\"\n disabled={disabled}\n onClick={() => setOpen((o) => !o)}\n onKeyDown={onKey}\n >\n {selected ? (\n <span className=\"combobox__trigger-label\">{selected.label}</span>\n ) : (\n <span className=\"combobox__trigger-placeholder\">{ph}</span>\n )}\n </button>\n )}\n {searchable && selected && !open && (\n <button\n type=\"button\"\n className=\"combobox__clear\"\n onClick={() => { onChange(null); setQuery(''); inputRef.current?.focus(); }}\n aria-label={locale['picker.clearSelection']}\n ><X size={16} /></button>\n )}\n {open && (\n <Portal>\n <ul\n ref={listRef}\n id={listboxId}\n role=\"listbox\"\n className={cx('combobox__list', 'is-floating')}\n style={{\n position: 'fixed',\n top: pos.top,\n left: pos.left,\n width: pos.width,\n visibility: pos.ready ? 'visible' : 'hidden',\n }}\n >\n {filtered.length === 0 ? (\n <li className=\"combobox__empty\">{empty}</li>\n ) : (\n filtered.map((o, i) => (\n <li\n key={String(o.value)}\n role=\"option\"\n aria-selected={o.value === value}\n aria-disabled={o.disabled}\n className={cx('combobox__option', i === active && 'is-active', o.value === value && 'is-selected', o.disabled && 'is-disabled')}\n onMouseEnter={() => setActive(i)}\n onMouseDown={(e) => {\n e.preventDefault();\n if (o.disabled) return;\n onChange(o.value);\n setQuery('');\n setOpen(false);\n }}\n >\n {renderOption ? (\n renderOption(o)\n ) : (\n <>\n <span className=\"combobox__option-label\">{o.label}</span>\n {o.description && <span className=\"combobox__option-desc\">{o.description}</span>}\n </>\n )}\n </li>\n ))\n )}\n </ul>\n </Portal>\n )}\n </div>\n );\n}\n\n// ---------- DatePicker (text + calendar popover) -------------------------\nexport interface DatePickerProps {\n value: Date | null;\n onChange: (date: Date | null) => void;\n minDate?: Date;\n maxDate?: Date;\n placeholder?: string;\n disabled?: boolean;\n invalid?: boolean;\n className?: string;\n id?: string;\n /**\n * Display & parse format. Default `'auto'` derives from `configureBrand().locale`\n * (e.g. `es-CL` → `dd-mm-aaaa`, `en-US` → `mm-dd-aaaa`, `ja-JP` → `aaaa-mm-dd`).\n */\n format?: DateFormat;\n}\n\nexport function DatePicker({\n value, onChange, minDate, maxDate, placeholder,\n disabled, invalid, className, id, format = 'auto',\n}: DatePickerProps) {\n const locale = useLocale();\n const fmt = resolveDateFormat(format);\n const ph = placeholder ?? dateFormatPlaceholder(fmt);\n const weekdays = locale['picker.weekdaysShort'];\n const months = locale['calendar.months'];\n const [open, setOpen] = React.useState(false);\n const [view, setView] = React.useState(() => startOfMonth(value ?? new Date()));\n const wrapRef = React.useRef<HTMLDivElement>(null);\n const popoverRef = React.useRef<HTMLDivElement>(null);\n\n // Portaled to body (escapes overflow ancestors) with flip/clamp and\n // scroll/resize reposition — same primitive as Combobox above. No\n // returnFocusRef: the input opens on focus, so refocusing it on close\n // would immediately reopen the calendar (Combobox omits it for the same\n // reason). Escape still closes via useDismiss's default handler.\n const pos = usePopoverPosition(wrapRef, popoverRef, {\n open,\n side: 'bottom',\n align: 'start',\n offset: 4,\n });\n\n useDismiss({\n open,\n onDismiss: () => setOpen(false),\n refs: [wrapRef, popoverRef],\n });\n\n React.useEffect(() => {\n if (value) setView(startOfMonth(value));\n }, [value]);\n\n const { cells } = buildMonthGrid(view, 0);\n\n const isDisabled = (d: Date) =>\n (minDate && d < new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate())) ||\n (maxDate && d > new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate()));\n\n return (\n <div ref={wrapRef} className={cx('datepicker', invalid && 'is-invalid', disabled && 'is-disabled', className)}>\n <input\n id={id}\n type=\"text\"\n className=\"datepicker__input\"\n placeholder={ph}\n disabled={disabled}\n value={value ? formatDate(value, fmt) : ''}\n onChange={(e) => {\n const d = parseDate(e.target.value, fmt);\n onChange(d);\n }}\n onFocus={() => setOpen(true)}\n aria-invalid={invalid || undefined}\n />\n <button\n type=\"button\"\n className=\"datepicker__toggle\"\n onClick={() => setOpen((o) => !o)}\n disabled={disabled}\n aria-label={locale['picker.openCalendar']}\n ><CalendarIcon size={16} /></button>\n {open && (\n <Portal>\n <div\n ref={popoverRef}\n className={cx('datepicker__popover', 'is-floating')}\n role=\"dialog\"\n style={{\n position: 'fixed',\n top: pos.top,\n left: pos.left,\n visibility: pos.ready ? 'visible' : 'hidden',\n }}\n >\n <div className=\"datepicker__nav\">\n <button type=\"button\" onClick={() => setView((v) => addMonths(v, -1))} aria-label={locale['calendar.prevMonth']}><ChevronLeft size={16} /></button>\n <span className=\"datepicker__title\">{months[view.getMonth()]} {view.getFullYear()}</span>\n <button type=\"button\" onClick={() => setView((v) => addMonths(v, 1))} aria-label={locale['calendar.nextMonth']}><ChevronRight size={16} /></button>\n </div>\n <div className=\"datepicker__grid\">\n {weekdays.map((w, i) => <span key={i} className=\"datepicker__dow\">{w}</span>)}\n {cells.map((d, i) => {\n if (!d) return <span key={`b${i}`} />;\n const sel = value && isSameDay(d, value);\n const today = isSameDay(d, new Date());\n const off = isDisabled(d);\n return (\n <button\n key={i}\n type=\"button\"\n className={cx('datepicker__day', sel && 'is-selected', today && 'is-today', off && 'is-disabled')}\n disabled={!!off}\n onClick={() => { onChange(d); setOpen(false); }}\n >\n {d.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n </Portal>\n )}\n </div>\n );\n}\n\n// ---------- FileUpload (drop zone) ---------------------------------------\nexport interface FileUploadProps {\n onFiles: (files: File[]) => void;\n accept?: string;\n multiple?: boolean;\n maxSize?: number; // bytes\n disabled?: boolean;\n className?: string;\n hint?: React.ReactNode;\n /** Accessible name for the drop zone (e.g. \"Subir foto de perfil\"). */\n 'aria-label'?: string;\n}\n\nexport function FileUpload({\n onFiles, accept, multiple = false, maxSize, disabled, className, hint,\n 'aria-label': ariaLabel,\n}: FileUploadProps) {\n const [drag, setDrag] = React.useState(false);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const hintId = React.useId();\n const locale = useLocale();\n const handle = (list: FileList | null) => {\n if (!list) return;\n let arr = Array.from(list);\n if (maxSize) arr = arr.filter((f) => f.size <= maxSize);\n if (!multiple) arr = arr.slice(0, 1);\n onFiles(arr);\n };\n return (\n <div\n className={cx('file-upload', drag && 'is-drag', disabled && 'is-disabled', className)}\n onDragOver={(e) => { e.preventDefault(); if (!disabled) setDrag(true); }}\n onDragLeave={() => setDrag(false)}\n onDrop={(e) => { e.preventDefault(); setDrag(false); if (!disabled) handle(e.dataTransfer.files); }}\n onClick={() => !disabled && inputRef.current?.click()}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-label={ariaLabel}\n aria-describedby={hint ? hintId : undefined}\n onKeyDown={(e) => { if ((e.key === 'Enter' || e.key === ' ') && !disabled) inputRef.current?.click(); }}\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n hidden\n onChange={(e) => handle(e.target.files)}\n />\n <div className=\"file-upload__icon\" aria-hidden=\"true\">⤴</div>\n <div className=\"file-upload__title\">{locale['fileUpload.title']}</div>\n {hint && <div id={hintId} className=\"file-upload__hint\">{hint}</div>}\n </div>\n );\n}\n\n// ---------- GridPickerField (shared shell: YearPicker / MonthPicker) ------\ninterface GridCell {\n key: string;\n label: React.ReactNode;\n selected?: boolean;\n /** Dimmed (outside the current decade) — YearPicker only. */\n outside?: boolean;\n disabled?: boolean;\n onSelect: () => void;\n}\n\ninterface GridPickerFieldProps {\n rootClass: string;\n displayValue: string;\n placeholder: string;\n ariaLabel: string;\n navTitle: React.ReactNode;\n prevLabel: string;\n nextLabel: string;\n onPrev: () => void;\n onNext: () => void;\n cells: GridCell[];\n disabled?: boolean;\n invalid?: boolean;\n id?: string;\n className?: string;\n}\n\nfunction GridPickerField({\n rootClass, displayValue, placeholder, ariaLabel, navTitle,\n prevLabel, nextLabel, onPrev, onNext, cells,\n disabled, invalid, id, className,\n}: GridPickerFieldProps) {\n const [open, setOpen] = React.useState(false);\n const wrapRef = React.useRef<HTMLDivElement>(null);\n const popoverRef = React.useRef<HTMLDivElement>(null);\n\n // Same floating primitive as DatePicker (Portal + flip/clamp + dismiss).\n const pos = usePopoverPosition(wrapRef, popoverRef, {\n open,\n side: 'bottom',\n align: 'start',\n offset: 4,\n });\n useDismiss({ open, onDismiss: () => setOpen(false), refs: [wrapRef, popoverRef] });\n\n return (\n <div\n ref={wrapRef}\n className={cx(rootClass, 'gridpicker', invalid && 'is-invalid', disabled && 'is-disabled', className)}\n >\n <input\n id={id}\n type=\"text\"\n readOnly\n className=\"gridpicker__input\"\n placeholder={placeholder}\n disabled={disabled}\n value={displayValue}\n onFocus={() => setOpen(true)}\n onClick={() => setOpen(true)}\n aria-invalid={invalid || undefined}\n />\n <button\n type=\"button\"\n className=\"gridpicker__toggle\"\n onClick={() => setOpen((o) => !o)}\n disabled={disabled}\n aria-label={ariaLabel}\n >\n <CalendarIcon size={16} />\n </button>\n {open && (\n <Portal>\n <div\n ref={popoverRef}\n className={cx('gridpicker__popover', 'is-floating')}\n role=\"dialog\"\n style={{\n position: 'fixed',\n top: pos.top,\n left: pos.left,\n visibility: pos.ready ? 'visible' : 'hidden',\n }}\n >\n <div className=\"gridpicker__nav\">\n <button type=\"button\" onClick={onPrev} aria-label={prevLabel}><ChevronLeft size={16} /></button>\n <span className=\"gridpicker__title\">{navTitle}</span>\n <button type=\"button\" onClick={onNext} aria-label={nextLabel}><ChevronRight size={16} /></button>\n </div>\n <div className=\"gridpicker__grid\">\n {cells.map((c) => (\n <button\n key={c.key}\n type=\"button\"\n className={cx('gridpicker__cell', c.selected && 'is-selected', c.outside && 'is-out')}\n disabled={c.disabled}\n onClick={() => { c.onSelect(); setOpen(false); }}\n >\n {c.label}\n </button>\n ))}\n </div>\n </div>\n </Portal>\n )}\n </div>\n );\n}\n\n// ---------- YearPicker ---------------------------------------------------\nexport interface YearPickerProps {\n value: number | null;\n onChange: (year: number | null) => void;\n minYear?: number;\n maxYear?: number;\n placeholder?: string;\n disabled?: boolean;\n invalid?: boolean;\n id?: string;\n className?: string;\n}\n\nexport function YearPicker({\n value, onChange, minYear, maxYear, placeholder,\n disabled, invalid, id, className,\n}: YearPickerProps) {\n const t = useLocale();\n const base = value ?? new Date().getFullYear();\n const [decade, setDecade] = React.useState(Math.floor(base / 10) * 10);\n\n React.useEffect(() => {\n if (value != null) setDecade(Math.floor(value / 10) * 10);\n }, [value]);\n\n const cells: GridCell[] = Array.from({ length: 12 }, (_, i) => {\n const year = decade - 1 + i;\n return {\n key: String(year),\n label: year,\n selected: value === year,\n outside: year < decade || year > decade + 9,\n disabled: (minYear != null && year < minYear) || (maxYear != null && year > maxYear),\n onSelect: () => onChange(year),\n };\n });\n\n return (\n <GridPickerField\n rootClass=\"yearpicker\"\n displayValue={value != null ? String(value) : ''}\n placeholder={placeholder ?? t['picker.selectYear']}\n ariaLabel={t['picker.openCalendar']}\n navTitle={`${decade}-${decade + 9}`}\n prevLabel={t['picker.prevDecade']}\n nextLabel={t['picker.nextDecade']}\n onPrev={() => setDecade((d) => d - 10)}\n onNext={() => setDecade((d) => d + 10)}\n cells={cells}\n disabled={disabled}\n invalid={invalid}\n id={id}\n className={className}\n />\n );\n}\n\n// ---------- MonthPicker --------------------------------------------------\nexport interface MonthPickerProps {\n value: Date | null;\n onChange: (date: Date | null) => void;\n minDate?: Date;\n maxDate?: Date;\n placeholder?: string;\n disabled?: boolean;\n invalid?: boolean;\n id?: string;\n className?: string;\n}\n\nexport function MonthPicker({\n value, onChange, minDate, maxDate, placeholder,\n disabled, invalid, id, className,\n}: MonthPickerProps) {\n const t = useLocale();\n const months = t['calendar.months'];\n const base = value ?? new Date();\n const [year, setYear] = React.useState(base.getFullYear());\n\n React.useEffect(() => {\n if (value) setYear(value.getFullYear());\n }, [value]);\n\n const monthStart = (y: number, m: number) => new Date(y, m, 1);\n const outOfRange = (m: number) =>\n (minDate != null && monthStart(year, m) < monthStart(minDate.getFullYear(), minDate.getMonth())) ||\n (maxDate != null && monthStart(year, m) > monthStart(maxDate.getFullYear(), maxDate.getMonth()));\n\n const cells: GridCell[] = months.map((name, m) => ({\n key: String(m),\n label: name,\n selected: !!value && value.getFullYear() === year && value.getMonth() === m,\n disabled: outOfRange(m),\n onSelect: () => onChange(new Date(year, m, 1)),\n }));\n\n return (\n <GridPickerField\n rootClass=\"monthpicker\"\n displayValue={value ? `${months[value.getMonth()]} ${value.getFullYear()}` : ''}\n placeholder={placeholder ?? t['picker.selectMonth']}\n ariaLabel={t['picker.openCalendar']}\n navTitle={String(year)}\n prevLabel={t['picker.prevYear']}\n nextLabel={t['picker.nextYear']}\n onPrev={() => setYear((y) => y - 1)}\n onNext={() => setYear((y) => y + 1)}\n cells={cells}\n disabled={disabled}\n invalid={invalid}\n id={id}\n className={className}\n />\n );\n}\n"]}
@@ -1,8 +1,8 @@
1
1
  'use client';
2
- import { Modal } from './chunk-JUSOPJZW.mjs';
3
- import { Checkbox } from './chunk-GVYZAOWU.mjs';
2
+ import { Modal } from './chunk-3U6C2BFM.mjs';
3
+ import { Checkbox } from './chunk-TS3WC3G4.mjs';
4
4
  import { useLocale } from './chunk-PQV7HHCJ.mjs';
5
- import { ChevronRight, ChevronLeft } from './chunk-CIBJKJV3.mjs';
5
+ import { ChevronRight, ChevronLeft } from './chunk-VHYTJD6Z.mjs';
6
6
  import { cx } from './chunk-IEPCH3JB.mjs';
7
7
  import * as React from 'react';
8
8
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -168,5 +168,5 @@ function TransferList({
168
168
  }
169
169
 
170
170
  export { ConfirmDialog, DescriptionList, DescriptionListItem, DiffViewer, TransferList };
171
- //# sourceMappingURL=chunk-BCE5WXM6.mjs.map
172
- //# sourceMappingURL=chunk-BCE5WXM6.mjs.map
171
+ //# sourceMappingURL=chunk-JO5WBKF2.mjs.map
172
+ //# sourceMappingURL=chunk-JO5WBKF2.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Editing.tsx"],"names":[],"mappings":";;;;;;;;AAuBO,SAAS,aAAA,CAAc;AAAA,EAC5B,IAAA;AAAA,EAAM,OAAA;AAAA,EAAS,SAAA;AAAA,EAAW,KAAA;AAAA,EAAO,WAAA;AAAA,EACjC,YAAA;AAAA,EAAc,WAAA;AAAA,EACd,IAAA,GAAO,SAAA;AAAA,EAAW;AACpB,CAAA,EAAuB;AACrB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAU,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,SAAS,OAAA,IAAW,IAAA;AAC1B,EAAA,MAAM,IAAI,SAAA,EAAU;AACpB,EAAA,MAAM,WAAA,GAAc,YAAA,IAAgB,CAAA,CAAE,gBAAgB,CAAA;AACtD,EAAA,MAAM,UAAA,GAAa,WAAA,IAAe,CAAA,CAAE,eAAe,CAAA;AAEnD,EAAA,MAAM,gBAAgB,YAAY;AAChC,IAAA,IAAI;AACF,MAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,MAAA,MAAM,SAAA,EAAU;AAChB,MAAA,OAAA,EAAQ;AAAA,IACV,CAAA,SAAE;AACA,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf;AAAA,EACF,CAAA;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,OAAA;AAAA,MACA,IAAA,EAAK,IAAA;AAAA,MACL,KAAA;AAAA,MACA,wBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,QAAA,EAAA,EAAO,MAAK,QAAA,EAAS,SAAA,EAAU,0BAAyB,OAAA,EAAS,OAAA,EAAS,QAAA,EAAU,MAAA,EAClF,QAAA,EAAA,UAAA,EACH,CAAA;AAAA,wBACA,IAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,WAAW,EAAA,CAAG,KAAA,EAAO,SAAS,QAAA,GAAW,aAAA,GAAgB,gBAAgB,SAAS,CAAA;AAAA,YAClF,OAAA,EAAS,aAAA;AAAA,YACT,QAAA,EAAU,MAAA;AAAA,YACV,aAAW,MAAA,IAAU,MAAA;AAAA,YAEpB,QAAA,EAAA;AAAA,cAAA,MAAA,uBAAU,MAAA,EAAA,EAAK,SAAA,EAAU,0BAAA,EAA2B,aAAA,EAAY,QAAO,CAAA,GAAK,IAAA;AAAA,cAC5E;AAAA;AAAA;AAAA;AACH,OAAA,EACF,CAAA;AAAA,MAGD,QAAA,EAAA,WAAA,oBAAe,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iBAAiB,QAAA,EAAA,WAAA,EAAY;AAAA;AAAA,GAC5D;AAEJ;AAWO,SAAS,gBAAgB,EAAE,QAAA,EAAU,SAAA,EAAW,GAAG,MAAK,EAA2C;AACxG,EAAA,uBAAO,GAAA,CAAC,QAAG,SAAA,EAAW,EAAA,CAAG,aAAa,SAAS,CAAA,EAAI,GAAG,IAAA,EAAO,QAAA,EAAS,CAAA;AACxE;AAEO,SAAS,oBAAoB,EAAE,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,UAAS,EAA6B;AAChG,EAAA,MAAM,IAAI,SAAA,EAAU;AACpB,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,kBAAA,EAAoB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBACxC,IAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,kBAAA,EACZ,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,UAAM,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MACZ,QAAA,IAAY,MAAA,oBACX,GAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAU,iBAAA,EAAkB,OAAA,EAAS,MAAA,EACxD,QAAA,EAAA,CAAA,CAAE,eAAe,CAAA,EACpB;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;AAaO,SAAS,WAAW,EAAE,OAAA,EAAS,SAAA,EAAW,GAAG,MAAK,EAAoB;AAC3E,EAAA,MAAM,IAAI,SAAA,EAAU;AAGpB,EAAA,MAAM,WAAA,GAAc,OAAO,CAAA,CAAE,aAAa,MAAM,QAAA,GAAW,CAAA,CAAE,aAAa,CAAA,GAAI,MAAA;AAC9E,EAAA,MAAM,UAAA,GAAa,OAAO,CAAA,CAAE,YAAY,MAAM,QAAA,GAAW,CAAA,CAAE,YAAY,CAAA,GAAI,MAAA;AAC3E,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,QAAQ,SAAS,CAAA,EAAG,IAAA,EAAK,OAAA,EAAQ,YAAA,EAAY,CAAA,CAAE,YAAY,CAAA,EAAI,GAAG,IAAA,EACnF,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EAAa,IAAA,EAAK,KAAA,EAC/B,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,IAAA,EAAK,cAAA,EAAgB,QAAA,EAAA,CAAA,CAAE,YAAY,CAAA,EAAE,CAAA;AAAA,0BACzC,KAAA,EAAA,EAAI,IAAA,EAAK,cAAA,EAAgB,QAAA,EAAA,CAAA,CAAE,aAAa,CAAA,EAAE,CAAA;AAAA,0BAC1C,KAAA,EAAA,EAAI,IAAA,EAAK,cAAA,EAAgB,QAAA,EAAA,CAAA,CAAE,YAAY,CAAA,EAAE;AAAA,KAAA,EAC5C,CAAA;AAAA,IACC,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,0BACd,KAAA,EAAA,EAAY,SAAA,EAAU,WAAA,EAAY,IAAA,EAAK,KAAA,EACtC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,SAAI,SAAA,EAAU,aAAA,EAAc,IAAA,EAAK,MAAA,EAAQ,YAAE,KAAA,EAAM,CAAA;AAAA,sBAClD,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EAAe,IAAA,EAAK,MAAA,EAAO,YAAA,EAAY,WAAA,EAAa,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAK,QAAA,EAAA,CAAA,CAAE,MAAA,EAAO,CAAA,EAAM,CAAA;AAAA,sBACxF,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAc,IAAA,EAAK,MAAA,EAAO,YAAA,EAAY,UAAA,EAAY,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAK,QAAA,EAAA,CAAA,CAAE,KAAA,EAAM,CAAA,EAAM;AAAA,KAAA,EAAA,EAH7E,CAIV,CACD;AAAA,GAAA,EACH,CAAA;AAEJ;AAmBO,SAAS,YAAA,CAAa;AAAA,EAC3B,MAAA;AAAA,EAAQ,QAAA;AAAA,EAAU,QAAA;AAAA,EAClB,WAAA;AAAA,EAAa,aAAA;AAAA,EACb;AACF,CAAA,EAAsB;AACpB,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,IAAU,KAAA,CAAA,QAAA,iBAAsB,IAAI,KAAK,CAAA;AAC3E,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,IAAU,KAAA,CAAA,QAAA,iBAAsB,IAAI,KAAK,CAAA;AAC7E,EAAA,MAAM,IAAI,SAAA,EAAU;AACpB,EAAA,MAAM,QAAA,GAAW,WAAA,IAAe,CAAA,CAAE,oBAAoB,CAAA;AACtD,EAAA,MAAM,QAAA,GAAW,aAAA,IAAiB,CAAA,CAAE,mBAAmB,CAAA;AAKvD,EAAA,MAAM,WAAA,GAAoB,KAAA,CAAA,OAAA;AAAA,IACxB,MAAM,IAAI,GAAA,CAAI,QAAA,CAAS,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAC,CAAA;AAAA,IACvC,CAAC,QAAQ;AAAA,GACX;AACA,EAAA,MAAM,IAAA,GAAa,KAAA,CAAA,OAAA;AAAA,IACjB,MAAM,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,WAAA,CAAY,GAAA,CAAI,CAAA,CAAE,EAAE,CAAC,CAAA;AAAA,IACjD,CAAC,QAAQ,WAAW;AAAA,GACtB;AACA,EAAA,MAAM,KAAA,GAAQ,QAAA;AAEd,EAAA,MAAM,YAAY,MAAM;AACtB,IAAA,MAAM,MAAA,GAAS,KAAK,MAAA,CAAO,CAAC,MAAM,WAAA,CAAY,GAAA,CAAI,CAAA,CAAE,EAAE,CAAC,CAAA;AACvD,IAAA,QAAA,CAAS,CAAC,GAAG,KAAA,EAAO,GAAG,MAAM,CAAC,CAAA;AAC9B,IAAA,cAAA,iBAAe,IAAI,KAAK,CAAA;AAAA,EAC1B,CAAA;AACA,EAAA,MAAM,WAAW,MAAM;AACrB,IAAA,QAAA,CAAS,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,aAAa,GAAA,CAAI,CAAA,CAAE,EAAE,CAAC,CAAC,CAAA;AACrD,IAAA,eAAA,iBAAgB,IAAI,KAAK,CAAA;AAAA,EAC3B,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,GAAA,EAAkB,MAAA,EAAkC,EAAA,KAAe;AACtF,IAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,GAAG,CAAA;AACxB,IAAA,IAAI,KAAK,GAAA,CAAI,EAAE,CAAA,EAAG,IAAA,CAAK,OAAO,EAAE,CAAA;AAAA,SAAQ,IAAA,CAAK,IAAI,EAAE,CAAA;AACnD,IAAA,MAAA,CAAO,IAAI,CAAA;AAAA,EACb,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,KAAA,EAAwB,KAAA,EAAuB,SAAsB,UAAA,qBACzF,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,oBAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBAC7C,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAuB,gBAAM,MAAA,EAAO;AAAA,KAAA,EACtD,CAAA;AAAA,oBACA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,gBAAA,EAAiB,IAAA,EAAK,SAAA,EAAU,YAAA,EAAY,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,MAAA,EAC3F,QAAA,EAAA,KAAA,CAAM,WAAW,CAAA,mBAChB,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,iBAAA,EAAmB,QAAA,EAAA,CAAA,CAAE,gBAAgB,CAAA,EAAE,CAAA,GACnD,KAAA,CAAM,GAAA,CAAI,CAAC,EAAA,qBACb,IAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QAEC,SAAA,EAAW,EAAA,CAAG,gBAAA,EAAkB,OAAA,CAAQ,GAAA,CAAI,EAAA,CAAG,EAAE,CAAA,IAAK,YAAA,EAAc,EAAA,CAAG,QAAA,IAAY,aAAa,CAAA;AAAA,QAChG,IAAA,EAAK,QAAA;AAAA,QACL,eAAA,EAAe,OAAA,CAAQ,GAAA,CAAI,EAAA,CAAG,EAAE,CAAA;AAAA,QAChC,OAAA,EAAS,MAAM,CAAC,EAAA,CAAG,YAAY,WAAA,CAAY,OAAA,EAAS,UAAA,EAAY,EAAA,CAAG,EAAE,CAAA;AAAA,QAErE,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,UAAK,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,iBAAgB,EACtC,QAAA,kBAAA,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,OAAA,CAAQ,GAAA,CAAI,EAAA,CAAG,EAAE,CAAA;AAAA,cAC1B,UAAU,EAAA,CAAG,QAAA;AAAA,cACb,UAAU,MAAM,WAAA,CAAY,OAAA,EAAS,UAAA,EAAY,GAAG,EAAE;AAAA;AAAA,WACxD,EACF,CAAA;AAAA,0BACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,KAAA,EAAA,EAAK,aAAG,KAAA,EAAM,CAAA;AAAA,YACd,GAAG,WAAA,oBAAe,GAAA,CAAC,SAAI,SAAA,EAAU,qBAAA,EAAuB,aAAG,WAAA,EAAY;AAAA,WAAA,EAC1E;AAAA;AAAA,OAAA;AAAA,MAhBK,EAAA,CAAG;AAAA,KAkBX,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAGF,EAAA,4BACG,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA,EACrC,QAAA,EAAA;AAAA,IAAA,YAAA,CAAa,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,cAAc,CAAA;AAAA,oBACzD,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,YAAO,IAAA,EAAK,QAAA,EAAS,WAAU,0BAAA,EAA2B,QAAA,EAAU,YAAY,IAAA,KAAS,CAAA,EAAG,SAAS,SAAA,EAAW,YAAA,EAAY,EAAE,yBAAyB,CAAA,EACtJ,8BAAC,YAAA,EAAA,EAAa,IAAA,EAAM,IAAI,CAAA,EAC1B,CAAA;AAAA,sBACA,GAAA,CAAC,YAAO,IAAA,EAAK,QAAA,EAAS,WAAU,0BAAA,EAA2B,QAAA,EAAU,aAAa,IAAA,KAAS,CAAA,EAAG,SAAS,QAAA,EAAU,YAAA,EAAY,EAAE,yBAAyB,CAAA,EACtJ,8BAAC,WAAA,EAAA,EAAY,IAAA,EAAM,IAAI,CAAA,EACzB;AAAA,KAAA,EACF,CAAA;AAAA,IACC,YAAA,CAAa,QAAA,EAAU,KAAA,EAAO,YAAA,EAAc,eAAe;AAAA,GAAA,EAC9D,CAAA;AAEJ","file":"chunk-BCE5WXM6.mjs","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":[],"mappings":"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","file":"chunk-JO5WBKF2.mjs","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 chunkBSAHYKPF_js = require('./chunk-BSAHYKPF.js');
5
- var chunkHYUINOPJ_js = require('./chunk-HYUINOPJ.js');
4
+ var chunkQ3DKZR44_js = require('./chunk-Q3DKZR44.js');
5
+ var chunk74ALPTUE_js = require('./chunk-74ALPTUE.js');
6
6
  var chunk4VMQLSHV_js = require('./chunk-4VMQLSHV.js');
7
- var chunkRQOTH7I7_js = require('./chunk-RQOTH7I7.js');
7
+ var chunk3HA3VO2I_js = require('./chunk-3HA3VO2I.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
- chunkBSAHYKPF_js.Modal,
58
+ chunkQ3DKZR44_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
- chunkHYUINOPJ_js.Checkbox,
166
+ chunk74ALPTUE_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(chunkRQOTH7I7_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(chunkRQOTH7I7_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(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 }) })
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-O72DMPH6.js.map
198
- //# sourceMappingURL=chunk-O72DMPH6.js.map
197
+ //# sourceMappingURL=chunk-KS7CSKO6.js.map
198
+ //# sourceMappingURL=chunk-KS7CSKO6.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Editing.tsx"],"names":["React","useLocale","jsx","Modal","jsxs","Fragment","cx","Checkbox","ChevronRight","ChevronLeft"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBO,SAAS,aAAA,CAAc;AAAA,EAC5B,IAAA;AAAA,EAAM,OAAA;AAAA,EAAS,SAAA;AAAA,EAAW,KAAA;AAAA,EAAO,WAAA;AAAA,EACjC,YAAA;AAAA,EAAc,WAAA;AAAA,EACd,IAAA,GAAO,SAAA;AAAA,EAAW;AACpB,CAAA,EAAuB;AACrB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAUA,0BAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,SAAS,OAAA,IAAW,IAAA;AAC1B,EAAA,MAAM,IAAIC,0BAAA,EAAU;AACpB,EAAA,MAAM,WAAA,GAAc,YAAA,IAAgB,CAAA,CAAE,gBAAgB,CAAA;AACtD,EAAA,MAAM,UAAA,GAAa,WAAA,IAAe,CAAA,CAAE,eAAe,CAAA;AAEnD,EAAA,MAAM,gBAAgB,YAAY;AAChC,IAAA,IAAI;AACF,MAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,MAAA,MAAM,SAAA,EAAU;AAChB,MAAA,OAAA,EAAQ;AAAA,IACV,CAAA,SAAE;AACA,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf;AAAA,EACF,CAAA;AAEA,EAAA,uBACEC,cAAA;AAAA,IAACC,sBAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,OAAA;AAAA,MACA,IAAA,EAAK,IAAA;AAAA,MACL,KAAA;AAAA,MACA,wBACEC,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAAH,cAAA,CAAC,QAAA,EAAA,EAAO,MAAK,QAAA,EAAS,SAAA,EAAU,0BAAyB,OAAA,EAAS,OAAA,EAAS,QAAA,EAAU,MAAA,EAClF,QAAA,EAAA,UAAA,EACH,CAAA;AAAA,wBACAE,eAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,WAAWE,mBAAA,CAAG,KAAA,EAAO,SAAS,QAAA,GAAW,aAAA,GAAgB,gBAAgB,SAAS,CAAA;AAAA,YAClF,OAAA,EAAS,aAAA;AAAA,YACT,QAAA,EAAU,MAAA;AAAA,YACV,aAAW,MAAA,IAAU,MAAA;AAAA,YAEpB,QAAA,EAAA;AAAA,cAAA,MAAA,kCAAU,MAAA,EAAA,EAAK,SAAA,EAAU,0BAAA,EAA2B,aAAA,EAAY,QAAO,CAAA,GAAK,IAAA;AAAA,cAC5E;AAAA;AAAA;AAAA;AACH,OAAA,EACF,CAAA;AAAA,MAGD,QAAA,EAAA,WAAA,oBAAeJ,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iBAAiB,QAAA,EAAA,WAAA,EAAY;AAAA;AAAA,GAC5D;AAEJ;AAWO,SAAS,gBAAgB,EAAE,QAAA,EAAU,SAAA,EAAW,GAAG,MAAK,EAA2C;AACxG,EAAA,uBAAOA,cAAA,CAAC,QAAG,SAAA,EAAWI,mBAAA,CAAG,aAAa,SAAS,CAAA,EAAI,GAAG,IAAA,EAAO,QAAA,EAAS,CAAA;AACxE;AAEO,SAAS,oBAAoB,EAAE,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,UAAS,EAA6B;AAChG,EAAA,MAAM,IAAIL,0BAAA,EAAU;AACpB,EAAA,uBACEG,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAH,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,kBAAA,EAAoB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBACxCE,eAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,kBAAA,EACZ,QAAA,EAAA;AAAA,sBAAAF,cAAA,CAAC,UAAM,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MACZ,QAAA,IAAY,MAAA,oBACXA,cAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAU,iBAAA,EAAkB,OAAA,EAAS,MAAA,EACxD,QAAA,EAAA,CAAA,CAAE,eAAe,CAAA,EACpB;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;AAaO,SAAS,WAAW,EAAE,OAAA,EAAS,SAAA,EAAW,GAAG,MAAK,EAAoB;AAC3E,EAAA,MAAM,IAAID,0BAAA,EAAU;AAGpB,EAAA,MAAM,WAAA,GAAc,OAAO,CAAA,CAAE,aAAa,MAAM,QAAA,GAAW,CAAA,CAAE,aAAa,CAAA,GAAI,MAAA;AAC9E,EAAA,MAAM,UAAA,GAAa,OAAO,CAAA,CAAE,YAAY,MAAM,QAAA,GAAW,CAAA,CAAE,YAAY,CAAA,GAAI,MAAA;AAC3E,EAAA,uBACEG,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWE,mBAAA,CAAG,QAAQ,SAAS,CAAA,EAAG,IAAA,EAAK,OAAA,EAAQ,YAAA,EAAY,CAAA,CAAE,YAAY,CAAA,EAAI,GAAG,IAAA,EACnF,QAAA,EAAA;AAAA,oBAAAF,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EAAa,IAAA,EAAK,KAAA,EAC/B,QAAA,EAAA;AAAA,sBAAAF,cAAA,CAAC,KAAA,EAAA,EAAI,IAAA,EAAK,cAAA,EAAgB,QAAA,EAAA,CAAA,CAAE,YAAY,CAAA,EAAE,CAAA;AAAA,qCACzC,KAAA,EAAA,EAAI,IAAA,EAAK,cAAA,EAAgB,QAAA,EAAA,CAAA,CAAE,aAAa,CAAA,EAAE,CAAA;AAAA,qCAC1C,KAAA,EAAA,EAAI,IAAA,EAAK,cAAA,EAAgB,QAAA,EAAA,CAAA,CAAE,YAAY,CAAA,EAAE;AAAA,KAAA,EAC5C,CAAA;AAAA,IACC,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qCACd,KAAA,EAAA,EAAY,SAAA,EAAU,WAAA,EAAY,IAAA,EAAK,KAAA,EACtC,QAAA,EAAA;AAAA,sBAAAA,cAAA,CAAC,SAAI,SAAA,EAAU,aAAA,EAAc,IAAA,EAAK,MAAA,EAAQ,YAAE,KAAA,EAAM,CAAA;AAAA,sBAClDA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EAAe,IAAA,EAAK,MAAA,EAAO,YAAA,EAAY,WAAA,EAAa,QAAA,kBAAAA,cAAA,CAAC,KAAA,EAAA,EAAK,QAAA,EAAA,CAAA,CAAE,MAAA,EAAO,CAAA,EAAM,CAAA;AAAA,sBACxFA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAc,IAAA,EAAK,MAAA,EAAO,YAAA,EAAY,UAAA,EAAY,QAAA,kBAAAA,cAAA,CAAC,KAAA,EAAA,EAAK,QAAA,EAAA,CAAA,CAAE,KAAA,EAAM,CAAA,EAAM;AAAA,KAAA,EAAA,EAH7E,CAIV,CACD;AAAA,GAAA,EACH,CAAA;AAEJ;AAmBO,SAAS,YAAA,CAAa;AAAA,EAC3B,MAAA;AAAA,EAAQ,QAAA;AAAA,EAAU,QAAA;AAAA,EAClB,WAAA;AAAA,EAAa,aAAA;AAAA,EACb;AACF,CAAA,EAAsB;AACpB,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,IAAUF,gBAAA,CAAA,QAAA,iBAAsB,IAAI,KAAK,CAAA;AAC3E,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,IAAUA,gBAAA,CAAA,QAAA,iBAAsB,IAAI,KAAK,CAAA;AAC7E,EAAA,MAAM,IAAIC,0BAAA,EAAU;AACpB,EAAA,MAAM,QAAA,GAAW,WAAA,IAAe,CAAA,CAAE,oBAAoB,CAAA;AACtD,EAAA,MAAM,QAAA,GAAW,aAAA,IAAiB,CAAA,CAAE,mBAAmB,CAAA;AAKvD,EAAA,MAAM,WAAA,GAAoBD,gBAAA,CAAA,OAAA;AAAA,IACxB,MAAM,IAAI,GAAA,CAAI,QAAA,CAAS,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAC,CAAA;AAAA,IACvC,CAAC,QAAQ;AAAA,GACX;AACA,EAAA,MAAM,IAAA,GAAaA,gBAAA,CAAA,OAAA;AAAA,IACjB,MAAM,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,WAAA,CAAY,GAAA,CAAI,CAAA,CAAE,EAAE,CAAC,CAAA;AAAA,IACjD,CAAC,QAAQ,WAAW;AAAA,GACtB;AACA,EAAA,MAAM,KAAA,GAAQ,QAAA;AAEd,EAAA,MAAM,YAAY,MAAM;AACtB,IAAA,MAAM,MAAA,GAAS,KAAK,MAAA,CAAO,CAAC,MAAM,WAAA,CAAY,GAAA,CAAI,CAAA,CAAE,EAAE,CAAC,CAAA;AACvD,IAAA,QAAA,CAAS,CAAC,GAAG,KAAA,EAAO,GAAG,MAAM,CAAC,CAAA;AAC9B,IAAA,cAAA,iBAAe,IAAI,KAAK,CAAA;AAAA,EAC1B,CAAA;AACA,EAAA,MAAM,WAAW,MAAM;AACrB,IAAA,QAAA,CAAS,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,aAAa,GAAA,CAAI,CAAA,CAAE,EAAE,CAAC,CAAC,CAAA;AACrD,IAAA,eAAA,iBAAgB,IAAI,KAAK,CAAA;AAAA,EAC3B,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,GAAA,EAAkB,MAAA,EAAkC,EAAA,KAAe;AACtF,IAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,GAAG,CAAA;AACxB,IAAA,IAAI,KAAK,GAAA,CAAI,EAAE,CAAA,EAAG,IAAA,CAAK,OAAO,EAAE,CAAA;AAAA,SAAQ,IAAA,CAAK,IAAI,EAAE,CAAA;AACnD,IAAA,MAAA,CAAO,IAAI,CAAA;AAAA,EACb,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,KAAA,EAAwB,KAAA,EAAuB,SAAsB,UAAA,qBACzFI,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,oBAAA,EACb,QAAA,EAAA;AAAA,sBAAAF,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBAC7CA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAuB,gBAAM,MAAA,EAAO;AAAA,KAAA,EACtD,CAAA;AAAA,oBACAA,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,gBAAA,EAAiB,IAAA,EAAK,SAAA,EAAU,YAAA,EAAY,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,MAAA,EAC3F,QAAA,EAAA,KAAA,CAAM,WAAW,CAAA,mBAChBA,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,iBAAA,EAAmB,QAAA,EAAA,CAAA,CAAE,gBAAgB,CAAA,EAAE,CAAA,GACnD,KAAA,CAAM,GAAA,CAAI,CAAC,EAAA,qBACbE,eAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QAEC,SAAA,EAAWE,mBAAA,CAAG,gBAAA,EAAkB,OAAA,CAAQ,GAAA,CAAI,EAAA,CAAG,EAAE,CAAA,IAAK,YAAA,EAAc,EAAA,CAAG,QAAA,IAAY,aAAa,CAAA;AAAA,QAChG,IAAA,EAAK,QAAA;AAAA,QACL,eAAA,EAAe,OAAA,CAAQ,GAAA,CAAI,EAAA,CAAG,EAAE,CAAA;AAAA,QAChC,OAAA,EAAS,MAAM,CAAC,EAAA,CAAG,YAAY,WAAA,CAAY,OAAA,EAAS,UAAA,EAAY,EAAA,CAAG,EAAE,CAAA;AAAA,QAErE,QAAA,EAAA;AAAA,0BAAAJ,cAAA,CAAC,UAAK,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,iBAAgB,EACtC,QAAA,kBAAAA,cAAA;AAAA,YAACK,yBAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,OAAA,CAAQ,GAAA,CAAI,EAAA,CAAG,EAAE,CAAA;AAAA,cAC1B,UAAU,EAAA,CAAG,QAAA;AAAA,cACb,UAAU,MAAM,WAAA,CAAY,OAAA,EAAS,UAAA,EAAY,GAAG,EAAE;AAAA;AAAA,WACxD,EACF,CAAA;AAAA,0BACAH,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EACb,QAAA,EAAA;AAAA,4BAAAF,cAAA,CAAC,KAAA,EAAA,EAAK,aAAG,KAAA,EAAM,CAAA;AAAA,YACd,GAAG,WAAA,oBAAeA,cAAA,CAAC,SAAI,SAAA,EAAU,qBAAA,EAAuB,aAAG,WAAA,EAAY;AAAA,WAAA,EAC1E;AAAA;AAAA,OAAA;AAAA,MAhBK,EAAA,CAAG;AAAA,KAkBX,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAGF,EAAA,uCACG,KAAA,EAAA,EAAI,SAAA,EAAWI,mBAAA,CAAG,UAAA,EAAY,SAAS,CAAA,EACrC,QAAA,EAAA;AAAA,IAAA,YAAA,CAAa,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,cAAc,CAAA;AAAA,oBACzDF,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACb,QAAA,EAAA;AAAA,sBAAAF,cAAA,CAAC,YAAO,IAAA,EAAK,QAAA,EAAS,WAAU,0BAAA,EAA2B,QAAA,EAAU,YAAY,IAAA,KAAS,CAAA,EAAG,SAAS,SAAA,EAAW,YAAA,EAAY,EAAE,yBAAyB,CAAA,EACtJ,yCAACM,6BAAA,EAAA,EAAa,IAAA,EAAM,IAAI,CAAA,EAC1B,CAAA;AAAA,sBACAN,cAAA,CAAC,YAAO,IAAA,EAAK,QAAA,EAAS,WAAU,0BAAA,EAA2B,QAAA,EAAU,aAAa,IAAA,KAAS,CAAA,EAAG,SAAS,QAAA,EAAU,YAAA,EAAY,EAAE,yBAAyB,CAAA,EACtJ,yCAACO,4BAAA,EAAA,EAAY,IAAA,EAAM,IAAI,CAAA,EACzB;AAAA,KAAA,EACF,CAAA;AAAA,IACC,YAAA,CAAa,QAAA,EAAU,KAAA,EAAO,YAAA,EAAc,eAAe;AAAA,GAAA,EAC9D,CAAA;AAEJ","file":"chunk-O72DMPH6.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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBO,SAAS,aAAA,CAAc;AAAA,EAC5B,IAAA;AAAA,EAAM,OAAA;AAAA,EAAS,SAAA;AAAA,EAAW,KAAA;AAAA,EAAO,WAAA;AAAA,EACjC,YAAA;AAAA,EAAc,WAAA;AAAA,EACd,IAAA,GAAO,SAAA;AAAA,EAAW;AACpB,CAAA,EAAuB;AACrB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAUA,0BAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,SAAS,OAAA,IAAW,IAAA;AAC1B,EAAA,MAAM,IAAIC,0BAAA,EAAU;AACpB,EAAA,MAAM,WAAA,GAAc,YAAA,IAAgB,CAAA,CAAE,gBAAgB,CAAA;AACtD,EAAA,MAAM,UAAA,GAAa,WAAA,IAAe,CAAA,CAAE,eAAe,CAAA;AAEnD,EAAA,MAAM,gBAAgB,YAAY;AAChC,IAAA,IAAI;AACF,MAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,MAAA,MAAM,SAAA,EAAU;AAChB,MAAA,OAAA,EAAQ;AAAA,IACV,CAAA,SAAE;AACA,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf;AAAA,EACF,CAAA;AAEA,EAAA,uBACEC,cAAA;AAAA,IAACC,sBAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,OAAA;AAAA,MACA,IAAA,EAAK,IAAA;AAAA,MACL,KAAA;AAAA,MACA,wBACEC,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAAH,cAAA,CAAC,QAAA,EAAA,EAAO,MAAK,QAAA,EAAS,SAAA,EAAU,0BAAyB,OAAA,EAAS,OAAA,EAAS,QAAA,EAAU,MAAA,EAClF,QAAA,EAAA,UAAA,EACH,CAAA;AAAA,wBACAE,eAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,WAAWE,mBAAA,CAAG,KAAA,EAAO,SAAS,QAAA,GAAW,aAAA,GAAgB,gBAAgB,SAAS,CAAA;AAAA,YAClF,OAAA,EAAS,aAAA;AAAA,YACT,QAAA,EAAU,MAAA;AAAA,YACV,aAAW,MAAA,IAAU,MAAA;AAAA,YAEpB,QAAA,EAAA;AAAA,cAAA,MAAA,kCAAU,MAAA,EAAA,EAAK,SAAA,EAAU,0BAAA,EAA2B,aAAA,EAAY,QAAO,CAAA,GAAK,IAAA;AAAA,cAC5E;AAAA;AAAA;AAAA;AACH,OAAA,EACF,CAAA;AAAA,MAGD,QAAA,EAAA,WAAA,oBAAeJ,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iBAAiB,QAAA,EAAA,WAAA,EAAY;AAAA;AAAA,GAC5D;AAEJ;AAWO,SAAS,gBAAgB,EAAE,QAAA,EAAU,SAAA,EAAW,GAAG,MAAK,EAA2C;AACxG,EAAA,uBAAOA,cAAA,CAAC,QAAG,SAAA,EAAWI,mBAAA,CAAG,aAAa,SAAS,CAAA,EAAI,GAAG,IAAA,EAAO,QAAA,EAAS,CAAA;AACxE;AAEO,SAAS,oBAAoB,EAAE,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,UAAS,EAA6B;AAChG,EAAA,MAAM,IAAIL,0BAAA,EAAU;AACpB,EAAA,uBACEG,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAH,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,kBAAA,EAAoB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBACxCE,eAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,kBAAA,EACZ,QAAA,EAAA;AAAA,sBAAAF,cAAA,CAAC,UAAM,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MACZ,QAAA,IAAY,MAAA,oBACXA,cAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAU,iBAAA,EAAkB,OAAA,EAAS,MAAA,EACxD,QAAA,EAAA,CAAA,CAAE,eAAe,CAAA,EACpB;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;AAaO,SAAS,WAAW,EAAE,OAAA,EAAS,SAAA,EAAW,GAAG,MAAK,EAAoB;AAC3E,EAAA,MAAM,IAAID,0BAAA,EAAU;AAGpB,EAAA,MAAM,WAAA,GAAc,OAAO,CAAA,CAAE,aAAa,MAAM,QAAA,GAAW,CAAA,CAAE,aAAa,CAAA,GAAI,MAAA;AAC9E,EAAA,MAAM,UAAA,GAAa,OAAO,CAAA,CAAE,YAAY,MAAM,QAAA,GAAW,CAAA,CAAE,YAAY,CAAA,GAAI,MAAA;AAC3E,EAAA,uBACEG,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWE,mBAAA,CAAG,QAAQ,SAAS,CAAA,EAAG,IAAA,EAAK,OAAA,EAAQ,YAAA,EAAY,CAAA,CAAE,YAAY,CAAA,EAAI,GAAG,IAAA,EACnF,QAAA,EAAA;AAAA,oBAAAF,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EAAa,IAAA,EAAK,KAAA,EAC/B,QAAA,EAAA;AAAA,sBAAAF,cAAA,CAAC,KAAA,EAAA,EAAI,IAAA,EAAK,cAAA,EAAgB,QAAA,EAAA,CAAA,CAAE,YAAY,CAAA,EAAE,CAAA;AAAA,qCACzC,KAAA,EAAA,EAAI,IAAA,EAAK,cAAA,EAAgB,QAAA,EAAA,CAAA,CAAE,aAAa,CAAA,EAAE,CAAA;AAAA,qCAC1C,KAAA,EAAA,EAAI,IAAA,EAAK,cAAA,EAAgB,QAAA,EAAA,CAAA,CAAE,YAAY,CAAA,EAAE;AAAA,KAAA,EAC5C,CAAA;AAAA,IACC,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qCACd,KAAA,EAAA,EAAY,SAAA,EAAU,WAAA,EAAY,IAAA,EAAK,KAAA,EACtC,QAAA,EAAA;AAAA,sBAAAA,cAAA,CAAC,SAAI,SAAA,EAAU,aAAA,EAAc,IAAA,EAAK,MAAA,EAAQ,YAAE,KAAA,EAAM,CAAA;AAAA,sBAClDA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EAAe,IAAA,EAAK,MAAA,EAAO,YAAA,EAAY,WAAA,EAAa,QAAA,kBAAAA,cAAA,CAAC,KAAA,EAAA,EAAK,QAAA,EAAA,CAAA,CAAE,MAAA,EAAO,CAAA,EAAM,CAAA;AAAA,sBACxFA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAc,IAAA,EAAK,MAAA,EAAO,YAAA,EAAY,UAAA,EAAY,QAAA,kBAAAA,cAAA,CAAC,KAAA,EAAA,EAAK,QAAA,EAAA,CAAA,CAAE,KAAA,EAAM,CAAA,EAAM;AAAA,KAAA,EAAA,EAH7E,CAIV,CACD;AAAA,GAAA,EACH,CAAA;AAEJ;AAmBO,SAAS,YAAA,CAAa;AAAA,EAC3B,MAAA;AAAA,EAAQ,QAAA;AAAA,EAAU,QAAA;AAAA,EAClB,WAAA;AAAA,EAAa,aAAA;AAAA,EACb;AACF,CAAA,EAAsB;AACpB,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,IAAUF,gBAAA,CAAA,QAAA,iBAAsB,IAAI,KAAK,CAAA;AAC3E,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,IAAUA,gBAAA,CAAA,QAAA,iBAAsB,IAAI,KAAK,CAAA;AAC7E,EAAA,MAAM,IAAIC,0BAAA,EAAU;AACpB,EAAA,MAAM,QAAA,GAAW,WAAA,IAAe,CAAA,CAAE,oBAAoB,CAAA;AACtD,EAAA,MAAM,QAAA,GAAW,aAAA,IAAiB,CAAA,CAAE,mBAAmB,CAAA;AAKvD,EAAA,MAAM,WAAA,GAAoBD,gBAAA,CAAA,OAAA;AAAA,IACxB,MAAM,IAAI,GAAA,CAAI,QAAA,CAAS,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAC,CAAA;AAAA,IACvC,CAAC,QAAQ;AAAA,GACX;AACA,EAAA,MAAM,IAAA,GAAaA,gBAAA,CAAA,OAAA;AAAA,IACjB,MAAM,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,WAAA,CAAY,GAAA,CAAI,CAAA,CAAE,EAAE,CAAC,CAAA;AAAA,IACjD,CAAC,QAAQ,WAAW;AAAA,GACtB;AACA,EAAA,MAAM,KAAA,GAAQ,QAAA;AAEd,EAAA,MAAM,YAAY,MAAM;AACtB,IAAA,MAAM,MAAA,GAAS,KAAK,MAAA,CAAO,CAAC,MAAM,WAAA,CAAY,GAAA,CAAI,CAAA,CAAE,EAAE,CAAC,CAAA;AACvD,IAAA,QAAA,CAAS,CAAC,GAAG,KAAA,EAAO,GAAG,MAAM,CAAC,CAAA;AAC9B,IAAA,cAAA,iBAAe,IAAI,KAAK,CAAA;AAAA,EAC1B,CAAA;AACA,EAAA,MAAM,WAAW,MAAM;AACrB,IAAA,QAAA,CAAS,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,aAAa,GAAA,CAAI,CAAA,CAAE,EAAE,CAAC,CAAC,CAAA;AACrD,IAAA,eAAA,iBAAgB,IAAI,KAAK,CAAA;AAAA,EAC3B,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,GAAA,EAAkB,MAAA,EAAkC,EAAA,KAAe;AACtF,IAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,GAAG,CAAA;AACxB,IAAA,IAAI,KAAK,GAAA,CAAI,EAAE,CAAA,EAAG,IAAA,CAAK,OAAO,EAAE,CAAA;AAAA,SAAQ,IAAA,CAAK,IAAI,EAAE,CAAA;AACnD,IAAA,MAAA,CAAO,IAAI,CAAA;AAAA,EACb,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,KAAA,EAAwB,KAAA,EAAuB,SAAsB,UAAA,qBACzFI,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,oBAAA,EACb,QAAA,EAAA;AAAA,sBAAAF,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBAC7CA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAuB,gBAAM,MAAA,EAAO;AAAA,KAAA,EACtD,CAAA;AAAA,oBACAA,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,gBAAA,EAAiB,IAAA,EAAK,SAAA,EAAU,YAAA,EAAY,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,MAAA,EAC3F,QAAA,EAAA,KAAA,CAAM,WAAW,CAAA,mBAChBA,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,iBAAA,EAAmB,QAAA,EAAA,CAAA,CAAE,gBAAgB,CAAA,EAAE,CAAA,GACnD,KAAA,CAAM,GAAA,CAAI,CAAC,EAAA,qBACbE,eAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QAEC,SAAA,EAAWE,mBAAA,CAAG,gBAAA,EAAkB,OAAA,CAAQ,GAAA,CAAI,EAAA,CAAG,EAAE,CAAA,IAAK,YAAA,EAAc,EAAA,CAAG,QAAA,IAAY,aAAa,CAAA;AAAA,QAChG,IAAA,EAAK,QAAA;AAAA,QACL,eAAA,EAAe,OAAA,CAAQ,GAAA,CAAI,EAAA,CAAG,EAAE,CAAA;AAAA,QAChC,OAAA,EAAS,MAAM,CAAC,EAAA,CAAG,YAAY,WAAA,CAAY,OAAA,EAAS,UAAA,EAAY,EAAA,CAAG,EAAE,CAAA;AAAA,QAErE,QAAA,EAAA;AAAA,0BAAAJ,cAAA,CAAC,UAAK,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,iBAAgB,EACtC,QAAA,kBAAAA,cAAA;AAAA,YAACK,yBAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,OAAA,CAAQ,GAAA,CAAI,EAAA,CAAG,EAAE,CAAA;AAAA,cAC1B,UAAU,EAAA,CAAG,QAAA;AAAA,cACb,UAAU,MAAM,WAAA,CAAY,OAAA,EAAS,UAAA,EAAY,GAAG,EAAE;AAAA;AAAA,WACxD,EACF,CAAA;AAAA,0BACAH,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EACb,QAAA,EAAA;AAAA,4BAAAF,cAAA,CAAC,KAAA,EAAA,EAAK,aAAG,KAAA,EAAM,CAAA;AAAA,YACd,GAAG,WAAA,oBAAeA,cAAA,CAAC,SAAI,SAAA,EAAU,qBAAA,EAAuB,aAAG,WAAA,EAAY;AAAA,WAAA,EAC1E;AAAA;AAAA,OAAA;AAAA,MAhBK,EAAA,CAAG;AAAA,KAkBX,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAGF,EAAA,uCACG,KAAA,EAAA,EAAI,SAAA,EAAWI,mBAAA,CAAG,UAAA,EAAY,SAAS,CAAA,EACrC,QAAA,EAAA;AAAA,IAAA,YAAA,CAAa,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,cAAc,CAAA;AAAA,oBACzDF,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACb,QAAA,EAAA;AAAA,sBAAAF,cAAA,CAAC,YAAO,IAAA,EAAK,QAAA,EAAS,WAAU,0BAAA,EAA2B,QAAA,EAAU,YAAY,IAAA,KAAS,CAAA,EAAG,SAAS,SAAA,EAAW,YAAA,EAAY,EAAE,yBAAyB,CAAA,EACtJ,yCAACM,6BAAA,EAAA,EAAa,IAAA,EAAM,IAAI,CAAA,EAC1B,CAAA;AAAA,sBACAN,cAAA,CAAC,YAAO,IAAA,EAAK,QAAA,EAAS,WAAU,0BAAA,EAA2B,QAAA,EAAU,aAAa,IAAA,KAAS,CAAA,EAAG,SAAS,QAAA,EAAU,YAAA,EAAY,EAAE,yBAAyB,CAAA,EACtJ,yCAACO,4BAAA,EAAA,EAAY,IAAA,EAAM,IAAI,CAAA,EACzB;AAAA,KAAA,EACF,CAAA;AAAA,IACC,YAAA,CAAa,QAAA,EAAU,KAAA,EAAO,YAAA,EAAc,eAAe;AAAA,GAAA,EAC9D,CAAA;AAEJ","file":"chunk-KS7CSKO6.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,7 +1,7 @@
1
1
  'use client';
2
2
  import { format } from './chunk-Q4HKSXUE.mjs';
3
3
  import { useLocale } from './chunk-PQV7HHCJ.mjs';
4
- import { ChevronUp, ChevronDown, X } from './chunk-CIBJKJV3.mjs';
4
+ import { ChevronUp, ChevronDown, X } from './chunk-VHYTJD6Z.mjs';
5
5
  import { cx } from './chunk-IEPCH3JB.mjs';
6
6
  import * as React from 'react';
7
7
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -120,5 +120,5 @@ function FilterField({
120
120
  }
121
121
 
122
122
  export { BulkActionBar, FilterBar, FilterField, FilterPanel, FilterSection, SortDropdown };
123
- //# sourceMappingURL=chunk-4SEJTTTV.mjs.map
124
- //# sourceMappingURL=chunk-4SEJTTTV.mjs.map
123
+ //# sourceMappingURL=chunk-LJG3AH7G.mjs.map
124
+ //# sourceMappingURL=chunk-LJG3AH7G.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Filters.tsx"],"names":[],"mappings":"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","file":"chunk-4SEJTTTV.mjs","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":[],"mappings":";;;;;;;AAcO,SAAS,WAAA,CAAY,EAAE,KAAA,EAAO,UAAA,EAAY,aAAa,SAAA,EAAW,QAAA,EAAU,GAAG,IAAA,EAAK,EAAqB;AAC9G,EAAA,MAAM,IAAI,SAAA,EAAU;AACpB,EAAA,MAAM,OAAA,GAAU,KAAA,IAAS,CAAA,CAAE,eAAe,CAAA;AAC1C,EAAA,uBACE,IAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAW,EAAA,CAAG,cAAA,EAAgB,SAAS,CAAA,EAAG,YAAA,EAAY,CAAA,CAAE,eAAe,CAAA,EAAI,GAAG,IAAA,EACnF,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,oBAAA,EACb,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,MAAA,EAAA,EAAK,WAAU,qBAAA,EACb,QAAA,EAAA;AAAA,QAAA,OAAA;AAAA,QACA,OAAO,gBAAgB,QAAA,IAAY,WAAA,GAAc,qBAChD,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA,WAAA,EAAY;AAAA,OAAA,EAEvD,CAAA;AAAA,MACC,UAAA,IAAc,WAAA,KAAgB,MAAA,IAAa,WAAA,GAAc,qBACxD,GAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,WAAU,qBAAA,EAAsB,OAAA,EAAS,UAAA,EAC5D,QAAA,EAAA,CAAA,CAAE,eAAe,CAAA,EACpB;AAAA,KAAA,EAEJ,CAAA;AAAA,oBACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EAAsB,QAAA,EAAS;AAAA,GAAA,EAChD,CAAA;AAEJ;AAOO,SAAS,aAAA,CAAc,EAAE,KAAA,EAAO,WAAA,GAAc,MAAM,QAAA,EAAU,SAAA,EAAW,GAAG,IAAA,EAAK,EAAuB;AAC7G,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAU,eAAS,WAAW,CAAA;AAClD,EAAA,uBACE,IAAA,CAAC,SAAI,SAAA,EAAW,EAAA,CAAG,kBAAkB,SAAS,CAAA,EAAI,GAAG,IAAA,EACnD,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAU,sBAAA;AAAA,QACV,eAAA,EAAe,IAAA;AAAA,QACf,SAAS,MAAM,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,QAEhC,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,UAAM,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UACZ,IAAA,uBAAQ,SAAA,EAAA,EAAU,IAAA,EAAM,IAAI,CAAA,mBAAK,GAAA,CAAC,WAAA,EAAA,EAAY,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA;AAAA,KAC3D;AAAA,IACC,IAAA,oBAAQ,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAwB,QAAA,EAAS;AAAA,GAAA,EAC3D,CAAA;AAEJ;AAWO,SAAS,aAAA,CAAc,EAAE,aAAA,EAAe,KAAA,EAAO,SAAS,SAAA,EAAW,QAAA,EAAU,GAAG,IAAA,EAAK,EAAuB;AACjH,EAAA,MAAM,IAAI,SAAA,EAAU;AACpB,EAAA,IAAI,aAAA,IAAiB,GAAG,OAAO,IAAA;AAC/B,EAAA,MAAM,SAAA,GAAY,MAAA;AAAA,IAChB,kBAAkB,CAAA,GAAI,CAAA,CAAE,qBAAqB,CAAA,GAAI,EAAE,sBAAsB,CAAA;AAAA,IACzE,EAAE,GAAG,aAAA;AAAc,GACrB;AACA,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,YAAY,SAAS,CAAA,EAAG,IAAA,EAAK,QAAA,EAAS,YAAA,EAAY,CAAA,CAAE,qBAAqB,CAAA,EAAI,GAAG,IAAA,EACjG,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iBAAA,EACZ,QAAA,EAAA;AAAA,MAAA,KAAA,IAAS,SAAA;AAAA,MACT,2BACC,GAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,WAAU,iBAAA,EAAkB,YAAA,EAAY,CAAA,CAAE,qBAAqB,GAAG,OAAA,EAAS,OAAA,EAC/F,8BAAC,CAAA,EAAA,EAAE,IAAA,EAAM,IAAI,CAAA,EACf;AAAA,KAAA,EAEJ,CAAA;AAAA,oBACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EAAqB,QAAA,EAAS;AAAA,GAAA,EAC/C,CAAA;AAEJ;AAiBO,SAAS,YAAA,CAAwC;AAAA,EACtD,KAAA;AAAA,EAAO,OAAA;AAAA,EAAS,QAAA;AAAA,EAAU,KAAA;AAAA,EAAO,SAAA;AAAA,EAAW;AAC9C,CAAA,EAAyB;AACvB,EAAA,MAAM,IAAI,SAAA,EAAU;AACpB,EAAA,4BACG,OAAA,EAAA,EAAM,SAAA,EAAW,EAAA,CAAG,eAAA,EAAiB,SAAS,CAAA,EAC7C,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAK,SAAA,EAAU,sBAAA,EAAwB,QAAA,EAAA,KAAA,IAAS,CAAA,CAAE,gBAAgB,CAAA,EAAE,CAAA;AAAA,oBACrE,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,EAAA;AAAA,QACA,SAAA,EAAU,8BAAA;AAAA,QACV,KAAA;AAAA,QACA,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAU,CAAA;AAAA,QAE5C,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,qBACZ,GAAA,CAAC,YAA6B,KAAA,EAAO,MAAA,CAAO,CAAA,CAAE,KAAK,CAAA,EAChD,QAAA,EAAA,OAAO,EAAE,KAAA,KAAU,QAAA,GAAW,CAAA,CAAE,KAAA,GAAQ,MAAA,CAAO,CAAA,CAAE,KAAK,CAAA,EAAA,EAD5C,MAAA,CAAO,CAAA,CAAE,KAAK,CAE3B,CACD;AAAA;AAAA;AACH,GAAA,EACF,CAAA;AAEJ;AAuBO,SAAS,SAAA,CAAU;AAAA,EACxB,OAAA;AAAA,EAAS,WAAA,GAAc,GAAA;AAAA,EAAK,OAAA;AAAA,EAAS,SAAA;AAAA,EAAW,QAAA;AAAA,EAAU,KAAA;AAAA,EAAO,GAAG;AACtE,CAAA,EAAsC;AACpC,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,GAAI,OAAA,GAAU,EAAE,eAAA,EAAiB,MAAA,CAAO,OAAO,CAAA,EAAE,GAAI,EAAE,kBAAA,EAAoB,CAAA,EAAG,WAAW,CAAA,EAAA,CAAA,EAAK;AAAA,IAC9F,GAAG;AAAA,GACL;AACA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAW,EAAA,CAAG,YAAA,EAAc,iBAAiB,OAAA,GAAU,wBAAA,GAA2B,QAAW,SAAS,CAAA;AAAA,MACtG,KAAA,EAAO,QAAA;AAAA,MACN,GAAG,IAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EAAsB,QAAA,EAAS,CAAA;AAAA,QAC7C,WAAW,IAAA,oBAAQ,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAuB,QAAA,EAAA,OAAA,EAAQ;AAAA;AAAA;AAAA,GACpE;AAEJ;AAUO,SAAS,WAAA,CAAY;AAAA,EAC1B,KAAA;AAAA,EAAO,OAAA;AAAA,EAAS,QAAA;AAAA,EAAU;AAC5B,CAAA,EAAwC;AACtC,EAAA,MAAM,UAAgB,KAAA,CAAA,KAAA,EAAM;AAI5B,EAAA,MAAM,UAAgB,KAAA,CAAA,cAAA,CAAe,QAAQ,CAAA,GACxC,QAAA,CAAS,MAA0B,EAAA,GACpC,MAAA;AACJ,EAAA,MAAM,EAAA,GAAK,WAAW,OAAA,IAAW,OAAA;AACjC,EAAA,MAAM,KAAA,GAAc,qBAAe,QAAQ,CAAA,GACjC,mBAAa,QAAA,EAAiD,EAAE,EAAA,EAAI,CAAA,GAC1E,QAAA;AACJ,EAAA,4BACG,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,cAAA,EAAgB,SAAS,CAAA,EAC1C,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,OAAA,EAAA,EAAM,OAAA,EAAS,EAAA,EAAI,SAAA,EAAU,uBAAuB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,IAC1D;AAAA,GAAA,EACH,CAAA;AAEJ","file":"chunk-LJG3AH7G.mjs","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"]}
@@ -2,7 +2,7 @@
2
2
  'use strict';
3
3
 
4
4
  var chunk4VMQLSHV_js = require('./chunk-4VMQLSHV.js');
5
- var chunkRQOTH7I7_js = require('./chunk-RQOTH7I7.js');
5
+ var chunk3HA3VO2I_js = require('./chunk-3HA3VO2I.js');
6
6
  var chunkPASF6T4H_js = require('./chunk-PASF6T4H.js');
7
7
  var React = require('react');
8
8
  var reactDom = require('react-dom');
@@ -29,10 +29,10 @@ function _interopNamespace(e) {
29
29
  var React__namespace = /*#__PURE__*/_interopNamespace(React);
30
30
 
31
31
  var VARIANT_ICON = {
32
- success: chunkRQOTH7I7_js.CheckCircle,
33
- warning: chunkRQOTH7I7_js.AlertTriangle,
34
- danger: chunkRQOTH7I7_js.AlertCircle,
35
- info: chunkRQOTH7I7_js.Info
32
+ success: chunk3HA3VO2I_js.CheckCircle,
33
+ warning: chunk3HA3VO2I_js.AlertTriangle,
34
+ danger: chunk3HA3VO2I_js.AlertCircle,
35
+ info: chunk3HA3VO2I_js.Info
36
36
  };
37
37
  var EXIT_MS = 150;
38
38
  var ToastContext = React__namespace.createContext(null);
@@ -123,7 +123,7 @@ function ToastProvider({ children }) {
123
123
  t.title && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "toast__title", children: t.title }),
124
124
  t.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "toast__desc", children: t.description })
125
125
  ] }),
126
- /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "toast__close", "aria-label": locale["toast.close"], onClick: () => dismiss(t.id), children: /* @__PURE__ */ jsxRuntime.jsx(chunkRQOTH7I7_js.X, { size: 16 }) })
126
+ /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "toast__close", "aria-label": locale["toast.close"], onClick: () => dismiss(t.id), children: /* @__PURE__ */ jsxRuntime.jsx(chunk3HA3VO2I_js.X, { size: 16 }) })
127
127
  ]
128
128
  },
129
129
  t.id
@@ -143,5 +143,5 @@ function useToast() {
143
143
 
144
144
  exports.ToastProvider = ToastProvider;
145
145
  exports.useToast = useToast;
146
- //# sourceMappingURL=chunk-55ITZTLL.js.map
147
- //# sourceMappingURL=chunk-55ITZTLL.js.map
146
+ //# sourceMappingURL=chunk-LJSNE6YQ.js.map
147
+ //# sourceMappingURL=chunk-LJSNE6YQ.js.map