@optimum-intelligence/opti-ui 0.7.2 → 0.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/dist/components/app-shell/AppShell.d.ts +12 -3
  3. package/dist/components/app-shell/AppShell.js +45 -26
  4. package/dist/components/app-shell/AppShell.js.map +1 -1
  5. package/dist/components/data-table/DataTable.d.ts +25 -4
  6. package/dist/components/data-table/DataTable.js +238 -90
  7. package/dist/components/data-table/DataTable.js.map +1 -1
  8. package/dist/components/data-table/DataTableContent.d.ts +6 -1
  9. package/dist/components/data-table/DataTableContent.js +306 -409
  10. package/dist/components/data-table/DataTableContent.js.map +1 -1
  11. package/dist/components/data-table/DataTableFilters.d.ts +6 -1
  12. package/dist/components/data-table/DataTableFilters.js +65 -45
  13. package/dist/components/data-table/DataTableFilters.js.map +1 -1
  14. package/dist/components/data-table/DataTableRow.js +2 -0
  15. package/dist/components/data-table/DataTableRow.js.map +1 -1
  16. package/dist/components/data-table/types.d.ts +14 -1
  17. package/dist/components/data-table/useDataTable.js +2 -0
  18. package/dist/components/data-table/useDataTable.js.map +1 -1
  19. package/dist/components/drawer/Drawer.d.ts +7 -4
  20. package/dist/components/drawer/Drawer.js +2 -1
  21. package/dist/components/drawer/Drawer.js.map +1 -1
  22. package/dist/components/map/Map.d.ts +30 -6
  23. package/dist/components/map/Map.js +387 -271
  24. package/dist/components/map/Map.js.map +1 -1
  25. package/dist/components/stat-card/StatCard.d.ts +2 -2
  26. package/dist/components/stat-card/StatCard.js +1 -1
  27. package/dist/components/stat-card/StatCard.js.map +1 -1
  28. package/dist/components/stepper/Stepper.d.ts +7 -1
  29. package/dist/components/stepper/Stepper.js +46 -27
  30. package/dist/components/stepper/Stepper.js.map +1 -1
  31. package/dist/components/table/Table.d.ts +1 -1
  32. package/dist/components/table/Table.js +3 -1
  33. package/dist/components/table/Table.js.map +1 -1
  34. package/dist/components/tabs/Tabs.d.ts +4 -1
  35. package/dist/components/tabs/Tabs.js +33 -23
  36. package/dist/components/tabs/Tabs.js.map +1 -1
  37. package/dist/components/toggle/Toggle.d.ts +1 -1
  38. package/dist/components/toggle/Toggle.js.map +1 -1
  39. package/dist/components.json +101 -29
  40. package/dist/icons/index.d.ts +8 -0
  41. package/dist/icons/index.js +11 -1
  42. package/dist/icons/index.js.map +1 -1
  43. package/dist/index.js +2 -2
  44. package/dist/llms-full.txt +48 -19
  45. package/dist/llms.txt +7 -7
  46. package/dist/opti-ui.css +380 -29
  47. package/dist/utils/media.d.ts +4 -0
  48. package/dist/utils/media.js +34 -0
  49. package/dist/utils/media.js.map +1 -0
  50. package/dist/utils/scroll-fade.d.ts +9 -0
  51. package/dist/utils/scroll-fade.js +45 -0
  52. package/dist/utils/scroll-fade.js.map +1 -0
  53. package/package.json +1 -1
@@ -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","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"}
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","showResults","close","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 showResults: (count) => `Show ${count} ${count === 1 ? 'record' : 'records'}`,\n close: 'Close',\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":"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"}
@@ -1,6 +1,8 @@
1
1
  import * as React from 'react';
2
2
  import type { DialogBackdropBlur } from '../dialog/Dialog';
3
3
  export type DrawerSize = 'sm' | 'md' | 'lg' | 'xl';
