@optimum-intelligence/opti-ui 0.5.2 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +66 -0
- package/dist/components/badge/Badge.d.ts +4 -2
- package/dist/components/badge/Badge.js.map +1 -1
- package/dist/components/button/Button.d.ts +6 -1
- package/dist/components/button/Button.js +31 -26
- package/dist/components/button/Button.js.map +1 -1
- package/dist/components/data-table/DataTable.d.ts +14 -2
- package/dist/components/data-table/DataTable.js +113 -98
- package/dist/components/data-table/DataTable.js.map +1 -1
- package/dist/components/data-table/DataTableFilters.d.ts +1 -1
- package/dist/components/data-table/DataTableFilters.js +85 -44
- package/dist/components/data-table/DataTableFilters.js.map +1 -1
- package/dist/components/data-table/export.d.ts +3 -0
- package/dist/components/data-table/export.js +31 -0
- package/dist/components/data-table/export.js.map +1 -0
- package/dist/components/data-table/types.d.ts +32 -5
- package/dist/components/data-table/useDataTable.js +18 -4
- package/dist/components/data-table/useDataTable.js.map +1 -1
- package/dist/components/description-list/DescriptionList.d.ts +29 -0
- package/dist/components/description-list/DescriptionList.js +125 -0
- package/dist/components/description-list/DescriptionList.js.map +1 -0
- package/dist/components/dialog/ConfirmDialog.d.ts +59 -0
- package/dist/components/dialog/ConfirmDialog.js +165 -0
- package/dist/components/dialog/ConfirmDialog.js.map +1 -0
- package/dist/components/dialog/Dialog.d.ts +9 -2
- package/dist/components/dialog/Dialog.js +103 -89
- package/dist/components/dialog/Dialog.js.map +1 -1
- package/dist/components/drawer/Drawer.d.ts +3 -1
- package/dist/components/drawer/Drawer.js +11 -9
- package/dist/components/drawer/Drawer.js.map +1 -1
- package/dist/components/select/Select.d.ts +6 -1
- package/dist/components/select/Select.js +110 -92
- package/dist/components/select/Select.js.map +1 -1
- package/dist/components.json +259 -20
- package/dist/icons/index.d.ts +4 -0
- package/dist/icons/index.js +6 -1
- package/dist/icons/index.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +5 -3
- package/dist/llms-full.txt +103 -5
- package/dist/llms.txt +3 -0
- package/dist/opti-ui.css +434 -19
- package/package.json +6 -2
|
@@ -1 +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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"}
|
|
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","export","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","counts","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 export: 'Export',\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 if (filter.type === 'chips') {\n const counts: Record<string, number> = {};\n if (filter.counts !== false) for (const row of data) for (const item of items(row)) counts[item] = (counts[item] ?? 0) + 1;\n return {\n id,\n label,\n type: 'chips',\n options,\n counts: filter.counts === false ? undefined : counts,\n test: (row, value) => items(row).some((item) => (value as string[]).includes(item)),\n };\n }\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,QAAQ;CACRC,MAAM;CACNC,MAAM;CACNC,QAAQ;CACRC,QAAQ;AACV;AAEA,SAAAC,cAAAC,OAAAC,SAAAC,UAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CACE,MAAA,CAAAC,OAAAC,YAA0B9C,MAAK+C,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,YAAYtC,SAASsC,KAAK,GAAG,OAAOtC,SAASsC,KAAK;CACvE,MAAM+B,OAAO/B,iBAAiBgC,OAAOhC,QAAQ,IAAIgC,KAAKhC,KAAwB;CAC9E,IAAIiC,OAAOC,MAAMH,KAAKI,QAAQ,CAAC,GAAG,OAAO;CACzC,OAAO,GAAGxE,IAAIoE,KAAKK,YAAY,GAAG,CAAC,EAAC,GAAIzE,IAAIoE,KAAKM,SAAS,IAAI,CAAC,EAAC,GAAI1E,IAAIoE,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,MAAMhF,cAAcsD,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,IAAIzC,UAAU+E;CACtB,IAAIA,OAAOM,SAAS,UAAU;EAC5B,MAAMC,QAAQP,OAAOO,WAAWhD,QAAWO,KAAKmC,KAAK1C,GAAG,CAAC;EACzD,OAAO;GAAEG;GAAIzC;GAAOqF,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;GACAzC;GACAqF,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;CACA,MAAMb,UACJR,OAAOQ,WACP,CAAC,GAAG,IAAIc,IAAIpB,KAAKqB,QAAQN,KAAK,CAAC,CAAC,CAAC,CAACO,KAAKrB,SAASsB,OAAO,CAAC,CAAC/B,KAAKrD,WAAW;EAAEA;EAAOpB,OAAOoB;CAAM,EAAE;CACnG,IAAI2D,OAAOM,SAAS,SAAS;EAC3B,MAAMoB,SAAiC,CAAC;EACxC,IAAI1B,OAAO0B,WAAW,OAAO,KAAK,MAAMnE,OAAO2C,MAAM,KAAK,MAAMkB,QAAQH,MAAM1D,GAAG,GAAGmE,OAAON,SAASM,OAAON,SAAS,KAAK;EACzH,OAAO;GACL1D;GACAzC;GACAqF,MAAM;GACNE;GACAkB,QAAQ1B,OAAO0B,WAAW,QAAQzE,KAAAA,IAAYyE;GAC9CrC,OAAO9B,KAAKlB,UAAU4E,MAAM1D,GAAG,CAAC,CAACuC,MAAMsB,SAAU/E,MAAmB2B,SAASoD,IAAI,CAAC;EACpF;CACF;CACA,OAAO;EAAE1D;EAAIzC;EAAOqF,MAAM;EAAUE;EAASnB,OAAO9B,KAAKlB,UAAU4E,MAAM1D,GAAG,CAAC,CAACS,SAAS3B,KAAe;CAAE;AAC1G;;;;;;AAOA,SAAOsF,aAAA9E,IAAA;CAAA,MAAAL,IAAAC,EAAA,GAAA;CAAyB,MAAA,EAAAyD,MAAAX,SAAAqC,MAAA5E,IAAA6E,OAAArG,SAAA0B,IAAA4E,OAAAC,SAAAC,UAAAC,QAAAC,YAAAC,IAAAtH,QAAAuH,YAAAC,eAAAC,IAAAC,gBAAAC,gBAAAxC,QAAArE,SAAA8G,aAAAC,cAAAC,kBAAAC,qBAAAC,sBAAArB,MAAAsB,UAAAC,aAAAC,IAAAC,cAAAC,WAAAC,IAAAC,MAAAC,UAAAC,cAAAC,UAAAC,cAAAC,iBAAAC,IAAAC,kBAAAC,WAAAC,eAAAC,mBAAAC,YAAAC,UAAAC,YAAAC,SAAAC,UAAAC,WAAAC,aAAAC,WAAAzH;CAG9B,MAAA+E,OAAA5E,OAAAC,KAAAA,IAAA,WAAAD;CAEA,MAAAxB,UAAA0B,OAAAD,KAAAA,IAAA,QAAAC;CAKA,MAAAgF,aAAAC,OAAAlF,KAAAA,IAAA,OAAAkF;CAEA,MAAAE,gBAAAC,OAAArF,KAAAA,IAAA,KAAAqF;CASA,MAAAS,cAAAC,OAAA/F,KAAAA,IAAA,OAAA+F;CAEA,MAAAE,YAAAC,OAAAlG,KAAAA,IAAA,OAAAkG;CAIA,MAAAM,kBAAAC,OAAAzG,KAAAA,IAAA,KAAAyG;CAaA,MAAA,CAAA7I,QAAA0J,kBAAiCnI,cAAcgG,YAAYC,eAAeE,cAAc;CAAE,IAAAiC;CAAA,IAAAhI,EAAA,OAAAoG,qBAAA;EAClB4B,KAAA5B,uBAAA,CAAwB;EAACpG,EAAA,KAAAoG;EAAApG,EAAA,KAAAgI;CAAA,OAAAA,KAAAhI,EAAA;CAAjG,MAAA,CAAAkG,cAAA+B,mBAAwCrI,cAAcuG,kBAAkB6B,IAA2B3B,oBAAoB;CACvH,MAAA,CAAArB,MAAAkD,WAAwBtI,cAAc0G,UAAUC,aAAaE,YAAY;CACzE,MAAA,CAAAG,MAAAuB,WAAwBvI,cAAciH,UAAU,GAAGC,YAAY;CAC/D,MAAA,CAAAC,UAAAqB,oBAAqCxI,cAAcoH,cAAcC,iBAAiBE,gBAAgB;CAClG,MAAA,CAAA3H,MAAA6I,WAAwBhL,MAAK+C,SAAiE,IAAI;CAClG,MAAA,CAAAkI,QAAAC,aAA4BlL,MAAK+C,SAAU,KAAK;CAEhD,MAAAoI,SAAepD,SAAS;CAAS,IAAAqD;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAxJ;CAAA,IAAAyJ;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAtK;CAAA,IAAAyI;CAAA,IAAA8B;CAAA,IAAA5G;CAAA,IAAAtC,EAAA,OAAA+C,WAAA/C,EAAA,OAAA0D,QAAA1D,EAAA,OAAAwD,UAAAxD,EAAA,OAAAkG,gBAAAlG,EAAA,OAAAiG,eAAAjG,EAAA,OAAAwF,YAAAxF,EAAA,OAAA8H,UAAA9H,EAAA,OAAAyF,UAAAzF,EAAA,QAAA4G,QAAA5G,EAAA,QAAA+G,YAAA/G,EAAA,QAAA0G,aAAA1G,EAAA,QAAA3B,UAAA2B,EAAA,QAAAqH,iBAAArH,EAAA,QAAAwI,UAAAxI,EAAA,QAAAgF,QAAAhF,EAAA,QAAAqF,OAAA;EACjC,MAAA1B,WAAiB,IAAIC,KAAIC,SAAU4B,QAAQ;GAAA0D,SAAW;GAAIC,aAAe;EAAO,CAAC;EACjF,MAAA1K,QAAeoJ,QAAMpJ,SAAWP,cAAaO;EAA4C,IAAA2K;EAAA,IAAArJ,EAAA,QAAAtB,OAAA;GAIxE2K,OAAAC,SAAAC,QAAkBlM,MAAKmM,cAAenM,MAAKoM,UAAW,MAAMH,SAAS,OAAO5K,MAAM6K,GAAG,CAAC;GAACvJ,EAAA,MAAAtB;GAAAsB,EAAA,MAAAqJ;EAAA,OAAAA,MAAArJ,EAAA;EAC5E,MAAA0J,MAAA5B,QAAM/I,sBAAN;EAAqE,IAAA4K;EAAA,IAAA3J,EAAA,QAAA8H,UAAA9H,EAAA,QAAAqJ,OAAArJ,EAAA,QAAA0J,KAAA;GAJ3DC,MAAA;IAAA,GACjCxL;IAAayL,eAEDP;IAAuFQ,0BAC5EH;IAAqE,GAC5F5B;GACL;GAAC9H,EAAA,MAAA8H;GAAA9H,EAAA,MAAAqJ;GAAArJ,EAAA,MAAA0J;GAAA1J,EAAA,MAAA2J;EAAA,OAAAA,MAAA3J,EAAA;EANDsC,OAAsCqH;EAQtCxK,UAAgB,CAAA,GACX4D,QAAOgC,SAASlE,WAAA;GACjB,IAAI,CAACA,OAAM2C,QAAO,OAAS,CAAA;GAC3B,MAAAsG,SAAe,OAAOjJ,OAAM2C,WAAY,WAAzB,EAAAM,MAA4CjD,OAAM2C,OAAwB,IAAZ3C,OAAM2C;GAEnF,MAAA/E,SADY,WAAWqL,SAASA,OAAMrL,QAA1BgC,KAAAA,MACSI,OAAMpC,UAAW,OAAOoC,OAAMmJ,WAAY,WAAWnJ,OAAMmJ,SAAUnJ,OAAMK;GACnB,OACtE,CAACqC,cAAc0G;IADH,GAAKH;IAAM5I,IAAML,OAAMK;IAAGzC;GACvBwL,IAAYlJ,QAASH,eAAeC,QAAQE,GAAG,GAAG2C,MAAMC,QAAQ,CAAC;EAAC,CACzF,GAAC,IACEsC,eAAA,CAAA,EAAA,CAAiB/C,KAAMgH,iBACzB3G,cAAc0G,eAAYE,UAAUpJ,MAAgCkJ,aAAU/I,KAAMwC,MAAMC,QAAQ,CACpG,CAAC;EAEH8E,gBAAsBtJ,QAAOqE,QAAQ4G,QAAA;GAAC,MAAA,EAAAlJ,OAAAkJ;GAAM,OAAKlE,aAAahF,QAAQT,KAAAA;EAAS,CAAA;EAAE,IAAA4J;EAAA,IAAArK,EAAA,QAAAwF,UAAA;GAEpE6E,OAAAC,OAAAC,UAA2B/E,WAAWzE,OAAKwJ,KAAsD,KAA5C1F,OAAQ9D,MAAuBG,MAAxBqJ,KAAqC;GAACvK,EAAA,MAAAwF;GAAAxF,EAAA,MAAAqK;EAAA,OAAAA,MAAArK,EAAA;EAA/G,MAAAwK,OAAaH;EAAmG,IAAAI;EAAA,IAAAzK,EAAA,QAAAwK,MAAA;GAClEC,OAAAC,OAAAC,aAAiB;IAAA5J,KAAEA;IAAGG,IAAMsJ,KAAKzJ,OAAKwJ,OAAK;GAAE;GAAEvK,EAAA,MAAAwK;GAAAxK,EAAA,MAAAyK;EAAA,OAAAA,MAAAzK,EAAA;EAA7F2I,UAAqCjF,KAAIR,IAAKuH,GAA+C;EAC7FxB,OAAWN;EAEX,IAAI,CAACH,UAAUC,cAAa7F,QAC1BqG,OAAOA,KAAIzF,QAAQoH,QAAA;GAAC,MAAA,EAAA7J,KAAA8J,UAAAD;GAAO,OAAKnC,cAAapF,OAAOyH,QAAA;IAAC,MAAA,EAAA5J,IAAA6J,MAAAlI,SAAAiI;IAAY,OAAKjI,KAAK9B,OAAKmF,aAAahF,KAAG;GAAC,CAAA;EAAC,CAAA;EAGpG8H,QAAc3K,OAAMoD,KAAM;EAC1B,IAAI,CAAC+G,UAADQ,OAAgB;GAClB,MAAAgC,gBAAsBjI,QAAOS,OAAQyH,KAAiD;GACtF,MAAAjI,QAAc1F,cAAc0L,KAAK,CAAC,CAAAkC,MAAO,KAAK,CAAC,CAAA1H,OAAQjC,OAAO;GAC9D0H,OAAOA,KAAIzF,QAAQoH,QAAA;IAAC,MAAA,EAAA7J,KAAAoK,UAAAP;IAAO,OAAMpH,SAASA,OAAOzC,OAAK1C,MAAgD,IAAtCyE,aAAakI,eAAejK,OAAKiC,KAAK;GAAC,CAAC;EAApG;EAGN4F,aAAmBwC;EACnB,MAAAC,aAAmBrG,QAAQjC,QAAOuI,MAAMC,cAAeA,UAASrK,OAAQ8D,KAAI9D,EAAG;EAC/E,IAAI,CAACsH,UAADxD,QAAAqG,YAA6B;GAC/B,MAAAG,YAAkBxG,KAAIwG,cAAe,QAAnB,IAAA;GAClBvC,OAAOA,CAAAA,GAAIA,IAAI,CAAC,CAAAjE,MAAMyG,GAAAC,MAAA;IACpB,IAAIL,WAAUpG,SAAQ,OAASuG,YAAYH,WAAUpG,QAASwG,EAAC1K,KAAM2K,EAAC3K,GAAI;IAC1E,MAAA,CAAA4K,IAAAC,MAAiB,CAAChL,eAAeyK,YAAYI,EAAC1K,GAAI,GAAGH,eAAeyK,YAAYK,EAAC3K,GAAI,CAAC;IACtF,IAAII,QAAQwK,EAAiB,KAAVxK,QAAQyK,EAAE,GAAC,OAAS9J,OAAOX,QAAQwK,EAAE,CAAC,IAAI7J,OAAOX,QAAQyK,EAAE,CAAC;IAC/E,IAAI,OAAOD,OAAO,YAAY,OAAOC,OAAO,UAAQ,OAASJ,aAAaG,KAAKC;IAC/E,IAAID,cAAc9J,QAAQ+J,cAAc/J,MAAI,OAAS2J,aAAaG,GAAE3J,QAAS,IAAI4J,GAAE5J,QAAS;IAC5F,IAAI,OAAO2J,OAAO,aAAa,OAAOC,OAAO,WAAS,OAASJ,aAAa1J,OAAO6J,EAAE,IAAI7J,OAAO8J,EAAE;IAAG,OAC9FJ,YAAY7H,SAAQsB,QAASJ,OAAO8G,EAAE,GAAG9G,OAAO+G,EAAE,CAAC;GAAC,CAC5D;EARG;EAWN/C,aAAmBL,SAAUnD,SAAS4D,KAAIrG,SAAWqG,KAAIrG;EACzDkG,YAAkB+C,KAAIzH,IAAK,GAAGyH,KAAIC,KAAMjD,aAAa9B,QAAQ,CAAC;EAC9D2B,cAAoBmD,KAAI1H,IAAK0H,KAAIzH,IAAK,GAAGwC,IAAI,GAAGkC,SAAS;EACzDC,WAAiBrC,aAAA,CAAc8B,SAASS,KAAI8C,OAAQrD,cAAc,KAAK3B,UAAU2B,cAAc3B,QAAe,IAA7FkC;EAA+F,IAAA2B;EAAA,IAAA5K,EAAA,QAAAqH,eAAA;GAE9FuD,MAAAvD,iBAAA,CAAA;GAAmBrH,EAAA,MAAAqH;GAAArH,EAAA,MAAA4K;EAAA,OAAAA,MAAA5K,EAAA;EAArCoH,YAAkBwD;EAAoB,IAAAE;EAAA,IAAA9K,EAAA,QAAAoH,WAAA;GACrB0D,MAAA,IAAIhG,IAAIsC,SAAS;GAACpH,EAAA,MAAAoH;GAAApH,EAAA,MAAA8K;EAAA,OAAAA,MAAA9K,EAAA;EAAnCrB,WAAiBmM;EAAmB,IAAAkB;EAAA,IAAAhM,EAAA,QAAArB,UAAA;GACDqN,OAAAC,QAAA;IAAC,MAAA,EAAA/K,IAAAgL,SAAAD;IAAM,OAAKtN,SAAQwN,IAAKjL,IAAE;GAAC;GAAAlB,EAAA,MAAArB;GAAAqB,EAAA,MAAAgM;EAAA,OAAAA,MAAAhM,EAAA;EAAxCkJ,KAAAD,KAAIzF,OAAQwI,GAA4B;EAAChM,EAAA,KAAA+C;EAAA/C,EAAA,KAAA0D;EAAA1D,EAAA,KAAAwD;EAAAxD,EAAA,KAAAkG;EAAAlG,EAAA,KAAAiG;EAAAjG,EAAA,KAAAwF;EAAAxF,EAAA,KAAA8H;EAAA9H,EAAA,KAAAyF;EAAAzF,EAAA,MAAA4G;EAAA5G,EAAA,MAAA+G;EAAA/G,EAAA,MAAA0G;EAAA1G,EAAA,MAAA3B;EAAA2B,EAAA,MAAAqH;EAAArH,EAAA,MAAAwI;EAAAxI,EAAA,MAAAgF;EAAAhF,EAAA,MAAAqF;EAAArF,EAAA,MAAAyI;EAAAzI,EAAA,MAAA0I;EAAA1I,EAAA,MAAA2I;EAAA3I,EAAA,MAAAb;EAAAa,EAAA,MAAA4I;EAAA5I,EAAA,MAAA6I;EAAA7I,EAAA,MAAA8I;EAAA9I,EAAA,MAAA+I;EAAA/I,EAAA,MAAAgJ;EAAAhJ,EAAA,MAAAiJ;EAAAjJ,EAAA,MAAArB;EAAAqB,EAAA,MAAAoH;EAAApH,EAAA,MAAAkJ;EAAAlJ,EAAA,MAAAsC;CAAA,OAAA;EAAAmG,gBAAAzI,EAAA;EAAA0I,cAAA1I,EAAA;EAAA2I,UAAA3I,EAAA;EAAAb,UAAAa,EAAA;EAAA4I,aAAA5I,EAAA;EAAA6I,aAAA7I,EAAA;EAAA8I,YAAA9I,EAAA;EAAA+I,WAAA/I,EAAA;EAAAgJ,QAAAhJ,EAAA;EAAAiJ,OAAAjJ,EAAA;EAAArB,WAAAqB,EAAA;EAAAoH,YAAApH,EAAA;EAAAkJ,KAAAlJ,EAAA;EAAAsC,OAAAtC,EAAA;CAAA;CAAhE,MAAAoM,iBAAuBlD,GAAyCtG;CAChE,MAAAyJ,cAAoBpD,KAAIrG,SAAU,KAAKwJ,mBAAmBnD,KAAIrG;CAAQ,IAAAyG;CAAA,IAAArJ,EAAA,QAAAmI,WAAAnI,EAAA,QAAA+H,gBAAA;EAEpDsB,OAAA/I,SAAA;GAChByH,eAAezH,IAAI;GACnB6H,QAAQ,CAAC;EAAC;EACXnI,EAAA,MAAAmI;EAAAnI,EAAA,MAAA+H;EAAA/H,EAAA,MAAAqJ;CAAA,OAAAA,MAAArJ,EAAA;CAHD,MAAAsM,YAAkBjD;CAGhB,IAAAK;CAAA,IAAA1J,EAAA,QAAAiI,mBAAAjI,EAAA,QAAAmI,SAAA;EAEoBuB,OAAA6C,WAAA;GACpBtE,gBAAgB3H,MAAI;GACpB6H,QAAQ,CAAC;EAAC;EACXnI,EAAA,MAAAiI;EAAAjI,EAAA,MAAAmI;EAAAnI,EAAA,MAAA0J;CAAA,OAAAA,MAAA1J,EAAA;CAHD,MAAAwM,gBAAsB9C;CAGpB,IAAAC;CAAA,IAAA3J,EAAA,QAAAwM,iBAAAxM,EAAA,QAAAkG,cAAA;EAEqByD,OAAA8C,MAAA5M,UAAA;GACrB,MAAA6M,SAAeC,OAAMhE,QAASzC,YAAY,CAAC,CAAA1C,QAAQ4G,QAAA;IAAC,MAAA,CAAAwC,OAAAxC;IAAK,OAAKwC,QAAQ1L;GAAE,CAAA;GACxEsL,cAAcG,OAAME,YAAahN,UAAUY,KAAAA,IAAViM,SAAA,CAAA,GAAmCA,QAAQ,CAACxL,MAAIrB,KAAK,CAAC,CAAC,CAAC;EAAC;EAC3FG,EAAA,MAAAwM;EAAAxM,EAAA,MAAAkG;EAAAlG,EAAA,MAAA2J;CAAA,OAAAA,MAAA3J,EAAA;CAHD,MAAA8M,iBAAuBnD;CAGrB,IAAAS;CAAA,IAAApK,EAAA,QAAAR,QAAAQ,EAAA,QAAA2I,WAAA3I,EAAA,QAAA4H,aAAA5H,EAAA,QAAAsI,QAAA;EAEe8B,YAAA;GACf,MAAA2C,QAAcvN,QAAQmJ,QAAO2C,MAAMjB,QAAA;IAAC,MAAA,EAAAnJ,IAAA8L,SAAA3C;IAAM,OAAKnJ,SAAO1B,KAAI0B;GAAG,CAAA;GAC7D,IAAI,CAAC6L,SAAD,CAAWnF,aAAXU,QAA8B;GAClCC,UAAU,IAAI;GAEd0E,QAAOC,QAAS,CAAC,CAAAC,WACHvF,UAAU;IAAA,GAAKmF,MAAKhM;IAAI,GAAKvB,KAAI4N;GAAO,GAAGL,MAAKhM,GAAI,CAAC,CAAC,CAAAoM,WAE1D9E,QAAQ,IAAI,GAClBgF,MACF,CAAC,CAAAF,WACW5E,UAAU,KAAK,CAAC;EAAC;EAChCvI,EAAA,MAAAR;EAAAQ,EAAA,MAAA2I;EAAA3I,EAAA,MAAA4H;EAAA5H,EAAA,MAAAsI;EAAAtI,EAAA,MAAAoK;CAAA,OAAAA,MAAApK,EAAA;CAZD,MAAAsN,WAAiBlD;CAYf,IAAAC;CAAA,IAAArK,EAAA,QAAA+C,SAAA;EAKgBsH,MAAAtH,QAAOS,OAAQ+J,MAA0B;EAACvN,EAAA,MAAA+C;EAAA/C,EAAA,MAAAqK;CAAA,OAAAA,MAAArK,EAAA;CAK1DiJ,MAAAA,MAAAA;CAGY,MAAA2B,MAAApC,SAAAK,aAAsBnF,KAAId;CAC5B,MAAAkI,MAAAvJ,QAAQyH,KAAiC,KAAvBP,cAAa7F,SAAU;CAAC,IAAAoJ;CAAA,IAAAhM,EAAA,QAAAwM,iBAAAxM,EAAA,QAAA+H,gBAAA;EAC7CiE,YAAA;GACLjE,eAAe,EAAE;GACjByE,cAAc,CAAC,CAAC;EAAC;EAClBxM,EAAA,MAAAwM;EAAAxM,EAAA,MAAA+H;EAAA/H,EAAA,MAAAgM;CAAA,OAAAA,MAAAhM,EAAA;CAGQ,MAAAiM,MAAAjN,WAAA,CAAYiK,KAAIrG,UAAhB,CAA4B0C;CAOrB,MAAAkI,MAAAxH,mBAAmBwC,SAAA,MAAA;CAAiB,IAAAiF;CAAA,IAAAzN,EAAA,QAAAwM,eAAA;EAKtCiB,YAAMjB,cAAc,CAAC,CAAC;EAACxM,EAAA,MAAAwM;EAAAxM,EAAA,MAAAyN;CAAA,OAAAA,MAAAzN,EAAA;CAClB,MAAA0N,MAAAjF,cAAa7F;CAAO,IAAA+K;CAAA,IAAA3N,EAAA,QAAAkI,WAAAlI,EAAA,QAAAgF,MAAA;EAI3B2I,OAAAC,SACV1F,QAAQlD,MAAI9D,OAASA,OAAb;GAAAA,IAAoBA;GAAEsK,WAAa;EAAoE,IAA1DxG,KAAIwG,cAAe,QAAnB;GAAAtK,IAA6BA;GAAEsK,WAAa;EAAc,IAA1D,IAA2D;EAACxL,EAAA,MAAAkI;EAAAlI,EAAA,MAAAgF;EAAAhF,EAAA,MAAA2N;CAAA,OAAAA,MAAA3N,EAAA;CAAA,IAAA6N;CAAA,IAAA7N,EAAA,QAAAmI,WAAAnI,EAAA,QAAAoI,kBAAA;EAQtGyF,OAAAC,SAAA;GACX1F,iBAAiB0F,IAAI;GACrB3F,QAAQ,CAAC;EAAC;EACXnI,EAAA,MAAAmI;EAAAnI,EAAA,MAAAoI;EAAApI,EAAA,MAAA6N;CAAA,OAAAA,MAAA7N,EAAA;CAEW,MAAA+N,MAAAxM,QAAQ+F,iBAAiB;CAAC,IAAA0G;CAAA,IAAAhO,EAAA,QAAArB,UAAA;EAE1BqP,OAAAC,SAAQtP,SAAQwN,IAAKjL,IAAE;EAAClB,EAAA,MAAArB;EAAAqB,EAAA,MAAAgO;CAAA,OAAAA,MAAAhO,EAAA;CAAA,IAAAkO;CAAA,IAAAlO,EAAA,QAAAsH,qBAAAtH,EAAA,QAAAoH,WAAA;EACzB8G,OAAAC,MAAAC,YACT9G,oBAAoB8G,UAAA,CAAA,GAAchH,UAAS5D,QAAQoB,SAAUA,SAAS1D,IAAE,GAAGA,IAAE,IAAIkG,UAAS5D,QAAQ6K,WAAUzJ,WAAS1D,IAAE,CAAC;EAAClB,EAAA,MAAAsH;EAAAtH,EAAA,MAAAoH;EAAApH,EAAA,MAAAkO;CAAA,OAAAA,MAAAlO,EAAA;CAAA,IAAAsO;CAAA,IAAAtO,EAAA,QAAAsH,qBAAAtH,EAAA,QAAAiJ,QAAAjJ,EAAA,QAAAoH,WAAA;EAChHkH,OAAAC,cAAA;GACT,MAAAC,MAAY,IAAI1J,IAAImE,KAAI/F,IAAKuL,MAAc,CAAC;GAC5C,MAAAC,OAAatH,UAAS5D,QAAQmL,SAAQ,CAACH,IAAGrC,IAAKjL,IAAE,CAAC;GAClDoG,oBAAoB8G,YAAA,CAAA,GAAcM,MAAI,GAAKF,GAAG,IAA1BE,IAAkC;EAAC;EACxD1O,EAAA,MAAAsH;EAAAtH,EAAA,MAAAiJ;EAAAjJ,EAAA,MAAAoH;EAAApH,EAAA,MAAAsO;CAAA,OAAAA,MAAAtO,EAAA;CAEa,MAAA4O,MAAAxC,iBAAiB,KAAjB,CAAuBC;CAE3B,MAAAwC,MAAAtN,QAAQqG,SAAS;CAChB,MAAAkH,MAAAvN,QAAQsG,WAAW;CACnB,MAAAkH,MAAAvP,MAAI0B,MAAJ;CAAgB,IAAA8N;CAAA,IAAAC;CAAA,IAAAjP,EAAA,QAAAkP,OAAAC,IAAA,2BAAA,GAAA;EAEhBH,OAAAI,SAAQ/G,QAAQ;GAAAnH,IAAEA;GAAEkM,OAAS,CAAC;EAAE,CAAC;EAChC6B,YAAM5G,QAAQ,IAAI;EAACrI,EAAA,MAAAgP;EAAAhP,EAAA,MAAAiP;CAAA,OAAA;EAAAD,MAAAhP,EAAA;EAAAiP,MAAAjP,EAAA;CAAA;CAAA,IAAAqP;CAAA,IAAArP,EAAA,QAAAR,MAAA;EACpB6P,OAAAC,OAAAC,UAAiB/P,QAAQ+P,SAAS/P,KAAI4N,QAAS5N,KAAI4N,MAAOmC,SAAUxO,MAAgCwO;EAAOvP,EAAA,MAAAR;EAAAQ,EAAA,MAAAqP;CAAA,OAAAA,MAAArP,EAAA;CAAA,IAAAwP;CAAA,IAAAxP,EAAA,QAAAkP,OAAAC,IAAA,2BAAA,GAAA;EACxGK,OAAAC,SAAAC,YAAkBrH,SAAQsH,YAAaA,WAAA;GAAA,GAAgBA;GAAOvC,OAAS;IAAA,GAAKuC,QAAOvC;KAASmC,UAAQ1P;GAAM;EAAE,CAAC;EAACG,EAAA,MAAAwP;CAAA,OAAAA,MAAAxP,EAAA;CAAA,IAAA4P;CAAA,IAAA5P,EAAA,QAAA6H,aAAA;EAEjH+H,OAAAC,UAAA;GACThI,cAAc9G,KAAG;GACjBsH,QAAQ,IAAI;EAAC;EACdrI,EAAA,MAAA6H;EAAA7H,EAAA,MAAA4P;CAAA,OAAAA,MAAA5P,EAAA;CAAA,IAAA8P;CAAA,IAAA9P,EAAA,QAAAyI,cAAA7F,UAAA5C,EAAA,QAAAqM,eAAArM,EAAA,QAAA+C,WAAA/C,EAAA,QAAA0I,eAAA1I,EAAA,QAAA2I,WAAA3I,EAAA,QAAAsF,SAAAtF,EAAA,QAAAkG,gBAAAlG,EAAA,QAAAb,WAAAa,EAAA,QAAA4I,cAAA5I,EAAA,SAAAhB,WAAAgB,EAAA,SAAAyF,UAAAzF,EAAA,SAAA6I,cAAA7I,EAAA,SAAAoF,QAAApF,EAAA,SAAAuF,WAAAvF,EAAA,SAAAuH,cAAAvH,EAAA,SAAA8I,aAAA9I,EAAA,SAAA+I,YAAA/I,EAAA,SAAA+G,YAAA/G,EAAA,SAAA0G,aAAA1G,EAAA,SAAAyH,cAAAzH,EAAA,SAAAwH,YAAAxH,EAAA,SAAA2H,YAAA3H,EAAA,SAAA0H,WAAA1H,EAAA,SAAAiJ,QAAAjJ,EAAA,SAAAsN,YAAAtN,EAAA,SAAAsI,UAAAtI,EAAA,SAAA3B,UAAA2B,EAAA,SAAA0F,cAAA1F,EAAA,SAAAoH,aAAApH,EAAA,SAAA8M,kBAAA9M,EAAA,SAAAmI,WAAAnI,EAAA,SAAAsM,aAAAtM,EAAA,SAAAkI,WAAAlI,EAAA,SAAAgF,QAAAhF,EAAA,SAAAqK,OAAArK,EAAA,SAAA4K,OAAA5K,EAAA,SAAA8K,OAAA9K,EAAA,SAAAgM,OAAAhM,EAAA,SAAAiM,OAAAjM,EAAA,SAAAwN,OAAAxN,EAAA,SAAAyN,OAAAzN,EAAA,SAAA2N,OAAA3N,EAAA,SAAA6N,OAAA7N,EAAA,SAAA+N,OAAA/N,EAAA,SAAAgO,OAAAhO,EAAA,SAAAkO,OAAAlO,EAAA,SAAAsO,OAAAtO,EAAA,SAAA4O,OAAA5O,EAAA,SAAA6O,OAAA7O,EAAA,SAAA8O,OAAA9O,EAAA,SAAA+O,OAAA/O,EAAA,SAAAqP,OAAArP,EAAA,SAAA4P,OAAA5P,EAAA,SAAAsC,MAAA;EA3EIwN,MAAA;GAAA1K;GAAArC;GAAAgN,gBAGW1F;GAA0CvC,QAClDxF;GAAImD;GAAAuK,SAGHrH;GAAOM,MAChBA;GAAIF;GAAArK,OAEGmK;GAAUoH,YACLrF;GAAiCsF,UACnCpF;GAA0CqF,OAC7CnE;GAGNhN;GAAAoR,SAGQnE;GAAiC3G;GAAAC;GAAAG;GAAArH;GAAAiO;GAAAtG,gBAO1BwH;GAAoCrO;GAAA+G;GAAA4G;GAAAzN,cAKtCoO;GAAuB4C,mBAClB3C;GAAoB1I;GAAAkD;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;EAAC3H,EAAA,MAAAyI,cAAA7F;EAAA5C,EAAA,MAAAqM;EAAArM,EAAA,MAAA+C;EAAA/C,EAAA,MAAA0I;EAAA1I,EAAA,MAAA2I;EAAA3I,EAAA,MAAAsF;EAAAtF,EAAA,MAAAkG;EAAAlG,EAAA,MAAAb;EAAAa,EAAA,MAAA4I;EAAA5I,EAAA,OAAAhB;EAAAgB,EAAA,OAAAyF;EAAAzF,EAAA,OAAA6I;EAAA7I,EAAA,OAAAoF;EAAApF,EAAA,OAAAuF;EAAAvF,EAAA,OAAAuH;EAAAvH,EAAA,OAAA8I;EAAA9I,EAAA,OAAA+I;EAAA/I,EAAA,OAAA+G;EAAA/G,EAAA,OAAA0G;EAAA1G,EAAA,OAAAyH;EAAAzH,EAAA,OAAAwH;EAAAxH,EAAA,OAAA2H;EAAA3H,EAAA,OAAA0H;EAAA1H,EAAA,OAAAiJ;EAAAjJ,EAAA,OAAAsN;EAAAtN,EAAA,OAAAsI;EAAAtI,EAAA,OAAA3B;EAAA2B,EAAA,OAAA0F;EAAA1F,EAAA,OAAAoH;EAAApH,EAAA,OAAA8M;EAAA9M,EAAA,OAAAmI;EAAAnI,EAAA,OAAAsM;EAAAtM,EAAA,OAAAkI;EAAAlI,EAAA,OAAAgF;EAAAhF,EAAA,OAAAqK;EAAArK,EAAA,OAAA4K;EAAA5K,EAAA,OAAA8K;EAAA9K,EAAA,OAAAgM;EAAAhM,EAAA,OAAAiM;EAAAjM,EAAA,OAAAwN;EAAAxN,EAAA,OAAAyN;EAAAzN,EAAA,OAAA2N;EAAA3N,EAAA,OAAA6N;EAAA7N,EAAA,OAAA+N;EAAA/N,EAAA,OAAAgO;EAAAhO,EAAA,OAAAkO;EAAAlO,EAAA,OAAAsO;EAAAtO,EAAA,OAAA4O;EAAA5O,EAAA,OAAA6O;EAAA7O,EAAA,OAAA8O;EAAA9O,EAAA,OAAA+O;EAAA/O,EAAA,OAAAqP;EAAArP,EAAA,OAAA4P;EAAA5P,EAAA,OAAAsC;EAAAtC,EAAA,OAAA8P;CAAA,OAAAA,MAAA9P,EAAA;CAAA,OAlFM8P;AAkFN;AAjOI,SAAArB,OAAApO,IAAA;CAuM6B,MAAA,EAAAa,IAAAmQ,SAAAhR;CAAM,OAAKa;AAAE;AAvM1C,SAAAqM,OAAA+D,UAAA;CAAA,OAkJwC,CAACzQ,SAAM0Q;AAAO;AAlJtD,SAAAlE,SAAA,CAAA;AAAA,SAAAjC,OAAAoG,UAAA;CAAA,OAyF8C3Q,SAAM4Q,YAAarQ,SAASP,QAAM;AAAC;AAzFjF,SAAAoK,MAAAyG,UAAA;CAAA,OAoF8C7Q,SAAM6E,cAAetE,SAASP,QAAM;AAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
/** `rows`: label and value side by side, one pair per line. `grid`: pairs flow into columns, label above value. */
|
|
3
|
+
export type DescriptionListLayout = 'rows' | 'grid';
|
|
4
|
+
export interface DescriptionListProps extends React.HTMLAttributes<HTMLDListElement> {
|
|
5
|
+
/** Ref to the `<dl>` element. */
|
|
6
|
+
ref?: React.Ref<HTMLDListElement>;
|
|
7
|
+
/** How the label and value pairs are laid out. */
|
|
8
|
+
layout?: DescriptionListLayout;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Label and value pairs, such as a record's details. Holds `DescriptionItem`s.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* <DescriptionList>
|
|
15
|
+
* <DescriptionItem label="Plate">ABC-123</DescriptionItem>
|
|
16
|
+
* <DescriptionItem label="Depot">North</DescriptionItem>
|
|
17
|
+
* </DescriptionList>
|
|
18
|
+
*/
|
|
19
|
+
export declare function DescriptionList({ layout, className, ref, ...props }: DescriptionListProps): React.JSX.Element;
|
|
20
|
+
export interface DescriptionItemProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {
|
|
21
|
+
/** Ref to the item's wrapper. */
|
|
22
|
+
ref?: React.Ref<HTMLDivElement>;
|
|
23
|
+
/** The term, e.g. "Plate". */
|
|
24
|
+
label: React.ReactNode;
|
|
25
|
+
/** The value. Line breaks in text are kept. */
|
|
26
|
+
children?: React.ReactNode;
|
|
27
|
+
}
|
|
28
|
+
/** One label and value pair inside a `DescriptionList`. */
|
|
29
|
+
export declare function DescriptionItem({ label, children, className, ref, ...props }: DescriptionItemProps): React.JSX.Element;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cx } from "../../utils/cx.js";
|
|
3
|
+
import { c } from "react/compiler-runtime";
|
|
4
|
+
import "react";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
//#region src/components/description-list/DescriptionList.tsx
|
|
7
|
+
/**
|
|
8
|
+
* Label and value pairs, such as a record's details. Holds `DescriptionItem`s.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* <DescriptionList>
|
|
12
|
+
* <DescriptionItem label="Plate">ABC-123</DescriptionItem>
|
|
13
|
+
* <DescriptionItem label="Depot">North</DescriptionItem>
|
|
14
|
+
* </DescriptionList>
|
|
15
|
+
*/
|
|
16
|
+
function DescriptionList(t0) {
|
|
17
|
+
const $ = c(12);
|
|
18
|
+
let className;
|
|
19
|
+
let props;
|
|
20
|
+
let ref;
|
|
21
|
+
let t1;
|
|
22
|
+
if ($[0] !== t0) {
|
|
23
|
+
({layout: t1, className, ref, ...props} = t0);
|
|
24
|
+
$[0] = t0;
|
|
25
|
+
$[1] = className;
|
|
26
|
+
$[2] = props;
|
|
27
|
+
$[3] = ref;
|
|
28
|
+
$[4] = t1;
|
|
29
|
+
} else {
|
|
30
|
+
className = $[1];
|
|
31
|
+
props = $[2];
|
|
32
|
+
ref = $[3];
|
|
33
|
+
t1 = $[4];
|
|
34
|
+
}
|
|
35
|
+
const layout = t1 === void 0 ? "rows" : t1;
|
|
36
|
+
let t2;
|
|
37
|
+
if ($[5] !== className) {
|
|
38
|
+
t2 = cx("oui-description-list", className);
|
|
39
|
+
$[5] = className;
|
|
40
|
+
$[6] = t2;
|
|
41
|
+
} else t2 = $[6];
|
|
42
|
+
let t3;
|
|
43
|
+
if ($[7] !== layout || $[8] !== props || $[9] !== ref || $[10] !== t2) {
|
|
44
|
+
t3 = /* @__PURE__ */ jsx("dl", {
|
|
45
|
+
ref,
|
|
46
|
+
className: t2,
|
|
47
|
+
"data-layout": layout,
|
|
48
|
+
...props
|
|
49
|
+
});
|
|
50
|
+
$[7] = layout;
|
|
51
|
+
$[8] = props;
|
|
52
|
+
$[9] = ref;
|
|
53
|
+
$[10] = t2;
|
|
54
|
+
$[11] = t3;
|
|
55
|
+
} else t3 = $[11];
|
|
56
|
+
return t3;
|
|
57
|
+
}
|
|
58
|
+
/** One label and value pair inside a `DescriptionList`. */
|
|
59
|
+
function DescriptionItem(t0) {
|
|
60
|
+
const $ = c(18);
|
|
61
|
+
let children;
|
|
62
|
+
let className;
|
|
63
|
+
let label;
|
|
64
|
+
let props;
|
|
65
|
+
let ref;
|
|
66
|
+
if ($[0] !== t0) {
|
|
67
|
+
({label, children, className, ref, ...props} = t0);
|
|
68
|
+
$[0] = t0;
|
|
69
|
+
$[1] = children;
|
|
70
|
+
$[2] = className;
|
|
71
|
+
$[3] = label;
|
|
72
|
+
$[4] = props;
|
|
73
|
+
$[5] = ref;
|
|
74
|
+
} else {
|
|
75
|
+
children = $[1];
|
|
76
|
+
className = $[2];
|
|
77
|
+
label = $[3];
|
|
78
|
+
props = $[4];
|
|
79
|
+
ref = $[5];
|
|
80
|
+
}
|
|
81
|
+
let t1;
|
|
82
|
+
if ($[6] !== className) {
|
|
83
|
+
t1 = cx("oui-description-list__item", className);
|
|
84
|
+
$[6] = className;
|
|
85
|
+
$[7] = t1;
|
|
86
|
+
} else t1 = $[7];
|
|
87
|
+
let t2;
|
|
88
|
+
if ($[8] !== label) {
|
|
89
|
+
t2 = /* @__PURE__ */ jsx("dt", {
|
|
90
|
+
className: "oui-description-list__label",
|
|
91
|
+
children: label
|
|
92
|
+
});
|
|
93
|
+
$[8] = label;
|
|
94
|
+
$[9] = t2;
|
|
95
|
+
} else t2 = $[9];
|
|
96
|
+
let t3;
|
|
97
|
+
if ($[10] !== children) {
|
|
98
|
+
t3 = /* @__PURE__ */ jsx("dd", {
|
|
99
|
+
className: "oui-description-list__value",
|
|
100
|
+
children
|
|
101
|
+
});
|
|
102
|
+
$[10] = children;
|
|
103
|
+
$[11] = t3;
|
|
104
|
+
} else t3 = $[11];
|
|
105
|
+
let t4;
|
|
106
|
+
if ($[12] !== props || $[13] !== ref || $[14] !== t1 || $[15] !== t2 || $[16] !== t3) {
|
|
107
|
+
t4 = /* @__PURE__ */ jsxs("div", {
|
|
108
|
+
ref,
|
|
109
|
+
className: t1,
|
|
110
|
+
...props,
|
|
111
|
+
children: [t2, t3]
|
|
112
|
+
});
|
|
113
|
+
$[12] = props;
|
|
114
|
+
$[13] = ref;
|
|
115
|
+
$[14] = t1;
|
|
116
|
+
$[15] = t2;
|
|
117
|
+
$[16] = t3;
|
|
118
|
+
$[17] = t4;
|
|
119
|
+
} else t4 = $[17];
|
|
120
|
+
return t4;
|
|
121
|
+
}
|
|
122
|
+
//#endregion
|
|
123
|
+
export { DescriptionItem, DescriptionList };
|
|
124
|
+
|
|
125
|
+
//# sourceMappingURL=DescriptionList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DescriptionList.js","names":["React","cx","DescriptionListLayout","DescriptionListProps","HTMLAttributes","HTMLDListElement","ref","Ref","layout","DescriptionList","t0","$","_c","className","props","t1","undefined","t2","t3","DescriptionItemProps","Omit","HTMLDivElement","label","ReactNode","children","DescriptionItem","t4","_c"],"sources":["../../../src/components/description-list/DescriptionList.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cx } from '../../utils/cx';\n\n/** `rows`: label and value side by side, one pair per line. `grid`: pairs flow into columns, label above value. */\nexport type DescriptionListLayout = 'rows' | 'grid';\n\nexport interface DescriptionListProps extends React.HTMLAttributes<HTMLDListElement> {\n /** Ref to the `<dl>` element. */\n ref?: React.Ref<HTMLDListElement>;\n /** How the label and value pairs are laid out. */\n layout?: DescriptionListLayout;\n}\n\n/**\n * Label and value pairs, such as a record's details. Holds `DescriptionItem`s.\n *\n * @example\n * <DescriptionList>\n * <DescriptionItem label=\"Plate\">ABC-123</DescriptionItem>\n * <DescriptionItem label=\"Depot\">North</DescriptionItem>\n * </DescriptionList>\n */\nexport function DescriptionList({ layout = 'rows', className, ref, ...props }: DescriptionListProps) {\n return <dl ref={ref} className={cx('oui-description-list', className)} data-layout={layout} {...props} />;\n}\n\nexport interface DescriptionItemProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Ref to the item's wrapper. */\n ref?: React.Ref<HTMLDivElement>;\n /** The term, e.g. \"Plate\". */\n label: React.ReactNode;\n /** The value. Line breaks in text are kept. */\n children?: React.ReactNode;\n}\n\n/** One label and value pair inside a `DescriptionList`. */\nexport function DescriptionItem({ label, children, className, ref, ...props }: DescriptionItemProps) {\n return (\n <div ref={ref} className={cx('oui-description-list__item', className)} {...props}>\n <dt className=\"oui-description-list__label\">{label}</dt>\n <dd className=\"oui-description-list__value\">{children}</dd>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AAsBA,SAAOS,gBAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAR;CAAA,IAAAS;CAAA,IAAAJ,EAAA,OAAAD,IAAA;EAAyB,CAAA,CAAAF,QAAAO,IAAAF,WAAAP,KAAA,GAAAQ,SAAAJ;EAAmEC,EAAA,KAAAD;EAAAC,EAAA,KAAAE;EAAAF,EAAA,KAAAG;EAAAH,EAAA,KAAAL;EAAAK,EAAA,KAAAI;CAAA,OAAA;EAAAF,YAAAF,EAAA;EAAAG,QAAAH,EAAA;EAAAL,MAAAK,EAAA;EAAAI,KAAAJ,EAAA;CAAA;CAAjE,MAAAH,SAAAO,OAAAC,KAAAA,IAAA,SAAAD;CAAe,IAAAE;CAAA,IAAAN,EAAA,OAAAE,WAAA;EACfI,KAAAhB,GAAG,wBAAwBY,SAAS;EAACF,EAAA,KAAAE;EAAAF,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CAAA,IAAAO;CAAA,IAAAP,EAAA,OAAAH,UAAAG,EAAA,OAAAG,SAAAH,EAAA,OAAAL,OAAAK,EAAA,QAAAM,IAAA;EAA9DC,KAAA,oBAAA,MAAA;GAASZ;GAAgB,WAAAW;GAAoDT,eAAAA;GAAM,GAAMM;EAAK,CAAA;EAAIH,EAAA,KAAAH;EAAAG,EAAA,KAAAG;EAAAH,EAAA,KAAAL;EAAAK,EAAA,MAAAM;EAAAN,EAAA,MAAAO;CAAA,OAAAA,KAAAP,EAAA;CAAA,OAAlGO;AAAkG;;AAa3G,SAAOO,gBAAAf,IAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAA,IAAAY;CAAA,IAAAX;CAAA,IAAAS;CAAA,IAAAR;CAAA,IAAAR;CAAA,IAAAK,EAAA,OAAAD,IAAA;EAAyB,CAAA,CAAAY,OAAAE,UAAAX,WAAAP,KAAA,GAAAQ,SAAAJ;EAAmEC,EAAA,KAAAD;EAAAC,EAAA,KAAAa;EAAAb,EAAA,KAAAE;EAAAF,EAAA,KAAAW;EAAAX,EAAA,KAAAG;EAAAH,EAAA,KAAAL;CAAA,OAAA;EAAAkB,WAAAb,EAAA;EAAAE,YAAAF,EAAA;EAAAW,QAAAX,EAAA;EAAAG,QAAAH,EAAA;EAAAL,MAAAK,EAAA;CAAA;CAAA,IAAAI;CAAA,IAAAJ,EAAA,OAAAE,WAAA;EAErEE,KAAAd,GAAG,8BAA8BY,SAAS;EAACF,EAAA,KAAAE;EAAAF,EAAA,KAAAI;CAAA,OAAAA,KAAAJ,EAAA;CAAA,IAAAM;CAAA,IAAAN,EAAA,OAAAW,OAAA;EACnEL,KAAA,oBAAA,MAAA;GAAc,WAAA;GAA+BK,UAAAA;EAAW,CAAA;EAAAX,EAAA,KAAAW;EAAAX,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CAAA,IAAAO;CAAA,IAAAP,EAAA,QAAAa,UAAA;EACxDN,KAAA,oBAAA,MAAA;GAAc,WAAA;GAA+BM;EAAc,CAAA;EAAAb,EAAA,MAAAa;EAAAb,EAAA,MAAAO;CAAA,OAAAA,KAAAP,EAAA;CAAA,IAAAe;CAAA,IAAAf,EAAA,QAAAG,SAAAH,EAAA,QAAAL,OAAAK,EAAA,QAAAI,MAAAJ,EAAA,QAAAM,MAAAN,EAAA,QAAAO,IAAA;EAF7DQ,KAAA,qBAAA,OAAA;GAAUpB;GAAgB,WAAAS;GAA2C,GAAMD;GAA3E,UAAA,CACEG,IACAC,EACI;;EAAAP,EAAA,MAAAG;EAAAH,EAAA,MAAAL;EAAAK,EAAA,MAAAI;EAAAJ,EAAA,MAAAM;EAAAN,EAAA,MAAAO;EAAAP,EAAA,MAAAe;CAAA,OAAAA,KAAAf,EAAA;CAAA,OAHNe;AAGM"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { type DialogBackdropBlur } from './Dialog';
|
|
3
|
+
export interface ConfirmDialogProps {
|
|
4
|
+
/** Ref to the dialog popup. */
|
|
5
|
+
ref?: React.Ref<HTMLDivElement>;
|
|
6
|
+
/** Whether the dialog is open (controlled). */
|
|
7
|
+
open?: boolean;
|
|
8
|
+
/** Initial state when uncontrolled. */
|
|
9
|
+
defaultOpen?: boolean;
|
|
10
|
+
/** Called when the dialog opens or closes. Not called to close while `pending`. */
|
|
11
|
+
onOpenChange?: (open: boolean) => void;
|
|
12
|
+
/** Called once the open or close transition has finished, e.g. to unmount the dialog. */
|
|
13
|
+
onOpenChangeComplete?: (open: boolean) => void;
|
|
14
|
+
/** Element that opens the dialog, e.g. `<Button>Delete</Button>`. Omit when `open` is controlled. */
|
|
15
|
+
trigger?: React.ReactElement;
|
|
16
|
+
/** The question, e.g. "Delete this truck?". */
|
|
17
|
+
title: React.ReactNode;
|
|
18
|
+
/** What happens when confirmed. */
|
|
19
|
+
description?: React.ReactNode;
|
|
20
|
+
/** Extra content between the description and the buttons. */
|
|
21
|
+
children?: React.ReactNode;
|
|
22
|
+
/** Text of the confirm button. */
|
|
23
|
+
confirmLabel: React.ReactNode;
|
|
24
|
+
/** Text of the cancel button. */
|
|
25
|
+
cancelLabel?: React.ReactNode;
|
|
26
|
+
/** Called by the confirm button. The dialog stays open; close it when the action succeeds. */
|
|
27
|
+
onConfirm: () => void;
|
|
28
|
+
/** Red confirm button, for actions that delete or cannot be undone. */
|
|
29
|
+
destructive?: boolean;
|
|
30
|
+
/** The action is running: the confirm button spins and the dialog cannot be closed. */
|
|
31
|
+
pending?: boolean;
|
|
32
|
+
/** Why the action failed, shown above the buttons. */
|
|
33
|
+
error?: React.ReactNode;
|
|
34
|
+
/** Dialog width. */
|
|
35
|
+
size?: 'sm' | 'md' | 'lg';
|
|
36
|
+
/** How strongly the page behind the dialog is blurred. */
|
|
37
|
+
backdropBlur?: DialogBackdropBlur;
|
|
38
|
+
/** Blur the dialog or drawer this one opens from, instead of showing no backdrop. */
|
|
39
|
+
nestedBackdrop?: boolean;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Asks before an action runs: title, description, cancel and confirm buttons,
|
|
43
|
+
* a pending state that keeps the dialog open, and room for the error.
|
|
44
|
+
* For other layouts compose `AlertDialog`.
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* <ConfirmDialog
|
|
48
|
+
* open={deleting}
|
|
49
|
+
* onOpenChange={setDeleting}
|
|
50
|
+
* title="Delete this truck?"
|
|
51
|
+
* description="Its trips stay, without a truck."
|
|
52
|
+
* confirmLabel="Delete"
|
|
53
|
+
* destructive
|
|
54
|
+
* pending={mutation.isPending}
|
|
55
|
+
* error={mutation.error?.message}
|
|
56
|
+
* onConfirm={() => mutation.mutate()}
|
|
57
|
+
* />
|
|
58
|
+
*/
|
|
59
|
+
export declare function ConfirmDialog({ open, defaultOpen, onOpenChange, onOpenChangeComplete, trigger, title, description, children, confirmLabel, cancelLabel, onConfirm, destructive, pending, error, size, backdropBlur, nestedBackdrop, ref, }: ConfirmDialogProps): React.JSX.Element;
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Button } from "../button/Button.js";
|
|
3
|
+
import { AlertDialog } from "./Dialog.js";
|
|
4
|
+
import { Alert } from "../alert/Alert.js";
|
|
5
|
+
import { c } from "react/compiler-runtime";
|
|
6
|
+
import "react";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
//#region src/components/dialog/ConfirmDialog.tsx
|
|
9
|
+
/**
|
|
10
|
+
* Asks before an action runs: title, description, cancel and confirm buttons,
|
|
11
|
+
* a pending state that keeps the dialog open, and room for the error.
|
|
12
|
+
* For other layouts compose `AlertDialog`.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* <ConfirmDialog
|
|
16
|
+
* open={deleting}
|
|
17
|
+
* onOpenChange={setDeleting}
|
|
18
|
+
* title="Delete this truck?"
|
|
19
|
+
* description="Its trips stay, without a truck."
|
|
20
|
+
* confirmLabel="Delete"
|
|
21
|
+
* destructive
|
|
22
|
+
* pending={mutation.isPending}
|
|
23
|
+
* error={mutation.error?.message}
|
|
24
|
+
* onConfirm={() => mutation.mutate()}
|
|
25
|
+
* />
|
|
26
|
+
*/
|
|
27
|
+
function ConfirmDialog(t0) {
|
|
28
|
+
const $ = c(43);
|
|
29
|
+
const { open, defaultOpen, onOpenChange, onOpenChangeComplete, trigger, title, description, children, confirmLabel, cancelLabel: t1, onConfirm, destructive: t2, pending: t3, error, size: t4, backdropBlur, nestedBackdrop, ref } = t0;
|
|
30
|
+
const cancelLabel = t1 === void 0 ? "Cancel" : t1;
|
|
31
|
+
const destructive = t2 === void 0 ? false : t2;
|
|
32
|
+
const pending = t3 === void 0 ? false : t3;
|
|
33
|
+
const size = t4 === void 0 ? "sm" : t4;
|
|
34
|
+
let t5;
|
|
35
|
+
if ($[0] !== onOpenChange || $[1] !== pending) {
|
|
36
|
+
t5 = (next) => {
|
|
37
|
+
if (!next && pending) return;
|
|
38
|
+
onOpenChange?.(next);
|
|
39
|
+
};
|
|
40
|
+
$[0] = onOpenChange;
|
|
41
|
+
$[1] = pending;
|
|
42
|
+
$[2] = t5;
|
|
43
|
+
} else t5 = $[2];
|
|
44
|
+
let t6;
|
|
45
|
+
if ($[3] !== trigger) {
|
|
46
|
+
t6 = trigger && /* @__PURE__ */ jsx(AlertDialog.Trigger, { render: trigger });
|
|
47
|
+
$[3] = trigger;
|
|
48
|
+
$[4] = t6;
|
|
49
|
+
} else t6 = $[4];
|
|
50
|
+
let t7;
|
|
51
|
+
if ($[5] !== title) {
|
|
52
|
+
t7 = /* @__PURE__ */ jsx(AlertDialog.Title, { children: title });
|
|
53
|
+
$[5] = title;
|
|
54
|
+
$[6] = t7;
|
|
55
|
+
} else t7 = $[6];
|
|
56
|
+
let t8;
|
|
57
|
+
if ($[7] !== description) {
|
|
58
|
+
t8 = description && /* @__PURE__ */ jsx(AlertDialog.Description, { children: description });
|
|
59
|
+
$[7] = description;
|
|
60
|
+
$[8] = t8;
|
|
61
|
+
} else t8 = $[8];
|
|
62
|
+
let t9;
|
|
63
|
+
if ($[9] !== t7 || $[10] !== t8) {
|
|
64
|
+
t9 = /* @__PURE__ */ jsxs(AlertDialog.Header, { children: [t7, t8] });
|
|
65
|
+
$[9] = t7;
|
|
66
|
+
$[10] = t8;
|
|
67
|
+
$[11] = t9;
|
|
68
|
+
} else t9 = $[11];
|
|
69
|
+
let t10;
|
|
70
|
+
if ($[12] !== error) {
|
|
71
|
+
t10 = error && /* @__PURE__ */ jsx(Alert, {
|
|
72
|
+
tone: "danger",
|
|
73
|
+
children: error
|
|
74
|
+
});
|
|
75
|
+
$[12] = error;
|
|
76
|
+
$[13] = t10;
|
|
77
|
+
} else t10 = $[13];
|
|
78
|
+
let t11;
|
|
79
|
+
if ($[14] !== pending) {
|
|
80
|
+
t11 = /* @__PURE__ */ jsx(Button, {
|
|
81
|
+
variant: "secondary",
|
|
82
|
+
disabled: pending
|
|
83
|
+
});
|
|
84
|
+
$[14] = pending;
|
|
85
|
+
$[15] = t11;
|
|
86
|
+
} else t11 = $[15];
|
|
87
|
+
let t12;
|
|
88
|
+
if ($[16] !== cancelLabel || $[17] !== t11) {
|
|
89
|
+
t12 = /* @__PURE__ */ jsx(AlertDialog.Close, {
|
|
90
|
+
render: t11,
|
|
91
|
+
children: cancelLabel
|
|
92
|
+
});
|
|
93
|
+
$[16] = cancelLabel;
|
|
94
|
+
$[17] = t11;
|
|
95
|
+
$[18] = t12;
|
|
96
|
+
} else t12 = $[18];
|
|
97
|
+
const t13 = destructive ? "danger" : "primary";
|
|
98
|
+
let t14;
|
|
99
|
+
if ($[19] !== confirmLabel || $[20] !== onConfirm || $[21] !== pending || $[22] !== t13) {
|
|
100
|
+
t14 = /* @__PURE__ */ jsx(Button, {
|
|
101
|
+
variant: t13,
|
|
102
|
+
loading: pending,
|
|
103
|
+
onClick: onConfirm,
|
|
104
|
+
children: confirmLabel
|
|
105
|
+
});
|
|
106
|
+
$[19] = confirmLabel;
|
|
107
|
+
$[20] = onConfirm;
|
|
108
|
+
$[21] = pending;
|
|
109
|
+
$[22] = t13;
|
|
110
|
+
$[23] = t14;
|
|
111
|
+
} else t14 = $[23];
|
|
112
|
+
let t15;
|
|
113
|
+
if ($[24] !== t12 || $[25] !== t14) {
|
|
114
|
+
t15 = /* @__PURE__ */ jsxs(AlertDialog.Footer, { children: [t12, t14] });
|
|
115
|
+
$[24] = t12;
|
|
116
|
+
$[25] = t14;
|
|
117
|
+
$[26] = t15;
|
|
118
|
+
} else t15 = $[26];
|
|
119
|
+
let t16;
|
|
120
|
+
if ($[27] !== backdropBlur || $[28] !== children || $[29] !== nestedBackdrop || $[30] !== ref || $[31] !== size || $[32] !== t10 || $[33] !== t15 || $[34] !== t9) {
|
|
121
|
+
t16 = /* @__PURE__ */ jsxs(AlertDialog.Content, {
|
|
122
|
+
ref,
|
|
123
|
+
size,
|
|
124
|
+
backdropBlur,
|
|
125
|
+
nestedBackdrop,
|
|
126
|
+
children: [
|
|
127
|
+
t9,
|
|
128
|
+
children,
|
|
129
|
+
t10,
|
|
130
|
+
t15
|
|
131
|
+
]
|
|
132
|
+
});
|
|
133
|
+
$[27] = backdropBlur;
|
|
134
|
+
$[28] = children;
|
|
135
|
+
$[29] = nestedBackdrop;
|
|
136
|
+
$[30] = ref;
|
|
137
|
+
$[31] = size;
|
|
138
|
+
$[32] = t10;
|
|
139
|
+
$[33] = t15;
|
|
140
|
+
$[34] = t9;
|
|
141
|
+
$[35] = t16;
|
|
142
|
+
} else t16 = $[35];
|
|
143
|
+
let t17;
|
|
144
|
+
if ($[36] !== defaultOpen || $[37] !== onOpenChangeComplete || $[38] !== open || $[39] !== t16 || $[40] !== t5 || $[41] !== t6) {
|
|
145
|
+
t17 = /* @__PURE__ */ jsxs(AlertDialog.Root, {
|
|
146
|
+
open,
|
|
147
|
+
defaultOpen,
|
|
148
|
+
onOpenChange: t5,
|
|
149
|
+
onOpenChangeComplete,
|
|
150
|
+
children: [t6, t16]
|
|
151
|
+
});
|
|
152
|
+
$[36] = defaultOpen;
|
|
153
|
+
$[37] = onOpenChangeComplete;
|
|
154
|
+
$[38] = open;
|
|
155
|
+
$[39] = t16;
|
|
156
|
+
$[40] = t5;
|
|
157
|
+
$[41] = t6;
|
|
158
|
+
$[42] = t17;
|
|
159
|
+
} else t17 = $[42];
|
|
160
|
+
return t17;
|
|
161
|
+
}
|
|
162
|
+
//#endregion
|
|
163
|
+
export { ConfirmDialog };
|
|
164
|
+
|
|
165
|
+
//# sourceMappingURL=ConfirmDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfirmDialog.js","names":["React","Alert","Button","AlertDialog","DialogBackdropBlur","ConfirmDialogProps","ref","Ref","HTMLDivElement","open","defaultOpen","onOpenChange","onOpenChangeComplete","trigger","ReactElement","title","ReactNode","description","children","confirmLabel","cancelLabel","onConfirm","destructive","pending","error","size","backdropBlur","nestedBackdrop","ConfirmDialog","t0","$","_c","t1","t2","t3","t4","undefined","t5","next","t6","t7","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","_c"],"sources":["../../../src/components/dialog/ConfirmDialog.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Alert } from '../alert/Alert';\nimport { Button } from '../button/Button';\nimport { AlertDialog, type DialogBackdropBlur } from './Dialog';\n\nexport interface ConfirmDialogProps {\n /** Ref to the dialog popup. */\n ref?: React.Ref<HTMLDivElement>;\n /** Whether the dialog is open (controlled). */\n open?: boolean;\n /** Initial state when uncontrolled. */\n defaultOpen?: boolean;\n /** Called when the dialog opens or closes. Not called to close while `pending`. */\n onOpenChange?: (open: boolean) => void;\n /** Called once the open or close transition has finished, e.g. to unmount the dialog. */\n onOpenChangeComplete?: (open: boolean) => void;\n /** Element that opens the dialog, e.g. `<Button>Delete</Button>`. Omit when `open` is controlled. */\n trigger?: React.ReactElement;\n /** The question, e.g. \"Delete this truck?\". */\n title: React.ReactNode;\n /** What happens when confirmed. */\n description?: React.ReactNode;\n /** Extra content between the description and the buttons. */\n children?: React.ReactNode;\n /** Text of the confirm button. */\n confirmLabel: React.ReactNode;\n /** Text of the cancel button. */\n cancelLabel?: React.ReactNode;\n /** Called by the confirm button. The dialog stays open; close it when the action succeeds. */\n onConfirm: () => void;\n /** Red confirm button, for actions that delete or cannot be undone. */\n destructive?: boolean;\n /** The action is running: the confirm button spins and the dialog cannot be closed. */\n pending?: boolean;\n /** Why the action failed, shown above the buttons. */\n error?: React.ReactNode;\n /** Dialog width. */\n size?: 'sm' | 'md' | 'lg';\n /** How strongly the page behind the dialog is blurred. */\n backdropBlur?: DialogBackdropBlur;\n /** Blur the dialog or drawer this one opens from, instead of showing no backdrop. */\n nestedBackdrop?: boolean;\n}\n\n/**\n * Asks before an action runs: title, description, cancel and confirm buttons,\n * a pending state that keeps the dialog open, and room for the error.\n * For other layouts compose `AlertDialog`.\n *\n * @example\n * <ConfirmDialog\n * open={deleting}\n * onOpenChange={setDeleting}\n * title=\"Delete this truck?\"\n * description=\"Its trips stay, without a truck.\"\n * confirmLabel=\"Delete\"\n * destructive\n * pending={mutation.isPending}\n * error={mutation.error?.message}\n * onConfirm={() => mutation.mutate()}\n * />\n */\nexport function ConfirmDialog({\n open,\n defaultOpen,\n onOpenChange,\n onOpenChangeComplete,\n trigger,\n title,\n description,\n children,\n confirmLabel,\n cancelLabel = 'Cancel',\n onConfirm,\n destructive = false,\n pending = false,\n error,\n size = 'sm',\n backdropBlur,\n nestedBackdrop,\n ref,\n}: ConfirmDialogProps) {\n return (\n <AlertDialog.Root\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={(next) => {\n if (!next && pending) return;\n onOpenChange?.(next);\n }}\n onOpenChangeComplete={onOpenChangeComplete}\n >\n {trigger && <AlertDialog.Trigger render={trigger} />}\n <AlertDialog.Content ref={ref} size={size} backdropBlur={backdropBlur} nestedBackdrop={nestedBackdrop}>\n <AlertDialog.Header>\n <AlertDialog.Title>{title}</AlertDialog.Title>\n {description && <AlertDialog.Description>{description}</AlertDialog.Description>}\n </AlertDialog.Header>\n {children}\n {error && <Alert tone=\"danger\">{error}</Alert>}\n <AlertDialog.Footer>\n <AlertDialog.Close render={<Button variant=\"secondary\" disabled={pending} />}>{cancelLabel}</AlertDialog.Close>\n <Button variant={destructive ? 'danger' : 'primary'} loading={pending} onClick={onConfirm}>\n {confirmLabel}\n </Button>\n </AlertDialog.Footer>\n </AlertDialog.Content>\n </AlertDialog.Root>\n );\n}\n"],"mappings":"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"}
|
|
@@ -18,8 +18,13 @@ export interface DialogContentProps extends BaseDialog.Popup.Props {
|
|
|
18
18
|
backdropBlur?: DialogBackdropBlur;
|
|
19
19
|
/** Props for the backdrop behind the dialog. */
|
|
20
20
|
backdropProps?: BaseDialog.Backdrop.Props;
|
|
21
|
+
/**
|
|
22
|
+
* Blur the dialog or drawer this one opens from. Nested dialogs otherwise
|
|
23
|
+
* show no backdrop, so the parent stays sharp behind them.
|
|
24
|
+
*/
|
|
25
|
+
nestedBackdrop?: boolean;
|
|
21
26
|
}
|
|
22
|
-
declare function DialogContent({ size, placement, showClose, closeLabel, backdropBlur, backdropProps, className, children, ref, ...props }: DialogContentProps): import("react").JSX.Element;
|
|
27
|
+
declare function DialogContent({ size, placement, showClose, closeLabel, backdropBlur, backdropProps, nestedBackdrop, className, children, ref, ...props }: DialogContentProps): import("react").JSX.Element;
|
|
23
28
|
declare function DialogTitle({ className, ref, ...props }: BaseDialog.Title.Props): import("react").JSX.Element;
|
|
24
29
|
declare function DialogDescription({ className, ref, ...props }: BaseDialog.Description.Props): import("react").JSX.Element;
|
|
25
30
|
/**
|
|
@@ -53,8 +58,10 @@ export interface AlertDialogContentProps extends BaseAlertDialog.Popup.Props {
|
|
|
53
58
|
size?: Exclude<DialogSize, 'full'>;
|
|
54
59
|
/** How strongly the page behind the dialog is blurred. Override the radius with `--oui-backdrop-blur`. */
|
|
55
60
|
backdropBlur?: DialogBackdropBlur;
|
|
61
|
+
/** Blur the dialog or drawer this one opens from, instead of showing no backdrop. */
|
|
62
|
+
nestedBackdrop?: boolean;
|
|
56
63
|
}
|
|
57
|
-
declare function AlertDialogContent({ size, backdropBlur, className, ref, ...props }: AlertDialogContentProps): import("react").JSX.Element;
|
|
64
|
+
declare function AlertDialogContent({ size, backdropBlur, nestedBackdrop, className, ref, ...props }: AlertDialogContentProps): import("react").JSX.Element;
|
|
58
65
|
declare function AlertDialogTitle({ className, ref, ...props }: BaseAlertDialog.Title.Props): import("react").JSX.Element;
|
|
59
66
|
declare function AlertDialogDescription({ className, ref, ...props }: BaseAlertDialog.Description.Props): import("react").JSX.Element;
|
|
60
67
|
/** Confirmation dialog that requires an explicit choice (no outside-click dismissal). */
|