@misael703/ui 1.39.0 → 1.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/dist/{chunk-YIGSCVHS.js → chunk-3J4FCDMO.js} +5 -5
  2. package/dist/{chunk-YIGSCVHS.js.map → chunk-3J4FCDMO.js.map} +1 -1
  3. package/dist/{chunk-S5OEOR57.mjs → chunk-3PRLAG7L.mjs} +6 -5
  4. package/dist/chunk-3PRLAG7L.mjs.map +1 -0
  5. package/dist/{chunk-HWOG3TZD.mjs → chunk-3T7MQEQG.mjs} +3 -3
  6. package/dist/{chunk-HWOG3TZD.mjs.map → chunk-3T7MQEQG.mjs.map} +1 -1
  7. package/dist/{chunk-G5I2VVOC.mjs → chunk-3TFYIWFE.mjs} +3 -3
  8. package/dist/{chunk-G5I2VVOC.mjs.map → chunk-3TFYIWFE.mjs.map} +1 -1
  9. package/dist/{chunk-2PNXLTEM.js → chunk-42EYBIRW.js} +3 -3
  10. package/dist/{chunk-2PNXLTEM.js.map → chunk-42EYBIRW.js.map} +1 -1
  11. package/dist/{chunk-FD3Y5IP7.mjs → chunk-4GF3YGPG.mjs} +4 -4
  12. package/dist/{chunk-FD3Y5IP7.mjs.map → chunk-4GF3YGPG.mjs.map} +1 -1
  13. package/dist/{chunk-3JRP3DGM.js → chunk-4WGXCRNN.js} +3 -3
  14. package/dist/{chunk-3JRP3DGM.js.map → chunk-4WGXCRNN.js.map} +1 -1
  15. package/dist/{chunk-PFPD2HFZ.js → chunk-5ELGA7CC.js} +3 -3
  16. package/dist/{chunk-PFPD2HFZ.js.map → chunk-5ELGA7CC.js.map} +1 -1
  17. package/dist/{chunk-3JYYZOEJ.mjs → chunk-726G5C65.mjs} +3 -3
  18. package/dist/{chunk-3JYYZOEJ.mjs.map → chunk-726G5C65.mjs.map} +1 -1
  19. package/dist/{chunk-HCTY5QYL.js → chunk-732BPQGZ.js} +3 -3
  20. package/dist/{chunk-HCTY5QYL.js.map → chunk-732BPQGZ.js.map} +1 -1
  21. package/dist/{chunk-ZK6OK55L.mjs → chunk-7URTBILN.mjs} +3 -3
  22. package/dist/{chunk-ZK6OK55L.mjs.map → chunk-7URTBILN.mjs.map} +1 -1
  23. package/dist/{chunk-565UJQ2M.js → chunk-ABN634QO.js} +4 -4
  24. package/dist/{chunk-565UJQ2M.js.map → chunk-ABN634QO.js.map} +1 -1
  25. package/dist/{chunk-D44PGK5V.js → chunk-BB4WO2VU.js} +4 -4
  26. package/dist/{chunk-D44PGK5V.js.map → chunk-BB4WO2VU.js.map} +1 -1
  27. package/dist/{chunk-X36H75RR.mjs → chunk-HFRMDYNW.mjs} +3 -3
  28. package/dist/{chunk-X36H75RR.mjs.map → chunk-HFRMDYNW.mjs.map} +1 -1
  29. package/dist/{chunk-FR4JV3JA.mjs → chunk-I7URH4F2.mjs} +3 -3
  30. package/dist/{chunk-FR4JV3JA.mjs.map → chunk-I7URH4F2.mjs.map} +1 -1
  31. package/dist/{chunk-KWXF6OQW.js → chunk-IRYSQWA3.js} +6 -5
  32. package/dist/chunk-IRYSQWA3.js.map +1 -0
  33. package/dist/{chunk-63LUAWJS.mjs → chunk-JZ3JAEK4.mjs} +5 -5
  34. package/dist/{chunk-63LUAWJS.mjs.map → chunk-JZ3JAEK4.mjs.map} +1 -1
  35. package/dist/{chunk-NU4GAGUV.js → chunk-JZNUYA42.js} +3 -3
  36. package/dist/{chunk-NU4GAGUV.js.map → chunk-JZNUYA42.js.map} +1 -1
  37. package/dist/{chunk-C7UG47HQ.js → chunk-K5B6WQFI.js} +5 -5
  38. package/dist/{chunk-C7UG47HQ.js.map → chunk-K5B6WQFI.js.map} +1 -1
  39. package/dist/{chunk-MW7HQCFC.js → chunk-KJ6YAYWS.js} +3 -3
  40. package/dist/{chunk-MW7HQCFC.js.map → chunk-KJ6YAYWS.js.map} +1 -1
  41. package/dist/{chunk-T2LO33GM.js → chunk-LKWQ3TDU.js} +3 -3
  42. package/dist/{chunk-T2LO33GM.js.map → chunk-LKWQ3TDU.js.map} +1 -1
  43. package/dist/{chunk-3AW3TK6D.mjs → chunk-M5LAEA7D.mjs} +3 -3
  44. package/dist/{chunk-3AW3TK6D.mjs.map → chunk-M5LAEA7D.mjs.map} +1 -1
  45. package/dist/{chunk-TX4BUYX4.js → chunk-MATGDAGX.js} +4 -4
  46. package/dist/{chunk-TX4BUYX4.js.map → chunk-MATGDAGX.js.map} +1 -1
  47. package/dist/{chunk-F3PTSBHH.js → chunk-NZKXHTM4.js} +6 -6
  48. package/dist/{chunk-F3PTSBHH.js.map → chunk-NZKXHTM4.js.map} +1 -1
  49. package/dist/{chunk-JJ54RD36.js → chunk-OQXOF34S.js} +5 -5
  50. package/dist/{chunk-JJ54RD36.js.map → chunk-OQXOF34S.js.map} +1 -1
  51. package/dist/{chunk-6KIM3DOH.mjs → chunk-POHLWLZI.mjs} +6 -3
  52. package/dist/chunk-POHLWLZI.mjs.map +1 -0
  53. package/dist/{chunk-NS6CI6RP.mjs → chunk-PUEGDRTJ.mjs} +3 -3
  54. package/dist/{chunk-NS6CI6RP.mjs.map → chunk-PUEGDRTJ.mjs.map} +1 -1
  55. package/dist/{chunk-NMUTNNAC.js → chunk-PURAG4KZ.js} +6 -3
  56. package/dist/chunk-PURAG4KZ.js.map +1 -0
  57. package/dist/{chunk-JMFDIN5R.mjs → chunk-QR6X2UOT.mjs} +3 -3
  58. package/dist/{chunk-JMFDIN5R.mjs.map → chunk-QR6X2UOT.mjs.map} +1 -1
  59. package/dist/{chunk-FHOI6O37.mjs → chunk-RO6HVZYY.mjs} +3 -3
  60. package/dist/{chunk-FHOI6O37.mjs.map → chunk-RO6HVZYY.mjs.map} +1 -1
  61. package/dist/{chunk-P6ZVZXTC.js → chunk-SAAU2FYV.js} +4 -4
  62. package/dist/{chunk-P6ZVZXTC.js.map → chunk-SAAU2FYV.js.map} +1 -1
  63. package/dist/{chunk-AGMDYCGG.js → chunk-TW54NMEG.js} +4 -4
  64. package/dist/{chunk-AGMDYCGG.js.map → chunk-TW54NMEG.js.map} +1 -1
  65. package/dist/{chunk-OIYIWG53.mjs → chunk-VC46KCRL.mjs} +4 -4
  66. package/dist/{chunk-OIYIWG53.mjs.map → chunk-VC46KCRL.mjs.map} +1 -1
  67. package/dist/{chunk-KSOWXLR4.mjs → chunk-WFLK2VUW.mjs} +6 -5
  68. package/dist/chunk-WFLK2VUW.mjs.map +1 -0
  69. package/dist/{chunk-VOSVV3LL.mjs → chunk-Y3IPKGOU.mjs} +6 -6
  70. package/dist/{chunk-VOSVV3LL.mjs.map → chunk-Y3IPKGOU.mjs.map} +1 -1
  71. package/dist/{chunk-EKDK4ZBT.js → chunk-YOGHWG36.js} +6 -5
  72. package/dist/chunk-YOGHWG36.js.map +1 -0
  73. package/dist/{chunk-DH3IXJRJ.mjs → chunk-Z5PAD5A6.mjs} +4 -4
  74. package/dist/{chunk-DH3IXJRJ.mjs.map → chunk-Z5PAD5A6.mjs.map} +1 -1
  75. package/dist/{chunk-YXUYWO2W.mjs → chunk-ZTAAFZNC.mjs} +3 -3
  76. package/dist/{chunk-YXUYWO2W.mjs.map → chunk-ZTAAFZNC.mjs.map} +1 -1
  77. package/dist/components/AdvancedPickers.d.mts +10 -1
  78. package/dist/components/AdvancedPickers.d.ts +10 -1
  79. package/dist/components/AdvancedPickers.js +8 -8
  80. package/dist/components/AdvancedPickers.mjs +4 -4
  81. package/dist/components/AppShell.js +8 -8
  82. package/dist/components/AppShell.mjs +6 -6
  83. package/dist/components/Comments.js +7 -7
  84. package/dist/components/Comments.mjs +4 -4
  85. package/dist/components/Commerce.js +18 -18
  86. package/dist/components/Commerce.mjs +7 -7
  87. package/dist/components/ContextMenu.js +3 -3
  88. package/dist/components/ContextMenu.mjs +2 -2
  89. package/dist/components/DataTable.d.mts +20 -7
  90. package/dist/components/DataTable.d.ts +20 -7
  91. package/dist/components/DataTable.js +8 -8
  92. package/dist/components/DataTable.mjs +2 -2
  93. package/dist/components/Display2.js +7 -7
  94. package/dist/components/Display2.mjs +3 -3
  95. package/dist/components/Display3.js +11 -11
  96. package/dist/components/Display3.mjs +5 -5
  97. package/dist/components/Editing.js +12 -12
  98. package/dist/components/Editing.mjs +7 -7
  99. package/dist/components/HoverCard.js +3 -3
  100. package/dist/components/HoverCard.mjs +2 -2
  101. package/dist/components/InputsExtra.js +11 -11
  102. package/dist/components/InputsExtra.mjs +2 -2
  103. package/dist/components/Layout.js +21 -21
  104. package/dist/components/Layout.mjs +2 -2
  105. package/dist/components/Logo.js +3 -3
  106. package/dist/components/Logo.mjs +2 -2
  107. package/dist/components/Menubar.js +3 -3
  108. package/dist/components/Menubar.mjs +2 -2
  109. package/dist/components/NavigationMenu.js +4 -4
  110. package/dist/components/NavigationMenu.mjs +3 -3
  111. package/dist/components/Overlay.js +8 -8
  112. package/dist/components/Overlay.mjs +6 -6
  113. package/dist/components/Pickers.d.mts +10 -1
  114. package/dist/components/Pickers.d.ts +10 -1
  115. package/dist/components/Pickers.js +9 -9
  116. package/dist/components/Pickers.mjs +4 -4
  117. package/dist/components/Popover.js +3 -3
  118. package/dist/components/Popover.mjs +2 -2
  119. package/dist/components/TimeAgo.js +5 -5
  120. package/dist/components/TimeAgo.mjs +3 -3
  121. package/dist/hooks/index.js +10 -10
  122. package/dist/hooks/index.mjs +2 -2
  123. package/dist/index.js +245 -245
  124. package/dist/index.mjs +31 -31
  125. package/dist/styles.css +1 -1
  126. package/package.json +1 -1
  127. package/dist/chunk-6KIM3DOH.mjs.map +0 -1
  128. package/dist/chunk-EKDK4ZBT.js.map +0 -1
  129. package/dist/chunk-KSOWXLR4.mjs.map +0 -1
  130. package/dist/chunk-KWXF6OQW.js.map +0 -1
  131. package/dist/chunk-NMUTNNAC.js.map +0 -1
  132. package/dist/chunk-S5OEOR57.mjs.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@misael703/ui",
3
- "version": "1.39.0",
3
+ "version": "1.41.0",
4
4
  "description": "Generic React + TypeScript UI kit, optimized for Next.js. Tokens, accessible components, runtime-configurable theming via presets.",
5
5
  "author": "Misael Ocas <misael.ocas@gmail.com>",
