@optimum-intelligence/opti-ui 0.0.0-stage → 0.3.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 (193) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +244 -2
  3. package/dist/components/accordion/Accordion.d.ts +17 -0
  4. package/dist/components/accordion/Accordion.js +204 -0
  5. package/dist/components/accordion/Accordion.js.map +1 -0
  6. package/dist/components/alert/Alert.d.ts +18 -0
  7. package/dist/components/alert/Alert.js +164 -0
  8. package/dist/components/alert/Alert.js.map +1 -0
  9. package/dist/components/app-shell/AppShell.d.ts +97 -0
  10. package/dist/components/app-shell/AppShell.js +689 -0
  11. package/dist/components/app-shell/AppShell.js.map +1 -0
  12. package/dist/components/avatar/Avatar.d.ts +21 -0
  13. package/dist/components/avatar/Avatar.js +190 -0
  14. package/dist/components/avatar/Avatar.js.map +1 -0
  15. package/dist/components/badge/Badge.d.ts +16 -0
  16. package/dist/components/badge/Badge.js +94 -0
  17. package/dist/components/badge/Badge.js.map +1 -0
  18. package/dist/components/breadcrumbs/Breadcrumbs.d.ts +18 -0
  19. package/dist/components/breadcrumbs/Breadcrumbs.js +154 -0
  20. package/dist/components/breadcrumbs/Breadcrumbs.js.map +1 -0
  21. package/dist/components/button/Button.d.ts +23 -0
  22. package/dist/components/button/Button.js +159 -0
  23. package/dist/components/button/Button.js.map +1 -0
  24. package/dist/components/calendar/Calendar.d.ts +59 -0
  25. package/dist/components/calendar/Calendar.js +709 -0
  26. package/dist/components/calendar/Calendar.js.map +1 -0
  27. package/dist/components/calendar/date-utils.d.ts +32 -0
  28. package/dist/components/calendar/date-utils.js +112 -0
  29. package/dist/components/calendar/date-utils.js.map +1 -0
  30. package/dist/components/card/Card.d.ts +42 -0
  31. package/dist/components/card/Card.js +82 -0
  32. package/dist/components/card/Card.js.map +1 -0
  33. package/dist/components/choice/Choice.d.ts +32 -0
  34. package/dist/components/choice/Choice.js +371 -0
  35. package/dist/components/choice/Choice.js.map +1 -0
  36. package/dist/components/collapsible/Collapsible.d.ts +15 -0
  37. package/dist/components/collapsible/Collapsible.js +155 -0
  38. package/dist/components/collapsible/Collapsible.js.map +1 -0
  39. package/dist/components/combobox/Combobox.d.ts +68 -0
  40. package/dist/components/combobox/Combobox.js +752 -0
  41. package/dist/components/combobox/Combobox.js.map +1 -0
  42. package/dist/components/command-palette/CommandPalette.d.ts +52 -0
  43. package/dist/components/command-palette/CommandPalette.js +328 -0
  44. package/dist/components/command-palette/CommandPalette.js.map +1 -0
  45. package/dist/components/data-table/DataTable.d.ts +73 -0
  46. package/dist/components/data-table/DataTable.js +478 -0
  47. package/dist/components/data-table/DataTable.js.map +1 -0
  48. package/dist/components/data-table/DataTableContent.d.ts +35 -0
  49. package/dist/components/data-table/DataTableContent.js +550 -0
  50. package/dist/components/data-table/DataTableContent.js.map +1 -0
  51. package/dist/components/data-table/DataTableFilters.d.ts +15 -0
  52. package/dist/components/data-table/DataTableFilters.js +284 -0
  53. package/dist/components/data-table/DataTableFilters.js.map +1 -0
  54. package/dist/components/data-table/DataTableRow.d.ts +33 -0
  55. package/dist/components/data-table/DataTableRow.js +552 -0
  56. package/dist/components/data-table/DataTableRow.js.map +1 -0
  57. package/dist/components/data-table/context.d.ts +5 -0
  58. package/dist/components/data-table/context.js +14 -0
  59. package/dist/components/data-table/context.js.map +1 -0
  60. package/dist/components/data-table/layout.d.ts +60 -0
  61. package/dist/components/data-table/layout.js +272 -0
  62. package/dist/components/data-table/layout.js.map +1 -0
  63. package/dist/components/data-table/types.d.ts +319 -0
  64. package/dist/components/data-table/useDataTable.d.ts +9 -0
  65. package/dist/components/data-table/useDataTable.js +666 -0
  66. package/dist/components/data-table/useDataTable.js.map +1 -0
  67. package/dist/components/date-picker/DatePicker.d.ts +50 -0
  68. package/dist/components/date-picker/DatePicker.js +485 -0
  69. package/dist/components/date-picker/DatePicker.js.map +1 -0
  70. package/dist/components/date-picker/DateRangePicker.d.ts +39 -0
  71. package/dist/components/date-picker/DateRangePicker.js +339 -0
  72. package/dist/components/date-picker/DateRangePicker.js.map +1 -0
  73. package/dist/components/date-picker/PickerField.d.ts +38 -0
  74. package/dist/components/date-picker/PickerField.js +238 -0
  75. package/dist/components/date-picker/PickerField.js.map +1 -0
  76. package/dist/components/dialog/Dialog.d.ts +70 -0
  77. package/dist/components/dialog/Dialog.js +354 -0
  78. package/dist/components/dialog/Dialog.js.map +1 -0
  79. package/dist/components/drawer/Drawer.d.ts +39 -0
  80. package/dist/components/drawer/Drawer.js +225 -0
  81. package/dist/components/drawer/Drawer.js.map +1 -0
  82. package/dist/components/empty-state/EmptyState.d.ts +12 -0
  83. package/dist/components/empty-state/EmptyState.js +116 -0
  84. package/dist/components/empty-state/EmptyState.js.map +1 -0
  85. package/dist/components/field/Field.d.ts +36 -0
  86. package/dist/components/field/Field.js +337 -0
  87. package/dist/components/field/Field.js.map +1 -0
  88. package/dist/components/file-upload/FileUpload.d.ts +91 -0
  89. package/dist/components/file-upload/FileUpload.js +714 -0
  90. package/dist/components/file-upload/FileUpload.js.map +1 -0
  91. package/dist/components/input/Input.d.ts +49 -0
  92. package/dist/components/input/Input.js +538 -0
  93. package/dist/components/input/Input.js.map +1 -0
  94. package/dist/components/link/Link.d.ts +17 -0
  95. package/dist/components/link/Link.js +91 -0
  96. package/dist/components/link/Link.js.map +1 -0
  97. package/dist/components/menu/Menu.d.ts +79 -0
  98. package/dist/components/menu/Menu.js +615 -0
  99. package/dist/components/menu/Menu.js.map +1 -0
  100. package/dist/components/number-field/NumberField.d.ts +16 -0
  101. package/dist/components/number-field/NumberField.js +188 -0
  102. package/dist/components/number-field/NumberField.js.map +1 -0
  103. package/dist/components/pagination/Pagination.d.ts +34 -0
  104. package/dist/components/pagination/Pagination.js +244 -0
  105. package/dist/components/pagination/Pagination.js.map +1 -0
  106. package/dist/components/popover/Popover.d.ts +22 -0
  107. package/dist/components/popover/Popover.js +186 -0
  108. package/dist/components/popover/Popover.js.map +1 -0
  109. package/dist/components/preview-card/PreviewCard.d.ts +20 -0
  110. package/dist/components/preview-card/PreviewCard.js +114 -0
  111. package/dist/components/preview-card/PreviewCard.js.map +1 -0
  112. package/dist/components/progress/Progress.d.ts +20 -0
  113. package/dist/components/progress/Progress.js +169 -0
  114. package/dist/components/progress/Progress.js.map +1 -0
  115. package/dist/components/scroll-area/ScrollArea.d.ts +8 -0
  116. package/dist/components/scroll-area/ScrollArea.js +112 -0
  117. package/dist/components/scroll-area/ScrollArea.js.map +1 -0
  118. package/dist/components/search-input/SearchInput.d.ts +14 -0
  119. package/dist/components/search-input/SearchInput.js +114 -0
  120. package/dist/components/search-input/SearchInput.js.map +1 -0
  121. package/dist/components/select/Select.d.ts +66 -0
  122. package/dist/components/select/Select.js +601 -0
  123. package/dist/components/select/Select.js.map +1 -0
  124. package/dist/components/separator/Separator.d.ts +4 -0
  125. package/dist/components/separator/Separator.js +46 -0
  126. package/dist/components/separator/Separator.js.map +1 -0
  127. package/dist/components/skeleton/Skeleton.d.ts +16 -0
  128. package/dist/components/skeleton/Skeleton.js +135 -0
  129. package/dist/components/skeleton/Skeleton.js.map +1 -0
  130. package/dist/components/slider/Slider.d.ts +11 -0
  131. package/dist/components/slider/Slider.js +107 -0
  132. package/dist/components/slider/Slider.js.map +1 -0
  133. package/dist/components/spinner/Spinner.d.ts +9 -0
  134. package/dist/components/spinner/Spinner.js +78 -0
  135. package/dist/components/spinner/Spinner.js.map +1 -0
  136. package/dist/components/stack/Stack.d.ts +23 -0
  137. package/dist/components/stack/Stack.js +79 -0
  138. package/dist/components/stack/Stack.js.map +1 -0
  139. package/dist/components/stat-card/StatCard.d.ts +22 -0
  140. package/dist/components/stat-card/StatCard.js +153 -0
  141. package/dist/components/stat-card/StatCard.js.map +1 -0
  142. package/dist/components/stepper/Stepper.d.ts +30 -0
  143. package/dist/components/stepper/Stepper.js +131 -0
  144. package/dist/components/stepper/Stepper.js.map +1 -0
  145. package/dist/components/table/Table.d.ts +53 -0
  146. package/dist/components/table/Table.js +221 -0
  147. package/dist/components/table/Table.js.map +1 -0
  148. package/dist/components/tabs/Tabs.d.ts +19 -0
  149. package/dist/components/tabs/Tabs.js +183 -0
  150. package/dist/components/tabs/Tabs.js.map +1 -0
  151. package/dist/components/tag/Tag.d.ts +22 -0
  152. package/dist/components/tag/Tag.js +121 -0
  153. package/dist/components/tag/Tag.js.map +1 -0
  154. package/dist/components/toast/Toast.d.ts +34 -0
  155. package/dist/components/toast/Toast.js +187 -0
  156. package/dist/components/toast/Toast.js.map +1 -0
  157. package/dist/components/toggle/Toggle.d.ts +31 -0
  158. package/dist/components/toggle/Toggle.js +197 -0
  159. package/dist/components/toggle/Toggle.js.map +1 -0
  160. package/dist/components/toolbar/Toolbar.d.ts +21 -0
  161. package/dist/components/toolbar/Toolbar.js +239 -0
  162. package/dist/components/toolbar/Toolbar.js.map +1 -0
  163. package/dist/components/tooltip/Tooltip.d.ts +33 -0
  164. package/dist/components/tooltip/Tooltip.js +182 -0
  165. package/dist/components/tooltip/Tooltip.js.map +1 -0
  166. package/dist/components/typography/Typography.d.ts +32 -0
  167. package/dist/components/typography/Typography.js +183 -0
  168. package/dist/components/typography/Typography.js.map +1 -0
  169. package/dist/fonts.css +3 -0
  170. package/dist/icons/index.d.ts +133 -0
  171. package/dist/icons/index.js +182 -0
  172. package/dist/icons/index.js.map +1 -0
  173. package/dist/index.d.ts +55 -0
  174. package/dist/index.js +58 -0
  175. package/dist/opti-ui.css +5692 -0
  176. package/dist/theme/ThemeProvider.d.ts +22 -0
  177. package/dist/theme/ThemeProvider.js +115 -0
  178. package/dist/theme/ThemeProvider.js.map +1 -0
  179. package/dist/theme/index.d.ts +2 -0
  180. package/dist/utils/cx.d.ts +10 -0
  181. package/dist/utils/cx.js +18 -0
  182. package/dist/utils/cx.js.map +1 -0
  183. package/dist/utils/index.d.ts +2 -0
  184. package/dist/utils/portal.d.ts +8 -0
  185. package/dist/utils/portal.js +16 -0
  186. package/dist/utils/portal.js.map +1 -0
  187. package/dist/utils/primitive.d.ts +13 -0
  188. package/dist/utils/primitive.js +61 -0
  189. package/dist/utils/primitive.js.map +1 -0
  190. package/dist/utils/search.d.ts +4 -0
  191. package/dist/utils/search.js +15 -0
  192. package/dist/utils/search.js.map +1 -0
  193. package/package.json +71 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDataTable.js","names":["React","normalizeText","datePart","pad","DateRange","DataTableColumn","DataTableEntry","DataTableFilter","DataTableFilterValue","DataTableFilterValues","DataTableInstance","DataTableResolvedFilter","DataTableResolvedLabels","UseDataTableOptions","defaultLabels","Omit","search","clearSearch","selectAll","selectRow","label","count","selected","emptyTitle","emptyDescription","noMatchTitle","noMatchDescription","loading","errorTitle","retry","filters","filterAll","clearFilters","actions","edit","save","cancel","delete","useControlled","value","initial","onChange","$","_c","inner","setInner","useState","t0","next","set","t1","undefined","t2","const","getColumnValue","column","T","row","accessor","Record","id","isEmpty","hasValue","cell","isOn","Boolean","includes","trim","toLowerCase","dayOf","date","Date","Number","isNaN","getTime","getFullYear","getMonth","getDate","WORD_CHARACTER","hasWord","text","term","from","indexOf","before","after","length","test","matchesTerms","columns","terms","values","map","exact","searchMode","every","some","resolveFilter","filter","read","data","collator","Intl","Collator","type","match","options","get","presets","min","max","day","range","start","end","items","Array","isArray","item","String","Set","flatMap","sort","compare","useDataTable","mode","total","error","onRetry","getRowId","locale","searchable","t3","searchProp","defaultSearch","t4","onSearchChange","searchDebounce","filtersProp","filterValues","filterValuesProp","defaultFilterValues","onFilterValuesChange","sortProp","defaultSort","t5","onSortChange","paginated","t6","page","pageProp","onPageChange","pageSize","pageSizeProp","defaultPageSize","t7","onPageSizeChange","selection","selectionProp","onSelectionChange","onRowClick","rowLabel","rowActions","rowTone","rowProps","onRowSave","onRowDelete","labels","setSearchState","t8","setFilterValues","setSort","setPage","setPageSizeState","setEdit","saving","setSaving","server","activeFilters","currentPage","entries","isSortable","matchCount","pageCount","pageRows","query","rows","t9","numeric","sensitivity","t10","matches","all","createElement","Fragment","t11","t12","filteredCount","noFilterMatchDescription","config","own","header","definition","definition_0","row_0","t13","t14","row_1","index","idOf","t15","row_2","index_0","t16","row_3","t17","id_0","searchColumns","_temp","split","row_4","_temp2","sortColumn","find","candidate","direction","a","b","av","bv","Math","ceil","slice","t18","t19","id_1","has","selectedInView","allSelected","setSearch","next_0","changeFilters","id_2","others","Object","key","fromEntries","setFilterValue","entry","id_3","Promise","resolve","then","draft","_temp3","saveEdit","_temp4","t20","t21","t22","t23","id_4","t24","size","t25","t26","id_5","t27","id_6","checked","item_0","t28","checked_0","ids","_temp5","kept","id_8","t29","t30","t31","t32","t33","t34","Symbol","for","id_9","t35","row_5","field","t36","field_0","value_0","current","t37","row_6","t38","visibleColumns","allRows","totalCount","filtered","reset","pending","activeFilterCount","toggleSort","setPageSize","selectable","isSelected","toggleRow","toggleAll","someSelected","editable","deletable","editingId","startEdit","cancelEdit","editValue","setEditValue","deleteRow","id_7","column_2","hidden","column_1","sortable","column_0","_c"],"sources":["../../../src/components/data-table/useDataTable.ts"],"sourcesContent":["import * as React from 'react';\nimport { normalizeText } from '../../utils/search';\nimport { datePart, pad, type DateRange } from '../calendar/date-utils';\nimport type {\n DataTableColumn,\n DataTableEntry,\n DataTableFilter,\n DataTableFilterValue,\n DataTableFilterValues,\n DataTableInstance,\n DataTableResolvedFilter,\n DataTableResolvedLabels,\n UseDataTableOptions,\n} from './types';\n\nconst defaultLabels: Omit<DataTableResolvedLabels, 'filteredCount' | 'noFilterMatchDescription'> = {\n search: 'Search…',\n clearSearch: 'Clear search',\n selectAll: 'Select all',\n selectRow: (label) => `Select ${label}`,\n count: (count) => `${count} ${count === 1 ? 'record' : 'records'}`,\n selected: (count) => `${count} selected`,\n emptyTitle: 'No records yet',\n emptyDescription: 'Records will appear here once added.',\n noMatchTitle: 'No matching records',\n noMatchDescription: 'Try a different search.',\n loading: 'Loading',\n errorTitle: 'Could not load records',\n retry: 'Try again',\n filters: 'Filters',\n filterAll: 'All',\n clearFilters: 'Clear filters',\n actions: 'Actions',\n edit: 'Edit',\n save: 'Save',\n cancel: 'Cancel',\n delete: 'Delete',\n};\n\nfunction useControlled<V>(value: V | undefined, initial: V, onChange?: (value: V) => void) {\n const [inner, setInner] = React.useState(initial);\n const set = (next: V) => {\n setInner(next);\n onChange?.(next);\n };\n return [value === undefined ? inner : value, set] as const;\n}\n\n/** The value a column sorts, searches and filters by. */\nexport function getColumnValue<T>(column: DataTableColumn<T>, row: T): unknown {\n return column.accessor ? column.accessor(row) : (row as Record<string, unknown>)[column.id];\n}\n\n// Empty values sort last in both directions.\nfunction isEmpty(value: unknown) {\n return value === null || value === undefined || value === '';\n}\n\nfunction hasValue<T>(column: DataTableColumn<T>) {\n return column.accessor !== undefined || column.cell === undefined;\n}\n\n/** A toggle filter without `match` reads the value as a flag; \"No\", \"false\" and \"0\" count as off. */\nfunction isOn(value: unknown): boolean {\n if (typeof value !== 'string') return Boolean(value);\n return !['', 'no', 'false', '0'].includes(value.trim().toLowerCase());\n}\n\n/** Local calendar day of a row's date, as `\"2026-03-09\"`. */\nfunction dayOf(value: unknown): string | null {\n if (isEmpty(value)) return null;\n if (typeof value === 'string' && datePart(value)) return datePart(value);\n const date = value instanceof Date ? value : new Date(value as string | number);\n if (Number.isNaN(date.getTime())) return null;\n return `${pad(date.getFullYear(), 4)}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;\n}\n\nconst WORD_CHARACTER = /[\\p{L}\\p{N}]/u;\n\n/** True when `term` occurs in `text` as a whole word (or run of words). */\nfunction hasWord(text: string, term: string): boolean {\n for (let from = text.indexOf(term); from !== -1; from = text.indexOf(term, from + 1)) {\n const before = text[from - 1];\n const after = text[from + term.length];\n if (!(before && WORD_CHARACTER.test(before)) && !(after && WORD_CHARACTER.test(after))) return true;\n }\n return false;\n}\n\n/** Every term has to occur in one of the columns. */\nfunction matchesTerms<T>(columns: DataTableColumn<T>[], row: T, terms: string[]): boolean {\n const values = columns.map((column) => ({\n exact: column.searchMode === 'exact',\n text: normalizeText(getColumnValue(column, row)),\n }));\n return terms.every((term) => values.some(({ exact, text }) => (exact ? hasWord(text, term) : text.includes(term))));\n}\n\nfunction resolveFilter<T>(\n filter: DataTableFilter<T>,\n read: (row: T) => unknown,\n data: T[],\n collator: Intl.Collator,\n): DataTableResolvedFilter<T> {\n const { id, label } = filter;\n if (filter.type === 'toggle') {\n const match = filter.match ?? ((row: T) => isOn(read(row)));\n return { id, label, type: 'toggle', options: [], test: (row) => match(row) };\n }\n const get = filter.value ?? read;\n if (filter.type === 'dateRange') {\n const { presets, min, max } = filter;\n return {\n id,\n label,\n type: 'dateRange',\n options: [],\n presets,\n min,\n max,\n test: (row, value) => {\n const day = dayOf(get(row));\n const range = value as DateRange;\n return day !== null && day >= range.start && day <= range.end;\n },\n };\n }\n const items = (row: T) => {\n const value = get(row);\n return (Array.isArray(value) ? value : [value]).filter((item) => !isEmpty(item)).map(String);\n };\n const options =\n filter.options ??\n [...new Set(data.flatMap(items))].sort(collator.compare).map((value) => ({ value, label: value }));\n return { id, label, type: 'select', options, test: (row, value) => items(row).includes(value as string) };\n}\n\n/**\n * State and row processing of a `DataTable`, without any markup. Pass the\n * result to `DataTable.Root` to lay the parts out yourself, or read `rows`,\n * `filterValues` and the rest to drive something else (an export, a chart).\n */\nexport function useDataTable<T>({\n data,\n columns,\n mode = 'client',\n total,\n loading = false,\n error,\n onRetry,\n getRowId,\n locale,\n searchable = true,\n search: searchProp,\n defaultSearch = '',\n onSearchChange,\n searchDebounce,\n filter,\n filters: filtersProp,\n filterValues: filterValuesProp,\n defaultFilterValues,\n onFilterValuesChange,\n sort: sortProp,\n defaultSort = null,\n onSortChange,\n paginated = true,\n page: pageProp,\n onPageChange,\n pageSize: pageSizeProp,\n defaultPageSize = 10,\n onPageSizeChange,\n selection: selectionProp,\n onSelectionChange,\n onRowClick,\n rowLabel,\n rowActions,\n rowTone,\n rowProps,\n onRowSave,\n onRowDelete,\n labels,\n}: UseDataTableOptions<T>): DataTableInstance<T> {\n const [search, setSearchState] = useControlled(searchProp, defaultSearch, onSearchChange);\n const [filterValues, setFilterValues] = useControlled(filterValuesProp, defaultFilterValues ?? {}, onFilterValuesChange);\n const [sort, setSort] = useControlled(sortProp, defaultSort, onSortChange);\n const [page, setPage] = useControlled(pageProp, 1, onPageChange);\n const [pageSize, setPageSizeState] = useControlled(pageSizeProp, defaultPageSize, onPageSizeChange);\n const [edit, setEdit] = React.useState<{ id: string; draft: Record<string, unknown> } | null>(null);\n const [saving, setSaving] = React.useState(false);\n\n const server = mode === 'server';\n const collator = new Intl.Collator(locale, { numeric: true, sensitivity: 'base' });\n const count = (labels?.count ?? defaultLabels.count) as DataTableResolvedLabels['count'];\n const text: DataTableResolvedLabels = {\n ...defaultLabels,\n // Built from `count`, so a table translated before this label existed stays in its language.\n filteredCount: (matches, all) => React.createElement(React.Fragment, null, matches, ' / ', count(all)),\n noFilterMatchDescription: labels?.noMatchDescription ?? 'Try different filters, or clear them.',\n ...labels,\n };\n\n const filters = [\n ...columns.flatMap((column) => {\n if (!column.filter) return [];\n const config = typeof column.filter === 'string' ? { type: column.filter } : column.filter;\n const own = 'label' in config ? config.label : undefined;\n const label = own ?? column.label ?? (typeof column.header === 'string' ? column.header : column.id);\n const definition = { ...config, id: column.id, label } as DataTableFilter<T>;\n return [resolveFilter(definition, (row) => getColumnValue(column, row), data, collator)];\n }),\n ...(filtersProp ?? []).map((definition) =>\n resolveFilter(definition, (row) => (row as Record<string, unknown>)[definition.id], data, collator),\n ),\n ];\n const activeFilters = filters.filter(({ id }) => filterValues[id] !== undefined);\n\n const idOf = (row: T, index: number) => getRowId?.(row, index) ?? String((row as { id?: unknown }).id ?? index);\n const entries: DataTableEntry<T>[] = data.map((row, index) => ({ row, id: idOf(row, index) }));\n let rows = entries;\n\n if (!server && activeFilters.length) {\n rows = rows.filter(({ row }) => activeFilters.every(({ id, test }) => test(row, filterValues[id])));\n }\n\n const query = search.trim();\n if (!server && query) {\n const searchColumns = columns.filter((column) => column.searchable ?? hasValue(column));\n const terms = normalizeText(query).split(/\\s+/).filter(Boolean);\n rows = rows.filter(({ row }) => (filter ? filter(row, search) : matchesTerms(searchColumns, row, terms)));\n }\n\n const isSortable = (column: DataTableColumn<T>) => column.sortable ?? hasValue(column);\n const sortColumn = sort && columns.find((candidate) => candidate.id === sort.id);\n if (!server && sort && sortColumn) {\n const direction = sort.direction === 'asc' ? 1 : -1;\n rows = [...rows].sort((a, b) => {\n if (sortColumn.compare) return direction * sortColumn.compare(a.row, b.row);\n const [av, bv] = [getColumnValue(sortColumn, a.row), getColumnValue(sortColumn, b.row)];\n if (isEmpty(av) || isEmpty(bv)) return Number(isEmpty(av)) - Number(isEmpty(bv));\n if (typeof av === 'number' && typeof bv === 'number') return direction * (av - bv);\n if (av instanceof Date && bv instanceof Date) return direction * (av.getTime() - bv.getTime());\n if (typeof av === 'boolean' && typeof bv === 'boolean') return direction * (Number(av) - Number(bv));\n return direction * collator.compare(String(av), String(bv));\n });\n }\n\n const matchCount = server ? (total ?? rows.length) : rows.length;\n const pageCount = Math.max(1, Math.ceil(matchCount / pageSize));\n const currentPage = Math.min(Math.max(1, page), pageCount);\n const pageRows = paginated && !server ? rows.slice((currentPage - 1) * pageSize, currentPage * pageSize) : rows;\n\n const selection = selectionProp ?? [];\n const selected = new Set(selection);\n const selectedInView = rows.filter(({ id }) => selected.has(id)).length;\n const allSelected = rows.length > 0 && selectedInView === rows.length;\n\n const setSearch = (next: string) => {\n setSearchState(next);\n setPage(1);\n };\n\n const changeFilters = (next: DataTableFilterValues) => {\n setFilterValues(next);\n setPage(1);\n };\n\n const setFilterValue = (id: string, value: DataTableFilterValue | undefined) => {\n const others = Object.entries(filterValues).filter(([key]) => key !== id);\n changeFilters(Object.fromEntries(value === undefined ? others : [...others, [id, value]]));\n };\n\n const saveEdit = () => {\n const entry = edit && entries.find(({ id }) => id === edit.id);\n if (!entry || !onRowSave || saving) return;\n setSaving(true);\n // A rejected save keeps the row open, so the values can be corrected or the save retried.\n Promise.resolve()\n .then(() => onRowSave({ ...entry.row, ...edit.draft }, entry.row))\n .then(\n () => setEdit(null),\n () => undefined,\n )\n .then(() => setSaving(false));\n };\n\n return {\n mode,\n columns,\n visibleColumns: columns.filter((column) => !column.hidden),\n labels: text,\n locale,\n\n allRows: entries,\n rows,\n pageRows,\n count: matchCount,\n totalCount: server ? matchCount : data.length,\n filtered: Boolean(query) || activeFilters.length > 0,\n reset: () => {\n setSearchState('');\n changeFilters({});\n },\n\n loading,\n pending: loading && !rows.length && !error,\n error,\n onRetry,\n\n searchable,\n search,\n setSearch,\n searchDebounce: searchDebounce ?? (server ? 300 : 0),\n\n filters,\n filterValues,\n setFilterValue,\n clearFilters: () => changeFilters({}),\n activeFilterCount: activeFilters.length,\n\n sort,\n setSort,\n toggleSort: (id) =>\n setSort(sort?.id !== id ? { id, direction: 'asc' } : sort.direction === 'asc' ? { id, direction: 'desc' } : null),\n isSortable,\n\n paginated,\n page: currentPage,\n pageCount,\n pageSize,\n setPage,\n setPageSize: (size) => {\n setPageSizeState(size);\n setPage(1);\n },\n\n selectable: Boolean(onSelectionChange),\n selection,\n isSelected: (id) => selected.has(id),\n toggleRow: (id, checked) =>\n onSelectionChange?.(checked ? [...selection.filter((item) => item !== id), id] : selection.filter((item) => item !== id)),\n toggleAll: (checked) => {\n const ids = new Set(rows.map(({ id }) => id));\n const kept = selection.filter((id) => !ids.has(id));\n onSelectionChange?.(checked ? [...kept, ...ids] : kept);\n },\n allSelected,\n someSelected: selectedInView > 0 && !allSelected,\n\n editable: Boolean(onRowSave),\n deletable: Boolean(onRowDelete),\n editingId: edit?.id ?? null,\n saving,\n startEdit: (id) => setEdit({ id, draft: {} }),\n cancelEdit: () => setEdit(null),\n editValue: (row, field) => (edit && field in edit.draft ? edit.draft[field] : (row as Record<string, unknown>)[field]),\n setEditValue: (field, value) => setEdit((current) => current && { ...current, draft: { ...current.draft, [field]: value } }),\n saveEdit,\n deleteRow: (row) => {\n onRowDelete?.(row);\n setEdit(null);\n },\n\n onRowClick,\n rowLabel,\n rowActions,\n rowTone,\n rowProps,\n };\n}\n"],"mappings":";;;;;;AAeA,IAAMc,gBAA6F;CACjGE,QAAQ;CACRC,aAAa;CACbC,WAAW;CACXC,YAAYC,UAAU,UAAUA;CAChCC,QAAQA,UAAU,GAAGA,MAAK,GAAIA,UAAU,IAAI,WAAW;CACvDC,WAAWD,UAAU,GAAGA,MAAK;CAC7BE,YAAY;CACZC,kBAAkB;CAClBC,cAAc;CACdC,oBAAoB;CACpBC,SAAS;CACTC,YAAY;CACZC,OAAO;CACPC,SAAS;CACTC,WAAW;CACXC,cAAc;CACdC,SAAS;CACTC,MAAM;CACNC,MAAM;CACNC,QAAQ;CACRC,QAAQ;AACV;AAEA,SAAAC,cAAAC,OAAAC,SAAAC,UAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CACE,MAAA,CAAAC,OAAAC,YAA0B7C,MAAK8C,SAAUN,OAAO;CAAE,IAAAO;CAAA,IAAAL,EAAA,OAAAD,UAAA;EACtCM,MAAAC,SAAA;GACVH,SAASG,IAAI;GACbP,WAAWO,IAAI;EAAC;EACjBN,EAAA,KAAAD;EAAAC,EAAA,KAAAK;CAAA,OAAAA,KAAAL,EAAA;CAHD,MAAAO,MAAYF;CAIJ,MAAAG,KAAAX,UAAUY,KAAAA,IAAVP,QAAAL;CAAmC,IAAAa;CAAA,IAAAV,EAAA,OAAAO,OAAAP,EAAA,OAAAQ,IAAA;EAApCE,KAAA,CAACF,IAAqCD,GAAG;EAACP,EAAA,KAAAO;EAAAP,EAAA,KAAAQ;EAAAR,EAAA,KAAAU;CAAA,OAAAA,KAAAV,EAAA;CAAA,OAA1CU;AAAmD;;AAI5D,SAAgBE,eAAkBC,QAA4BE,KAAiB;CAC7E,OAAOF,OAAOG,WAAWH,OAAOG,SAASD,GAAG,IAAKA,IAAgCF,OAAOK;AAC1F;AAGA,SAASC,QAAQtB,OAAgB;CAC/B,OAAOA,UAAU,QAAQA,UAAUY,KAAAA,KAAaZ,UAAU;AAC5D;AAEA,SAASuB,SAAYP,QAA4B;CAC/C,OAAOA,OAAOG,aAAaP,KAAAA,KAAaI,OAAOQ,SAASZ,KAAAA;AAC1D;;AAGA,SAASa,KAAKzB,OAAyB;CACrC,IAAI,OAAOA,UAAU,UAAU,OAAO0B,QAAQ1B,KAAK;CACnD,OAAO,CAAC;EAAC;EAAI;EAAM;EAAS;CAAG,CAAC,CAAC2B,SAAS3B,MAAM4B,KAAK,CAAC,CAACC,YAAY,CAAC;AACtE;;AAGA,SAASC,MAAM9B,OAA+B;CAC5C,IAAIsB,QAAQtB,KAAK,GAAG,OAAO;CAC3B,IAAI,OAAOA,UAAU,YAAYrC,SAASqC,KAAK,GAAG,OAAOrC,SAASqC,KAAK;CACvE,MAAM+B,OAAO/B,iBAAiBgC,OAAOhC,QAAQ,IAAIgC,KAAKhC,KAAwB;CAC9E,IAAIiC,OAAOC,MAAMH,KAAKI,QAAQ,CAAC,GAAG,OAAO;CACzC,OAAO,GAAGvE,IAAImE,KAAKK,YAAY,GAAG,CAAC,EAAC,GAAIxE,IAAImE,KAAKM,SAAS,IAAI,CAAC,EAAC,GAAIzE,IAAImE,KAAKO,QAAQ,CAAC;AACxF;AAEA,IAAMC,iBAAiB;;AAGvB,SAASC,QAAQC,MAAcC,MAAuB;CACpD,KAAK,IAAIC,OAAOF,KAAKG,QAAQF,IAAI,GAAGC,SAAS,IAAIA,OAAOF,KAAKG,QAAQF,MAAMC,OAAO,CAAC,GAAG;EACpF,MAAME,SAASJ,KAAKE,OAAO;EAC3B,MAAMG,QAAQL,KAAKE,OAAOD,KAAKK;EAC/B,IAAI,EAAEF,UAAUN,eAAeS,KAAKH,MAAM,MAAM,EAAEC,SAASP,eAAeS,KAAKF,KAAK,IAAI,OAAO;CACjG;CACA,OAAO;AACT;;AAGA,SAASG,aAAgBC,SAA+BhC,KAAQiC,OAA0B;CACxF,MAAMC,SAASF,QAAQG,KAAKrC,YAAY;EACtCsC,OAAOtC,OAAOuC,eAAe;EAC7Bd,MAAM/E,cAAcqD,eAAeC,QAAQE,GAAG,CAAC;CACjD,EAAE;CACF,OAAOiC,MAAMK,OAAOd,SAASU,OAAOK,MAAM,EAAEH,OAAOb,WAAYa,QAAQd,QAAQC,MAAMC,IAAI,IAAID,KAAKd,SAASe,IAAI,CAAE,CAAC;AACpH;AAEA,SAASgB,cACPC,QACAC,MACAC,MACAC,UAC4B;CAC5B,MAAM,EAAEzC,IAAIxC,UAAU8E;CACtB,IAAIA,OAAOM,SAAS,UAAU;EAC5B,MAAMC,QAAQP,OAAOO,WAAWhD,QAAWO,KAAKmC,KAAK1C,GAAG,CAAC;EACzD,OAAO;GAAEG;GAAIxC;GAAOoF,MAAM;GAAUE,SAAS,CAAA;GAAInB,OAAO9B,QAAQgD,MAAMhD,GAAG;EAAE;CAC7E;CACA,MAAMkD,MAAMT,OAAO3D,SAAS4D;CAC5B,IAAID,OAAOM,SAAS,aAAa;EAC/B,MAAM,EAAEI,SAASC,KAAKC,QAAQZ;EAC9B,OAAO;GACLtC;GACAxC;GACAoF,MAAM;GACNE,SAAS,CAAA;GACTE;GACAC;GACAC;GACAvB,OAAO9B,KAAKlB,UAAU;IACpB,MAAMwE,MAAM1C,MAAMsC,IAAIlD,GAAG,CAAC;IAC1B,MAAMuD,QAAQzE;IACd,OAAOwE,QAAQ,QAAQA,OAAOC,MAAMC,SAASF,OAAOC,MAAME;GAC5D;EACF;CACF;CACA,MAAMC,SAAS1D,QAAW;EACxB,MAAMlB,QAAQoE,IAAIlD,GAAG;EACrB,QAAQ2D,MAAMC,QAAQ9E,KAAK,IAAIA,QAAQ,CAACA,KAAK,EAAA,CAAG2D,QAAQoB,SAAS,CAACzD,QAAQyD,IAAI,CAAC,CAAC,CAAC1B,IAAI2B,MAAM;CAC7F;CAIA,OAAO;EAAE3D;EAAIxC;EAAOoF,MAAM;EAAUE,SAFlCR,OAAOQ,WACP,CAAC,GAAG,IAAIc,IAAIpB,KAAKqB,QAAQN,KAAK,CAAC,CAAC,CAAC,CAACO,KAAKrB,SAASsB,OAAO,CAAC,CAAC/B,KAAKrD,WAAW;GAAEA;GAAOnB,OAAOmB;EAAM,EAAE;EACtDgD,OAAO9B,KAAKlB,UAAU4E,MAAM1D,GAAG,CAAC,CAACS,SAAS3B,KAAe;CAAE;AAC1G;;;;;;AAOA,SAAOqF,aAAA7E,IAAA;CAAA,MAAAL,IAAAC,EAAA,GAAA;CAAyB,MAAA,EAAAyD,MAAAX,SAAAoC,MAAA3E,IAAA4E,OAAAnG,SAAAyB,IAAA2E,OAAAC,SAAAC,UAAAC,QAAAC,YAAAC,IAAApH,QAAAqH,YAAAC,eAAAC,IAAAC,gBAAAC,gBAAAvC,QAAApE,SAAA4G,aAAAC,cAAAC,kBAAAC,qBAAAC,sBAAApB,MAAAqB,UAAAC,aAAAC,IAAAC,cAAAC,WAAAC,IAAAC,MAAAC,UAAAC,cAAAC,UAAAC,cAAAC,iBAAAC,IAAAC,kBAAAC,WAAAC,eAAAC,mBAAAC,YAAAC,UAAAC,YAAAC,SAAAC,UAAAC,WAAAC,aAAAC,WAAAxH;CAG9B,MAAA8E,OAAA3E,OAAAC,KAAAA,IAAA,WAAAD;CAEA,MAAAvB,UAAAyB,OAAAD,KAAAA,IAAA,QAAAC;CAKA,MAAA+E,aAAAC,OAAAjF,KAAAA,IAAA,OAAAiF;CAEA,MAAAE,gBAAAC,OAAApF,KAAAA,IAAA,KAAAoF;CASA,MAAAS,cAAAC,OAAA9F,KAAAA,IAAA,OAAA8F;CAEA,MAAAE,YAAAC,OAAAjG,KAAAA,IAAA,OAAAiG;CAIA,MAAAM,kBAAAC,OAAAxG,KAAAA,IAAA,KAAAwG;CAaA,MAAA,CAAA3I,QAAAwJ,kBAAiClI,cAAc+F,YAAYC,eAAeE,cAAc;CAAE,IAAAiC;CAAA,IAAA/H,EAAA,OAAAmG,qBAAA;EAClB4B,KAAA5B,uBAAA,CAAwB;EAACnG,EAAA,KAAAmG;EAAAnG,EAAA,KAAA+H;CAAA,OAAAA,KAAA/H,EAAA;CAAjG,MAAA,CAAAiG,cAAA+B,mBAAwCpI,cAAcsG,kBAAkB6B,IAA2B3B,oBAAoB;CACvH,MAAA,CAAApB,MAAAiD,WAAwBrI,cAAcyG,UAAUC,aAAaE,YAAY;CACzE,MAAA,CAAAG,MAAAuB,WAAwBtI,cAAcgH,UAAU,GAAGC,YAAY;CAC/D,MAAA,CAAAC,UAAAqB,oBAAqCvI,cAAcmH,cAAcC,iBAAiBE,gBAAgB;CAClG,MAAA,CAAA1H,MAAA4I,WAAwB9K,MAAK8C,SAAiE,IAAI;CAClG,MAAA,CAAAiI,QAAAC,aAA4BhL,MAAK8C,SAAU,KAAK;CAEhD,MAAAmI,SAAepD,SAAS;CAAS,IAAAqD;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAtJ;CAAA,IAAAuJ;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAApK;CAAA,IAAAuI;CAAA,IAAA8B;CAAA,IAAA3G;CAAA,IAAAtC,EAAA,OAAA+C,WAAA/C,EAAA,OAAA0D,QAAA1D,EAAA,OAAAwD,UAAAxD,EAAA,OAAAiG,gBAAAjG,EAAA,OAAAgG,eAAAhG,EAAA,OAAAuF,YAAAvF,EAAA,OAAA6H,UAAA7H,EAAA,OAAAwF,UAAAxF,EAAA,QAAA2G,QAAA3G,EAAA,QAAA8G,YAAA9G,EAAA,QAAAyG,aAAAzG,EAAA,QAAA1B,UAAA0B,EAAA,QAAAoH,iBAAApH,EAAA,QAAAuI,UAAAvI,EAAA,QAAAgF,QAAAhF,EAAA,QAAAoF,OAAA;EACjC,MAAAzB,WAAiB,IAAIC,KAAIC,SAAU2B,QAAQ;GAAA0D,SAAW;GAAIC,aAAe;EAAO,CAAC;EACjF,MAAAxK,QAAekJ,QAAMlJ,SAAWP,cAAaO;EAA4C,IAAAyK;EAAA,IAAApJ,EAAA,QAAArB,OAAA;GAIxEyK,OAAAC,SAAAC,QAAkBhM,MAAKiM,cAAejM,MAAKkM,UAAW,MAAMH,SAAS,OAAO1K,MAAM2K,GAAG,CAAC;GAACtJ,EAAA,MAAArB;GAAAqB,EAAA,MAAAoJ;EAAA,OAAAA,MAAApJ,EAAA;EAC5E,MAAAyJ,MAAA5B,QAAM7I,sBAAN;EAAqE,IAAA0K;EAAA,IAAA1J,EAAA,QAAA6H,UAAA7H,EAAA,QAAAoJ,OAAApJ,EAAA,QAAAyJ,KAAA;GAJ3DC,MAAA;IAAA,GACjCtL;IAAauL,eAEDP;IAAuFQ,0BAC5EH;IAAqE,GAC5F5B;GACL;GAAC7H,EAAA,MAAA6H;GAAA7H,EAAA,MAAAoJ;GAAApJ,EAAA,MAAAyJ;GAAAzJ,EAAA,MAAA0J;EAAA,OAAAA,MAAA1J,EAAA;EANDsC,OAAsCoH;EAQtCtK,UAAgB,CAAA,GACX2D,QAAOgC,SAASlE,WAAA;GACjB,IAAI,CAACA,OAAM2C,QAAO,OAAS,CAAA;GAC3B,MAAAqG,SAAe,OAAOhJ,OAAM2C,WAAY,WAAzB,EAAAM,MAA4CjD,OAAM2C,OAAwB,IAAZ3C,OAAM2C;GAEnF,MAAA9E,SADY,WAAWmL,SAASA,OAAMnL,QAA1B+B,KAAAA,MACSI,OAAMnC,UAAW,OAAOmC,OAAMkJ,WAAY,WAAWlJ,OAAMkJ,SAAUlJ,OAAMK;GACnB,OACtE,CAACqC,cAAcyG;IADH,GAAKH;IAAM3I,IAAML,OAAMK;IAAGxC;GACvBsL,IAAYjJ,QAASH,eAAeC,QAAQE,GAAG,GAAG2C,MAAMC,QAAQ,CAAC;EAAC,CACzF,GAAC,IACEqC,eAAA,CAAA,EAAA,CAAiB9C,KAAM+G,iBACzB1G,cAAcyG,eAAYE,UAAUnJ,MAAgCiJ,aAAU9I,KAAMwC,MAAMC,QAAQ,CACpG,CAAC;EAEH6E,gBAAsBpJ,QAAOoE,QAAQ2G,QAAA;GAAC,MAAA,EAAAjJ,OAAAiJ;GAAM,OAAKlE,aAAa/E,QAAQT,KAAAA;EAAS,CAAA;EAAE,IAAA2J;EAAA,IAAApK,EAAA,QAAAuF,UAAA;GAEpE6E,OAAAC,OAAAC,UAA2B/E,WAAWxE,OAAKuJ,KAAsD,KAA5CzF,OAAQ9D,MAAuBG,MAAxBoJ,KAAqC;GAACtK,EAAA,MAAAuF;GAAAvF,EAAA,MAAAoK;EAAA,OAAAA,MAAApK,EAAA;EAA/G,MAAAuK,OAAaH;EAAmG,IAAAI;EAAA,IAAAxK,EAAA,QAAAuK,MAAA;GAClEC,OAAAC,OAAAC,aAAiB;IAAA3J,KAAEA;IAAGG,IAAMqJ,KAAKxJ,OAAKuJ,OAAK;GAAE;GAAEtK,EAAA,MAAAuK;GAAAvK,EAAA,MAAAwK;EAAA,OAAAA,MAAAxK,EAAA;EAA7F0I,UAAqChF,KAAIR,IAAKsH,GAA+C;EAC7FxB,OAAWN;EAEX,IAAI,CAACH,UAAUC,cAAa5F,QAC1BoG,OAAOA,KAAIxF,QAAQmH,QAAA;GAAC,MAAA,EAAA5J,KAAA6J,UAAAD;GAAO,OAAKnC,cAAanF,OAAOwH,QAAA;IAAC,MAAA,EAAA3J,IAAA4J,MAAAjI,SAAAgI;IAAY,OAAKhI,KAAK9B,OAAKkF,aAAa/E,KAAG;GAAC,CAAA;EAAC,CAAA;EAGpG6H,QAAczK,OAAMmD,KAAM;EAC1B,IAAI,CAAC8G,UAADQ,OAAgB;GAClB,MAAAgC,gBAAsBhI,QAAOS,OAAQwH,KAAiD;GACtF,MAAAhI,QAAczF,cAAcwL,KAAK,CAAC,CAAAkC,MAAO,KAAK,CAAC,CAAAzH,OAAQjC,OAAO;GAC9DyH,OAAOA,KAAIxF,QAAQmH,QAAA;IAAC,MAAA,EAAA5J,KAAAmK,UAAAP;IAAO,OAAMnH,SAASA,OAAOzC,OAAKzC,MAAgD,IAAtCwE,aAAaiI,eAAehK,OAAKiC,KAAK;GAAC,CAAC;EAApG;EAGN2F,aAAmBwC;EACnB,MAAAC,aAAmBpG,QAAQjC,QAAOsI,MAAMC,cAAeA,UAASpK,OAAQ8D,KAAI9D,EAAG;EAC/E,IAAI,CAACqH,UAADvD,QAAAoG,YAA6B;GAC/B,MAAAG,YAAkBvG,KAAIuG,cAAe,QAAnB,IAAA;GAClBvC,OAAOA,CAAAA,GAAIA,IAAI,CAAC,CAAAhE,MAAMwG,GAAAC,MAAA;IACpB,IAAIL,WAAUnG,SAAQ,OAASsG,YAAYH,WAAUnG,QAASuG,EAACzK,KAAM0K,EAAC1K,GAAI;IAC1E,MAAA,CAAA2K,IAAAC,MAAiB,CAAC/K,eAAewK,YAAYI,EAACzK,GAAI,GAAGH,eAAewK,YAAYK,EAAC1K,GAAI,CAAC;IACtF,IAAII,QAAQuK,EAAiB,KAAVvK,QAAQwK,EAAE,GAAC,OAAS7J,OAAOX,QAAQuK,EAAE,CAAC,IAAI5J,OAAOX,QAAQwK,EAAE,CAAC;IAC/E,IAAI,OAAOD,OAAO,YAAY,OAAOC,OAAO,UAAQ,OAASJ,aAAaG,KAAKC;IAC/E,IAAID,cAAc7J,QAAQ8J,cAAc9J,MAAI,OAAS0J,aAAaG,GAAE1J,QAAS,IAAI2J,GAAE3J,QAAS;IAC5F,IAAI,OAAO0J,OAAO,aAAa,OAAOC,OAAO,WAAS,OAASJ,aAAazJ,OAAO4J,EAAE,IAAI5J,OAAO6J,EAAE;IAAG,OAC9FJ,YAAY5H,SAAQsB,QAASJ,OAAO6G,EAAE,GAAG7G,OAAO8G,EAAE,CAAC;GAAC,CAC5D;EARG;EAWN/C,aAAmBL,SAAUnD,SAAS4D,KAAIpG,SAAWoG,KAAIpG;EACzDiG,YAAkB+C,KAAIxH,IAAK,GAAGwH,KAAIC,KAAMjD,aAAa9B,QAAQ,CAAC;EAC9D2B,cAAoBmD,KAAIzH,IAAKyH,KAAIxH,IAAK,GAAGuC,IAAI,GAAGkC,SAAS;EACzDC,WAAiBrC,aAAA,CAAc8B,SAASS,KAAI8C,OAAQrD,cAAc,KAAK3B,UAAU2B,cAAc3B,QAAe,IAA7FkC;EAA+F,IAAA2B;EAAA,IAAA3K,EAAA,QAAAoH,eAAA;GAE9FuD,MAAAvD,iBAAA,CAAA;GAAmBpH,EAAA,MAAAoH;GAAApH,EAAA,MAAA2K;EAAA,OAAAA,MAAA3K,EAAA;EAArCmH,YAAkBwD;EAAoB,IAAAE;EAAA,IAAA7K,EAAA,QAAAmH,WAAA;GACrB0D,MAAA,IAAI/F,IAAIqC,SAAS;GAACnH,EAAA,MAAAmH;GAAAnH,EAAA,MAAA6K;EAAA,OAAAA,MAAA7K,EAAA;EAAnCpB,WAAiBiM;EAAmB,IAAAkB;EAAA,IAAA/L,EAAA,QAAApB,UAAA;GACDmN,OAAAC,QAAA;IAAC,MAAA,EAAA9K,IAAA+K,SAAAD;IAAM,OAAKpN,SAAQsN,IAAKhL,IAAE;GAAC;GAAAlB,EAAA,MAAApB;GAAAoB,EAAA,MAAA+L;EAAA,OAAAA,MAAA/L,EAAA;EAAxCiJ,KAAAD,KAAIxF,OAAQuI,GAA4B;EAAC/L,EAAA,KAAA+C;EAAA/C,EAAA,KAAA0D;EAAA1D,EAAA,KAAAwD;EAAAxD,EAAA,KAAAiG;EAAAjG,EAAA,KAAAgG;EAAAhG,EAAA,KAAAuF;EAAAvF,EAAA,KAAA6H;EAAA7H,EAAA,KAAAwF;EAAAxF,EAAA,MAAA2G;EAAA3G,EAAA,MAAA8G;EAAA9G,EAAA,MAAAyG;EAAAzG,EAAA,MAAA1B;EAAA0B,EAAA,MAAAoH;EAAApH,EAAA,MAAAuI;EAAAvI,EAAA,MAAAgF;EAAAhF,EAAA,MAAAoF;EAAApF,EAAA,MAAAwI;EAAAxI,EAAA,MAAAyI;EAAAzI,EAAA,MAAA0I;EAAA1I,EAAA,MAAAZ;EAAAY,EAAA,MAAA2I;EAAA3I,EAAA,MAAA4I;EAAA5I,EAAA,MAAA6I;EAAA7I,EAAA,MAAA8I;EAAA9I,EAAA,MAAA+I;EAAA/I,EAAA,MAAAgJ;EAAAhJ,EAAA,MAAApB;EAAAoB,EAAA,MAAAmH;EAAAnH,EAAA,MAAAiJ;EAAAjJ,EAAA,MAAAsC;CAAA,OAAA;EAAAkG,gBAAAxI,EAAA;EAAAyI,cAAAzI,EAAA;EAAA0I,UAAA1I,EAAA;EAAAZ,UAAAY,EAAA;EAAA2I,aAAA3I,EAAA;EAAA4I,aAAA5I,EAAA;EAAA6I,YAAA7I,EAAA;EAAA8I,WAAA9I,EAAA;EAAA+I,QAAA/I,EAAA;EAAAgJ,OAAAhJ,EAAA;EAAApB,WAAAoB,EAAA;EAAAmH,YAAAnH,EAAA;EAAAiJ,KAAAjJ,EAAA;EAAAsC,OAAAtC,EAAA;CAAA;CAAhE,MAAAmM,iBAAuBlD,GAAyCrG;CAChE,MAAAwJ,cAAoBpD,KAAIpG,SAAU,KAAKuJ,mBAAmBnD,KAAIpG;CAAQ,IAAAwG;CAAA,IAAApJ,EAAA,QAAAkI,WAAAlI,EAAA,QAAA8H,gBAAA;EAEpDsB,OAAA9I,SAAA;GAChBwH,eAAexH,IAAI;GACnB4H,QAAQ,CAAC;EAAC;EACXlI,EAAA,MAAAkI;EAAAlI,EAAA,MAAA8H;EAAA9H,EAAA,MAAAoJ;CAAA,OAAAA,MAAApJ,EAAA;CAHD,MAAAqM,YAAkBjD;CAGhB,IAAAK;CAAA,IAAAzJ,EAAA,QAAAgI,mBAAAhI,EAAA,QAAAkI,SAAA;EAEoBuB,OAAA6C,WAAA;GACpBtE,gBAAgB1H,MAAI;GACpB4H,QAAQ,CAAC;EAAC;EACXlI,EAAA,MAAAgI;EAAAhI,EAAA,MAAAkI;EAAAlI,EAAA,MAAAyJ;CAAA,OAAAA,MAAAzJ,EAAA;CAHD,MAAAuM,gBAAsB9C;CAGpB,IAAAC;CAAA,IAAA1J,EAAA,QAAAuM,iBAAAvM,EAAA,QAAAiG,cAAA;EAEqByD,OAAA8C,MAAA3M,UAAA;GACrB,MAAA4M,SAAeC,OAAMhE,QAASzC,YAAY,CAAC,CAAAzC,QAAQ2G,QAAA;IAAC,MAAA,CAAAwC,OAAAxC;IAAK,OAAKwC,QAAQzL;GAAE,CAAA;GACxEqL,cAAcG,OAAME,YAAa/M,UAAUY,KAAAA,IAAVgM,SAAA,CAAA,GAAmCA,QAAQ,CAACvL,MAAIrB,KAAK,CAAC,CAAC,CAAC;EAAC;EAC3FG,EAAA,MAAAuM;EAAAvM,EAAA,MAAAiG;EAAAjG,EAAA,MAAA0J;CAAA,OAAAA,MAAA1J,EAAA;CAHD,MAAA6M,iBAAuBnD;CAGrB,IAAAS;CAAA,IAAAnK,EAAA,QAAAR,QAAAQ,EAAA,QAAA0I,WAAA1I,EAAA,QAAA2H,aAAA3H,EAAA,QAAAqI,QAAA;EAEe8B,YAAA;GACf,MAAA2C,QAActN,QAAQkJ,QAAO2C,MAAMjB,QAAA;IAAC,MAAA,EAAAlJ,IAAA6L,SAAA3C;IAAM,OAAKlJ,SAAO1B,KAAI0B;GAAG,CAAA;GAC7D,IAAI,CAAC4L,SAAD,CAAWnF,aAAXU,QAA8B;GAClCC,UAAU,IAAI;GAEd0E,QAAOC,QAAS,CAAC,CAAAC,WACHvF,UAAU;IAAA,GAAKmF,MAAK/L;IAAI,GAAKvB,KAAI2N;GAAO,GAAGL,MAAK/L,GAAI,CAAC,CAAC,CAAAmM,WAE1D9E,QAAQ,IAAI,GAClBgF,MACF,CAAC,CAAAF,WACW5E,UAAU,KAAK,CAAC;EAAC;EAChCtI,EAAA,MAAAR;EAAAQ,EAAA,MAAA0I;EAAA1I,EAAA,MAAA2H;EAAA3H,EAAA,MAAAqI;EAAArI,EAAA,MAAAmK;CAAA,OAAAA,MAAAnK,EAAA;CAZD,MAAAqN,WAAiBlD;CAYf,IAAAC;CAAA,IAAApK,EAAA,QAAA+C,SAAA;EAKgBqH,MAAArH,QAAOS,OAAQ8J,MAA0B;EAACtN,EAAA,MAAA+C;EAAA/C,EAAA,MAAAoK;CAAA,OAAAA,MAAApK,EAAA;CAK1DgJ,MAAAA,MAAAA;CAGY,MAAA2B,MAAApC,SAAAK,aAAsBlF,KAAId;CAC5B,MAAAiI,MAAAtJ,QAAQwH,KAAiC,KAAvBP,cAAa5F,SAAU;CAAC,IAAAmJ;CAAA,IAAA/L,EAAA,QAAAuM,iBAAAvM,EAAA,QAAA8H,gBAAA;EAC7CiE,YAAA;GACLjE,eAAe,EAAE;GACjByE,cAAc,CAAC,CAAC;EAAC;EAClBvM,EAAA,MAAAuM;EAAAvM,EAAA,MAAA8H;EAAA9H,EAAA,MAAA+L;CAAA,OAAAA,MAAA/L,EAAA;CAGQ,MAAAgM,MAAA/M,WAAA,CAAY+J,KAAIpG,UAAhB,CAA4ByC;CAOrB,MAAAkI,MAAAxH,mBAAmBwC,SAAA,MAAA;CAAiB,IAAAiF;CAAA,IAAAxN,EAAA,QAAAuM,eAAA;EAKtCiB,YAAMjB,cAAc,CAAC,CAAC;EAACvM,EAAA,MAAAuM;EAAAvM,EAAA,MAAAwN;CAAA,OAAAA,MAAAxN,EAAA;CAClB,MAAAyN,MAAAjF,cAAa5F;CAAO,IAAA8K;CAAA,IAAA1N,EAAA,QAAAiI,WAAAjI,EAAA,QAAAgF,MAAA;EAI3B0I,OAAAC,SACV1F,QAAQjD,MAAI9D,OAASA,OAAb;GAAAA,IAAoBA;GAAEqK,WAAa;EAAoE,IAA1DvG,KAAIuG,cAAe,QAAnB;GAAArK,IAA6BA;GAAEqK,WAAa;EAAc,IAA1D,IAA2D;EAACvL,EAAA,MAAAiI;EAAAjI,EAAA,MAAAgF;EAAAhF,EAAA,MAAA0N;CAAA,OAAAA,MAAA1N,EAAA;CAAA,IAAA4N;CAAA,IAAA5N,EAAA,QAAAkI,WAAAlI,EAAA,QAAAmI,kBAAA;EAQtGyF,OAAAC,SAAA;GACX1F,iBAAiB0F,IAAI;GACrB3F,QAAQ,CAAC;EAAC;EACXlI,EAAA,MAAAkI;EAAAlI,EAAA,MAAAmI;EAAAnI,EAAA,MAAA4N;CAAA,OAAAA,MAAA5N,EAAA;CAEW,MAAA8N,MAAAvM,QAAQ8F,iBAAiB;CAAC,IAAA0G;CAAA,IAAA/N,EAAA,QAAApB,UAAA;EAE1BmP,OAAAC,SAAQpP,SAAQsN,IAAKhL,IAAE;EAAClB,EAAA,MAAApB;EAAAoB,EAAA,MAAA+N;CAAA,OAAAA,MAAA/N,EAAA;CAAA,IAAAiO;CAAA,IAAAjO,EAAA,QAAAqH,qBAAArH,EAAA,QAAAmH,WAAA;EACzB8G,OAAAC,MAAAC,YACT9G,oBAAoB8G,UAAA,CAAA,GAAchH,UAAS3D,QAAQoB,SAAUA,SAAS1D,IAAE,GAAGA,IAAE,IAAIiG,UAAS3D,QAAQ4K,WAAUxJ,WAAS1D,IAAE,CAAC;EAAClB,EAAA,MAAAqH;EAAArH,EAAA,MAAAmH;EAAAnH,EAAA,MAAAiO;CAAA,OAAAA,MAAAjO,EAAA;CAAA,IAAAqO;CAAA,IAAArO,EAAA,QAAAqH,qBAAArH,EAAA,QAAAgJ,QAAAhJ,EAAA,QAAAmH,WAAA;EAChHkH,OAAAC,cAAA;GACT,MAAAC,MAAY,IAAIzJ,IAAIkE,KAAI9F,IAAKsL,MAAc,CAAC;GAC5C,MAAAC,OAAatH,UAAS3D,QAAQkL,SAAQ,CAACH,IAAGrC,IAAKhL,IAAE,CAAC;GAClDmG,oBAAoB8G,YAAA,CAAA,GAAcM,MAAI,GAAKF,GAAG,IAA1BE,IAAkC;EAAC;EACxDzO,EAAA,MAAAqH;EAAArH,EAAA,MAAAgJ;EAAAhJ,EAAA,MAAAmH;EAAAnH,EAAA,MAAAqO;CAAA,OAAAA,MAAArO,EAAA;CAEa,MAAA2O,MAAAxC,iBAAiB,KAAjB,CAAuBC;CAE3B,MAAAwC,MAAArN,QAAQoG,SAAS;CAChB,MAAAkH,MAAAtN,QAAQqG,WAAW;CACnB,MAAAkH,MAAAtP,MAAI0B,MAAJ;CAAgB,IAAA6N;CAAA,IAAAC;CAAA,IAAAhP,EAAA,QAAAiP,OAAAC,IAAA,2BAAA,GAAA;EAEhBH,OAAAI,SAAQ/G,QAAQ;GAAAlH,IAAEA;GAAEiM,OAAS,CAAC;EAAE,CAAC;EAChC6B,YAAM5G,QAAQ,IAAI;EAACpI,EAAA,MAAA+O;EAAA/O,EAAA,MAAAgP;CAAA,OAAA;EAAAD,MAAA/O,EAAA;EAAAgP,MAAAhP,EAAA;CAAA;CAAA,IAAAoP;CAAA,IAAApP,EAAA,QAAAR,MAAA;EACpB4P,OAAAC,OAAAC,UAAiB9P,QAAQ8P,SAAS9P,KAAI2N,QAAS3N,KAAI2N,MAAOmC,SAAUvO,MAAgCuO;EAAOtP,EAAA,MAAAR;EAAAQ,EAAA,MAAAoP;CAAA,OAAAA,MAAApP,EAAA;CAAA,IAAAuP;CAAA,IAAAvP,EAAA,QAAAiP,OAAAC,IAAA,2BAAA,GAAA;EACxGK,OAAAC,SAAAC,YAAkBrH,SAAQsH,YAAaA,WAAA;GAAA,GAAgBA;GAAOvC,OAAS;IAAA,GAAKuC,QAAOvC;KAASmC,UAAQzP;GAAM;EAAE,CAAC;EAACG,EAAA,MAAAuP;CAAA,OAAAA,MAAAvP,EAAA;CAAA,IAAA2P;CAAA,IAAA3P,EAAA,QAAA4H,aAAA;EAEjH+H,OAAAC,UAAA;GACThI,cAAc7G,KAAG;GACjBqH,QAAQ,IAAI;EAAC;EACdpI,EAAA,MAAA4H;EAAA5H,EAAA,MAAA2P;CAAA,OAAAA,MAAA3P,EAAA;CAAA,IAAA6P;CAAA,IAAA7P,EAAA,QAAAwI,cAAA5F,UAAA5C,EAAA,QAAAoM,eAAApM,EAAA,QAAA+C,WAAA/C,EAAA,QAAAyI,eAAAzI,EAAA,QAAA0I,WAAA1I,EAAA,QAAAqF,SAAArF,EAAA,QAAAiG,gBAAAjG,EAAA,QAAAZ,WAAAY,EAAA,QAAA2I,cAAA3I,EAAA,SAAAf,WAAAe,EAAA,SAAAwF,UAAAxF,EAAA,SAAA4I,cAAA5I,EAAA,SAAAmF,QAAAnF,EAAA,SAAAsF,WAAAtF,EAAA,SAAAsH,cAAAtH,EAAA,SAAA6I,aAAA7I,EAAA,SAAA8I,YAAA9I,EAAA,SAAA8G,YAAA9G,EAAA,SAAAyG,aAAAzG,EAAA,SAAAwH,cAAAxH,EAAA,SAAAuH,YAAAvH,EAAA,SAAA0H,YAAA1H,EAAA,SAAAyH,WAAAzH,EAAA,SAAAgJ,QAAAhJ,EAAA,SAAAqN,YAAArN,EAAA,SAAAqI,UAAArI,EAAA,SAAA1B,UAAA0B,EAAA,SAAAyF,cAAAzF,EAAA,SAAAmH,aAAAnH,EAAA,SAAA6M,kBAAA7M,EAAA,SAAAkI,WAAAlI,EAAA,SAAAqM,aAAArM,EAAA,SAAAiI,WAAAjI,EAAA,SAAAgF,QAAAhF,EAAA,SAAAoK,OAAApK,EAAA,SAAA2K,OAAA3K,EAAA,SAAA6K,OAAA7K,EAAA,SAAA+L,OAAA/L,EAAA,SAAAgM,OAAAhM,EAAA,SAAAuN,OAAAvN,EAAA,SAAAwN,OAAAxN,EAAA,SAAA0N,OAAA1N,EAAA,SAAA4N,OAAA5N,EAAA,SAAA8N,OAAA9N,EAAA,SAAA+N,OAAA/N,EAAA,SAAAiO,OAAAjO,EAAA,SAAAqO,OAAArO,EAAA,SAAA2O,OAAA3O,EAAA,SAAA4O,OAAA5O,EAAA,SAAA6O,OAAA7O,EAAA,SAAA8O,OAAA9O,EAAA,SAAAoP,OAAApP,EAAA,SAAA2P,OAAA3P,EAAA,SAAAsC,MAAA;EA3EIuN,MAAA;GAAA1K;GAAApC;GAAA+M,gBAGW1F;GAA0CvC,QAClDvF;GAAIkD;GAAAuK,SAGHrH;GAAOM,MAChBA;GAAIF;GAAAnK,OAEGiK;GAAUoH,YACLrF;GAAiCsF,UACnCpF;GAA0CqF,OAC7CnE;GAGN9M;GAAAkR,SAGQnE;GAAiC3G;GAAAC;GAAAG;GAAAnH;GAAA+N;GAAAtG,gBAO1BwH;GAAoCnO;GAAA6G;GAAA4G;GAAAvN,cAKtCkO;GAAuB4C,mBAClB3C;GAAoBzI;GAAAiD;GAAAoI,YAI3B3C;GACuG/E;GAAAlC;GAAAE,MAI7G8B;GAAWI;GAAA/B;GAAAoB;GAAAoI,aAIJ1C;GAGZ2C,YAEWzC;GAA0B3G;GAAAqJ,YAE1BzC;GAAwB0C,WACzBxC;GACgHyC,WAChHrC;GAIVjC;GAAAuE,cAEahC;GAAkCiC,UAEtChC;GAAkBiC,WACjBhC;GAAoBiC,WACpBhC;GAAgBzG;GAAA0I,WAEhBhC;GAAkCiC,YACjChC;GAAmBiC,WACpB7B;GAA2G8B,cACxG3B;GAA8GlC;GAAA8D,WAEjHxB;GAGVrI;GAAAC;GAAAC;GAAAC;GAAAC;EAOH;EAAC1H,EAAA,MAAAwI,cAAA5F;EAAA5C,EAAA,MAAAoM;EAAApM,EAAA,MAAA+C;EAAA/C,EAAA,MAAAyI;EAAAzI,EAAA,MAAA0I;EAAA1I,EAAA,MAAAqF;EAAArF,EAAA,MAAAiG;EAAAjG,EAAA,MAAAZ;EAAAY,EAAA,MAAA2I;EAAA3I,EAAA,OAAAf;EAAAe,EAAA,OAAAwF;EAAAxF,EAAA,OAAA4I;EAAA5I,EAAA,OAAAmF;EAAAnF,EAAA,OAAAsF;EAAAtF,EAAA,OAAAsH;EAAAtH,EAAA,OAAA6I;EAAA7I,EAAA,OAAA8I;EAAA9I,EAAA,OAAA8G;EAAA9G,EAAA,OAAAyG;EAAAzG,EAAA,OAAAwH;EAAAxH,EAAA,OAAAuH;EAAAvH,EAAA,OAAA0H;EAAA1H,EAAA,OAAAyH;EAAAzH,EAAA,OAAAgJ;EAAAhJ,EAAA,OAAAqN;EAAArN,EAAA,OAAAqI;EAAArI,EAAA,OAAA1B;EAAA0B,EAAA,OAAAyF;EAAAzF,EAAA,OAAAmH;EAAAnH,EAAA,OAAA6M;EAAA7M,EAAA,OAAAkI;EAAAlI,EAAA,OAAAqM;EAAArM,EAAA,OAAAiI;EAAAjI,EAAA,OAAAgF;EAAAhF,EAAA,OAAAoK;EAAApK,EAAA,OAAA2K;EAAA3K,EAAA,OAAA6K;EAAA7K,EAAA,OAAA+L;EAAA/L,EAAA,OAAAgM;EAAAhM,EAAA,OAAAuN;EAAAvN,EAAA,OAAAwN;EAAAxN,EAAA,OAAA0N;EAAA1N,EAAA,OAAA4N;EAAA5N,EAAA,OAAA8N;EAAA9N,EAAA,OAAA+N;EAAA/N,EAAA,OAAAiO;EAAAjO,EAAA,OAAAqO;EAAArO,EAAA,OAAA2O;EAAA3O,EAAA,OAAA4O;EAAA5O,EAAA,OAAA6O;EAAA7O,EAAA,OAAA8O;EAAA9O,EAAA,OAAAoP;EAAApP,EAAA,OAAA2P;EAAA3P,EAAA,OAAAsC;EAAAtC,EAAA,OAAA6P;CAAA,OAAAA,MAAA7P,EAAA;CAAA,OAlFM6P;AAkFN;AAjOI,SAAArB,OAAAnO,IAAA;CAuM6B,MAAA,EAAAa,IAAAkQ,SAAA/Q;CAAM,OAAKa;AAAE;AAvM1C,SAAAoM,OAAA+D,UAAA;CAAA,OAkJwC,CAACxQ,SAAMyQ;AAAO;AAlJtD,SAAAlE,SAAA,CAAA;AAAA,SAAAjC,OAAAoG,UAAA;CAAA,OAyF8C1Q,SAAM2Q,YAAapQ,SAASP,QAAM;AAAC;AAzFjF,SAAAmK,MAAAyG,UAAA;CAAA,OAoF8C5Q,SAAM4E,cAAerE,SAASP,QAAM;AAAC"}
