@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.
- package/LICENSE +23 -0
- package/README.md +244 -2
- package/dist/components/accordion/Accordion.d.ts +17 -0
- package/dist/components/accordion/Accordion.js +204 -0
- package/dist/components/accordion/Accordion.js.map +1 -0
- package/dist/components/alert/Alert.d.ts +18 -0
- package/dist/components/alert/Alert.js +164 -0
- package/dist/components/alert/Alert.js.map +1 -0
- package/dist/components/app-shell/AppShell.d.ts +97 -0
- package/dist/components/app-shell/AppShell.js +689 -0
- package/dist/components/app-shell/AppShell.js.map +1 -0
- package/dist/components/avatar/Avatar.d.ts +21 -0
- package/dist/components/avatar/Avatar.js +190 -0
- package/dist/components/avatar/Avatar.js.map +1 -0
- package/dist/components/badge/Badge.d.ts +16 -0
- package/dist/components/badge/Badge.js +94 -0
- package/dist/components/badge/Badge.js.map +1 -0
- package/dist/components/breadcrumbs/Breadcrumbs.d.ts +18 -0
- package/dist/components/breadcrumbs/Breadcrumbs.js +154 -0
- package/dist/components/breadcrumbs/Breadcrumbs.js.map +1 -0
- package/dist/components/button/Button.d.ts +23 -0
- package/dist/components/button/Button.js +159 -0
- package/dist/components/button/Button.js.map +1 -0
- package/dist/components/calendar/Calendar.d.ts +59 -0
- package/dist/components/calendar/Calendar.js +709 -0
- package/dist/components/calendar/Calendar.js.map +1 -0
- package/dist/components/calendar/date-utils.d.ts +32 -0
- package/dist/components/calendar/date-utils.js +112 -0
- package/dist/components/calendar/date-utils.js.map +1 -0
- package/dist/components/card/Card.d.ts +42 -0
- package/dist/components/card/Card.js +82 -0
- package/dist/components/card/Card.js.map +1 -0
- package/dist/components/choice/Choice.d.ts +32 -0
- package/dist/components/choice/Choice.js +371 -0
- package/dist/components/choice/Choice.js.map +1 -0
- package/dist/components/collapsible/Collapsible.d.ts +15 -0
- package/dist/components/collapsible/Collapsible.js +155 -0
- package/dist/components/collapsible/Collapsible.js.map +1 -0
- package/dist/components/combobox/Combobox.d.ts +68 -0
- package/dist/components/combobox/Combobox.js +752 -0
- package/dist/components/combobox/Combobox.js.map +1 -0
- package/dist/components/command-palette/CommandPalette.d.ts +52 -0
- package/dist/components/command-palette/CommandPalette.js +328 -0
- package/dist/components/command-palette/CommandPalette.js.map +1 -0
- package/dist/components/data-table/DataTable.d.ts +73 -0
- package/dist/components/data-table/DataTable.js +478 -0
- package/dist/components/data-table/DataTable.js.map +1 -0
- package/dist/components/data-table/DataTableContent.d.ts +35 -0
- package/dist/components/data-table/DataTableContent.js +550 -0
- package/dist/components/data-table/DataTableContent.js.map +1 -0
- package/dist/components/data-table/DataTableFilters.d.ts +15 -0
- package/dist/components/data-table/DataTableFilters.js +284 -0
- package/dist/components/data-table/DataTableFilters.js.map +1 -0
- package/dist/components/data-table/DataTableRow.d.ts +33 -0
- package/dist/components/data-table/DataTableRow.js +552 -0
- package/dist/components/data-table/DataTableRow.js.map +1 -0
- package/dist/components/data-table/context.d.ts +5 -0
- package/dist/components/data-table/context.js +14 -0
- package/dist/components/data-table/context.js.map +1 -0
- package/dist/components/data-table/layout.d.ts +60 -0
- package/dist/components/data-table/layout.js +272 -0
- package/dist/components/data-table/layout.js.map +1 -0
- package/dist/components/data-table/types.d.ts +319 -0
- package/dist/components/data-table/useDataTable.d.ts +9 -0
- package/dist/components/data-table/useDataTable.js +666 -0
- package/dist/components/data-table/useDataTable.js.map +1 -0
- package/dist/components/date-picker/DatePicker.d.ts +50 -0
- package/dist/components/date-picker/DatePicker.js +485 -0
- package/dist/components/date-picker/DatePicker.js.map +1 -0
- package/dist/components/date-picker/DateRangePicker.d.ts +39 -0
- package/dist/components/date-picker/DateRangePicker.js +339 -0
- package/dist/components/date-picker/DateRangePicker.js.map +1 -0
- package/dist/components/date-picker/PickerField.d.ts +38 -0
- package/dist/components/date-picker/PickerField.js +238 -0
- package/dist/components/date-picker/PickerField.js.map +1 -0
- package/dist/components/dialog/Dialog.d.ts +70 -0
- package/dist/components/dialog/Dialog.js +354 -0
- package/dist/components/dialog/Dialog.js.map +1 -0
- package/dist/components/drawer/Drawer.d.ts +39 -0
- package/dist/components/drawer/Drawer.js +225 -0
- package/dist/components/drawer/Drawer.js.map +1 -0
- package/dist/components/empty-state/EmptyState.d.ts +12 -0
- package/dist/components/empty-state/EmptyState.js +116 -0
- package/dist/components/empty-state/EmptyState.js.map +1 -0
- package/dist/components/field/Field.d.ts +36 -0
- package/dist/components/field/Field.js +337 -0
- package/dist/components/field/Field.js.map +1 -0
- package/dist/components/file-upload/FileUpload.d.ts +91 -0
- package/dist/components/file-upload/FileUpload.js +714 -0
- package/dist/components/file-upload/FileUpload.js.map +1 -0
- package/dist/components/input/Input.d.ts +49 -0
- package/dist/components/input/Input.js +538 -0
- package/dist/components/input/Input.js.map +1 -0
- package/dist/components/link/Link.d.ts +17 -0
- package/dist/components/link/Link.js +91 -0
- package/dist/components/link/Link.js.map +1 -0
- package/dist/components/menu/Menu.d.ts +79 -0
- package/dist/components/menu/Menu.js +615 -0
- package/dist/components/menu/Menu.js.map +1 -0
- package/dist/components/number-field/NumberField.d.ts +16 -0
- package/dist/components/number-field/NumberField.js +188 -0
- package/dist/components/number-field/NumberField.js.map +1 -0
- package/dist/components/pagination/Pagination.d.ts +34 -0
- package/dist/components/pagination/Pagination.js +244 -0
- package/dist/components/pagination/Pagination.js.map +1 -0
- package/dist/components/popover/Popover.d.ts +22 -0
- package/dist/components/popover/Popover.js +186 -0
- package/dist/components/popover/Popover.js.map +1 -0
- package/dist/components/preview-card/PreviewCard.d.ts +20 -0
- package/dist/components/preview-card/PreviewCard.js +114 -0
- package/dist/components/preview-card/PreviewCard.js.map +1 -0
- package/dist/components/progress/Progress.d.ts +20 -0
- package/dist/components/progress/Progress.js +169 -0
- package/dist/components/progress/Progress.js.map +1 -0
- package/dist/components/scroll-area/ScrollArea.d.ts +8 -0
- package/dist/components/scroll-area/ScrollArea.js +112 -0
- package/dist/components/scroll-area/ScrollArea.js.map +1 -0
- package/dist/components/search-input/SearchInput.d.ts +14 -0
- package/dist/components/search-input/SearchInput.js +114 -0
- package/dist/components/search-input/SearchInput.js.map +1 -0
- package/dist/components/select/Select.d.ts +66 -0
- package/dist/components/select/Select.js +601 -0
- package/dist/components/select/Select.js.map +1 -0
- package/dist/components/separator/Separator.d.ts +4 -0
- package/dist/components/separator/Separator.js +46 -0
- package/dist/components/separator/Separator.js.map +1 -0
- package/dist/components/skeleton/Skeleton.d.ts +16 -0
- package/dist/components/skeleton/Skeleton.js +135 -0
- package/dist/components/skeleton/Skeleton.js.map +1 -0
- package/dist/components/slider/Slider.d.ts +11 -0
- package/dist/components/slider/Slider.js +107 -0
- package/dist/components/slider/Slider.js.map +1 -0
- package/dist/components/spinner/Spinner.d.ts +9 -0
- package/dist/components/spinner/Spinner.js +78 -0
- package/dist/components/spinner/Spinner.js.map +1 -0
- package/dist/components/stack/Stack.d.ts +23 -0
- package/dist/components/stack/Stack.js +79 -0
- package/dist/components/stack/Stack.js.map +1 -0
- package/dist/components/stat-card/StatCard.d.ts +22 -0
- package/dist/components/stat-card/StatCard.js +153 -0
- package/dist/components/stat-card/StatCard.js.map +1 -0
- package/dist/components/stepper/Stepper.d.ts +30 -0
- package/dist/components/stepper/Stepper.js +131 -0
- package/dist/components/stepper/Stepper.js.map +1 -0
- package/dist/components/table/Table.d.ts +53 -0
- package/dist/components/table/Table.js +221 -0
- package/dist/components/table/Table.js.map +1 -0
- package/dist/components/tabs/Tabs.d.ts +19 -0
- package/dist/components/tabs/Tabs.js +183 -0
- package/dist/components/tabs/Tabs.js.map +1 -0
- package/dist/components/tag/Tag.d.ts +22 -0
- package/dist/components/tag/Tag.js +121 -0
- package/dist/components/tag/Tag.js.map +1 -0
- package/dist/components/toast/Toast.d.ts +34 -0
- package/dist/components/toast/Toast.js +187 -0
- package/dist/components/toast/Toast.js.map +1 -0
- package/dist/components/toggle/Toggle.d.ts +31 -0
- package/dist/components/toggle/Toggle.js +197 -0
- package/dist/components/toggle/Toggle.js.map +1 -0
- package/dist/components/toolbar/Toolbar.d.ts +21 -0
- package/dist/components/toolbar/Toolbar.js +239 -0
- package/dist/components/toolbar/Toolbar.js.map +1 -0
- package/dist/components/tooltip/Tooltip.d.ts +33 -0
- package/dist/components/tooltip/Tooltip.js +182 -0
- package/dist/components/tooltip/Tooltip.js.map +1 -0
- package/dist/components/typography/Typography.d.ts +32 -0
- package/dist/components/typography/Typography.js +183 -0
- package/dist/components/typography/Typography.js.map +1 -0
- package/dist/fonts.css +3 -0
- package/dist/icons/index.d.ts +133 -0
- package/dist/icons/index.js +182 -0
- package/dist/icons/index.js.map +1 -0
- package/dist/index.d.ts +55 -0
- package/dist/index.js +58 -0
- package/dist/opti-ui.css +5692 -0
- package/dist/theme/ThemeProvider.d.ts +22 -0
- package/dist/theme/ThemeProvider.js +115 -0
- package/dist/theme/ThemeProvider.js.map +1 -0
- package/dist/theme/index.d.ts +2 -0
- package/dist/utils/cx.d.ts +10 -0
- package/dist/utils/cx.js +18 -0
- package/dist/utils/cx.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/portal.d.ts +8 -0
- package/dist/utils/portal.js +16 -0
- package/dist/utils/portal.js.map +1 -0
- package/dist/utils/primitive.d.ts +13 -0
- package/dist/utils/primitive.js +61 -0
- package/dist/utils/primitive.js.map +1 -0
- package/dist/utils/search.d.ts +4 -0
- package/dist/utils/search.js +15 -0
- package/dist/utils/search.js.map +1 -0
- 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":"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"}
|
|
@@ -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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"}
|