6
6
  "license": "MIT",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/DataTable.tsx"],"names":["rows","rowKey","selectedKeys","onSelectionChange","TableToolbar"],"mappings":"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","file":"chunk-6KIM3DOH.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { ChevronUp, ChevronDown, MoreVertical } from './Icons';\nimport { Checkbox } from './Form';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\n\n// ---------- DataTableRow (memoized) -------------------------------------\n// Extracted as React.memo so unrelated parent re-renders don't churn through\n// every row in the table. Combined with a ref-stable `onToggle`, only the\n// row whose `selected` prop actually changed re-renders on toggle.\ninterface DataTableRowProps<T> {\n row: T;\n rowK: string;\n selected: boolean;\n selectable: boolean;\n selectAriaLabel: string;\n columns: Column<T>[];\n onToggle: (k: string) => void;\n /** Resolved from `rowHref(row)` — makes the row a navigable link. */\n href?: string;\n /** Resolved from `onRowClick(row)` — makes the row activate a callback. */\n onActivate?: () => void;\n /** Accessible name for the stretched row control (e.g. \"Ver Taladro\"). */\n actionLabel?: string;\n /** Full-control escape hatch (see `DataTableProps.renderRow`). */\n renderRow?: (args: {\n row: T;\n cells: React.ReactNode;\n rowKey: string;\n }) => React.ReactNode;\n}\n\nfunction DataTableRowImpl<T>({\n row, rowK, selected, selectable, selectAriaLabel, columns, onToggle,\n href, onActivate, actionLabel, renderRow,\n}: DataTableRowProps<T>) {\n const interactive = !renderRow && (!!href || !!onActivate);\n\n const cells = (\n <>\n {selectable && (\n <td className={cx(interactive && 'data-table__cell--above')}>\n <Checkbox\n checked={selected}\n onChange={() => onToggle(rowK)}\n aria-label={selectAriaLabel}\n />\n </td>\n )}\n {columns.map((c, ci) => {\n const align = c.align ?? (c.numeric ? 'right' : 'left');\n const value = c.accessor\n ? c.accessor(row)\n : (row as Record<string, unknown>)[c.key] as React.ReactNode;\n // data-label is consumed by the .data-table--cards CSS to surface\n // the column header as an inline label on each row when the table\n // collapses to a card layout on narrow viewports. Non-string\n // headers (e.g. JSX) can't be projected through `attr()` so we\n // omit the attribute and the cell renders without a visible label.\n const label = typeof c.header === 'string' ? c.header : undefined;\n return (\n <td\n key={c.key}\n // `table__align-*` makes alignment authoritative for ANY cell\n // content. `text-align` alone silently fails for a block/flex\n // child (e.g. an action column of buttons → floated left); the\n // class adds the matching `margin` auto so element children\n // honor `align` too. Left cells emit no extra class → byte-\n // identical to pre-1.10.0 (zero regression for the default).\n className={cx(\n c.numeric && 'table__num',\n align !== 'left' && `table__align-${align}`,\n )}\n style={{ textAlign: align }}\n data-label={label}\n >\n {/* Stretched row control: a real <a>/<button> in the first\n data cell, overlaying the whole row (the <tr> is the\n positioned ancestor). Keyboard-operable + SR-labelled +\n valid table markup — no role hacks, no onClick-only div.\n Visually empty; the cells stay the visible content. Other\n interactive cell content opts above it via\n `data-table__cell--above` (stretched-link pattern). */}\n {interactive && ci === 0 && (\n href ? (\n <a\n href={href}\n className=\"data-table__rowlink\"\n aria-label={actionLabel}\n onClick={onActivate}\n />\n ) : (\n <button\n type=\"button\"\n className=\"data-table__rowlink\"\n aria-label={actionLabel}\n onClick={onActivate}\n />\n )\n )}\n {value as React.ReactNode}\n </td>\n );\n })}\n </>\n );\n\n if (renderRow) return <>{renderRow({ row, cells, rowKey: rowK })}</>;\n\n return (\n <tr className={cx(selected && 'is-selected', interactive && 'is-clickable')}>\n {cells}\n </tr>\n );\n}\n\n// Cast preserves the generic signature through React.memo.\nconst DataTableRow = React.memo(DataTableRowImpl) as typeof DataTableRowImpl;\n\n// ---------- DataTable ----------------------------------------------------\nexport interface Column<T> {\n key: string;\n header: React.ReactNode;\n accessor?: (row: T) => React.ReactNode;\n sortable?: boolean;\n align?: 'left' | 'right' | 'center';\n width?: number | string;\n /**\n * Marks the column as numeric: cells get the `.table__num` class\n * (monospace + tabular alignment) and right-align by default.\n */\n numeric?: boolean;\n}\n\nexport interface DataTableProps<T> {\n columns: Column<T>[];\n rows: T[];\n rowKey: (row: T) => string;\n sort?: { key: string; dir: 'asc' | 'desc' } | null;\n /**\n * Sorting is uncontrolled inside the table — consumers re-order `rows`\n * in response to `onSortChange`. Stability of equal-keyed rows is the\n * caller's responsibility (use a stable sort like `Array.prototype.sort`\n * in V8/Node ≥ 12, or a tiebreaker on rowKey).\n */\n onSortChange?: (s: { key: string; dir: 'asc' | 'desc' } | null) => void;\n selectable?: boolean;\n selectedKeys?: Set<string>;\n /**\n * \"Select all\" toggles only the rows currently passed to the component.\n * If the consumer paginates externally and only passes the visible page,\n * this selects the page — not the dataset across all pages.\n */\n onSelectionChange?: (keys: Set<string>) => void;\n empty?: React.ReactNode;\n /**\n * Renders an error state in place of the body. Takes precedence over\n * `loading`, `empty`, and rows. Use it when a fetch fails.\n */\n error?: React.ReactNode;\n loading?: boolean;\n /**\n * Sticky-position the table header so it stays visible while the body\n * scrolls. The wrapper itself becomes the vertical scroll container\n * (the table is already overflow-x:auto, so an outer scroller can't reach\n * the header). Defaults to `max-height: 70vh`; override by passing a\n * `className` with a different `max-height`. Do NOT wrap `<DataTable>` in\n * your own `overflow-y:auto` container — that breaks the sticky context.\n */\n stickyHeader?: boolean;\n /**\n * Layout for narrow viewports (`<600px`):\n * - `'table'` (default): the table scrolls horizontally inside its wrapper.\n * - `'cards'`: each row collapses to a stacked card with the column\n * header as an inline label per cell. Requires string `header` values\n * for the labels to appear; non-string headers render without a label.\n */\n mobileLayout?: 'table' | 'cards';\n /** Accessible name announced by screen readers (e.g. \"Pedidos abiertos\"). */\n ariaLabel?: string;\n /**\n * Builds the accessible label for the per-row checkbox so screen-reader\n * users can tell rows apart. Defaults to the row's key. Provide this\n * when the key isn't human-readable (e.g. a UUID).\n */\n rowLabel?: (row: T) => string;\n /**\n * Body density. Default `'compact'` (v1.10.0): a readable-dense register\n * (~30px rows, `--text-xs`, single-line cells) — the right default for\n * the data-heavy screens this kit serves (\"default = product\"). Pass\n * `'comfortable'` to opt back into the pre-1.10.0 airy 14px/16px rows\n * (which wrap to two lines).\n */\n density?: 'comfortable' | 'compact';\n /**\n * Makes every row a navigable link. The kit renders a real, keyboard-\n * operable, screen-reader-labelled `<a>` stretched over the row — valid\n * table markup (no `role` hacks, no `asChild` on `<tr>`, never an\n * onClick-only div). One Tab stop per row; Enter activates; the focus\n * ring shows on the row. Additive; combinable with `onRowClick`.\n */\n rowHref?: (row: T) => string;\n /**\n * Makes every row activate a callback (pointer **and** keyboard).\n * Renders a real stretched `<button>` with the same a11y guarantees as\n * `rowHref`. Prefer `rowHref` when the action is navigation.\n */\n onRowClick?: (row: T) => void;\n /**\n * Full-control escape hatch — the render-prop polymorphism the kit uses\n * for data/array-driven components (cf. `AppShell.linkAs`; deliberately\n * NOT `asChild`, which would emit invalid markup on `<tr>`). Receives the\n * row, the kit-rendered `cells`, and the row key; return your own row\n * element (e.g. a framework `<Link>` wrapping a `<tr>`). When set,\n * `rowHref`/`onRowClick` are ignored (you own row interactivity & a11y).\n */\n renderRow?: (args: {\n row: T;\n cells: React.ReactNode;\n rowKey: string;\n }) => React.ReactNode;\n /**\n * Toolbar / filter zone that shares the table's rounded surface. When\n * set, the DataTable renders it INSIDE its own border+radius+overflow\n * surface (`.table-surface`): the toolbar is clipped to the radius,\n * there is exactly one divider between it and the header, and the\n * header band's corner-rounding is dropped so the strip is clean in the\n * corner — no card-border + filter-border + header-top stack, no seam.\n * Accepts any node (`<TableToolbar>`, `<FilterBar>`, a custom row). The\n * legacy sibling pattern (`<TableToolbar/><DataTable/>`) still works.\n */\n toolbar?: React.ReactNode;\n /**\n * Surface chrome mode. Default `'card'`: the table draws its own\n * border + radius (and `--table-elevation` if set), the standalone\n * surface. `'flush'`: drops that chrome so the table sits clean inside\n * a parent that already owns the surface (a `<Card>`) without doubling\n * the border or nesting a radius. Use `'flush'` for the embedded-in-Card\n * case; leave the default for standalone tables.\n */\n surface?: 'card' | 'flush';\n className?: string;\n}\n\n/**\n * Tabular data renderer with optional sorting, selection, error/empty/\n * loading states.\n *\n * State priority (only one body state renders at a time):\n * error > loading > empty > rows\n *\n * Known limits (deferred to a later release):\n * - No virtualization; tested up to ~200 rows. For large datasets, plug\n * in react-window/tanstack-virtual around the body rows.\n */\nexport function DataTable<T>({\n columns, rows, rowKey,\n sort, onSortChange,\n selectable, selectedKeys, onSelectionChange,\n empty, error, loading, stickyHeader, mobileLayout = 'table',\n ariaLabel, rowLabel, className,\n density = 'compact', rowHref, onRowClick, renderRow, toolbar,\n surface = 'card',\n}: DataTableProps<T>) {\n const t = useLocale();\n const allSelected = selectable && rows.length > 0 && rows.every((r) => selectedKeys?.has(rowKey(r)));\n const someSelected = selectable && !allSelected && rows.some((r) => selectedKeys?.has(rowKey(r)));\n const headerCbRef = React.useRef<HTMLInputElement>(null);\n React.useEffect(() => {\n if (headerCbRef.current) headerCbRef.current.indeterminate = !!someSelected;\n }, [someSelected]);\n\n // Latest-props ref so toggleRow stays referentially stable across selection\n // changes. Without this, every selection update would create a new\n // toggleRow, defeating React.memo on DataTableRow.\n const propsRef = React.useRef({ rows, rowKey, selectedKeys, onSelectionChange });\n propsRef.current = { rows, rowKey, selectedKeys, onSelectionChange };\n\n const toggleAll = React.useCallback(() => {\n const { rows, rowKey, selectedKeys, onSelectionChange } = propsRef.current;\n if (!onSelectionChange) return;\n const allSel = rows.length > 0 && rows.every((r) => selectedKeys?.has(rowKey(r)));\n const next = new Set(selectedKeys);\n if (allSel) rows.forEach((r) => next.delete(rowKey(r)));\n else rows.forEach((r) => next.add(rowKey(r)));\n onSelectionChange(next);\n }, []);\n\n const toggleRow = React.useCallback((k: string) => {\n const { selectedKeys, onSelectionChange } = propsRef.current;\n if (!onSelectionChange) return;\n const next = new Set(selectedKeys);\n if (next.has(k)) next.delete(k); else next.add(k);\n onSelectionChange(next);\n }, []);\n\n const onSort = (col: Column<T>) => {\n if (!col.sortable || !onSortChange) return;\n if (!sort || sort.key !== col.key) onSortChange({ key: col.key, dir: 'asc' });\n else if (sort.dir === 'asc') onSortChange({ key: col.key, dir: 'desc' });\n else onSortChange(null);\n };\n\n const wrap = (\n <div\n className={cx(\n 'table-wrap',\n stickyHeader && 'table-wrap--sticky',\n mobileLayout === 'cards' && 'table-wrap--cards',\n surface === 'flush' && toolbar == null && 'table-wrap--flush',\n className,\n )}\n >\n <table\n className={cx(\n 'table data-table',\n density === 'comfortable' && 'table--comfortable',\n )}\n aria-label={ariaLabel}\n >\n <thead>\n <tr>\n {selectable && (\n <th scope=\"col\" style={{ width: 40 }}>\n <Checkbox\n ref={headerCbRef}\n checked={!!allSelected}\n onChange={toggleAll}\n aria-label={t['table.selectAll']}\n />\n </th>\n )}\n {columns.map((c) => {\n const active = sort?.key === c.key;\n const align = c.align ?? (c.numeric ? 'right' : 'left');\n const sortValue = c.sortable\n ? (active ? (sort!.dir === 'asc' ? 'ascending' : 'descending') : 'none')\n : undefined;\n const headerInner = (\n <span className=\"data-table__th\">\n {c.header}\n {c.sortable && (\n <span className=\"data-table__sort\" aria-hidden=\"true\">\n {active ? (sort!.dir === 'asc' ? <ChevronUp size={12} /> : <ChevronDown size={12} />) : <MoreVertical size={12} />}\n </span>\n )}\n </span>\n );\n return (\n <th\n key={c.key}\n scope=\"col\"\n style={{ width: c.width, textAlign: align }}\n aria-sort={sortValue}\n >\n {c.sortable ? (\n <button\n type=\"button\"\n className=\"data-table__sort-btn\"\n onClick={() => onSort(c)}\n >\n {headerInner}\n </button>\n ) : headerInner}\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {error ? (\n <tr>\n <td\n colSpan={columns.length + (selectable ? 1 : 0)}\n className=\"data-table__error\"\n role=\"alert\"\n style={{ padding: 32, textAlign: 'center' }}\n >\n {error}\n </td>\n </tr>\n ) : loading ? (\n Array.from({ length: 5 }).map((_, i) => (\n <tr key={`s${i}`}>\n {selectable && <td><div className=\"skel\" style={{ height: 14 }} /></td>}\n {columns.map((c) => <td key={c.key}><div className=\"skel\" style={{ height: 12, width: '70%' }} /></td>)}\n </tr>\n ))\n ) : rows.length === 0 ? (\n <tr>\n <td colSpan={columns.length + (selectable ? 1 : 0)} style={{ padding: 32 }}>\n {empty ?? <div style={{ textAlign: 'center', color: 'var(--fg-muted)' }}>{t['table.empty']}</div>}\n </td>\n </tr>\n ) : (\n rows.map((r) => {\n const k = rowKey(r);\n const label = rowLabel ? rowLabel(r) : k;\n const href = rowHref?.(r);\n const onActivate = onRowClick ? () => onRowClick(r) : undefined;\n return (\n <DataTableRow\n key={k}\n row={r}\n rowK={k}\n selected={!!selectedKeys?.has(k)}\n selectable={!!selectable}\n selectAriaLabel={format(t['table.selectRow'], { label })}\n columns={columns}\n onToggle={toggleRow}\n href={href}\n onActivate={onActivate}\n actionLabel={format(t['table.rowAction'], { label })}\n renderRow={renderRow}\n />\n );\n })\n )}\n </tbody>\n </table>\n </div>\n );\n // No toolbar → byte-identical legacy output. With a toolbar, the\n // DataTable owns the single rounded+clipped+bordered surface; the inner\n // .table-wrap defers its border/radius (CSS) and stays the scroll/sticky\n // context, so existing behaviour is untouched.\n return toolbar == null ? wrap : (\n <div className={cx('table-surface', surface === 'flush' && 'table-surface--flush')}>\n <div className=\"table-surface__bar\">{toolbar}</div>\n {wrap}\n </div>\n );\n}\n\n// ---------- Accordion ----------------------------------------------------\ninterface AccordionContextValue {\n open: Set<string>;\n toggle: (id: string) => void;\n multiple: boolean;\n}\nconst AccordionContext = React.createContext<AccordionContextValue | null>(null);\n\nexport interface AccordionProps {\n multiple?: boolean;\n defaultOpen?: string[];\n children: React.ReactNode;\n className?: string;\n}\n\nexport function Accordion({ multiple = false, defaultOpen = [], children, className }: AccordionProps) {\n const [open, setOpen] = React.useState<Set<string>>(new Set(defaultOpen));\n const toggle = (id: string) => {\n setOpen((curr) => {\n const next = new Set(curr);\n if (next.has(id)) next.delete(id);\n else {\n if (!multiple) next.clear();\n next.add(id);\n }\n return next;\n });\n };\n return (\n <AccordionContext.Provider value={{ open, toggle, multiple }}>\n <div className={cx('accordion', className)}>{children}</div>\n </AccordionContext.Provider>\n );\n}\n\nexport function AccordionItem({ id, title, children }: { id: string; title: React.ReactNode; children: React.ReactNode }) {\n const ctx = React.useContext(AccordionContext);\n if (!ctx) throw new Error('<AccordionItem> must be used inside <Accordion>');\n const isOpen = ctx.open.has(id);\n const reactId = React.useId();\n const triggerId = `accordion-trigger-${reactId}`;\n const panelId = `accordion-panel-${reactId}`;\n return (\n <div className={cx('accordion__item', isOpen && 'is-open')}>\n <button\n type=\"button\"\n id={triggerId}\n className=\"accordion__trigger\"\n aria-expanded={isOpen}\n aria-controls={panelId}\n onClick={() => ctx.toggle(id)}\n >\n <span>{title}</span>\n <span className=\"accordion__chev\" aria-hidden=\"true\"><ChevronDown size={14} /></span>\n </button>\n {isOpen && (\n <div\n id={panelId}\n role=\"region\"\n aria-labelledby={triggerId}\n className=\"accordion__panel\"\n >\n {children}\n </div>\n )}\n </div>\n );\n}\n\n// ---------- Breadcrumbs --------------------------------------------------\nexport interface BreadcrumbItem {\n label: React.ReactNode;\n href?: string;\n}\n\nexport function Breadcrumbs({ items, className }: { items: BreadcrumbItem[]; className?: string }) {\n return (\n <nav aria-label=\"Breadcrumb\" className={cx('breadcrumbs', className)}>\n <ol>\n {items.map((it, i) => {\n const last = i === items.length - 1;\n return (\n <li key={i}>\n {it.href && !last ? <a href={it.href}>{it.label}</a> : <span aria-current={last ? 'page' : undefined}>{it.label}</span>}\n {!last && <span aria-hidden=\"true\" className=\"breadcrumbs__sep\">/</span>}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n}\n\n// ---------- TablePagination ---------------------------------------------\n// Convenience wrapper that pairs a page-size selector with a Pagination\n// row. Use it under a DataTable when the table is paginated externally.\nimport { Pagination } from './Inputs';\n\nexport interface TablePaginationProps {\n page: number;\n pageSize: number;\n total: number;\n onPageChange: (page: number) => void;\n /** If set, renders a page-size selector. Omit for fixed-size pagination. */\n onPageSizeChange?: (size: number) => void;\n /** Options shown in the page-size selector. Default `[10, 25, 50, 100]`. */\n pageSizeOptions?: readonly number[];\n className?: string;\n}\n\nexport function TablePagination({\n page, pageSize, total, onPageChange,\n onPageSizeChange, pageSizeOptions = [10, 25, 50, 100],\n className,\n}: TablePaginationProps) {\n const t = useLocale();\n const selectId = React.useId();\n return (\n <div className={cx('table-pagination', className)}>\n {onPageSizeChange && (\n <label className=\"table-pagination__size\" htmlFor={selectId}>\n <span>{t['pagination.rowsPerPage']}</span>\n <select\n id={selectId}\n className=\"select\"\n value={pageSize}\n onChange={(e) => onPageSizeChange(Number(e.target.value))}\n >\n {pageSizeOptions.map((n) => (\n <option key={n} value={n}>{n}</option>\n ))}\n </select>\n </label>\n )}\n <Pagination\n page={page}\n pageSize={pageSize}\n total={total}\n onPageChange={onPageChange}\n />\n </div>\n );\n}\n\n// ---------- TableToolbar -------------------------------------------------\n// Barra superior que se compone arriba (o dentro de un wrapper) de un DataTable.\n// Cualquier hijo con className \"grow\" se expande para empujar las acciones al lado.\nexport const TableToolbar = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function TableToolbar({ className, ...rest }, ref) {\n return <div ref={ref} className={cx('table-toolbar', className)} {...rest} />;\n }\n);\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Pickers.tsx"],"names":["useLocale","React","usePopoverPosition","useDismiss","jsxs","cx","jsx","X","Portal","Fragment","Check","resolveDateFormat","dateFormatPlaceholder","startOfMonth","buildMonthGrid","formatDate","parseDate","CalendarIcon","addMonths","ChevronLeft","ChevronRight","isSameDay"],"mappings":"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","file":"chunk-EKDK4ZBT.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { CalendarIcon, ChevronLeft, ChevronRight, X, Check } 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 // Choose the active descendant on open (and on query change while open).\n // With a confirmed value and no active query, start on the SELECTED option\n // — not index 0 — so the keyboard cursor and the highlighted row agree and\n // the selection scrolls into view. Typing resets to the first match.\n React.useEffect(() => {\n if (!open) return;\n if (!query && value != null) {\n const idx = filtered.findIndex((o) => o.value === value);\n setActive(idx >= 0 ? idx : 0);\n } else {\n setActive(0);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps -- default only on open/query transitions; filtered/value read intentionally from closure\n }, [query, open]);\n\n // Keep the active option in view — on open (jump to the selected row) and\n // as the keyboard cursor moves. Adjusts only the listbox's own scrollTop,\n // never the page: the list is portaled, so scrollIntoView could scroll an\n // ancestor instead.\n React.useEffect(() => {\n if (!open) return;\n const list = listRef.current;\n if (!list) return;\n const el = list.querySelectorAll<HTMLElement>('[role=\"option\"]')[active];\n if (!el) return;\n const top = el.offsetTop;\n const bottom = top + el.offsetHeight;\n if (top < list.scrollTop) list.scrollTop = top;\n else if (bottom > list.scrollTop + list.clientHeight) list.scrollTop = bottom - list.clientHeight;\n }, [open, active]);\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 <span className=\"combobox__option-content\">\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 </span>\n {/* Unambiguous selected marker — distinguishes the confirmed\n value from the keyboard/hover `active` highlight even when\n their backgrounds are close in a given palette. */}\n {o.value === value && <Check size={16} className=\"combobox__option-check\" aria-hidden=\"true\" />}\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 +0,0 @@