@@ -0,0 +1,50 @@
1
+ import * as React from 'react';
2
+ import { type CalendarLabels, type CalendarProps } from '../calendar/Calendar';
3
+ import { type PickerFieldProps } from './PickerField';
4
+ export interface DatePickerLabels extends CalendarLabels {
5
+ today: string;
6
+ clear: string;
7
+ done: string;
8
+ time: string;
9
+ hours: string;
10
+ minutes: string;
11
+ seconds: string;
12
+ }
13
+ interface PickerProps extends PickerFieldProps, Pick<CalendarProps, 'isDateDisabled' | 'defaultMonth' | 'locale' | 'weekStartsOn'> {
14
+ value?: string | null;
15
+ defaultValue?: string | null;
16
+ /** Called with the new value, or `null` when cleared. */
17
+ onValueChange?: (value: string | null) => void;
18
+ /** Earliest allowed value. */
19
+ min?: string;
20
+ /** Latest allowed value. */
21
+ max?: string;
22
+ /** Submits the value with a form under this name. */
23
+ name?: string;
24
+ /** Show the Clear action. Defaults to `true` unless `required`. */
25
+ clearable?: boolean;
26
+ /** Custom display text for the selected value. */
27
+ formatValue?: (value: string) => React.ReactNode;
28
+ /** Override texts for localisation. */
29
+ labels?: Partial<DatePickerLabels>;
30
+ }
31
+ export interface DatePickerProps extends PickerProps {
32
+ }
33
+ /**
34
+ * Date field with a calendar popover. Values are ISO dates (`"2026-03-09"`),
35
+ * the same format as `<input type="date">`, and are shown the same way.
36
+ */
37
+ export declare function DatePicker(props: DatePickerProps): React.JSX.Element;
38
+ export interface DateTimePickerProps extends PickerProps {
39
+ /** Granularity of the time input in seconds (60 = minutes, 1 = seconds). */
40
+ step?: number;
41
+ /** Time used when a day is picked before any time is set. */
42
+ defaultTime?: string;
43
+ }
44
+ /**
45
+ * Date and time field. Values are local ISO date-times (`"2026-03-09T14:30"`),
46
+ * the same format as `<input type="datetime-local">`, shown as `2026-03-09 14:30:00`
47
+ * on a 24-hour clock whatever the locale.
48
+ */
49
+ export declare function DateTimePicker(props: DateTimePickerProps): React.JSX.Element;
50
+ export {};
@@ -0,0 +1,485 @@
1
+ "use client";
2
+ import { Button } from "../button/Button.js";
3
+ import { datePart, formatDate, pad, timePart, todayIso } from "../calendar/date-utils.js";
4
+ import { Calendar } from "../calendar/Calendar.js";
5
+ import { PickerField, useOpenState } from "./PickerField.js";
6
+ import { c } from "react/compiler-runtime";
7
+ import * as React from "react";
8
+ import { jsx, jsxs } from "react/jsx-runtime";
9
+ //#region src/components/date-picker/DatePicker.tsx
10
+ var defaultLabels = {
11
+ today: "Today",
12
+ clear: "Clear",
13
+ done: "Done",
14
+ time: "Time",
15
+ hours: "Hours",
16
+ minutes: "Minutes",
17
+ seconds: "Seconds"
18
+ };
19
+ function withinBounds(value, min, max) {
20
+ if (min && value < min) return min;
21
+ if (max && value > max) return max;
22
+ return value;
23
+ }
24
+ /** 0, `step`, 2 × `step`… below `limit`, plus `current` when it falls between steps. */
25
+ function timeOptions(limit, step, current) {
26
+ const options = Array.from({ length: Math.ceil(limit / step) }, (_, index) => index * step);
27
+ return options.includes(current) ? options : [...options, current].sort((a, b) => a - b);
28
+ }
29
+ /** Hour, minute and (below one-minute steps) second lists: unlike a native time input, always 24-hour. */
30
+ function TimeField(t0) {
31
+ const $ = c(24);
32
+ const { value, step, labels, onChange } = t0;
33
+ let t1;
34
+ let t2;
35
+ let t3;
36
+ let t4;
37
+ let t5;
38
+ let t6;
39
+ if ($[0] !== labels.hours || $[1] !== labels.minutes || $[2] !== labels.seconds || $[3] !== labels.time || $[4] !== onChange || $[5] !== step || $[6] !== value) {
40
+ const [t7, t8, t9] = value.split(":").map(_temp);
41
+ const hours = t7 === void 0 ? 0 : t7;
42
+ const minutes = t8 === void 0 ? 0 : t8;
43
+ const seconds = t9 === void 0 ? 0 : t9;
44
+ const withSeconds = step % 60 !== 0 || value.length > 5;
45
+ const parts = [
46
+ {
47
+ label: labels.hours,
48
+ value: hours,
49
+ options: timeOptions(24, step % 3600 === 0 ? Math.min(step / 3600, 24) : 1, hours)
50
+ },
51
+ {
52
+ label: labels.minutes,
53
+ value: minutes,
54
+ options: timeOptions(60, step % 60 === 0 && step < 3600 ? step / 60 : 1, minutes)
55
+ },
56
+ ...withSeconds ? [{
57
+ label: labels.seconds,
58
+ value: seconds,
59
+ options: timeOptions(60, step < 60 ? step : 1, seconds)
60
+ }] : []
61
+ ];
62
+ t3 = "group";
63
+ t4 = labels.time;
64
+ t5 = "oui-date-picker__time";
65
+ if ($[13] !== labels.time) {
66
+ t6 = /* @__PURE__ */ jsx("span", { children: labels.time });
67
+ $[13] = labels.time;
68
+ $[14] = t6;
69
+ } else t6 = $[14];
70
+ t1 = "oui-date-picker__time-parts";
71
+ t2 = parts.map((part_0, index) => /* @__PURE__ */ jsxs(React.Fragment, { children: [index > 0 && /* @__PURE__ */ jsx("span", {
72
+ "aria-hidden": "true",
73
+ children: ":"
74
+ }), /* @__PURE__ */ jsx("select", {
75
+ className: "oui-input",
76
+ "data-size": "sm",
77
+ "aria-label": part_0.label,
78
+ value: part_0.value,
79
+ onChange: (event) => {
80
+ const next = parts.map((item, position) => pad(position === index ? Number(event.target.value) : item.value));
81
+ onChange(next.join(":"));
82
+ },
83
+ children: part_0.options.map(_temp2)
84
+ })] }, part_0.label));
85
+ $[0] = labels.hours;
86
+ $[1] = labels.minutes;
87
+ $[2] = labels.seconds;
88
+ $[3] = labels.time;
89
+ $[4] = onChange;
90
+ $[5] = step;
91
+ $[6] = value;
92
+ $[7] = t1;
93
+ $[8] = t2;
94
+ $[9] = t3;
95
+ $[10] = t4;
96
+ $[11] = t5;
97
+ $[12] = t6;
98
+ } else {
99
+ t1 = $[7];
100
+ t2 = $[8];
101
+ t3 = $[9];
102
+ t4 = $[10];
103
+ t5 = $[11];
104
+ t6 = $[12];
105
+ }
106
+ let t7;
107
+ if ($[15] !== t1 || $[16] !== t2) {
108
+ t7 = /* @__PURE__ */ jsx("div", {
109
+ className: t1,
110
+ children: t2
111
+ });
112
+ $[15] = t1;
113
+ $[16] = t2;
114
+ $[17] = t7;
115
+ } else t7 = $[17];
116
+ let t8;
117
+ if ($[18] !== t3 || $[19] !== t4 || $[20] !== t5 || $[21] !== t6 || $[22] !== t7) {
118
+ t8 = /* @__PURE__ */ jsxs("div", {
119
+ role: t3,
120
+ "aria-label": t4,
121
+ className: t5,
122
+ children: [t6, t7]
123
+ });
124
+ $[18] = t3;
125
+ $[19] = t4;
126
+ $[20] = t5;
127
+ $[21] = t6;
128
+ $[22] = t7;
129
+ $[23] = t8;
130
+ } else t8 = $[23];
131
+ return t8;
132
+ }
133
+ function _temp2(option) {
134
+ return /* @__PURE__ */ jsx("option", {
135
+ value: option,
136
+ children: pad(option)
137
+ }, option);
138
+ }
139
+ function _temp(part) {
140
+ return Math.floor(Number(part)) || 0;
141
+ }
142
+ function Picker(t0) {
143
+ const $ = c(102);
144
+ let clearable;
145
+ let defaultMonth;
146
+ let field;
147
+ let formatValue;
148
+ let isDateDisabled;
149
+ let labels;
150
+ let locale;
151
+ let max;
152
+ let min;
153
+ let mode;
154
+ let name;
155
+ let onValueChange;
156
+ let placeholder;
157
+ let step;
158
+ let t1;
159
+ let t2;
160
+ let value;
161
+ let weekStartsOn;
162
+ if ($[0] !== t0) {
163
+ ({mode, step, defaultTime: t1, value, defaultValue: t2, onValueChange, min, max, isDateDisabled, defaultMonth, locale, weekStartsOn, name, placeholder, clearable, formatValue, labels, ...field} = t0);
164
+ $[0] = t0;
165
+ $[1] = clearable;
166
+ $[2] = defaultMonth;
167
+ $[3] = field;
168
+ $[4] = formatValue;
169
+ $[5] = isDateDisabled;
170
+ $[6] = labels;
171
+ $[7] = locale;
172
+ $[8] = max;
173
+ $[9] = min;
174
+ $[10] = mode;
175
+ $[11] = name;
176
+ $[12] = onValueChange;
177
+ $[13] = placeholder;
178
+ $[14] = step;
179
+ $[15] = t1;
180
+ $[16] = t2;
181
+ $[17] = value;
182
+ $[18] = weekStartsOn;
183
+ } else {
184
+ clearable = $[1];
185
+ defaultMonth = $[2];
186
+ field = $[3];
187
+ formatValue = $[4];
188
+ isDateDisabled = $[5];
189
+ labels = $[6];
190
+ locale = $[7];
191
+ max = $[8];
192
+ min = $[9];
193
+ mode = $[10];
194
+ name = $[11];
195
+ onValueChange = $[12];
196
+ placeholder = $[13];
197
+ step = $[14];
198
+ t1 = $[15];
199
+ t2 = $[16];
200
+ value = $[17];
201
+ weekStartsOn = $[18];
202
+ }
203
+ const defaultTime = t1 === void 0 ? "00:00" : t1;
204
+ const defaultValue = t2 === void 0 ? null : t2;
205
+ let t3;
206
+ if ($[19] !== labels) {
207
+ t3 = {
208
+ ...defaultLabels,
209
+ ...labels
210
+ };
211
+ $[19] = labels;
212
+ $[20] = t3;
213
+ } else t3 = $[20];
214
+ const text = t3;
215
+ const withTime = mode === "datetime";
216
+ const [inner, setInner] = React.useState(defaultValue);
217
+ const current = (value === void 0 ? inner : value) || null;
218
+ let t4;
219
+ if ($[21] !== current) {
220
+ t4 = datePart(current);
221
+ $[21] = current;
222
+ $[22] = t4;
223
+ } else t4 = $[22];
224
+ const date = t4;
225
+ let t5;
226
+ if ($[23] !== current || $[24] !== defaultTime || $[25] !== withTime) {
227
+ t5 = withTime ? timePart(current) ?? defaultTime : null;
228
+ $[23] = current;
229
+ $[24] = defaultTime;
230
+ $[25] = withTime;
231
+ $[26] = t5;
232
+ } else t5 = $[26];
233
+ const time = t5;
234
+ const [open, setOpen] = useOpenState(field);
235
+ let t6;
236
+ if ($[27] !== max || $[28] !== min || $[29] !== onValueChange) {
237
+ t6 = (next) => {
238
+ const bounded = next === null ? null : withinBounds(next, min, max);
239
+ setInner(bounded);
240
+ onValueChange?.(bounded);
241
+ };
242
+ $[27] = max;
243
+ $[28] = min;
244
+ $[29] = onValueChange;
245
+ $[30] = t6;
246
+ } else t6 = $[30];
247
+ const commit = t6;
248
+ const t7 = placeholder ?? (withTime ? "Select date and time" : "Select date");
249
+ let t8;
250
+ if ($[31] !== current || $[32] !== date || $[33] !== formatValue || $[34] !== withTime) {
251
+ t8 = date && current ? formatValue?.(current) ?? formatDate(withTime ? current : date) : null;
252
+ $[31] = current;
253
+ $[32] = date;
254
+ $[33] = formatValue;
255
+ $[34] = withTime;
256
+ $[35] = t8;
257
+ } else t8 = $[35];
258
+ let t9;
259
+ if ($[36] !== current || $[37] !== name) {
260
+ t9 = name && /* @__PURE__ */ jsx("input", {
261
+ type: "hidden",
262
+ name,
263
+ value: current ?? ""
264
+ });
265
+ $[36] = current;
266
+ $[37] = name;
267
+ $[38] = t9;
268
+ } else t9 = $[38];
269
+ let t10;
270
+ if ($[39] !== commit || $[40] !== setOpen || $[41] !== time || $[42] !== withTime) {
271
+ t10 = (next_0) => {
272
+ commit(withTime ? `${next_0}T${time}` : next_0);
273
+ if (!withTime) setOpen(false);
274
+ };
275
+ $[39] = commit;
276
+ $[40] = setOpen;
277
+ $[41] = time;
278
+ $[42] = withTime;
279
+ $[43] = t10;
280
+ } else t10 = $[43];
281
+ let t11;
282
+ if ($[44] !== min) {
283
+ t11 = datePart(min) ?? void 0;
284
+ $[44] = min;
285
+ $[45] = t11;
286
+ } else t11 = $[45];
287
+ let t12;
288
+ if ($[46] !== max) {
289
+ t12 = datePart(max) ?? void 0;
290
+ $[46] = max;
291
+ $[47] = t12;
292
+ } else t12 = $[47];
293
+ let t13;
294
+ if ($[48] !== date || $[49] !== defaultMonth || $[50] !== isDateDisabled || $[51] !== labels || $[52] !== locale || $[53] !== t10 || $[54] !== t11 || $[55] !== t12 || $[56] !== weekStartsOn) {
295
+ t13 = /* @__PURE__ */ jsx(Calendar, {
296
+ value: date,
297
+ onValueChange: t10,
298
+ min: t11,
299
+ max: t12,
300
+ isDateDisabled,
301
+ defaultMonth,
302
+ locale,
303
+ weekStartsOn,
304
+ labels
305
+ });
306
+ $[48] = date;
307
+ $[49] = defaultMonth;
308
+ $[50] = isDateDisabled;
309
+ $[51] = labels;
310
+ $[52] = locale;
311
+ $[53] = t10;
312
+ $[54] = t11;
313
+ $[55] = t12;
314
+ $[56] = weekStartsOn;
315
+ $[57] = t13;
316
+ } else t13 = $[57];
317
+ let t14;
318
+ if ($[58] !== commit || $[59] !== date || $[60] !== max || $[61] !== min || $[62] !== step || $[63] !== text || $[64] !== time) {
319
+ t14 = time !== null && /* @__PURE__ */ jsx(TimeField, {
320
+ value: time,
321
+ step: step && step > 0 ? Math.floor(step) || 1 : 60,
322
+ labels: text,
323
+ onChange: (next_1) => commit(`${date ?? withinBounds(todayIso(), datePart(min) ?? void 0, datePart(max) ?? void 0)}T${next_1}`)
324
+ });
325
+ $[58] = commit;
326
+ $[59] = date;
327
+ $[60] = max;
328
+ $[61] = min;
329
+ $[62] = step;
330
+ $[63] = text;
331
+ $[64] = time;
332
+ $[65] = t14;
333
+ } else t14 = $[65];
334
+ let t15;
335
+ if ($[66] !== isDateDisabled) {
336
+ t15 = isDateDisabled?.(todayIso());
337
+ $[66] = isDateDisabled;
338
+ $[67] = t15;
339
+ } else t15 = $[67];
340
+ const t16 = Boolean(t15);
341
+ let t17;
342
+ if ($[68] !== commit || $[69] !== setOpen || $[70] !== time || $[71] !== withTime) {
343
+ t17 = () => {
344
+ const today = todayIso();
345
+ commit(withTime ? `${today}T${time}` : today);
346
+ if (!withTime) setOpen(false);
347
+ };
348
+ $[68] = commit;
349
+ $[69] = setOpen;
350
+ $[70] = time;
351
+ $[71] = withTime;
352
+ $[72] = t17;
353
+ } else t17 = $[72];
354
+ let t18;
355
+ if ($[73] !== t16 || $[74] !== t17 || $[75] !== text.today) {
356
+ t18 = /* @__PURE__ */ jsx(Button, {
357
+ size: "sm",
358
+ variant: "ghost",
359
+ shape: "rounded",
360
+ disabled: t16,
361
+ onClick: t17,
362
+ children: text.today
363
+ });
364
+ $[73] = t16;
365
+ $[74] = t17;
366
+ $[75] = text.today;
367
+ $[76] = t18;
368
+ } else t18 = $[76];
369
+ let t19;
370
+ if ($[77] !== clearable || $[78] !== commit || $[79] !== current || $[80] !== field || $[81] !== setOpen || $[82] !== text.clear) {
371
+ t19 = (clearable ?? !field.required) && /* @__PURE__ */ jsx(Button, {
372
+ size: "sm",
373
+ variant: "ghost",
374
+ shape: "rounded",
375
+ disabled: !current,
376
+ onClick: () => {
377
+ commit(null);
378
+ setOpen(false);
379
+ },
380
+ children: text.clear
381
+ });
382
+ $[77] = clearable;
383
+ $[78] = commit;
384
+ $[79] = current;
385
+ $[80] = field;
386
+ $[81] = setOpen;
387
+ $[82] = text.clear;
388
+ $[83] = t19;
389
+ } else t19 = $[83];
390
+ let t20;
391
+ if ($[84] !== setOpen || $[85] !== text.done || $[86] !== withTime) {
392
+ t20 = withTime && /* @__PURE__ */ jsx(Button, {
393
+ size: "sm",
394
+ shape: "rounded",
395
+ className: "oui-date-picker__done",
396
+ onClick: () => setOpen(false),
397
+ children: text.done
398
+ });
399
+ $[84] = setOpen;
400
+ $[85] = text.done;
401
+ $[86] = withTime;
402
+ $[87] = t20;
403
+ } else t20 = $[87];
404
+ let t21;
405
+ if ($[88] !== t18 || $[89] !== t19 || $[90] !== t20) {
406
+ t21 = /* @__PURE__ */ jsxs("div", {
407
+ className: "oui-date-picker__footer",
408
+ children: [
409
+ t18,
410
+ t19,
411
+ t20
412
+ ]
413
+ });
414
+ $[88] = t18;
415
+ $[89] = t19;
416
+ $[90] = t20;
417
+ $[91] = t21;
418
+ } else t21 = $[91];
419
+ let t22;
420
+ if ($[92] !== field || $[93] !== open || $[94] !== setOpen || $[95] !== t13 || $[96] !== t14 || $[97] !== t21 || $[98] !== t7 || $[99] !== t8 || $[100] !== t9) {
421
+ t22 = /* @__PURE__ */ jsxs(PickerField, {
422
+ ...field,
423
+ open,
424
+ onOpenChange: setOpen,
425
+ placeholder: t7,
426
+ display: t8,
427
+ inputs: t9,
428
+ children: [
429
+ t13,
430
+ t14,
431
+ t21
432
+ ]
433
+ });
434
+ $[92] = field;
435
+ $[93] = open;
436
+ $[94] = setOpen;
437
+ $[95] = t13;
438
+ $[96] = t14;
439
+ $[97] = t21;
440
+ $[98] = t7;
441
+ $[99] = t8;
442
+ $[100] = t9;
443
+ $[101] = t22;
444
+ } else t22 = $[101];
445
+ return t22;
446
+ }
447
+ /**
448
+ * Date field with a calendar popover. Values are ISO dates (`"2026-03-09"`),
449
+ * the same format as `<input type="date">`, and are shown the same way.
450
+ */
451
+ function DatePicker(props) {
452
+ const $ = c(2);
453
+ let t0;
454
+ if ($[0] !== props) {
455
+ t0 = /* @__PURE__ */ jsx(Picker, {
456
+ mode: "date",
457
+ ...props
458
+ });
459
+ $[0] = props;
460
+ $[1] = t0;
461
+ } else t0 = $[1];
462
+ return t0;
463
+ }
464
+ /**
465
+ * Date and time field. Values are local ISO date-times (`"2026-03-09T14:30"`),
466
+ * the same format as `<input type="datetime-local">`, shown as `2026-03-09 14:30:00`
467
+ * on a 24-hour clock whatever the locale.
468
+ */
469
+ function DateTimePicker(props) {
470
+ const $ = c(2);
471
+ let t0;
472
+ if ($[0] !== props) {
473
+ t0 = /* @__PURE__ */ jsx(Picker, {
474
+ mode: "datetime",
475
+ ...props
476
+ });
477
+ $[0] = props;
478
+ $[1] = t0;
479
+ } else t0 = $[1];
480
+ return t0;
481
+ }
482
+ //#endregion
483
+ export { DatePicker, DateTimePicker };
484
+
485
+ //# sourceMappingURL=DatePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatePicker.js","names":["React","Button","Calendar","CalendarLabels","CalendarProps","datePart","formatDate","pad","timePart","todayIso","PickerField","useOpenState","PickerFieldProps","DatePickerLabels","today","clear","done","time","hours","minutes","seconds","defaultLabels","Omit","PickerProps","Pick","value","defaultValue","onValueChange","min","max","name","clearable","formatValue","ReactNode","labels","Partial","withinBounds","timeOptions","limit","step","current","options","Array","from","length","Math","ceil","_","index","includes","sort","a","b","TimeFieldProps","onChange","TimeField","t0","$","_c","t1","t2","t3","t4","t5","t6","t7","t8","t9","split","map","_temp","undefined","withSeconds","parts","label","part_0","part","event","next","item","position","Number","target","join","_temp2","option","floor","Picker","defaultMonth","field","isDateDisabled","locale","mode","placeholder","weekStartsOn","defaultTime","text","withTime","inner","setInner","useState","date","open","setOpen","bounded","commit","t10","next_0","t11","t12","t13","t14","next_1","t15","t16","Boolean","t17","t18","t19","required","t20","t21","t22","DatePickerProps","DatePicker","props","DateTimePickerProps","DateTimePicker","_c"],"sources":["../../../src/components/date-picker/DatePicker.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Button } from '../button/Button';\nimport { Calendar, type CalendarLabels, type CalendarProps } from '../calendar/Calendar';\nimport { datePart, formatDate, pad, timePart, todayIso } from '../calendar/date-utils';\nimport { PickerField, useOpenState, type PickerFieldProps } from './PickerField';\n\nexport interface DatePickerLabels extends CalendarLabels {\n today: string;\n clear: string;\n done: string;\n time: string;\n hours: string;\n minutes: string;\n seconds: string;\n}\n\nconst defaultLabels: Omit<DatePickerLabels, keyof CalendarLabels> = {\n today: 'Today',\n clear: 'Clear',\n done: 'Done',\n time: 'Time',\n hours: 'Hours',\n minutes: 'Minutes',\n seconds: 'Seconds',\n};\n\ninterface PickerProps\n extends PickerFieldProps,\n Pick<CalendarProps, 'isDateDisabled' | 'defaultMonth' | 'locale' | 'weekStartsOn'> {\n value?: string | null;\n defaultValue?: string | null;\n /** Called with the new value, or `null` when cleared. */\n onValueChange?: (value: string | null) => void;\n /** Earliest allowed value. */\n min?: string;\n /** Latest allowed value. */\n max?: string;\n /** Submits the value with a form under this name. */\n name?: string;\n /** Show the Clear action. Defaults to `true` unless `required`. */\n clearable?: boolean;\n /** Custom display text for the selected value. */\n formatValue?: (value: string) => React.ReactNode;\n /** Override texts for localisation. */\n labels?: Partial<DatePickerLabels>;\n}\n\nfunction withinBounds(value: string, min?: string, max?: string): string {\n if (min && value < min) return min;\n if (max && value > max) return max;\n return value;\n}\n\n/** 0, `step`, 2 × `step`… below `limit`, plus `current` when it falls between steps. */\nfunction timeOptions(limit: number, step: number, current: number): number[] {\n const options = Array.from({ length: Math.ceil(limit / step) }, (_, index) => index * step);\n return options.includes(current) ? options : [...options, current].sort((a, b) => a - b);\n}\n\ninterface TimeFieldProps {\n /** `\"14:30\"` or `\"14:30:05\"`. */\n value: string;\n /** Granularity in seconds. */\n step: number;\n labels: Pick<DatePickerLabels, 'time' | 'hours' | 'minutes' | 'seconds'>;\n onChange: (value: string) => void;\n}\n\n/** Hour, minute and (below one-minute steps) second lists: unlike a native time input, always 24-hour. */\nfunction TimeField({ value, step, labels, onChange }: TimeFieldProps) {\n const [hours = 0, minutes = 0, seconds = 0] = value.split(':').map((part) => Math.floor(Number(part)) || 0);\n const withSeconds = step % 60 !== 0 || value.length > 5;\n const parts = [\n { label: labels.hours, value: hours, options: timeOptions(24, step % 3600 === 0 ? Math.min(step / 3600, 24) : 1, hours) },\n { label: labels.minutes, value: minutes, options: timeOptions(60, step % 60 === 0 && step < 3600 ? step / 60 : 1, minutes) },\n ...(withSeconds ? [{ label: labels.seconds, value: seconds, options: timeOptions(60, step < 60 ? step : 1, seconds) }] : []),\n ];\n return (\n <div role=\"group\" aria-label={labels.time} className=\"oui-date-picker__time\">\n <span>{labels.time}</span>\n <div className=\"oui-date-picker__time-parts\">\n {parts.map((part, index) => (\n <React.Fragment key={part.label}>\n {index > 0 && <span aria-hidden=\"true\">:</span>}\n <select\n className=\"oui-input\"\n data-size=\"sm\"\n aria-label={part.label}\n value={part.value}\n onChange={(event) => {\n const next = parts.map((item, position) => pad(position === index ? Number(event.target.value) : item.value));\n onChange(next.join(':'));\n }}\n >\n {part.options.map((option) => (\n <option key={option} value={option}>\n {pad(option)}\n </option>\n ))}\n </select>\n </React.Fragment>\n ))}\n </div>\n </div>\n );\n}\n\nfunction Picker({\n mode,\n step,\n defaultTime = '00:00',\n value,\n defaultValue = null,\n onValueChange,\n min,\n max,\n isDateDisabled,\n defaultMonth,\n locale,\n weekStartsOn,\n name,\n placeholder,\n clearable,\n formatValue,\n labels,\n ...field\n}: PickerProps & { mode: 'date' | 'datetime'; step?: number; defaultTime?: string }) {\n const text = { ...defaultLabels, ...labels };\n const withTime = mode === 'datetime';\n const [inner, setInner] = React.useState(defaultValue);\n const current = (value === undefined ? inner : value) || null;\n const date = datePart(current);\n const time = withTime ? (timePart(current) ?? defaultTime) : null;\n const [open, setOpen] = useOpenState(field);\n\n const commit = (next: string | null) => {\n const bounded = next === null ? null : withinBounds(next, min, max);\n setInner(bounded);\n onValueChange?.(bounded);\n };\n\n return (\n <PickerField\n {...field}\n open={open}\n onOpenChange={setOpen}\n placeholder={placeholder ?? (withTime ? 'Select date and time' : 'Select date')}\n display={date && current ? (formatValue?.(current) ?? formatDate(withTime ? current : date)) : null}\n inputs={name && <input type=\"hidden\" name={name} value={current ?? ''} />}\n >\n <Calendar\n value={date}\n onValueChange={(next) => {\n commit(withTime ? `${next}T${time}` : next);\n if (!withTime) setOpen(false);\n }}\n min={datePart(min) ?? undefined}\n max={datePart(max) ?? undefined}\n isDateDisabled={isDateDisabled}\n defaultMonth={defaultMonth}\n locale={locale}\n weekStartsOn={weekStartsOn}\n labels={labels}\n />\n {time !== null && (\n <TimeField\n value={time}\n step={step && step > 0 ? Math.floor(step) || 1 : 60}\n labels={text}\n onChange={(next) =>\n commit(`${date ?? withinBounds(todayIso(), datePart(min) ?? undefined, datePart(max) ?? undefined)}T${next}`)\n }\n />\n )}\n <div className=\"oui-date-picker__footer\">\n <Button\n size=\"sm\"\n variant=\"ghost\"\n shape=\"rounded\"\n disabled={Boolean(isDateDisabled?.(todayIso()))}\n onClick={() => {\n const today = todayIso();\n commit(withTime ? `${today}T${time}` : today);\n if (!withTime) setOpen(false);\n }}\n >\n {text.today}\n </Button>\n {(clearable ?? !field.required) && (\n <Button\n size=\"sm\"\n variant=\"ghost\"\n shape=\"rounded\"\n disabled={!current}\n onClick={() => {\n commit(null);\n setOpen(false);\n }}\n >\n {text.clear}\n </Button>\n )}\n {withTime && (\n <Button size=\"sm\" shape=\"rounded\" className=\"oui-date-picker__done\" onClick={() => setOpen(false)}>\n {text.done}\n </Button>\n )}\n </div>\n </PickerField>\n );\n}\n\nexport interface DatePickerProps extends PickerProps {}\n\n/**\n * Date field with a calendar popover. Values are ISO dates (`\"2026-03-09\"`),\n * the same format as `<input type=\"date\">`, and are shown the same way.\n */\nexport function DatePicker(props: DatePickerProps) {\n return <Picker mode=\"date\" {...props} />;\n}\n\nexport interface DateTimePickerProps extends PickerProps {\n /** Granularity of the time input in seconds (60 = minutes, 1 = seconds). */\n step?: number;\n /** Time used when a day is picked before any time is set. */\n defaultTime?: string;\n}\n\n/**\n * Date and time field. Values are local ISO date-times (`\"2026-03-09T14:30\"`),\n * the same format as `<input type=\"datetime-local\">`, shown as `2026-03-09 14:30:00`\n * on a 24-hour clock whatever the locale.\n */\nexport function DateTimePicker(props: DateTimePickerProps) {\n return <Picker mode=\"datetime\" {...props} />;\n}\n"],"mappings":"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"}