4
+ /** Edge a `Drawer` slides in from. `bottom` is a full-width sheet, for phones. */
5
+ export type DrawerSide = 'right' | 'left' | 'bottom';
4
6
  export interface DrawerProps {
5
7
  /** Ref to the drawer panel. */
6
8
  ref?: React.Ref<HTMLDivElement>;
@@ -24,9 +26,9 @@ export interface DrawerProps {
24
26
  actions?: React.ReactNode;
25
27
  /** Pinned to the bottom, for form buttons. */
26
28
  footer?: React.ReactNode;
27
- /** Edge the drawer slides in from. */
28
- side?: 'right' | 'left';
29
- /** Width: sm 24rem, md 32rem (default), lg 48rem, xl 60rem. Override with `--oui-drawer-width`. */
29
+ /** Edge the drawer slides in from. A `bottom` sheet is full width, as tall as its content, up to 85% of the screen. */
30
+ side?: DrawerSide;
31
+ /** Width of a side drawer: sm 24rem, md 32rem (default), lg 48rem, xl 60rem. Override with `--oui-drawer-width`. Ignored by `bottom`. */
30
32
  size?: DrawerSize;
31
33
  /**
32
34
  * Set to `false` to block Esc, outside clicks and the close button, e.g.
@@ -48,7 +50,8 @@ export interface DrawerProps {
48
50
  }
49
51
  /**
50
52
  * Side panel for inspecting or editing a record without leaving the page:
51
- * pinned header, scrolling body, optional pinned footer. For a free-form
53
+ * pinned header, scrolling body, optional pinned footer. `side="bottom"` makes
54
+ * it a bottom sheet, for filters and actions on phones. For a free-form
52
55
  * sheet use `Dialog.Content` with `placement`.
53
56
  */
54
57
  export declare function Drawer({ open: openProp, defaultOpen, onOpenChange, onOpenChangeComplete, trigger, title, eyebrow, description, actions, footer, side, size, dismissible, modal, backdropBlur, closeLabel, className, bodyProps, children, ref, }: DrawerProps): React.JSX.Element;
@@ -10,7 +10,8 @@ import { Dialog } from "@base-ui/react/dialog";
10
10
  //#region src/components/drawer/Drawer.tsx
11
11
  /**
12
12
  * Side panel for inspecting or editing a record without leaving the page:
13
- * pinned header, scrolling body, optional pinned footer. For a free-form
13
+ * pinned header, scrolling body, optional pinned footer. `side="bottom"` makes
14
+ * it a bottom sheet, for filters and actions on phones. For a free-form
14
15
  * sheet use `Dialog.Content` with `placement`.
15
16
  */
16
17
  function Drawer(t0) {
@@ -1 +1 @@
1
- {"version":3,"file":"Drawer.js","names":["React","Dialog","BaseDialog","cx","usePortalContainer","XIcon","IconButton","DialogBackdropBlur","DrawerSize","DrawerProps","ref","Ref","HTMLDivElement","open","defaultOpen","onOpenChange","onOpenChangeComplete","trigger","ReactElement","title","ReactNode","eyebrow","description","actions","footer","side","size","dismissible","modal","backdropBlur","closeLabel","className","bodyProps","HTMLAttributes","children","Drawer","t0","$","_c","openProp","t1","t2","t3","t4","t5","t6","t7","undefined","inner","setInner","useState","container","t8","next","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","Symbol","for","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","_c","BaseDialog"],"sources":["../../../src/components/drawer/Drawer.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Dialog as BaseDialog } from '@base-ui/react/dialog';\nimport { cx } from '../../utils/cx';\nimport { usePortalContainer } from '../../utils/portal';\nimport { XIcon } from '../../icons';\nimport { IconButton } from '../button/Button';\nimport type { DialogBackdropBlur } from '../dialog/Dialog';\n\nexport type DrawerSize = 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface DrawerProps {\n /** Ref to the drawer panel. */\n ref?: React.Ref<HTMLDivElement>;\n /** Whether the drawer is open (controlled). */\n open?: boolean;\n /** Initial state when uncontrolled. */\n defaultOpen?: boolean;\n /** Called when the drawer opens or closes. */\n onOpenChange?: (open: boolean) => void;\n /** Called once the open or close transition has finished, e.g. to unmount the drawer after it slid out. */\n onOpenChangeComplete?: (open: boolean) => void;\n /** Element that opens the drawer, e.g. `<Button>Details</Button>`. Omit when `open` is controlled. */\n trigger?: React.ReactElement;\n /** Header title; also the drawer's accessible name. */\n title: React.ReactNode;\n /** Small label above the title, e.g. the record type. */\n eyebrow?: React.ReactNode;\n /** Supporting text under the title. */\n description?: React.ReactNode;\n /** Header content next to the close button (edit, delete, a menu…). */\n actions?: React.ReactNode;\n /** Pinned to the bottom, for form buttons. */\n footer?: React.ReactNode;\n /** Edge the drawer slides in from. */\n side?: 'right' | 'left';\n /** Width: sm 24rem, md 32rem (default), lg 48rem, xl 60rem. Override with `--oui-drawer-width`. */\n size?: DrawerSize;\n /**\n * Set to `false` to block Esc, outside clicks and the close button, e.g.\n * while a form inside is saving.\n */\n dismissible?: boolean;\n /** `false` leaves the page behind interactive and drops the backdrop. */\n modal?: boolean;\n /** How strongly the page behind a modal drawer is blurred. Override the radius with `--oui-backdrop-blur`. */\n backdropBlur?: DialogBackdropBlur;\n /** Accessible name of the close button. */\n closeLabel?: string;\n /** Class name for the drawer panel. */\n className?: string;\n /** Props for the scrolling content area. */\n bodyProps?: React.HTMLAttributes<HTMLDivElement>;\n /** Drawer body content. */\n children?: React.ReactNode;\n}\n\n/**\n * Side panel for inspecting or editing a record without leaving the page:\n * pinned header, scrolling body, optional pinned footer. For a free-form\n * sheet use `Dialog.Content` with `placement`.\n */\nexport function Drawer({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n onOpenChangeComplete,\n trigger,\n title,\n eyebrow,\n description,\n actions,\n footer,\n side = 'right',\n size = 'md',\n dismissible = true,\n modal = true,\n backdropBlur = 'md',\n closeLabel = 'Close',\n className,\n bodyProps,\n children,\n ref,\n}: DrawerProps) {\n const [inner, setInner] = React.useState(defaultOpen);\n const open = openProp ?? inner;\n const container = usePortalContainer();\n\n return (\n <BaseDialog.Root\n open={open}\n modal={modal}\n onOpenChangeComplete={onOpenChangeComplete}\n onOpenChange={(next) => {\n if (!next && !dismissible) return;\n setInner(next);\n onOpenChange?.(next);\n }}\n >\n {trigger && <BaseDialog.Trigger render={trigger} />}\n <BaseDialog.Portal container={container}>\n {modal && <BaseDialog.Backdrop className=\"oui-dialog__backdrop\" data-blur={backdropBlur} />}\n <BaseDialog.Popup ref={ref} className={cx('oui-drawer', className)} data-side={side} data-size={size}>\n <header className=\"oui-drawer__header\">\n <div className=\"oui-drawer__heading\">\n {eyebrow && <div className=\"oui-drawer__eyebrow\">{eyebrow}</div>}\n <BaseDialog.Title className=\"oui-drawer__title\">{title}</BaseDialog.Title>\n {description && (\n <BaseDialog.Description className=\"oui-drawer__description\">{description}</BaseDialog.Description>\n )}\n </div>\n <div className=\"oui-drawer__actions\">\n {actions}\n <BaseDialog.Close render={<IconButton aria-label={closeLabel} disabled={!dismissible} />}>\n <XIcon />\n </BaseDialog.Close>\n </div>\n </header>\n <div {...bodyProps} className={cx('oui-drawer__body', bodyProps?.className)}>\n {children}\n </div>\n {footer && <footer className=\"oui-drawer__footer\">{footer}</footer>}\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Drawer.js","names":["React","Dialog","BaseDialog","cx","usePortalContainer","XIcon","IconButton","DialogBackdropBlur","DrawerSize","DrawerSide","DrawerProps","ref","Ref","HTMLDivElement","open","defaultOpen","onOpenChange","onOpenChangeComplete","trigger","ReactElement","title","ReactNode","eyebrow","description","actions","footer","side","size","dismissible","modal","backdropBlur","closeLabel","className","bodyProps","HTMLAttributes","children","Drawer","t0","$","_c","openProp","t1","t2","t3","t4","t5","t6","t7","undefined","inner","setInner","useState","container","t8","next","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","Symbol","for","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","_c","BaseDialog"],"sources":["../../../src/components/drawer/Drawer.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Dialog as BaseDialog } from '@base-ui/react/dialog';\nimport { cx } from '../../utils/cx';\nimport { usePortalContainer } from '../../utils/portal';\nimport { XIcon } from '../../icons';\nimport { IconButton } from '../button/Button';\nimport type { DialogBackdropBlur } from '../dialog/Dialog';\n\nexport type DrawerSize = 'sm' | 'md' | 'lg' | 'xl';\n\n/** Edge a `Drawer` slides in from. `bottom` is a full-width sheet, for phones. */\nexport type DrawerSide = 'right' | 'left' | 'bottom';\n\nexport interface DrawerProps {\n /** Ref to the drawer panel. */\n ref?: React.Ref<HTMLDivElement>;\n /** Whether the drawer is open (controlled). */\n open?: boolean;\n /** Initial state when uncontrolled. */\n defaultOpen?: boolean;\n /** Called when the drawer opens or closes. */\n onOpenChange?: (open: boolean) => void;\n /** Called once the open or close transition has finished, e.g. to unmount the drawer after it slid out. */\n onOpenChangeComplete?: (open: boolean) => void;\n /** Element that opens the drawer, e.g. `<Button>Details</Button>`. Omit when `open` is controlled. */\n trigger?: React.ReactElement;\n /** Header title; also the drawer's accessible name. */\n title: React.ReactNode;\n /** Small label above the title, e.g. the record type. */\n eyebrow?: React.ReactNode;\n /** Supporting text under the title. */\n description?: React.ReactNode;\n /** Header content next to the close button (edit, delete, a menu…). */\n actions?: React.ReactNode;\n /** Pinned to the bottom, for form buttons. */\n footer?: React.ReactNode;\n /** Edge the drawer slides in from. A `bottom` sheet is full width, as tall as its content, up to 85% of the screen. */\n side?: DrawerSide;\n /** Width of a side drawer: sm 24rem, md 32rem (default), lg 48rem, xl 60rem. Override with `--oui-drawer-width`. Ignored by `bottom`. */\n size?: DrawerSize;\n /**\n * Set to `false` to block Esc, outside clicks and the close button, e.g.\n * while a form inside is saving.\n */\n dismissible?: boolean;\n /** `false` leaves the page behind interactive and drops the backdrop. */\n modal?: boolean;\n /** How strongly the page behind a modal drawer is blurred. Override the radius with `--oui-backdrop-blur`. */\n backdropBlur?: DialogBackdropBlur;\n /** Accessible name of the close button. */\n closeLabel?: string;\n /** Class name for the drawer panel. */\n className?: string;\n /** Props for the scrolling content area. */\n bodyProps?: React.HTMLAttributes<HTMLDivElement>;\n /** Drawer body content. */\n children?: React.ReactNode;\n}\n\n/**\n * Side panel for inspecting or editing a record without leaving the page:\n * pinned header, scrolling body, optional pinned footer. `side=\"bottom\"` makes\n * it a bottom sheet, for filters and actions on phones. For a free-form\n * sheet use `Dialog.Content` with `placement`.\n */\nexport function Drawer({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n onOpenChangeComplete,\n trigger,\n title,\n eyebrow,\n description,\n actions,\n footer,\n side = 'right',\n size = 'md',\n dismissible = true,\n modal = true,\n backdropBlur = 'md',\n closeLabel = 'Close',\n className,\n bodyProps,\n children,\n ref,\n}: DrawerProps) {\n const [inner, setInner] = React.useState(defaultOpen);\n const open = openProp ?? inner;\n const container = usePortalContainer();\n\n return (\n <BaseDialog.Root\n open={open}\n modal={modal}\n onOpenChangeComplete={onOpenChangeComplete}\n onOpenChange={(next) => {\n if (!next && !dismissible) return;\n setInner(next);\n onOpenChange?.(next);\n }}\n >\n {trigger && <BaseDialog.Trigger render={trigger} />}\n <BaseDialog.Portal container={container}>\n {modal && <BaseDialog.Backdrop className=\"oui-dialog__backdrop\" data-blur={backdropBlur} />}\n <BaseDialog.Popup ref={ref} className={cx('oui-drawer', className)} data-side={side} data-size={size}>\n <header className=\"oui-drawer__header\">\n <div className=\"oui-drawer__heading\">\n {eyebrow && <div className=\"oui-drawer__eyebrow\">{eyebrow}</div>}\n <BaseDialog.Title className=\"oui-drawer__title\">{title}</BaseDialog.Title>\n {description && (\n <BaseDialog.Description className=\"oui-drawer__description\">{description}</BaseDialog.Description>\n )}\n </div>\n <div className=\"oui-drawer__actions\">\n {actions}\n <BaseDialog.Close render={<IconButton aria-label={closeLabel} disabled={!dismissible} />}>\n <XIcon />\n </BaseDialog.Close>\n </div>\n </header>\n <div {...bodyProps} className={cx('oui-drawer__body', bodyProps?.className)}>\n {children}\n </div>\n {footer && <footer className=\"oui-drawer__footer\">{footer}</footer>}\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n}\n"],"mappings":"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"}
@@ -11,6 +11,10 @@ export type MapFit = 'data' | 'selected' | 'none';
11
11
  export type MapOverlayPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
12
12
  /** Pin shape of `Map.Marker`. */
13
13
  export type MapMarkerKind = 'stop' | 'depot' | 'vehicle' | 'point';
14
+ /** Density of `Map.Legend`: `sm` for small maps and phones. */
15
+ export type MapLegendSize = 'sm' | 'md';
16
+ /** Look of `Map.BaseLayerSwitch`: a segmented switch, separate outline buttons, or one small button that cycles the base maps. */
17
+ export type MapBaseLayerSwitchVariant = 'segmented' | 'outline' | 'icon';
14
18
  /** Selection behaviour of `Map.Legend`. */
15
19
  export type MapLegendSelectionMode = 'none' | 'single' | 'multi';
16
20
  /** One switchable base map. */
@@ -48,6 +52,8 @@ export interface MapLabels {
48
52
  expand: string;
49
53
  /** Button that returns the expanded map to its place. */
50
54
  collapse: string;
55
+ /** Name of the icon `Map.BaseLayerSwitch`, followed by the shown base map, e.g. "Base map: Streets". */
56
+ baseLayer: string;
51
57
  }
52
58
  /** A GeoJSON `Polygon`: an outer ring and optional holes, each a list of `[longitude, latitude]`. */
53
59
  export interface MapPolygon {
@@ -105,6 +111,11 @@ export interface MapRootProps extends Omit<MapProps, 'mapStyle' | 'initialViewSt
105
111
  * fullscreen) above the page, at the dialog z-index. Escape or the button returns it.
106
112
  */
107
113
  expandable?: boolean;
114
+ /**
115
+ * Starts the attribution as the small info button, opened with a tap, instead of showing the full text
116
+ * until the map is first dragged. For small maps and phones; check the tile provider's terms first.
117
+ */
118
+ attributionCollapsed?: boolean;
108
119
  /** Classes for the map container. Set its height in CSS (`--oui-map-height`, default 24rem). */
109
120
  className?: string;
110
121
  /** Inline styles for the map container. */
@@ -132,7 +143,7 @@ export interface MapRootProps extends Omit<MapProps, 'mapStyle' | 'initialViewSt
132
143
  * <Map.Marker kind="depot" position={[19.0, 47.48]} />
133
144
  * </Map.Root>
134
145
  */
135
- declare function MapRoot({ ref, baseLayers, baseLayer, defaultBaseLayer, onBaseLayerChange, initialView, fit, labels, controlsPosition, expandable, className, style, children, onClick, onMouseMove, onMouseOut, ...props }: MapRootProps): React.JSX.Element;
146
+ declare function MapRoot({ ref, baseLayers, baseLayer, defaultBaseLayer, onBaseLayerChange, initialView, fit, labels, controlsPosition, expandable, attributionCollapsed, className, style, children, onClick, onMouseMove, onMouseOut, ...props }: MapRootProps): React.JSX.Element;
136
147
  export interface MapRouteItem {
137
148
  /** Unique id; reported back by `onItemClick` and used in `selectedIds`. */
138
149
  id: string;
@@ -289,7 +300,7 @@ declare function MapTooltip({ position, className, offset, ...props }: MapPopupP
289
300
  export interface MapOverlayProps extends React.HTMLAttributes<HTMLDivElement> {
290
301
  /** Ref to the overlay element. */
291
302
  ref?: React.Ref<HTMLDivElement>;
292
- /** Corner the overlay sits in. Overlays in the same corner as the zoom buttons cover them. */
303
+ /** Corner the overlay sits in. Its empty area lets clicks through to the map and controls under it. */
293
304
  position?: MapOverlayPosition;
294
305
  }
295
306
  /** Content floating over a corner of the map: stat cards, selects, a legend or `Map.BaseLayerSwitch`. */
@@ -321,6 +332,11 @@ export interface MapLegendProps extends Omit<React.HTMLAttributes<HTMLDivElement
321
332
  onVisibilityChange?: (ids: string[], visible: boolean) => void;
322
333
  /** Adds a show all / hide all button when `onVisibilityChange` is set. */
323
334
  showAllToggle?: boolean;
335
+ /**
336
+ * `sm` packs the entries tighter, with smaller swatches and text, for small maps and phones. Either size
337
+ * scrolls past `--oui-map-legend-max-height` (`sm`: 10rem, `md`: none).
338
+ */
339
+ size?: MapLegendSize;
324
340
  }
325
341
  /**
326
342
  * The key to a map's colours, with optional selection and show/hide per entry. Plain DOM, so it also
@@ -336,11 +352,19 @@ export interface MapLegendProps extends Omit<React.HTMLAttributes<HTMLDivElement
336
352
  * showAllToggle
337
353
  * />
338
354
  */
339
- declare function MapLegend({ items, selectionMode, selectedIds, onSelectedIdsChange, onVisibilityChange, showAllToggle, className, ref, ...props }: MapLegendProps): React.JSX.Element;
340
- export interface MapBaseLayerSwitchProps extends Omit<SegmentedControlProps, 'options' | 'value' | 'defaultValue' | 'onValueChange'> {
355
+ declare function MapLegend({ items, selectionMode, selectedIds, onSelectedIdsChange, onVisibilityChange, showAllToggle, size, className, ref, ...props }: MapLegendProps): React.JSX.Element;
356
+ export interface MapBaseLayerSwitchProps extends Omit<SegmentedControlProps, 'options' | 'value' | 'defaultValue' | 'onValueChange' | 'variant'> {
357
+ /**
358
+ * `segmented` (or `outline`) shows every base map by name. `icon` is one small layers button that moves to the next
359
+ * base map on each press, for small maps and phones; its name says which one is shown.
360
+ */
361
+ variant?: MapBaseLayerSwitchVariant;
341
362
  }
342
- /** Segmented switch between the root's `baseLayers` (e.g. streets and satellite). Put it in a `Map.Overlay`. */
343
- declare function MapBaseLayerSwitch({ size, ...props }: MapBaseLayerSwitchProps): React.JSX.Element;
363
+ /**
364
+ * Switch between the root's `baseLayers` (e.g. streets and satellite): a segmented switch, or with
365
+ * `variant="icon"` a single button that cycles them. Put it in a `Map.Overlay`.
366
+ */
367
+ declare function MapBaseLayerSwitch({ variant, size, className, ...props }: MapBaseLayerSwitchProps): React.JSX.Element;
344
368
  /**
345
369
  * Map components on MapLibre, from `@optimum-intelligence/opti-ui/map`. `Map.Root` holds the map; inside
346
370
  * it, `Map.Areas`, `Map.Routes` and `Map.Points` draw arrays of items as single GeoJSON layers,