1
- {"version":3,"sources":["../src/components/Pickers.tsx"],"names":[],"mappings":";;;;;;;;;;AA8CA,IAAM,aAAA,GAAgB,CAAK,CAAA,EAAsB,CAAA,KAC/C,CAAA,CAAE,KAAA,CAAM,WAAA,EAAY,CAAE,QAAA,CAAS,CAAA,CAAE,WAAA,EAAa,CAAA;AAEzC,SAAS,QAAA,CAAqB;AAAA,EACnC,KAAA;AAAA,EAAO,QAAA;AAAA,EAAU,OAAA;AAAA,EAAS,WAAA;AAAA,EAC1B,YAAA;AAAA,EAAc,MAAA,GAAS,aAAA;AAAA,EACvB,SAAA;AAAA,EAAW,OAAA;AAAA,EAAS,QAAA;AAAA,EAAU,EAAA;AAAA,EAC9B,UAAA,GAAa,IAAA;AAAA,EAAM;AACrB,CAAA,EAAqB;AACnB,EAAA,MAAM,SAAS,SAAA,EAAU;AACzB,EAAA,MAAM,EAAA,GAAK,WAAA,IAAe,MAAA,CAAO,eAAe,CAAA;AAChD,EAAA,MAAM,KAAA,GAAQ,YAAA,IAAgB,MAAA,CAAO,kBAAkB,CAAA;AACvD,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAU,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAU,eAAS,EAAE,CAAA;AAC3C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAU,eAAS,CAAC,CAAA;AAC5C,EAAA,MAAM,OAAA,GAAgB,aAAuB,IAAI,CAAA;AACjD,EAAA,MAAM,QAAA,GAAiB,aAAyB,IAAI,CAAA;AACpD,EAAA,MAAM,OAAA,GAAgB,aAAyB,IAAI,CAAA;AAEnD,EAAA,MAAM,UAAgB,KAAA,CAAA,KAAA,EAAM;AAC5B,EAAA,MAAM,SAAA,GAAY,CAAA,EAAG,EAAA,IAAM,OAAO,CAAA,QAAA,CAAA;AAElC,EAAA,MAAM,QAAA,GAAiB,KAAA,CAAA,OAAA;AAAA,IACrB,MAAM,QAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,KAAA,KAAU,KAAK,CAAA,IAAK,IAAA;AAAA,IAChD,CAAC,SAAS,KAAK;AAAA,GACjB;AACA,EAAA,MAAM,QAAA,GAAiB,KAAA,CAAA,OAAA;AAAA,IACrB,MAAO,KAAA,GAAQ,OAAA,CAAQ,MAAA,CAAO,CAAC,MAAM,MAAA,CAAO,CAAA,EAAG,KAAK,CAAC,CAAA,GAAI,OAAA;AAAA,IACzD,CAAC,OAAA,EAAS,KAAA,EAAO,MAAM;AAAA,GACzB;AAEA,EAAA,MAAM,GAAA,GAAM,kBAAA,CAAmB,OAAA,EAAS,OAAA,EAAS;AAAA,IAC/C,IAAA;AAAA,IACA,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EAAO,OAAA;AAAA,IACP,MAAA,EAAQ,CAAA;AAAA,IACR,gBAAA,EAAkB;AAAA,GACnB,CAAA;AAID,EAAA,UAAA,CAAW;AAAA,IACT,IAAA;AAAA,IACA,SAAA,EAAW,MAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,IAC9B,IAAA,EAAM,CAAC,OAAA,EAAS,OAAO,CAAA;AAAA,IACvB,aAAA,EAAe;AAAA,GAChB,CAAA;AAMD,EAAM,gBAAU,MAAM;AACpB,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,IAAI,CAAC,KAAA,IAAS,KAAA,IAAS,IAAA,EAAM;AAC3B,MAAA,MAAM,MAAM,QAAA,CAAS,SAAA,CAAU,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,KAAK,CAAA;AACvD,MAAA,SAAA,CAAU,GAAA,IAAO,CAAA,GAAI,GAAA,GAAM,CAAC,CAAA;AAAA,IAC9B,CAAA,MAAO;AACL,MAAA,SAAA,CAAU,CAAC,CAAA;AAAA,IACb;AAAA,EAEF,CAAA,EAAG,CAAC,KAAA,EAAO,IAAI,CAAC,CAAA;AAMhB,EAAM,gBAAU,MAAM;AACpB,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,MAAM,OAAO,OAAA,CAAQ,OAAA;AACrB,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,gBAAA,CAA8B,iBAAiB,EAAE,MAAM,CAAA;AACvE,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,MAAM,MAAM,EAAA,CAAG,SAAA;AACf,IAAA,MAAM,MAAA,GAAS,MAAM,EAAA,CAAG,YAAA;AACxB,IAAA,IAAI,GAAA,GAAM,IAAA,CAAK,SAAA,EAAW,IAAA,CAAK,SAAA,GAAY,GAAA;AAAA,SAAA,IAClC,MAAA,GAAS,KAAK,SAAA,GAAY,IAAA,CAAK,cAAc,IAAA,CAAK,SAAA,GAAY,SAAS,IAAA,CAAK,YAAA;AAAA,EACvF,CAAA,EAAG,CAAC,IAAA,EAAM,MAAM,CAAC,CAAA;AAEjB,EAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,KAAwC;AACrD,IAAA,IAAI,CAAA,CAAE,QAAQ,WAAA,EAAa;AACzB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,IAAI,CAAC,IAAA,EAAM,OAAA,CAAQ,IAAI,CAAA;AAAA,WAClB,SAAA,CAAU,CAAC,CAAA,KAAM,IAAA,CAAK,GAAA,CAAI,SAAS,MAAA,GAAS,CAAA,EAAG,CAAA,GAAI,CAAC,CAAC,CAAA;AAAA,IAC5D,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,SAAA,EAAW;AAE9B,MAAA,IAAI,CAAC,IAAA,EAAM;AACX,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,SAAA,CAAU,CAAC,CAAA,KAAM,IAAA,CAAK,IAAI,CAAA,EAAG,CAAA,GAAI,CAAC,CAAC,CAAA;AAAA,IACrC,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,OAAA,EAAS;AAI5B,MAAA,IAAI,CAAC,IAAA,EAAM;AACX,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,MAAM,GAAA,GAAM,SAAS,MAAM,CAAA;AAC3B,MAAA,IAAI,GAAA,IAAO,CAAC,GAAA,CAAI,QAAA,EAAU;AACxB,QAAA,QAAA,CAAS,IAAI,KAAK,CAAA;AAClB,QAAA,QAAA,CAAS,EAAE,CAAA;AACX,QAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,MACf;AAAA,IACF,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,QAAA,EAAU;AAC7B,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf;AAAA,EACF,CAAA;AAEA,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,OAAA,EAAS,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,OAAA,IAAW,YAAA,EAAc,QAAA,IAAY,aAAA,EAAe,SAAS,CAAA,EACvG,QAAA,EAAA;AAAA,IAAA,UAAA,mBACC,GAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,QAAA;AAAA,QACL,EAAA;AAAA,QACA,IAAA,EAAK,MAAA;AAAA,QACL,IAAA,EAAK,UAAA;AAAA,QACL,eAAA,EAAe,IAAA;AAAA,QACf,eAAA,EAAe,SAAA;AAAA,QACf,SAAA,EAAU,iBAAA;AAAA,QACV,WAAA,EAAa,EAAA;AAAA,QACb,QAAA;AAAA,QACA,KAAA,EAAO,IAAA,GAAO,KAAA,GAAQ,QAAA,EAAU,KAAA,IAAS,EAAA;AAAA,QACzC,OAAA,EAAS,MAAM,OAAA,CAAQ,IAAI,CAAA;AAAA,QAC3B,QAAA,EAAU,CAAC,CAAA,KAAM;AAAE,UAAA,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAG,UAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,QAAG,CAAA;AAAA,QAC5D,SAAA,EAAW;AAAA;AAAA,KACb;AAAA;AAAA;AAAA;AAAA,sBAKA,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,EAAA;AAAA,UACA,IAAA,EAAK,QAAA;AAAA,UACL,IAAA,EAAK,UAAA;AAAA,UACL,eAAA,EAAc,SAAA;AAAA,UACd,eAAA,EAAe,IAAA;AAAA,UACf,eAAA,EAAe,SAAA;AAAA,UACf,SAAA,EAAU,mBAAA;AAAA,UACV,QAAA;AAAA,UACA,SAAS,MAAM,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,UAChC,SAAA,EAAW,KAAA;AAAA,UAEV,QAAA,EAAA,QAAA,mBACC,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAA,EAA2B,QAAA,EAAA,QAAA,CAAS,KAAA,EAAM,CAAA,mBAE1D,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAiC,QAAA,EAAA,EAAA,EAAG;AAAA;AAAA;AAExD,KAAA;AAAA,IAED,UAAA,IAAc,QAAA,IAAY,CAAC,IAAA,oBAC1B,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAU,iBAAA;AAAA,QACV,SAAS,MAAM;AAAE,UAAA,QAAA,CAAS,IAAI,CAAA;AAAG,UAAA,QAAA,CAAS,EAAE,CAAA;AAAG,UAAA,QAAA,CAAS,SAAS,KAAA,EAAM;AAAA,QAAG,CAAA;AAAA,QAC1E,YAAA,EAAY,OAAO,uBAAuB,CAAA;AAAA,QAC3C,QAAA,kBAAA,GAAA,CAAC,CAAA,EAAA,EAAE,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,KAAE;AAAA,IAEjB,IAAA,wBACE,MAAA,EAAA,EACD,QAAA,kBAAA,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,OAAA;AAAA,QACL,EAAA,EAAI,SAAA;AAAA,QACJ,IAAA,EAAK,SAAA;AAAA,QACL,SAAA,EAAW,EAAA,CAAG,gBAAA,EAAkB,aAAa,CAAA;AAAA,QAC7C,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,OAAA;AAAA,UACV,KAAK,GAAA,CAAI,GAAA;AAAA,UACT,MAAM,GAAA,CAAI,IAAA;AAAA,UACV,OAAO,GAAA,CAAI,KAAA;AAAA,UACX,UAAA,EAAY,GAAA,CAAI,KAAA,GAAQ,SAAA,GAAY;AAAA,SACtC;AAAA,QAEC,QAAA,EAAA,QAAA,CAAS,MAAA,KAAW,CAAA,mBACnB,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,iBAAA,EAAmB,QAAA,EAAA,KAAA,EAAM,CAAA,GAEvC,QAAA,CAAS,GAAA,CAAI,CAAC,GAAG,CAAA,qBACf,IAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YAEC,IAAA,EAAK,QAAA;AAAA,YACL,eAAA,EAAe,EAAE,KAAA,KAAU,KAAA;AAAA,YAC3B,iBAAe,CAAA,CAAE,QAAA;AAAA,YACjB,SAAA,EAAW,EAAA,CAAG,kBAAA,EAAoB,CAAA,KAAM,MAAA,IAAU,WAAA,EAAa,CAAA,CAAE,KAAA,KAAU,KAAA,IAAS,aAAA,EAAe,CAAA,CAAE,QAAA,IAAY,aAAa,CAAA;AAAA,YAC9H,YAAA,EAAc,MAAM,SAAA,CAAU,CAAC,CAAA;AAAA,YAC/B,WAAA,EAAa,CAAC,CAAA,KAAM;AAClB,cAAA,CAAA,CAAE,cAAA,EAAe;AACjB,cAAA,IAAI,EAAE,QAAA,EAAU;AAChB,cAAA,QAAA,CAAS,EAAE,KAAK,CAAA;AAChB,cAAA,QAAA,CAAS,EAAE,CAAA;AACX,cAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,YACf,CAAA;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,UAAK,SAAA,EAAU,0BAAA,EACb,yBACC,YAAA,CAAa,CAAC,oBAEd,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wBAAA,EAA0B,QAAA,EAAA,CAAA,CAAE,KAAA,EAAM,CAAA;AAAA,gBACjD,EAAE,WAAA,oBAAe,GAAA,CAAC,UAAK,SAAA,EAAU,uBAAA,EAAyB,YAAE,WAAA,EAAY;AAAA,eAAA,EAC3E,CAAA,EAEJ,CAAA;AAAA,cAIC,CAAA,CAAE,KAAA,KAAU,KAAA,oBAAS,GAAA,CAAC,KAAA,EAAA,EAAM,MAAM,EAAA,EAAI,SAAA,EAAU,wBAAA,EAAyB,aAAA,EAAY,MAAA,EAAO;AAAA;AAAA,WAAA;AAAA,UA3BxF,MAAA,CAAO,EAAE,KAAK;AAAA,SA6BtB;AAAA;AAAA,KAEL,EACA;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAoBO,SAAS,UAAA,CAAW;AAAA,EACzB,KAAA;AAAA,EAAO,QAAA;AAAA,EAAU,OAAA;AAAA,EAAS,OAAA;AAAA,EAAS,WAAA;AAAA,EACnC,QAAA;AAAA,EAAU,OAAA;AAAA,EAAS,SAAA;AAAA,EAAW,EAAA;AAAA,EAAI,MAAA,GAAS;AAC7C,CAAA,EAAoB;AAClB,EAAA,MAAM,SAAS,SAAA,EAAU;AACzB,EAAA,MAAM,GAAA,GAAM,kBAAkB,MAAM,CAAA;AACpC,EAAA,MAAM,EAAA,GAAK,WAAA,IAAe,qBAAA,CAAsB,GAAG,CAAA;AACnD,EAAA,MAAM,QAAA,GAAW,OAAO,sBAAsB,CAAA;AAC9C,EAAA,MAAM,MAAA,GAAS,OAAO,iBAAiB,CAAA;AACvC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAU,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAU,KAAA,CAAA,QAAA,CAAS,MAAM,YAAA,CAAa,KAAA,oBAAS,IAAI,IAAA,EAAM,CAAC,CAAA;AAC9E,EAAA,MAAM,OAAA,GAAgB,aAAuB,IAAI,CAAA;AACjD,EAAA,MAAM,UAAA,GAAmB,aAAuB,IAAI,CAAA;AAOpD,EAAA,MAAM,GAAA,GAAM,kBAAA,CAAmB,OAAA,EAAS,UAAA,EAAY;AAAA,IAClD,IAAA;AAAA,IACA,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EAAO,OAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,UAAA,CAAW;AAAA,IACT,IAAA;AAAA,IACA,SAAA,EAAW,MAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,IAC9B,IAAA,EAAM,CAAC,OAAA,EAAS,UAAU;AAAA,GAC3B,CAAA;AAED,EAAM,gBAAU,MAAM;AACpB,IAAA,IAAI,KAAA,EAAO,OAAA,CAAQ,YAAA,CAAa,KAAK,CAAC,CAAA;AAAA,EACxC,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,cAAA,CAAe,MAAM,CAAC,CAAA;AAExC,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KACjB,OAAA,IAAW,CAAA,GAAI,IAAI,IAAA,CAAK,OAAA,CAAQ,WAAA,EAAY,EAAG,OAAA,CAAQ,QAAA,EAAS,EAAG,OAAA,CAAQ,OAAA,EAAS,CAAA,IACpF,OAAA,IAAW,CAAA,GAAI,IAAI,IAAA,CAAK,OAAA,CAAQ,WAAA,EAAY,EAAG,OAAA,CAAQ,QAAA,EAAS,EAAG,OAAA,CAAQ,SAAS,CAAA;AAEvF,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,OAAA,EAAS,SAAA,EAAW,EAAA,CAAG,YAAA,EAAc,OAAA,IAAW,YAAA,EAAc,QAAA,IAAY,aAAA,EAAe,SAAS,CAAA,EAC1G,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,EAAA;AAAA,QACA,IAAA,EAAK,MAAA;AAAA,QACL,SAAA,EAAU,mBAAA;AAAA,QACV,WAAA,EAAa,EAAA;AAAA,QACb,QAAA;AAAA,QACA,KAAA,EAAO,KAAA,GAAQ,UAAA,CAAW,KAAA,EAAO,GAAG,CAAA,GAAI,EAAA;AAAA,QACxC,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,UAAA,MAAM,CAAA,GAAI,SAAA,CAAU,CAAA,CAAE,MAAA,CAAO,OAAO,GAAG,CAAA;AACvC,UAAA,QAAA,CAAS,CAAC,CAAA;AAAA,QACZ,CAAA;AAAA,QACA,OAAA,EAAS,MAAM,OAAA,CAAQ,IAAI,CAAA;AAAA,QAC3B,gBAAc,OAAA,IAAW;AAAA;AAAA,KAC3B;AAAA,oBACA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAU,oBAAA;AAAA,QACV,SAAS,MAAM,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,QAChC,QAAA;AAAA,QACA,YAAA,EAAY,OAAO,qBAAqB,CAAA;AAAA,QACzC,QAAA,kBAAA,GAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,KAAE;AAAA,IAC1B,IAAA,wBACE,MAAA,EAAA,EACD,QAAA,kBAAA,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,UAAA;AAAA,QACL,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,aAAa,CAAA;AAAA,QAClD,IAAA,EAAK,QAAA;AAAA,QACL,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,OAAA;AAAA,UACV,KAAK,GAAA,CAAI,GAAA;AAAA,UACT,MAAM,GAAA,CAAI,IAAA;AAAA,UACV,UAAA,EAAY,GAAA,CAAI,KAAA,GAAQ,SAAA,GAAY;AAAA,SACtC;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iBAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,QAAA,EAAA,EAAO,MAAK,QAAA,EAAS,OAAA,EAAS,MAAM,OAAA,CAAQ,CAAC,MAAM,SAAA,CAAU,CAAA,EAAG,EAAE,CAAC,CAAA,EAAG,cAAY,MAAA,CAAO,oBAAoB,GAAG,QAAA,kBAAA,GAAA,CAAC,WAAA,EAAA,EAAY,IAAA,EAAM,EAAA,EAAI,CAAA,EAAE,CAAA;AAAA,4BAC1I,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mBAAA,EAAqB,QAAA,EAAA;AAAA,cAAA,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA;AAAA,cAAE,GAAA;AAAA,cAAE,KAAK,WAAA;AAAY,aAAA,EAAE,CAAA;AAAA,4BAClF,GAAA,CAAC,YAAO,IAAA,EAAK,QAAA,EAAS,SAAS,MAAM,OAAA,CAAQ,CAAC,CAAA,KAAM,SAAA,CAAU,CAAA,EAAG,CAAC,CAAC,CAAA,EAAG,cAAY,MAAA,CAAO,oBAAoB,GAAG,QAAA,kBAAA,GAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAM,EAAA,EAAI,CAAA,EAAE;AAAA,WAAA,EAC5I,CAAA;AAAA,0BACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACZ,QAAA,EAAA;AAAA,YAAA,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBAAM,GAAA,CAAC,UAAa,SAAA,EAAU,iBAAA,EAAmB,QAAA,EAAA,CAAA,EAAA,EAAhC,CAAkC,CAAO,CAAA;AAAA,YAC3E,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM;AACnB,cAAA,IAAI,CAAC,CAAA,EAAG,2BAAQ,MAAA,EAAA,EAAA,EAAU,CAAA,CAAA,EAAI,CAAC,CAAA,CAAI,CAAA;AACnC,cAAA,MAAM,GAAA,GAAM,KAAA,IAAS,SAAA,CAAU,CAAA,EAAG,KAAK,CAAA;AACvC,cAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,CAAA,kBAAG,IAAI,MAAM,CAAA;AACrC,cAAA,MAAM,GAAA,GAAM,WAAW,CAAC,CAAA;AACxB,cAAA,uBACE,GAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBAEC,IAAA,EAAK,QAAA;AAAA,kBACL,SAAA,EAAW,GAAG,iBAAA,EAAmB,GAAA,IAAO,eAAe,KAAA,IAAS,UAAA,EAAY,OAAO,aAAa,CAAA;AAAA,kBAChG,QAAA,EAAU,CAAC,CAAC,GAAA;AAAA,kBACZ,SAAS,MAAM;AAAE,oBAAA,QAAA,CAAS,CAAC,CAAA;AAAG,oBAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,kBAAG,CAAA;AAAA,kBAE7C,YAAE,OAAA;AAAQ,iBAAA;AAAA,gBANN;AAAA,eAOP;AAAA,YAEJ,CAAC;AAAA,WAAA,EACH;AAAA;AAAA;AAAA,KACF,EACA;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAeO,SAAS,UAAA,CAAW;AAAA,EACzB,OAAA;AAAA,EAAS,MAAA;AAAA,EAAQ,QAAA,GAAW,KAAA;AAAA,EAAO,OAAA;AAAA,EAAS,QAAA;AAAA,EAAU,SAAA;AAAA,EAAW,IAAA;AAAA,EACjE,YAAA,EAAc;AAChB,CAAA,EAAoB;AAClB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAU,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,QAAA,GAAiB,aAAyB,IAAI,CAAA;AACpD,EAAA,MAAM,SAAe,KAAA,CAAA,KAAA,EAAM;AAC3B,EAAA,MAAM,SAAS,SAAA,EAAU;AACzB,EAAA,MAAM,MAAA,GAAS,CAAC,IAAA,KAA0B;AACxC,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,IAAI,GAAA,GAAM,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AACzB,IAAA,IAAI,OAAA,QAAe,GAAA,CAAI,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,OAAO,CAAA;AACtD,IAAA,IAAI,CAAC,QAAA,EAAU,GAAA,GAAM,GAAA,CAAI,KAAA,CAAM,GAAG,CAAC,CAAA;AACnC,IAAA,OAAA,CAAQ,GAAG,CAAA;AAAA,EACb,CAAA;AACA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAW,EAAA,CAAG,aAAA,EAAe,QAAQ,SAAA,EAAW,QAAA,IAAY,eAAe,SAAS,CAAA;AAAA,MACpF,UAAA,EAAY,CAAC,CAAA,KAAM;AAAE,QAAA,CAAA,CAAE,cAAA,EAAe;AAAG,QAAA,IAAI,CAAC,QAAA,EAAU,OAAA,CAAQ,IAAI,CAAA;AAAA,MAAG,CAAA;AAAA,MACvE,WAAA,EAAa,MAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,MAChC,MAAA,EAAQ,CAAC,CAAA,KAAM;AAAE,QAAA,CAAA,CAAE,cAAA,EAAe;AAAG,QAAA,OAAA,CAAQ,KAAK,CAAA;AAAG,QAAA,IAAI,CAAC,QAAA,EAAU,MAAA,CAAO,CAAA,CAAE,aAAa,KAAK,CAAA;AAAA,MAAG,CAAA;AAAA,MAClG,SAAS,MAAM,CAAC,QAAA,IAAY,QAAA,CAAS,SAAS,KAAA,EAAM;AAAA,MACpD,IAAA,EAAK,QAAA;AAAA,MACL,QAAA,EAAU,WAAW,EAAA,GAAK,CAAA;AAAA,MAC1B,YAAA,EAAY,SAAA;AAAA,MACZ,kBAAA,EAAkB,OAAO,MAAA,GAAS,MAAA;AAAA,MAClC,SAAA,EAAW,CAAC,CAAA,KAAM;AAAE,QAAA,IAAA,CAAK,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,QAAQ,CAAC,QAAA,EAAU,QAAA,CAAS,OAAA,EAAS,KAAA,EAAM;AAAA,MAAG,CAAA;AAAA,MAEtG,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,QAAA;AAAA,YACL,IAAA,EAAK,MAAA;AAAA,YACL,MAAA;AAAA,YACA,QAAA;AAAA,YACA,QAAA;AAAA,YACA,MAAA,EAAM,IAAA;AAAA,YACN,UAAU,CAAC,CAAA,KAAM,MAAA,CAAO,CAAA,CAAE,OAAO,KAAK;AAAA;AAAA,SACxC;AAAA,4BACC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EAAoB,aAAA,EAAY,QAAO,QAAA,EAAA,QAAA,EAAC,CAAA;AAAA,4BACtD,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EAAsB,QAAA,EAAA,MAAA,CAAO,kBAAkB,CAAA,EAAE,CAAA;AAAA,QAC/D,wBAAQ,GAAA,CAAC,KAAA,EAAA,EAAI,IAAI,MAAA,EAAQ,SAAA,EAAU,qBAAqB,QAAA,EAAA,IAAA,EAAK;AAAA;AAAA;AAAA,GAChE;AAEJ;AA8BA,SAAS,eAAA,CAAgB;AAAA,EACvB,SAAA;AAAA,EAAW,YAAA;AAAA,EAAc,WAAA;AAAA,EAAa,SAAA;AAAA,EAAW,QAAA;AAAA,EACjD,SAAA;AAAA,EAAW,SAAA;AAAA,EAAW,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,KAAA;AAAA,EACtC,QAAA;AAAA,EAAU,OAAA;AAAA,EAAS,EAAA;AAAA,EAAI;AACzB,CAAA,EAAyB;AACvB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAU,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,OAAA,GAAgB,aAAuB,IAAI,CAAA;AACjD,EAAA,MAAM,UAAA,GAAmB,aAAuB,IAAI,CAAA;AAGpD,EAAA,MAAM,GAAA,GAAM,kBAAA,CAAmB,OAAA,EAAS,UAAA,EAAY;AAAA,IAClD,IAAA;AAAA,IACA,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EAAO,OAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACT,CAAA;AACD,EAAA,UAAA,CAAW,EAAE,IAAA,EAAM,SAAA,EAAW,MAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,IAAA,EAAM,CAAC,OAAA,EAAS,UAAU,CAAA,EAAG,CAAA;AAEjF,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,OAAA;AAAA,MACL,SAAA,EAAW,GAAG,SAAA,EAAW,YAAA,EAAc,WAAW,YAAA,EAAc,QAAA,IAAY,eAAe,SAAS,CAAA;AAAA,MAEpG,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,EAAA;AAAA,YACA,IAAA,EAAK,MAAA;AAAA,YACL,QAAA,EAAQ,IAAA;AAAA,YACR,SAAA,EAAU,mBAAA;AAAA,YACV,WAAA;AAAA,YACA,QAAA;AAAA,YACA,KAAA,EAAO,YAAA;AAAA,YACP,OAAA,EAAS,MAAM,OAAA,CAAQ,IAAI,CAAA;AAAA,YAC3B,OAAA,EAAS,MAAM,OAAA,CAAQ,IAAI,CAAA;AAAA,YAC3B,gBAAc,OAAA,IAAW;AAAA;AAAA,SAC3B;AAAA,wBACA,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,SAAA,EAAU,oBAAA;AAAA,YACV,SAAS,MAAM,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,YAChC,QAAA;AAAA,YACA,YAAA,EAAY,SAAA;AAAA,YAEZ,QAAA,kBAAA,GAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,SAC1B;AAAA,QACC,IAAA,wBACE,MAAA,EAAA,EACC,QAAA,kBAAA,IAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,UAAA;AAAA,YACL,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,aAAa,CAAA;AAAA,YAClD,IAAA,EAAK,QAAA;AAAA,YACL,KAAA,EAAO;AAAA,cACL,QAAA,EAAU,OAAA;AAAA,cACV,KAAK,GAAA,CAAI,GAAA;AAAA,cACT,MAAM,GAAA,CAAI,IAAA;AAAA,cACV,UAAA,EAAY,GAAA,CAAI,KAAA,GAAQ,SAAA,GAAY;AAAA,aACtC;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iBAAA,EACb,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,OAAA,EAAS,MAAA,EAAQ,YAAA,EAAY,SAAA,EAAW,QAAA,kBAAA,GAAA,CAAC,WAAA,EAAA,EAAY,IAAA,EAAM,EAAA,EAAI,CAAA,EAAE,CAAA;AAAA,gCACvF,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mBAAA,EAAqB,QAAA,EAAA,QAAA,EAAS,CAAA;AAAA,gCAC9C,GAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,OAAA,EAAS,MAAA,EAAQ,YAAA,EAAY,SAAA,EAAW,QAAA,kBAAA,GAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAM,EAAA,EAAI,CAAA,EAAE;AAAA,eAAA,EAC1F,CAAA;AAAA,kCACC,KAAA,EAAA,EAAI,SAAA,EAAU,oBACZ,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,qBACV,GAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBAEC,IAAA,EAAK,QAAA;AAAA,kBACL,SAAA,EAAW,GAAG,kBAAA,EAAoB,CAAA,CAAE,YAAY,aAAA,EAAe,CAAA,CAAE,WAAW,QAAQ,CAAA;AAAA,kBACpF,UAAU,CAAA,CAAE,QAAA;AAAA,kBACZ,SAAS,MAAM;AAAE,oBAAA,CAAA,CAAE,QAAA,EAAS;AAAG,oBAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,kBAAG,CAAA;AAAA,kBAE9C,QAAA,EAAA,CAAA,CAAE;AAAA,iBAAA;AAAA,gBANE,CAAA,CAAE;AAAA,eAQV,CAAA,EACH;AAAA;AAAA;AAAA,SACF,EACF;AAAA;AAAA;AAAA,GAEJ;AAEJ;AAeO,SAAS,UAAA,CAAW;AAAA,EACzB,KAAA;AAAA,EAAO,QAAA;AAAA,EAAU,OAAA;AAAA,EAAS,OAAA;AAAA,EAAS,WAAA;AAAA,EACnC,QAAA;AAAA,EAAU,OAAA;AAAA,EAAS,EAAA;AAAA,EAAI;AACzB,CAAA,EAAoB;AAClB,EAAA,MAAM,IAAI,SAAA,EAAU;AACpB,EAAA,MAAM,IAAA,GAAO,KAAA,IAAA,iBAAS,IAAI,IAAA,IAAO,WAAA,EAAY;AAC7C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAU,KAAA,CAAA,QAAA,CAAS,KAAK,KAAA,CAAM,IAAA,GAAO,EAAE,CAAA,GAAI,EAAE,CAAA;AAErE,EAAM,gBAAU,MAAM;AACpB,IAAA,IAAI,KAAA,IAAS,MAAM,SAAA,CAAU,IAAA,CAAK,MAAM,KAAA,GAAQ,EAAE,IAAI,EAAE,CAAA;AAAA,EAC1D,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,KAAA,GAAoB,MAAM,IAAA,CAAK,EAAE,QAAQ,EAAA,EAAG,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM;AAC7D,IAAA,MAAM,IAAA,GAAO,SAAS,CAAA,GAAI,CAAA;AAC1B,IAAA,OAAO;AAAA,MACL,GAAA,EAAK,OAAO,IAAI,CAAA;AAAA,MAChB,KAAA,EAAO,IAAA;AAAA,MACP,UAAU,KAAA,KAAU,IAAA;AAAA,MACpB,OAAA,EAAS,IAAA,GAAO,MAAA,IAAU,IAAA,GAAO,MAAA,GAAS,CAAA;AAAA,MAC1C,UAAW,OAAA,IAAW,IAAA,IAAQ,OAAO,OAAA,IAAa,OAAA,IAAW,QAAQ,IAAA,GAAO,OAAA;AAAA,MAC5E,QAAA,EAAU,MAAM,QAAA,CAAS,IAAI;AAAA,KAC/B;AAAA,EACF,CAAC,CAAA;AAED,EAAA,uBACE,GAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,YAAA;AAAA,MACV,YAAA,EAAc,KAAA,IAAS,IAAA,GAAO,MAAA,CAAO,KAAK,CAAA,GAAI,EAAA;AAAA,MAC9C,WAAA,EAAa,WAAA,IAAe,CAAA,CAAE,mBAAmB,CAAA;AAAA,MACjD,SAAA,EAAW,EAAE,qBAAqB,CAAA;AAAA,MAClC,QAAA,EAAU,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,SAAS,CAAC,CAAA,CAAA;AAAA,MACjC,SAAA,EAAW,EAAE,mBAAmB,CAAA;AAAA,MAChC,SAAA,EAAW,EAAE,mBAAmB,CAAA;AAAA,MAChC,QAAQ,MAAM,SAAA,CAAU,CAAC,CAAA,KAAM,IAAI,EAAE,CAAA;AAAA,MACrC,QAAQ,MAAM,SAAA,CAAU,CAAC,CAAA,KAAM,IAAI,EAAE,CAAA;AAAA,MACrC,KAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA,EAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;AAeO,SAAS,WAAA,CAAY;AAAA,EAC1B,KAAA;AAAA,EAAO,QAAA;AAAA,EAAU,OAAA;AAAA,EAAS,OAAA;AAAA,EAAS,WAAA;AAAA,EACnC,QAAA;AAAA,EAAU,OAAA;AAAA,EAAS,EAAA;AAAA,EAAI;AACzB,CAAA,EAAqB;AACnB,EAAA,MAAM,IAAI,SAAA,EAAU;AACpB,EAAA,MAAM,MAAA,GAAS,EAAE,iBAAiB,CAAA;AAClC,EAAA,MAAM,IAAA,GAAO,KAAA,oBAAS,IAAI,IAAA,EAAK;AAC/B,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,IAAU,KAAA,CAAA,QAAA,CAAS,IAAA,CAAK,aAAa,CAAA;AAEzD,EAAM,gBAAU,MAAM;AACpB,IAAA,IAAI,KAAA,EAAO,OAAA,CAAQ,KAAA,CAAM,WAAA,EAAa,CAAA;AAAA,EACxC,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,EAAW,CAAA,KAAc,IAAI,IAAA,CAAK,CAAA,EAAG,GAAG,CAAC,CAAA;AAC7D,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KACjB,OAAA,IAAW,IAAA,IAAQ,UAAA,CAAW,IAAA,EAAM,CAAC,CAAA,GAAI,UAAA,CAAW,OAAA,CAAQ,WAAA,EAAY,EAAG,OAAA,CAAQ,QAAA,EAAU,CAAA,IAC7F,OAAA,IAAW,IAAA,IAAQ,UAAA,CAAW,IAAA,EAAM,CAAC,CAAA,GAAI,UAAA,CAAW,OAAA,CAAQ,WAAA,EAAY,EAAG,OAAA,CAAQ,UAAU,CAAA;AAEhG,EAAA,MAAM,KAAA,GAAoB,MAAA,CAAO,GAAA,CAAI,CAAC,MAAM,CAAA,MAAO;AAAA,IACjD,GAAA,EAAK,OAAO,CAAC,CAAA;AAAA,IACb,KAAA,EAAO,IAAA;AAAA,IACP,QAAA,EAAU,CAAC,CAAC,KAAA,IAAS,KAAA,CAAM,aAAY,KAAM,IAAA,IAAQ,KAAA,CAAM,QAAA,EAAS,KAAM,CAAA;AAAA,IAC1E,QAAA,EAAU,WAAW,CAAC,CAAA;AAAA,IACtB,QAAA,EAAU,MAAM,QAAA,CAAS,IAAI,KAAK,IAAA,EAAM,CAAA,EAAG,CAAC,CAAC;AAAA,GAC/C,CAAE,CAAA;AAEF,EAAA,uBACE,GAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,aAAA;AAAA,MACV,YAAA,EAAc,KAAA,GAAQ,CAAA,EAAG,MAAA,CAAO,KAAA,CAAM,QAAA,EAAU,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,WAAA,EAAa,CAAA,CAAA,GAAK,EAAA;AAAA,MAC7E,WAAA,EAAa,WAAA,IAAe,CAAA,CAAE,oBAAoB,CAAA;AAAA,MAClD,SAAA,EAAW,EAAE,qBAAqB,CAAA;AAAA,MAClC,QAAA,EAAU,OAAO,IAAI,CAAA;AAAA,MACrB,SAAA,EAAW,EAAE,iBAAiB,CAAA;AAAA,MAC9B,SAAA,EAAW,EAAE,iBAAiB,CAAA;AAAA,MAC9B,QAAQ,MAAM,OAAA,CAAQ,CAAC,CAAA,KAAM,IAAI,CAAC,CAAA;AAAA,MAClC,QAAQ,MAAM,OAAA,CAAQ,CAAC,CAAA,KAAM,IAAI,CAAC,CAAA;AAAA,MAClC,KAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA,EAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ","file":"chunk-KSOWXLR4.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { CalendarIcon, ChevronLeft, ChevronRight, X, Check } 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 // Choose the active descendant on open (and on query change while open).\n // With a confirmed value and no active query, start on the SELECTED option\n // — not index 0 — so the keyboard cursor and the highlighted row agree and\n // the selection scrolls into view. Typing resets to the first match.\n React.useEffect(() => {\n if (!open) return;\n if (!query && value != null) {\n const idx = filtered.findIndex((o) => o.value === value);\n setActive(idx >= 0 ? idx : 0);\n } else {\n setActive(0);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps -- default only on open/query transitions; filtered/value read intentionally from closure\n }, [query, open]);\n\n // Keep the active option in view — on open (jump to the selected row) and\n // as the keyboard cursor moves. Adjusts only the listbox's own scrollTop,\n // never the page: the list is portaled, so scrollIntoView could scroll an\n // ancestor instead.\n React.useEffect(() => {\n if (!open) return;\n const list = listRef.current;\n if (!list) return;\n const el = list.querySelectorAll<HTMLElement>('[role=\"option\"]')[active];\n if (!el) return;\n const top = el.offsetTop;\n const bottom = top + el.offsetHeight;\n if (top < list.scrollTop) list.scrollTop = top;\n else if (bottom > list.scrollTop + list.clientHeight) list.scrollTop = bottom - list.clientHeight;\n }, [open, active]);\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 <span className=\"combobox__option-content\">\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 </span>\n {/* Unambiguous selected marker — distinguishes the confirmed\n value from the keyboard/hover `active` highlight even when\n their backgrounds are close in a given palette. */}\n {o.value === value && <Check size={16} className=\"combobox__option-check\" aria-hidden=\"true\" />}\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 +0,0 @@
1
- {"version":3,"sources":["../src/components/AdvancedPickers.tsx"],"names":["useLocale","React","usePopoverPosition","useDismiss","jsxs","cx","format","jsx","X","Portal","Check","resolveDateFormat","startOfMonth","buildMonthGrid","isSameDay","formatDate","CalendarIcon","addMonths","ChevronLeft","ChevronRight","Search"],"mappings":"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","file":"chunk-KWXF6OQW.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { CalendarIcon, ChevronLeft, ChevronRight, X, Check, Search } from './Icons';\nimport { resolveDateFormat, formatDate, startOfMonth, addMonths, isSameDay, buildMonthGrid, type DateFormat } from '../utils/dateFormat';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format as formatMsg } from '../locale/messages';\nimport { Portal } from './Portal';\nimport { usePopoverPosition } from '../hooks/usePopoverPosition';\nimport { useDismiss } from '../hooks/useDismiss';\n\n// ---------- MultiCombobox -----------------------------------------------\nexport interface MultiComboboxOption<T = string> {\n value: T;\n label: string;\n description?: string;\n disabled?: boolean;\n}\n\nexport interface MultiComboboxProps<T = string> {\n value: T[];\n onChange: (v: T[]) => void;\n options: MultiComboboxOption<T>[];\n placeholder?: string;\n emptyMessage?: string;\n filter?: (option: MultiComboboxOption<T>, query: string) => boolean;\n invalid?: boolean;\n disabled?: boolean;\n className?: string;\n id?: string;\n maxVisibleChips?: number;\n}\n\nconst dfilter = <T,>(o: MultiComboboxOption<T>, q: string) =>\n o.label.toLowerCase().includes(q.toLowerCase());\n\nexport function MultiCombobox<T = string>({\n value, onChange, options, placeholder,\n emptyMessage, filter = dfilter,\n invalid, disabled, className, id, maxVisibleChips = 3,\n}: MultiComboboxProps<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 const reactId = React.useId();\n const listboxId = `${id ?? reactId}-listbox`;\n // Build the lookup Set once per `value` change, not on every keystroke or\n // hover-driven re-render.\n const selSet = React.useMemo(() => new Set(value), [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; only outside-click here.\n useDismiss({\n open,\n onDismiss: () => setOpen(false),\n refs: [wrapRef, listRef],\n closeOnEscape: false,\n });\n\n const toggle = (v: T) => {\n if (selSet.has(v)) onChange(value.filter((x) => x !== v));\n else onChange([...value, v]);\n };\n\n const onKey = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowDown') { e.preventDefault(); setOpen(true); setActive((a) => Math.min(filtered.length - 1, a + 1)); }\n else if (e.key === 'ArrowUp') { e.preventDefault(); setActive((a) => Math.max(0, a - 1)); }\n else if (e.key === 'Enter') {\n e.preventDefault();\n const opt = filtered[active];\n if (opt && !opt.disabled) { toggle(opt.value); setQuery(''); }\n } else if (e.key === 'Escape') { setOpen(false); }\n else if (e.key === 'Backspace' && !query && value.length) { onChange(value.slice(0, -1)); }\n };\n\n const selectedItems = options.filter((o) => selSet.has(o.value));\n const visible = selectedItems.slice(0, maxVisibleChips);\n const overflow = selectedItems.length - visible.length;\n\n return (\n <div ref={wrapRef} className={cx('multicombo', invalid && 'is-invalid', disabled && 'is-disabled', className)}>\n <div className=\"multicombo__chips\" onClick={() => inputRef.current?.focus()}>\n {visible.map((o) => (\n <span key={String(o.value)} className=\"multicombo__chip\">\n {o.label}\n <button type=\"button\" aria-label={formatMsg(locale['combobox.remove'], { label: o.label })} onClick={(e) => { e.stopPropagation(); toggle(o.value); }}><X size={12} /></button>\n </span>\n ))}\n {overflow > 0 && <span className=\"multicombo__chip multicombo__chip--more\">+{overflow}</span>}\n <input\n ref={inputRef}\n id={id}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={open}\n aria-controls={listboxId}\n className=\"multicombo__input\"\n placeholder={selectedItems.length === 0 ? ph : ''}\n disabled={disabled}\n value={query}\n onFocus={() => setOpen(true)}\n onChange={(e) => { setQuery(e.target.value); setOpen(true); setActive(0); }}\n onKeyDown={onKey}\n />\n </div>\n {open && (\n <Portal>\n <ul\n ref={listRef}\n id={listboxId}\n role=\"listbox\"\n aria-multiselectable=\"true\"\n className={cx('multicombo__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=\"multicombo__empty\">{empty}</li>\n ) : (\n filtered.map((o, i) => {\n const checked = selSet.has(o.value);\n return (\n <li\n key={String(o.value)}\n role=\"option\"\n aria-selected={checked}\n aria-disabled={o.disabled}\n className={cx('multicombo__option', i === active && 'is-active', checked && 'is-selected', o.disabled && 'is-disabled')}\n onMouseEnter={() => setActive(i)}\n onMouseDown={(e) => { e.preventDefault(); if (!o.disabled) toggle(o.value); }}\n >\n <span className={cx('multicombo__check', checked && 'is-checked')} aria-hidden=\"true\">{checked ? <Check size={14} /> : null}</span>\n <span className=\"multicombo__option-body\">\n <span className=\"multicombo__option-label\">{o.label}</span>\n {o.description && <span className=\"multicombo__option-desc\">{o.description}</span>}\n </span>\n </li>\n );\n })\n )}\n </ul>\n </Portal>\n )}\n </div>\n );\n}\n\n// ---------- DateRangePicker --------------------------------------------\nexport interface DateRange { from: Date | null; to: Date | null }\n\nexport interface DateRangePickerProps {\n /** Controlled value. Omit to make the picker uncontrolled (see `defaultValue`). */\n value?: DateRange;\n /**\n * In legacy mode, fires on every day click. In apply mode (when `onApply` is\n * provided), fires only at apply time so a controlled `value` can stay in sync.\n */\n onChange?: (v: DateRange) => void;\n /** Initial value when uncontrolled. Ignored if `value` is provided. */\n defaultValue?: DateRange;\n /**\n * Opt-in: enables apply mode. Day clicks only mutate an internal draft; the\n * consumer is notified when the user confirms (button \"Apply\" or a preset).\n * Closing the popover without applying reverts the draft to the last applied\n * value. Useful when each commit triggers a server-side query.\n */\n onApply?: (v: DateRange) => void;\n /** Fires on open/close transitions. */\n onOpenChange?: (open: boolean) => void;\n minDate?: Date;\n maxDate?: Date;\n presets?: Array<{ label: string; range: () => DateRange }>;\n invalid?: boolean;\n disabled?: boolean;\n className?: string;\n id?: string;\n /**\n * Display format. Default `'auto'` derives from `configureBrand().locale`.\n */\n format?: DateFormat;\n}\n\nconst EMPTY_RANGE: DateRange = { from: null, to: null };\n\nexport function DateRangePicker({\n value, onChange, defaultValue, onApply, onOpenChange,\n minDate, maxDate, presets,\n invalid, disabled, className, id, format = 'auto',\n}: DateRangePickerProps) {\n const locale = useLocale();\n const weekdays = locale['picker.weekdaysShort'];\n const months = locale['calendar.months'];\n const fmt = resolveDateFormat(format);\n const isControlled = value !== undefined;\n const applyMode = !!onApply;\n const initial = isControlled ? (value as DateRange) : (defaultValue ?? EMPTY_RANGE);\n const [draft, setDraft] = React.useState<DateRange>(initial);\n const [lastApplied, setLastApplied] = React.useState<DateRange>(initial);\n // Resync draft/lastApplied when controlled `value` changes externally.\n const vFrom = value?.from?.getTime() ?? 0;\n const vTo = value?.to?.getTime() ?? 0;\n React.useEffect(() => {\n if (!isControlled) return;\n setDraft(value as DateRange);\n setLastApplied(value as DateRange);\n }, [isControlled, vFrom, vTo]);\n // Legacy-controlled (no `onApply`) keeps prior semantics: `value` drives render\n // directly. Otherwise the draft is truth.\n const current: DateRange = isControlled && !applyMode ? (value as DateRange) : draft;\n // The trigger label shows the last-committed range in apply mode; in legacy it\n // tracks `current` (so live edits stay reflected, as before).\n const displayed: DateRange = applyMode ? lastApplied : current;\n const [open, setOpen] = React.useState(false);\n const [view, setView] = React.useState(() => startOfMonth(initial.from ?? new Date()));\n const [hover, setHover] = React.useState<Date | null>(null);\n const wrapRef = React.useRef<HTMLDivElement>(null);\n const popoverRef = React.useRef<HTMLDivElement>(null);\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n\n // Portaled to body (escapes overflow ancestors) with flip/clamp and\n // scroll/resize reposition; Escape and outside-click return focus to the\n // trigger (a11y) — same primitive as MultiCombobox above.\n const pos = usePopoverPosition(wrapRef, popoverRef, {\n open,\n side: 'bottom',\n align: 'start',\n offset: 6,\n });\n\n const closeWithoutCommit = React.useCallback(() => {\n if (applyMode) setDraft(lastApplied);\n setOpen(false);\n onOpenChange?.(false);\n }, [applyMode, lastApplied, onOpenChange]);\n\n useDismiss({\n open,\n onDismiss: closeWithoutCommit,\n refs: [wrapRef, popoverRef],\n returnFocusRef: triggerRef,\n });\n\n // Each panel renders ~42 Date cells. Without memoization, every\n // setHover() triggered a full rebuild of both panels' grids on every\n // mouse movement over the calendar. Memo keyed on `view` only.\n const monthGrid0 = React.useMemo(() => buildMonthGrid(view, 0), [view]);\n const monthGrid1 = React.useMemo(() => buildMonthGrid(view, 1), [view]);\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 const inRange = (d: Date) => {\n if (!current.from) return false;\n const end = current.to ?? hover;\n if (!end) return isSameDay(d, current.from);\n const a = current.from < end ? current.from : end;\n const b = current.from < end ? end : current.from;\n return d >= new Date(a.getFullYear(), a.getMonth(), a.getDate()) &&\n d <= new Date(b.getFullYear(), b.getMonth(), b.getDate());\n };\n\n const click = (d: Date) => {\n let next: DateRange;\n if (!current.from || (current.from && current.to)) next = { from: d, to: null };\n else {\n const from = current.from;\n next = d < from ? { from: d, to: from } : { from, to: d };\n }\n if (applyMode) setDraft(next);\n else onChange?.(next);\n };\n\n // Commits a range and closes. In apply mode this fires `onApply` (and `onChange`\n // when controlled, to keep `value` in sync). In legacy mode, only preset commits\n // propagate via `onChange`; the bare \"Apply\" button stays close-only as before.\n const commit = (next: DateRange, fromPreset = false) => {\n if (applyMode) {\n onApply!(next);\n setLastApplied(next);\n setDraft(next);\n if (isControlled) onChange?.(next);\n } else if (fromPreset) {\n onChange?.(next);\n }\n setOpen(false);\n onOpenChange?.(false);\n };\n\n const clear = () => {\n if (applyMode) setDraft(EMPTY_RANGE);\n else onChange?.(EMPTY_RANGE);\n };\n\n const toggleOpen = () => {\n if (open) closeWithoutCommit();\n else { setOpen(true); onOpenChange?.(true); }\n };\n\n const label = displayed.from\n ? displayed.to\n ? `${formatDate(displayed.from, fmt)} → ${formatDate(displayed.to, fmt)}`\n : `${formatDate(displayed.from, fmt)} → …`\n : locale['picker.selectRange'];\n\n const renderMonth = (offset: number) => {\n const { month: m, cells } = offset === 0 ? monthGrid0 : monthGrid1;\n return (\n <div className=\"daterange__month\">\n <div className=\"daterange__title\">{months[m.getMonth()]} {m.getFullYear()}</div>\n <div className=\"daterange__grid\">\n {weekdays.map((w, i) => <span key={i} className=\"daterange__dow\">{w}</span>)}\n {cells.map((d, i) => {\n if (!d) return <span key={`b${i}`} />;\n const sel = (current.from && isSameDay(d, current.from)) || (current.to && isSameDay(d, current.to));\n const ir = inRange(d);\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('daterange__day', sel && 'is-selected', ir && !sel && 'is-range', today && 'is-today', off && 'is-disabled')}\n disabled={!!off}\n onMouseEnter={() => setHover(d)}\n onClick={() => click(d)}\n >{d.getDate()}</button>\n );\n })}\n </div>\n </div>\n );\n };\n\n return (\n <div ref={wrapRef} className={cx('daterange', invalid && 'is-invalid', disabled && 'is-disabled', className)}>\n <button\n ref={triggerRef}\n id={id}\n type=\"button\"\n className=\"daterange__trigger\"\n disabled={disabled}\n onClick={toggleOpen}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n >\n <span className=\"daterange__icon\" aria-hidden=\"true\"><CalendarIcon size={16} /></span>\n <span>{label}</span>\n </button>\n {open && (\n <Portal>\n <div\n ref={popoverRef}\n className={cx('daterange__popover', 'is-floating')}\n role=\"dialog\"\n onMouseLeave={() => setHover(null)}\n style={{\n position: 'fixed',\n top: pos.top,\n left: pos.left,\n visibility: pos.ready ? 'visible' : 'hidden',\n }}\n >\n {presets && presets.length > 0 && (\n <ul className=\"daterange__presets\">\n {presets.map((p, i) => (\n <li key={i}>\n <button type=\"button\" onClick={() => commit(p.range(), true)}>{p.label}</button>\n </li>\n ))}\n </ul>\n )}\n <div className=\"daterange__panes\">\n <div className=\"daterange__nav\">\n <button type=\"button\" onClick={() => setView((v) => addMonths(v, -1))} aria-label={locale['calendar.prevMonth']}><ChevronLeft size={16} /></button>\n <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=\"daterange__months\">\n {renderMonth(0)}\n {renderMonth(1)}\n </div>\n <div className=\"daterange__actions\">\n <button type=\"button\" className=\"daterange__clear\" onClick={clear}>{locale['common.clear']}</button>\n <button type=\"button\" className=\"daterange__apply\" onClick={() => commit(current)} disabled={!current.from || !current.to}>{locale['common.apply']}</button>\n </div>\n </div>\n </div>\n </Portal>\n )}\n </div>\n );\n}\n\n// ---------- Command Palette (⌘K) ----------------------------------------\nexport interface CommandItem {\n id: string;\n label: string;\n description?: string;\n group?: string;\n icon?: React.ReactNode;\n shortcut?: string;\n keywords?: string[];\n onRun: () => void;\n}\n\nexport interface CommandPaletteProps {\n open: boolean;\n onClose: () => void;\n items: CommandItem[];\n placeholder?: string;\n emptyMessage?: string;\n hotkey?: string; // 'mod+k'\n}\n\nfunction matchesHotkey(e: KeyboardEvent, hk: string) {\n const parts = hk.toLowerCase().split('+');\n const key = parts[parts.length - 1];\n const mods = parts.slice(0, -1);\n if (e.key.toLowerCase() !== key) return false;\n for (const m of mods) {\n if (m === 'mod' && !(e.metaKey || e.ctrlKey)) return false;\n if (m === 'ctrl' && !e.ctrlKey) return false;\n if (m === 'meta' && !e.metaKey) return false;\n if (m === 'shift' && !e.shiftKey) return false;\n if (m === 'alt' && !e.altKey) return false;\n }\n return true;\n}\n\nexport function CommandPalette({\n open, onClose, items,\n placeholder,\n emptyMessage,\n}: CommandPaletteProps) {\n const locale = useLocale();\n const ph = placeholder ?? locale['picker.searchCommands'];\n const empty = emptyMessage ?? locale['common.noResults'];\n const [query, setQuery] = React.useState('');\n const [active, setActive] = React.useState(0);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const listRef = React.useRef<HTMLUListElement>(null);\n\n const filtered = React.useMemo(() => {\n const q = query.trim().toLowerCase();\n if (!q) return items;\n return items.filter((it) => {\n const hay = [it.label, it.description, it.group, ...(it.keywords ?? [])].join(' ').toLowerCase();\n return hay.includes(q);\n });\n }, [items, query]);\n\n // group preserve order\n const grouped = React.useMemo(() => {\n const order: string[] = [];\n const map = new Map<string, CommandItem[]>();\n for (const it of filtered) {\n const g = it.group ?? '';\n if (!map.has(g)) { map.set(g, []); order.push(g); }\n map.get(g)!.push(it);\n }\n return { order, map };\n }, [filtered]);\n\n const flat = filtered;\n\n React.useEffect(() => {\n if (open) {\n setQuery(''); setActive(0);\n requestAnimationFrame(() => inputRef.current?.focus());\n }\n }, [open]);\n\n React.useEffect(() => { setActive(0); }, [query]);\n\n React.useEffect(() => {\n if (!open) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n else if (e.key === 'ArrowDown') { e.preventDefault(); setActive((a) => Math.min(flat.length - 1, a + 1)); }\n else if (e.key === 'ArrowUp') { e.preventDefault(); setActive((a) => Math.max(0, a - 1)); }\n else if (e.key === 'Enter') {\n e.preventDefault();\n const it = flat[active];\n if (it) { it.onRun(); onClose(); }\n }\n };\n document.addEventListener('keydown', onKey);\n return () => document.removeEventListener('keydown', onKey);\n }, [open, flat, active, onClose]);\n\n React.useEffect(() => {\n const el = listRef.current?.querySelector(`[data-cmd-idx=\"${active}\"]`);\n el?.scrollIntoView({ block: 'nearest' });\n }, [active]);\n\n if (!open) return null;\n let idx = -1;\n return (\n <div className=\"cmdk__overlay\" role=\"dialog\" aria-modal=\"true\" aria-label={locale['picker.commandPalette']} onMouseDown={(e) => { if (e.target === e.currentTarget) onClose(); }}>\n <div className=\"cmdk__panel\">\n <div className=\"cmdk__searchbar\">\n <span className=\"cmdk__icon\" aria-hidden=\"true\"><Search size={16} /></span>\n <input\n ref={inputRef}\n className=\"cmdk__input\"\n value={query}\n placeholder={ph}\n onChange={(e) => setQuery(e.target.value)}\n />\n <kbd className=\"cmdk__esc\">Esc</kbd>\n </div>\n <ul ref={listRef} className=\"cmdk__list\" role=\"listbox\">\n {flat.length === 0 && <li className=\"cmdk__empty\">{empty}</li>}\n {grouped.order.map((g) => (\n <React.Fragment key={g || '__none'}>\n {g && <li className=\"cmdk__group\" aria-hidden=\"true\">{g}</li>}\n {grouped.map.get(g)!.map((it) => {\n idx++;\n const i = idx;\n return (\n <li\n key={it.id}\n role=\"option\"\n aria-selected={i === active}\n data-cmd-idx={i}\n className={cx('cmdk__item', i === active && 'is-active')}\n onMouseEnter={() => setActive(i)}\n onMouseDown={(e) => { e.preventDefault(); it.onRun(); onClose(); }}\n >\n {it.icon && <span className=\"cmdk__item-icon\" aria-hidden=\"true\">{it.icon}</span>}\n <span className=\"cmdk__item-body\">\n <span className=\"cmdk__item-label\">{it.label}</span>\n {it.description && <span className=\"cmdk__item-desc\">{it.description}</span>}\n </span>\n {it.shortcut && <kbd className=\"cmdk__kbd\">{it.shortcut}</kbd>}\n </li>\n );\n })}\n </React.Fragment>\n ))}\n </ul>\n </div>\n </div>\n );\n}\n\nexport interface UseCommandPaletteOptions {\n hotkey?: string; // default 'mod+k'\n}\n\nexport function useCommandPalette({ hotkey = 'mod+k' }: UseCommandPaletteOptions = {}) {\n const [open, setOpen] = React.useState(false);\n React.useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (matchesHotkey(e, hotkey)) {\n e.preventDefault();\n setOpen((o) => !o);\n }\n };\n document.addEventListener('keydown', onKey);\n return () => document.removeEventListener('keydown', onKey);\n }, [hotkey]);\n return { open, setOpen, close: () => setOpen(false), toggle: () => setOpen((o) => !o) };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/DataTable.tsx"],"names":["jsxs","Fragment","cx","jsx","Checkbox","React","useLocale","rows","rowKey","selectedKeys","onSelectionChange","ChevronUp","ChevronDown","MoreVertical","format","Pagination","TableToolbar"],"mappings":"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","file":"chunk-NMUTNNAC.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { ChevronUp, ChevronDown, MoreVertical } from './Icons';\nimport { Checkbox } from './Form';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { format } from '../locale/messages';\n\n// ---------- DataTableRow (memoized) -------------------------------------\n// Extracted as React.memo so unrelated parent re-renders don't churn through\n// every row in the table. Combined with a ref-stable `onToggle`, only the\n// row whose `selected` prop actually changed re-renders on toggle.\ninterface DataTableRowProps<T> {\n row: T;\n rowK: string;\n selected: boolean;\n selectable: boolean;\n selectAriaLabel: string;\n columns: Column<T>[];\n onToggle: (k: string) => void;\n /** Resolved from `rowHref(row)` — makes the row a navigable link. */\n href?: string;\n /** Resolved from `onRowClick(row)` — makes the row activate a callback. */\n onActivate?: () => void;\n /** Accessible name for the stretched row control (e.g. \"Ver Taladro\"). */\n actionLabel?: string;\n /** Full-control escape hatch (see `DataTableProps.renderRow`). */\n renderRow?: (args: {\n row: T;\n cells: React.ReactNode;\n rowKey: string;\n }) => React.ReactNode;\n}\n\nfunction DataTableRowImpl<T>({\n row, rowK, selected, selectable, selectAriaLabel, columns, onToggle,\n href, onActivate, actionLabel, renderRow,\n}: DataTableRowProps<T>) {\n const interactive = !renderRow && (!!href || !!onActivate);\n\n const cells = (\n <>\n {selectable && (\n <td className={cx(interactive && 'data-table__cell--above')}>\n <Checkbox\n checked={selected}\n onChange={() => onToggle(rowK)}\n aria-label={selectAriaLabel}\n />\n </td>\n )}\n {columns.map((c, ci) => {\n const align = c.align ?? (c.numeric ? 'right' : 'left');\n const value = c.accessor\n ? c.accessor(row)\n : (row as Record<string, unknown>)[c.key] as React.ReactNode;\n // data-label is consumed by the .data-table--cards CSS to surface\n // the column header as an inline label on each row when the table\n // collapses to a card layout on narrow viewports. Non-string\n // headers (e.g. JSX) can't be projected through `attr()` so we\n // omit the attribute and the cell renders without a visible label.\n const label = typeof c.header === 'string' ? c.header : undefined;\n return (\n <td\n key={c.key}\n // `table__align-*` makes alignment authoritative for ANY cell\n // content. `text-align` alone silently fails for a block/flex\n // child (e.g. an action column of buttons → floated left); the\n // class adds the matching `margin` auto so element children\n // honor `align` too. Left cells emit no extra class → byte-\n // identical to pre-1.10.0 (zero regression for the default).\n className={cx(\n c.numeric && 'table__num',\n align !== 'left' && `table__align-${align}`,\n )}\n style={{ textAlign: align }}\n data-label={label}\n >\n {/* Stretched row control: a real <a>/<button> in the first\n data cell, overlaying the whole row (the <tr> is the\n positioned ancestor). Keyboard-operable + SR-labelled +\n valid table markup — no role hacks, no onClick-only div.\n Visually empty; the cells stay the visible content. Other\n interactive cell content opts above it via\n `data-table__cell--above` (stretched-link pattern). */}\n {interactive && ci === 0 && (\n href ? (\n <a\n href={href}\n className=\"data-table__rowlink\"\n aria-label={actionLabel}\n onClick={onActivate}\n />\n ) : (\n <button\n type=\"button\"\n className=\"data-table__rowlink\"\n aria-label={actionLabel}\n onClick={onActivate}\n />\n )\n )}\n {value as React.ReactNode}\n </td>\n );\n })}\n </>\n );\n\n if (renderRow) return <>{renderRow({ row, cells, rowKey: rowK })}</>;\n\n return (\n <tr className={cx(selected && 'is-selected', interactive && 'is-clickable')}>\n {cells}\n </tr>\n );\n}\n\n// Cast preserves the generic signature through React.memo.\nconst DataTableRow = React.memo(DataTableRowImpl) as typeof DataTableRowImpl;\n\n// ---------- DataTable ----------------------------------------------------\nexport interface Column<T> {\n key: string;\n header: React.ReactNode;\n accessor?: (row: T) => React.ReactNode;\n sortable?: boolean;\n align?: 'left' | 'right' | 'center';\n width?: number | string;\n /**\n * Marks the column as numeric: cells get the `.table__num` class\n * (monospace + tabular alignment) and right-align by default.\n */\n numeric?: boolean;\n}\n\nexport interface DataTableProps<T> {\n columns: Column<T>[];\n rows: T[];\n rowKey: (row: T) => string;\n sort?: { key: string; dir: 'asc' | 'desc' } | null;\n /**\n * Sorting is uncontrolled inside the table — consumers re-order `rows`\n * in response to `onSortChange`. Stability of equal-keyed rows is the\n * caller's responsibility (use a stable sort like `Array.prototype.sort`\n * in V8/Node ≥ 12, or a tiebreaker on rowKey).\n */\n onSortChange?: (s: { key: string; dir: 'asc' | 'desc' } | null) => void;\n selectable?: boolean;\n selectedKeys?: Set<string>;\n /**\n * \"Select all\" toggles only the rows currently passed to the component.\n * If the consumer paginates externally and only passes the visible page,\n * this selects the page — not the dataset across all pages.\n */\n onSelectionChange?: (keys: Set<string>) => void;\n empty?: React.ReactNode;\n /**\n * Renders an error state in place of the body. Takes precedence over\n * `loading`, `empty`, and rows. Use it when a fetch fails.\n */\n error?: React.ReactNode;\n loading?: boolean;\n /**\n * Sticky-position the table header so it stays visible while the body\n * scrolls. The wrapper itself becomes the vertical scroll container\n * (the table is already overflow-x:auto, so an outer scroller can't reach\n * the header). Defaults to `max-height: 70vh`; override by passing a\n * `className` with a different `max-height`. Do NOT wrap `<DataTable>` in\n * your own `overflow-y:auto` container — that breaks the sticky context.\n */\n stickyHeader?: boolean;\n /**\n * Layout for narrow viewports (`<600px`):\n * - `'table'` (default): the table scrolls horizontally inside its wrapper.\n * - `'cards'`: each row collapses to a stacked card with the column\n * header as an inline label per cell. Requires string `header` values\n * for the labels to appear; non-string headers render without a label.\n */\n mobileLayout?: 'table' | 'cards';\n /** Accessible name announced by screen readers (e.g. \"Pedidos abiertos\"). */\n ariaLabel?: string;\n /**\n * Builds the accessible label for the per-row checkbox so screen-reader\n * users can tell rows apart. Defaults to the row's key. Provide this\n * when the key isn't human-readable (e.g. a UUID).\n */\n rowLabel?: (row: T) => string;\n /**\n * Body density. Default `'compact'` (v1.10.0): a readable-dense register\n * (~30px rows, `--text-xs`, single-line cells) — the right default for\n * the data-heavy screens this kit serves (\"default = product\"). Pass\n * `'comfortable'` to opt back into the pre-1.10.0 airy 14px/16px rows\n * (which wrap to two lines).\n */\n density?: 'comfortable' | 'compact';\n /**\n * Makes every row a navigable link. The kit renders a real, keyboard-\n * operable, screen-reader-labelled `<a>` stretched over the row — valid\n * table markup (no `role` hacks, no `asChild` on `<tr>`, never an\n * onClick-only div). One Tab stop per row; Enter activates; the focus\n * ring shows on the row. Additive; combinable with `onRowClick`.\n */\n rowHref?: (row: T) => string;\n /**\n * Makes every row activate a callback (pointer **and** keyboard).\n * Renders a real stretched `<button>` with the same a11y guarantees as\n * `rowHref`. Prefer `rowHref` when the action is navigation.\n */\n onRowClick?: (row: T) => void;\n /**\n * Full-control escape hatch — the render-prop polymorphism the kit uses\n * for data/array-driven components (cf. `AppShell.linkAs`; deliberately\n * NOT `asChild`, which would emit invalid markup on `<tr>`). Receives the\n * row, the kit-rendered `cells`, and the row key; return your own row\n * element (e.g. a framework `<Link>` wrapping a `<tr>`). When set,\n * `rowHref`/`onRowClick` are ignored (you own row interactivity & a11y).\n */\n renderRow?: (args: {\n row: T;\n cells: React.ReactNode;\n rowKey: string;\n }) => React.ReactNode;\n /**\n * Toolbar / filter zone that shares the table's rounded surface. When\n * set, the DataTable renders it INSIDE its own border+radius+overflow\n * surface (`.table-surface`): the toolbar is clipped to the radius,\n * there is exactly one divider between it and the header, and the\n * header band's corner-rounding is dropped so the strip is clean in the\n * corner — no card-border + filter-border + header-top stack, no seam.\n * Accepts any node (`<TableToolbar>`, `<FilterBar>`, a custom row). The\n * legacy sibling pattern (`<TableToolbar/><DataTable/>`) still works.\n */\n toolbar?: React.ReactNode;\n /**\n * Surface chrome mode. Default `'card'`: the table draws its own\n * border + radius (and `--table-elevation` if set), the standalone\n * surface. `'flush'`: drops that chrome so the table sits clean inside\n * a parent that already owns the surface (a `<Card>`) without doubling\n * the border or nesting a radius. Use `'flush'` for the embedded-in-Card\n * case; leave the default for standalone tables.\n */\n surface?: 'card' | 'flush';\n className?: string;\n}\n\n/**\n * Tabular data renderer with optional sorting, selection, error/empty/\n * loading states.\n *\n * State priority (only one body state renders at a time):\n * error > loading > empty > rows\n *\n * Known limits (deferred to a later release):\n * - No virtualization; tested up to ~200 rows. For large datasets, plug\n * in react-window/tanstack-virtual around the body rows.\n */\nexport function DataTable<T>({\n columns, rows, rowKey,\n sort, onSortChange,\n selectable, selectedKeys, onSelectionChange,\n empty, error, loading, stickyHeader, mobileLayout = 'table',\n ariaLabel, rowLabel, className,\n density = 'compact', rowHref, onRowClick, renderRow, toolbar,\n surface = 'card',\n}: DataTableProps<T>) {\n const t = useLocale();\n const allSelected = selectable && rows.length > 0 && rows.every((r) => selectedKeys?.has(rowKey(r)));\n const someSelected = selectable && !allSelected && rows.some((r) => selectedKeys?.has(rowKey(r)));\n const headerCbRef = React.useRef<HTMLInputElement>(null);\n React.useEffect(() => {\n if (headerCbRef.current) headerCbRef.current.indeterminate = !!someSelected;\n }, [someSelected]);\n\n // Latest-props ref so toggleRow stays referentially stable across selection\n // changes. Without this, every selection update would create a new\n // toggleRow, defeating React.memo on DataTableRow.\n const propsRef = React.useRef({ rows, rowKey, selectedKeys, onSelectionChange });\n propsRef.current = { rows, rowKey, selectedKeys, onSelectionChange };\n\n const toggleAll = React.useCallback(() => {\n const { rows, rowKey, selectedKeys, onSelectionChange } = propsRef.current;\n if (!onSelectionChange) return;\n const allSel = rows.length > 0 && rows.every((r) => selectedKeys?.has(rowKey(r)));\n const next = new Set(selectedKeys);\n if (allSel) rows.forEach((r) => next.delete(rowKey(r)));\n else rows.forEach((r) => next.add(rowKey(r)));\n onSelectionChange(next);\n }, []);\n\n const toggleRow = React.useCallback((k: string) => {\n const { selectedKeys, onSelectionChange } = propsRef.current;\n if (!onSelectionChange) return;\n const next = new Set(selectedKeys);\n if (next.has(k)) next.delete(k); else next.add(k);\n onSelectionChange(next);\n }, []);\n\n const onSort = (col: Column<T>) => {\n if (!col.sortable || !onSortChange) return;\n if (!sort || sort.key !== col.key) onSortChange({ key: col.key, dir: 'asc' });\n else if (sort.dir === 'asc') onSortChange({ key: col.key, dir: 'desc' });\n else onSortChange(null);\n };\n\n const wrap = (\n <div\n className={cx(\n 'table-wrap',\n stickyHeader && 'table-wrap--sticky',\n mobileLayout === 'cards' && 'table-wrap--cards',\n surface === 'flush' && toolbar == null && 'table-wrap--flush',\n className,\n )}\n >\n <table\n className={cx(\n 'table data-table',\n density === 'comfortable' && 'table--comfortable',\n )}\n aria-label={ariaLabel}\n >\n <thead>\n <tr>\n {selectable && (\n <th scope=\"col\" style={{ width: 40 }}>\n <Checkbox\n ref={headerCbRef}\n checked={!!allSelected}\n onChange={toggleAll}\n aria-label={t['table.selectAll']}\n />\n </th>\n )}\n {columns.map((c) => {\n const active = sort?.key === c.key;\n const align = c.align ?? (c.numeric ? 'right' : 'left');\n const sortValue = c.sortable\n ? (active ? (sort!.dir === 'asc' ? 'ascending' : 'descending') : 'none')\n : undefined;\n const headerInner = (\n <span className=\"data-table__th\">\n {c.header}\n {c.sortable && (\n <span className=\"data-table__sort\" aria-hidden=\"true\">\n {active ? (sort!.dir === 'asc' ? <ChevronUp size={12} /> : <ChevronDown size={12} />) : <MoreVertical size={12} />}\n </span>\n )}\n </span>\n );\n return (\n <th\n key={c.key}\n scope=\"col\"\n style={{ width: c.width, textAlign: align }}\n aria-sort={sortValue}\n >\n {c.sortable ? (\n <button\n type=\"button\"\n className=\"data-table__sort-btn\"\n onClick={() => onSort(c)}\n >\n {headerInner}\n </button>\n ) : headerInner}\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {error ? (\n <tr>\n <td\n colSpan={columns.length + (selectable ? 1 : 0)}\n className=\"data-table__error\"\n role=\"alert\"\n style={{ padding: 32, textAlign: 'center' }}\n >\n {error}\n </td>\n </tr>\n ) : loading ? (\n Array.from({ length: 5 }).map((_, i) => (\n <tr key={`s${i}`}>\n {selectable && <td><div className=\"skel\" style={{ height: 14 }} /></td>}\n {columns.map((c) => <td key={c.key}><div className=\"skel\" style={{ height: 12, width: '70%' }} /></td>)}\n </tr>\n ))\n ) : rows.length === 0 ? (\n <tr>\n <td colSpan={columns.length + (selectable ? 1 : 0)} style={{ padding: 32 }}>\n {empty ?? <div style={{ textAlign: 'center', color: 'var(--fg-muted)' }}>{t['table.empty']}</div>}\n </td>\n </tr>\n ) : (\n rows.map((r) => {\n const k = rowKey(r);\n const label = rowLabel ? rowLabel(r) : k;\n const href = rowHref?.(r);\n const onActivate = onRowClick ? () => onRowClick(r) : undefined;\n return (\n <DataTableRow\n key={k}\n row={r}\n rowK={k}\n selected={!!selectedKeys?.has(k)}\n selectable={!!selectable}\n selectAriaLabel={format(t['table.selectRow'], { label })}\n columns={columns}\n onToggle={toggleRow}\n href={href}\n onActivate={onActivate}\n actionLabel={format(t['table.rowAction'], { label })}\n renderRow={renderRow}\n />\n );\n })\n )}\n </tbody>\n </table>\n </div>\n );\n // No toolbar → byte-identical legacy output. With a toolbar, the\n // DataTable owns the single rounded+clipped+bordered surface; the inner\n // .table-wrap defers its border/radius (CSS) and stays the scroll/sticky\n // context, so existing behaviour is untouched.\n return toolbar == null ? wrap : (\n <div className={cx('table-surface', surface === 'flush' && 'table-surface--flush')}>\n <div className=\"table-surface__bar\">{toolbar}</div>\n {wrap}\n </div>\n );\n}\n\n// ---------- Accordion ----------------------------------------------------\ninterface AccordionContextValue {\n open: Set<string>;\n toggle: (id: string) => void;\n multiple: boolean;\n}\nconst AccordionContext = React.createContext<AccordionContextValue | null>(null);\n\nexport interface AccordionProps {\n multiple?: boolean;\n defaultOpen?: string[];\n children: React.ReactNode;\n className?: string;\n}\n\nexport function Accordion({ multiple = false, defaultOpen = [], children, className }: AccordionProps) {\n const [open, setOpen] = React.useState<Set<string>>(new Set(defaultOpen));\n const toggle = (id: string) => {\n setOpen((curr) => {\n const next = new Set(curr);\n if (next.has(id)) next.delete(id);\n else {\n if (!multiple) next.clear();\n next.add(id);\n }\n return next;\n });\n };\n return (\n <AccordionContext.Provider value={{ open, toggle, multiple }}>\n <div className={cx('accordion', className)}>{children}</div>\n </AccordionContext.Provider>\n );\n}\n\nexport function AccordionItem({ id, title, children }: { id: string; title: React.ReactNode; children: React.ReactNode }) {\n const ctx = React.useContext(AccordionContext);\n if (!ctx) throw new Error('<AccordionItem> must be used inside <Accordion>');\n const isOpen = ctx.open.has(id);\n const reactId = React.useId();\n const triggerId = `accordion-trigger-${reactId}`;\n const panelId = `accordion-panel-${reactId}`;\n return (\n <div className={cx('accordion__item', isOpen && 'is-open')}>\n <button\n type=\"button\"\n id={triggerId}\n className=\"accordion__trigger\"\n aria-expanded={isOpen}\n aria-controls={panelId}\n onClick={() => ctx.toggle(id)}\n >\n <span>{title}</span>\n <span className=\"accordion__chev\" aria-hidden=\"true\"><ChevronDown size={14} /></span>\n </button>\n {isOpen && (\n <div\n id={panelId}\n role=\"region\"\n aria-labelledby={triggerId}\n className=\"accordion__panel\"\n >\n {children}\n </div>\n )}\n </div>\n );\n}\n\n// ---------- Breadcrumbs --------------------------------------------------\nexport interface BreadcrumbItem {\n label: React.ReactNode;\n href?: string;\n}\n\nexport function Breadcrumbs({ items, className }: { items: BreadcrumbItem[]; className?: string }) {\n return (\n <nav aria-label=\"Breadcrumb\" className={cx('breadcrumbs', className)}>\n <ol>\n {items.map((it, i) => {\n const last = i === items.length - 1;\n return (\n <li key={i}>\n {it.href && !last ? <a href={it.href}>{it.label}</a> : <span aria-current={last ? 'page' : undefined}>{it.label}</span>}\n {!last && <span aria-hidden=\"true\" className=\"breadcrumbs__sep\">/</span>}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n}\n\n// ---------- TablePagination ---------------------------------------------\n// Convenience wrapper that pairs a page-size selector with a Pagination\n// row. Use it under a DataTable when the table is paginated externally.\nimport { Pagination } from './Inputs';\n\nexport interface TablePaginationProps {\n page: number;\n pageSize: number;\n total: number;\n onPageChange: (page: number) => void;\n /** If set, renders a page-size selector. Omit for fixed-size pagination. */\n onPageSizeChange?: (size: number) => void;\n /** Options shown in the page-size selector. Default `[10, 25, 50, 100]`. */\n pageSizeOptions?: readonly number[];\n className?: string;\n}\n\nexport function TablePagination({\n page, pageSize, total, onPageChange,\n onPageSizeChange, pageSizeOptions = [10, 25, 50, 100],\n className,\n}: TablePaginationProps) {\n const t = useLocale();\n const selectId = React.useId();\n return (\n <div className={cx('table-pagination', className)}>\n {onPageSizeChange && (\n <label className=\"table-pagination__size\" htmlFor={selectId}>\n <span>{t['pagination.rowsPerPage']}</span>\n <select\n id={selectId}\n className=\"select\"\n value={pageSize}\n onChange={(e) => onPageSizeChange(Number(e.target.value))}\n >\n {pageSizeOptions.map((n) => (\n <option key={n} value={n}>{n}</option>\n ))}\n </select>\n </label>\n )}\n <Pagination\n page={page}\n pageSize={pageSize}\n total={total}\n onPageChange={onPageChange}\n />\n </div>\n );\n}\n\n// ---------- TableToolbar -------------------------------------------------\n// Barra superior que se compone arriba (o dentro de un wrapper) de un DataTable.\n// Cualquier hijo con className \"grow\" se expande para empujar las acciones al lado.\nexport const TableToolbar = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function TableToolbar({ className, ...rest }, ref) {\n return <div ref={ref} className={cx('table-toolbar', className)} {...rest} />;\n }\n);\n"]}