schummar-table 0.18.0 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.js +15 -12
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/tableTheme.js +61 -44
- package/dist/cjs/tableTheme.js.map +1 -1
- package/dist/es/index.js +21 -18
- package/dist/es/index.js.map +1 -1
- package/dist/es/tableTheme.js +66 -49
- package/dist/es/tableTheme.js.map +1 -1
- package/dist/types/theme/defaultTheme/popover.d.ts +0 -5
- package/dist/types/types.d.ts +2 -0
- package/package.json +1 -1
package/dist/es/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/hooks/useTableMemo.tsx","../../src/misc/queue.ts","../../src/internalState/tableStateStorage.ts","../../src/misc/helpers.ts","../../src/internalState/calcItems.ts","../../src/internalState/calcProps.ts","../../src/internalState/cleanupState.ts","../../src/internalState/filterColumns.ts","../../src/internalState/normalizeExpanded.ts","../../src/internalState/syncSelections.ts","../../src/internalState/useTableState.ts","../../src/theme/useCssVariables.ts","../../src/components/clearFiltersButton.tsx","../../src/components/columnFooter.tsx","../../src/components/filterControl.tsx","../../src/components/resizeHandle.tsx","../../src/components/sortComponent.tsx","../../src/components/columnHeader.tsx","../../src/components/formControlLabel.tsx","../../src/components/columnSelection.tsx","../../src/misc/csvExport.ts","../../src/components/export.tsx","../../src/components/cell.tsx","../../src/components/expandControl.tsx","../../src/components/selectComponent.tsx","../../src/components/row.tsx","../../src/misc/throttle.ts","../../src/components/virtualized.tsx","../../src/components/table.tsx","../../src/theme/defaultTheme/defaultColors.ts","../../src/components/spinnner.tsx","../../src/theme/defaultTheme/badge.tsx","../../src/theme/defaultTheme/button.tsx","../../src/theme/defaultTheme/checkbox.tsx","../../src/theme/defaultTheme/iconButton.tsx","../../src/theme/defaultTheme/textField.tsx","../../src/theme/defaultTheme/defaultComponents.ts","../../src/theme/defaultTheme/defaultIcons.tsx","../../src/theme/defaultTheme/defaultTexts.tsx","../../src/theme/defaultTheme/index.tsx","../../src/hooks/useTheme.ts","../../src/components/autoFocusTextField.tsx","../../src/components/dateInput.tsx","../../src/components/text.tsx","../../src/components/datePicker.tsx","../../src/components/dateFilter.tsx","../../src/components/selectFilter.tsx","../../src/misc/debounce.ts","../../src/hooks/useFilter.ts","../../src/misc/textMatch.ts","../../src/components/textFilter.tsx"],"sourcesContent":["import { createContext, DependencyList, ReactNode, useContext, useMemo } from 'react';\nimport { FunctionWithDeps } from '../types';\n\nconst TableMemoContext = createContext(new Map<string, [value: any, deps: DependencyList]>());\n\nexport function TableMemoContextProvider({ children }: { children: ReactNode }) {\n return <TableMemoContext.Provider value={useMemo(() => new Map(), [])}>{children}</TableMemoContext.Provider>;\n}\n\nexport function useTableMemo() {\n const memoCache = useContext(TableMemoContext);\n\n return <Fn extends (...args: any[]) => any>(key: string, fn: FunctionWithDeps<Fn>): Fn => {\n let deps: DependencyList;\n if (Array.isArray(fn)) {\n deps = fn.slice(1);\n fn = fn[0];\n } else {\n deps = [fn.toString()];\n }\n\n let cachedValue = memoCache.get(key);\n const hit = cachedValue && cachedValue[1].length === deps.length && cachedValue[1].every((x, i) => x === deps[i]);\n if (!cachedValue || !hit) {\n cachedValue = [fn, deps];\n memoCache.set(key, cachedValue);\n }\n return cachedValue[0];\n };\n}\n","export class Queue {\n private q = new Array<{ job: () => Promise<any>; resolve: (value: any) => void; reject: (reason?: any) => void }>();\n private isRunning = false;\n\n run<T>(job: () => Promise<T>, replace?: boolean) {\n return new Promise<T>((resolve, reject) => {\n if (replace) {\n this.q = [];\n }\n this.q.push({ job, resolve, reject });\n\n if (!this.isRunning) this.start();\n });\n }\n\n clear() {\n this.q = [];\n }\n\n private async start() {\n this.isRunning = true;\n\n let next;\n while ((next = this.q.shift())) {\n try {\n const result = await next.job();\n next.resolve(result);\n } catch (e) {\n next.reject(e);\n }\n }\n\n this.isRunning = false;\n }\n}\n","import { useEffect, useState } from 'react';\nimport { Store } from 'schummar-state/react';\nimport { Queue } from '../misc/queue';\nimport { InternalTableState, SerializableValue } from '../types';\n\nconst KEYS = ['sort', 'selection', 'expanded', 'hiddenColumns', 'filterValues', 'columnWidths', 'columnOrder'] as const;\n\nconst storageName = (id: string) => `schummar-table_state-v1_${id}`;\n\nexport type TableStateStorage = {\n getItem: (key: string) => string | null | Promise<string | null>;\n setItem: (key: string, value: string) => unknown | Promise<unknown>;\n removeItem: (key: string) => unknown | Promise<unknown>;\n} & (\n | {\n keys: () => string[] | Promise<string[]>;\n }\n | {\n length: number | (() => number | Promise<number>);\n key: (keyIndex: number) => string | null | Promise<string | null>;\n }\n);\n\nfunction stringify(value: SerializableValue) {\n function prepare(value: SerializableValue): any {\n if (value instanceof Date) {\n return { __date: value.toJSON() };\n }\n\n if (value instanceof Set) {\n return { __set: Array.from(value).map(prepare) };\n }\n\n if (value instanceof Map) {\n return { __map: Array.from(value.entries()).map((entry) => entry.map(prepare)) };\n }\n\n if (value instanceof Array) {\n return value.map(prepare);\n }\n\n if (value instanceof Object) {\n return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, prepare(v)]));\n }\n\n return value;\n }\n\n return JSON.stringify(prepare(value));\n}\n\nfunction parse(value: string) {\n return JSON.parse(value, (_key, value) => {\n if (value instanceof Object && '__date' in value) {\n return new Date(value.__date);\n }\n\n if (value instanceof Object && '__set' in value) {\n return new Set(value.__set);\n }\n\n if (value instanceof Object && '__map' in value) {\n return new Map(value.__map);\n }\n\n return value;\n });\n}\n\nexport function useTableStateStorage(table: Store<InternalTableState<any>>) {\n const [isHydrated, setIsHydrated] = useState(false);\n const [q] = useState(() => new Queue());\n\n // On mount: load\n useEffect(() => {\n const { persist } = table.getState().props;\n if (!persist) {\n setIsHydrated(true);\n return;\n }\n\n let isCanceled = false;\n\n (async () => {\n try {\n const { storage, id, include, exclude } = persist;\n const json = await storage.getItem(storageName(id));\n if (isCanceled || !json) return;\n\n const data = parse(json);\n table.getState().props.debug?.('load', json, data);\n\n table.update((state) => {\n for (const key of KEYS) {\n if (\n //\n (!include || include.includes(key)) &&\n !exclude?.includes(key) &&\n key in data\n ) {\n if (key === 'filterValues') {\n for (const [id, value] of data[key]) {\n if (state.filters.get(id)?.persist ?? state.filters.get(id)?.value === undefined) {\n state.filterValues.set(id, value);\n }\n }\n } else {\n if (key === 'expanded' || key === 'hiddenColumns' || key === 'selection' || key === 'sort') {\n if (state.props[key] !== undefined) {\n continue;\n }\n\n state.props[`on${(key.slice(0, 1).toUpperCase() + key.slice(1)) as Capitalize<typeof key>}Change`]?.(data[key]);\n }\n\n state[key] = data[key];\n }\n }\n }\n });\n } catch (e) {\n console.error('Failed to load table state:', e);\n } finally {\n setIsHydrated(true);\n }\n })();\n\n return () => {\n isCanceled = true;\n };\n }, [table]);\n\n // After isHydrated, watch and save state\n useEffect(() => {\n if (!isHydrated) return;\n\n return table.subscribe(\n (state) => {\n if (!state.props.persist) return;\n\n const { storage, id, include, exclude } = state.props.persist;\n const data: any = {};\n\n for (const key of KEYS) {\n if (\n //\n (!include || include.includes(key)) &&\n !exclude?.includes(key)\n ) {\n if (key === 'filterValues') {\n data[key] = new Map();\n for (const [id, value] of state.filterValues) {\n if (state.filters.get(id)?.persist ?? state.filters.get(id)?.value === undefined) {\n data.filterValues.set(id, value);\n }\n }\n } else {\n if (\n (key === 'expanded' || key === 'hiddenColumns' || key === 'selection' || key === 'sort') &&\n state.props[key] !== undefined\n ) {\n continue;\n }\n\n data[key] = state[key];\n }\n }\n }\n\n return { storage, id, data };\n },\n (props) => {\n if (!props) return;\n const { storage, id, data } = props;\n\n table.getState().props.debug?.('save', data, stringify(data));\n q.run(async () => {\n await storage.setItem(storageName(id), stringify(data));\n }, true);\n },\n { throttle: 1000 },\n );\n }, [table, isHydrated]);\n\n async function clear() {\n await q.run(async () => {\n const persist = table.getState().props.persist;\n if (!persist) {\n return;\n }\n\n const { storage, id } = persist;\n await storage.removeItem(storageName(id));\n\n setIsHydrated(false);\n q.clear();\n });\n }\n\n return [isHydrated, clear] as const;\n}\n","import { Id, TableItem } from '../types';\n\nexport const flatMap = <T, S>(arr: Iterable<T>, flatMap: (t: T) => S[]): S[] => {\n return [...arr].reduce<S[]>((out, cur) => out.concat(flatMap(cur)), []);\n};\n\nexport const orderBy = <T>(arr: T[], selectors: ((t: T) => any)[] = [], direction: ('desc' | 'asc')[] = []): T[] => {\n if (selectors.length === 0) selectors = [(t) => t];\n\n return [...arr].sort((a, b) => {\n for (let i = 0; i < selectors.length; i++) {\n const _a = selectors[i]?.(a);\n const _b = selectors[i]?.(b);\n const dir = direction[i] === 'desc' ? -1 : 1;\n if (_a > _b) return dir;\n if (_a < _b) return -dir;\n }\n return 0;\n });\n};\n\nexport const uniq = <T>(arr: T[]): T[] => {\n const set = new Set<T>();\n for (const t of arr) set.add(t);\n return Array.from(set);\n};\n\nexport const intersect = <T>(a: Iterable<T>, b: { has(t: T): boolean }): Set<T> => {\n const result = new Set<T>();\n for (const x of a) if (b.has(x)) result.add(x);\n return result;\n};\n\nexport const getAncestors = <T>(activeItemsById: Map<Id, TableItem<T>>, ...items: TableItem<T>[]): Set<Id> => {\n const result = new Set<Id>();\n\n const find = ({ parentId }: TableItem<T>): void => {\n const parent = parentId ? activeItemsById.get(parentId) : undefined;\n if (parent && !result.has(parent.id)) {\n result.add(parent.id);\n find(parent);\n }\n };\n items.forEach(find);\n return result;\n};\n\nexport const getDescendants = <T>(...items: TableItem<T>[]): Set<Id> => {\n const result = new Set<Id>();\n\n const find = (item: TableItem<T>): void => {\n for (const child of item.children) {\n if (!result.has(child.id)) {\n result.add(child.id);\n find(child);\n }\n }\n };\n items.forEach(find);\n return result;\n};\n\nexport const identity = (x: unknown): any => x;\n\nexport const asString = (x: unknown): string => {\n if (x instanceof Array) return x.map(asString).join(', ');\n if (x instanceof Object) return JSON.stringify(x);\n return String(x ?? '');\n};\n\nexport const asStringOrArray = (x: unknown): string | string[] => {\n if (x instanceof Array) return x.map(asString);\n return asString(x);\n};\n\nexport const defaultEquals = (a: unknown, b: unknown): boolean => a === b;\n\nexport const subStringMatch = (a: string, b: string): boolean => a.toLowerCase().includes(b.toLowerCase());\n\nexport const castArray = <T>(a: T | T[]) => (a instanceof Array ? a : [a]);\n\nexport const cx = (...classNames: (string | false | undefined | null | Record<string, boolean>)[]) =>\n classNames\n .flatMap((entry) => {\n if (!entry) return [];\n if (typeof entry === 'string') return [entry];\n return Object.entries(entry)\n .filter(([, predicate]) => predicate)\n .map(([className]) => className);\n })\n .join(' ');\n","import { castDraft } from 'immer';\nimport { useEffect } from 'react';\nimport { Store } from 'schummar-state/react';\nimport { castArray, flatMap, orderBy } from '../misc/helpers';\nimport { Id, InternalTableState, TableItem } from '../types';\n\nexport function calcItems<T>(state: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n state.addReaction(\n (state) =>\n [\n state.props.items,\n state.props.id,\n state.props.parentId,\n state.props.revealFiltered,\n state.props.externalSort,\n state.sort,\n state.filters,\n state.filterValues,\n state.activeColumns,\n state.expanded,\n ] as const,\n ([items = [], id, parentId, revealFiltered, externalSort, sort, filters, filterValues, activeColumns], draft) => {\n const tableItems = items.map<TableItem<T>>((item) => ({\n id: id(item),\n parentId: parentId?.(item),\n children: [],\n value: item,\n }));\n\n let sorted;\n if (sort.length === 0 || externalSort) {\n sorted = tableItems;\n } else {\n const selectors = flatMap(sort, (sort) => {\n const column = activeColumns.find((column) => column.id === sort.columnId);\n if (!column) return [];\n return column.sortBy.map((sortBy) => ({\n selector: (item: T) => sortBy(column.value(item), item),\n direction: sort.direction,\n }));\n }).filter(Boolean);\n\n sorted = orderBy(\n tableItems,\n selectors.map((x) => (item) => x.selector(item.value)),\n selectors.map((x) => x.direction),\n );\n }\n\n const lookup = new Map<Id, TableItem<T>>();\n for (const item of sorted) {\n lookup.set(item.id, item);\n }\n\n for (const item of sorted) {\n const parent = item.parentId !== undefined ? lookup.get(item.parentId) : undefined;\n parent?.children.push(item);\n }\n\n const allItems = new Array<TableItem<T>>();\n const allItemsById = new Map<Id, TableItem<T>>();\n\n const traverse = (items: TableItem<T>[]): void => {\n for (const item of items) {\n allItems.push(item);\n allItemsById.set(item.id, item);\n traverse(item.children);\n }\n };\n traverse(sorted.filter((item) => item.parentId === undefined));\n\n let expandedChanged = false;\n const activeItemsById = new Map<Id, TableItem<T>>();\n const activeSet = new Set<Id>();\n const activeItems = [...allItems]\n .reverse()\n .filter((item) => {\n let isActive = activeSet.has(item.id);\n\n isActive ||= activeColumns.every((column) => {\n const filter = filters.get(column.id);\n if (!filter || filter.external) return true;\n\n const filterValue = filterValues.get(column.id);\n if (filterValue === undefined || !filter.isActive(filterValue)) return true;\n\n const filterBy = filter.filterBy ?? ((x) => x);\n const value = filterBy(column.value(item.value), item.value);\n return castArray(value).some((value) => filter.test(filterValue, value));\n });\n\n if (isActive && item.parentId !== undefined) {\n if (\n revealFiltered &&\n Array.from(filters.entries()).some(([id, filter]) => {\n const filterValue = filterValues.get(id);\n return !!filter && filterValue !== undefined && filter.isActive(filterValue);\n })\n ) {\n expandedChanged ||= !draft.expanded.has(item.parentId);\n draft.expanded.add(item.parentId);\n } else if (!draft.expanded.has(item.parentId)) {\n isActive = false;\n }\n }\n\n if (isActive && item.parentId !== undefined) {\n activeSet.add(item.parentId);\n }\n if (isActive) {\n activeItemsById.set(item.id, item);\n }\n\n return isActive;\n })\n .reverse();\n\n draft.items = castDraft(allItems);\n draft.itemsById = castDraft(allItemsById);\n draft.activeItems = castDraft(activeItems);\n draft.activeItemsById = castDraft(activeItemsById);\n\n if (expandedChanged) {\n setTimeout(() => {\n state.getState().props.onExpandedChange?.(state.getState().expanded);\n });\n }\n },\n { runNow: true },\n ),\n [state],\n );\n}\n","import { useMemo } from 'react';\nimport { useTableMemo } from '../hooks/useTableMemo';\nimport { asString } from '../misc/helpers';\nimport { Column, Id, InternalColumn, InternalTableProps, TableProps } from '../types';\n\nconst noopParentId = () => undefined;\n\nexport function calcProps<T>(props: TableProps<T>): InternalTableProps<T> {\n const cache = useTableMemo();\n\n return useMemo(() => {\n let id;\n if (props.id instanceof Function || Array.isArray(props.id)) {\n id = cache('id', props.id);\n } else {\n id = cache('id', [(item: T) => item[props.id as keyof T] as unknown as Id, props.id]);\n }\n\n let parentId;\n if (props.parentId instanceof Function || Array.isArray(props.parentId)) {\n parentId = cache('parentId', props.parentId);\n } else if (props.parentId !== undefined) {\n parentId = cache('parentId', [(item: T) => item[props.parentId as keyof T] as unknown as Id | undefined, props.parentId]);\n } else {\n parentId = noopParentId;\n }\n\n let inputColumns;\n if (props.columns instanceof Function) {\n inputColumns = props.columns((value, column) => ({ ...column, value }));\n } else {\n inputColumns = props.columns.map((column) => ({ ...column, dependecies: undefined }));\n }\n\n const defCol = props.defaultColumnProps;\n const mapColumn = <V>(\n {\n id: _id,\n header = defCol?.header ?? null,\n footer = defCol?.footer ?? null,\n value,\n renderCell = defCol?.renderCell ?? asString,\n exportCell = defCol?.exportCell ?? asString,\n sortBy = defCol?.sortBy ?? [(v) => (typeof v === 'number' || v instanceof Date ? v : String(v))],\n disableSort,\n cannotHide = defCol?.cannotHide,\n classes = defCol?.classes,\n filter = defCol?.filter,\n width = defCol?.width,\n }: Column<T, V>,\n index: number,\n ): InternalColumn<T, V> => {\n const id = _id ?? index;\n const cacheKey = typeof id === 'string' ? `s${id}` : `n${id}`;\n\n return {\n id,\n header,\n footer,\n value: cache(`columns.${cacheKey}.value`, value),\n renderCell: cache(`columns.${cacheKey}.renderCell`, renderCell),\n exportCell,\n sortBy: sortBy.map((fn, i) => cache(`columns.${cacheKey}.sortBy.${i}`, fn)),\n disableSort,\n cannotHide,\n classes,\n filter,\n width,\n };\n };\n\n const columns = inputColumns.map(mapColumn);\n\n const wrapCell = props.wrapCell && cache('wrapCell', props.wrapCell);\n\n const rowAction =\n props.rowAction instanceof Function || Array.isArray(props.rowAction) ? cache('rowAction', props.rowAction) : props.rowAction;\n\n let copy;\n if (props.enableExport === true || (props.enableExport instanceof Object && props.enableExport.copy === true)) {\n copy = { separator: '\\t' };\n } else if (props.enableExport && props.enableExport.copy instanceof Object) {\n copy = props.enableExport.copy;\n }\n\n let download;\n if (props.enableExport === true || (props.enableExport instanceof Object && props.enableExport.download === true)) {\n download = { sepPrefix: true };\n } else if (props.enableExport && props.enableExport.download instanceof Object) {\n download = props.enableExport.download;\n }\n\n const enableExport = { copy, download };\n\n return {\n ...props,\n id,\n parentId,\n columns,\n wrapCell,\n rowAction,\n enableSelection: props.enableSelection ?? true,\n selectSyncChildren: props.selectSyncChildren ?? true,\n stickyHeader: props.stickyHeader ?? true,\n stickyFooter: props.stickyFooter ?? true,\n enableExport,\n enableColumnSelection: props.enableColumnSelection ?? true,\n enableClearFiltersButton: props.enableClearFiltersButton ?? false,\n enableColumnResize: props.enableColumnResize ?? true,\n enableColumnReorder: props.enableColumnReorder ?? true,\n };\n }, [props]);\n}\n","import { useEffect } from 'react';\nimport { Store } from 'schummar-state/react';\nimport { intersect } from '../misc/helpers';\nimport { InternalTableState } from '../types';\n\nexport function cleanupState<T>(state: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n state.addReaction(\n (state) => [state.props.columns, state.itemsById, state.activeItemsById, state.activeColumns] as const,\n ([columns, itemsById, activeItemsById, activeColumns], draft) => {\n const columnIds = new Set(columns.map((column) => column.id));\n const activeColumnIds = new Set(activeColumns.map((column) => column.id));\n\n // Remove sort entries for non active columns\n const newSort = draft.sort.filter((s) => activeColumnIds.has(s.columnId));\n if (newSort.length < draft.sort.length) {\n draft.sort = newSort;\n setTimeout(() => {\n state.getState().props.onSortChange?.(newSort);\n });\n }\n\n // Remove filters for non active columns\n for (const id of draft.filters.keys()) {\n if (!activeColumnIds.has(id)) draft.filters.delete(id);\n }\n\n // Remove filterValues for non active columns\n for (const id of draft.filterValues.keys()) {\n if (!activeColumnIds.has(id)) draft.filterValues.delete(id);\n }\n\n // Remove hiddenColumns for non existing columns\n for (const id of draft.hiddenColumns.keys()) {\n if (!columnIds.has(id)) draft.hiddenColumns.delete(id);\n }\n\n // Remove columnWidth for non existing columns\n for (const id of draft.columnWidths.keys()) {\n if (!columnIds.has(id)) draft.columnWidths.delete(id);\n }\n\n // Remove non existing columns from columnOrder\n for (const id of draft.columnOrder) {\n if (!columnIds.has(id)) draft.columnOrder = draft.columnOrder.filter((x) => x !== id);\n }\n\n if (draft.props.items) {\n // Remove selection for non active items\n const newSelection = intersect(draft.selection, activeItemsById);\n if (newSelection.size !== draft.selection.size) {\n draft.selection = newSelection;\n setTimeout(() => {\n state.getState().props.onSelectionChange?.(newSelection);\n });\n }\n\n // Remove expanded for non existing items\n const newExpanded = intersect(draft.expanded, itemsById);\n if (newExpanded.size < draft.expanded.size) {\n draft.expanded = newExpanded;\n setTimeout(() => {\n state.getState().props.onExpandedChange?.(newExpanded);\n });\n }\n }\n },\n { runNow: true },\n ),\n [state],\n );\n}\n","import { useEffect } from 'react';\nimport { Store } from 'schummar-state/react';\nimport { orderBy } from '../misc/helpers';\nimport { InternalTableState } from '../types';\n\nexport function filterColumns<T>(state: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n state.addReaction(\n (state) => [state.props.columns, state.hiddenColumns, state.columnOrder] as const,\n ([columns, hiddenColumns, columnOrder], draft) => {\n draft.activeColumns = orderBy(\n columns.filter((column) => !hiddenColumns.has(column.id)),\n [(column) => columnOrder.indexOf(column.id)],\n );\n },\n { runNow: true },\n ),\n [state],\n );\n}\n","import { useEffect } from 'react';\nimport { Store } from 'schummar-state/react';\nimport { getAncestors, orderBy } from '../misc/helpers';\nimport { Id, InternalTableState } from '../types';\n\nexport function normalizeExpanded<T>(table: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n table.addReaction(\n (state) => [state.props.expandOnlyOne, state.expanded, state.itemsById] as const,\n ([expandOnlyOne, , itemsById], state) => {\n let expanded = state.expanded;\n let hasChanged = false;\n\n const allAncestors = [...expanded].map((id) => {\n const item = itemsById.get(id);\n return {\n id,\n ancestors: item ? getAncestors(itemsById, item) : new Set<Id>(),\n };\n });\n\n // If only one branch may be expanded, check if there are more and close if necessary\n if (expandOnlyOne) {\n const withMostAncestors = orderBy(allAncestors, [(x) => x.ancestors.size], ['desc'])[0];\n\n if ([...expanded].some((id) => id !== withMostAncestors?.id && !withMostAncestors?.ancestors.has(id))) {\n expanded = state.expanded = withMostAncestors?.ancestors ?? new Set();\n\n state.props.onExpandedChange?.(expanded);\n return;\n }\n }\n\n for (const { ancestors } of allAncestors) {\n for (const ancestor of ancestors ?? []) {\n if (!expanded.has(ancestor)) {\n expanded.add(ancestor);\n hasChanged = true;\n }\n }\n }\n\n if (hasChanged) {\n state.props.onExpandedChange?.(new Set(expanded));\n }\n },\n { runNow: true },\n ),\n [table],\n );\n}\n","import { useEffect } from 'react';\nimport { Store } from 'schummar-state/react';\nimport { InternalTableState } from '../types';\n\nexport function syncSelections<T>(table: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n table.addReaction(\n (state) => [state.props.selectSyncChildren, state.selection, state.activeItems] as const,\n ([selectSyncChildren, selection, activeItems], state) => {\n if (!selectSyncChildren) return;\n\n const newSelection = new Set(selection);\n for (const item of activeItems) {\n if (item.parentId !== undefined && newSelection.has(item.parentId)) {\n newSelection.add(item.id);\n }\n }\n\n if (newSelection.size !== selection.size) {\n state.selection = newSelection;\n setTimeout(() => {\n table.getState().props.onSelectionChange?.(newSelection);\n });\n }\n },\n { runNow: true },\n ),\n [table],\n );\n}\n","import { castDraft } from 'immer';\nimport { useEffect, useMemo, useState } from 'react';\nimport { Store } from 'schummar-state/react';\nimport { InternalTableState, TableProps } from '../types';\nimport { calcItems } from './calcItems';\nimport { calcProps } from './calcProps';\nimport { cleanupState } from './cleanupState';\nimport { filterColumns } from './filterColumns';\nimport { normalizeExpanded } from './normalizeExpanded';\nimport { syncSelections } from './syncSelections';\n\nexport function useTableState<T>(_props: TableProps<T>): [Store<InternalTableState<T>>, () => void] {\n const [key, setKey] = useState({});\n const props = calcProps(_props);\n\n function reset() {\n setKey({});\n\n if (props.sort === undefined) {\n props.onSortChange?.(props.defaultSort ?? []);\n }\n\n if (props.expanded === undefined) {\n props.onExpandedChange?.(props.defaultExpanded ?? new Set());\n }\n\n if (props.selection === undefined) {\n props.onSelectionChange?.(props.defaultSelection ?? new Set());\n }\n\n if (props.hiddenColumns === undefined) {\n props.onHiddenColumnsChange?.(props.defaultHiddenColumns ?? new Set());\n }\n\n props.onReset?.();\n }\n\n const state = useMemo(\n () =>\n new Store<InternalTableState<T>>({\n props,\n\n key,\n sort: props.defaultSort ?? [],\n selection: props.defaultSelection ?? new Set(),\n expanded: props.defaultExpanded ?? new Set(),\n rowHeights: new Map(),\n filters: new Map(),\n filterValues: new Map(),\n hiddenColumns: props.defaultHiddenColumns ?? new Set(),\n columnWidths: new Map(),\n columnOrder: props.columns.map((column) => column.id),\n columnStyleOverride: new Map(),\n\n activeColumns: [],\n items: [],\n itemsById: new Map(),\n activeItems: [],\n activeItemsById: new Map(),\n lastSelectedId: undefined,\n }),\n [key],\n );\n\n filterColumns(state);\n calcItems(state);\n normalizeExpanded(state);\n syncSelections(state);\n cleanupState(state);\n\n useEffect(() => {\n state.update((state) => {\n state.props = castDraft(props);\n if (props.sort) state.sort = props.sort;\n if (props.selection) state.selection = props.selection;\n if (props.expanded) state.expanded = props.expanded;\n if (props.hiddenColumns) state.hiddenColumns = props.hiddenColumns;\n for (const column of props.columns) {\n if (!state.columnOrder.includes(column.id)) {\n const index = props.columns.indexOf(column);\n state.columnOrder.splice(index, 0, column.id);\n }\n }\n });\n }, [state, props]);\n\n return [state, reset];\n}\n","import { useTheme } from '../hooks/useTheme';\n\nexport function useCssVariables() {\n return useTheme(({ spacing, colors }) => ({\n '--spacing': spacing,\n '--primaryMain': colors.primary.main,\n '--primaryLight': colors.primary.light,\n '--primaryContrastText': colors.primary.contrastText,\n '--secondaryMain': colors.secondary.main,\n '--secondaryLight': colors.secondary.light,\n '--secondaryContrastText': colors.secondary.contrastText,\n }));\n}\n","import React from 'react';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { useTableContext, useTheme } from '..';\n\nexport default function ClearFiltersButton<T>() {\n const Button = useTheme((t) => t.components.Button);\n const textClearFilters = useTheme((t) => t.text.clearFilters);\n const table = useTableContext<T>();\n\n return (\n <div css={defaultClasses.clearFiltersButton}>\n <Button\n variant=\"outlined\"\n onClick={() => {\n table.update((state) => {\n state.activeColumns.forEach((column) => {\n state.filterValues.delete(column.id);\n });\n });\n }}\n >\n {textClearFilters}\n </Button>\n </div>\n );\n}\n","import { useTheme } from '../hooks/useTheme';\nimport { cx } from '../misc/helpers';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { useColumnContext, useTableContext } from './table';\n\nexport function ColumnFooter() {\n const table = useTableContext();\n const columnId = useColumnContext();\n const stickyFooter = table.useState('props.stickyFooter');\n const columnStyleOverride = table.useState((state) => state.columnStyleOverride.get(columnId), { throttle: 16 });\n const columnClasses = table.useState((state) => state.activeColumns.find((column) => column.id === columnId)?.classes);\n const classes = useTheme((theme) => theme.classes);\n\n const content = table.useState((state) => {\n const column = state.activeColumns.find((column) => column.id === columnId);\n\n return column?.footer;\n });\n\n return (\n <div\n className={cx(classes?.footerCell, columnClasses?.footerCell)}\n css={[\n defaultClasses.footerCell,\n columnStyleOverride,\n stickyFooter && defaultClasses.stickyBottom,\n stickyFooter instanceof Object && stickyFooter,\n ]}\n >\n {content}\n </div>\n );\n}\n","import { createContext, useMemo, useState } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport { useColumnContext, useTableContext } from './table';\n\nexport const FilterControlContext = createContext({\n isActive: false,\n close: (): void => void 0,\n});\n\nexport function FilterControl<T>(): JSX.Element | null {\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n const IconButton = useTheme((t) => t.components.IconButton);\n const Popover = useTheme((t) => t.components.Popover);\n const FilterList = useTheme((t) => t.icons.FilterList);\n const ArrowDropDown = useTheme((t) => t.icons.ArrowDropDown);\n const cssVariables = useCssVariables();\n\n const [anchor, setAnchor] = useState<Element | null>(null);\n const isActive = table.useState((state) => {\n const filter = state.filters.get(columnId);\n const filterValue = state.filterValues.get(columnId);\n return filter !== undefined && filterValue !== undefined && filter.isActive(filterValue);\n });\n const filterClassNames = table.useState((state) => {\n const filter = state.filters.get(columnId);\n return filter?.classNames;\n });\n const filter = table.useState((state) => state.activeColumns.find((column) => column.id === columnId)?.filter);\n\n function reset() {\n table.update((state) => {\n const impl = state.filters.get(columnId);\n\n impl?.onChange?.(undefined);\n\n if (impl?.value !== undefined) {\n state.filterValues.delete(columnId);\n }\n });\n }\n\n const context = useMemo(\n () => ({\n isActive: !!anchor,\n close: () => setAnchor(null),\n }),\n [!!anchor],\n );\n\n if (!filter) return null;\n\n return (\n <FilterControlContext.Provider value={context}>\n <div\n onClick={(e) => setAnchor(e.currentTarget)}\n onContextMenu={(e) => {\n reset();\n e.preventDefault();\n return false;\n }}\n >\n <IconButton\n css={[\n { color: '#b0bac9' },\n isActive && {\n color: 'var(--primaryMain) !important',\n },\n ]}\n >\n {isActive ? <FilterList /> : <ArrowDropDown />}\n </IconButton>\n </div>\n\n <div\n onPointerDown={(e) => {\n e.stopPropagation();\n }}\n onPointerMove={(e) => {\n e.stopPropagation();\n }}\n >\n <Popover\n open\n hidden={!anchor}\n onClose={() => setAnchor(null)}\n anchorEl={anchor ?? document.body}\n css={cssVariables}\n className={filterClassNames?.popover}\n backdropClassName={filterClassNames?.popoverBackdrop}\n >\n {filter}\n </Popover>\n </div>\n </FilterControlContext.Provider>\n );\n}\n","import React, { HTMLProps } from 'react';\nimport { useColumnContext, useTableContext } from '..';\n\nexport function ResizeHandle() {\n const table = useTableContext();\n const columnId = useColumnContext();\n const enabled = table.useState('props.enableColumnResize');\n\n function onPointerDown(e: React.PointerEvent) {\n e.stopPropagation();\n\n const div = e.target as HTMLDivElement;\n div.setPointerCapture(e.pointerId);\n }\n\n function onPointerMove(e: React.PointerEvent) {\n e.stopPropagation();\n\n const div = e.target as HTMLDivElement;\n if (!div.hasPointerCapture(e.pointerId)) return;\n\n const parent = div.parentElement as HTMLDivElement;\n const width = Math.max(e.clientX - parent.getBoundingClientRect().left + 5, 50);\n\n table.update((state) => {\n state.columnWidths.set(columnId, `${width}px`);\n });\n }\n\n function onPointerUp(e: React.PointerEvent) {\n e.stopPropagation();\n\n const div = e.target as HTMLDivElement;\n div.releasePointerCapture(e.pointerId);\n }\n\n function onDoubleClick(e: React.MouseEvent) {\n table.update((state) => {\n if (e.getModifierState('Control')) {\n state.columnWidths.delete(columnId);\n } else {\n state.columnWidths.set(columnId, 'max-content');\n }\n });\n }\n\n return (\n <ResizeHandleView\n enabled={enabled}\n onPointerDown={enabled ? onPointerDown : undefined}\n onPointerMove={enabled ? onPointerMove : undefined}\n onPointerUp={enabled ? onPointerUp : undefined}\n onDoubleClick={enabled ? onDoubleClick : undefined}\n />\n );\n}\n\nexport function ResizeHandleView({ enabled, ...props }: HTMLProps<HTMLDivElement> & { enabled?: boolean }) {\n return (\n <div\n css={{\n alignSelf: 'stretch',\n padding: '0 5px',\n cursor: enabled ? 'col-resize' : 'initial',\n display: 'flex',\n alignItems: 'center',\n\n '&:after': {\n content: '\"\"',\n width: 1,\n height: '1.5em',\n background: '#c9cfda',\n transition: 'transform 300ms',\n },\n }}\n {...props}\n />\n );\n}\n","import React, { ReactNode } from 'react';\nimport { useTheme } from '..';\nimport { useColumnContext, useTableContext } from './table';\n\nexport function SortComponent<T>({ children }: { children: ReactNode }): JSX.Element {\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n const Badge = useTheme((t) => t.components.Badge);\n const ArrowUpward = useTheme((t) => t.icons.ArrowUpward);\n\n const { direction, index, sortDisabled } = table.useState((state) => {\n const index = state.sort.findIndex((s) => s.columnId === columnId) ?? -1;\n const column = state.activeColumns.find((column) => column.id === columnId);\n\n return {\n direction: state.sort[index]?.direction,\n index: index >= 0 && state.sort.length > 1 ? index + 1 : undefined,\n sortDisabled: column?.disableSort ?? state.props.disableSort,\n };\n });\n\n function toggle(e: React.MouseEvent, off?: boolean) {\n if (sortDisabled) {\n return;\n }\n\n const {\n props: { sort: controlledSort, onSortChange },\n } = table.getState();\n\n const newDirection = direction === 'asc' ? 'desc' : 'asc';\n const newSort = e.getModifierState('Control') || off ? table.getState().sort.filter((s) => s.columnId !== columnId) : [];\n if (!off) {\n newSort.push({\n columnId,\n direction: newDirection,\n });\n }\n\n onSortChange?.(newSort);\n\n if (!controlledSort) {\n table.update((state) => {\n state.sort = newSort;\n });\n }\n\n e.preventDefault();\n return false;\n }\n\n return (\n <div\n css={{\n userSelect: 'none',\n display: 'grid',\n gridTemplateColumns: 'minmax(0, 1fr) max-content',\n alignItems: 'center',\n cursor: 'pointer',\n\n '& > div': {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n }}\n onClick={(e) => toggle(e)}\n onContextMenu={(e) => toggle(e, true)}\n >\n <div>{children}</div>\n\n {\n <Badge badgeContent={sortDisabled ? 0 : index}>\n <span\n css={[\n { transition: 'all 300ms', fontSize: '0.8em' },\n !direction && { opacity: 0 },\n direction === 'desc' && { transform: 'rotate3d(0, 0, 1, 180deg)' },\n ]}\n >\n <ArrowUpward />\n </span>\n </Badge>\n }\n </div>\n );\n}\n","import { castDraft } from 'immer';\nimport React, { useEffect, useRef } from 'react';\nimport { StoreScope } from 'schummar-state/react';\nimport { Id, useColumnContext, useTableContext } from '..';\nimport { useTheme } from '../hooks/useTheme';\nimport { cx } from '../misc/helpers';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { FilterControl } from './filterControl';\nimport { ResizeHandle } from './resizeHandle';\nimport { SortComponent } from './sortComponent';\n\nexport const ColumnHeaderContext = new StoreScope({\n items: new Map<Id, HTMLDivElement>(),\n});\n\nexport function ColumnHeader() {\n const ref = useRef<HTMLDivElement>(null);\n const columnId = useColumnContext();\n const table = useTableContext();\n const enabled = table.useState('props.enableColumnReorder');\n const columnStyleOverride = table.useState((state) => state.columnStyleOverride.get(columnId), { throttle: 16 });\n const stickyHeader = table.useState('props.stickyHeader');\n const classes = useTheme((theme) => theme.classes);\n\n const { header, columnClasses } = table.useState((state) => {\n const column = state.activeColumns.find((column) => column.id === columnId);\n return {\n header: column?.header,\n columnClasses: column?.classes,\n };\n });\n\n const store = ColumnHeaderContext.useStore();\n const draggingStart = useRef<{ mouseX: number; bounds: DOMRect }>();\n const clone = useRef<HTMLDivElement>();\n\n // Track each headers div in a store\n useEffect(() => {\n const div = ref.current;\n if (!div) return;\n\n store.update((state) => {\n state.items.set(columnId, castDraft(div));\n });\n\n return () => {\n store.update((state) => {\n state.items.delete(columnId);\n });\n };\n }, [ref.current, store, columnId]);\n\n // Calculate which index the current header would get, given the current offset\n function calcTargetIndex(offsetLeft: number) {\n const cols = table.getState().columnOrder.map((id) => ({ id, div: store.getState().items.get(id) }));\n\n const otherCols = cols.filter((col) => col.id !== columnId);\n\n const firstOffsetleft = cols.find((col) => col.div)?.div?.offsetLeft ?? 0;\n\n let sum = 0;\n const targetIndex = otherCols.findIndex((col) => {\n const width = col.div?.offsetWidth ?? 0;\n if (sum + width / 2 > offsetLeft - firstOffsetleft) return true;\n sum += width;\n return false;\n });\n\n return targetIndex === -1 ? otherCols.length : targetIndex;\n }\n\n // When starting clicking: Record initial mouse and div's bounds\n function onPointerDown(e: React.PointerEvent) {\n const div = ref.current;\n if (!div) return;\n draggingStart.current = { mouseX: e.clientX, bounds: div.getBoundingClientRect() };\n }\n\n // When mouse moves while clicked: Calculate transforms\n function onPointerMove(e: React.PointerEvent) {\n table.update((state) => {\n const div = ref.current;\n if (!div || draggingStart.current === undefined || Math.abs(e.clientX - draggingStart.current.mouseX) < 5) return;\n\n e.stopPropagation();\n div.setPointerCapture(e.pointerId);\n\n // Create clone of header div to move around with mouse\n if (!clone.current) {\n clone.current = div.cloneNode(true) as HTMLDivElement;\n document.body.append(clone.current);\n\n for (const [key, value] of Object.entries(getComputedStyle(div))) {\n try {\n clone.current.style[key as any] = value;\n } catch {\n // ignore\n }\n }\n\n Object.assign(clone.current.style, {\n pointerEvents: 'none',\n position: 'fixed',\n boxShadow: '0px 5px 5px -3px rgb(0 0 0 / 20%), 0px 8px 10px 1px rgb(0 0 0 / 14%), 0px 3px 14px 2px rgb(0 0 0 / 12%)',\n left: `${draggingStart.current.bounds.left}px`,\n top: `${draggingStart.current.bounds.top}px`,\n });\n\n div.style.color = 'rgba(0, 0, 0, 0.2)';\n }\n\n // Update clone's position each time\n clone.current.style.left = `${draggingStart.current.bounds.left + e.clientX - draggingStart.current.mouseX}px`;\n\n // Calculate target index\n const index = state.columnOrder.indexOf(columnId);\n const targetIndex = calcTargetIndex(div.offsetLeft + e.clientX - draggingStart.current.mouseX);\n\n // Apply transforms to each column\n const columns = table\n .getState()\n .columnOrder.map((id, index) => ({ id, index, width: store.getState().items.get(id)?.offsetWidth ?? 0 }));\n\n state.columnOrder.forEach((id, i) => {\n let offset = 0;\n if (i === index) {\n // Current column: Move to target pos\n if (targetIndex > index) {\n offset = columns.slice(index + 1, targetIndex + 1).reduce((sum, col) => sum + col.width, 0);\n } else if (targetIndex < index) {\n offset = -columns.slice(targetIndex, index).reduce((sum, col) => sum + col.width, 0);\n }\n } else if (i >= targetIndex && i < index) {\n // Left columns: Move right to make room if needed\n offset = div.offsetWidth;\n } else if (i > index && i <= targetIndex) {\n // Right columns: Move left to make room if needed\n offset = -div.offsetWidth;\n }\n\n state.columnStyleOverride.set(id, {\n transition: 'transform 500ms',\n transform: `translate3d(${offset}px, 0, 0)`,\n zIndex: i === index ? 1 : undefined,\n });\n });\n });\n }\n\n // When releasing mouse: Reset draggin state and apply column move\n function onPointerUp(e: React.PointerEvent) {\n table.update((state) => {\n const div = ref.current;\n if (!div || draggingStart.current === undefined) return;\n\n // Apply column move\n const index = state.columnOrder.indexOf(columnId);\n const targetIndex = calcTargetIndex(div.offsetLeft + e.clientX - draggingStart.current.mouseX);\n\n state.columnOrder.splice(index, 1);\n state.columnOrder.splice(targetIndex, 0, columnId);\n\n // Cleanup\n clone.current?.remove();\n div.style.color = '';\n state.columnStyleOverride.clear();\n draggingStart.current = undefined;\n clone.current = undefined;\n });\n }\n\n return (\n <div\n ref={ref}\n className={cx(classes?.headerCell, columnClasses?.headerCell)}\n css={[\n {\n position: 'relative',\n userSelect: 'none',\n },\n defaultClasses.headerCell,\n columnStyleOverride,\n stickyHeader && defaultClasses.sticky,\n stickyHeader instanceof Object && stickyHeader,\n ]}\n onPointerDown={enabled ? onPointerDown : undefined}\n onPointerMove={enabled ? onPointerMove : undefined}\n onPointerUp={enabled ? onPointerUp : undefined}\n >\n <SortComponent>{header}</SortComponent>\n <div css={{ flex: 1 }} />\n <FilterControl />\n <ResizeHandle />\n </div>\n );\n}\n","import { ReactNode } from 'react';\n\nexport function FormControlLabel({ control, label, disabled }: { control: ReactNode; label: ReactNode; disabled?: boolean }) {\n return (\n <label\n css={[\n {\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n userSelect: 'none',\n\n '& > *': {\n cursor: 'pointer',\n },\n },\n disabled && { color: 'rgba(0, 0, 0, 0.26)' },\n ]}\n >\n {control}\n <span css={{ marginLeft: 'var(--spacing)' }}>{label}</span>\n </label>\n );\n}\n","import React, { useContext, useState } from 'react';\nimport { useTheme } from '..';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport { InternalColumn } from '../types';\nimport { FormControlLabel } from './formControlLabel';\nimport { TableResetContext, useTableContext } from './table';\n\nexport function ColumnSelection<T>(): JSX.Element {\n const IconButton = useTheme((t) => t.components.IconButton);\n const Popover = useTheme((t) => t.components.Popover);\n const Checkbox = useTheme((t) => t.components.Checkbox);\n const Button = useTheme((t) => t.components.Button);\n const Settings = useTheme((t) => t.icons.Settings);\n const selectColumns = useTheme((t) => t.text.selectColumns);\n const resetAll = useTheme((t) => t.text.resetAll);\n const cssVariables = useCssVariables();\n\n const table = useTableContext<T>();\n const reset = useContext(TableResetContext);\n const columns = table.useState('props.columns');\n const hiddenColumns = table.useState('hiddenColumns');\n\n const [anchorEl, setAnchorEl] = useState<Element | null>(null);\n\n const toggle = (column: InternalColumn<T, unknown>) => {\n const {\n props: { hiddenColumns: controlledHiddenColumns, onHiddenColumnsChange },\n } = table.getState();\n\n const newValue = new Set(hiddenColumns);\n if (hiddenColumns.has(column.id)) newValue.delete(column.id);\n else newValue.add(column.id);\n\n if (!controlledHiddenColumns) {\n table.update((state) => {\n state.hiddenColumns = newValue;\n });\n }\n\n onHiddenColumnsChange?.(newValue);\n };\n\n return (\n <>\n <IconButton onClick={(e) => setAnchorEl(anchorEl ? null : e.currentTarget)}>\n <Settings />\n </IconButton>\n\n <Popover anchorEl={anchorEl} open={!!anchorEl} onClose={() => setAnchorEl(null)} css={cssVariables}>\n <div css={{ padding: `calc(var(--spacing) * 2)`, display: 'grid' }}>\n <div css={{ marginBottom: 'var(--spacing)' }}>{selectColumns}</div>\n\n {columns.map((column) => (\n <FormControlLabel\n key={column.id}\n control={<Checkbox checked={!hiddenColumns.has(column.id)} onChange={() => toggle(column)} disabled={column.cannotHide} />}\n label={column.header}\n ></FormControlLabel>\n ))}\n\n <Button variant=\"outlined\" onClick={reset}>\n {resetAll}\n </Button>\n </div>\n </Popover>\n </>\n );\n}\n","export type CsvExportOptions = { sepPrefix?: boolean; separator?: string; quote?: string; eol?: string };\n\nexport function csvExport(\n data: (string | number)[][],\n { sepPrefix, separator = ',', quote = '\"', eol = '\\n' }: CsvExportOptions = {},\n): string {\n const cells = data.map((line) =>\n line.map((value) => {\n if (typeof value === 'number') return String(value);\n if (![separator, quote, eol].some((c) => value.includes(c))) return value;\n\n const clean = value.replace(new RegExp(quote, 'g'), `${quote}${quote}`);\n return `${quote}${clean}${quote}`;\n }),\n );\n\n return (sepPrefix ? `SEP=${separator}\\n` : '') + cells.map((line) => line.join(separator)).join(eol);\n}\n","import React, { useState } from 'react';\nimport { useTheme } from '..';\nimport { csvExport, CsvExportOptions } from '../misc/csvExport';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport { useTableContext } from './table';\n\nexport function Export<T>(): JSX.Element {\n const table = useTableContext<T>();\n const Button = useTheme((t) => t.components.Button);\n const IconButton = useTheme((t) => t.components.IconButton);\n const Popover = useTheme((t) => t.components.Popover);\n const Export = useTheme((t) => t.icons.Export);\n const Clipboard = useTheme((t) => t.icons.Clipboard);\n const exportTitle = useTheme((t) => t.text.exportTitle);\n const exportCopy = useTheme((t) => t.text.exportCopy);\n const exportDownload = useTheme((t) => t.text.exportDownload);\n const cssVariables = useCssVariables();\n\n const [anchor, setAnchor] = useState<Element | null>(null);\n\n const generate = (options?: CsvExportOptions) => {\n const { activeColumns, activeItems } = table.getState();\n\n const data = [\n activeColumns.map((column) => String(column.id)),\n ...activeItems.map((item) => activeColumns.map((column) => column.exportCell(column.value(item.value), item.value))),\n ];\n return csvExport(data, options);\n };\n\n const copy = () => {\n navigator.clipboard.writeText(generate(table.getState().props.enableExport.copy));\n };\n\n const download = () => {\n const a = document.createElement('a');\n a.href = 'data:text/csv;charset=utf-8,' + encodeURIComponent(generate(table.getState().props.enableExport.download));\n a.download = 'export.csv';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n };\n\n return (\n <>\n <IconButton onClick={(e) => setAnchor(anchor ? null : e.currentTarget)}>\n <Export css={!!anchor && { color: 'var(--primaryMain)' }} />\n </IconButton>\n\n <Popover open={!!anchor} onClose={() => setAnchor(null)} anchorEl={anchor} css={cssVariables}>\n <div\n css={{\n padding: `calc(var(--spacing) * 2)`,\n display: 'grid',\n justifyItems: 'stretch',\n gap: 'var(--spacing)',\n\n '& > *': {\n justifyContent: 'start',\n },\n }}\n >\n <div css={{ marginBottom: 'var(--spacing)' }}>{exportTitle}</div>\n <Button startIcon={<Clipboard />} onClick={copy}>\n {exportCopy}\n </Button>\n <Button startIcon={<Export />} onClick={download}>\n {exportDownload}\n </Button>\n </div>\n </Popover>\n </>\n );\n}\n","import React, { memo, ReactNode, useLayoutEffect } from 'react';\nimport { Id, useColumnContext, useTableContext, useTheme } from '..';\nimport { cx } from '../misc/helpers';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { calcClassNames } from './row';\n\nconst defaultWrapCell = (content: ReactNode) => {\n if (typeof content === 'string') {\n return (\n <span css={defaultClasses.text} title={content}>\n {content}\n </span>\n );\n }\n return content;\n};\n\nexport const Cell = memo(function Cell<T>({ itemId, rowIndex }: { itemId: Id; rowIndex: number }) {\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n\n const column = table.useState((state) => {\n const col = state.activeColumns.find((column) => column.id === columnId);\n return (\n col && {\n value: col.value,\n renderCell: col.renderCell,\n }\n );\n });\n const wrapCell = table.useState((state) => state.props.wrapCell) ?? defaultWrapCell;\n const item = table.useState((state) => state.activeItemsById.get(itemId));\n const columnStyleOverride = table.useState((state) => state.columnStyleOverride.get(columnId), { throttle: 16 });\n\n useLayoutEffect(() => table.getState().props.debugRender?.('render cell', itemId, columnId));\n const className = useTheme((t) => cx(...calcClassNames(t.classes, item, rowIndex)));\n\n if (!column || !item) return null;\n\n const content = column.renderCell(column.value(item.value), item.value);\n\n return (\n <div className={className} css={[defaultClasses.cell, columnStyleOverride]}>\n {wrapCell(content, column.value(item.value), item.value, rowIndex)}\n </div>\n );\n});\n","import React from 'react';\nimport { useTheme } from '..';\nimport { getAncestors } from '../misc/helpers';\nimport { Id } from '../types';\nimport { useTableContext } from './table';\n\nexport function ExpandControl<T>({ itemId, hasDeferredChildren }: { itemId: Id; hasDeferredChildren?: boolean }): JSX.Element {\n const IconButton = useTheme((t) => t.components.IconButton);\n const Spinner = useTheme((t) => t.components.Spinner);\n const ChevronRight = useTheme((t) => t.icons.ChevronRight);\n\n const table = useTableContext<T>();\n const isExpanded = table.useState((state) => state.expanded.has(itemId));\n const hasChildren = table.useState((state) => !!state.activeItemsById.get(itemId)?.children.length);\n\n function toggle() {\n const {\n props: { expanded: controlledExpanded, expandOnlyOne, onExpandedChange },\n expanded,\n activeItemsById,\n } = table.getState();\n\n const newExpanded = new Set(expanded);\n\n if (expandOnlyOne) {\n newExpanded.clear();\n\n const item = activeItemsById.get(itemId);\n for (const ancestor of item ? getAncestors(activeItemsById, item) : []) {\n newExpanded.add(ancestor);\n }\n }\n\n if (isExpanded) {\n newExpanded.delete(itemId);\n } else {\n newExpanded.add(itemId);\n }\n\n onExpandedChange?.(newExpanded);\n\n if (!controlledExpanded) {\n table.update((state) => {\n state.expanded = newExpanded;\n });\n }\n }\n\n if (isExpanded && hasDeferredChildren && !hasChildren) {\n return <Spinner css={{ margin: '0 var(--spacing)' }} />;\n }\n\n return (\n <IconButton onClick={toggle}>\n <span\n css={{\n display: 'inline-flex',\n transition: 'all 300ms',\n transform: isExpanded ? 'rotate3d(0, 0, 1, 90deg)' : 'rotate3d(0, 0, 1, 0deg)',\n }}\n >\n <ChevronRight />\n </span>\n </IconButton>\n );\n}\n","import React from 'react';\nimport { useTheme } from '..';\nimport { getAncestors, getDescendants } from '../misc/helpers';\nimport { Id } from '../types';\nimport { useTableContext } from './table';\n\nexport function SelectComponent<T>({ itemId }: { itemId?: Id }): JSX.Element {\n const table = useTableContext<T>();\n const Checkbox = useTheme((t) => t.components.Checkbox);\n\n const isSelected = table.useState((state) => {\n const itemIds = itemId ? [itemId] : Array.from(state.activeItemsById.keys());\n return state.activeItemsById.size > 0 && itemIds.every((itemId) => state.selection.has(itemId));\n });\n\n function toggle(e: React.ChangeEvent) {\n const mouseEvent = e.nativeEvent as MouseEvent;\n\n const {\n activeItems,\n activeItemsById,\n lastSelectedId,\n selection,\n props: { selectSyncChildren, selection: controlledSelection, onSelectionChange },\n } = table.getState();\n\n let range;\n if (mouseEvent.shiftKey && itemId) {\n const a = lastSelectedId ? activeItems.findIndex((i) => lastSelectedId === i.id) : 0;\n const b = activeItems.findIndex((item) => item.id === itemId);\n range = activeItems.slice(Math.min(a, b), Math.max(a, b) + 1);\n } else {\n const item = itemId ? activeItemsById.get(itemId) : undefined;\n range = item ? [item] : activeItems;\n }\n\n const newSelection = new Set(selection);\n for (const item of range) {\n if (isSelected) newSelection.delete(item.id);\n else newSelection.add(item.id);\n }\n\n if (selectSyncChildren && isSelected) {\n for (const ancestor of getAncestors(activeItemsById, ...range)) {\n newSelection.delete(ancestor);\n }\n for (const descendant of getDescendants(...range)) {\n newSelection.delete(descendant);\n }\n }\n\n onSelectionChange?.(newSelection);\n\n if (!controlledSelection) {\n table.update((state) => {\n state.selection = newSelection;\n });\n }\n\n table.update((state) => {\n state.lastSelectedId = itemId;\n });\n }\n\n return (\n <Checkbox\n css={{\n justifySelf: 'start',\n color: '#c9cfda',\n }}\n checked={isSelected}\n onChange={toggle}\n />\n );\n}\n","import React, { memo, useEffect, useLayoutEffect, useRef } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { cx, getAncestors } from '../misc/helpers';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { Id, MemoizedTableTheme } from '../types';\nimport { Cell } from './cell';\nimport { ExpandControl } from './expandControl';\nimport { SelectComponent } from './selectComponent';\nimport { ColumnContext, useTableContext } from './table';\n\nexport function calcClassNames<T>(classes: MemoizedTableTheme<any>['classes'] | undefined, item: T, index: number) {\n return [\n classes?.cell instanceof Function ? classes.cell(item, index) : classes?.cell,\n index % 2 === 0 && classes?.evenCell,\n index % 2 === 1 && classes?.oddCell,\n ];\n}\n\nexport const Row = memo(function Row<T>({ itemId, rowIndex }: { itemId: Id; rowIndex: number }): JSX.Element | null {\n const table = useTableContext<T>();\n const divRef = useRef<HTMLDivElement>(null);\n\n const classes = useTheme((t) => t.classes);\n\n const { className, indent, hasChildren, hasDeferredChildren, columnIds, enableSelection, rowAction } = table.useState((state) => {\n const item = state.activeItemsById.get(itemId);\n\n return {\n className: cx(...calcClassNames(classes, item, rowIndex)),\n indent: item ? getAncestors(state.activeItemsById, item).size : 0,\n hasChildren: !!item?.children.length,\n hasDeferredChildren: item && state.props.hasDeferredChildren?.(item.value),\n columnIds: state.activeColumns.map((column) => column.id),\n enableSelection: state.props.enableSelection,\n rowAction:\n state.props.rowAction instanceof Function ? (item ? state.props.rowAction(item.value, rowIndex) : null) : state.props.rowAction,\n };\n });\n\n useEffect(() => {\n const div = divRef.current;\n if (!div) return;\n\n const o = new ResizeObserver(() => {\n if (!document.contains(div)) return;\n table.update((state) => {\n state.rowHeights.set(itemId, div.offsetHeight);\n });\n });\n o.observe(div);\n\n return () => o.disconnect();\n }, [divRef.current]);\n\n useLayoutEffect(() => table.getState().props.debugRender?.('render row', itemId));\n\n return (\n <>\n <div className={className} css={[defaultClasses.cellFill]} ref={divRef} />\n\n <div className={className} css={[defaultClasses.cell, defaultClasses.firstCell]}>\n <div css={{ width: indent * 20 }} />\n\n {enableSelection && <SelectComponent itemId={itemId} />}\n\n {(hasChildren || hasDeferredChildren) && <ExpandControl itemId={itemId} hasDeferredChildren={hasDeferredChildren} />}\n\n {rowAction}\n </div>\n\n {columnIds.map((columnId) => (\n <ColumnContext.Provider key={columnId} value={columnId}>\n <Cell itemId={itemId} rowIndex={rowIndex} />\n </ColumnContext.Provider>\n ))}\n\n <div className={className} css={[defaultClasses.cellFill]} />\n </>\n );\n});\n","export function throttle<Args extends any[]>(\n fn: (...args: Args) => void,\n ms: number,\n): { (...args: Args): void; flush(): void; cancel(): void } {\n let last = 0;\n let lastArgs: Args | undefined;\n let timeout: ReturnType<typeof setTimeout> | undefined;\n\n function run() {\n const args = lastArgs;\n\n last = Date.now();\n lastArgs = undefined;\n timeout = undefined;\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n fn(...args!);\n }\n\n return Object.assign(\n function (...args: Args) {\n const now = Date.now();\n lastArgs = args;\n\n if (timeout) {\n // do nothing\n } else if (now < last + ms) {\n timeout = setTimeout(run, last + ms - now);\n } else {\n run();\n }\n },\n {\n flush() {\n if (lastArgs) {\n run();\n }\n },\n\n cancel() {\n if (timeout) {\n clearTimeout(timeout);\n }\n },\n },\n );\n}\n","import React, { HTMLProps, ReactNode, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { throttle } from '../misc/throttle';\nimport { Id } from '../types';\nimport { useTableContext } from './table';\n\nconst findScrollRoot = (x: HTMLElement): HTMLElement => {\n const parent = x.parentElement;\n if (!parent) return document.documentElement;\n if (parent.scrollHeight > parent.clientHeight && getComputedStyle(parent).overflowY !== 'visible') return parent;\n return findScrollRoot(parent);\n};\n\nconst relativeOffset = (x: HTMLElement, y: HTMLElement): number => {\n if (x.offsetParent === y.offsetParent || !x.offsetParent) return x.offsetTop - y.offsetTop;\n if (x.offsetParent instanceof HTMLElement) return relativeOffset(x.offsetParent, y) + x.offsetTop;\n return 0;\n};\n\nexport function Virtualized<T>({\n header,\n footer,\n children,\n ...props\n}: {\n header: ReactNode;\n footer: ReactNode;\n children: (itemIds: Id[], startIndex: number) => ReactNode;\n} & Omit<HTMLProps<HTMLDivElement>, 'children'>): JSX.Element {\n const table = useTableContext<T>();\n const virtual = table.useState('props.virtual');\n const probeRef = useRef<HTMLDivElement>(null);\n const [, setCounter] = useState(0);\n\n const {\n itemIds = [],\n from = 0,\n to,\n before = 0,\n after = 0,\n } = table.useState(\n (state) => {\n const itemIds = state.activeItems.map((item) => item.id);\n const root = probeRef.current && findScrollRoot(probeRef.current);\n if (!state.props.virtual) return { itemIds };\n if (!probeRef.current || !root || !document.contains(root)) return {};\n\n const {\n rowHeight,\n initalRowHeight,\n overscan = 100,\n overscanTop,\n overscanBottom,\n } = (state.props.virtual instanceof Object ? state.props.virtual : undefined) ?? {};\n\n let totalHeight = 0;\n const rowHeights = itemIds.map((itemId, index) => {\n const h = rowHeight ?? state.rowHeights.get(itemId) ?? initalRowHeight ?? (index === 0 ? 100 : totalHeight / index);\n totalHeight += h;\n return h;\n });\n\n const probeOffset = relativeOffset(probeRef.current, root);\n const headerHeight = probeRef.current.offsetTop;\n const topOfTable = root.scrollTop - probeOffset + headerHeight;\n const bottomOfTable = topOfTable + root.clientHeight - headerHeight;\n\n let from = 0,\n to = itemIds.length,\n before = 0,\n after = 0;\n for (const h of rowHeights) {\n if (before + h > topOfTable - (overscanTop ?? overscan)) break;\n from++;\n before += h;\n }\n\n for (const h of rowHeights.reverse()) {\n if (after + h > totalHeight - bottomOfTable - (overscanBottom ?? overscan)) break;\n to--;\n after += h;\n }\n\n return { itemIds: itemIds.slice(from, to), from, to, before, after };\n },\n { throttle: 16 },\n );\n\n const throttleScroll = (typeof virtual === 'boolean' ? undefined : virtual)?.throttleScroll ?? 16;\n const incCounter = useMemo(() => throttle(() => setCounter((c) => c + 1), throttleScroll), [throttleScroll]);\n\n useEffect(() => {\n if (!virtual || !probeRef.current) return;\n\n window.addEventListener('scroll', incCounter, true);\n window.addEventListener('resize', incCounter, true);\n return () => {\n window.removeEventListener('scroll', incCounter, true);\n window.removeEventListener('resize', incCounter, true);\n };\n }, [probeRef.current, incCounter]);\n\n useEffect(() => incCounter.cancel, [incCounter]);\n\n useLayoutEffect(() => table.getState().props.debugRender?.(`Virtualalized render ${from} to ${to}`));\n\n return (\n <div {...props}>\n {header}\n\n {virtual && <div style={{ gridColumn: '1 / -1', height: before }} ref={probeRef} />}\n\n {children(itemIds, from)}\n\n {virtual && <div style={{ gridColumn: '1 / -1', height: after }} />}\n\n {footer}\n </div>\n );\n}\n","import React, { createContext, memo, useContext, useEffect, useLayoutEffect, useState } from 'react';\nimport { Store } from 'schummar-state/react';\nimport { useTheme } from '..';\nimport { TableMemoContextProvider } from '../hooks/useTableMemo';\nimport { useTableStateStorage } from '../internalState/tableStateStorage';\nimport { useTableState } from '../internalState/useTableState';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport { Id, InternalTableState, TableProps } from '../types';\nimport ClearFiltersButton from './clearFiltersButton';\nimport { ColumnFooter } from './columnFooter';\nimport { ColumnHeader, ColumnHeaderContext } from './columnHeader';\nimport { ColumnSelection } from './columnSelection';\nimport { Export } from './export';\nimport { ResizeHandleView } from './resizeHandle';\nimport { Row } from './row';\nimport { SelectComponent } from './selectComponent';\nimport { Virtualized } from './virtualized';\n\nexport const TableContext = createContext<Store<InternalTableState<any>> | null>(null);\nexport const TableResetContext = createContext<() => void>(() => undefined);\nexport const ColumnContext = createContext<Id | null>(null);\nexport function useTableContext<T>(): Store<InternalTableState<T>> {\n const value = useContext(TableContext);\n if (!value) throw Error('No table context available');\n return value as Store<InternalTableState<T>>;\n}\nexport function useColumnContext(): Id {\n const value = useContext(ColumnContext);\n if (value === null) throw Error('No column context available');\n return value;\n}\n\nexport function Table<T>(props: TableProps<T>): JSX.Element {\n const [table, resetState] = useTableState(props);\n const [isHydrated, clearStorage] = useTableStateStorage(table);\n\n async function reset() {\n await clearStorage();\n resetState();\n }\n\n useLayoutEffect(() => table.getState().props.debugRender?.('render table'));\n\n return (\n <TableContext.Provider value={table}>\n <TableResetContext.Provider value={reset}>\n <TableMemoContextProvider>\n <TableLoadingState isHydrated={isHydrated} />\n </TableMemoContextProvider>\n </TableResetContext.Provider>\n </TableContext.Provider>\n );\n}\n\nfunction TableLoadingState({ isHydrated }: { isHydrated: boolean }) {\n const loadingText = useTheme((t) => t.text.loading);\n const [showLoading, setShowLoading] = useState(false);\n\n useEffect(() => {\n const handle = setTimeout(() => setShowLoading(true), 500);\n return () => clearTimeout(handle);\n });\n\n return (\n <>\n {!isHydrated && showLoading && <div>{loadingText}</div>}\n <TableInner hidden={!isHydrated} />\n </>\n );\n}\n\nconst TableInner = memo(function TableInner<T>({ hidden }: { hidden: boolean }) {\n const table = useTableContext<T>();\n const fullWidth = table.useState('props.fullWidth');\n const activeColumns = table.useState((state) =>\n state.activeColumns.map((column) => ({\n id: column.id,\n width: column.width,\n classes: column.classes,\n })),\n );\n const hasActiveFilters = table.useState((state) => {\n return state.activeColumns.some((column) => {\n const filter = state.filters.get(column.id);\n const filterValue = state.filterValues.get(column.id);\n return filter !== undefined && filterValue !== undefined && filter.isActive(filterValue);\n });\n });\n const columnWidths = table.useState('columnWidths', { throttle: 16 });\n const hasFooter = table.useState((state) => state.activeColumns.some((column) => column.footer));\n\n const classes = useTheme((theme) => theme.classes);\n const stickyHeader = table.useState('props.stickyHeader');\n const stickyFooter = table.useState('props.stickyFooter');\n\n const enableSelection = table.useState('props.enableSelection');\n const enableColumnSelection = table.useState('props.enableColumnSelection');\n const enableExport = table.useState((state) => !!state.props.enableExport.copy || !!state.props.enableExport.download);\n const cssVariables = useCssVariables();\n\n const enableClearFiltersButton = table.useState('props.enableClearFiltersButton');\n\n useLayoutEffect(() => table.getState().props.debugRender?.('render table inner'));\n\n return (\n <Virtualized\n className={classes?.table}\n css={[\n cssVariables,\n defaultClasses.table,\n {\n gridTemplateColumns: [\n //\n fullWidth === 'right' || fullWidth === true ? 'auto' : '0',\n 'max-content',\n ...activeColumns.map((column) => columnWidths.get(column.id) ?? column.width ?? 'max-content'),\n fullWidth === 'left' || fullWidth === true ? 'auto' : '0',\n ].join(' '),\n },\n hidden && { visibility: 'hidden' },\n ]}\n header={\n <>\n <div\n className={classes?.headerCell}\n css={[defaultClasses.headerFill, stickyHeader && defaultClasses.sticky, stickyHeader instanceof Object && stickyHeader]}\n />\n\n <div\n className={classes?.headerCell}\n css={[defaultClasses.headerCell, stickyHeader && defaultClasses.sticky, stickyHeader instanceof Object && stickyHeader]}\n >\n {enableSelection && <SelectComponent />}\n\n {enableColumnSelection && <ColumnSelection />}\n\n {enableExport && <Export />}\n\n <div css={{ flex: 1 }} />\n <ResizeHandleView />\n </div>\n\n <ColumnHeaderContext.Provider>\n {activeColumns.map((column) => (\n <ColumnContext.Provider key={column.id} value={column.id}>\n <ColumnHeader />\n </ColumnContext.Provider>\n ))}\n </ColumnHeaderContext.Provider>\n\n <div\n className={classes?.headerCell}\n css={[defaultClasses.headerFill, stickyHeader && defaultClasses.sticky, stickyHeader instanceof Object && stickyHeader]}\n />\n </>\n }\n footer={\n <>\n {enableClearFiltersButton && hasActiveFilters && <ClearFiltersButton />}\n {hasFooter && (\n <>\n <div\n className={classes?.footerCell}\n css={[\n defaultClasses.footerFill,\n stickyFooter && defaultClasses.stickyBottom,\n stickyFooter instanceof Object && stickyFooter,\n ]}\n />\n <div\n className={classes?.footerCell}\n css={[\n defaultClasses.footerFill,\n stickyFooter && defaultClasses.stickyBottom,\n stickyFooter instanceof Object && stickyFooter,\n ]}\n />\n\n {activeColumns.map((column) => (\n <ColumnContext.Provider key={column.id} value={column.id}>\n <ColumnFooter />\n </ColumnContext.Provider>\n ))}\n\n <div\n className={classes?.footerCell}\n css={[\n defaultClasses.footerFill,\n stickyFooter && defaultClasses.stickyBottom,\n stickyFooter instanceof Object && stickyFooter,\n ]}\n />\n </>\n )}\n </>\n }\n >\n {(itemIds, startIndex) => itemIds.map((itemId, index) => <Row key={itemId} itemId={itemId} rowIndex={startIndex + index} />)}\n </Virtualized>\n );\n});\n","import { TableTheme } from '../../types';\n\nexport const defaultColors: TableTheme['colors'] = {\n primary: { main: '#1976d2', light: '#42a5f5', contrastText: '#fff' },\n secondary: { main: '#9c27b0', light: '#ba68c8', contrastText: '#fff' },\n};\n","import { css } from '@emotion/react';\n\nexport function Spinner({ className }: { className?: string }) {\n return (\n <div\n className={className}\n css={css`\n display: inline-block;\n position: relative;\n width: 1em;\n height: 1em;\n\n div {\n box-sizing: border-box;\n display: block;\n position: absolute;\n width: 0.8em;\n height: 0.8em;\n margin: 0.1em;\n border: 0.1em solid #fff;\n border-radius: 50%;\n animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n border-color: currentColor transparent transparent transparent;\n }\n div:nth-of-type(1) {\n animation-delay: -0.45s;\n }\n div:nth-of-type(2) {\n animation-delay: -0.3s;\n }\n div:nth-of-type(3) {\n animation-delay: -0.15s;\n }\n @keyframes lds-ring {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n `}\n >\n <div />\n <div />\n <div />\n </div>\n );\n}\n","import { TableTheme } from '../../types';\n\nexport const Badge: TableTheme['components']['Badge'] = ({ badgeContent, children }) => {\n if (!open) return null;\n\n return (\n <span\n css={{\n display: 'inline-flex',\n position: 'relative',\n flexShrink: 0,\n verticalAlign: 'middle',\n }}\n >\n {children}\n\n <span\n css={[\n {\n top: 0,\n right: 0,\n transform: 'scale(1) translate(50%, -50%)',\n transformOrigin: '100% 0%',\n height: 20,\n display: 'flex',\n padding: '0 6px',\n zIndex: 1,\n position: 'absolute',\n flexWrap: 'wrap',\n minWidth: 20,\n transition: 'transform 225ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',\n alignItems: 'center',\n lineHeight: 1,\n alignContent: 'center',\n borderRadius: 10,\n justifyContent: 'center',\n fontSize: '0.8em',\n },\n !badgeContent && {\n transform: 'scale(0) translate(50%, -50%)',\n transition: 'transform 195ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',\n },\n ]}\n >\n {badgeContent}\n </span>\n </span>\n );\n};\n","import { TableTheme } from '../../types';\nimport { darkGray, lightGray } from './defaultClasses';\n\nexport const Button: TableTheme['components']['Button'] = ({ startIcon, children, variant = 'text', ...props }) => {\n return (\n <button\n css={[\n {\n padding: `var(--spacing) calc(var(--spacing) * 2)`,\n display: 'inline-flex',\n alignItems: 'center',\n transition: 'background-color 150ms',\n border: 'none',\n cursor: 'pointer',\n background: 'transparent',\n borderRadius: 4,\n\n '&:active:not(:disabled)': {\n transform: 'scale3d(0.95, 0.95, 1)',\n },\n },\n variant === 'text' && {\n '&:hover': {\n background: 'rgba(0, 0, 0, 0.1)',\n },\n },\n variant === 'outlined' && {\n border: `1px solid ${darkGray}`,\n\n '&:disabled': {\n borderColor: lightGray,\n },\n },\n variant === 'contained' && {\n color: 'var(--primaryContrastText)',\n backgroundColor: 'var(--primaryMain)',\n boxShadow: '0px 3px 1px -2px rgb(0 0 0 / 20%), 0px 2px 2px 0px rgb(0 0 0 / 14%), 0px 1px 5px 0px rgb(0 0 0 / 12%)',\n\n '&:hover': {\n filter: 'brightness(0.9)',\n },\n\n '&:disabled': {\n filter: 'grayscale()',\n opacity: 0.5,\n },\n },\n ]}\n {...props}\n >\n {startIcon && <span css={{ marginRight: `calc(var(--spacing) * 2)` }}>{startIcon}</span>}\n <span>{children}</span>\n </button>\n );\n};\n","import { TableTheme } from '../../types';\n\nexport const Checkbox: TableTheme['components']['Checkbox'] = ({ className, ...props }) => {\n return (\n <label\n css={[\n {\n padding: 'calc(var(--spacing) * 1.8)',\n display: 'flex',\n color: 'currentcolor',\n userSelect: 'none',\n\n '& input': {\n appearance: 'none',\n margin: 0,\n },\n },\n props.disabled && { color: 'rgba(0, 0, 0, 0.26)' },\n ]}\n className={className}\n >\n <input type=\"checkbox\" {...props} />\n\n {props.checked ? (\n <svg\n css={{ fontSize: '1.25rem', width: '1em', height: '1em', fill: 'var(--primaryMain)' }}\n focusable=\"false\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path d=\"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"></path>\n </svg>\n ) : (\n <svg\n css={{ fontSize: '1.25rem', width: '1em', height: '1em', fill: 'currentColor' }}\n focusable=\"false\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path d=\"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z\"></path>\n </svg>\n )}\n </label>\n );\n};\n","import { TableTheme } from '../../types';\n\nexport const IconButton: TableTheme['components']['IconButton'] = (props) => {\n return (\n <button\n css={{\n padding: 'var(--spacing)',\n borderRadius: '50%',\n display: 'inline-flex',\n justifyContent: 'center',\n alignItems: 'center',\n transition: 'background-color 150ms',\n border: 'none',\n cursor: 'pointer',\n color: 'inherit',\n background: 'transparent',\n\n '&:hover': {\n backgroundColor: 'rgba(0, 0, 0, 0.04)',\n },\n\n '&:active': {\n transformColor: 'scale3d(0.95, 0.95, 1)',\n },\n }}\n {...props}\n />\n );\n};\n","import { useState } from 'react';\nimport { TableTheme } from '../../types';\nimport { darkGray } from './defaultClasses';\n\nexport const TextField: TableTheme['components']['TextField'] = ({ endIcon, className, inputRef, ...props }) => {\n const [focus, setFocus] = useState(false);\n\n return (\n <div className={className} css={{ display: 'flex' }}>\n <span\n css={[\n {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n border: `1px solid ${darkGray}`,\n borderRadius: 4,\n },\n focus && { border: '2px solid var(--primaryMain)', margin: -1 },\n ]}\n >\n <input\n ref={inputRef}\n {...props}\n value={props.value ?? ''}\n onFocus={() => setFocus(true)}\n onBlur={() => setFocus(false)}\n css={{\n flex: 1,\n border: 'none',\n outline: 'none',\n borderRadius: 4,\n padding: 'calc(var(--spacing) * 2)',\n paddingRight: 0,\n transition: 'outline 500ms',\n }}\n />\n\n {endIcon}\n </span>\n </div>\n );\n};\n","import { Spinner } from '../../components/spinnner';\nimport { TableTheme } from '../../types';\nimport { Badge } from './badge';\nimport { Button } from './button';\nimport { Checkbox } from './checkbox';\nimport { IconButton } from './iconButton';\nimport { Popover } from './popover';\nimport { TextField } from './textField';\n\nexport const defaultComponents: TableTheme['components'] = {\n IconButton,\n Checkbox,\n Popover,\n Button,\n Badge,\n TextField,\n Spinner,\n};\n","import { ClassNames, css } from '@emotion/react';\nimport { cloneElement, HTMLProps } from 'react';\nimport { TableTheme } from '../../types';\n\nconst IconDefaultStyle = css({\n width: '1.5em',\n height: '1.5em',\n color: 'inherit',\n});\n\nfunction Icon(svg: JSX.Element) {\n return (props: HTMLProps<Element>) => (\n <ClassNames>\n {({ css }) =>\n cloneElement(svg, {\n ...props,\n className: css(IconDefaultStyle, props.className),\n })\n }\n </ClassNames>\n );\n}\n\nconst Settings = Icon(\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"currentColor\">\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M3 17v2h6v-2H3zM3 5v2h10V5H3zm10 16v-2h8v-2h-8v-2h-2v6h2zM7 9v2H3v2h4v2h2V9H7zm14 4v-2H11v2h10zm-6-4h2V7h4V5h-4V3h-2v6z\" />\n </svg>,\n);\n\nconst Export = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n enableBackground=\"new 0 0 24 24\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <g>\n <rect fill=\"none\" height=\"24\" width=\"24\" />\n </g>\n <g>\n <path d=\"M18,15v3H6v-3H4v3c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2v-3H18z M17,11l-1.41-1.41L13,12.17V4h-2v8.17L8.41,9.59L7,11l5,5 L17,11z\" />\n </g>\n </svg>,\n);\n\nconst Clipboard = Icon(\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"currentColor\">\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M19 2h-4.18C14.4.84 13.3 0 12 0S9.6.84 9.18 2H5c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm7 18H5V4h2v3h10V4h2v16z\" />\n </svg>,\n);\n\nconst ChevronRight = Icon(\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"currentColor\">\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6-6-6z\" />\n </svg>,\n);\n\nconst Search = Icon(\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"currentColor\">\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\" />\n </svg>,\n);\n\nconst Clear = Icon(\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"currentColor\">\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z\" />\n </svg>,\n);\n\nconst ArrowDropDown = Icon(\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"currentColor\">\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M7 10l5 5 5-5H7z\" />\n </svg>,\n);\n\nconst FilterList = Icon(\n <svg viewBox=\"0 0 24 24\">\n <path\n fill=\"currentColor\"\n d=\"M14,12V19.88C14.04,20.18 13.94,20.5 13.71,20.71C13.32,21.1 12.69,21.1 12.3,20.71L10.29,18.7C10.06,18.47 9.96,18.16 10,17.87V12H9.97L4.21,4.62C3.87,4.19 3.95,3.56 4.38,3.22C4.57,3.08 4.78,3 5,3V3H19V3C19.22,3 19.43,3.08 19.62,3.22C20.05,3.56 20.13,4.19 19.79,4.62L14.03,12H14Z\"\n />\n </svg>,\n);\n\nconst ArrowUpward = Icon(\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"currentColor\">\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z\" />\n </svg>,\n);\n\nexport const defaultIcons: TableTheme['icons'] = {\n Settings,\n Export,\n Clipboard,\n ChevronRight,\n Search,\n Clear,\n ArrowDropDown,\n FilterList,\n ArrowUpward,\n};\n","import { TableTheme } from '../../types';\n\nexport const defaultTexts: TableTheme['text'] = {\n selectColumns: 'Select visible columns',\n noResults: 'No results',\n exportTitle: 'Export',\n exportCopy: 'To clipboard',\n exportDownload: 'Download',\n today: 'Today',\n thisWeek: 'This week',\n thisMonth: 'This month',\n thisYear: 'This year',\n lastSevenDays: 'Last 7 days',\n lastThirtyDays: 'Last 30 days',\n clearFilters: 'Clear all filters',\n reset: 'Reset',\n loading: 'Loading',\n deselectAll: 'Deselect all',\n resetAll: 'Reset table state',\n};\n","import { TableTheme } from '../../types';\nimport { defaultColors } from './defaultColors';\nimport { defaultComponents } from './defaultComponents';\nimport { defaultIcons } from './defaultIcons';\nimport { defaultTexts } from './defaultTexts';\n\nexport const defaultTableTheme: TableTheme = {\n text: defaultTexts,\n components: defaultComponents,\n icons: defaultIcons,\n colors: defaultColors,\n spacing: '5px',\n};\n","import { useContext } from 'react';\nimport { Store } from 'schummar-state/react';\nimport { ColumnContext, TableContext } from '../components/table';\nimport { defaultTableTheme } from '../theme/defaultTheme';\nimport { globalTableTheme, mergeThemes, TableThemeContext } from '../theme/tableTheme';\nimport { MemoizedTableTheme, TableTheme } from '../types';\nimport { useTableMemo } from './useTableMemo';\n\nconst emptyStore = new Store(undefined);\n\nexport function useTheme<T, S>(selector: (theme: MemoizedTableTheme<T>) => S): S {\n const contextTableTheme = useContext(TableThemeContext);\n const table = useContext(TableContext);\n const columnId = useContext(ColumnContext);\n const memo = useTableMemo();\n\n const process = (t: TableTheme<T>): MemoizedTableTheme<T> => {\n const cell = t.classes?.cell;\n\n return {\n ...t,\n classes: {\n ...t.classes,\n cell: cell instanceof Function || Array.isArray(cell) ? memo('theme.classes.cell', cell) : cell,\n },\n text: {\n ...t.text,\n },\n };\n };\n\n const theme =\n table?.useState((state) => {\n const localTheme = {\n text: state.props.text,\n classes: state.props.classes,\n components: state.props.components,\n icons: state.props.icons,\n colors: state.props.colors,\n spacing: state.props.spacing,\n };\n\n const column = state.activeColumns.find((column) => column.id === columnId);\n const columnsTheme = {\n classes: column?.classes,\n };\n\n const theme = mergeThemes(defaultTableTheme, globalTableTheme, contextTableTheme, localTheme, columnsTheme) as TableTheme<T>;\n\n return selector(process(theme));\n }) ??\n emptyStore.useState() ??\n selector(process(mergeThemes(defaultTableTheme, globalTableTheme, contextTableTheme) as TableTheme<T>));\n\n return theme;\n}\n","import { ComponentType, useContext, useLayoutEffect, useRef } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { PopoverContext } from '../theme/defaultTheme/popover';\nimport { TableTheme } from '../types';\n\ntype Props = TableTheme['components']['TextField'] extends ComponentType<infer T> ? T : never;\n\nexport function AutoFocusTextField(props: Omit<Props, 'inputRef'>) {\n const TextField = useTheme((t) => t.components.TextField);\n\n const ref = useRef<HTMLInputElement>(null);\n const { visible } = useContext(PopoverContext);\n\n useLayoutEffect(() => {\n if (visible && ref.current) {\n ref.current.focus();\n }\n }, [visible]);\n\n return <TextField {...props} inputRef={ref} />;\n}\n","import { Fragment, useMemo, useState } from 'react';\n\nconst className = 'schummar-table-date-input';\n\nconst defaultDate = new Date(1970, 0, 1);\n\nconst isIncludedType = (type: Intl.DateTimeFormatPartTypes): type is 'day' | 'month' | 'year' =>\n type === 'day' || type === 'month' || type === 'year';\n\nconst defaultLengths = {\n day: 2,\n month: 2,\n year: 4,\n};\n\nconst maxLengths = {\n day: 2,\n month: 2,\n year: Infinity,\n};\n\nconst length = (type: 'day' | 'month' | 'year', value: string) => Math.max(value.length, defaultLengths[type]);\n\nconst tabNext = (e: Element) => {\n const all = Array.from(document.querySelectorAll(`.${className}`));\n const index = all.indexOf(e);\n const next = all[(index + 1) % all.length];\n\n if (next instanceof HTMLElement) {\n next.focus();\n }\n};\n\nexport function DateInput({ value, onChange, locale }: { value: Date | null; onChange: (date: Date | null) => void; locale?: string }) {\n const [override, setOverride] = useState<{ type: string; value: string }>();\n\n const commit = () => {\n if (!override) {\n return;\n }\n\n setOverride(undefined);\n\n if (!override.value) {\n onChange(null);\n return;\n }\n\n const newValue = value ? new Date(value) : new Date();\n if (override.type === 'day') {\n newValue.setDate(Number(override.value));\n } else if (override.type === 'month') {\n newValue.setMonth(Number(override.value) - 1);\n } else if (override.type === 'year') {\n newValue.setFullYear(Number(override.value));\n }\n\n onChange(newValue);\n };\n\n const format = useMemo(\n () =>\n new Intl.DateTimeFormat(locale, {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n }),\n [locale],\n );\n const parts = format.formatToParts(value ?? defaultDate);\n const isEmpty = !value;\n\n return (\n <div\n css={{\n display: 'flex',\n alignItems: 'baseline',\n }}\n >\n {parts.map(({ type, value }, index) => (\n <Fragment key={index}>\n {isIncludedType(type) ? (\n <input\n className={className}\n css={{\n width: `${length(type, value)}ch`,\n boxSizing: 'content-box',\n overflow: 'visible',\n border: 'none',\n borderBottom: '2px solid transparent',\n outline: 'none',\n fontSize: 'inherit',\n\n '&:focus': {\n borderBottom: '2px solid var(--primaryMain)',\n },\n }}\n placeholder={''.padEnd(length(type, value), '0')}\n value={override?.type === type ? override.value : !isEmpty ? value : ''}\n onChange={(e) => {\n setOverride({ type, value: e.target.value });\n if (e.target.value.length >= maxLengths[type]) {\n setTimeout(() => tabNext(e.target));\n }\n }}\n onFocus={(e) => e.target.select()}\n onBlur={commit}\n />\n ) : type === 'literal' ? (\n <span>{value}</span>\n ) : null}\n </Fragment>\n ))}\n </div>\n );\n}\n","import { useTheme } from '../hooks/useTheme';\nimport type { TableTheme } from '../types';\n\nexport interface TextProps {\n id: keyof TableTheme['text'];\n}\n\nexport function Text({ id }: TextProps) {\n const text = useTheme((t) => t.text[id]);\n\n return <>{text}</>;\n}\n","import { useDayzed } from 'dayzed';\nimport { ReactNode, useEffect, useMemo, useState } from 'react';\nimport { useTheme } from '..';\nimport { gray } from '../theme/defaultTheme/defaultClasses';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport { DateInput } from './dateInput';\nimport { Text } from './text';\n\nexport type DateRange = { min: Date; max: Date };\n\nexport type DatePickerQuickOption =\n | 'today'\n | 'thisWeek'\n | 'thisMonth'\n | 'thisYear'\n | 'lastSevenDays'\n | 'lastThirtyDays'\n | { label: ReactNode; value: Date | DateRange | (() => Date | DateRange) }\n | ((onChange: (value: Date | DateRange | null) => void) => ReactNode);\n\nexport type DatePickerProps = {\n /** Currently selected day or range of days. */\n value: Date | DateRange | null;\n /** Callback for when the day (range) changes. */\n onChange: (value: Date | DateRange | null) => void;\n /** If enabled, ranges can be selected. */\n rangeSelect?: boolean;\n /** Which locale to use to render the calendar. */\n locale?: string;\n /** Which day of the week should be in the first column. (0=Sunday, 1=Monday, ...)\n * @default 1\n */\n firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n /** Which month to show initially */\n defaultDateInView?: Date;\n /** Show buttons to quickly select suggested dates or date ranges */\n quickOptions?: DatePickerQuickOption[];\n};\n\nconst weekDays = [0, 1, 2, 3, 4, 5, 6] as const;\n\n/** Rounds a date down to the start of the day. */\nexport const startOfDay = (d: Date) => new Date(d.getFullYear(), d.getMonth(), d.getDate());\n\n/** Rounds a date up to the end of the day. */\nexport const endOfDay = (d: Date) => new Date(d.getFullYear(), d.getMonth(), d.getDate() + 1, 0, 0, 0, -1);\n\nexport const lastDays = (days: number): DateRange => {\n const now = new Date();\n const min = new Date(now);\n min.setDate(min.getDate() - days);\n\n return {\n min: startOfDay(min),\n max: endOfDay(now),\n };\n};\n\nexport const today = () => lastDays(0);\nexport const lastSevenDays = () => lastDays(6);\nexport const lastThirtyDays = () => lastDays(29);\n\nexport const thisWeek = (firstDayOfWeek = 1): DateRange => {\n const now = new Date();\n const min = new Date(now);\n\n let diff = min.getDay() - firstDayOfWeek;\n if (diff < 0) {\n diff += 7;\n }\n min.setDate(min.getDate() - diff);\n\n const max = new Date(min);\n max.setDate(max.getDate() + 6);\n\n return {\n min: startOfDay(min),\n max: endOfDay(max),\n };\n};\n\nexport const thisMonth = (): DateRange => {\n const now = new Date();\n const min = new Date(now);\n min.setDate(1);\n const max = new Date(min);\n max.setMonth(max.getMonth() + 1);\n max.setDate(max.getDate() - 1);\n\n return {\n min: startOfDay(min),\n max: endOfDay(max),\n };\n};\n\nexport const thisYear = (): DateRange => {\n const now = new Date();\n const min = new Date(now);\n min.setDate(1);\n min.setMonth(0);\n const max = new Date(min);\n max.setFullYear(max.getFullYear() + 1);\n max.setDate(max.getDate() - 1);\n\n return {\n min: startOfDay(min),\n max: endOfDay(max),\n };\n};\n\nexport const commonQuickOptions = {\n today: { label: <Text id=\"today\" />, value: today },\n thisWeek: { label: <Text id=\"thisWeek\" />, value: thisWeek },\n thisMonth: { label: <Text id=\"thisMonth\" />, value: thisMonth },\n thisYear: { label: <Text id=\"thisYear\" />, value: thisYear },\n lastSevenDays: { label: <Text id=\"lastSevenDays\" />, value: lastSevenDays },\n lastThirtyDays: { label: <Text id=\"lastThirtyDays\" />, value: lastThirtyDays },\n} satisfies Record<DatePickerQuickOption & string, { label: ReactNode; value: Date | DateRange | (() => Date | DateRange) }>;\n\n/** Returns whether two dates and/or date ranges intersect. Intersection is considered per day. */\nexport function dateIntersect(a: Date | null | DateRange, b: Date | null | DateRange) {\n if (a instanceof Date) {\n a = { min: a, max: a };\n }\n if (b instanceof Date) {\n b = { min: b, max: b };\n }\n\n if (!a?.min || !a.max || !b?.min || !b.max) {\n return false;\n }\n\n return !(endOfDay(a.max) < startOfDay(b.min) || startOfDay(a.min) > endOfDay(b.max));\n}\n\nexport function DatePicker({\n value,\n onChange,\n rangeSelect,\n locale,\n firstDayOfWeek = 1,\n defaultDateInView = new Date(),\n quickOptions,\n}: DatePickerProps) {\n const Button = useTheme((t) => t.components.Button);\n const IconButton = useTheme((t) => t.components.IconButton);\n const ChevronRight = useTheme((t) => t.icons.ChevronRight);\n const cssVariables = useCssVariables();\n\n const [dateInView, setDateInView] = useState<Date>(defaultDateInView);\n const [dirty, setDirty] = useState<Partial<DateRange>>();\n const [hovered, setHovered] = useState<Date>();\n\n const min = dirty ? dirty.min : value instanceof Date ? value : value?.min;\n const max = dirty ? dirty.max : value instanceof Date ? value : value?.max;\n\n let resolvedQuickOptions;\n\n {\n quickOptions ??= ['today', 'thisWeek'];\n\n resolvedQuickOptions = [...quickOptions, { label: <Text id=\"reset\" />, value: null }].map((option, index) => {\n if (option instanceof Function) {\n return option((value) => {\n setDirty(undefined);\n onChange(value);\n });\n }\n\n const { label, value } = typeof option === 'string' ? commonQuickOptions[option] : option;\n\n return (\n <Button\n key={index}\n variant=\"text\"\n onClick={() => {\n setDirty(undefined);\n\n if (value instanceof Function) {\n onChange(value());\n } else {\n onChange(value);\n }\n }}\n >\n {label}\n </Button>\n );\n });\n }\n\n const { calendars, getBackProps, getForwardProps, getDateProps } = useDayzed({\n onDateSelected: () => undefined,\n firstDayOfWeek,\n showOutsideDays: true,\n date: dateInView,\n onOffsetChanged: (offset) => setDateInView(new Date(dateInView.getFullYear(), dateInView.getMonth() + offset)),\n offset: 0,\n });\n const now = useMemo(() => startOfDay(new Date()), []);\n\n const formatWeekday = useMemo(() => {\n const { format } = new Intl.DateTimeFormat(locale, { weekday: 'short' });\n return (weekDay: number) => format(new Date(Date.UTC(2021, 7, ((weekDay + firstDayOfWeek) % 7) + 1)));\n }, [locale, firstDayOfWeek]);\n\n useEffect(() => setDateInView(value === null ? defaultDateInView : value instanceof Date ? value : value.max), [value]);\n\n useEffect(() => {\n if (!rangeSelect) {\n setDirty(undefined);\n }\n }, [rangeSelect]);\n\n function set(min?: Date, max?: Date, edit?: 'min' | 'max') {\n if (!rangeSelect) {\n onChange(min ?? null);\n return;\n }\n\n if (min && max && min > max) {\n if (edit === 'min') {\n max = min;\n } else if (edit === 'max') {\n min = max;\n } else {\n [min, max] = [max, min];\n }\n }\n\n if (!min === !max) {\n setDirty(undefined);\n onChange(min && max ? { min, max: endOfDay(max) } : null);\n } else {\n setDirty({ min, max });\n }\n }\n\n const formatMonth = useMemo(() => {\n const { format } = new Intl.DateTimeFormat(locale, { month: 'long' });\n return (month: number) => format(new Date(2021, month));\n }, [locale]);\n\n const formatYear = useMemo(() => {\n const { format } = new Intl.DateTimeFormat(locale, { year: 'numeric' });\n return (year: number) => format(new Date(year, 0, 1));\n }, [locale]);\n\n return (\n <div css={cssVariables}>\n <div css={{ display: 'grid', gridAutoFlow: 'column', justifyContent: 'center', alignItems: 'baseline', gap: 'var(--spacing)' }}>\n <DateInput value={min ?? null} onChange={(date) => set(date ?? undefined, max, 'min')} locale={locale} />\n\n {rangeSelect && (\n <>\n {' - '}\n <DateInput value={max ?? null} onChange={(date) => set(min, date ?? undefined, 'max')} locale={locale} />\n </>\n )}\n </div>\n\n {calendars.map(({ month, year, weeks }) => (\n <div key={`${month}${year}`} css={{ display: 'grid' }}>\n <div\n css={{\n margin: 'calc(var(--spacing) * 4) 0',\n display: 'grid',\n gridAutoFlow: 'column',\n justifyContent: 'space-between',\n alignItems: 'center',\n }}\n >\n <IconButton {...getBackProps({ calendars })}>\n <ChevronRight css={{ transform: 'rotate3d(0, 0, 1, 180deg)' }} />\n </IconButton>\n\n <div css={{ display: 'flex' }}>\n {formatMonth(month)} {formatYear(year)}\n </div>\n\n <IconButton {...getForwardProps({ calendars })}>\n <ChevronRight />\n </IconButton>\n </div>\n\n <div\n css={{\n justifySelf: 'center',\n display: 'grid',\n gridTemplateColumns: 'repeat(7, max-content)',\n fontWeight: 'bold',\n }}\n >\n {weekDays.map((_v, weekDay) => (\n <div key={weekDay} css={{ justifySelf: 'center', marginBottom: 'var(--spacing)' }}>\n {formatWeekday(weekDay)}\n </div>\n ))}\n\n {weeks.map((week, index) =>\n week.map((dateObj, dayIndex) => {\n if (!dateObj) {\n return <div />;\n }\n\n const { prevMonth, nextMonth, date } = dateObj;\n const today = startOfDay(date).getTime() === now.getTime();\n\n const selected = date.getTime() === min?.getTime() || (min && max && dateIntersect(date, { min, max }));\n const preSelected =\n !selected &&\n (date.getTime() === hovered?.getTime() ||\n (min && !max && hovered && dateIntersect(date, min <= hovered ? { min, max: hovered } : { min: hovered, max: min })));\n\n return (\n <button\n key={`${index}-${dayIndex}`}\n css={[\n {\n padding: 10,\n border: '1px solid transparent',\n background: 'transparent',\n cursor: 'pointer',\n },\n (prevMonth || nextMonth) && {\n color: gray,\n },\n today && {\n border: '1px solid var(--secondaryMain)',\n },\n selected && {\n background: 'var(--primaryMain)',\n color: 'var(--primaryContrastText)',\n },\n preSelected && {\n background: 'var(--primaryLight)',\n color: 'var(--primaryContrastText)',\n },\n ]}\n {...getDateProps({ dateObj })}\n onClick={() => {\n if (dirty) {\n if (min) set(min, date);\n else set(date, max);\n } else {\n set(date);\n }\n }}\n onPointerOver={() => setHovered(date)}\n onPointerOut={() => setHovered(undefined)}\n >\n {date.getDate()}\n </button>\n );\n }),\n )}\n </div>\n </div>\n ))}\n\n <div css={{ marginTop: 'var(--spacing)', display: 'grid', gridAutoFlow: 'column', justifyContent: 'center' }}>\n {resolvedQuickOptions}\n </div>\n </div>\n );\n}\n","import { useFilter } from '..';\nimport { CommonFilterProps } from '../types';\nimport { dateIntersect, DatePicker, DatePickerProps, DateRange } from './datePicker';\n\nfunction convertDate(x: unknown): Date | null {\n if (x instanceof Date) return x;\n if (typeof x === 'number' || typeof x === 'string') return new Date(x);\n return null;\n}\n\nfunction convertDateOrRange(x: unknown): Date | DateRange | null {\n if (x instanceof Object && 'min' in x && 'max' in x) {\n const range = {\n min: convertDate((x as any).min),\n max: convertDate((x as any).max),\n };\n return range.min && range.max ? (range as DateRange) : null;\n }\n return convertDate(x);\n}\n\nfunction convertDateOrArray(x: unknown): Date | DateRange | (Date | DateRange)[] | null {\n if (x instanceof Array) return x.map(convertDateOrRange).filter(Boolean) as (Date | DateRange)[];\n return convertDateOrRange(x);\n}\n\nexport function DateFilter<T, V>({\n locale,\n firstDayOfWeek,\n defaultDateInView,\n quickOptions,\n singleSelect,\n filterBy = convertDateOrArray,\n ...props\n}: {\n /** If enabled, only single days can be selected. Ranges otherwise. */\n singleSelect?: boolean;\n} & Pick<DatePickerProps, 'locale' | 'firstDayOfWeek' | 'defaultDateInView' | 'quickOptions'> &\n CommonFilterProps<T, V, Date | DateRange | null, Date | DateRange | null>): JSX.Element {\n const { value = null, onChange } = useFilter({\n ...props,\n filterBy,\n\n id: 'dateFilter',\n\n isActive(filterValue) {\n return !!filterValue;\n },\n\n test(filterValue, value) {\n return dateIntersect(filterValue, value);\n },\n });\n\n return (\n <div\n css={{\n padding: 'calc(var(--spacing) * 2)',\n display: 'grid',\n }}\n >\n <DatePicker\n rangeSelect={!singleSelect}\n value={value}\n onChange={onChange}\n locale={locale}\n firstDayOfWeek={firstDayOfWeek}\n defaultDateInView={defaultDateInView}\n quickOptions={quickOptions}\n />\n </div>\n );\n}\n","import React, { ReactNode, useState } from 'react';\nimport { useColumnContext, useFilter, useTheme } from '..';\nimport { asString, castArray, flatMap, uniq } from '../misc/helpers';\nimport { CommonFilterProps, InternalColumn, SerializableValue } from '../types';\nimport { AutoFocusTextField } from './autoFocusTextField';\nimport { FormControlLabel } from './formControlLabel';\nimport { useTableContext } from './table';\n\nfunction toggle<T>(set: Set<T>, value: T, singleSelect?: boolean) {\n const newSet = new Set(singleSelect ? [] : set);\n if (set.has(value)) {\n newSet.delete(value);\n } else {\n newSet.add(value);\n }\n\n return newSet;\n}\n\nexport function SelectFilter<T, V, F extends SerializableValue>({\n options: providedOptions,\n stringValue = asString,\n render = stringValue,\n singleSelect,\n ...props\n}: {\n /** Which options are provided to select. By default all unique item values are used. */\n options?: F[];\n /** String representation of a value. Used to filter options via the text field. */\n stringValue?: (value: F) => string;\n /** Render values. By default a string representation of the value is used. */\n render?: (value: F) => ReactNode;\n /** If enabled, only one option can be selected at a time. */\n singleSelect?: boolean;\n} & CommonFilterProps<T, V, F, Set<F>>): JSX.Element {\n const IconButton = useTheme((t) => t.components.IconButton);\n const Checkbox = useTheme((t) => t.components.Checkbox);\n const Search = useTheme((t) => t.icons.Search);\n const Clear = useTheme((t) => t.icons.Clear);\n const deselectAll = useTheme((t) => t.text.deselectAll);\n const noResults = useTheme((t) => t.text.noResults);\n\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n\n const {\n value = new Set<F>(),\n onChange,\n filterBy,\n } = useFilter({\n ...props,\n\n id: 'selectFilter',\n\n isActive(filterValue) {\n return filterValue.size > 0;\n },\n\n test(filterValue, value) {\n return filterValue.has(value);\n },\n });\n\n const options = table.useState((state) => {\n if (providedOptions) return uniq(providedOptions);\n\n const column = state.activeColumns.find((column) => column.id === columnId) as InternalColumn<T, V> | undefined;\n if (!column) return [];\n\n return uniq(flatMap(state.items, (item) => castArray(filterBy(column.value(item.value), item.value))));\n });\n\n const [query, setQuery] = useState('');\n const filtered = options.filter((option) => !query || stringValue(option).toLowerCase().includes(query.toLowerCase()));\n\n const Button = useTheme((t) => t.components.Button);\n\n return (\n <div\n css={{\n padding: 'calc(var(--spacing) * 2)',\n display: 'grid',\n gap: 'var(--spacing)',\n }}\n >\n <AutoFocusTextField\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n endIcon={<IconButton onClick={() => setQuery('')}>{!query ? <Search /> : <Clear />}</IconButton>}\n css={{ marginBottom: 'var(--spacing)' }}\n />\n\n <Button\n disabled={!(value.size > 0)}\n onClick={() => onChange(new Set())}\n variant=\"outlined\"\n css={{ justifyContent: 'center', width: '100%', marginBottom: 'var(--spacing)' }}\n >\n {deselectAll}\n </Button>\n\n <div css={{ maxHeight: '20em', overflowY: 'auto' }}>\n {filtered.map((option, index) => (\n <FormControlLabel\n key={index}\n control={<Checkbox checked={value.has(option)} onChange={() => onChange(toggle(value, option, singleSelect))} />}\n label={render(option)}\n ></FormControlLabel>\n ))}\n </div>\n\n {filtered.length === 0 && <span css={{ textAlign: 'center' }}>{noResults}</span>}\n </div>\n );\n}\n","export function debounce<Args extends any[]>(fn: (...args: Args) => void, ms: number): { (...args: Args): void; flush(): void } {\n let lastArgs: Args | undefined;\n let timeout: ReturnType<typeof setTimeout> | undefined;\n\n function run() {\n const args = lastArgs;\n\n lastArgs = undefined;\n timeout = undefined;\n\n fn(...(args as Args));\n }\n\n return Object.assign(\n function (...args: Args) {\n lastArgs = args;\n\n if (timeout) {\n clearTimeout(timeout);\n }\n\n timeout = setTimeout(run, ms);\n },\n {\n flush() {\n if (timeout) {\n clearTimeout(timeout);\n run();\n }\n },\n },\n );\n}\n","import { castDraft } from 'immer';\nimport { useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { useColumnContext, useTableContext } from '..';\nimport { FilterControlContext } from '../components/filterControl';\nimport { debounce } from '../misc/debounce';\nimport { FilterImplementation, SerializableValue } from '../types';\nimport { useTableMemo } from './useTableMemo';\n\nexport function useFilter<T, V, F, S extends SerializableValue>(impl: FilterImplementation<T, V, F, S>) {\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n const cache = useTableMemo();\n const filterBy = impl.filterBy && cache('', impl.filterBy);\n\n // On mount and reset: Fire onChange\n useEffect(() => {\n if (impl.value === undefined) {\n impl.onChange?.(impl.defaultValue);\n }\n }, [table]);\n\n // Update implementation\n useEffect(() => {\n table.update((state) => {\n if (impl.defaultValue !== undefined) {\n state.filterValues.set(columnId, impl.defaultValue);\n }\n });\n }, [table]);\n\n useEffect(() => {\n table.update((state) => {\n state.filters.set(columnId, castDraft({ ...impl, filterBy }));\n\n if (impl.value !== undefined) {\n state.filterValues.set(columnId, impl.value);\n }\n });\n\n return () => {\n table.update((state) => {\n state.filters.delete(columnId);\n });\n };\n }, [table, columnId, impl]);\n\n // Track local value and update it globally after delay\n const value = table.useState((state) => state.filterValues.get(columnId) as S | undefined);\n const [dirtyValue, setDirtyValue] = useState<S>();\n const implRef = useRef(impl);\n\n useLayoutEffect(() => {\n implRef.current = impl;\n });\n\n const delayedUpdate = useMemo(\n () =>\n debounce((value?: S) => {\n const { value: controlledValue, onChange } = implRef.current;\n\n if (controlledValue === undefined) {\n table.update((state) => {\n state.filterValues.set(columnId, value);\n });\n }\n\n onChange?.(value);\n setDirtyValue(undefined);\n }, 500),\n [table],\n );\n\n function onChange(value?: S) {\n setDirtyValue(value);\n delayedUpdate(value);\n }\n\n useEffect(() => delayedUpdate.flush(), [delayedUpdate]);\n\n const context = useContext(FilterControlContext);\n\n return {\n value: dirtyValue ?? value,\n onChange,\n filterBy: filterBy ?? ((x) => x as unknown as F | F[]),\n ...context,\n };\n}\n","export const textMatch = (text: string, query: string): boolean => {\n text = text.toLowerCase();\n query = query.toLowerCase();\n return query.split(/\\s+/).every((part) => termMatch(text, part));\n};\n\nexport const termMatch = (text: string, query: string): boolean => {\n let i = 0;\n outer: for (const char of query) {\n for (; i < text.length; i++) {\n if (text[i] === char) {\n i++;\n continue outer;\n }\n }\n return false;\n }\n return true;\n};\n","import { useFilter } from '../hooks/useFilter';\nimport { useTheme } from '../hooks/useTheme';\nimport { asStringOrArray } from '../misc/helpers';\nimport { textMatch } from '../misc/textMatch';\nimport { CommonFilterProps } from '../types';\nimport { AutoFocusTextField } from './autoFocusTextField';\n\nexport function TextFilter<T, V>({\n compare = textMatch,\n filterBy = asStringOrArray,\n placeholder,\n ...props\n}: {\n /** Custom comparison function. Should return true if an item value matches the current filter value.\n * By default a fuzzy text comparison is used.\n */\n compare?: (itemValue: string, filterValue: string) => boolean;\n placeholder?: string;\n} & CommonFilterProps<T, V, string, string>): JSX.Element {\n const IconButton = useTheme((t) => t.components.IconButton);\n const Search = useTheme((t) => t.icons.Search);\n const Clear = useTheme((t) => t.icons.Clear);\n\n const { value = '', onChange } = useFilter({\n ...props,\n filterBy,\n\n id: 'textFilter',\n\n isActive(filterValue) {\n return !!filterValue;\n },\n\n test(filterValue, value) {\n return compare(value, filterValue);\n },\n });\n\n return (\n <div\n css={{\n padding: `calc(var(--spacing) * 2)`,\n display: 'grid',\n }}\n >\n <AutoFocusTextField\n value={value}\n onChange={(e) => onChange(e.target.value)}\n endIcon={<IconButton onClick={() => onChange('')}>{!value ? <Search /> : <Clear />}</IconButton>}\n placeholder={placeholder}\n />\n </div>\n );\n}\n"],"names":["TableMemoContext","createContext","Map","TableMemoContextProvider","children","useMemo","useTableMemo","memoCache","useContext","key","fn","deps","Array","isArray","slice","toString","cachedValue","get","hit","length","every","x","i","set","Queue","q","isRunning","run","job","replace","Promise","resolve","reject","push","start","clear","next","shift","result","e","KEYS","storageName","id","stringify","value","prepare","Date","__date","toJSON","Set","__set","from","map","__map","entries","entry","Object","fromEntries","k","v","JSON","parse","_key","useTableStateStorage","table","isHydrated","setIsHydrated","useState","useEffect","persist","getState","props","isCanceled","storage","include","exclude","json","getItem","data","debug","update","state","includes","filters","undefined","filterValues","toUpperCase","error","subscribe","setItem","throttle","removeItem","flatMap","arr","reduce","out","cur","concat","orderBy","selectors","direction","t","sort","a","b","_a","_b","dir","uniq","add","intersect","has","getAncestors","activeItemsById","items","find","parentId","parent","forEach","getDescendants","item","child","identity","asString","join","String","asStringOrArray","defaultEquals","subStringMatch","toLowerCase","castArray","cx","classNames","filter","predicate","className","calcItems","addReaction","revealFiltered","externalSort","activeColumns","expanded","draft","tableItems","sorted","column","columnId","sortBy","selector","Boolean","lookup","allItems","allItemsById","traverse","expandedChanged","activeSet","activeItems","reverse","isActive","external","filterValue","filterBy","some","test","castDraft","itemsById","setTimeout","onExpandedChange","runNow","noopParentId","calcProps","cache","Function","inputColumns","columns","dependecies","defCol","defaultColumnProps","mapColumn","_id","header","footer","renderCell","exportCell","disableSort","cannotHide","classes","width","index","cacheKey","wrapCell","rowAction","copy","enableExport","separator","download","sepPrefix","enableSelection","selectSyncChildren","stickyHeader","stickyFooter","enableColumnSelection","enableClearFiltersButton","enableColumnResize","enableColumnReorder","cleanupState","columnIds","activeColumnIds","newSort","s","onSortChange","keys","delete","hiddenColumns","columnWidths","columnOrder","newSelection","selection","size","onSelectionChange","newExpanded","filterColumns","indexOf","normalizeExpanded","expandOnlyOne","hasChanged","allAncestors","ancestors","withMostAncestors","ancestor","syncSelections","useTableState","_props","setKey","reset","defaultSort","defaultExpanded","defaultSelection","onHiddenColumnsChange","defaultHiddenColumns","onReset","Store","rowHeights","columnStyleOverride","lastSelectedId","splice","useCssVariables","useTheme","spacing","colors","primary","main","light","contrastText","secondary","ClearFiltersButton","Button","components","textClearFilters","text","clearFilters","useTableContext","defaultClasses","clearFiltersButton","ColumnFooter","useColumnContext","columnClasses","theme","content","footerCell","stickyBottom","FilterControlContext","close","FilterControl","IconButton","Popover","FilterList","icons","ArrowDropDown","cssVariables","anchor","setAnchor","filterClassNames","impl","onChange","context","currentTarget","preventDefault","color","stopPropagation","document","body","popover","popoverBackdrop","ResizeHandle","enabled","onPointerDown","div","target","setPointerCapture","pointerId","onPointerMove","hasPointerCapture","parentElement","Math","max","clientX","getBoundingClientRect","left","onPointerUp","releasePointerCapture","onDoubleClick","getModifierState","ResizeHandleView","_css","alignSelf","padding","cursor","display","alignItems","height","background","transition","_ref","_EMOTION_STRINGIFIED_CSS_ERROR__","SortComponent","Badge","ArrowUpward","sortDisabled","findIndex","toggle","off","controlledSort","newDirection","opacity","transform","ColumnHeaderContext","StoreScope","ColumnHeader","ref","useRef","store","useStore","draggingStart","clone","current","calcTargetIndex","offsetLeft","cols","otherCols","col","firstOffsetleft","sum","targetIndex","offsetWidth","mouseX","bounds","abs","cloneNode","append","getComputedStyle","style","assign","pointerEvents","position","boxShadow","top","offset","zIndex","remove","headerCell","sticky","FormControlLabel","control","label","disabled","ColumnSelection","Checkbox","Settings","selectColumns","resetAll","TableResetContext","anchorEl","setAnchorEl","controlledHiddenColumns","newValue","csvExport","quote","eol","cells","line","c","clean","RegExp","Export","Clipboard","exportTitle","exportCopy","exportDownload","generate","options","clipboard","writeText","createElement","href","encodeURIComponent","appendChild","click","removeChild","justifyItems","gap","justifyContent","defaultWrapCell","Cell","memo","itemId","rowIndex","debugRender","calcClassNames","cell","ExpandControl","hasDeferredChildren","Spinner","ChevronRight","isExpanded","hasChildren","controlledExpanded","SelectComponent","isSelected","itemIds","mouseEvent","nativeEvent","controlledSelection","range","shiftKey","min","descendant","evenCell","oddCell","Row","divRef","indent","o","ResizeObserver","contains","offsetHeight","observe","disconnect","cellFill","firstCell","ms","last","lastArgs","timeout","args","now","flush","cancel","clearTimeout","findScrollRoot","documentElement","scrollHeight","clientHeight","overflowY","relativeOffset","y","offsetParent","offsetTop","HTMLElement","Virtualized","virtual","probeRef","setCounter","to","before","after","root","rowHeight","initalRowHeight","overscan","overscanTop","overscanBottom","totalHeight","h","probeOffset","headerHeight","topOfTable","scrollTop","bottomOfTable","throttleScroll","incCounter","addEventListener","removeEventListener","gridColumn","TableContext","ColumnContext","Error","Table","resetState","clearStorage","useLayoutEffect","TableLoadingState","loadingText","loading","showLoading","setShowLoading","handle","TableInner","hidden","fullWidth","hasActiveFilters","hasFooter","gridTemplateColumns","visibility","headerFill","footerFill","startIndex","defaultColors","badgeContent","open","startIcon","variant","border","borderRadius","darkGray","borderColor","lightGray","backgroundColor","marginRight","_ref2","checked","TextField","endIcon","inputRef","focus","setFocus","flex","margin","defaultComponents","IconDefaultStyle","Icon","svg","css","cloneElement","Search","Clear","defaultIcons","defaultTexts","noResults","today","thisWeek","thisMonth","thisYear","lastSevenDays","lastThirtyDays","deselectAll","defaultTableTheme","emptyStore","contextTableTheme","TableThemeContext","process","localTheme","columnsTheme","mergeThemes","globalTableTheme","AutoFocusTextField","visible","PopoverContext","defaultDate","isIncludedType","type","defaultLengths","day","month","year","maxLengths","Infinity","tabNext","all","querySelectorAll","DateInput","locale","override","setOverride","commit","setDate","Number","setMonth","setFullYear","format","Intl","DateTimeFormat","parts","formatToParts","isEmpty","Fragment","boxSizing","overflow","borderBottom","outline","fontSize","padEnd","select","Text","weekDays","startOfDay","d","getFullYear","getMonth","getDate","endOfDay","lastDays","days","firstDayOfWeek","diff","getDay","commonQuickOptions","dateIntersect","_ref3","_ref4","_ref5","DatePicker","rangeSelect","defaultDateInView","quickOptions","dateInView","setDateInView","dirty","setDirty","hovered","setHovered","resolvedQuickOptions","option","calendars","getBackProps","getForwardProps","getDateProps","useDayzed","onDateSelected","showOutsideDays","date","onOffsetChanged","formatWeekday","weekday","weekDay","UTC","edit","formatMonth","formatYear","weeks","_v","week","dateObj","dayIndex","prevMonth","nextMonth","getTime","selected","preSelected","gray","convertDate","convertDateOrRange","convertDateOrArray","DateFilter","singleSelect","useFilter","newSet","SelectFilter","providedOptions","stringValue","render","query","setQuery","filtered","debounce","defaultValue","dirtyValue","setDirtyValue","implRef","delayedUpdate","controlledValue","textMatch","split","part","termMatch","outer","char","TextFilter","compare","placeholder"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/hooks/useTableMemo.tsx","../../src/misc/queue.ts","../../src/internalState/tableStateStorage.ts","../../src/misc/helpers.ts","../../src/internalState/calcItems.ts","../../src/internalState/calcProps.ts","../../src/internalState/cleanupState.ts","../../src/internalState/filterColumns.ts","../../src/internalState/normalizeExpanded.ts","../../src/internalState/syncSelections.ts","../../src/internalState/useTableState.ts","../../src/theme/useCssVariables.ts","../../src/components/clearFiltersButton.tsx","../../src/components/columnFooter.tsx","../../src/components/filterControl.tsx","../../src/components/resizeHandle.tsx","../../src/components/sortComponent.tsx","../../src/components/columnHeader.tsx","../../src/components/formControlLabel.tsx","../../src/components/columnSelection.tsx","../../src/misc/csvExport.ts","../../src/components/export.tsx","../../src/components/cell.tsx","../../src/components/expandControl.tsx","../../src/components/selectComponent.tsx","../../src/components/row.tsx","../../src/misc/throttle.ts","../../src/components/virtualized.tsx","../../src/components/table.tsx","../../src/theme/defaultTheme/defaultColors.ts","../../src/components/spinnner.tsx","../../src/theme/defaultTheme/badge.tsx","../../src/theme/defaultTheme/button.tsx","../../src/theme/defaultTheme/checkbox.tsx","../../src/theme/defaultTheme/iconButton.tsx","../../src/theme/defaultTheme/textField.tsx","../../src/theme/defaultTheme/defaultComponents.ts","../../src/theme/defaultTheme/defaultIcons.tsx","../../src/theme/defaultTheme/defaultTexts.tsx","../../src/theme/defaultTheme/index.tsx","../../src/hooks/useTheme.ts","../../src/components/autoFocusTextField.tsx","../../src/components/dateInput.tsx","../../src/components/text.tsx","../../src/components/datePicker.tsx","../../src/components/dateFilter.tsx","../../src/components/selectFilter.tsx","../../src/misc/debounce.ts","../../src/hooks/useFilter.ts","../../src/misc/textMatch.ts","../../src/components/textFilter.tsx"],"sourcesContent":["import { createContext, DependencyList, ReactNode, useContext, useMemo } from 'react';\nimport { FunctionWithDeps } from '../types';\n\nconst TableMemoContext = createContext(new Map<string, [value: any, deps: DependencyList]>());\n\nexport function TableMemoContextProvider({ children }: { children: ReactNode }) {\n return <TableMemoContext.Provider value={useMemo(() => new Map(), [])}>{children}</TableMemoContext.Provider>;\n}\n\nexport function useTableMemo() {\n const memoCache = useContext(TableMemoContext);\n\n return <Fn extends (...args: any[]) => any>(key: string, fn: FunctionWithDeps<Fn>): Fn => {\n let deps: DependencyList;\n if (Array.isArray(fn)) {\n deps = fn.slice(1);\n fn = fn[0];\n } else {\n deps = [fn.toString()];\n }\n\n let cachedValue = memoCache.get(key);\n const hit = cachedValue && cachedValue[1].length === deps.length && cachedValue[1].every((x, i) => x === deps[i]);\n if (!cachedValue || !hit) {\n cachedValue = [fn, deps];\n memoCache.set(key, cachedValue);\n }\n return cachedValue[0];\n };\n}\n","export class Queue {\n private q = new Array<{ job: () => Promise<any>; resolve: (value: any) => void; reject: (reason?: any) => void }>();\n private isRunning = false;\n\n run<T>(job: () => Promise<T>, replace?: boolean) {\n return new Promise<T>((resolve, reject) => {\n if (replace) {\n this.q = [];\n }\n this.q.push({ job, resolve, reject });\n\n if (!this.isRunning) this.start();\n });\n }\n\n clear() {\n this.q = [];\n }\n\n private async start() {\n this.isRunning = true;\n\n let next;\n while ((next = this.q.shift())) {\n try {\n const result = await next.job();\n next.resolve(result);\n } catch (e) {\n next.reject(e);\n }\n }\n\n this.isRunning = false;\n }\n}\n","import { useEffect, useState } from 'react';\nimport { Store } from 'schummar-state/react';\nimport { Queue } from '../misc/queue';\nimport { InternalTableState, SerializableValue } from '../types';\n\nconst KEYS = ['sort', 'selection', 'expanded', 'hiddenColumns', 'filterValues', 'columnWidths', 'columnOrder'] as const;\n\nconst storageName = (id: string) => `schummar-table_state-v1_${id}`;\n\nexport type TableStateStorage = {\n getItem: (key: string) => string | null | Promise<string | null>;\n setItem: (key: string, value: string) => unknown | Promise<unknown>;\n removeItem: (key: string) => unknown | Promise<unknown>;\n} & (\n | {\n keys: () => string[] | Promise<string[]>;\n }\n | {\n length: number | (() => number | Promise<number>);\n key: (keyIndex: number) => string | null | Promise<string | null>;\n }\n);\n\nfunction stringify(value: SerializableValue) {\n function prepare(value: SerializableValue): any {\n if (value instanceof Date) {\n return { __date: value.toJSON() };\n }\n\n if (value instanceof Set) {\n return { __set: Array.from(value).map(prepare) };\n }\n\n if (value instanceof Map) {\n return { __map: Array.from(value.entries()).map((entry) => entry.map(prepare)) };\n }\n\n if (value instanceof Array) {\n return value.map(prepare);\n }\n\n if (value instanceof Object) {\n return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, prepare(v)]));\n }\n\n return value;\n }\n\n return JSON.stringify(prepare(value));\n}\n\nfunction parse(value: string) {\n return JSON.parse(value, (_key, value) => {\n if (value instanceof Object && '__date' in value) {\n return new Date(value.__date);\n }\n\n if (value instanceof Object && '__set' in value) {\n return new Set(value.__set);\n }\n\n if (value instanceof Object && '__map' in value) {\n return new Map(value.__map);\n }\n\n return value;\n });\n}\n\nexport function useTableStateStorage(table: Store<InternalTableState<any>>) {\n const [isHydrated, setIsHydrated] = useState(false);\n const [q] = useState(() => new Queue());\n\n // On mount: load\n useEffect(() => {\n const { persist } = table.getState().props;\n if (!persist) {\n setIsHydrated(true);\n return;\n }\n\n let isCanceled = false;\n\n (async () => {\n try {\n const { storage, id, include, exclude } = persist;\n const json = await storage.getItem(storageName(id));\n if (isCanceled || !json) return;\n\n const data = parse(json);\n table.getState().props.debug?.('load', json, data);\n\n table.update((state) => {\n for (const key of KEYS) {\n if (\n //\n (!include || include.includes(key)) &&\n !exclude?.includes(key) &&\n key in data\n ) {\n if (key === 'filterValues') {\n for (const [id, value] of data[key]) {\n if (state.filters.get(id)?.persist ?? state.filters.get(id)?.value === undefined) {\n state.filterValues.set(id, value);\n }\n }\n } else {\n if (key === 'expanded' || key === 'hiddenColumns' || key === 'selection' || key === 'sort') {\n if (state.props[key] !== undefined) {\n continue;\n }\n\n state.props[`on${(key.slice(0, 1).toUpperCase() + key.slice(1)) as Capitalize<typeof key>}Change`]?.(data[key]);\n }\n\n state[key] = data[key];\n }\n }\n }\n });\n } catch (e) {\n console.error('Failed to load table state:', e);\n } finally {\n setIsHydrated(true);\n }\n })();\n\n return () => {\n isCanceled = true;\n };\n }, [table]);\n\n // After isHydrated, watch and save state\n useEffect(() => {\n if (!isHydrated) return;\n\n return table.subscribe(\n (state) => {\n if (!state.props.persist) return;\n\n const { storage, id, include, exclude } = state.props.persist;\n const data: any = {};\n\n for (const key of KEYS) {\n if (\n //\n (!include || include.includes(key)) &&\n !exclude?.includes(key)\n ) {\n if (key === 'filterValues') {\n data[key] = new Map();\n for (const [id, value] of state.filterValues) {\n if (state.filters.get(id)?.persist ?? state.filters.get(id)?.value === undefined) {\n data.filterValues.set(id, value);\n }\n }\n } else {\n if (\n (key === 'expanded' || key === 'hiddenColumns' || key === 'selection' || key === 'sort') &&\n state.props[key] !== undefined\n ) {\n continue;\n }\n\n data[key] = state[key];\n }\n }\n }\n\n return { storage, id, data };\n },\n (props) => {\n if (!props) return;\n const { storage, id, data } = props;\n\n table.getState().props.debug?.('save', data, stringify(data));\n q.run(async () => {\n await storage.setItem(storageName(id), stringify(data));\n }, true);\n },\n { throttle: 1000 },\n );\n }, [table, isHydrated]);\n\n async function clear() {\n await q.run(async () => {\n const persist = table.getState().props.persist;\n if (!persist) {\n return;\n }\n\n const { storage, id } = persist;\n await storage.removeItem(storageName(id));\n\n setIsHydrated(false);\n q.clear();\n });\n }\n\n return [isHydrated, clear] as const;\n}\n","import { Id, TableItem } from '../types';\n\nexport const flatMap = <T, S>(arr: Iterable<T>, flatMap: (t: T) => S[]): S[] => {\n return [...arr].reduce<S[]>((out, cur) => out.concat(flatMap(cur)), []);\n};\n\nexport const orderBy = <T>(arr: T[], selectors: ((t: T) => any)[] = [], direction: ('desc' | 'asc')[] = []): T[] => {\n if (selectors.length === 0) selectors = [(t) => t];\n\n return [...arr].sort((a, b) => {\n for (let i = 0; i < selectors.length; i++) {\n const _a = selectors[i]?.(a);\n const _b = selectors[i]?.(b);\n const dir = direction[i] === 'desc' ? -1 : 1;\n if (_a > _b) return dir;\n if (_a < _b) return -dir;\n }\n return 0;\n });\n};\n\nexport const uniq = <T>(arr: T[]): T[] => {\n const set = new Set<T>();\n for (const t of arr) set.add(t);\n return Array.from(set);\n};\n\nexport const intersect = <T>(a: Iterable<T>, b: { has(t: T): boolean }): Set<T> => {\n const result = new Set<T>();\n for (const x of a) if (b.has(x)) result.add(x);\n return result;\n};\n\nexport const getAncestors = <T>(activeItemsById: Map<Id, TableItem<T>>, ...items: TableItem<T>[]): Set<Id> => {\n const result = new Set<Id>();\n\n const find = ({ parentId }: TableItem<T>): void => {\n const parent = parentId ? activeItemsById.get(parentId) : undefined;\n if (parent && !result.has(parent.id)) {\n result.add(parent.id);\n find(parent);\n }\n };\n items.forEach(find);\n return result;\n};\n\nexport const getDescendants = <T>(...items: TableItem<T>[]): Set<Id> => {\n const result = new Set<Id>();\n\n const find = (item: TableItem<T>): void => {\n for (const child of item.children) {\n if (!result.has(child.id)) {\n result.add(child.id);\n find(child);\n }\n }\n };\n items.forEach(find);\n return result;\n};\n\nexport const identity = (x: unknown): any => x;\n\nexport const asString = (x: unknown): string => {\n if (x instanceof Array) return x.map(asString).join(', ');\n if (x instanceof Object) return JSON.stringify(x);\n return String(x ?? '');\n};\n\nexport const asStringOrArray = (x: unknown): string | string[] => {\n if (x instanceof Array) return x.map(asString);\n return asString(x);\n};\n\nexport const defaultEquals = (a: unknown, b: unknown): boolean => a === b;\n\nexport const subStringMatch = (a: string, b: string): boolean => a.toLowerCase().includes(b.toLowerCase());\n\nexport const castArray = <T>(a: T | T[]) => (a instanceof Array ? a : [a]);\n\nexport const cx = (...classNames: (string | false | undefined | null | Record<string, boolean>)[]) =>\n classNames\n .flatMap((entry) => {\n if (!entry) return [];\n if (typeof entry === 'string') return [entry];\n return Object.entries(entry)\n .filter(([, predicate]) => predicate)\n .map(([className]) => className);\n })\n .join(' ');\n","import { castDraft } from 'immer';\nimport { useEffect } from 'react';\nimport { Store } from 'schummar-state/react';\nimport { castArray, flatMap, orderBy } from '../misc/helpers';\nimport { Id, InternalTableState, TableItem } from '../types';\n\nexport function calcItems<T>(state: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n state.addReaction(\n (state) =>\n [\n state.props.items,\n state.props.id,\n state.props.parentId,\n state.props.revealFiltered,\n state.props.externalSort,\n state.sort,\n state.filters,\n state.filterValues,\n state.activeColumns,\n state.expanded,\n ] as const,\n ([items = [], id, parentId, revealFiltered, externalSort, sort, filters, filterValues, activeColumns], draft) => {\n const tableItems = items.map<TableItem<T>>((item) => ({\n id: id(item),\n parentId: parentId?.(item),\n children: [],\n value: item,\n }));\n\n let sorted;\n if (sort.length === 0 || externalSort) {\n sorted = tableItems;\n } else {\n const selectors = flatMap(sort, (sort) => {\n const column = activeColumns.find((column) => column.id === sort.columnId);\n if (!column) return [];\n return column.sortBy.map((sortBy) => ({\n selector: (item: T) => sortBy(column.value(item), item),\n direction: sort.direction,\n }));\n }).filter(Boolean);\n\n sorted = orderBy(\n tableItems,\n selectors.map((x) => (item) => x.selector(item.value)),\n selectors.map((x) => x.direction),\n );\n }\n\n const lookup = new Map<Id, TableItem<T>>();\n for (const item of sorted) {\n lookup.set(item.id, item);\n }\n\n for (const item of sorted) {\n const parent = item.parentId !== undefined ? lookup.get(item.parentId) : undefined;\n parent?.children.push(item);\n }\n\n const allItems = new Array<TableItem<T>>();\n const allItemsById = new Map<Id, TableItem<T>>();\n\n const traverse = (items: TableItem<T>[]): void => {\n for (const item of items) {\n allItems.push(item);\n allItemsById.set(item.id, item);\n traverse(item.children);\n }\n };\n traverse(sorted.filter((item) => item.parentId === undefined));\n\n let expandedChanged = false;\n const activeItemsById = new Map<Id, TableItem<T>>();\n const activeSet = new Set<Id>();\n const activeItems = [...allItems]\n .reverse()\n .filter((item) => {\n let isActive = activeSet.has(item.id);\n\n isActive ||= activeColumns.every((column) => {\n const filter = filters.get(column.id);\n if (!filter || filter.external) return true;\n\n const filterValue = filterValues.get(column.id);\n if (filterValue === undefined || !filter.isActive(filterValue)) return true;\n\n const filterBy = filter.filterBy ?? ((x) => x);\n const value = filterBy(column.value(item.value), item.value);\n return castArray(value).some((value) => filter.test(filterValue, value));\n });\n\n if (isActive && item.parentId !== undefined) {\n if (\n revealFiltered &&\n Array.from(filters.entries()).some(([id, filter]) => {\n const filterValue = filterValues.get(id);\n return !!filter && filterValue !== undefined && filter.isActive(filterValue);\n })\n ) {\n expandedChanged ||= !draft.expanded.has(item.parentId);\n draft.expanded.add(item.parentId);\n } else if (!draft.expanded.has(item.parentId)) {\n isActive = false;\n }\n }\n\n if (isActive && item.parentId !== undefined) {\n activeSet.add(item.parentId);\n }\n if (isActive) {\n activeItemsById.set(item.id, item);\n }\n\n return isActive;\n })\n .reverse();\n\n draft.items = castDraft(allItems);\n draft.itemsById = castDraft(allItemsById);\n draft.activeItems = castDraft(activeItems);\n draft.activeItemsById = castDraft(activeItemsById);\n\n if (expandedChanged) {\n setTimeout(() => {\n state.getState().props.onExpandedChange?.(state.getState().expanded);\n });\n }\n },\n { runNow: true },\n ),\n [state],\n );\n}\n","import { useMemo } from 'react';\nimport { useTableMemo } from '../hooks/useTableMemo';\nimport { asString } from '../misc/helpers';\nimport { Column, Id, InternalColumn, InternalTableProps, TableProps } from '../types';\n\nconst noopParentId = () => undefined;\n\nexport function calcProps<T>(props: TableProps<T>): InternalTableProps<T> {\n const cache = useTableMemo();\n\n return useMemo(() => {\n let id;\n if (props.id instanceof Function || Array.isArray(props.id)) {\n id = cache('id', props.id);\n } else {\n id = cache('id', [(item: T) => item[props.id as keyof T] as unknown as Id, props.id]);\n }\n\n let parentId;\n if (props.parentId instanceof Function || Array.isArray(props.parentId)) {\n parentId = cache('parentId', props.parentId);\n } else if (props.parentId !== undefined) {\n parentId = cache('parentId', [(item: T) => item[props.parentId as keyof T] as unknown as Id | undefined, props.parentId]);\n } else {\n parentId = noopParentId;\n }\n\n let inputColumns;\n if (props.columns instanceof Function) {\n inputColumns = props.columns((value, column) => ({ ...column, value }));\n } else {\n inputColumns = props.columns.map((column) => ({ ...column, dependecies: undefined }));\n }\n\n const defCol = props.defaultColumnProps;\n const mapColumn = <V>(\n {\n id: _id,\n header = defCol?.header ?? null,\n footer = defCol?.footer ?? null,\n value,\n renderCell = defCol?.renderCell ?? asString,\n exportCell = defCol?.exportCell ?? asString,\n sortBy = defCol?.sortBy ?? [(v) => (typeof v === 'number' || v instanceof Date ? v : String(v))],\n disableSort,\n cannotHide = defCol?.cannotHide,\n classes = defCol?.classes,\n filter = defCol?.filter,\n width = defCol?.width,\n }: Column<T, V>,\n index: number,\n ): InternalColumn<T, V> => {\n const id = _id ?? index;\n const cacheKey = typeof id === 'string' ? `s${id}` : `n${id}`;\n\n return {\n id,\n header,\n footer,\n value: cache(`columns.${cacheKey}.value`, value),\n renderCell: cache(`columns.${cacheKey}.renderCell`, renderCell),\n exportCell,\n sortBy: sortBy.map((fn, i) => cache(`columns.${cacheKey}.sortBy.${i}`, fn)),\n disableSort,\n cannotHide,\n classes,\n filter,\n width,\n };\n };\n\n const columns = inputColumns.map(mapColumn);\n\n const wrapCell = props.wrapCell && cache('wrapCell', props.wrapCell);\n\n const rowAction =\n props.rowAction instanceof Function || Array.isArray(props.rowAction) ? cache('rowAction', props.rowAction) : props.rowAction;\n\n let copy;\n if (props.enableExport === true || (props.enableExport instanceof Object && props.enableExport.copy === true)) {\n copy = { separator: '\\t' };\n } else if (props.enableExport && props.enableExport.copy instanceof Object) {\n copy = props.enableExport.copy;\n }\n\n let download;\n if (props.enableExport === true || (props.enableExport instanceof Object && props.enableExport.download === true)) {\n download = { sepPrefix: true };\n } else if (props.enableExport && props.enableExport.download instanceof Object) {\n download = props.enableExport.download;\n }\n\n const enableExport = { copy, download };\n\n return {\n ...props,\n id,\n parentId,\n columns,\n wrapCell,\n rowAction,\n enableSelection: props.enableSelection ?? true,\n selectSyncChildren: props.selectSyncChildren ?? true,\n stickyHeader: props.stickyHeader ?? true,\n stickyFooter: props.stickyFooter ?? true,\n enableExport,\n enableColumnSelection: props.enableColumnSelection ?? true,\n enableClearFiltersButton: props.enableClearFiltersButton ?? false,\n enableColumnResize: props.enableColumnResize ?? true,\n enableColumnReorder: props.enableColumnReorder ?? true,\n };\n }, [props]);\n}\n","import { useEffect } from 'react';\nimport { Store } from 'schummar-state/react';\nimport { intersect } from '../misc/helpers';\nimport { InternalTableState } from '../types';\n\nexport function cleanupState<T>(state: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n state.addReaction(\n (state) => [state.props.columns, state.itemsById, state.activeItemsById, state.activeColumns] as const,\n ([columns, itemsById, activeItemsById, activeColumns], draft) => {\n const columnIds = new Set(columns.map((column) => column.id));\n const activeColumnIds = new Set(activeColumns.map((column) => column.id));\n\n // Remove sort entries for non active columns\n const newSort = draft.sort.filter((s) => activeColumnIds.has(s.columnId));\n if (newSort.length < draft.sort.length) {\n draft.sort = newSort;\n setTimeout(() => {\n state.getState().props.onSortChange?.(newSort);\n });\n }\n\n // Remove filters for non active columns\n for (const id of draft.filters.keys()) {\n if (!activeColumnIds.has(id)) draft.filters.delete(id);\n }\n\n // Remove filterValues for non active columns\n for (const id of draft.filterValues.keys()) {\n if (!activeColumnIds.has(id)) draft.filterValues.delete(id);\n }\n\n // Remove hiddenColumns for non existing columns\n for (const id of draft.hiddenColumns.keys()) {\n if (!columnIds.has(id)) draft.hiddenColumns.delete(id);\n }\n\n // Remove columnWidth for non existing columns\n for (const id of draft.columnWidths.keys()) {\n if (!columnIds.has(id)) draft.columnWidths.delete(id);\n }\n\n // Remove non existing columns from columnOrder\n for (const id of draft.columnOrder) {\n if (!columnIds.has(id)) draft.columnOrder = draft.columnOrder.filter((x) => x !== id);\n }\n\n if (draft.props.items) {\n // Remove selection for non active items\n const newSelection = intersect(draft.selection, activeItemsById);\n if (newSelection.size !== draft.selection.size) {\n draft.selection = newSelection;\n setTimeout(() => {\n state.getState().props.onSelectionChange?.(newSelection);\n });\n }\n\n // Remove expanded for non existing items\n const newExpanded = intersect(draft.expanded, itemsById);\n if (newExpanded.size < draft.expanded.size) {\n draft.expanded = newExpanded;\n setTimeout(() => {\n state.getState().props.onExpandedChange?.(newExpanded);\n });\n }\n }\n },\n { runNow: true },\n ),\n [state],\n );\n}\n","import { useEffect } from 'react';\nimport { Store } from 'schummar-state/react';\nimport { orderBy } from '../misc/helpers';\nimport { InternalTableState } from '../types';\n\nexport function filterColumns<T>(state: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n state.addReaction(\n (state) => [state.props.columns, state.hiddenColumns, state.columnOrder] as const,\n ([columns, hiddenColumns, columnOrder], draft) => {\n draft.activeColumns = orderBy(\n columns.filter((column) => !hiddenColumns.has(column.id)),\n [(column) => columnOrder.indexOf(column.id)],\n );\n },\n { runNow: true },\n ),\n [state],\n );\n}\n","import { useEffect } from 'react';\nimport { Store } from 'schummar-state/react';\nimport { getAncestors, orderBy } from '../misc/helpers';\nimport { Id, InternalTableState } from '../types';\n\nexport function normalizeExpanded<T>(table: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n table.addReaction(\n (state) => [state.props.expandOnlyOne, state.expanded, state.itemsById] as const,\n ([expandOnlyOne, , itemsById], state) => {\n let expanded = state.expanded;\n let hasChanged = false;\n\n const allAncestors = [...expanded].map((id) => {\n const item = itemsById.get(id);\n return {\n id,\n ancestors: item ? getAncestors(itemsById, item) : new Set<Id>(),\n };\n });\n\n // If only one branch may be expanded, check if there are more and close if necessary\n if (expandOnlyOne) {\n const withMostAncestors = orderBy(allAncestors, [(x) => x.ancestors.size], ['desc'])[0];\n\n if ([...expanded].some((id) => id !== withMostAncestors?.id && !withMostAncestors?.ancestors.has(id))) {\n expanded = state.expanded = withMostAncestors?.ancestors ?? new Set();\n\n state.props.onExpandedChange?.(expanded);\n return;\n }\n }\n\n for (const { ancestors } of allAncestors) {\n for (const ancestor of ancestors ?? []) {\n if (!expanded.has(ancestor)) {\n expanded.add(ancestor);\n hasChanged = true;\n }\n }\n }\n\n if (hasChanged) {\n state.props.onExpandedChange?.(new Set(expanded));\n }\n },\n { runNow: true },\n ),\n [table],\n );\n}\n","import { useEffect } from 'react';\nimport { Store } from 'schummar-state/react';\nimport { InternalTableState } from '../types';\n\nexport function syncSelections<T>(table: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n table.addReaction(\n (state) => [state.props.selectSyncChildren, state.selection, state.activeItems] as const,\n ([selectSyncChildren, selection, activeItems], state) => {\n if (!selectSyncChildren) return;\n\n const newSelection = new Set(selection);\n for (const item of activeItems) {\n if (item.parentId !== undefined && newSelection.has(item.parentId)) {\n newSelection.add(item.id);\n }\n }\n\n if (newSelection.size !== selection.size) {\n state.selection = newSelection;\n setTimeout(() => {\n table.getState().props.onSelectionChange?.(newSelection);\n });\n }\n },\n { runNow: true },\n ),\n [table],\n );\n}\n","import { castDraft } from 'immer';\nimport { useEffect, useMemo, useState } from 'react';\nimport { Store } from 'schummar-state/react';\nimport { InternalTableState, TableProps } from '../types';\nimport { calcItems } from './calcItems';\nimport { calcProps } from './calcProps';\nimport { cleanupState } from './cleanupState';\nimport { filterColumns } from './filterColumns';\nimport { normalizeExpanded } from './normalizeExpanded';\nimport { syncSelections } from './syncSelections';\n\nexport function useTableState<T>(_props: TableProps<T>): [Store<InternalTableState<T>>, () => void] {\n const [key, setKey] = useState({});\n const props = calcProps(_props);\n\n function reset() {\n setKey({});\n\n if (props.sort === undefined) {\n props.onSortChange?.(props.defaultSort ?? []);\n }\n\n if (props.expanded === undefined) {\n props.onExpandedChange?.(props.defaultExpanded ?? new Set());\n }\n\n if (props.selection === undefined) {\n props.onSelectionChange?.(props.defaultSelection ?? new Set());\n }\n\n if (props.hiddenColumns === undefined) {\n props.onHiddenColumnsChange?.(props.defaultHiddenColumns ?? new Set());\n }\n\n props.onReset?.();\n }\n\n const state = useMemo(\n () =>\n new Store<InternalTableState<T>>({\n props,\n\n key,\n sort: props.defaultSort ?? [],\n selection: props.defaultSelection ?? new Set(),\n expanded: props.defaultExpanded ?? new Set(),\n rowHeights: new Map(),\n filters: new Map(),\n filterValues: new Map(),\n hiddenColumns: props.defaultHiddenColumns ?? new Set(),\n columnWidths: new Map(),\n columnOrder: props.columns.map((column) => column.id),\n columnStyleOverride: new Map(),\n\n activeColumns: [],\n items: [],\n itemsById: new Map(),\n activeItems: [],\n activeItemsById: new Map(),\n lastSelectedId: undefined,\n }),\n [key],\n );\n\n filterColumns(state);\n calcItems(state);\n normalizeExpanded(state);\n syncSelections(state);\n cleanupState(state);\n\n useEffect(() => {\n state.update((state) => {\n state.props = castDraft(props);\n if (props.sort) state.sort = props.sort;\n if (props.selection) state.selection = props.selection;\n if (props.expanded) state.expanded = props.expanded;\n if (props.hiddenColumns) state.hiddenColumns = props.hiddenColumns;\n for (const column of props.columns) {\n if (!state.columnOrder.includes(column.id)) {\n const index = props.columns.indexOf(column);\n state.columnOrder.splice(index, 0, column.id);\n }\n }\n });\n }, [state, props]);\n\n return [state, reset];\n}\n","import { useTheme } from '../hooks/useTheme';\n\nexport function useCssVariables() {\n return useTheme(({ spacing, colors }) => ({\n '--spacing': spacing,\n '--primaryMain': colors.primary.main,\n '--primaryLight': colors.primary.light,\n '--primaryContrastText': colors.primary.contrastText,\n '--secondaryMain': colors.secondary.main,\n '--secondaryLight': colors.secondary.light,\n '--secondaryContrastText': colors.secondary.contrastText,\n }));\n}\n","import React from 'react';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { useTableContext, useTheme } from '..';\n\nexport default function ClearFiltersButton<T>() {\n const Button = useTheme((t) => t.components.Button);\n const textClearFilters = useTheme((t) => t.text.clearFilters);\n const table = useTableContext<T>();\n\n return (\n <div css={defaultClasses.clearFiltersButton}>\n <Button\n variant=\"outlined\"\n onClick={() => {\n table.update((state) => {\n state.activeColumns.forEach((column) => {\n state.filterValues.delete(column.id);\n });\n });\n }}\n >\n {textClearFilters}\n </Button>\n </div>\n );\n}\n","import { useTheme } from '../hooks/useTheme';\nimport { cx } from '../misc/helpers';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { useColumnContext, useTableContext } from './table';\n\nexport function ColumnFooter() {\n const table = useTableContext();\n const columnId = useColumnContext();\n const stickyFooter = table.useState('props.stickyFooter');\n const columnStyleOverride = table.useState((state) => state.columnStyleOverride.get(columnId), { throttle: 16 });\n const columnClasses = table.useState((state) => state.activeColumns.find((column) => column.id === columnId)?.classes);\n const classes = useTheme((theme) => theme.classes);\n\n const content = table.useState((state) => {\n const column = state.activeColumns.find((column) => column.id === columnId);\n\n return column?.footer;\n });\n\n return (\n <div\n className={cx(classes?.footerCell, columnClasses?.footerCell)}\n css={[\n defaultClasses.footerCell,\n columnStyleOverride,\n stickyFooter && defaultClasses.stickyBottom,\n stickyFooter instanceof Object && stickyFooter,\n ]}\n >\n {content}\n </div>\n );\n}\n","import { createContext, useMemo, useState } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { cx } from '../misc/helpers';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport { useColumnContext, useTableContext } from './table';\n\nexport const FilterControlContext = createContext({\n isActive: false,\n close: (): void => void 0,\n});\n\nexport function FilterControl<T>(): JSX.Element | null {\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n const IconButton = useTheme((t) => t.components.IconButton);\n const Popover = useTheme((t) => t.components.Popover);\n const FilterList = useTheme((t) => t.icons.FilterList);\n const ArrowDropDown = useTheme((t) => t.icons.ArrowDropDown);\n const classes = useTheme((t) => t.classes);\n const cssVariables = useCssVariables();\n\n const [anchor, setAnchor] = useState<Element | null>(null);\n const isActive = table.useState((state) => {\n const filter = state.filters.get(columnId);\n const filterValue = state.filterValues.get(columnId);\n return filter !== undefined && filterValue !== undefined && filter.isActive(filterValue);\n });\n const filterClassNames = table.useState((state) => {\n const filter = state.filters.get(columnId);\n return filter?.classNames;\n });\n const filter = table.useState((state) => state.activeColumns.find((column) => column.id === columnId)?.filter);\n\n function reset() {\n table.update((state) => {\n const impl = state.filters.get(columnId);\n\n impl?.onChange?.(undefined);\n\n if (impl?.value !== undefined) {\n state.filterValues.delete(columnId);\n }\n });\n }\n\n const context = useMemo(\n () => ({\n isActive: !!anchor,\n close: () => setAnchor(null),\n }),\n [!!anchor],\n );\n\n if (!filter) return null;\n\n return (\n <FilterControlContext.Provider value={context}>\n <div\n onClick={(e) => setAnchor(e.currentTarget)}\n onContextMenu={(e) => {\n reset();\n e.preventDefault();\n return false;\n }}\n >\n <IconButton\n css={[\n { color: '#b0bac9' },\n isActive && {\n color: 'var(--primaryMain) !important',\n },\n ]}\n >\n {isActive ? <FilterList /> : <ArrowDropDown />}\n </IconButton>\n </div>\n\n <div\n onPointerDown={(e) => {\n e.stopPropagation();\n }}\n onPointerMove={(e) => {\n e.stopPropagation();\n }}\n >\n <Popover\n open\n hidden={!anchor}\n onClose={() => setAnchor(null)}\n anchorEl={anchor ?? document.body}\n css={cssVariables}\n className={cx(classes?.popover, filterClassNames?.popover)}\n backdropClassName={cx(classes?.popoverBackdrop, filterClassNames?.popoverBackdrop)}\n >\n {filter}\n </Popover>\n </div>\n </FilterControlContext.Provider>\n );\n}\n","import React, { HTMLProps } from 'react';\nimport { useColumnContext, useTableContext } from '..';\n\nexport function ResizeHandle() {\n const table = useTableContext();\n const columnId = useColumnContext();\n const enabled = table.useState('props.enableColumnResize');\n\n function onPointerDown(e: React.PointerEvent) {\n e.stopPropagation();\n\n const div = e.target as HTMLDivElement;\n div.setPointerCapture(e.pointerId);\n }\n\n function onPointerMove(e: React.PointerEvent) {\n e.stopPropagation();\n\n const div = e.target as HTMLDivElement;\n if (!div.hasPointerCapture(e.pointerId)) return;\n\n const parent = div.parentElement as HTMLDivElement;\n const width = Math.max(e.clientX - parent.getBoundingClientRect().left + 5, 50);\n\n table.update((state) => {\n state.columnWidths.set(columnId, `${width}px`);\n });\n }\n\n function onPointerUp(e: React.PointerEvent) {\n e.stopPropagation();\n\n const div = e.target as HTMLDivElement;\n div.releasePointerCapture(e.pointerId);\n }\n\n function onDoubleClick(e: React.MouseEvent) {\n table.update((state) => {\n if (e.getModifierState('Control')) {\n state.columnWidths.delete(columnId);\n } else {\n state.columnWidths.set(columnId, 'max-content');\n }\n });\n }\n\n return (\n <ResizeHandleView\n enabled={enabled}\n onPointerDown={enabled ? onPointerDown : undefined}\n onPointerMove={enabled ? onPointerMove : undefined}\n onPointerUp={enabled ? onPointerUp : undefined}\n onDoubleClick={enabled ? onDoubleClick : undefined}\n />\n );\n}\n\nexport function ResizeHandleView({ enabled, ...props }: HTMLProps<HTMLDivElement> & { enabled?: boolean }) {\n return (\n <div\n css={{\n alignSelf: 'stretch',\n padding: '0 5px',\n cursor: enabled ? 'col-resize' : 'initial',\n display: 'flex',\n alignItems: 'center',\n\n '&:after': {\n content: '\"\"',\n width: 1,\n height: '1.5em',\n background: '#c9cfda',\n transition: 'transform 300ms',\n },\n }}\n {...props}\n />\n );\n}\n","import React, { ReactNode } from 'react';\nimport { useTheme } from '..';\nimport { useColumnContext, useTableContext } from './table';\n\nexport function SortComponent<T>({ children }: { children: ReactNode }): JSX.Element {\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n const Badge = useTheme((t) => t.components.Badge);\n const ArrowUpward = useTheme((t) => t.icons.ArrowUpward);\n\n const { direction, index, sortDisabled } = table.useState((state) => {\n const index = state.sort.findIndex((s) => s.columnId === columnId) ?? -1;\n const column = state.activeColumns.find((column) => column.id === columnId);\n\n return {\n direction: state.sort[index]?.direction,\n index: index >= 0 && state.sort.length > 1 ? index + 1 : undefined,\n sortDisabled: column?.disableSort ?? state.props.disableSort,\n };\n });\n\n function toggle(e: React.MouseEvent, off?: boolean) {\n if (sortDisabled) {\n return;\n }\n\n const {\n props: { sort: controlledSort, onSortChange },\n } = table.getState();\n\n const newDirection = direction === 'asc' ? 'desc' : 'asc';\n const newSort = e.getModifierState('Control') || off ? table.getState().sort.filter((s) => s.columnId !== columnId) : [];\n if (!off) {\n newSort.push({\n columnId,\n direction: newDirection,\n });\n }\n\n onSortChange?.(newSort);\n\n if (!controlledSort) {\n table.update((state) => {\n state.sort = newSort;\n });\n }\n\n e.preventDefault();\n return false;\n }\n\n return (\n <div\n css={{\n userSelect: 'none',\n display: 'grid',\n gridTemplateColumns: 'minmax(0, 1fr) max-content',\n alignItems: 'center',\n cursor: 'pointer',\n\n '& > div': {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n }}\n onClick={(e) => toggle(e)}\n onContextMenu={(e) => toggle(e, true)}\n >\n <div>{children}</div>\n\n {\n <Badge badgeContent={sortDisabled ? 0 : index}>\n <span\n css={[\n { transition: 'all 300ms', fontSize: '0.8em' },\n !direction && { opacity: 0 },\n direction === 'desc' && { transform: 'rotate3d(0, 0, 1, 180deg)' },\n ]}\n >\n <ArrowUpward />\n </span>\n </Badge>\n }\n </div>\n );\n}\n","import { castDraft } from 'immer';\nimport React, { useEffect, useRef } from 'react';\nimport { StoreScope } from 'schummar-state/react';\nimport { Id, useColumnContext, useTableContext } from '..';\nimport { useTheme } from '../hooks/useTheme';\nimport { cx } from '../misc/helpers';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { FilterControl } from './filterControl';\nimport { ResizeHandle } from './resizeHandle';\nimport { SortComponent } from './sortComponent';\n\nexport const ColumnHeaderContext = new StoreScope({\n items: new Map<Id, HTMLDivElement>(),\n});\n\nexport function ColumnHeader() {\n const ref = useRef<HTMLDivElement>(null);\n const columnId = useColumnContext();\n const table = useTableContext();\n const enabled = table.useState('props.enableColumnReorder');\n const columnStyleOverride = table.useState((state) => state.columnStyleOverride.get(columnId), { throttle: 16 });\n const stickyHeader = table.useState('props.stickyHeader');\n const classes = useTheme((theme) => theme.classes);\n\n const { header, columnClasses } = table.useState((state) => {\n const column = state.activeColumns.find((column) => column.id === columnId);\n return {\n header: column?.header,\n columnClasses: column?.classes,\n };\n });\n\n const store = ColumnHeaderContext.useStore();\n const draggingStart = useRef<{ mouseX: number; bounds: DOMRect }>();\n const clone = useRef<HTMLDivElement>();\n\n // Track each headers div in a store\n useEffect(() => {\n const div = ref.current;\n if (!div) return;\n\n store.update((state) => {\n state.items.set(columnId, castDraft(div));\n });\n\n return () => {\n store.update((state) => {\n state.items.delete(columnId);\n });\n };\n }, [ref.current, store, columnId]);\n\n // Calculate which index the current header would get, given the current offset\n function calcTargetIndex(offsetLeft: number) {\n const cols = table.getState().columnOrder.map((id) => ({ id, div: store.getState().items.get(id) }));\n\n const otherCols = cols.filter((col) => col.id !== columnId);\n\n const firstOffsetleft = cols.find((col) => col.div)?.div?.offsetLeft ?? 0;\n\n let sum = 0;\n const targetIndex = otherCols.findIndex((col) => {\n const width = col.div?.offsetWidth ?? 0;\n if (sum + width / 2 > offsetLeft - firstOffsetleft) return true;\n sum += width;\n return false;\n });\n\n return targetIndex === -1 ? otherCols.length : targetIndex;\n }\n\n // When starting clicking: Record initial mouse and div's bounds\n function onPointerDown(e: React.PointerEvent) {\n const div = ref.current;\n if (!div) return;\n draggingStart.current = { mouseX: e.clientX, bounds: div.getBoundingClientRect() };\n }\n\n // When mouse moves while clicked: Calculate transforms\n function onPointerMove(e: React.PointerEvent) {\n table.update((state) => {\n const div = ref.current;\n if (!div || draggingStart.current === undefined || Math.abs(e.clientX - draggingStart.current.mouseX) < 5) return;\n\n e.stopPropagation();\n div.setPointerCapture(e.pointerId);\n\n // Create clone of header div to move around with mouse\n if (!clone.current) {\n clone.current = div.cloneNode(true) as HTMLDivElement;\n document.body.append(clone.current);\n\n for (const [key, value] of Object.entries(getComputedStyle(div))) {\n try {\n clone.current.style[key as any] = value;\n } catch {\n // ignore\n }\n }\n\n Object.assign(clone.current.style, {\n pointerEvents: 'none',\n position: 'fixed',\n boxShadow: '0px 5px 5px -3px rgb(0 0 0 / 20%), 0px 8px 10px 1px rgb(0 0 0 / 14%), 0px 3px 14px 2px rgb(0 0 0 / 12%)',\n left: `${draggingStart.current.bounds.left}px`,\n top: `${draggingStart.current.bounds.top}px`,\n });\n\n div.style.color = 'rgba(0, 0, 0, 0.2)';\n }\n\n // Update clone's position each time\n clone.current.style.left = `${draggingStart.current.bounds.left + e.clientX - draggingStart.current.mouseX}px`;\n\n // Calculate target index\n const index = state.columnOrder.indexOf(columnId);\n const targetIndex = calcTargetIndex(div.offsetLeft + e.clientX - draggingStart.current.mouseX);\n\n // Apply transforms to each column\n const columns = table\n .getState()\n .columnOrder.map((id, index) => ({ id, index, width: store.getState().items.get(id)?.offsetWidth ?? 0 }));\n\n state.columnOrder.forEach((id, i) => {\n let offset = 0;\n if (i === index) {\n // Current column: Move to target pos\n if (targetIndex > index) {\n offset = columns.slice(index + 1, targetIndex + 1).reduce((sum, col) => sum + col.width, 0);\n } else if (targetIndex < index) {\n offset = -columns.slice(targetIndex, index).reduce((sum, col) => sum + col.width, 0);\n }\n } else if (i >= targetIndex && i < index) {\n // Left columns: Move right to make room if needed\n offset = div.offsetWidth;\n } else if (i > index && i <= targetIndex) {\n // Right columns: Move left to make room if needed\n offset = -div.offsetWidth;\n }\n\n state.columnStyleOverride.set(id, {\n transition: 'transform 500ms',\n transform: `translate3d(${offset}px, 0, 0)`,\n zIndex: i === index ? 1 : undefined,\n });\n });\n });\n }\n\n // When releasing mouse: Reset draggin state and apply column move\n function onPointerUp(e: React.PointerEvent) {\n table.update((state) => {\n const div = ref.current;\n if (!div || draggingStart.current === undefined) return;\n\n // Apply column move\n const index = state.columnOrder.indexOf(columnId);\n const targetIndex = calcTargetIndex(div.offsetLeft + e.clientX - draggingStart.current.mouseX);\n\n state.columnOrder.splice(index, 1);\n state.columnOrder.splice(targetIndex, 0, columnId);\n\n // Cleanup\n clone.current?.remove();\n div.style.color = '';\n state.columnStyleOverride.clear();\n draggingStart.current = undefined;\n clone.current = undefined;\n });\n }\n\n return (\n <div\n ref={ref}\n className={cx(classes?.headerCell, columnClasses?.headerCell)}\n css={[\n {\n position: 'relative',\n userSelect: 'none',\n },\n defaultClasses.headerCell,\n columnStyleOverride,\n stickyHeader && defaultClasses.sticky,\n stickyHeader instanceof Object && stickyHeader,\n ]}\n onPointerDown={enabled ? onPointerDown : undefined}\n onPointerMove={enabled ? onPointerMove : undefined}\n onPointerUp={enabled ? onPointerUp : undefined}\n >\n <SortComponent>{header}</SortComponent>\n <div css={{ flex: 1 }} />\n <FilterControl />\n <ResizeHandle />\n </div>\n );\n}\n","import { ReactNode } from 'react';\n\nexport function FormControlLabel({ control, label, disabled }: { control: ReactNode; label: ReactNode; disabled?: boolean }) {\n return (\n <label\n css={[\n {\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n userSelect: 'none',\n\n '& > *': {\n cursor: 'pointer',\n },\n },\n disabled && { color: 'rgba(0, 0, 0, 0.26)' },\n ]}\n >\n {control}\n <span css={{ marginLeft: 'var(--spacing)' }}>{label}</span>\n </label>\n );\n}\n","import React, { useContext, useState } from 'react';\nimport { useTheme } from '..';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport { InternalColumn } from '../types';\nimport { FormControlLabel } from './formControlLabel';\nimport { TableResetContext, useTableContext } from './table';\n\nexport function ColumnSelection<T>(): JSX.Element {\n const IconButton = useTheme((t) => t.components.IconButton);\n const Popover = useTheme((t) => t.components.Popover);\n const Checkbox = useTheme((t) => t.components.Checkbox);\n const Button = useTheme((t) => t.components.Button);\n const Settings = useTheme((t) => t.icons.Settings);\n const selectColumns = useTheme((t) => t.text.selectColumns);\n const resetAll = useTheme((t) => t.text.resetAll);\n const classes = useTheme((t) => t.classes);\n const cssVariables = useCssVariables();\n\n const table = useTableContext<T>();\n const reset = useContext(TableResetContext);\n const columns = table.useState('props.columns');\n const hiddenColumns = table.useState('hiddenColumns');\n\n const [anchorEl, setAnchorEl] = useState<Element | null>(null);\n\n const toggle = (column: InternalColumn<T, unknown>) => {\n const {\n props: { hiddenColumns: controlledHiddenColumns, onHiddenColumnsChange },\n } = table.getState();\n\n const newValue = new Set(hiddenColumns);\n if (hiddenColumns.has(column.id)) newValue.delete(column.id);\n else newValue.add(column.id);\n\n if (!controlledHiddenColumns) {\n table.update((state) => {\n state.hiddenColumns = newValue;\n });\n }\n\n onHiddenColumnsChange?.(newValue);\n };\n\n return (\n <>\n <IconButton onClick={(e) => setAnchorEl(anchorEl ? null : e.currentTarget)}>\n <Settings />\n </IconButton>\n\n <Popover\n anchorEl={anchorEl}\n open={!!anchorEl}\n onClose={() => setAnchorEl(null)}\n css={cssVariables}\n className={classes?.popover}\n backdropClassName={classes?.popoverBackdrop}\n >\n <div css={{ padding: `calc(var(--spacing) * 2)`, display: 'grid' }}>\n <div css={{ marginBottom: 'var(--spacing)' }}>{selectColumns}</div>\n\n {columns.map((column) => (\n <FormControlLabel\n key={column.id}\n control={<Checkbox checked={!hiddenColumns.has(column.id)} onChange={() => toggle(column)} disabled={column.cannotHide} />}\n label={column.header}\n ></FormControlLabel>\n ))}\n\n <Button variant=\"outlined\" onClick={reset}>\n {resetAll}\n </Button>\n </div>\n </Popover>\n </>\n );\n}\n","export type CsvExportOptions = { sepPrefix?: boolean; separator?: string; quote?: string; eol?: string };\n\nexport function csvExport(\n data: (string | number)[][],\n { sepPrefix, separator = ',', quote = '\"', eol = '\\n' }: CsvExportOptions = {},\n): string {\n const cells = data.map((line) =>\n line.map((value) => {\n if (typeof value === 'number') return String(value);\n if (![separator, quote, eol].some((c) => value.includes(c))) return value;\n\n const clean = value.replace(new RegExp(quote, 'g'), `${quote}${quote}`);\n return `${quote}${clean}${quote}`;\n }),\n );\n\n return (sepPrefix ? `SEP=${separator}\\n` : '') + cells.map((line) => line.join(separator)).join(eol);\n}\n","import React, { useState } from 'react';\nimport { useTheme } from '..';\nimport { csvExport, CsvExportOptions } from '../misc/csvExport';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport { useTableContext } from './table';\n\nexport function Export<T>(): JSX.Element {\n const table = useTableContext<T>();\n const Button = useTheme((t) => t.components.Button);\n const IconButton = useTheme((t) => t.components.IconButton);\n const Popover = useTheme((t) => t.components.Popover);\n const Export = useTheme((t) => t.icons.Export);\n const Clipboard = useTheme((t) => t.icons.Clipboard);\n const exportTitle = useTheme((t) => t.text.exportTitle);\n const exportCopy = useTheme((t) => t.text.exportCopy);\n const exportDownload = useTheme((t) => t.text.exportDownload);\n const classes = useTheme((t) => t.classes);\n const cssVariables = useCssVariables();\n\n const [anchor, setAnchor] = useState<Element | null>(null);\n\n const generate = (options?: CsvExportOptions) => {\n const { activeColumns, activeItems } = table.getState();\n\n const data = [\n activeColumns.map((column) => String(column.id)),\n ...activeItems.map((item) => activeColumns.map((column) => column.exportCell(column.value(item.value), item.value))),\n ];\n return csvExport(data, options);\n };\n\n const copy = () => {\n navigator.clipboard.writeText(generate(table.getState().props.enableExport.copy));\n };\n\n const download = () => {\n const a = document.createElement('a');\n a.href = 'data:text/csv;charset=utf-8,' + encodeURIComponent(generate(table.getState().props.enableExport.download));\n a.download = 'export.csv';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n };\n\n return (\n <>\n <IconButton onClick={(e) => setAnchor(anchor ? null : e.currentTarget)}>\n <Export css={!!anchor && { color: 'var(--primaryMain)' }} />\n </IconButton>\n\n <Popover\n open={!!anchor}\n onClose={() => setAnchor(null)}\n anchorEl={anchor}\n css={cssVariables}\n className={classes?.popover}\n backdropClassName={classes?.popoverBackdrop}\n >\n <div\n css={{\n padding: `calc(var(--spacing) * 2)`,\n display: 'grid',\n justifyItems: 'stretch',\n gap: 'var(--spacing)',\n\n '& > *': {\n justifyContent: 'start',\n },\n }}\n >\n <div css={{ marginBottom: 'var(--spacing)' }}>{exportTitle}</div>\n <Button startIcon={<Clipboard />} onClick={copy}>\n {exportCopy}\n </Button>\n <Button startIcon={<Export />} onClick={download}>\n {exportDownload}\n </Button>\n </div>\n </Popover>\n </>\n );\n}\n","import React, { memo, ReactNode, useLayoutEffect } from 'react';\nimport { Id, useColumnContext, useTableContext, useTheme } from '..';\nimport { cx } from '../misc/helpers';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { calcClassNames } from './row';\n\nconst defaultWrapCell = (content: ReactNode) => {\n if (typeof content === 'string') {\n return (\n <span css={defaultClasses.text} title={content}>\n {content}\n </span>\n );\n }\n return content;\n};\n\nexport const Cell = memo(function Cell<T>({ itemId, rowIndex }: { itemId: Id; rowIndex: number }) {\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n\n const column = table.useState((state) => {\n const col = state.activeColumns.find((column) => column.id === columnId);\n return (\n col && {\n value: col.value,\n renderCell: col.renderCell,\n }\n );\n });\n const wrapCell = table.useState((state) => state.props.wrapCell) ?? defaultWrapCell;\n const item = table.useState((state) => state.activeItemsById.get(itemId));\n const columnStyleOverride = table.useState((state) => state.columnStyleOverride.get(columnId), { throttle: 16 });\n\n useLayoutEffect(() => table.getState().props.debugRender?.('render cell', itemId, columnId));\n const className = useTheme((t) => cx(...calcClassNames(t.classes, item, rowIndex)));\n\n if (!column || !item) return null;\n\n const content = column.renderCell(column.value(item.value), item.value);\n\n return (\n <div className={className} css={[defaultClasses.cell, columnStyleOverride]}>\n {wrapCell(content, column.value(item.value), item.value, rowIndex)}\n </div>\n );\n});\n","import React from 'react';\nimport { useTheme } from '..';\nimport { getAncestors } from '../misc/helpers';\nimport { Id } from '../types';\nimport { useTableContext } from './table';\n\nexport function ExpandControl<T>({ itemId, hasDeferredChildren }: { itemId: Id; hasDeferredChildren?: boolean }): JSX.Element {\n const IconButton = useTheme((t) => t.components.IconButton);\n const Spinner = useTheme((t) => t.components.Spinner);\n const ChevronRight = useTheme((t) => t.icons.ChevronRight);\n\n const table = useTableContext<T>();\n const isExpanded = table.useState((state) => state.expanded.has(itemId));\n const hasChildren = table.useState((state) => !!state.activeItemsById.get(itemId)?.children.length);\n\n function toggle() {\n const {\n props: { expanded: controlledExpanded, expandOnlyOne, onExpandedChange },\n expanded,\n activeItemsById,\n } = table.getState();\n\n const newExpanded = new Set(expanded);\n\n if (expandOnlyOne) {\n newExpanded.clear();\n\n const item = activeItemsById.get(itemId);\n for (const ancestor of item ? getAncestors(activeItemsById, item) : []) {\n newExpanded.add(ancestor);\n }\n }\n\n if (isExpanded) {\n newExpanded.delete(itemId);\n } else {\n newExpanded.add(itemId);\n }\n\n onExpandedChange?.(newExpanded);\n\n if (!controlledExpanded) {\n table.update((state) => {\n state.expanded = newExpanded;\n });\n }\n }\n\n if (isExpanded && hasDeferredChildren && !hasChildren) {\n return <Spinner css={{ margin: '0 var(--spacing)' }} />;\n }\n\n return (\n <IconButton onClick={toggle}>\n <span\n css={{\n display: 'inline-flex',\n transition: 'all 300ms',\n transform: isExpanded ? 'rotate3d(0, 0, 1, 90deg)' : 'rotate3d(0, 0, 1, 0deg)',\n }}\n >\n <ChevronRight />\n </span>\n </IconButton>\n );\n}\n","import React from 'react';\nimport { useTheme } from '..';\nimport { getAncestors, getDescendants } from '../misc/helpers';\nimport { Id } from '../types';\nimport { useTableContext } from './table';\n\nexport function SelectComponent<T>({ itemId }: { itemId?: Id }): JSX.Element {\n const table = useTableContext<T>();\n const Checkbox = useTheme((t) => t.components.Checkbox);\n\n const isSelected = table.useState((state) => {\n const itemIds = itemId ? [itemId] : Array.from(state.activeItemsById.keys());\n return state.activeItemsById.size > 0 && itemIds.every((itemId) => state.selection.has(itemId));\n });\n\n function toggle(e: React.ChangeEvent) {\n const mouseEvent = e.nativeEvent as MouseEvent;\n\n const {\n activeItems,\n activeItemsById,\n lastSelectedId,\n selection,\n props: { selectSyncChildren, selection: controlledSelection, onSelectionChange },\n } = table.getState();\n\n let range;\n if (mouseEvent.shiftKey && itemId) {\n const a = lastSelectedId ? activeItems.findIndex((i) => lastSelectedId === i.id) : 0;\n const b = activeItems.findIndex((item) => item.id === itemId);\n range = activeItems.slice(Math.min(a, b), Math.max(a, b) + 1);\n } else {\n const item = itemId ? activeItemsById.get(itemId) : undefined;\n range = item ? [item] : activeItems;\n }\n\n const newSelection = new Set(selection);\n for (const item of range) {\n if (isSelected) newSelection.delete(item.id);\n else newSelection.add(item.id);\n }\n\n if (selectSyncChildren && isSelected) {\n for (const ancestor of getAncestors(activeItemsById, ...range)) {\n newSelection.delete(ancestor);\n }\n for (const descendant of getDescendants(...range)) {\n newSelection.delete(descendant);\n }\n }\n\n onSelectionChange?.(newSelection);\n\n if (!controlledSelection) {\n table.update((state) => {\n state.selection = newSelection;\n });\n }\n\n table.update((state) => {\n state.lastSelectedId = itemId;\n });\n }\n\n return (\n <Checkbox\n css={{\n justifySelf: 'start',\n color: '#c9cfda',\n }}\n checked={isSelected}\n onChange={toggle}\n />\n );\n}\n","import React, { memo, useEffect, useLayoutEffect, useRef } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { cx, getAncestors } from '../misc/helpers';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { Id, MemoizedTableTheme } from '../types';\nimport { Cell } from './cell';\nimport { ExpandControl } from './expandControl';\nimport { SelectComponent } from './selectComponent';\nimport { ColumnContext, useTableContext } from './table';\n\nexport function calcClassNames<T>(classes: MemoizedTableTheme<any>['classes'] | undefined, item: T, index: number) {\n return [\n classes?.cell instanceof Function ? classes.cell(item, index) : classes?.cell,\n index % 2 === 0 && classes?.evenCell,\n index % 2 === 1 && classes?.oddCell,\n ];\n}\n\nexport const Row = memo(function Row<T>({ itemId, rowIndex }: { itemId: Id; rowIndex: number }): JSX.Element | null {\n const table = useTableContext<T>();\n const divRef = useRef<HTMLDivElement>(null);\n\n const classes = useTheme((t) => t.classes);\n\n const { className, indent, hasChildren, hasDeferredChildren, columnIds, enableSelection, rowAction } = table.useState((state) => {\n const item = state.activeItemsById.get(itemId);\n\n return {\n className: cx(...calcClassNames(classes, item, rowIndex)),\n indent: item ? getAncestors(state.activeItemsById, item).size : 0,\n hasChildren: !!item?.children.length,\n hasDeferredChildren: item && state.props.hasDeferredChildren?.(item.value),\n columnIds: state.activeColumns.map((column) => column.id),\n enableSelection: state.props.enableSelection,\n rowAction:\n state.props.rowAction instanceof Function ? (item ? state.props.rowAction(item.value, rowIndex) : null) : state.props.rowAction,\n };\n });\n\n useEffect(() => {\n const div = divRef.current;\n if (!div) return;\n\n const o = new ResizeObserver(() => {\n if (!document.contains(div)) return;\n table.update((state) => {\n state.rowHeights.set(itemId, div.offsetHeight);\n });\n });\n o.observe(div);\n\n return () => o.disconnect();\n }, [divRef.current]);\n\n useLayoutEffect(() => table.getState().props.debugRender?.('render row', itemId));\n\n return (\n <>\n <div className={className} css={[defaultClasses.cellFill]} ref={divRef} />\n\n <div className={className} css={[defaultClasses.cell, defaultClasses.firstCell]}>\n <div css={{ width: indent * 20 }} />\n\n {enableSelection && <SelectComponent itemId={itemId} />}\n\n {(hasChildren || hasDeferredChildren) && <ExpandControl itemId={itemId} hasDeferredChildren={hasDeferredChildren} />}\n\n {rowAction}\n </div>\n\n {columnIds.map((columnId) => (\n <ColumnContext.Provider key={columnId} value={columnId}>\n <Cell itemId={itemId} rowIndex={rowIndex} />\n </ColumnContext.Provider>\n ))}\n\n <div className={className} css={[defaultClasses.cellFill]} />\n </>\n );\n});\n","export function throttle<Args extends any[]>(\n fn: (...args: Args) => void,\n ms: number,\n): { (...args: Args): void; flush(): void; cancel(): void } {\n let last = 0;\n let lastArgs: Args | undefined;\n let timeout: ReturnType<typeof setTimeout> | undefined;\n\n function run() {\n const args = lastArgs;\n\n last = Date.now();\n lastArgs = undefined;\n timeout = undefined;\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n fn(...args!);\n }\n\n return Object.assign(\n function (...args: Args) {\n const now = Date.now();\n lastArgs = args;\n\n if (timeout) {\n // do nothing\n } else if (now < last + ms) {\n timeout = setTimeout(run, last + ms - now);\n } else {\n run();\n }\n },\n {\n flush() {\n if (lastArgs) {\n run();\n }\n },\n\n cancel() {\n if (timeout) {\n clearTimeout(timeout);\n }\n },\n },\n );\n}\n","import React, { HTMLProps, ReactNode, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { throttle } from '../misc/throttle';\nimport { Id } from '../types';\nimport { useTableContext } from './table';\n\nconst findScrollRoot = (x: HTMLElement): HTMLElement => {\n const parent = x.parentElement;\n if (!parent) return document.documentElement;\n if (parent.scrollHeight > parent.clientHeight && getComputedStyle(parent).overflowY !== 'visible') return parent;\n return findScrollRoot(parent);\n};\n\nconst relativeOffset = (x: HTMLElement, y: HTMLElement): number => {\n if (x.offsetParent === y.offsetParent || !x.offsetParent) return x.offsetTop - y.offsetTop;\n if (x.offsetParent instanceof HTMLElement) return relativeOffset(x.offsetParent, y) + x.offsetTop;\n return 0;\n};\n\nexport function Virtualized<T>({\n header,\n footer,\n children,\n ...props\n}: {\n header: ReactNode;\n footer: ReactNode;\n children: (itemIds: Id[], startIndex: number) => ReactNode;\n} & Omit<HTMLProps<HTMLDivElement>, 'children'>): JSX.Element {\n const table = useTableContext<T>();\n const virtual = table.useState('props.virtual');\n const probeRef = useRef<HTMLDivElement>(null);\n const [, setCounter] = useState(0);\n\n const {\n itemIds = [],\n from = 0,\n to,\n before = 0,\n after = 0,\n } = table.useState(\n (state) => {\n const itemIds = state.activeItems.map((item) => item.id);\n const root = probeRef.current && findScrollRoot(probeRef.current);\n if (!state.props.virtual) return { itemIds };\n if (!probeRef.current || !root || !document.contains(root)) return {};\n\n const {\n rowHeight,\n initalRowHeight,\n overscan = 100,\n overscanTop,\n overscanBottom,\n } = (state.props.virtual instanceof Object ? state.props.virtual : undefined) ?? {};\n\n let totalHeight = 0;\n const rowHeights = itemIds.map((itemId, index) => {\n const h = rowHeight ?? state.rowHeights.get(itemId) ?? initalRowHeight ?? (index === 0 ? 100 : totalHeight / index);\n totalHeight += h;\n return h;\n });\n\n const probeOffset = relativeOffset(probeRef.current, root);\n const headerHeight = probeRef.current.offsetTop;\n const topOfTable = root.scrollTop - probeOffset + headerHeight;\n const bottomOfTable = topOfTable + root.clientHeight - headerHeight;\n\n let from = 0,\n to = itemIds.length,\n before = 0,\n after = 0;\n for (const h of rowHeights) {\n if (before + h > topOfTable - (overscanTop ?? overscan)) break;\n from++;\n before += h;\n }\n\n for (const h of rowHeights.reverse()) {\n if (after + h > totalHeight - bottomOfTable - (overscanBottom ?? overscan)) break;\n to--;\n after += h;\n }\n\n return { itemIds: itemIds.slice(from, to), from, to, before, after };\n },\n { throttle: 16 },\n );\n\n const throttleScroll = (typeof virtual === 'boolean' ? undefined : virtual)?.throttleScroll ?? 16;\n const incCounter = useMemo(() => throttle(() => setCounter((c) => c + 1), throttleScroll), [throttleScroll]);\n\n useEffect(() => {\n if (!virtual || !probeRef.current) return;\n\n window.addEventListener('scroll', incCounter, true);\n window.addEventListener('resize', incCounter, true);\n return () => {\n window.removeEventListener('scroll', incCounter, true);\n window.removeEventListener('resize', incCounter, true);\n };\n }, [probeRef.current, incCounter]);\n\n useEffect(() => incCounter.cancel, [incCounter]);\n\n useLayoutEffect(() => table.getState().props.debugRender?.(`Virtualalized render ${from} to ${to}`));\n\n return (\n <div {...props}>\n {header}\n\n {virtual && <div style={{ gridColumn: '1 / -1', height: before }} ref={probeRef} />}\n\n {children(itemIds, from)}\n\n {virtual && <div style={{ gridColumn: '1 / -1', height: after }} />}\n\n {footer}\n </div>\n );\n}\n","import React, { createContext, memo, useContext, useEffect, useLayoutEffect, useState } from 'react';\nimport { Store } from 'schummar-state/react';\nimport { useTheme } from '..';\nimport { TableMemoContextProvider } from '../hooks/useTableMemo';\nimport { useTableStateStorage } from '../internalState/tableStateStorage';\nimport { useTableState } from '../internalState/useTableState';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport { Id, InternalTableState, TableProps } from '../types';\nimport ClearFiltersButton from './clearFiltersButton';\nimport { ColumnFooter } from './columnFooter';\nimport { ColumnHeader, ColumnHeaderContext } from './columnHeader';\nimport { ColumnSelection } from './columnSelection';\nimport { Export } from './export';\nimport { ResizeHandleView } from './resizeHandle';\nimport { Row } from './row';\nimport { SelectComponent } from './selectComponent';\nimport { Virtualized } from './virtualized';\n\nexport const TableContext = createContext<Store<InternalTableState<any>> | null>(null);\nexport const TableResetContext = createContext<() => void>(() => undefined);\nexport const ColumnContext = createContext<Id | null>(null);\nexport function useTableContext<T>(): Store<InternalTableState<T>> {\n const value = useContext(TableContext);\n if (!value) throw Error('No table context available');\n return value as Store<InternalTableState<T>>;\n}\nexport function useColumnContext(): Id {\n const value = useContext(ColumnContext);\n if (value === null) throw Error('No column context available');\n return value;\n}\n\nexport function Table<T>(props: TableProps<T>): JSX.Element {\n const [table, resetState] = useTableState(props);\n const [isHydrated, clearStorage] = useTableStateStorage(table);\n\n async function reset() {\n await clearStorage();\n resetState();\n }\n\n useLayoutEffect(() => table.getState().props.debugRender?.('render table'));\n\n return (\n <TableContext.Provider value={table}>\n <TableResetContext.Provider value={reset}>\n <TableMemoContextProvider>\n <TableLoadingState isHydrated={isHydrated} />\n </TableMemoContextProvider>\n </TableResetContext.Provider>\n </TableContext.Provider>\n );\n}\n\nfunction TableLoadingState({ isHydrated }: { isHydrated: boolean }) {\n const loadingText = useTheme((t) => t.text.loading);\n const [showLoading, setShowLoading] = useState(false);\n\n useEffect(() => {\n const handle = setTimeout(() => setShowLoading(true), 500);\n return () => clearTimeout(handle);\n });\n\n return (\n <>\n {!isHydrated && showLoading && <div>{loadingText}</div>}\n <TableInner hidden={!isHydrated} />\n </>\n );\n}\n\nconst TableInner = memo(function TableInner<T>({ hidden }: { hidden: boolean }) {\n const table = useTableContext<T>();\n const fullWidth = table.useState('props.fullWidth');\n const activeColumns = table.useState((state) =>\n state.activeColumns.map((column) => ({\n id: column.id,\n width: column.width,\n classes: column.classes,\n })),\n );\n const hasActiveFilters = table.useState((state) => {\n return state.activeColumns.some((column) => {\n const filter = state.filters.get(column.id);\n const filterValue = state.filterValues.get(column.id);\n return filter !== undefined && filterValue !== undefined && filter.isActive(filterValue);\n });\n });\n const columnWidths = table.useState('columnWidths', { throttle: 16 });\n const hasFooter = table.useState((state) => state.activeColumns.some((column) => column.footer));\n\n const classes = useTheme((theme) => theme.classes);\n const stickyHeader = table.useState('props.stickyHeader');\n const stickyFooter = table.useState('props.stickyFooter');\n\n const enableSelection = table.useState('props.enableSelection');\n const enableColumnSelection = table.useState('props.enableColumnSelection');\n const enableExport = table.useState((state) => !!state.props.enableExport.copy || !!state.props.enableExport.download);\n const cssVariables = useCssVariables();\n\n const enableClearFiltersButton = table.useState('props.enableClearFiltersButton');\n\n useLayoutEffect(() => table.getState().props.debugRender?.('render table inner'));\n\n return (\n <Virtualized\n className={classes?.table}\n css={[\n cssVariables,\n defaultClasses.table,\n {\n gridTemplateColumns: [\n //\n fullWidth === 'right' || fullWidth === true ? 'auto' : '0',\n 'max-content',\n ...activeColumns.map((column) => columnWidths.get(column.id) ?? column.width ?? 'max-content'),\n fullWidth === 'left' || fullWidth === true ? 'auto' : '0',\n ].join(' '),\n },\n hidden && { visibility: 'hidden' },\n ]}\n header={\n <>\n <div\n className={classes?.headerCell}\n css={[defaultClasses.headerFill, stickyHeader && defaultClasses.sticky, stickyHeader instanceof Object && stickyHeader]}\n />\n\n <div\n className={classes?.headerCell}\n css={[defaultClasses.headerCell, stickyHeader && defaultClasses.sticky, stickyHeader instanceof Object && stickyHeader]}\n >\n {enableSelection && <SelectComponent />}\n\n {enableColumnSelection && <ColumnSelection />}\n\n {enableExport && <Export />}\n\n <div css={{ flex: 1 }} />\n <ResizeHandleView />\n </div>\n\n <ColumnHeaderContext.Provider>\n {activeColumns.map((column) => (\n <ColumnContext.Provider key={column.id} value={column.id}>\n <ColumnHeader />\n </ColumnContext.Provider>\n ))}\n </ColumnHeaderContext.Provider>\n\n <div\n className={classes?.headerCell}\n css={[defaultClasses.headerFill, stickyHeader && defaultClasses.sticky, stickyHeader instanceof Object && stickyHeader]}\n />\n </>\n }\n footer={\n <>\n {enableClearFiltersButton && hasActiveFilters && <ClearFiltersButton />}\n {hasFooter && (\n <>\n <div\n className={classes?.footerCell}\n css={[\n defaultClasses.footerFill,\n stickyFooter && defaultClasses.stickyBottom,\n stickyFooter instanceof Object && stickyFooter,\n ]}\n />\n <div\n className={classes?.footerCell}\n css={[\n defaultClasses.footerFill,\n stickyFooter && defaultClasses.stickyBottom,\n stickyFooter instanceof Object && stickyFooter,\n ]}\n />\n\n {activeColumns.map((column) => (\n <ColumnContext.Provider key={column.id} value={column.id}>\n <ColumnFooter />\n </ColumnContext.Provider>\n ))}\n\n <div\n className={classes?.footerCell}\n css={[\n defaultClasses.footerFill,\n stickyFooter && defaultClasses.stickyBottom,\n stickyFooter instanceof Object && stickyFooter,\n ]}\n />\n </>\n )}\n </>\n }\n >\n {(itemIds, startIndex) => itemIds.map((itemId, index) => <Row key={itemId} itemId={itemId} rowIndex={startIndex + index} />)}\n </Virtualized>\n );\n});\n","import { TableTheme } from '../../types';\n\nexport const defaultColors: TableTheme['colors'] = {\n primary: { main: '#1976d2', light: '#42a5f5', contrastText: '#fff' },\n secondary: { main: '#9c27b0', light: '#ba68c8', contrastText: '#fff' },\n};\n","import { css } from '@emotion/react';\n\nexport function Spinner({ className }: { className?: string }) {\n return (\n <div\n className={className}\n css={css`\n display: inline-block;\n position: relative;\n width: 1em;\n height: 1em;\n\n div {\n box-sizing: border-box;\n display: block;\n position: absolute;\n width: 0.8em;\n height: 0.8em;\n margin: 0.1em;\n border: 0.1em solid #fff;\n border-radius: 50%;\n animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n border-color: currentColor transparent transparent transparent;\n }\n div:nth-of-type(1) {\n animation-delay: -0.45s;\n }\n div:nth-of-type(2) {\n animation-delay: -0.3s;\n }\n div:nth-of-type(3) {\n animation-delay: -0.15s;\n }\n @keyframes lds-ring {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n `}\n >\n <div />\n <div />\n <div />\n </div>\n );\n}\n","import { TableTheme } from '../../types';\n\nexport const Badge: TableTheme['components']['Badge'] = ({ badgeContent, children }) => {\n if (!open) return null;\n\n return (\n <span\n css={{\n display: 'inline-flex',\n position: 'relative',\n flexShrink: 0,\n verticalAlign: 'middle',\n }}\n >\n {children}\n\n <span\n css={[\n {\n top: 0,\n right: 0,\n transform: 'scale(1) translate(50%, -50%)',\n transformOrigin: '100% 0%',\n height: 20,\n display: 'flex',\n padding: '0 6px',\n zIndex: 1,\n position: 'absolute',\n flexWrap: 'wrap',\n minWidth: 20,\n transition: 'transform 225ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',\n alignItems: 'center',\n lineHeight: 1,\n alignContent: 'center',\n borderRadius: 10,\n justifyContent: 'center',\n fontSize: '0.8em',\n },\n !badgeContent && {\n transform: 'scale(0) translate(50%, -50%)',\n transition: 'transform 195ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',\n },\n ]}\n >\n {badgeContent}\n </span>\n </span>\n );\n};\n","import { TableTheme } from '../../types';\nimport { darkGray, lightGray } from './defaultClasses';\n\nexport const Button: TableTheme['components']['Button'] = ({ startIcon, children, variant = 'text', ...props }) => {\n return (\n <button\n css={[\n {\n padding: `var(--spacing) calc(var(--spacing) * 2)`,\n display: 'inline-flex',\n alignItems: 'center',\n transition: 'background-color 150ms',\n border: 'none',\n cursor: 'pointer',\n background: 'transparent',\n borderRadius: 4,\n\n '&:active:not(:disabled)': {\n transform: 'scale3d(0.95, 0.95, 1)',\n },\n },\n variant === 'text' && {\n '&:hover': {\n background: 'rgba(0, 0, 0, 0.1)',\n },\n },\n variant === 'outlined' && {\n border: `1px solid ${darkGray}`,\n\n '&:disabled': {\n borderColor: lightGray,\n },\n },\n variant === 'contained' && {\n color: 'var(--primaryContrastText)',\n backgroundColor: 'var(--primaryMain)',\n boxShadow: '0px 3px 1px -2px rgb(0 0 0 / 20%), 0px 2px 2px 0px rgb(0 0 0 / 14%), 0px 1px 5px 0px rgb(0 0 0 / 12%)',\n\n '&:hover': {\n filter: 'brightness(0.9)',\n },\n\n '&:disabled': {\n filter: 'grayscale()',\n opacity: 0.5,\n },\n },\n ]}\n {...props}\n >\n {startIcon && <span css={{ marginRight: `calc(var(--spacing) * 2)` }}>{startIcon}</span>}\n <span>{children}</span>\n </button>\n );\n};\n","import { TableTheme } from '../../types';\n\nexport const Checkbox: TableTheme['components']['Checkbox'] = ({ className, ...props }) => {\n return (\n <label\n css={[\n {\n padding: 'calc(var(--spacing) * 1.8)',\n display: 'flex',\n color: 'currentcolor',\n userSelect: 'none',\n\n '& input': {\n appearance: 'none',\n margin: 0,\n },\n },\n props.disabled && { color: 'rgba(0, 0, 0, 0.26)' },\n ]}\n className={className}\n >\n <input type=\"checkbox\" {...props} />\n\n {props.checked ? (\n <svg\n css={{ fontSize: '1.25rem', width: '1em', height: '1em', fill: 'var(--primaryMain)' }}\n focusable=\"false\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path d=\"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"></path>\n </svg>\n ) : (\n <svg\n css={{ fontSize: '1.25rem', width: '1em', height: '1em', fill: 'currentColor' }}\n focusable=\"false\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path d=\"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z\"></path>\n </svg>\n )}\n </label>\n );\n};\n","import { TableTheme } from '../../types';\n\nexport const IconButton: TableTheme['components']['IconButton'] = (props) => {\n return (\n <button\n css={{\n padding: 'var(--spacing)',\n borderRadius: '50%',\n display: 'inline-flex',\n justifyContent: 'center',\n alignItems: 'center',\n transition: 'background-color 150ms',\n border: 'none',\n cursor: 'pointer',\n color: 'inherit',\n background: 'transparent',\n\n '&:hover': {\n backgroundColor: 'rgba(0, 0, 0, 0.04)',\n },\n\n '&:active': {\n transformColor: 'scale3d(0.95, 0.95, 1)',\n },\n }}\n {...props}\n />\n );\n};\n","import { useState } from 'react';\nimport { TableTheme } from '../../types';\nimport { darkGray } from './defaultClasses';\n\nexport const TextField: TableTheme['components']['TextField'] = ({ endIcon, className, inputRef, ...props }) => {\n const [focus, setFocus] = useState(false);\n\n return (\n <div className={className} css={{ display: 'flex' }}>\n <span\n css={[\n {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n border: `1px solid ${darkGray}`,\n borderRadius: 4,\n },\n focus && { border: '2px solid var(--primaryMain)', margin: -1 },\n ]}\n >\n <input\n ref={inputRef}\n {...props}\n value={props.value ?? ''}\n onFocus={() => setFocus(true)}\n onBlur={() => setFocus(false)}\n css={{\n flex: 1,\n border: 'none',\n outline: 'none',\n borderRadius: 4,\n padding: 'calc(var(--spacing) * 2)',\n paddingRight: 0,\n transition: 'outline 500ms',\n }}\n />\n\n {endIcon}\n </span>\n </div>\n );\n};\n","import { Spinner } from '../../components/spinnner';\nimport { TableTheme } from '../../types';\nimport { Badge } from './badge';\nimport { Button } from './button';\nimport { Checkbox } from './checkbox';\nimport { IconButton } from './iconButton';\nimport { Popover } from './popover';\nimport { TextField } from './textField';\n\nexport const defaultComponents: TableTheme['components'] = {\n IconButton,\n Checkbox,\n Popover,\n Button,\n Badge,\n TextField,\n Spinner,\n};\n","import { ClassNames, css } from '@emotion/react';\nimport { cloneElement, HTMLProps } from 'react';\nimport { TableTheme } from '../../types';\n\nconst IconDefaultStyle = css({\n width: '1.5em',\n height: '1.5em',\n color: 'inherit',\n});\n\nfunction Icon(svg: JSX.Element) {\n return (props: HTMLProps<Element>) => (\n <ClassNames>\n {({ css }) =>\n cloneElement(svg, {\n ...props,\n className: css(IconDefaultStyle, props.className),\n })\n }\n </ClassNames>\n );\n}\n\nconst Settings = Icon(\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"currentColor\">\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M3 17v2h6v-2H3zM3 5v2h10V5H3zm10 16v-2h8v-2h-8v-2h-2v6h2zM7 9v2H3v2h4v2h2V9H7zm14 4v-2H11v2h10zm-6-4h2V7h4V5h-4V3h-2v6z\" />\n </svg>,\n);\n\nconst Export = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n enableBackground=\"new 0 0 24 24\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <g>\n <rect fill=\"none\" height=\"24\" width=\"24\" />\n </g>\n <g>\n <path d=\"M18,15v3H6v-3H4v3c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2v-3H18z M17,11l-1.41-1.41L13,12.17V4h-2v8.17L8.41,9.59L7,11l5,5 L17,11z\" />\n </g>\n </svg>,\n);\n\nconst Clipboard = Icon(\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"currentColor\">\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M19 2h-4.18C14.4.84 13.3 0 12 0S9.6.84 9.18 2H5c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm7 18H5V4h2v3h10V4h2v16z\" />\n </svg>,\n);\n\nconst ChevronRight = Icon(\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"currentColor\">\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6-6-6z\" />\n </svg>,\n);\n\nconst Search = Icon(\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"currentColor\">\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\" />\n </svg>,\n);\n\nconst Clear = Icon(\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"currentColor\">\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z\" />\n </svg>,\n);\n\nconst ArrowDropDown = Icon(\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"currentColor\">\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M7 10l5 5 5-5H7z\" />\n </svg>,\n);\n\nconst FilterList = Icon(\n <svg viewBox=\"0 0 24 24\">\n <path\n fill=\"currentColor\"\n d=\"M14,12V19.88C14.04,20.18 13.94,20.5 13.71,20.71C13.32,21.1 12.69,21.1 12.3,20.71L10.29,18.7C10.06,18.47 9.96,18.16 10,17.87V12H9.97L4.21,4.62C3.87,4.19 3.95,3.56 4.38,3.22C4.57,3.08 4.78,3 5,3V3H19V3C19.22,3 19.43,3.08 19.62,3.22C20.05,3.56 20.13,4.19 19.79,4.62L14.03,12H14Z\"\n />\n </svg>,\n);\n\nconst ArrowUpward = Icon(\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"currentColor\">\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z\" />\n </svg>,\n);\n\nexport const defaultIcons: TableTheme['icons'] = {\n Settings,\n Export,\n Clipboard,\n ChevronRight,\n Search,\n Clear,\n ArrowDropDown,\n FilterList,\n ArrowUpward,\n};\n","import { TableTheme } from '../../types';\n\nexport const defaultTexts: TableTheme['text'] = {\n selectColumns: 'Select visible columns',\n noResults: 'No results',\n exportTitle: 'Export',\n exportCopy: 'To clipboard',\n exportDownload: 'Download',\n today: 'Today',\n thisWeek: 'This week',\n thisMonth: 'This month',\n thisYear: 'This year',\n lastSevenDays: 'Last 7 days',\n lastThirtyDays: 'Last 30 days',\n clearFilters: 'Clear all filters',\n reset: 'Reset',\n loading: 'Loading',\n deselectAll: 'Deselect all',\n resetAll: 'Reset table state',\n};\n","import { TableTheme } from '../../types';\nimport { defaultColors } from './defaultColors';\nimport { defaultComponents } from './defaultComponents';\nimport { defaultIcons } from './defaultIcons';\nimport { defaultTexts } from './defaultTexts';\n\nexport const defaultTableTheme: TableTheme = {\n text: defaultTexts,\n components: defaultComponents,\n icons: defaultIcons,\n colors: defaultColors,\n spacing: '5px',\n};\n","import { useContext } from 'react';\nimport { Store } from 'schummar-state/react';\nimport { ColumnContext, TableContext } from '../components/table';\nimport { defaultTableTheme } from '../theme/defaultTheme';\nimport { globalTableTheme, mergeThemes, TableThemeContext } from '../theme/tableTheme';\nimport { MemoizedTableTheme, TableTheme } from '../types';\nimport { useTableMemo } from './useTableMemo';\n\nconst emptyStore = new Store(undefined);\n\nexport function useTheme<T, S>(selector: (theme: MemoizedTableTheme<T>) => S): S {\n const contextTableTheme = useContext(TableThemeContext);\n const table = useContext(TableContext);\n const columnId = useContext(ColumnContext);\n const memo = useTableMemo();\n\n const process = (t: TableTheme<T>): MemoizedTableTheme<T> => {\n const cell = t.classes?.cell;\n\n return {\n ...t,\n classes: {\n ...t.classes,\n cell: cell instanceof Function || Array.isArray(cell) ? memo('theme.classes.cell', cell) : cell,\n },\n text: {\n ...t.text,\n },\n };\n };\n\n const theme =\n table?.useState((state) => {\n const localTheme = {\n text: state.props.text,\n classes: state.props.classes,\n components: state.props.components,\n icons: state.props.icons,\n colors: state.props.colors,\n spacing: state.props.spacing,\n };\n\n const column = state.activeColumns.find((column) => column.id === columnId);\n const columnsTheme = {\n classes: column?.classes,\n };\n\n const theme = mergeThemes(defaultTableTheme, globalTableTheme, contextTableTheme, localTheme, columnsTheme) as TableTheme<T>;\n\n return selector(process(theme));\n }) ??\n emptyStore.useState() ??\n selector(process(mergeThemes(defaultTableTheme, globalTableTheme, contextTableTheme) as TableTheme<T>));\n\n return theme;\n}\n","import { ComponentType, useContext, useLayoutEffect, useRef } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { TableTheme } from '../types';\nimport { FilterControlContext } from './filterControl';\n\ntype Props = TableTheme['components']['TextField'] extends ComponentType<infer T> ? T : never;\n\nexport function AutoFocusTextField(props: Omit<Props, 'inputRef'>) {\n const TextField = useTheme((t) => t.components.TextField);\n\n const ref = useRef<HTMLInputElement>(null);\n const { isActive } = useContext(FilterControlContext);\n\n useLayoutEffect(() => {\n if (isActive && ref.current) {\n ref.current.focus();\n }\n }, [isActive]);\n\n return <TextField {...props} inputRef={ref} />;\n}\n","import { Fragment, useMemo, useState } from 'react';\n\nconst className = 'schummar-table-date-input';\n\nconst defaultDate = new Date(1970, 0, 1);\n\nconst isIncludedType = (type: Intl.DateTimeFormatPartTypes): type is 'day' | 'month' | 'year' =>\n type === 'day' || type === 'month' || type === 'year';\n\nconst defaultLengths = {\n day: 2,\n month: 2,\n year: 4,\n};\n\nconst maxLengths = {\n day: 2,\n month: 2,\n year: Infinity,\n};\n\nconst length = (type: 'day' | 'month' | 'year', value: string) => Math.max(value.length, defaultLengths[type]);\n\nconst tabNext = (e: Element) => {\n const all = Array.from(document.querySelectorAll(`.${className}`));\n const index = all.indexOf(e);\n const next = all[(index + 1) % all.length];\n\n if (next instanceof HTMLElement) {\n next.focus();\n }\n};\n\nexport function DateInput({ value, onChange, locale }: { value: Date | null; onChange: (date: Date | null) => void; locale?: string }) {\n const [override, setOverride] = useState<{ type: string; value: string }>();\n\n const commit = () => {\n if (!override) {\n return;\n }\n\n setOverride(undefined);\n\n if (!override.value) {\n onChange(null);\n return;\n }\n\n const newValue = value ? new Date(value) : new Date();\n if (override.type === 'day') {\n newValue.setDate(Number(override.value));\n } else if (override.type === 'month') {\n newValue.setMonth(Number(override.value) - 1);\n } else if (override.type === 'year') {\n newValue.setFullYear(Number(override.value));\n }\n\n onChange(newValue);\n };\n\n const format = useMemo(\n () =>\n new Intl.DateTimeFormat(locale, {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n }),\n [locale],\n );\n const parts = format.formatToParts(value ?? defaultDate);\n const isEmpty = !value;\n\n return (\n <div\n css={{\n display: 'flex',\n alignItems: 'baseline',\n }}\n >\n {parts.map(({ type, value }, index) => (\n <Fragment key={index}>\n {isIncludedType(type) ? (\n <input\n className={className}\n css={{\n width: `${length(type, value)}ch`,\n boxSizing: 'content-box',\n overflow: 'visible',\n border: 'none',\n borderBottom: '2px solid transparent',\n outline: 'none',\n fontSize: 'inherit',\n\n '&:focus': {\n borderBottom: '2px solid var(--primaryMain)',\n },\n }}\n placeholder={''.padEnd(length(type, value), '0')}\n value={override?.type === type ? override.value : !isEmpty ? value : ''}\n onChange={(e) => {\n setOverride({ type, value: e.target.value });\n if (e.target.value.length >= maxLengths[type]) {\n setTimeout(() => tabNext(e.target));\n }\n }}\n onFocus={(e) => e.target.select()}\n onBlur={commit}\n />\n ) : type === 'literal' ? (\n <span>{value}</span>\n ) : null}\n </Fragment>\n ))}\n </div>\n );\n}\n","import { useTheme } from '../hooks/useTheme';\nimport type { TableTheme } from '../types';\n\nexport interface TextProps {\n id: keyof TableTheme['text'];\n}\n\nexport function Text({ id }: TextProps) {\n const text = useTheme((t) => t.text[id]);\n\n return <>{text}</>;\n}\n","import { useDayzed } from 'dayzed';\nimport { ReactNode, useEffect, useMemo, useState } from 'react';\nimport { useTheme } from '..';\nimport { gray } from '../theme/defaultTheme/defaultClasses';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport { DateInput } from './dateInput';\nimport { Text } from './text';\n\nexport type DateRange = { min: Date; max: Date };\n\nexport type DatePickerQuickOption =\n | 'today'\n | 'thisWeek'\n | 'thisMonth'\n | 'thisYear'\n | 'lastSevenDays'\n | 'lastThirtyDays'\n | { label: ReactNode; value: Date | DateRange | (() => Date | DateRange) }\n | ((onChange: (value: Date | DateRange | null) => void) => ReactNode);\n\nexport type DatePickerProps = {\n /** Currently selected day or range of days. */\n value: Date | DateRange | null;\n /** Callback for when the day (range) changes. */\n onChange: (value: Date | DateRange | null) => void;\n /** If enabled, ranges can be selected. */\n rangeSelect?: boolean;\n /** Which locale to use to render the calendar. */\n locale?: string;\n /** Which day of the week should be in the first column. (0=Sunday, 1=Monday, ...)\n * @default 1\n */\n firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n /** Which month to show initially */\n defaultDateInView?: Date;\n /** Show buttons to quickly select suggested dates or date ranges */\n quickOptions?: DatePickerQuickOption[];\n};\n\nconst weekDays = [0, 1, 2, 3, 4, 5, 6] as const;\n\n/** Rounds a date down to the start of the day. */\nexport const startOfDay = (d: Date) => new Date(d.getFullYear(), d.getMonth(), d.getDate());\n\n/** Rounds a date up to the end of the day. */\nexport const endOfDay = (d: Date) => new Date(d.getFullYear(), d.getMonth(), d.getDate() + 1, 0, 0, 0, -1);\n\nexport const lastDays = (days: number): DateRange => {\n const now = new Date();\n const min = new Date(now);\n min.setDate(min.getDate() - days);\n\n return {\n min: startOfDay(min),\n max: endOfDay(now),\n };\n};\n\nexport const today = () => lastDays(0);\nexport const lastSevenDays = () => lastDays(6);\nexport const lastThirtyDays = () => lastDays(29);\n\nexport const thisWeek = (firstDayOfWeek = 1): DateRange => {\n const now = new Date();\n const min = new Date(now);\n\n let diff = min.getDay() - firstDayOfWeek;\n if (diff < 0) {\n diff += 7;\n }\n min.setDate(min.getDate() - diff);\n\n const max = new Date(min);\n max.setDate(max.getDate() + 6);\n\n return {\n min: startOfDay(min),\n max: endOfDay(max),\n };\n};\n\nexport const thisMonth = (): DateRange => {\n const now = new Date();\n const min = new Date(now);\n min.setDate(1);\n const max = new Date(min);\n max.setMonth(max.getMonth() + 1);\n max.setDate(max.getDate() - 1);\n\n return {\n min: startOfDay(min),\n max: endOfDay(max),\n };\n};\n\nexport const thisYear = (): DateRange => {\n const now = new Date();\n const min = new Date(now);\n min.setDate(1);\n min.setMonth(0);\n const max = new Date(min);\n max.setFullYear(max.getFullYear() + 1);\n max.setDate(max.getDate() - 1);\n\n return {\n min: startOfDay(min),\n max: endOfDay(max),\n };\n};\n\nexport const commonQuickOptions = {\n today: { label: <Text id=\"today\" />, value: today },\n thisWeek: { label: <Text id=\"thisWeek\" />, value: thisWeek },\n thisMonth: { label: <Text id=\"thisMonth\" />, value: thisMonth },\n thisYear: { label: <Text id=\"thisYear\" />, value: thisYear },\n lastSevenDays: { label: <Text id=\"lastSevenDays\" />, value: lastSevenDays },\n lastThirtyDays: { label: <Text id=\"lastThirtyDays\" />, value: lastThirtyDays },\n} satisfies Record<DatePickerQuickOption & string, { label: ReactNode; value: Date | DateRange | (() => Date | DateRange) }>;\n\n/** Returns whether two dates and/or date ranges intersect. Intersection is considered per day. */\nexport function dateIntersect(a: Date | null | DateRange, b: Date | null | DateRange) {\n if (a instanceof Date) {\n a = { min: a, max: a };\n }\n if (b instanceof Date) {\n b = { min: b, max: b };\n }\n\n if (!a?.min || !a.max || !b?.min || !b.max) {\n return false;\n }\n\n return !(endOfDay(a.max) < startOfDay(b.min) || startOfDay(a.min) > endOfDay(b.max));\n}\n\nexport function DatePicker({\n value,\n onChange,\n rangeSelect,\n locale,\n firstDayOfWeek = 1,\n defaultDateInView = new Date(),\n quickOptions,\n}: DatePickerProps) {\n const Button = useTheme((t) => t.components.Button);\n const IconButton = useTheme((t) => t.components.IconButton);\n const ChevronRight = useTheme((t) => t.icons.ChevronRight);\n const cssVariables = useCssVariables();\n\n const [dateInView, setDateInView] = useState<Date>(defaultDateInView);\n const [dirty, setDirty] = useState<Partial<DateRange>>();\n const [hovered, setHovered] = useState<Date>();\n\n const min = dirty ? dirty.min : value instanceof Date ? value : value?.min;\n const max = dirty ? dirty.max : value instanceof Date ? value : value?.max;\n\n let resolvedQuickOptions;\n\n {\n quickOptions ??= ['today', 'thisWeek'];\n\n resolvedQuickOptions = [...quickOptions, { label: <Text id=\"reset\" />, value: null }].map((option, index) => {\n if (option instanceof Function) {\n return option((value) => {\n setDirty(undefined);\n onChange(value);\n });\n }\n\n const { label, value } = typeof option === 'string' ? commonQuickOptions[option] : option;\n\n return (\n <Button\n key={index}\n variant=\"text\"\n onClick={() => {\n setDirty(undefined);\n\n if (value instanceof Function) {\n onChange(value());\n } else {\n onChange(value);\n }\n }}\n >\n {label}\n </Button>\n );\n });\n }\n\n const { calendars, getBackProps, getForwardProps, getDateProps } = useDayzed({\n onDateSelected: () => undefined,\n firstDayOfWeek,\n showOutsideDays: true,\n date: dateInView,\n onOffsetChanged: (offset) => setDateInView(new Date(dateInView.getFullYear(), dateInView.getMonth() + offset)),\n offset: 0,\n });\n const now = useMemo(() => startOfDay(new Date()), []);\n\n const formatWeekday = useMemo(() => {\n const { format } = new Intl.DateTimeFormat(locale, { weekday: 'short' });\n return (weekDay: number) => format(new Date(Date.UTC(2021, 7, ((weekDay + firstDayOfWeek) % 7) + 1)));\n }, [locale, firstDayOfWeek]);\n\n useEffect(() => setDateInView(value === null ? defaultDateInView : value instanceof Date ? value : value.max), [value]);\n\n useEffect(() => {\n if (!rangeSelect) {\n setDirty(undefined);\n }\n }, [rangeSelect]);\n\n function set(min?: Date, max?: Date, edit?: 'min' | 'max') {\n if (!rangeSelect) {\n onChange(min ?? null);\n return;\n }\n\n if (min && max && min > max) {\n if (edit === 'min') {\n max = min;\n } else if (edit === 'max') {\n min = max;\n } else {\n [min, max] = [max, min];\n }\n }\n\n if (!min === !max) {\n setDirty(undefined);\n onChange(min && max ? { min, max: endOfDay(max) } : null);\n } else {\n setDirty({ min, max });\n }\n }\n\n const formatMonth = useMemo(() => {\n const { format } = new Intl.DateTimeFormat(locale, { month: 'long' });\n return (month: number) => format(new Date(2021, month));\n }, [locale]);\n\n const formatYear = useMemo(() => {\n const { format } = new Intl.DateTimeFormat(locale, { year: 'numeric' });\n return (year: number) => format(new Date(year, 0, 1));\n }, [locale]);\n\n return (\n <div css={cssVariables}>\n <div css={{ display: 'grid', gridAutoFlow: 'column', justifyContent: 'center', alignItems: 'baseline', gap: 'var(--spacing)' }}>\n <DateInput value={min ?? null} onChange={(date) => set(date ?? undefined, max, 'min')} locale={locale} />\n\n {rangeSelect && (\n <>\n {' - '}\n <DateInput value={max ?? null} onChange={(date) => set(min, date ?? undefined, 'max')} locale={locale} />\n </>\n )}\n </div>\n\n {calendars.map(({ month, year, weeks }) => (\n <div key={`${month}${year}`} css={{ display: 'grid' }}>\n <div\n css={{\n margin: 'calc(var(--spacing) * 4) 0',\n display: 'grid',\n gridAutoFlow: 'column',\n justifyContent: 'space-between',\n alignItems: 'center',\n }}\n >\n <IconButton {...getBackProps({ calendars })}>\n <ChevronRight css={{ transform: 'rotate3d(0, 0, 1, 180deg)' }} />\n </IconButton>\n\n <div css={{ display: 'flex' }}>\n {formatMonth(month)} {formatYear(year)}\n </div>\n\n <IconButton {...getForwardProps({ calendars })}>\n <ChevronRight />\n </IconButton>\n </div>\n\n <div\n css={{\n justifySelf: 'center',\n display: 'grid',\n gridTemplateColumns: 'repeat(7, max-content)',\n fontWeight: 'bold',\n }}\n >\n {weekDays.map((_v, weekDay) => (\n <div key={weekDay} css={{ justifySelf: 'center', marginBottom: 'var(--spacing)' }}>\n {formatWeekday(weekDay)}\n </div>\n ))}\n\n {weeks.map((week, index) =>\n week.map((dateObj, dayIndex) => {\n if (!dateObj) {\n return <div />;\n }\n\n const { prevMonth, nextMonth, date } = dateObj;\n const today = startOfDay(date).getTime() === now.getTime();\n\n const selected = date.getTime() === min?.getTime() || (min && max && dateIntersect(date, { min, max }));\n const preSelected =\n !selected &&\n (date.getTime() === hovered?.getTime() ||\n (min && !max && hovered && dateIntersect(date, min <= hovered ? { min, max: hovered } : { min: hovered, max: min })));\n\n return (\n <button\n key={`${index}-${dayIndex}`}\n css={[\n {\n padding: 10,\n border: '1px solid transparent',\n background: 'transparent',\n cursor: 'pointer',\n },\n (prevMonth || nextMonth) && {\n color: gray,\n },\n today && {\n border: '1px solid var(--secondaryMain)',\n },\n selected && {\n background: 'var(--primaryMain)',\n color: 'var(--primaryContrastText)',\n },\n preSelected && {\n background: 'var(--primaryLight)',\n color: 'var(--primaryContrastText)',\n },\n ]}\n {...getDateProps({ dateObj })}\n onClick={() => {\n if (dirty) {\n if (min) set(min, date);\n else set(date, max);\n } else {\n set(date);\n }\n }}\n onPointerOver={() => setHovered(date)}\n onPointerOut={() => setHovered(undefined)}\n >\n {date.getDate()}\n </button>\n );\n }),\n )}\n </div>\n </div>\n ))}\n\n <div css={{ marginTop: 'var(--spacing)', display: 'grid', gridAutoFlow: 'column', justifyContent: 'center' }}>\n {resolvedQuickOptions}\n </div>\n </div>\n );\n}\n","import { useFilter } from '..';\nimport { CommonFilterProps } from '../types';\nimport { dateIntersect, DatePicker, DatePickerProps, DateRange } from './datePicker';\n\nfunction convertDate(x: unknown): Date | null {\n if (x instanceof Date) return x;\n if (typeof x === 'number' || typeof x === 'string') return new Date(x);\n return null;\n}\n\nfunction convertDateOrRange(x: unknown): Date | DateRange | null {\n if (x instanceof Object && 'min' in x && 'max' in x) {\n const range = {\n min: convertDate((x as any).min),\n max: convertDate((x as any).max),\n };\n return range.min && range.max ? (range as DateRange) : null;\n }\n return convertDate(x);\n}\n\nfunction convertDateOrArray(x: unknown): Date | DateRange | (Date | DateRange)[] | null {\n if (x instanceof Array) return x.map(convertDateOrRange).filter(Boolean) as (Date | DateRange)[];\n return convertDateOrRange(x);\n}\n\nexport function DateFilter<T, V>({\n locale,\n firstDayOfWeek,\n defaultDateInView,\n quickOptions,\n singleSelect,\n filterBy = convertDateOrArray,\n ...props\n}: {\n /** If enabled, only single days can be selected. Ranges otherwise. */\n singleSelect?: boolean;\n} & Pick<DatePickerProps, 'locale' | 'firstDayOfWeek' | 'defaultDateInView' | 'quickOptions'> &\n CommonFilterProps<T, V, Date | DateRange | null, Date | DateRange | null>): JSX.Element {\n const { value = null, onChange } = useFilter({\n ...props,\n filterBy,\n\n id: 'dateFilter',\n\n isActive(filterValue) {\n return !!filterValue;\n },\n\n test(filterValue, value) {\n return dateIntersect(filterValue, value);\n },\n });\n\n return (\n <div\n css={{\n padding: 'calc(var(--spacing) * 2)',\n display: 'grid',\n }}\n >\n <DatePicker\n rangeSelect={!singleSelect}\n value={value}\n onChange={onChange}\n locale={locale}\n firstDayOfWeek={firstDayOfWeek}\n defaultDateInView={defaultDateInView}\n quickOptions={quickOptions}\n />\n </div>\n );\n}\n","import React, { ReactNode, useState } from 'react';\nimport { useColumnContext, useFilter, useTheme } from '..';\nimport { asString, castArray, flatMap, uniq } from '../misc/helpers';\nimport { CommonFilterProps, InternalColumn, SerializableValue } from '../types';\nimport { AutoFocusTextField } from './autoFocusTextField';\nimport { FormControlLabel } from './formControlLabel';\nimport { useTableContext } from './table';\n\nfunction toggle<T>(set: Set<T>, value: T, singleSelect?: boolean) {\n const newSet = new Set(singleSelect ? [] : set);\n if (set.has(value)) {\n newSet.delete(value);\n } else {\n newSet.add(value);\n }\n\n return newSet;\n}\n\nexport function SelectFilter<T, V, F extends SerializableValue>({\n options: providedOptions,\n stringValue = asString,\n render = stringValue,\n singleSelect,\n ...props\n}: {\n /** Which options are provided to select. By default all unique item values are used. */\n options?: F[];\n /** String representation of a value. Used to filter options via the text field. */\n stringValue?: (value: F) => string;\n /** Render values. By default a string representation of the value is used. */\n render?: (value: F) => ReactNode;\n /** If enabled, only one option can be selected at a time. */\n singleSelect?: boolean;\n} & CommonFilterProps<T, V, F, Set<F>>): JSX.Element {\n const IconButton = useTheme((t) => t.components.IconButton);\n const Checkbox = useTheme((t) => t.components.Checkbox);\n const Search = useTheme((t) => t.icons.Search);\n const Clear = useTheme((t) => t.icons.Clear);\n const deselectAll = useTheme((t) => t.text.deselectAll);\n const noResults = useTheme((t) => t.text.noResults);\n\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n\n const {\n value = new Set<F>(),\n onChange,\n filterBy,\n } = useFilter({\n ...props,\n\n id: 'selectFilter',\n\n isActive(filterValue) {\n return filterValue.size > 0;\n },\n\n test(filterValue, value) {\n return filterValue.has(value);\n },\n });\n\n const options = table.useState((state) => {\n if (providedOptions) return uniq(providedOptions);\n\n const column = state.activeColumns.find((column) => column.id === columnId) as InternalColumn<T, V> | undefined;\n if (!column) return [];\n\n return uniq(flatMap(state.items, (item) => castArray(filterBy(column.value(item.value), item.value))));\n });\n\n const [query, setQuery] = useState('');\n const filtered = options.filter((option) => !query || stringValue(option).toLowerCase().includes(query.toLowerCase()));\n\n const Button = useTheme((t) => t.components.Button);\n\n return (\n <div\n css={{\n padding: 'calc(var(--spacing) * 2)',\n display: 'grid',\n gap: 'var(--spacing)',\n }}\n >\n <AutoFocusTextField\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n endIcon={<IconButton onClick={() => setQuery('')}>{!query ? <Search /> : <Clear />}</IconButton>}\n css={{ marginBottom: 'var(--spacing)' }}\n />\n\n <Button\n disabled={!(value.size > 0)}\n onClick={() => onChange(new Set())}\n variant=\"outlined\"\n css={{ justifyContent: 'center', width: '100%', marginBottom: 'var(--spacing)' }}\n >\n {deselectAll}\n </Button>\n\n <div css={{ maxHeight: '20em', overflowY: 'auto' }}>\n {filtered.map((option, index) => (\n <FormControlLabel\n key={index}\n control={<Checkbox checked={value.has(option)} onChange={() => onChange(toggle(value, option, singleSelect))} />}\n label={render(option)}\n ></FormControlLabel>\n ))}\n </div>\n\n {filtered.length === 0 && <span css={{ textAlign: 'center' }}>{noResults}</span>}\n </div>\n );\n}\n","export function debounce<Args extends any[]>(fn: (...args: Args) => void, ms: number): { (...args: Args): void; flush(): void } {\n let lastArgs: Args | undefined;\n let timeout: ReturnType<typeof setTimeout> | undefined;\n\n function run() {\n const args = lastArgs;\n\n lastArgs = undefined;\n timeout = undefined;\n\n fn(...(args as Args));\n }\n\n return Object.assign(\n function (...args: Args) {\n lastArgs = args;\n\n if (timeout) {\n clearTimeout(timeout);\n }\n\n timeout = setTimeout(run, ms);\n },\n {\n flush() {\n if (timeout) {\n clearTimeout(timeout);\n run();\n }\n },\n },\n );\n}\n","import { castDraft } from 'immer';\nimport { useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { useColumnContext, useTableContext } from '..';\nimport { FilterControlContext } from '../components/filterControl';\nimport { debounce } from '../misc/debounce';\nimport { FilterImplementation, SerializableValue } from '../types';\nimport { useTableMemo } from './useTableMemo';\n\nexport function useFilter<T, V, F, S extends SerializableValue>(impl: FilterImplementation<T, V, F, S>) {\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n const cache = useTableMemo();\n const filterBy = impl.filterBy && cache('', impl.filterBy);\n\n // On mount and reset: Fire onChange\n useEffect(() => {\n if (impl.value === undefined) {\n impl.onChange?.(impl.defaultValue);\n }\n }, [table]);\n\n // Update implementation\n useEffect(() => {\n table.update((state) => {\n if (impl.defaultValue !== undefined) {\n state.filterValues.set(columnId, impl.defaultValue);\n }\n });\n }, [table]);\n\n useEffect(() => {\n table.update((state) => {\n state.filters.set(columnId, castDraft({ ...impl, filterBy }));\n\n if (impl.value !== undefined) {\n state.filterValues.set(columnId, impl.value);\n }\n });\n\n return () => {\n table.update((state) => {\n state.filters.delete(columnId);\n });\n };\n }, [table, columnId, impl]);\n\n // Track local value and update it globally after delay\n const value = table.useState((state) => state.filterValues.get(columnId) as S | undefined);\n const [dirtyValue, setDirtyValue] = useState<S>();\n const implRef = useRef(impl);\n\n useLayoutEffect(() => {\n implRef.current = impl;\n });\n\n const delayedUpdate = useMemo(\n () =>\n debounce((value?: S) => {\n const { value: controlledValue, onChange } = implRef.current;\n\n if (controlledValue === undefined) {\n table.update((state) => {\n state.filterValues.set(columnId, value);\n });\n }\n\n onChange?.(value);\n setDirtyValue(undefined);\n }, 500),\n [table],\n );\n\n function onChange(value?: S) {\n setDirtyValue(value);\n delayedUpdate(value);\n }\n\n useEffect(() => delayedUpdate.flush(), [delayedUpdate]);\n\n const context = useContext(FilterControlContext);\n\n return {\n value: dirtyValue ?? value,\n onChange,\n filterBy: filterBy ?? ((x) => x as unknown as F | F[]),\n ...context,\n };\n}\n","export const textMatch = (text: string, query: string): boolean => {\n text = text.toLowerCase();\n query = query.toLowerCase();\n return query.split(/\\s+/).every((part) => termMatch(text, part));\n};\n\nexport const termMatch = (text: string, query: string): boolean => {\n let i = 0;\n outer: for (const char of query) {\n for (; i < text.length; i++) {\n if (text[i] === char) {\n i++;\n continue outer;\n }\n }\n return false;\n }\n return true;\n};\n","import { useFilter } from '../hooks/useFilter';\nimport { useTheme } from '../hooks/useTheme';\nimport { asStringOrArray } from '../misc/helpers';\nimport { textMatch } from '../misc/textMatch';\nimport { CommonFilterProps } from '../types';\nimport { AutoFocusTextField } from './autoFocusTextField';\n\nexport function TextFilter<T, V>({\n compare = textMatch,\n filterBy = asStringOrArray,\n placeholder,\n ...props\n}: {\n /** Custom comparison function. Should return true if an item value matches the current filter value.\n * By default a fuzzy text comparison is used.\n */\n compare?: (itemValue: string, filterValue: string) => boolean;\n placeholder?: string;\n} & CommonFilterProps<T, V, string, string>): JSX.Element {\n const IconButton = useTheme((t) => t.components.IconButton);\n const Search = useTheme((t) => t.icons.Search);\n const Clear = useTheme((t) => t.icons.Clear);\n\n const { value = '', onChange } = useFilter({\n ...props,\n filterBy,\n\n id: 'textFilter',\n\n isActive(filterValue) {\n return !!filterValue;\n },\n\n test(filterValue, value) {\n return compare(value, filterValue);\n },\n });\n\n return (\n <div\n css={{\n padding: `calc(var(--spacing) * 2)`,\n display: 'grid',\n }}\n >\n <AutoFocusTextField\n value={value}\n onChange={(e) => onChange(e.target.value)}\n endIcon={<IconButton onClick={() => onChange('')}>{!value ? <Search /> : <Clear />}</IconButton>}\n placeholder={placeholder}\n />\n </div>\n );\n}\n"],"names":["TableMemoContext","createContext","Map","TableMemoContextProvider","children","useMemo","useTableMemo","memoCache","useContext","key","fn","deps","Array","isArray","slice","toString","cachedValue","get","hit","length","every","x","i","set","Queue","q","isRunning","run","job","replace","Promise","resolve","reject","push","start","clear","next","shift","result","e","KEYS","storageName","id","stringify","value","prepare","Date","__date","toJSON","Set","__set","from","map","__map","entries","entry","Object","fromEntries","k","v","JSON","parse","_key","useTableStateStorage","table","isHydrated","setIsHydrated","useState","useEffect","persist","getState","props","isCanceled","storage","include","exclude","json","getItem","data","debug","update","state","includes","filters","undefined","filterValues","toUpperCase","error","subscribe","setItem","throttle","removeItem","flatMap","arr","reduce","out","cur","concat","orderBy","selectors","direction","t","sort","a","b","_a","_b","dir","uniq","add","intersect","has","getAncestors","activeItemsById","items","find","parentId","parent","forEach","getDescendants","item","child","identity","asString","join","String","asStringOrArray","defaultEquals","subStringMatch","toLowerCase","castArray","cx","classNames","filter","predicate","className","calcItems","addReaction","revealFiltered","externalSort","activeColumns","expanded","draft","tableItems","sorted","column","columnId","sortBy","selector","Boolean","lookup","allItems","allItemsById","traverse","expandedChanged","activeSet","activeItems","reverse","isActive","external","filterValue","filterBy","some","test","castDraft","itemsById","setTimeout","onExpandedChange","runNow","noopParentId","calcProps","cache","Function","inputColumns","columns","dependecies","defCol","defaultColumnProps","mapColumn","_id","header","footer","renderCell","exportCell","disableSort","cannotHide","classes","width","index","cacheKey","wrapCell","rowAction","copy","enableExport","separator","download","sepPrefix","enableSelection","selectSyncChildren","stickyHeader","stickyFooter","enableColumnSelection","enableClearFiltersButton","enableColumnResize","enableColumnReorder","cleanupState","columnIds","activeColumnIds","newSort","s","onSortChange","keys","delete","hiddenColumns","columnWidths","columnOrder","newSelection","selection","size","onSelectionChange","newExpanded","filterColumns","indexOf","normalizeExpanded","expandOnlyOne","hasChanged","allAncestors","ancestors","withMostAncestors","ancestor","syncSelections","useTableState","_props","setKey","reset","defaultSort","defaultExpanded","defaultSelection","onHiddenColumnsChange","defaultHiddenColumns","onReset","Store","rowHeights","columnStyleOverride","lastSelectedId","splice","useCssVariables","useTheme","spacing","colors","primary","main","light","contrastText","secondary","ClearFiltersButton","Button","components","textClearFilters","text","clearFilters","useTableContext","defaultClasses","clearFiltersButton","ColumnFooter","useColumnContext","columnClasses","theme","content","footerCell","stickyBottom","FilterControlContext","close","FilterControl","IconButton","Popover","FilterList","icons","ArrowDropDown","cssVariables","anchor","setAnchor","filterClassNames","impl","onChange","context","currentTarget","preventDefault","color","stopPropagation","document","body","popover","popoverBackdrop","ResizeHandle","enabled","onPointerDown","div","target","setPointerCapture","pointerId","onPointerMove","hasPointerCapture","parentElement","Math","max","clientX","getBoundingClientRect","left","onPointerUp","releasePointerCapture","onDoubleClick","getModifierState","ResizeHandleView","_css","alignSelf","padding","cursor","display","alignItems","height","background","transition","_ref","_EMOTION_STRINGIFIED_CSS_ERROR__","SortComponent","Badge","ArrowUpward","sortDisabled","findIndex","toggle","off","controlledSort","newDirection","opacity","transform","ColumnHeaderContext","StoreScope","ColumnHeader","ref","useRef","store","useStore","draggingStart","clone","current","calcTargetIndex","offsetLeft","cols","otherCols","col","firstOffsetleft","sum","targetIndex","offsetWidth","mouseX","bounds","abs","cloneNode","append","getComputedStyle","style","assign","pointerEvents","position","boxShadow","top","offset","zIndex","remove","headerCell","sticky","FormControlLabel","control","label","disabled","ColumnSelection","Checkbox","Settings","selectColumns","resetAll","TableResetContext","anchorEl","setAnchorEl","controlledHiddenColumns","newValue","csvExport","quote","eol","cells","line","c","clean","RegExp","Export","Clipboard","exportTitle","exportCopy","exportDownload","generate","options","clipboard","writeText","createElement","href","encodeURIComponent","appendChild","click","removeChild","justifyItems","gap","justifyContent","defaultWrapCell","Cell","memo","itemId","rowIndex","debugRender","calcClassNames","cell","ExpandControl","hasDeferredChildren","Spinner","ChevronRight","isExpanded","hasChildren","controlledExpanded","SelectComponent","isSelected","itemIds","mouseEvent","nativeEvent","controlledSelection","range","shiftKey","min","descendant","evenCell","oddCell","Row","divRef","indent","o","ResizeObserver","contains","offsetHeight","observe","disconnect","cellFill","firstCell","ms","last","lastArgs","timeout","args","now","flush","cancel","clearTimeout","findScrollRoot","documentElement","scrollHeight","clientHeight","overflowY","relativeOffset","y","offsetParent","offsetTop","HTMLElement","Virtualized","virtual","probeRef","setCounter","to","before","after","root","rowHeight","initalRowHeight","overscan","overscanTop","overscanBottom","totalHeight","h","probeOffset","headerHeight","topOfTable","scrollTop","bottomOfTable","throttleScroll","incCounter","addEventListener","removeEventListener","gridColumn","TableContext","ColumnContext","Error","Table","resetState","clearStorage","useLayoutEffect","TableLoadingState","loadingText","loading","showLoading","setShowLoading","handle","TableInner","hidden","fullWidth","hasActiveFilters","hasFooter","gridTemplateColumns","visibility","headerFill","footerFill","startIndex","defaultColors","badgeContent","open","startIcon","variant","border","borderRadius","darkGray","borderColor","lightGray","backgroundColor","marginRight","_ref2","checked","TextField","endIcon","inputRef","focus","setFocus","flex","margin","defaultComponents","IconDefaultStyle","Icon","svg","css","cloneElement","Search","Clear","defaultIcons","defaultTexts","noResults","today","thisWeek","thisMonth","thisYear","lastSevenDays","lastThirtyDays","deselectAll","defaultTableTheme","emptyStore","contextTableTheme","TableThemeContext","process","localTheme","columnsTheme","mergeThemes","globalTableTheme","AutoFocusTextField","defaultDate","isIncludedType","type","defaultLengths","day","month","year","maxLengths","Infinity","tabNext","all","querySelectorAll","DateInput","locale","override","setOverride","commit","setDate","Number","setMonth","setFullYear","format","Intl","DateTimeFormat","parts","formatToParts","isEmpty","Fragment","boxSizing","overflow","borderBottom","outline","fontSize","padEnd","select","Text","weekDays","startOfDay","d","getFullYear","getMonth","getDate","endOfDay","lastDays","days","firstDayOfWeek","diff","getDay","commonQuickOptions","dateIntersect","_ref3","_ref4","_ref5","DatePicker","rangeSelect","defaultDateInView","quickOptions","dateInView","setDateInView","dirty","setDirty","hovered","setHovered","resolvedQuickOptions","option","calendars","getBackProps","getForwardProps","getDateProps","useDayzed","onDateSelected","showOutsideDays","date","onOffsetChanged","formatWeekday","weekday","weekDay","UTC","edit","formatMonth","formatYear","weeks","_v","week","dateObj","dayIndex","prevMonth","nextMonth","getTime","selected","preSelected","gray","convertDate","convertDateOrRange","convertDateOrArray","DateFilter","singleSelect","useFilter","newSet","SelectFilter","providedOptions","stringValue","render","query","setQuery","filtered","debounce","defaultValue","dirtyValue","setDirtyValue","implRef","delayedUpdate","controlledValue","textMatch","split","part","termMatch","outer","char","TextFilter","compare","placeholder"],"mappings":"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"}
|