schummar-table 0.40.0 → 0.40.2

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/components/autoFocusTextField.tsx","../src/hooks/useTheme.ts","../node_modules/schummar-state/src/persist/persistPathHelpers.ts","../node_modules/schummar-state/src/persist/storePersist.ts","../node_modules/schummar-state/src/helpers/hash.ts","../node_modules/schummar-state/node_modules/fast-deep-equal/es6/react.js","../node_modules/schummar-state/src/helpers/stringSelector.ts","../node_modules/schummar-state/src/helpers/throttle.ts","../node_modules/schummar-state/src/store.ts","../node_modules/schummar-state/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js","../node_modules/schummar-state/node_modules/use-sync-external-store/shim/index.js","../node_modules/schummar-state/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js","../node_modules/schummar-state/node_modules/use-sync-external-store/shim/with-selector.js","../node_modules/schummar-state/src/react/useStoreState.ts","../node_modules/schummar-state/src/react/useStoreProp.ts","../node_modules/schummar-state/src/react/store.ts","../node_modules/schummar-state/src/react/storeScope.tsx","../node_modules/schummar-state/src/react/useResource.ts","../src/misc/tableContext.ts","../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/popover.tsx","../src/theme/defaultTheme/defaultClasses.ts","../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/theme/tableTheme.tsx","../src/hooks/useTableMemo.tsx","../src/misc/tableSettings.tsx","../src/exporters/csvExporter.ts","../src/components/filterControl.tsx","../src/misc/helpers.ts","../src/theme/useCssVariables.ts","../src/hooks/useFilter.ts","../src/misc/debounce.ts","../src/components/datePicker.tsx","../src/misc/defaults.ts","../src/components/dateInput.tsx","../src/components/text.tsx","../src/components/dateFilter.tsx","../src/components/numberField.tsx","../src/components/rangeFilter.tsx","../src/components/selectFilter.tsx","../src/components/formControlLabel.tsx","../src/components/virtualList.tsx","../src/misc/throttle.ts","../src/components/table.tsx","../src/internalState/tableStateStorage.ts","../src/misc/queue.ts","../src/internalState/useTableState.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/components/clearFiltersButton.tsx","../src/components/columnFooter.tsx","../src/components/columnHeader.tsx","../src/components/resizeHandle.tsx","../src/components/sortComponent.tsx","../src/components/columnSelection.tsx","../src/components/export.tsx","../src/components/row.tsx","../src/misc/calcClassNames.ts","../src/components/cell.tsx","../src/components/details.tsx","../src/components/expandControl.tsx","../src/components/selectComponent.tsx","../src/components/virtualized.tsx","../src/misc/textMatch.ts","../src/components/textFilter.tsx"],"sourcesContent":["export { AutoFocusTextField } from './components/autoFocusTextField';\nexport { DateFilter } from './components/dateFilter';\nexport {\n DatePicker,\n DatePickerProvider,\n commonQuickOptions,\n dateClamp,\n dateIntersect,\n endOfDay,\n getCalendarWeek,\n lastDays,\n startOfDay,\n thisMonth,\n thisWeek,\n thisYear,\n today,\n} from './components/datePicker';\nexport type { DatePickerProps, DatePickerQuickOption, DateRange } from './components/datePicker';\nexport { RangeFilter } from './components/rangeFilter';\nexport { SelectFilter } from './components/selectFilter';\nexport { Table } from './components/table';\nexport { TextFilter } from './components/textFilter';\nexport { useFilter } from './hooks/useFilter';\nexport { useTheme } from './hooks/useTheme';\nexport type { TableStateStorage } from './internalState/tableStateStorage';\nexport * as helpers from './misc/helpers';\nexport {\n ColumnContext,\n TableContext,\n TableResetContext,\n useColumnContext,\n useTableContext,\n} from './misc/tableContext';\nexport { TableSettingsContext, TableSettingsProvider } from './misc/tableSettings';\nexport { termMatch, textMatch } from './misc/textMatch';\nexport { configureTableTheme, mergeThemes } from './theme/tableTheme';\nexport type {\n Column,\n CommonFilterProps,\n FilterImplementation,\n FunctionWithDeps,\n Id,\n InternalColumn,\n PartialTableTheme,\n Sort,\n SortDirection,\n TableProps,\n} from './types';\n\n","import type { ComponentType } from 'react';\nimport { useContext, useLayoutEffect, useRef } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport type { 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 (\n <TextField\n {...props}\n inputRef={ref}\n css={{\n input: {\n backgroundColor: 'inherit',\n color: 'inherit',\n },\n }}\n />\n );\n}\n","import { useContext } from 'react';\nimport { Store } from 'schummar-state/react';\nimport { ColumnContext, TableContext } from '../misc/tableContext';\nimport { defaultTableTheme } from '../theme/defaultTheme';\nimport { globalTableTheme, mergeThemes } from '../theme/tableTheme';\nimport type { MemoizedTableTheme, TableTheme } from '../types';\nimport { useTableMemo } from './useTableMemo';\nimport { TableSettingsContext } from '../misc/tableSettings';\n\nconst emptyStore = new Store(undefined);\n\nexport function useTheme<T, S>(selector: (theme: MemoizedTableTheme<T>) => S): S {\n const { theme: contextTableTheme = {} } = useContext(TableSettingsContext);\n const table = useContext(TableContext);\n const columnId = useContext(ColumnContext);\n const memo = useTableMemo();\n const _globalTableTheme = globalTableTheme.useState();\n\n const process = (t: TableTheme<T>): MemoizedTableTheme<T> => {\n const cellClass = t.classes?.cell;\n const cellStyles = t.styles?.cell;\n const detailsClass = t.classes?.details;\n const detailsStyles = t.styles?.details;\n\n return {\n ...t,\n classes: {\n ...t.classes,\n cell:\n cellClass instanceof Function || Array.isArray(cellClass)\n ? memo('theme.classes.cell', cellClass)\n : cellClass,\n details:\n detailsClass instanceof Function || Array.isArray(detailsClass)\n ? memo('theme.classes.details', detailsClass)\n : detailsClass,\n },\n styles: {\n ...t.styles,\n cell:\n cellStyles instanceof Function || Array.isArray(cellStyles)\n ? memo('theme.styles.cell', cellStyles)\n : cellStyles,\n details:\n detailsStyles instanceof Function || Array.isArray(detailsStyles)\n ? memo('theme.styles.details', detailsStyles)\n : detailsStyles,\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 styles: state.props.styles,\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 styles: column?.styles,\n };\n\n const theme = mergeThemes(\n defaultTableTheme,\n _globalTableTheme,\n contextTableTheme,\n localTheme,\n columnsTheme,\n ) as TableTheme<T>;\n\n return selector(process(theme));\n }) ??\n emptyStore.useState() ??\n selector(\n process(\n mergeThemes(defaultTableTheme, _globalTableTheme, contextTableTheme) as TableTheme<T>,\n ),\n );\n\n return theme;\n}\n","export type Path = (string | number)[];\n\nexport const isAncestor = (ancestor: Path, path: Path): boolean => {\n return ancestor.length <= path.length && ancestor.every((v, i) => v === '*' || path[i] === '*' || String(v) === String(path[i]));\n};\n\nexport const get = (value: unknown, path: Path): unknown => {\n for (const part of path) {\n if (value instanceof Object && part in value) value = value[part as keyof typeof value];\n else {\n value = undefined;\n break;\n }\n }\n return value;\n};\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const split = (value: any, path: Path): [value: unknown, subValues: { path: Path; value: unknown }[]] => {\n const [first, ...rest] = path;\n if (first === undefined) return [value, []];\n\n if (rest.length === 0) {\n if (first === '*') return [{}, Object.entries(value).map(([k, v]) => ({ path: [k], value: v }))];\n if (!(first in value)) return [value, []];\n const { [first]: subValue, ...newValue } = value;\n return [newValue, [{ path: [first], value: subValue }]];\n }\n\n const newValue = { ...value };\n const subValues = new Array<{ path: Path; value: unknown }>();\n for (const key of first === '*' ? Object.keys(value) : [first]) {\n if (!(newValue[key] instanceof Object)) return [value, []];\n const result = split(newValue[key], rest);\n newValue[key] = result[0];\n subValues.push(...result[1].map((s) => ({ path: [key, ...s.path], value: s.value })));\n }\n return [newValue, subValues];\n};\n","import { Patch } from 'immer';\nimport { Store } from '../store';\nimport { get, isAncestor, Path, split } from './persistPathHelpers';\nimport { PersistPaths } from './persistPaths';\nimport { StorePersistStorage } from './persistStorage';\n\nexport class StorePersist<T> {\n private replayPatches = new Array<Patch>();\n isInitialized = false;\n whenInitialized = this.load();\n private isStopped = false;\n private sub?: () => void;\n private saveQueue = new Array<{ path: Path; t: number }>();\n private isSaving = false;\n private saveTimeout?: ReturnType<typeof setTimeout>;\n private paths: { path: Path; throttleMs?: number }[];\n\n constructor(\n public readonly store: Store<T>,\n public readonly storage: StorePersistStorage,\n public readonly options: {\n paths?: (PersistPaths<T> | { path: PersistPaths<T>; throttleMs?: number })[];\n throttleMs?: number;\n log?: (...args: any[]) => void;\n } = {}\n ) {\n if (!options.paths) {\n this.paths = [{ path: [], throttleMs: options.throttleMs }];\n } else {\n this.paths = options.paths.map((p) => ({\n path: (typeof p === 'object' ? p.path : p).split('.'),\n throttleMs: (typeof p === 'object' ? p.throttleMs : undefined) ?? options.throttleMs,\n }));\n }\n\n this.paths.sort((a, b) => b.path.length - a.path.length);\n this.watch();\n }\n\n private async load() {\n try {\n const storage = this.storage;\n\n let keys;\n if ('keys' in storage) {\n keys = await storage.keys();\n } else {\n const length = storage.length instanceof Function ? await storage.length() : storage.length;\n keys = new Array<string>();\n for (let i = 0; i < length; i++) {\n const key = await storage.key(i);\n if (key !== null) keys.push(key);\n }\n }\n keys.sort((a, b) => a.length - b.length);\n\n const patches = new Array<Patch & { persist: StorePersist<T> }>();\n for (const key of keys) {\n const value = await storage.getItem(key);\n if (value) {\n patches.push({\n path: key.split('.'),\n op: 'replace',\n value: value === 'undefined' ? undefined : JSON.parse(value),\n persist: this,\n });\n }\n }\n\n if (this.isStopped) {\n return false;\n }\n\n if (patches.length > 0) {\n this.store.applyPatches(patches);\n }\n\n this.isInitialized = true;\n if (this.replayPatches.length > 0) {\n this.store.applyPatches(this.replayPatches);\n this.replayPatches = [];\n }\n\n return true;\n } catch (e) {\n (this.options.log ?? console.error)('Failed to load storePersist:', e);\n return false;\n }\n }\n\n private watch() {\n this.sub = this.store.subscribePatches((patches) => {\n for (const patch of patches) {\n if ((patch as any).persist === this) {\n continue;\n } else if (this.isInitialized === true) {\n this.addToSaveQueue(patch.path);\n } else {\n this.replayPatches.push(patch);\n }\n }\n });\n }\n\n private addToSaveQueue(path: Path) {\n const match = this.paths.find((p) => isAncestor(p.path, path));\n if (!match) return;\n\n path = path.slice(0, match.path.length);\n const t = Date.now() + (match.throttleMs ?? 0);\n\n if (this.saveQueue.some((i) => i.t <= t && isAncestor(i.path, path))) return;\n this.saveQueue.push({ path, t });\n this.saveQueue.sort((a, b) => a.t - b.t);\n this.run();\n }\n\n private async run() {\n if (this.saveTimeout) clearTimeout(this.saveTimeout);\n const next = this.saveQueue[0];\n\n if (!next) return;\n if (next.t > Date.now()) {\n this.saveTimeout = setTimeout(() => this.run(), next.t - Date.now());\n return;\n }\n\n try {\n this.isSaving = true;\n this.saveQueue.shift();\n await this.save(next.path);\n } finally {\n this.isSaving = false;\n this.run();\n }\n }\n\n private async save(path: Path) {\n const { store, storage } = this;\n let value = get(store.getState(), path);\n\n const subPaths = this.paths\n .filter((p) => isAncestor(path, p.path) && p.path.length > path.length)\n .map((p) => p.path.slice(path.length));\n\n const subValues = new Array<{ path: Path; value: unknown }>();\n for (const subPath of subPaths) {\n const result = split(value, subPath);\n value = result[0];\n subValues.push(...result[1].map((s) => ({ path: [...path, ...s.path], value: s.value })));\n }\n\n const result = storage.setItem(path.join('.'), JSON.stringify(value) ?? 'undefined');\n if (result instanceof Promise) await result;\n for (const { path, value } of subValues) {\n const result = storage.setItem(path.join('.'), JSON.stringify(value) ?? 'undefined');\n if (result instanceof Promise) await result;\n }\n }\n\n stop(): void {\n this.isStopped = true;\n this.sub?.();\n }\n}\n","export function hash(arg: unknown): string {\n return JSON.stringify({ arg }, (_key, value) => {\n if (value instanceof Object && !(value instanceof Array)) {\n const obj: any = {};\n for (const key of Object.keys(value).sort()) {\n obj[key] = value[key as keyof typeof value];\n }\n return obj;\n }\n return value;\n });\n}\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n var envHasBigInt64Array = typeof BigInt64Array !== 'undefined';\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n if ((a instanceof Map) && (b instanceof Map)) {\n if (a.size !== b.size) return false;\n for (i of a.entries())\n if (!b.has(i[0])) return false;\n for (i of a.entries())\n if (!equal(i[1], b.get(i[0]))) return false;\n return true;\n }\n\n if ((a instanceof Set) && (b instanceof Set)) {\n if (a.size !== b.size) return false;\n for (i of a.entries())\n if (!b.has(i[0])) return false;\n return true;\n }\n\n if (ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (a[i] !== b[i]) return false;\n return true;\n }\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (key === '_owner' && a.$$typeof) {\n // React-specific: avoid traversing React elements' _owner.\n // _owner contains circular references\n // and is not needed when comparing the actual elements (and not their owners)\n continue;\n }\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","type FilterString<T> = T extends string ? T : never;\n\nexport declare type SelectorPaths<T> = FilterString<\n keyof {\n [K in keyof NonNullable<T> as\n | K\n | (0 extends 1 & NonNullable<T>[K]\n ? `${FilterString<K>}.${any}`\n : NonNullable<NonNullable<T>[K]> extends Record<string, unknown>\n ? `${FilterString<K>}.${SelectorPaths<NonNullable<T>[K]>}`\n : never)]: 1;\n }\n>;\n\ntype Value<T, K> = K extends keyof T ? T[K] : K extends keyof NonNullable<T> ? NonNullable<T>[K] | undefined : undefined;\n\nexport type SelectorValue<T, K> = K extends `${infer K}.${infer Rest}` ? SelectorValue<Value<T, K>, Rest> : Value<T, K>;\n\nexport function createSelector<T, S>(stringSelector: string): (state: T) => S {\n const parts = stringSelector.split('.');\n return (state) => parts.reduce<any>((v, p) => (v instanceof Object && p in v ? v[p as keyof typeof v] : undefined), state);\n}\n\nexport function setWithSelector(state: unknown, stringSelector: string, value: unknown): void {\n const parts = stringSelector.split('.');\n const prefix = parts.slice(0, -1);\n const last = parts[parts.length - 1]!;\n\n for (const part of prefix) {\n if (state instanceof Object && part in state) {\n state = state[part as keyof typeof state];\n } else {\n throw Error(`Could not set ${stringSelector} because path ${stringSelector} doesn't exist`);\n }\n }\n\n if (state instanceof Object) {\n state[last as keyof typeof state] = value as any;\n } else {\n throw Error(`Could not set ${stringSelector} because path ${stringSelector} doesn't exist`);\n }\n}\n","export function throttle<Args extends any[]>(fn: (...args: Args) => void, ms: number): (...args: Args) => 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 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","import eq from 'fast-deep-equal/es6/react';\nimport { applyPatches, Draft, enableMapSet, enablePatches, freeze, Patch, produce } from 'immer';\nimport { Cancel } from './helpers/misc';\nimport { createSelector, SelectorPaths, SelectorValue } from './helpers/stringSelector';\nimport { throttle as throttleFn } from './helpers/throttle';\n\nexport type StoreOptions = {\n /** Log errors. Default: console.error */\n log?: (...data: any[]) => void;\n};\n\nexport type StoreSubscribeOptions = {\n /** Invoke callback immediately with the current value? Default: true */\n runNow?: boolean;\n /** Throttle invocations of callback. */\n throttle?: number;\n /** Comparison function to determine if the data has changed. Default: fast-deep-equal */\n compare?: (a: any, b: any) => boolean;\n};\n\nexport type StoreAddReactionOptions = {\n /** Invoke callback immediately with the current value? Default: true */\n runNow?: boolean;\n /** Comparison function to determine if the data has changed. Default: fast-deep-equal */\n compare?: (a: any, b: any) => boolean;\n};\n\nconst RESTART_UPDATE = Symbol('RESTART_UPDATE');\n\nexport class Store<T> {\n private subscriptions = new Set<(state: T, patches: Patch[]) => void>();\n private batchCounter = 0;\n private reactions = new Set<() => void>();\n private patches = new Array<Patch>();\n private lock?: 'reaction';\n private options;\n\n constructor(private state: T, { log = (...data: any[]) => console.error(...data) }: StoreOptions = {}) {\n freeze(state, true);\n enableMapSet();\n enablePatches();\n\n this.options = {\n log,\n };\n }\n\n getState(): T {\n return this.state;\n }\n\n update(update: (draft: Draft<T>, original: T) => Draft<T> | void | undefined): void {\n this.checkLock();\n\n this.state = produce(\n this.state,\n (draft) => update(draft, this.state),\n (patches) => this.patches.push(...patches)\n );\n\n this.notify();\n }\n\n set(state: T): void {\n this.checkLock();\n\n this.state = produce(\n this.state,\n () => state,\n (patches) => this.patches.push(...patches)\n ) as T;\n\n this.notify();\n }\n\n applyPatches(patches: Patch[]): void {\n this.checkLock();\n\n this.state = applyPatches(this.state, patches);\n this.patches.push(...patches);\n\n this.notify();\n }\n\n batchUpdates(fn: () => void): void {\n try {\n this.batchCounter++;\n fn();\n } finally {\n this.batchCounter--;\n if (this.batchCounter === 0) {\n this.notify();\n }\n }\n }\n\n subscribe(listener: (value: T, prev: T, state: T) => void, options?: StoreSubscribeOptions): Cancel;\n subscribe<S>(selector: (state: T) => S, listener: (value: S, prev: S, state: T) => void, options?: StoreSubscribeOptions): Cancel;\n subscribe<K extends SelectorPaths<T>>(\n selector: K,\n listener: (value: SelectorValue<T, K>, prev: SelectorValue<T, K>, state: T) => void,\n options?: StoreSubscribeOptions\n ): Cancel;\n subscribe<S>(...args: any[]): Cancel {\n let selector: (state: T) => S, listener: (value: S, prev: S, state: T) => void, options: StoreSubscribeOptions | undefined;\n\n if (args[1] instanceof Function) {\n [selector, listener, options] = args;\n if (typeof selector === 'string') {\n selector = createSelector<T, S>(selector);\n }\n } else {\n [selector, listener, options] = [(x) => x as any, ...args];\n }\n\n const { runNow = true, throttle = 0, compare = eq } = options ?? {};\n const throttledListener = throttle ? throttleFn(listener, throttle) : listener;\n\n let value = selector(this.state);\n\n const internalListener = (state: T, _patches: Patch[], init?: boolean) => {\n try {\n const oldValue = value;\n value = selector(state);\n if (!init && compare(value, oldValue)) return;\n (init ? listener : throttledListener)(value, oldValue, this.state);\n } catch (e) {\n this.options.log('Failed to execute listener:', e);\n }\n };\n\n this.subscriptions.add(internalListener);\n if (runNow) internalListener(this.state, [], true);\n return () => {\n this.subscriptions.delete(internalListener);\n };\n }\n\n addReaction(reaction: (value: T, draft: Draft<T>, original: T, prev: T) => void, options?: StoreAddReactionOptions): Cancel;\n addReaction<S>(\n selector: (state: T) => S,\n reaction: (value: S, draft: Draft<T>, original: T, prev: S) => void,\n options?: StoreAddReactionOptions\n ): Cancel;\n addReaction<K extends SelectorPaths<T>>(\n selector: K,\n reaction: (value: SelectorValue<T, K>, draft: Draft<T>, original: T, prev: SelectorValue<T, K>) => void,\n options?: StoreAddReactionOptions\n ): Cancel;\n addReaction<S>(...args: any[]): Cancel {\n let selector: (state: T) => S,\n reaction: (value: S, draft: Draft<T>, original: T, prev: S) => void,\n options: StoreAddReactionOptions | undefined;\n\n if (args[1] instanceof Function) {\n [selector, reaction, options] = args;\n if (typeof selector === 'string') {\n selector = createSelector<T, S>(selector);\n }\n } else {\n [selector, reaction, options] = [(x) => x as any, ...args];\n }\n const { runNow = true, compare = eq } = options ?? {};\n\n let value = selector(this.state);\n\n const internalListener = (init?: boolean) => {\n let hasChanged = false;\n\n try {\n this.lock = 'reaction';\n const oldValue = value;\n value = selector(this.state);\n if (!init && compare(value, oldValue)) return;\n\n this.state = produce(\n this.state,\n (draft) => reaction(value, draft, this.state, oldValue),\n (patches) => {\n hasChanged = true;\n this.patches.push(...patches);\n }\n );\n } catch (e) {\n this.options.log('Failed to execute reaction:', e);\n } finally {\n delete this.lock;\n }\n\n if (hasChanged && !init) throw RESTART_UPDATE;\n if (hasChanged && init) this.notify();\n };\n\n this.reactions.add(internalListener);\n if (runNow) internalListener(true);\n return () => {\n this.reactions.delete(internalListener);\n };\n }\n\n subscribePatches(listener: (patches: Patch[]) => void): Cancel {\n const internalListener = (_state: T, patches: Patch[]) => {\n try {\n listener(patches);\n } catch (e) {\n this.options.log('Failed to execute patch listener:', e);\n }\n };\n\n this.subscriptions.add(internalListener);\n return () => {\n this.subscriptions.delete(internalListener);\n };\n }\n\n private checkLock() {\n if (this.lock === 'reaction') {\n throw Error('You cannot call update from within a reaction. Use the passed draft instead.');\n }\n }\n\n private notify(): void {\n if (this.batchCounter > 0 || this.patches.length === 0) return;\n\n try {\n for (const reaction of this.reactions) {\n reaction();\n }\n } catch (e) {\n return this.notify();\n }\n\n const patches = this.patches;\n this.patches = [];\n\n this.batchUpdates(() => {\n for (const subscription of this.subscriptions) {\n subscription(this.state, patches);\n }\n });\n }\n}\n","/** @license React vundefined\n * use-sync-external-store-shim.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var e=require(\"react\");function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k=\"function\"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c})},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c})})},[a]);p(d);return d}\nfunction r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return!k(a,d)}catch(f){return!0}}function t(a,b){return b()}var u=\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement?t:q;exports.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/** @license React vundefined\n * use-sync-external-store-shim/with-selector.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var h=require(\"react\"),n=require(\"use-sync-external-store/shim\");function p(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var q=\"function\"===typeof Object.is?Object.is:p,r=n.useSyncExternalStore,t=h.useRef,u=h.useEffect,v=h.useMemo,w=h.useDebugValue;\nexports.useSyncExternalStoreWithSelector=function(a,b,e,l,g){var c=t(null);if(null===c.current){var f={hasValue:!1,value:null};c.current=f}else f=c.current;c=v(function(){function a(a){if(!c){c=!0;d=a;a=l(a);if(void 0!==g&&f.hasValue){var b=f.value;if(g(b,a))return k=b}return k=a}b=k;if(q(d,a))return b;var e=l(a);if(void 0!==g&&g(b,e))return b;d=a;return k=e}var c=!1,d,k,m=void 0===e?null:e;return[function(){return a(b())},null===m?void 0:function(){return a(m())}]},[b,e,l,g]);var d=r(a,c[0],c[1]);\nu(function(){f.hasValue=!0;f.value=d},[d]);w(d);return d};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","import eq from 'fast-deep-equal/es6/react';\nimport { useCallback, useDebugValue } from 'react';\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';\nimport { StoreSubscribeOptions } from '..';\nimport { createSelector, SelectorPaths, SelectorValue } from '../helpers/stringSelector';\nimport { Store } from './store';\n\nexport type UseStoreStateOptions = Omit<StoreSubscribeOptions, 'runNow'>;\n\nexport function useStoreState<T>(store: Store<T>, options?: UseStoreStateOptions): T;\nexport function useStoreState<T, S>(store: Store<T>, selector: (state: T) => S, options?: UseStoreStateOptions): S;\nexport function useStoreState<T, K extends SelectorPaths<T>>(\n store: Store<T>,\n selector: K,\n options?: UseStoreStateOptions\n): SelectorValue<T, K>;\nexport function useStoreState<T, S>(store: Store<T>, ...args: any[]): S {\n let selector: (state: T) => S, options: UseStoreStateOptions;\n\n if (args[0] instanceof Function) {\n selector = args[0];\n options = args[1] ?? {};\n } else if (typeof args[0] === 'string') {\n selector = createSelector(args[0]);\n options = args[1] ?? {};\n } else {\n selector = (x) => x as any;\n options = args[0] ?? {};\n }\n\n const subscribe = useCallback(\n (listener: () => void) => {\n return store.subscribe((x) => x, listener, {\n throttle: options.throttle,\n runNow: false,\n compare: (a, b) => a === b,\n });\n },\n [store, options.throttle]\n );\n\n const getSnapshot = useCallback(() => store.getState(), [store]);\n\n const value = useSyncExternalStoreWithSelector(\n //\n subscribe,\n getSnapshot,\n getSnapshot,\n selector,\n options.compare ?? eq\n );\n\n useDebugValue(value);\n return value;\n}\n","import { SelectorPaths, SelectorValue, setWithSelector } from '../helpers/stringSelector';\nimport { Store } from './store';\nimport { useStoreState } from './useStoreState';\n\nexport type UseStorePropResult<T, K extends SelectorPaths<T>> = [value: SelectorValue<T, K>, update: (value: SelectorValue<T, K>) => void];\n\nexport function useStoreProp<T, K extends SelectorPaths<T>>(store: Store<T>, selector: K): UseStorePropResult<T, K> {\n const value = useStoreState(store, selector);\n const update = (value: SelectorValue<T, K>) => store.update((state) => setWithSelector(state, selector, value));\n\n return [value, update];\n}\n","import { Store as BaseStore } from '../store';\nimport { SelectorPaths, SelectorValue } from '../helpers/stringSelector';\nimport { useStoreProp, UseStorePropResult } from './useStoreProp';\nimport { useStoreState, UseStoreStateOptions } from './useStoreState';\n\nexport class Store<T> extends BaseStore<T> {\n useState(options?: { throttle?: number }): T;\n useState<S>(selector: (state: T) => S, options?: UseStoreStateOptions): S;\n useState<K extends SelectorPaths<T>>(selector: K, options?: UseStoreStateOptions): SelectorValue<T, K>;\n useState(...args: any[]): any {\n return useStoreState(this, ...args);\n }\n\n useProp<K extends SelectorPaths<T>>(selector: K): UseStorePropResult<T, K> {\n return useStoreProp(this, selector);\n }\n}\n","import React, { Context, createContext, ReactNode, useContext, useMemo } from 'react';\nimport { SelectorPaths, SelectorValue } from '../helpers/stringSelector';\nimport { Store } from './store';\nimport { useStoreProp, UseStorePropResult } from './useStoreProp';\nimport { useStoreState, UseStoreStateOptions } from './useStoreState';\n\nexport class StoreScope<T> {\n readonly context: Context<Store<T>>;\n\n constructor(public readonly defaultValue: T) {\n this.context = createContext(new Store(defaultValue));\n }\n\n Provider = ({ children, store }: { children: ReactNode; store?: Store<T> }): JSX.Element => {\n const _store = useMemo(() => store ?? new Store(this.defaultValue), [store]);\n\n return <this.context.Provider value={_store}>{children}</this.context.Provider>;\n };\n\n withScope = <Args extends Record<string, unknown>>(Component: (args: Args) => JSX.Element) => {\n return (args: Args): JSX.Element => (\n <this.Provider>\n <Component {...args} />\n </this.Provider>\n );\n };\n\n useStore(): Store<T> {\n return useContext(this.context);\n }\n\n useState(options?: { throttle?: number }): T;\n useState<S>(selector: (state: T) => S, dependencies?: any[], options?: { throttle?: number }): S;\n useState<K extends SelectorPaths<T>>(selector: K, options?: UseStoreStateOptions): SelectorValue<T, K>;\n useState(...args: any[]): any {\n const store = this.useStore();\n return useStoreState(store, ...args);\n }\n\n useProp<K extends SelectorPaths<T>>(selector: K): UseStorePropResult<T, K> {\n const store = this.useStore();\n return useStoreProp(store, selector);\n }\n}\n","import eq from 'fast-deep-equal/es6/react';\nimport { useCallback, useDebugValue, useEffect } from 'react';\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';\nimport { ResourceInfo, ResourceInstance, ResourceSubscribeOptions } from '..';\nimport { hash } from '../helpers/hash';\n\nexport type UseResource<Value> = Pick<ResourceInstance<unknown, Value>, 'id' | 'invalidateCache' | 'subscribe' | 'getCache' | 'get'>;\n\nexport type UseResourceOptions = Omit<ResourceSubscribeOptions, 'runNow'> & {\n /** Invalidate the resource on mount, causing it to update in the background */\n updateOnMount?: boolean;\n /** Don't subscribe resource while this is true */\n dormant?: boolean;\n};\n\n/** Subscribe to a resource. This will immediately return cached values, if available, and update for future updates.\n * @param resource the resource to subscribe to.\n * @param options options\n */\nexport function useResource<Value>(resource: UseResource<Value>, options?: UseResourceOptions): ResourceInfo<Value> {\n const { compare, dormant, throttle, updateOnMount, watchOnly } = options ?? {};\n\n useEffect(() => {\n if (updateOnMount && !dormant) {\n resource.invalidateCache();\n }\n }, []);\n\n const subscribe = useCallback(\n (listener: () => void) => {\n if (dormant)\n return () => {\n // nothing to do\n };\n\n return resource.subscribe(listener, {\n watchOnly,\n throttle,\n runNow: false,\n compare,\n });\n },\n [resource.id, watchOnly, dormant, throttle]\n );\n\n const getSnapshot = useCallback(() => resource.getCache(), [resource.id]);\n\n let value = useSyncExternalStoreWithSelector(\n //\n subscribe,\n getSnapshot,\n getSnapshot,\n (x) => x,\n eq\n );\n\n if (dormant) {\n value = { state: 'empty', isLoading: false };\n }\n\n useDebugValue(value);\n return value;\n}\n\n/** Subscribe to a resource. This will immediately return cached values, if available, and update for future updates. While waiting for data, it throws so that the Component will be suspended. If there is an error, it throws.\n * @param resource the resource to subscribe to.\n * @param options options\n */\nexport function useReadResource<Value>(resource: UseResource<Value>, options?: UseResourceOptions): Value {\n const info = useResource(resource, options);\n\n if (info.state === 'error') {\n throw info.error;\n }\n\n if (info.state === 'empty') {\n throw resource.get();\n }\n\n useDebugValue(info.value);\n return info.value;\n}\n\nexport type CombineValues<T> = T extends [UseResource<infer Value>]\n ? [Value]\n : T extends [UseResource<infer Value>, ...infer Rest]\n ? [Value, ...CombineValues<Rest>]\n : T extends readonly UseResource<infer Value>[]\n ? Value[]\n : any[];\n\n/** Combine multiple resources into one that can be fed into useResource or useReadResource. Return value will be an array of the combined resources' values.\n * @param resources resources to be combined\n */\nexport function combineResources<Resources extends readonly UseResource<any>[]>(\n ...resources: Resources\n): UseResource<CombineValues<Resources>> {\n return {\n id: hash(resources.map((resource) => resource.id)),\n\n invalidateCache() {\n for (const resource of resources) {\n resource.invalidateCache();\n }\n },\n\n subscribe(listener, options) {\n const handles = resources.map((resource) => resource.subscribe(listener, options));\n\n return () => {\n for (const handle of handles) {\n handle();\n }\n };\n },\n\n getCache() {\n const caches = resources.map((resource) => resource.getCache());\n const isStale = caches.some((cache) => cache.isStale);\n const isLoading = caches.some((cache) => cache.isLoading);\n\n if (caches.some((resource) => resource.state === 'error')) {\n const error = caches.find((cache) => cache.error !== undefined)?.error;\n return { state: 'error', error, isStale, isLoading };\n }\n\n if (caches.every((resource) => resource.state === 'value')) {\n const value = caches.map((cache) => cache.value) as CombineValues<Resources>;\n return { state: 'value', value, isStale, isLoading };\n }\n\n return { state: 'empty', isLoading };\n },\n\n get() {\n return Promise.all(resources.map((resource) => resource.get())) as Promise<CombineValues<Resources>>;\n },\n };\n}\n","import { createContext, useContext } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport type { Id, InternalTableState } from '../types';\n\nexport const TableContext = createContext<Store<InternalTableState<any>> | null>(null);\n\nexport const TableResetContext = createContext<() => void>(() => undefined);\n\nexport const ColumnContext = createContext<Id | null>(null);\n\nexport function useTableContext<T>(): Store<InternalTableState<T>> {\n const value = useContext(TableContext);\n if (!value) throw new Error('No table context available');\n return value as Store<InternalTableState<T>>;\n}\n\nexport function useColumnContext(): Id {\n const value = useContext(ColumnContext);\n if (value === null) throw new Error('No column context available');\n return value;\n}\n","import type { 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 blocked: { main: '#f44336', light: '#f26257', contrastText: '#fff' },\n background: '#ffffff',\n text: 'inherit',\n border: '#777',\n borderLight: '#eee',\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 type { TableTheme } from '../../types';\n\nexport const Badge: TableTheme['components']['Badge'] = ({ badgeContent, children }) => {\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 type { TableTheme } from '../../types';\n\nexport const Button: TableTheme['components']['Button'] = ({\n startIcon,\n children,\n variant = 'text',\n ...props\n}) => {\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 var(--table-button-border, var(--table-border, #777777))',\n\n '&:disabled': {\n borderColor: 'var(--table-button-border-disabled, #eeeeee)',\n },\n },\n variant === 'contained' && {\n color: 'var(--primaryContrastText)',\n backgroundColor: 'var(--primaryMain)',\n boxShadow:\n '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 type { 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 type { 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 { useLayoutEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport type { TableTheme } from '../../types';\nimport { defaultClasses } from './defaultClasses';\n\nconst MARGIN = 10;\nconst MAX_OFFSET = 20;\n\nexport const Popover: TableTheme['components']['Popover'] = ({\n anchorEl,\n open,\n hidden,\n onClose,\n children,\n className,\n backdropClassName,\n align,\n}) => {\n const popper = useRef<HTMLDivElement>(null);\n const [position, setPosition] = useState<{ left: number; top: number }>();\n const [maxHeight, setMaxHeight] = useState(document.documentElement.clientHeight - 2 * MARGIN);\n const [zIndex, setZIndex] = useState(1);\n\n useLayoutEffect(() => {\n if (!anchorEl || !open) {\n setPosition(undefined);\n return;\n }\n\n let last: { left: number; top: number } | undefined;\n\n function check() {\n if (!anchorEl) return;\n const {\n left: anchorLeft,\n bottom: anchorBottom,\n width: anchorWidth,\n } = anchorEl.getBoundingClientRect();\n const { width: popperWidth = 0 } = popper.current?.getBoundingClientRect() ?? {};\n const viewportWidth = document.documentElement.clientWidth;\n const viewportHeight = document.documentElement.clientHeight;\n\n const next = {\n left:\n align === 'center'\n ? anchorLeft + anchorWidth / 2 - popperWidth / 2\n : anchorLeft -\n Math.min(popperWidth ? popperWidth / 2 : Number.POSITIVE_INFINITY, MAX_OFFSET),\n top: anchorBottom,\n };\n\n if (next.left < MARGIN) {\n next.left = MARGIN;\n }\n if (next.left + popperWidth > viewportWidth - MARGIN) {\n next.left = viewportWidth - MARGIN - popperWidth;\n }\n if (next.top < MARGIN) {\n next.top = MARGIN;\n }\n\n if (next.left !== last?.left || next.top !== last?.top) {\n setPosition(next);\n }\n\n setMaxHeight(viewportHeight - MARGIN - next.top);\n\n last = next;\n }\n check();\n\n const handle = setInterval(check, 16);\n return () => {\n clearInterval(handle);\n };\n }, [anchorEl, open, align]);\n\n function updateZIndex(div: HTMLDivElement | null) {\n const ancestors = [];\n for (let node = div?.parentElement; node; node = node.parentElement) {\n ancestors.push(node);\n }\n\n for (const node of ancestors.reverse()) {\n const value = document.defaultView?.getComputedStyle(node).getPropertyValue('z-index');\n\n if (value && !Number.isNaN(Number(value))) {\n setZIndex(Number(value) + 1);\n return;\n }\n }\n }\n\n if (!open) return null;\n\n return (\n <>\n <div\n ref={updateZIndex}\n css={{\n display: 'none',\n }}\n />\n\n {createPortal(\n <>\n <div\n className={backdropClassName}\n css={[\n {\n position: 'fixed',\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n zIndex,\n },\n hidden && { display: 'none' },\n ]}\n onClick={() => onClose()}\n />\n\n <div\n ref={popper}\n className={className}\n css={[\n defaultClasses.card,\n {\n position: 'fixed',\n maxWidth: document.documentElement.clientWidth - 2 * MARGIN,\n maxHeight,\n ...position,\n zIndex: zIndex + 1,\n overflowY: 'auto',\n color: 'var(--table-text-color)',\n },\n hidden && { display: 'none' },\n !position && { visibility: 'hidden' },\n ]}\n >\n {children}\n </div>\n </>,\n document.body,\n )}\n </>\n );\n};\n","import { css } from '@emotion/react';\n\nconst cell = css({\n display: 'flex',\n alignItems: 'center',\n borderBottom: '1px solid var(--table-border-light-color)',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n background: 'var(--table-background-color)',\n\n '&:not(:empty)': {\n padding: `calc(var(--spacing) * 0.1) calc(2 * var(--spacing))`,\n },\n});\n\nexport const defaultClasses = {\n table: css({\n position: 'relative',\n display: 'grid',\n color: 'var(--table-text-color)',\n }),\n\n cell,\n\n cellFill: css({\n borderBottom: '1px solid var(--table-border-light-color)',\n background: 'var(--table-background-color)',\n }),\n\n headerCell: css(cell, {\n borderBottom: '1px solid var(--table-border-color)',\n\n '&:not(:empty)': {\n padding: `var(--spacing) 0 var(--spacing) calc(2 * var(--spacing))`,\n },\n }),\n\n footerCell: css(cell, {\n padding: `var(--spacing) calc(2 * var(--spacing))`,\n borderTop: '1px solid var(--table-border-color)',\n borderBottom: 'none',\n }),\n\n firstCell: css({\n justifyContent: 'start',\n }),\n\n sticky: css({\n position: 'sticky',\n top: 0,\n zIndex: 2,\n }),\n\n stickyBottom: css({\n position: 'sticky',\n bottom: 0,\n zIndex: 2,\n }),\n\n headerFill: css({\n borderBottom: '1px solid var(--table-border-color)',\n background: 'var(--table-background-color)',\n }),\n\n footerFill: css({\n borderTop: '1px solid var(--table-border-color)',\n background: 'var(--table-background-color)',\n }),\n\n text: css({\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }),\n\n card: css({\n borderRadius: 4,\n boxShadow: '0px 3px 14px 2px rgb(0 0 0 / 12%)',\n background: 'var(--table-background-color)',\n }),\n\n clearFiltersButton: css({\n padding: `0 calc(2 * var(--spacing))`,\n fontWeight: 'bold',\n position: 'sticky',\n left: 0,\n maxWidth: 'fit-content',\n gridColumn: '2/-1',\n button: {\n color: 'var(--primaryMain) !important',\n border: 'solid 1px',\n borderColor: 'var(--primaryMain) !important',\n margin: 'var(--spacing)',\n },\n }),\n\n details: css(cell, {\n gridColumn: '1 / -1',\n whiteSpace: 'normal',\n }),\n};\n","import { useState } from 'react';\nimport type { TableTheme } from '../../types';\n\nexport const TextField: TableTheme['components']['TextField'] = ({\n startIcon,\n endIcon,\n className,\n inputRef,\n onBlur,\n ...props\n}) => {\n const [focus, setFocus] = useState(false);\n\n return (\n <div\n className={className}\n css={[\n {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n border: '1px solid var(--table-textfield-border, var(--table-border, #777777))',\n borderRadius: 4,\n },\n focus && { border: '2px solid var(--primaryMain)', margin: -1 },\n ]}\n >\n {startIcon}\n\n <input\n ref={inputRef}\n {...props}\n value={props.value ?? ''}\n onFocus={() => setFocus(true)}\n onBlur={(event) => {\n setFocus(false);\n onBlur?.(event);\n }}\n css={{\n minWidth: 0,\n width: '100%',\n flex: 1,\n border: 'none',\n outline: 'none',\n borderRadius: 4,\n padding: 'calc(var(--spacing) * 2)',\n paddingLeft: startIcon ? 0 : undefined,\n paddingRight: endIcon ? 0 : undefined,\n transition: 'outline 500ms',\n }}\n />\n\n {endIcon}\n </div>\n );\n};\n","import { Spinner } from '../../components/spinnner';\nimport type { 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 type { HTMLProps } from 'react';\nimport { cloneElement } from 'react';\nimport type { 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 function IconComponent(props: HTMLProps<Element>) {\n return (\n <ClassNames>\n {({ css }) =>\n cloneElement(svg, {\n ...props,\n className: css(IconDefaultStyle, props.className),\n })\n }\n </ClassNames>\n );\n };\n}\n\nconst Settings = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\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\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\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\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\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\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\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\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\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\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\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\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\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 type { TableTheme } from '../../types';\n\nexport const defaultTexts: TableTheme['text'] = {\n selectColumns: 'Select visible columns',\n showAllColumns: 'Show all',\n hideAllColumns: 'Hide all',\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 rangeMin: 'Min',\n rangeMax: 'Max',\n calendarWeek: 'Wk',\n};\n","import type { 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 { Store } from 'schummar-state/react';\nimport type { PartialTableTheme } from '../types';\n\nexport const globalTableTheme = new Store<PartialTableTheme>({});\n\nexport function configureTableTheme(tableTheme: PartialTableTheme) {\n globalTableTheme.set(tableTheme);\n}\n\nexport function mergeThemes<T>(...themes: PartialTableTheme<T>[]): PartialTableTheme<T> {\n return {\n text: Object.assign({}, ...themes.map((theme) => theme.text)),\n classes: Object.assign({}, ...themes.map((theme) => theme.classes)),\n styles: Object.assign({}, ...themes.map((theme) => theme.styles)),\n components: Object.assign({}, ...themes.map((theme) => theme.components)),\n icons: Object.assign({}, ...themes.map((theme) => theme.icons)),\n colors: {\n primary: Object.assign({}, ...themes.map((theme) => theme.colors?.primary)),\n secondary: Object.assign({}, ...themes.map((theme) => theme.colors?.secondary)),\n blocked: Object.assign({}, ...themes.map((theme) => theme.colors?.blocked)),\n background: themes\n .map((theme) => theme.colors?.background)\n .reverse()\n .find((x) => x !== undefined),\n text: themes\n .map((theme) => theme.colors?.text)\n .reverse()\n .find((x) => x !== undefined),\n border: themes\n .map((theme) => theme.colors?.border)\n .reverse()\n .find((x) => x !== undefined),\n borderLight: themes\n .map((theme) => theme.colors?.borderLight)\n .reverse()\n .find((x) => x !== undefined),\n },\n spacing: themes\n .map((theme) => theme.spacing)\n .reverse()\n .find((x) => x !== undefined),\n };\n}\n","import type { DependencyList, ReactNode } from 'react';\nimport { createContext, useContext, useMemo } from 'react';\nimport type { FunctionWithDeps } from '../types';\n\nconst TableMemoContext = createContext(new Map<string, [value: any, deps: DependencyList]>());\n\nexport function TableMemoContextProvider({ children }: { children: ReactNode }) {\n return (\n <TableMemoContext.Provider value={useMemo(() => new Map(), [])}>\n {children}\n </TableMemoContext.Provider>\n );\n}\n\nexport function useTableMemo() {\n const memoCache = useContext(TableMemoContext);\n\n return <Function_ extends (...args: any[]) => any>(\n key: string,\n function_: FunctionWithDeps<Function_>,\n ): Function_ => {\n let deps: DependencyList;\n if (Array.isArray(function_)) {\n deps = function_.slice(1);\n function_ = function_[0];\n } else {\n deps = [function_.toString()];\n }\n\n let cachedValue = memoCache.get(key);\n const hit =\n cachedValue &&\n cachedValue[1].length === deps.length &&\n cachedValue[1].every((x, i) => x === deps[i]);\n if (!cachedValue || !hit) {\n cachedValue = [function_, deps];\n memoCache.set(key, cachedValue);\n }\n return cachedValue[0];\n };\n}\n","import { ReactNode, createContext, useContext } from 'react';\nimport CsvExporter from '../exporters/csvExporter';\nimport { ExporterEntry } from '../exporters/exporter';\nimport { PartialTableTheme } from '../types';\n\nexport interface TableSettingsContextType {\n theme: PartialTableTheme;\n exporters: ExporterEntry[];\n}\n\nexport const TableSettingsContext = createContext<TableSettingsContextType>({\n theme: {},\n exporters: [\n { action: 'copy', exporter: new CsvExporter() },\n { action: 'download', exporter: new CsvExporter() },\n ],\n});\n\nexport function TableSettingsProvider({\n theme,\n exporters,\n additionalExporters,\n children,\n}: Partial<TableSettingsContextType> & {\n additionalExporters?: ExporterEntry[];\n children?: ReactNode;\n}) {\n const inherited = useContext(TableSettingsContext);\n theme ??= inherited.theme;\n exporters ??= inherited.exporters;\n\n if (additionalExporters) {\n exporters = [...exporters, ...additionalExporters];\n }\n\n return (\n <TableSettingsContext.Provider\n value={{\n theme,\n exporters,\n }}\n >\n {children}\n </TableSettingsContext.Provider>\n );\n}\n","import { BlobExporter, StringExporter } from './exporter';\n\nexport interface CsvExporterOptions {\n sepPrefix?: boolean;\n separator?: string;\n quote?: string;\n eol?: string;\n}\n\nexport default class CsvExporter implements StringExporter, BlobExporter {\n readonly type = 'csv';\n readonly fileEnding = 'csv';\n\n constructor(public readonly options: CsvExporterOptions = {}) {}\n\n exportToString(\n columns: (string | number | Date)[],\n rows: (string | number | Date)[][],\n options = this.options,\n ): string {\n const { sepPrefix, separator = '\\t', quote = '\"', eol = '\\n' } = options;\n\n const cells = [columns, ...rows].map((line) =>\n line.map((value) => {\n let stringValue: string;\n if (typeof value === 'number') {\n stringValue = String(value);\n } else if (value instanceof Date) {\n stringValue = value.toISOString();\n } else {\n stringValue = value;\n }\n\n if (![separator, quote, eol].some((c) => stringValue.includes(c))) {\n return value;\n }\n\n const clean = stringValue.replace(new RegExp(quote, 'g'), `${quote}${quote}`);\n return `${quote}${clean}${quote}`;\n }),\n );\n\n return (\n (sepPrefix ? `SEP=${separator}\\n` : '') + cells.map((line) => line.join(separator)).join(eol)\n );\n }\n\n exportToBlob(columns: (string | number | Date)[], rows: (string | number | Date)[][]): Blob {\n const data = this.exportToString(columns, rows, {\n ...this.options,\n sepPrefix: this.options.sepPrefix ?? true,\n });\n return new Blob([data], { type: 'text/csv' });\n }\n}\n","import { createContext, useMemo, useState } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { cx } from '../misc/helpers';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport { useCssVariables } from '../theme/useCssVariables';\n\nexport const FilterControlContext = createContext({\n isActive: false,\n close: (): void => undefined,\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(\n (state) => state.activeColumns.find((column) => column.id === columnId)?.filter,\n );\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={(event) => setAnchor(event.currentTarget)}\n onContextMenu={(event) => {\n reset();\n event.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={(event) => {\n event.stopPropagation();\n }}\n onPointerMove={(event) => {\n event.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 type { Id, TableItem } from '../types';\n\nexport const flatMap = <T, S>(array: Iterable<T>, flatMap: (t: T) => S[]): S[] => {\n return [...array].flatMap(flatMap);\n};\n\nexport const orderBy = <T>(\n array: T[],\n selectors: ((t: T) => any)[] = [],\n direction: ('desc' | 'asc')[] = [],\n): T[] => {\n if (selectors.length === 0) selectors = [(t) => t];\n\n return [...array].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 _direction = direction[i] === 'desc' ? -1 : 1;\n if (_a > _b) return _direction;\n if (_a < _b) return -_direction;\n }\n return 0;\n });\n};\n\nexport const uniq = <T>(array: T[]): T[] => {\n const set = new Set<T>();\n for (const t of array) 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>(\n activeItemsById: Map<Id, TableItem<T>>,\n ...items: TableItem<T>[]\n): Set<Id> => {\n const result = new Set<Id>();\n\n const find = ({ parentId }: TableItem<T>): void => {\n const parent =\n parentId !== undefined && parentId !== null ? 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 (Array.isArray(x)) 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 (Array.isArray(x)) return x.map(asString);\n return asString(x);\n};\n\nexport const asNumber = (x: unknown): number | null => {\n const n = Number(x);\n return Number.isNaN(n) ? null : n;\n};\n\nexport const asNumberOrArray = (x: unknown): number | null | (number | null)[] => {\n if (Array.isArray(x)) return x.map(asNumber);\n return asNumber(x);\n};\n\nexport const defaultEquals = (a: unknown, b: unknown): boolean => a === b;\n\nexport const subStringMatch = (a: string, b: string): boolean =>\n a.toLowerCase().includes(b.toLowerCase());\n\nexport const castArray = <T>(a: T | T[]) => (Array.isArray(a) ? a : [a]);\n\nexport const cx = (\n ...classNames: (string | false | undefined | null | Record<string, boolean>)[]\n) =>\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\ntype Falsy = false | 0 | '' | null | undefined;\nexport function isTruthy<T>(x: T): x is Exclude<T, Falsy> {\n return !!x;\n}\n","import { useTheme } from '../hooks/useTheme';\n\nexport function useCssVariables() {\n return useTheme(({ spacing, colors }) => {\n return {\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 '--blockedMain': colors.blocked.main,\n '--blockedLight': colors.blocked.light,\n '--blockedContrastText': colors.blocked.contrastText,\n '--table-background-color': colors.background,\n '--table-text-color': colors.text,\n '--table-border-color': colors.border,\n '--table-border-light-color': colors.borderLight,\n };\n });\n}\n","import { castDraft } from 'immer';\nimport { useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { nanoid } from 'nanoid';\nimport { FilterControlContext } from '../components/filterControl';\nimport { debounce } from '../misc/debounce';\nimport type { FilterImplementation, SerializableValue } from '../types';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport { useTableMemo } from './useTableMemo';\n\nexport function useFilter<T, V, F, S extends SerializableValue>(\n impl: FilterImplementation<T, V, F, S>,\n) {\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n const cache = useTableMemo();\n const cacheId = useMemo(() => nanoid(), []);\n const filterBy = impl.filterBy && cache(cacheId, 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 function debounce<Args extends any[]>(\n function_: (...args: Args) => void,\n ms: number,\n): { (...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 function_(...(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 { DateObj, useDayzed } from 'dayzed';\nimport {\n Fragment,\n ReactNode,\n createContext,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { defaults } from '../misc/defaults';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport { DateInput } from './dateInput';\nimport { Text } from './text';\nimport { Interpolation, Theme } from '@emotion/react';\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 /** Currently visible date. */\n dateInView?: Date;\n /** Callback for when the currently visible date changes. */\n onDateInViewChange?: (value: Date) => 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 /** Minimum selectable date */\n /** Date ranges that are visually marked as blocked */\n blockedRanges?: DateRange[];\n minDate?: Date;\n /** Maximum selectable date */\n maxDate?: Date;\n /** Whether to show the calendar week in the first column */\n showCalendarWeek?: boolean;\n};\n\nconst DatePickerContext = createContext<Partial<Omit<DatePickerProps, 'value' | 'onChange'>>>({});\n\nexport function DatePickerProvider({\n children,\n ...props\n}: Partial<Omit<DatePickerProps, 'value' | 'onChange'>> & { children?: ReactNode }) {\n const value = useMemo(() => props, [JSON.stringify(props)]);\n\n return <DatePickerContext.Provider value={value}>{children}</DatePickerContext.Provider>;\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) =>\n 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 + 1);\n\n return {\n min: startOfDay(min),\n max: endOfDay(now),\n };\n};\n\nexport const today = () => lastDays(1);\n\nexport const thisWeek = (delta = 0, 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 + delta * 7);\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 = (delta = 0): DateRange => {\n const now = new Date();\n const min = new Date(now);\n min.setDate(1);\n min.setMonth(min.getMonth() + delta);\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 = (delta = 0): DateRange => {\n const now = new Date();\n const min = new Date(now);\n min.setDate(1);\n min.setMonth(0);\n min.setFullYear(min.getFullYear() + delta);\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\nconst MS_PER_DAY = 1000 * 60 * 60 * 24;\nexport const getCalendarWeek = (date: Date): number => {\n // ISO 8601: Week 1 is the week with the first Thursday of the year.\n // https://en.wikipedia.org/wiki/ISO_week_date\n\n const endOfWeek = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate() + (7 - (date.getDay() || 7)),\n );\n\n const year = endOfWeek.getFullYear();\n const firstDayOfYear = new Date(year, 0, 1);\n const dayOfYear =\n Math.floor(\n (endOfWeek.getTime() -\n firstDayOfYear.getTime() +\n (endOfWeek.getTimezoneOffset() - firstDayOfYear.getTimezoneOffset())) /\n MS_PER_DAY,\n ) + 1;\n const weekOfYear = Math.floor((3 + dayOfYear) / 7);\n\n if (weekOfYear === 0) {\n return (\n getCalendarWeek(\n new Date(endOfWeek.getFullYear(), endOfWeek.getMonth(), endOfWeek.getDate() - 7),\n ) + 1\n );\n }\n\n return weekOfYear;\n};\n\nexport const commonQuickOptions = {\n today: { label: <Text id=\"today\" />, value: today },\n thisWeek: { label: <Text id=\"thisWeek\" />, value: (props) => thisWeek(0, props.firstDayOfWeek) },\n thisMonth: { label: <Text id=\"thisMonth\" />, value: () => thisMonth() },\n thisYear: { label: <Text id=\"thisYear\" />, value: () => thisYear() },\n lastSevenDays: { label: <Text id=\"lastSevenDays\" />, value: () => lastDays(7) },\n lastThirtyDays: { label: <Text id=\"lastThirtyDays\" />, value: () => lastDays(30) },\n} satisfies Record<\n DatePickerQuickOption & string,\n { label: ReactNode; value: Date | DateRange | ((props: DatePickerProps) => Date | DateRange) }\n>;\n\n/** Returns whether two dates and/or date ranges intersect. Intersection is considered per day. */\nexport function dateIntersect(\n a: Date | DateRange | null | undefined,\n b: Date | DateRange | null | undefined,\n) {\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 dateClamp(date: Date, min?: Date, max?: Date) {\n if (min && date < min) {\n return min;\n }\n\n if (max && date > max) {\n return max;\n }\n\n return date;\n}\n\nfunction getValueForComparison(value?: Date | DateRange | null) {\n if (!value) {\n return value;\n }\n if (value instanceof Date) {\n return value.getTime();\n }\n return `${value.min?.getTime()}-${value.max?.getTime()}`;\n}\n\nexport function DatePicker(props: DatePickerProps) {\n const context = useContext(DatePickerContext);\n\n const {\n value,\n rangeSelect,\n locale,\n firstDayOfWeek = 1,\n defaultDateInView,\n quickOptions = ['today', 'thisWeek'],\n minDate,\n maxDate,\n showCalendarWeek,\n blockedRanges = [],\n } = defaults<DatePickerProps>(props, context);\n\n function onChange(value: Date | DateRange | null) {\n if (value instanceof Date) {\n value = dateClamp(value, minDate, maxDate);\n } else if (value) {\n value = {\n min: dateClamp(value.min, minDate, maxDate),\n max: dateClamp(value.max, minDate, maxDate),\n };\n }\n\n props.onChange(value);\n }\n\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 function getDayCssStyles({\n disabled,\n prevMonth,\n nextMonth,\n today,\n blocked,\n selected,\n preSelected,\n }: {\n disabled?: boolean;\n prevMonth?: boolean;\n nextMonth?: boolean;\n today?: boolean;\n blocked?: boolean;\n selected?: boolean;\n preSelected?: boolean;\n }): Interpolation<Theme> {\n return [\n {\n padding: 10,\n border: 'none',\n background: 'transparent',\n cursor: disabled ? undefined : 'pointer',\n font: 'inherit',\n color: 'inherit',\n },\n (prevMonth || nextMonth) && {\n color: 'var(--date-picker-disemphasized, #bdbdbd)',\n },\n today && {\n outline: '1px solid var(--secondaryMain)',\n },\n blocked && {\n background: 'var(--blockedMain)',\n color: 'var(--blockedContrastText)',\n },\n selected && {\n background: 'var(--primaryMain)',\n color: 'var(--primaryContrastText)',\n },\n blocked &&\n selected && {\n position: 'relative',\n '::before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n background: 'var(--blockedMain)',\n clipPath: 'polygon(0 0, 0 50%, 50% 0)',\n },\n },\n preSelected && {\n background: 'var(--primaryLight)',\n color: 'var(--primaryContrastText)',\n },\n ];\n }\n\n const mountTime = useMemo(() => new Date(), []);\n const [dirty, setDirty] = useState<Partial<DateRange>>();\n const [hovered, setHovered] = useState<DateRange>();\n const [dateInViewLocal, setDateInViewLocal] = useState<Date>(defaultDateInView ?? mountTime);\n const dateInView = props.dateInView ?? dateInViewLocal;\n\n function setDateInView(date: Date) {\n setDateInViewLocal(date);\n props.onDateInViewChange?.(date);\n }\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 const resolvedQuickOptions = [...quickOptions, { label: <Text id=\"reset\" />, value: null }].map(\n (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 type=\"button\"\n css={{\n color: 'inherit',\n }}\n onClick={() => {\n setDirty(undefined);\n\n if (value instanceof Function) {\n onChange(value(props));\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) =>\n setDateInView(new Date(dateInView.getFullYear(), dateInView.getMonth() + offset)),\n offset: 0,\n minDate,\n maxDate,\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) =>\n format(new Date(Date.UTC(2021, 7, ((weekDay + firstDayOfWeek) % 7) + 1)));\n }, [locale, firstDayOfWeek]);\n\n useEffect(\n () =>\n setDateInView(\n value === null ? defaultDateInView ?? mountTime : value instanceof Date ? value : value.max,\n ),\n [getValueForComparison(value), getValueForComparison(defaultDateInView), mountTime],\n );\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\n css={[\n cssVariables,\n {\n color: 'var(--table-text-color)',\n },\n ]}\n >\n <div\n css={{\n display: 'grid',\n gridAutoFlow: 'column',\n justifyContent: 'center',\n alignItems: 'baseline',\n gap: 'var(--spacing)',\n }}\n >\n <DateInput\n value={min ?? null}\n onChange={(date) => set(date ?? undefined, max, 'min')}\n locale={locale}\n />\n\n {rangeSelect && (\n <>\n {' - '}\n <DateInput\n value={max ?? null}\n onChange={(date) => set(min, date ?? undefined, 'max')}\n locale={locale}\n />\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 type=\"button\" {...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 type=\"button\" {...getForwardProps({ calendars })}>\n <ChevronRight />\n </IconButton>\n </div>\n\n <div\n css={{\n justifySelf: 'center',\n display: 'grid',\n gridTemplateColumns: 'repeat(8, max-content)',\n }}\n >\n {showCalendarWeek ? (\n <div\n css={{\n justifySelf: 'center',\n padding: 10,\n borderRight:\n '1px solid var(--date-picker-separator, var(--table-border, #bdbdbd))',\n }}\n >\n <Text id=\"calendarWeek\" />\n </div>\n ) : (\n <div />\n )}\n\n {weekDays.map((_v, weekDay) => (\n <div\n key={weekDay}\n css={{\n justifySelf: 'center',\n padding: 10,\n }}\n >\n {formatWeekday(weekDay)}\n </div>\n ))}\n\n {weeks.map((week, index) => {\n const weekStart = week[0] as DateObj;\n const weekEnd = week[6] as DateObj;\n const weekDisabled =\n !rangeSelect ||\n (minDate && weekEnd.date < minDate) ||\n (maxDate && weekStart.date > maxDate);\n\n return (\n <Fragment key={index}>\n {showCalendarWeek ? (\n <button\n type=\"button\"\n css={{\n padding: 10,\n border: 'none',\n background: 'transparent',\n cursor: weekDisabled ? undefined : 'pointer',\n font: 'inherit',\n borderRight:\n '1px solid var(--date-picker-separator, var(--table-border, #bdbdbd))',\n color: 'inherit',\n }}\n onClick={() => {\n if (weekDisabled) {\n return;\n }\n\n const min = minDate && weekStart.date < minDate ? minDate : weekStart.date;\n const max = maxDate && weekEnd.date > maxDate ? maxDate : weekEnd.date;\n set(min, max);\n }}\n onPointerOver={() =>\n !weekDisabled && setHovered({ min: weekStart.date, max: weekEnd.date })\n }\n onPointerOut={() => !weekDisabled && setHovered(undefined)}\n >\n {getCalendarWeek(weekEnd.date)}\n </button>\n ) : (\n <div />\n )}\n\n {week.map((dateObject, dayIndex) => {\n if (!dateObject) {\n return <div key={dayIndex} />;\n }\n\n const { prevMonth, nextMonth, date } = dateObject;\n const today = startOfDay(date).getTime() === now.getTime();\n const disabled = (minDate && date < minDate) || (maxDate && date > maxDate);\n\n const selected =\n date.getTime() === min?.getTime() ||\n (min && max && dateIntersect(date, { min, max }));\n const preSelected =\n !selected &&\n !disabled &&\n (dateIntersect(date, hovered) ||\n (min &&\n !max &&\n hovered &&\n dateIntersect(\n date,\n min <= hovered.min\n ? { min, max: hovered.min }\n : { min: hovered.max, max: min },\n )));\n const blocked = blockedRanges.some((range) => dateIntersect(date, range));\n\n return (\n <button\n type=\"button\"\n key={`${index}-${dayIndex}`}\n css={getDayCssStyles({\n disabled,\n prevMonth,\n nextMonth,\n today,\n blocked,\n selected,\n preSelected,\n })}\n {...getDateProps({ dateObj: dateObject })}\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({ min: date, max: date })}\n onPointerOut={() => setHovered(undefined)}\n disabled={disabled}\n >\n {date.getDate()}\n </button>\n );\n })}\n </Fragment>\n );\n })}\n </div>\n </div>\n ))}\n\n <div\n css={{\n marginTop: 'var(--spacing)',\n display: 'grid',\n gridAutoFlow: 'column',\n justifyContent: 'center',\n }}\n >\n {resolvedQuickOptions}\n </div>\n </div>\n );\n}\n","export function defaults<T extends object>(first: T, ...more: Partial<T>[]): T {\n return more.reduce<T>((acc, source) => {\n const copy = { ...acc };\n\n for (const [key, value] of Object.entries(source)) {\n copy[key as keyof T] ??= value as any;\n }\n\n return copy;\n }, first);\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: Number.POSITIVE_INFINITY,\n};\n\nconst length = (type: 'day' | 'month' | 'year', value: string) =>\n Math.max(value.length, defaultLengths[type]);\n\nconst tabNext = (event: Element) => {\n const all = Array.from(document.querySelectorAll(`.${className}`));\n const index = all.indexOf(event);\n const next = all[(index + 1) % all.length];\n\n if (next instanceof HTMLElement) {\n next.focus();\n }\n};\n\nexport function DateInput({\n value,\n onChange,\n locale,\n}: {\n value: Date | null;\n onChange: (date: Date | null) => void;\n locale?: string;\n}) {\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 switch (override.type) {\n case 'day': {\n newValue.setDate(Number(override.value));\n break;\n }\n\n case 'month': {\n newValue.setMonth(Number(override.value) - 1);\n break;\n }\n\n case 'year': {\n newValue.setFullYear(Number(override.value));\n break;\n }\n\n default: {\n break;\n }\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 boxSizing: 'content-box',\n overflow: 'visible',\n border: 'none',\n borderBottom: '2px solid transparent',\n outline: 'none',\n fontSize: 'inherit',\n backgroundColor: 'inherit',\n color: 'inherit',\n\n '::placeholder': {\n color: 'inherit',\n opacity: 0.5,\n },\n\n '&:focus': {\n borderBottom: '2px solid var(--primaryMain)',\n },\n }}\n style={{\n width: `${length(type, value)}ch`,\n }}\n placeholder={''.padEnd(length(type, value), '0')}\n value={override?.type === type ? override.value : !isEmpty ? value : ''}\n onChange={(event) => {\n setOverride({ type, value: event.target.value });\n if (event.target.value.length >= maxLengths[type]) {\n setTimeout(() => tabNext(event.target));\n }\n }}\n onFocus={(event) => event.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 { useFilter } from '../hooks/useFilter';\nimport type { CommonFilterProps } from '../types';\nimport type { DatePickerProps, DateRange } from './datePicker';\nimport { dateIntersect, DatePicker } 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 (Array.isArray(x)) 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 minDate,\n maxDate,\n showCalendarWeek,\n ...props\n}: {\n /** If enabled, only single days can be selected. Ranges otherwise. */\n singleSelect?: boolean;\n} & Pick<\n DatePickerProps,\n | 'locale'\n | 'firstDayOfWeek'\n | 'defaultDateInView'\n | 'quickOptions'\n | 'minDate'\n | 'maxDate'\n | 'showCalendarWeek'\n> &\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 minDate={minDate}\n maxDate={maxDate}\n showCalendarWeek={showCalendarWeek}\n />\n </div>\n );\n}\n","import { useState } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport type { TableTheme } from '../types';\n\ntype TextFieldProps = TableTheme['components']['TextField'] extends React.ComponentType<infer T>\n ? T\n : never;\n\nexport interface NumberFieldProps extends Omit<TextFieldProps, 'value' | 'onChange'> {\n value?: number | null;\n onChange?: (value: number | null) => void;\n}\n\nconst Pattern = /^-?\\d*(?:[.,]\\d*)?$/;\n\nconst printNumber = (value: number | null, locale?: string) => {\n if (value === null) {\n return '';\n }\n\n return value.toLocaleString(locale);\n};\n\nconst parseNumber = (value: string) => {\n if (value === '') {\n return null;\n }\n\n const asNumber = Number(value.replace(',', '.'));\n return Number.isNaN(asNumber) ? null : asNumber;\n};\n\nexport function NumberField({\n value: commitedValue = null,\n onChange,\n ...textFieldProps\n}: NumberFieldProps) {\n const locale = useTheme((t) => t.locale);\n const TextField = useTheme((t) => t.components.TextField);\n const [value = printNumber(commitedValue, locale), setValue] = useState<string>();\n\n return (\n <TextField\n value={value}\n onChange={(event) => {\n if (Pattern.test(event.target.value)) {\n setValue(event.target.value);\n }\n }}\n onBlur={() => {\n onChange?.(parseNumber(value));\n setValue(undefined);\n }}\n {...textFieldProps}\n css={{\n input: {\n backgroundColor: 'inherit',\n color: 'inherit',\n },\n }}\n />\n );\n}\n","import { useFilter } from '../hooks/useFilter';\nimport { useTheme } from '../hooks/useTheme';\nimport { asNumberOrArray, castArray } from '../misc/helpers';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport type { CommonFilterProps } from '../types';\nimport { NumberField } from './numberField';\n\nexport interface RangeFilterProps<T, V>\n extends CommonFilterProps<T, V, number | null, [number | null, number | null] | null> {\n min?: number;\n max?: number;\n}\n\nexport function RangeFilter<T, V>({\n min,\n max,\n filterBy = asNumberOrArray,\n ...props\n}: RangeFilterProps<T, V>): JSX.Element {\n const rangeMinText = useTheme((t) => t.text.rangeMin);\n const rangeMaxText = useTheme((t) => t.text.rangeMax);\n\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n const filterByFunction = filterBy instanceof Function ? filterBy : filterBy[0];\n\n const [minValue, maxValue] = table.useState((state) => {\n if (typeof min === 'number' && typeof max === 'number') {\n return [min, max];\n }\n\n const column = state.activeColumns.find((c) => c.id === columnId);\n\n if (!column) {\n return [0, 100];\n }\n\n let minValue;\n let maxValue;\n\n for (const item of state.items) {\n const columnValue = column.value(item.value) as V;\n const numberValues = castArray(filterByFunction(columnValue, item.value)).filter(\n (value): value is number => value !== null,\n );\n\n for (const value of numberValues) {\n minValue = Math.min(minValue ?? value, value);\n maxValue = Math.max(maxValue ?? value, value);\n }\n }\n\n return [min ?? minValue, max ?? maxValue];\n });\n\n const { value, onChange } = useFilter({\n ...props,\n filterBy,\n\n id: 'rangeFilter',\n\n isActive(filterValue) {\n return !!filterValue;\n },\n\n test(filterValue, value) {\n if (!filterValue || (filterValue[0] === null && filterValue[1] === null)) {\n return true;\n }\n\n const min = filterValue[0] ?? Number.NEGATIVE_INFINITY;\n const max = filterValue[1] ?? Number.POSITIVE_INFINITY;\n return value !== null && value >= min && value <= max;\n },\n });\n\n return (\n <div\n css={{\n padding: `calc(var(--spacing) * 2)`,\n display: 'grid',\n gap: '1em',\n }}\n >\n <div\n css={{\n display: 'flex',\n gap: '1em',\n alignItems: 'center',\n\n '& > *': {\n width: '10em',\n },\n }}\n >\n <NumberField\n value={value?.[0]}\n onChange={(newMin) => onChange(normalize(newMin, value?.[1], 'min', { min, max }))}\n startIcon={<span css={{ margin: '0 calc(var(--spacing) * 2)' }}>{rangeMinText}</span>}\n placeholder={String(minValue ?? '')}\n css={{\n alignItems: 'baseline',\n }}\n />\n -\n <NumberField\n value={value?.[1]}\n onChange={(newMax) => onChange(normalize(value?.[0], newMax, 'max', { min, max }))}\n startIcon={<span css={{ margin: '0 calc(var(--spacing) * 2)' }}>{rangeMaxText}</span>}\n placeholder={String(maxValue ?? '')}\n css={{\n alignItems: 'baseline',\n }}\n />\n </div>\n </div>\n );\n}\n\nfunction normalize(\n min: number | null | undefined,\n max: number | null | undefined,\n changed: 'min' | 'max',\n limits: { min?: number; max?: number },\n): [number | null, number | null] | null {\n min ??= null;\n max ??= null;\n\n if (min !== null && max !== null && min > max) {\n if (changed === 'min') {\n max = min;\n } else {\n min = max;\n }\n }\n\n return min !== null || max !== null\n ? [clamp(min, limits.min, limits.max), clamp(max, limits.min, limits.max)]\n : null;\n}\n\nfunction clamp(\n value: number | null,\n min = Number.NEGATIVE_INFINITY,\n max = Number.POSITIVE_INFINITY,\n): number | null {\n return value === null ? null : Math.min(Math.max(value, min), max);\n}\n","import type { ReactNode } from 'react';\nimport { useEffect, useMemo, useState } from 'react';\nimport { useFilter } from '../hooks/useFilter';\nimport { useTheme } from '../hooks/useTheme';\nimport { asString, castArray, flatMap, orderBy, uniq } from '../misc/helpers';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport type { CommonFilterProps, InternalColumn, SerializableValue } from '../types';\nimport { AutoFocusTextField } from './autoFocusTextField';\nimport { FormControlLabel } from './formControlLabel';\nimport type { VirtualListProps } from './virtualList';\nimport { VirtualList } from './virtualList';\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 hideSearchField,\n hideResetButton,\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 /** If enabled, the search field is hidden. */\n hideSearchField?: boolean;\n /** If enabled, the reset button is hidden. */\n hideResetButton?: boolean;\n /** Virtual list props.\n * @default true */\n virtual?: VirtualListProps<unknown>['virtual'];\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 isActive,\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\n | InternalColumn<T, V>\n | undefined;\n if (!column) return [];\n\n return orderBy(\n uniq(\n flatMap(state.items, (item) => castArray(filterBy(column.value(item.value), item.value))),\n ),\n );\n });\n\n const [query, setQuery] = useState('');\n const filtered = options.filter(\n (option) => !query || stringValue(option).toLowerCase().includes(query.toLowerCase()),\n );\n const delayedValue = useMemo(() => value, [isActive]);\n const ordered = filtered\n .filter((option) => delayedValue.has(option))\n .concat(filtered.filter((option) => !delayedValue.has(option)));\n\n const Button = useTheme((t) => t.components.Button);\n\n useEffect(() => {\n setQuery('');\n }, [isActive]);\n\n return (\n <div\n css={{\n padding: 'calc(var(--spacing) * 2)',\n display: 'grid',\n gap: 'var(--spacing)',\n }}\n >\n {!hideSearchField && (\n <AutoFocusTextField\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n endIcon={\n <IconButton onClick={() => setQuery('')}>{!query ? <Search /> : <Clear />}</IconButton>\n }\n css={{ marginBottom: 'var(--spacing)' }}\n />\n )}\n\n {!hideResetButton && (\n <Button\n disabled={value.size === 0}\n onClick={() => onChange(new Set())}\n variant=\"outlined\"\n css={{\n justifyContent: 'center',\n width: '100%',\n marginBottom: 'var(--spacing)',\n color: 'inherit',\n }}\n >\n {deselectAll}\n </Button>\n )}\n\n <VirtualList\n items={ordered}\n css={{\n width: '20em',\n maxHeight: '20em',\n }}\n >\n {(option, index) => (\n <FormControlLabel\n key={index}\n control={\n <Checkbox\n checked={value.has(option)}\n onChange={() => onChange(toggle(value, option, singleSelect))}\n />\n }\n label={render(option)}\n ></FormControlLabel>\n )}\n </VirtualList>\n\n {ordered.length === 0 && <span css={{ textAlign: 'center' }}>{noResults}</span>}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nexport function FormControlLabel({\n control,\n label,\n disabled,\n}: {\n control: ReactNode;\n label: ReactNode;\n disabled?: boolean;\n}) {\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 type { HTMLProps, ReactNode } from 'react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { throttle } from '../misc/throttle';\n\nexport interface VirtualListProps<T> extends Omit<HTMLProps<HTMLDivElement>, 'children'> {\n virtual?:\n | boolean\n | {\n rowHeight?: number;\n initalRowHeight?: number;\n throttleScroll?: number;\n overscan?: number;\n overscanBottom?: number;\n overscanTop?: number;\n };\n items: T[];\n children: (item: T, index: number) => ReactNode;\n}\n\nexport function VirtualList<T>({\n virtual = true,\n items,\n children,\n ...props\n}: VirtualListProps<T>): JSX.Element {\n const container = useRef<HTMLDivElement>(null);\n const [, setId] = useState({});\n\n const throttleScroll = (typeof virtual === 'boolean' ? undefined : virtual)?.throttleScroll ?? 16;\n const update = useMemo(() => throttle(() => setId({}), throttleScroll), [throttleScroll]);\n\n useEffect(() => {\n if (!virtual) return;\n\n const ro = new ResizeObserver(update);\n\n if (container.current) {\n ro.observe(container.current);\n }\n\n window.addEventListener('resize', update, true);\n return () => {\n ro.disconnect();\n window.removeEventListener('resize', update, true);\n update.cancel();\n };\n }, [update, virtual, throttleScroll]);\n\n if (!virtual) {\n return (\n <div\n {...props}\n css={{\n overflowY: 'auto',\n display: 'grid',\n }}\n >\n {items.map((item, index) => children(item, index))}\n </div>\n );\n }\n\n const {\n rowHeight,\n initalRowHeight = 38,\n overscan = 100,\n overscanTop,\n overscanBottom,\n } = (virtual instanceof Object ? virtual : undefined) ?? {};\n\n const itemHeight = rowHeight ?? (averageItemHeight(container.current) || initalRowHeight);\n const from = container.current?.clientHeight\n ? Math.max(\n 0,\n Math.floor((container.current.scrollTop - (overscanTop ?? overscan)) / itemHeight),\n )\n : 0;\n const to = container.current?.clientHeight\n ? Math.min(\n items.length,\n Math.ceil(\n (container.current.scrollTop +\n container.current.clientHeight +\n (overscanBottom ?? overscan)) /\n itemHeight,\n ),\n )\n : 1;\n const before = from * itemHeight;\n const after = (items.length - to) * itemHeight;\n\n return (\n <div\n {...props}\n onScroll={(event) => {\n update();\n props.onScroll?.(event);\n }}\n ref={container}\n css={{\n overflowY: 'auto',\n display: 'grid',\n }}\n >\n <div data-virtual-before style={{ height: before }} />\n {items.slice(from, to).map((item, index) => children(item, index + from))}\n <div data-virtual-after style={{ height: after }} />\n </div>\n );\n}\n\nfunction averageItemHeight(container: HTMLDivElement | null) {\n if (!container?.children.length) {\n return undefined;\n }\n\n const heights = Array.from(container.children)\n .slice(1, -1)\n .map((child) => child.clientHeight);\n return heights.reduce((a, b) => a + b, 0) / heights.length;\n}\n","export function throttle<Args extends any[]>(\n function_: (...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 function_(...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 { memo, useEffect, useLayoutEffect, useState } from 'react';\nimport { TableMemoContextProvider } from '../hooks/useTableMemo';\nimport { useTheme } from '../hooks/useTheme';\nimport { useTableStateStorage } from '../internalState/tableStateStorage';\nimport { useTableState } from '../internalState/useTableState';\nimport {\n ColumnContext,\n TableContext,\n TableResetContext,\n useTableContext,\n} from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport type { 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 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((state) => state.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 styles: column.styles,\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((state) => state.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 styles = useTheme((theme) => theme.styles);\n const stickyHeader = table.useState((state) => state.props.stickyHeader);\n const stickyFooter = table.useState((state) => state.props.stickyFooter);\n\n const enableSelection = table.useState((state) => state.props.enableSelection);\n const enableColumnSelection = table.useState((state) => state.props.enableColumnSelection);\n const enableExport = table.useState((state) => !!state.props.enableExport);\n const cssVariables = useCssVariables();\n\n const enableClearFiltersButton = table.useState((state) => state.props.enableClearFiltersButton);\n\n useLayoutEffect(() => table.getState().props.debugRender?.('render table inner'));\n\n return (\n <Virtualized\n className={classes?.table}\n css={[cssVariables, defaultClasses.table, styles?.table, hidden && { visibility: 'hidden' }]}\n style={{\n gridTemplateColumns: [\n //\n fullWidth === 'right' || fullWidth === true ? 'auto' : '0',\n 'max-content',\n ...activeColumns.map(\n (column) => columnWidths.get(column.id) ?? column.width ?? 'max-content',\n ),\n fullWidth === 'left' || fullWidth === true ? 'auto' : '0',\n ].join(' '),\n }}\n header={\n <>\n <div\n className={classes?.headerCell}\n css={[\n defaultClasses.headerFill,\n stickyHeader && defaultClasses.sticky,\n stickyHeader instanceof Object && stickyHeader,\n styles?.headerCell,\n ]}\n />\n\n <div\n className={classes?.headerCell}\n css={[\n defaultClasses.headerCell,\n stickyHeader && defaultClasses.sticky,\n stickyHeader instanceof Object && stickyHeader,\n styles?.headerCell,\n ]}\n >\n {enableSelection && <SelectComponent />}\n\n {enableColumnSelection && <ColumnSelection />}\n\n {enableExport && <Export />}\n\n {(enableSelection || enableColumnSelection || enableExport) && (\n <>\n <div css={{ flex: 1 }} />\n <ResizeHandleView />\n </>\n )}\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={[\n defaultClasses.headerFill,\n stickyHeader && defaultClasses.sticky,\n stickyHeader instanceof Object && stickyHeader,\n styles?.headerCell,\n ]}\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 styles?.footerCell,\n ]}\n />\n <div\n className={classes?.footerCell}\n css={[\n defaultClasses.footerFill,\n stickyFooter && defaultClasses.stickyBottom,\n stickyFooter instanceof Object && stickyFooter,\n styles?.footerCell,\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 styles?.footerCell,\n ]}\n />\n </>\n )}\n </>\n }\n >\n {(itemIds, startIndex) =>\n itemIds.map((itemId, index) => (\n <Row key={itemId} itemId={itemId} rowIndex={startIndex + index} />\n ))\n }\n </Virtualized>\n );\n});\n","import { useEffect, useState } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport type { Draft } from 'immer';\nimport { Queue } from '../misc/queue';\nimport type { InternalTableState, SerializableValue } from '../types';\n\nconst KEYS = [\n 'sort',\n 'selection',\n 'expanded',\n 'hiddenColumns',\n 'filterValues',\n 'columnWidths',\n 'columnOrder',\n] 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 (Array.isArray(value)) {\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 // eslint-disable-next-line no-inner-declarations\n function applyUpdate(state: Draft<InternalTableState<any>>, key: (typeof KEYS)[number]) {\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 const filter = state.filters.get(id);\n\n if (filter && (filter.persist ?? filter.value === undefined)) {\n state.filterValues.set(id, value);\n state.filters.get(id)?.onChange?.(value);\n }\n }\n } else {\n if (\n key === 'expanded' ||\n key === 'hiddenColumns' ||\n key === 'selection' ||\n key === 'sort'\n ) {\n if (state.props[key] !== undefined) {\n return;\n }\n\n state.props[\n `on${\n (key.slice(0, 1).toUpperCase() + key.slice(1)) as Capitalize<typeof key>\n }Change`\n ]?.(data[key]);\n }\n\n state[key] = data[key];\n }\n }\n }\n\n table.update((state) => {\n for (const key of KEYS.filter((key) => key !== 'filterValues')) {\n applyUpdate(state, key);\n }\n });\n\n // First apply other keys and wait until changes take effect. Filters cannot be applied to hidden columns.\n await new Promise((resolve) => {\n setTimeout(resolve);\n });\n table.update((state) => applyUpdate(state, 'filterValues'));\n } catch (error) {\n console.error('Failed to load table state:', error);\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' ||\n key === 'hiddenColumns' ||\n key === 'selection' ||\n 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","export class Queue {\n private q = new Array<{\n job: () => Promise<any>;\n resolve: (value: any) => void;\n reject: (reason?: any) => void;\n }>();\n\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 (error) {\n next.reject(error);\n }\n }\n\n this.isRunning = false;\n }\n}\n","import { castDraft } from 'immer';\nimport { useEffect, useMemo, useState } from 'react';\nimport { Store } from 'schummar-state/react';\nimport type { 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>(\n _props: TableProps<T>,\n): [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?.('table');\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 { castDraft } from 'immer';\nimport { useEffect } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport { castArray, flatMap, orderBy } from '../misc/helpers';\nimport type { 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 (\n [\n items = [],\n id,\n parentId,\n revealFiltered,\n externalSort,\n sort,\n filters,\n filterValues,\n activeColumns,\n ],\n draft,\n ) => {\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 =\n item.parentId !== undefined && item.parentId !== null\n ? lookup.get(item.parentId)\n : 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 || item.parentId === null));\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 && item.parentId !== null) {\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 && item.parentId !== null) {\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 type { 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', [\n (item: T) => item[props.parentId as keyof T] as unknown as Id | undefined,\n props.parentId,\n ]);\n } else {\n parentId = noopParentId;\n }\n\n const columnProps = props.columnProps && cache('columnProps', props.columnProps);\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 globalDefaults = props.defaultColumnProps;\n const mapColumn = <V>(\n {\n id: _id,\n header,\n exportHeader,\n footer,\n value,\n renderCell,\n exportCell,\n sortBy,\n disableSort,\n hidden,\n classes,\n styles,\n filter,\n 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 const defaults = { ...globalDefaults, ...columnProps?.(id) };\n\n return {\n id,\n header: header ?? defaults?.header ?? null,\n exportHeader: exportHeader ?? defaults?.exportHeader ?? id,\n footer: footer ?? defaults?.footer ?? null,\n value: cache(`columns.${cacheKey}.value`, value),\n renderCell: cache(\n `columns.${cacheKey}.renderCell`,\n renderCell ?? defaults?.renderCell ?? asString,\n ),\n exportCell:\n exportCell ??\n defaults?.exportCell ??\n ((x) => (x instanceof Date || typeof x === 'number' ? x : String(x))),\n sortBy: (\n sortBy ??\n defaults?.sortBy ?? [\n (v) =>\n typeof v === 'number' || v instanceof Date\n ? v\n : v === null || v === undefined\n ? ''\n : String(v),\n ]\n ).map((function_, i) => cache(`columns.${cacheKey}.sortBy.${i}`, function_)),\n disableSort,\n hidden: hidden ?? defaults?.hidden,\n classes: classes ?? defaults?.classes,\n styles: styles ?? defaults?.styles,\n filter: filter ?? defaults?.filter,\n width: width ?? defaults?.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)\n ? cache('rowAction', props.rowAction)\n : props.rowAction;\n\n const rowDetails =\n props.rowDetails instanceof Function || Array.isArray(props.rowDetails)\n ? cache('rowDetails', props.rowDetails)\n : props.rowDetails;\n\n return {\n ...props,\n id,\n parentId,\n columns,\n columnProps,\n wrapCell,\n rowAction,\n rowDetails,\n enableSelection: props.enableSelection ?? true,\n selectSyncChildren: props.selectSyncChildren ?? true,\n stickyHeader: props.stickyHeader ?? true,\n stickyFooter: props.stickyFooter ?? true,\n enableExport: props.enableExport ?? false,\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 type { Store } from 'schummar-state/react';\nimport { intersect } from '../misc/helpers';\nimport type { InternalTableState } from '../types';\n\nexport function cleanupState<T>(state: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n state.addReaction(\n (state) =>\n [\n state.props.columns,\n state.itemsById,\n state.activeItemsById,\n state.activeColumns,\n ] 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 type { Store } from 'schummar-state/react';\nimport { orderBy } from '../misc/helpers';\nimport type { 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) => !(column.hidden ?? 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 type { Store } from 'schummar-state/react';\nimport { getAncestors, orderBy } from '../misc/helpers';\nimport type { 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 (\n [...expanded].some(\n (id) => id !== withMostAncestors?.id && !withMostAncestors?.ancestors.has(id),\n )\n ) {\n expanded = withMostAncestors?.ancestors ?? new Set();\n state.expanded = expanded;\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 type { Store } from 'schummar-state/react';\nimport type { 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 (\n item.parentId !== undefined &&\n item.parentId !== null &&\n newSelection.has(item.parentId)\n ) {\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 { useTheme } from '../hooks/useTheme';\nimport { useTableContext } from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\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 table.getState().props.onReset?.('filters');\n });\n }}\n >\n {textClearFilters}\n </Button>\n </div>\n );\n}\n","import { useTheme } from '../hooks/useTheme';\nimport { cx } from '../misc/helpers';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\n\nexport function ColumnFooter() {\n const table = useTableContext();\n const columnId = useColumnContext();\n const stickyFooter = table.useState((state) => state.props.stickyFooter);\n const columnStyleOverride = table.useState((state) => state.columnStyleOverride.get(columnId), {\n throttle: 16,\n });\n const columnClasses = table.useState(\n (state) => state.activeColumns.find((column) => column.id === columnId)?.classes?.footerCell,\n );\n const classes = useTheme((theme) => theme.classes?.footerCell);\n const columnCss = table.useState(\n (state) => state.activeColumns.find((column) => column.id === columnId)?.styles?.footerCell,\n );\n const styles = useTheme((theme) => theme.styles?.footerCell);\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, columnClasses)}\n css={[\n defaultClasses.footerCell,\n stickyFooter && defaultClasses.stickyBottom,\n stickyFooter instanceof Object && stickyFooter,\n styles,\n columnCss,\n ]}\n style={columnStyleOverride}\n >\n {content}\n </div>\n );\n}\n","import { castDraft } from 'immer';\nimport type React from 'react';\nimport { useEffect, useRef } from 'react';\nimport { StoreScope } from 'schummar-state/react';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport { useTheme } from '../hooks/useTheme';\nimport { cx } from '../misc/helpers';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport type { Id } from '../types';\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((state) => state.props.enableColumnReorder);\n const columnStyleOverride = table.useState((state) => state.columnStyleOverride.get(columnId), {\n throttle: 16,\n });\n const stickyHeader = table.useState((state) => state.props.stickyHeader);\n const classes = useTheme((theme) => theme.classes?.headerCell);\n const styles = useTheme((theme) => theme.styles?.headerCell);\n\n const { header, columnClasses, columnStyles } = table.useState((state) => {\n const column = state.activeColumns.find((column) => column.id === columnId);\n return {\n header: column?.header,\n columnClasses: column?.classes?.headerCell,\n columnStyles: column?.styles?.headerCell,\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 }, [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\n .getState()\n .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(event: React.PointerEvent) {\n const div = ref.current;\n if (!div) return;\n draggingStart.current = { mouseX: event.clientX, bounds: div.getBoundingClientRect() };\n }\n\n // When mouse moves while clicked: Calculate transforms\n function onPointerMove(event: React.PointerEvent) {\n table.update((state) => {\n const div = ref.current;\n if (\n !div ||\n draggingStart.current === undefined ||\n Math.abs(event.clientX - draggingStart.current.mouseX) < 5\n )\n return;\n\n event.stopPropagation();\n div.setPointerCapture(event.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:\n '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 = `${\n draggingStart.current.bounds.left + event.clientX - draggingStart.current.mouseX\n }px`;\n\n // Calculate target index\n const index = state.columnOrder.indexOf(columnId);\n const targetIndex = calcTargetIndex(\n div.offsetLeft + event.clientX - draggingStart.current.mouseX,\n );\n\n // Apply transforms to each column\n const columns = table.getState().columnOrder.map((id, index) => ({\n id,\n index,\n width: store.getState().items.get(id)?.offsetWidth ?? 0,\n }));\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\n .slice(index + 1, targetIndex + 1)\n .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(event: 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(\n div.offsetLeft + event.clientX - draggingStart.current.mouseX,\n );\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, columnClasses)}\n css={[\n defaultClasses.headerCell,\n {\n position: 'relative',\n userSelect: 'none',\n },\n stickyHeader && defaultClasses.sticky,\n stickyHeader instanceof Object && stickyHeader,\n styles,\n columnStyles,\n ]}\n style={columnStyleOverride}\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 type React from 'react';\nimport type { HTMLProps } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\n\nexport function ResizeHandle() {\n const table = useTableContext();\n const columnId = useColumnContext();\n const enabled = table.useState((state) => state.props.enableColumnResize);\n\n function onPointerDown(event: React.PointerEvent) {\n event.stopPropagation();\n\n const div = event.target as HTMLDivElement;\n div.setPointerCapture(event.pointerId);\n }\n\n function onPointerMove(event: React.PointerEvent) {\n event.stopPropagation();\n\n const div = event.target as HTMLDivElement;\n if (!div.hasPointerCapture(event.pointerId)) return;\n\n const parent = div.parentElement as HTMLDivElement;\n const width = Math.max(event.clientX - parent.getBoundingClientRect().left + 5, 50);\n\n table.update((state) => {\n state.columnWidths.set(columnId, `${width}px`);\n });\n }\n\n function onPointerUp(event: React.PointerEvent) {\n event.stopPropagation();\n\n const div = event.target as HTMLDivElement;\n div.releasePointerCapture(event.pointerId);\n }\n\n function onDoubleClick(event: React.MouseEvent) {\n table.update((state) => {\n if (event.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({\n enabled,\n ...props\n}: HTMLProps<HTMLDivElement> & { enabled?: boolean }) {\n const className = useTheme((theme) => theme.classes?.columnDivider);\n const styles = useTheme((theme) => theme.styles?.columnDivider);\n\n return (\n <div\n className={className}\n css={[\n {\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 styles,\n ]}\n {...props}\n />\n );\n}\n","import type { ReactNode } from 'react';\nimport type React from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\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(event: 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 =\n event.getModifierState('Control') || off\n ? table.getState().sort.filter((s) => s.columnId !== columnId)\n : [];\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 event.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={(event) => toggle(event)}\n onContextMenu={(event) => toggle(event, 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 { useContext, useState } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { TableResetContext, useTableContext } from '../misc/tableContext';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport type { InternalColumn } from '../types';\nimport { FormControlLabel } from './formControlLabel';\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 showAll = useTheme((t) => t.text.showAllColumns);\n const hideAll = useTheme((t) => t.text.hideAllColumns);\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((state) => state.props.columns);\n const hiddenColumns = table.useState((state) => state.hiddenColumns);\n\n const [anchorElement, setAnchorElement] = useState<Element | null>(null);\n\n const toggle = (column?: InternalColumn<T, unknown>, state?: boolean) => {\n const {\n props: { hiddenColumns: controlledHiddenColumns, onHiddenColumnsChange },\n } = table.getState();\n\n const newValue = new Set(hiddenColumns);\n\n for (const columnId of column ? [column.id] : columns.map((column) => column.id)) {\n if (state ?? hiddenColumns.has(columnId)) {\n newValue.delete(columnId);\n } else {\n newValue.add(columnId);\n }\n }\n\n if (!controlledHiddenColumns) {\n table.update((state) => {\n state.hiddenColumns = newValue;\n });\n }\n\n onHiddenColumnsChange?.(newValue);\n };\n\n const allVisible = columns.every((column) => !hiddenColumns.has(column.id));\n\n return (\n <>\n <IconButton onClick={(event) => setAnchorElement(anchorElement ? null : event.currentTarget)}>\n <Settings />\n </IconButton>\n\n <Popover\n anchorEl={anchorElement}\n open={!!anchorElement}\n onClose={() => setAnchorElement(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 <div css={{ margin: '0.5em 0', display: 'flex', gap: '0.5em' }}>\n <Button variant=\"outlined\" onClick={() => toggle(undefined, !allVisible)}>\n {allVisible ? hideAll : showAll}\n </Button>\n\n <Button variant=\"outlined\" onClick={reset}>\n {resetAll}\n </Button>\n </div>\n\n {columns.map((column) => (\n <FormControlLabel\n key={column.id}\n control={\n <Checkbox\n checked={!(column.hidden ?? hiddenColumns.has(column.id))}\n onChange={() => toggle(column)}\n disabled={column.hidden !== undefined}\n />\n }\n label={column.header}\n ></FormControlLabel>\n ))}\n </div>\n </Popover>\n </>\n );\n}\n","import { useContext, useState } from 'react';\nimport { ExportOptions, ExporterEntry } from '../exporters/exporter';\nimport { useTheme } from '../hooks/useTheme';\nimport { useTableContext } from '../misc/tableContext';\nimport { TableSettingsContext } from '../misc/tableSettings';\nimport { useCssVariables } from '../theme/useCssVariables';\n\nexport function Export<T>(): JSX.Element {\n const { exporters: contextExporters } = useContext(TableSettingsContext);\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 ExportIcon = 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 { all, exporters } = table.useState((state): ExportOptions => {\n if (typeof state.props.enableExport === 'boolean') {\n return {\n all: false,\n exporters: contextExporters,\n };\n }\n\n return state.props.enableExport;\n });\n\n const [anchor, setAnchor] = useState<Element | null>(null);\n\n function execute({ action, exporter }: ExporterEntry) {\n const { activeColumns, activeItems, items } = table.getState();\n const columns = activeColumns.map((column) => column.exportHeader);\n const rows = (all ? items : activeItems).map((item) =>\n activeColumns.map((column) => column.exportCell(column.value(item.value), item.value)),\n );\n\n if (action === 'copy') {\n const data = exporter.exportToString(columns, rows);\n navigator.clipboard.writeText(data);\n } else {\n const blob = exporter.exportToBlob(columns, rows);\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = `export.${exporter.fileEnding}`;\n document.body.append(a);\n a.click();\n a.remove();\n URL.revokeObjectURL(url);\n }\n }\n\n return (\n <>\n <IconButton onClick={(event) => setAnchor(anchor ? null : event.currentTarget)}>\n <ExportIcon 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\n {exporters.map((entry, index) => (\n <Button\n key={index}\n startIcon={entry.action === 'copy' ? <Clipboard /> : <ExportIcon />}\n onClick={() => execute(entry)}\n >\n {entry.action === 'copy' ? exportCopy : exportDownload} (.{entry.exporter.type})\n </Button>\n ))}\n </div>\n </Popover>\n </>\n );\n}\n","import { memo, useEffect, useLayoutEffect, useRef } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { calcClassNames, calcCss } from '../misc/calcClassNames';\nimport { cx, getAncestors } from '../misc/helpers';\nimport { ColumnContext, useTableContext } from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport type { Id } from '../types';\nimport { Cell } from './cell';\nimport { Details } from './details';\nimport { ExpandControl } from './expandControl';\nimport { SelectComponent } from './selectComponent';\n\nexport const Row = memo(function Row<T>({\n itemId,\n rowIndex,\n}: {\n itemId: Id;\n rowIndex: number;\n}): JSX.Element | null {\n const table = useTableContext<T>();\n const divRef = useRef<HTMLDivElement>(null);\n const detailsDivRef = useRef<HTMLDivElement>(null);\n\n const classes = useTheme((t) => t.classes);\n const styles = useTheme((t) => t.styles);\n\n const {\n className,\n css_,\n indent,\n hasChildren,\n hasDeferredChildren,\n columnIds,\n enableSelection,\n rowAction,\n hasDetails,\n } = table.useState((state) => {\n const item = state.activeItemsById.get(itemId);\n\n return {\n className: cx(...calcClassNames(classes, item?.value, rowIndex)),\n css_: calcCss<T>(styles, item?.value, 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\n ? item\n ? state.props.rowAction(item.value, rowIndex)\n : null\n : state.props.rowAction,\n hasDetails:\n state.props.rowDetails instanceof Function\n ? item\n ? !!state.props.rowDetails(item.value, rowIndex)\n : null\n : !!state.props.rowDetails,\n };\n });\n\n useLayoutEffect(() => {\n function update() {\n table.update((state) => {\n if (!divRef.current) {\n return;\n }\n\n const h1 = divRef.current.offsetHeight;\n const h2 =\n detailsDivRef.current && document.contains(detailsDivRef.current)\n ? detailsDivRef.current.offsetHeight\n : 0;\n\n state.rowHeights.set(itemId, h1 + h2);\n });\n }\n\n update();\n\n const handles = [divRef.current, detailsDivRef.current]\n .filter((x): x is HTMLDivElement => !!x)\n .map((div) => {\n const o = new ResizeObserver(update);\n o.observe(div);\n return () => o.disconnect();\n });\n\n return () => {\n handles.forEach((h) => h());\n };\n }, [table, itemId, divRef.current, detailsDivRef.current]);\n\n useLayoutEffect(() => table.getState().props.debugRender?.('render row', itemId));\n\n return (\n <div css={{ display: 'contents' }}>\n <div className={className} css={[defaultClasses.cellFill, css_]} ref={divRef} />\n\n <div className={className} css={[defaultClasses.cell, defaultClasses.firstCell, css_]}>\n {indent > 0 && <div css={{ width: indent * 20 }} />}\n\n {enableSelection && <SelectComponent itemId={itemId} />}\n\n {(hasChildren || hasDeferredChildren || hasDetails) && (\n <ExpandControl itemId={itemId} hasDeferredChildren={hasDeferredChildren} />\n )}\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, css_]} />\n\n <Details ref={detailsDivRef} itemId={itemId} rowIndex={rowIndex} />\n </div>\n );\n});\n","import type { MemoizedTableTheme } from '../types';\n\nexport function calcClassNames<T>(\n classes: MemoizedTableTheme<T>['classes'] | undefined,\n item: T,\n index: number,\n) {\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 function calcCss<T>(\n styles: MemoizedTableTheme<T>['styles'] | undefined,\n item: T | undefined,\n index: number,\n) {\n return [\n styles?.cell instanceof Function\n ? item !== undefined\n ? styles.cell(item, index)\n : undefined\n : styles?.cell,\n index % 2 === 0 && styles?.evenCell,\n index % 2 === 1 && styles?.oddCell,\n ];\n}\n","import type { ReactNode } from 'react';\nimport { memo, useLayoutEffect } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { calcClassNames, calcCss } from '../misc/calcClassNames';\nimport { cx } from '../misc/helpers';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport type { Id } from '../types';\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), {\n throttle: 16,\n });\n\n useLayoutEffect(() => table.getState().props.debugRender?.('render cell', itemId, columnId));\n const className = useTheme((t) => cx(...calcClassNames(t.classes, item?.value, rowIndex)));\n const styles = useTheme((t) => calcCss<T>(t.styles, item?.value, 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, styles]} style={columnStyleOverride}>\n {wrapCell(content, column.value(item.value), item.value, rowIndex)}\n </div>\n );\n});\n","import { forwardRef } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useTableContext } from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { Id } from '../types';\n\nexport const Details = forwardRef<\n HTMLDivElement,\n {\n itemId: Id;\n rowIndex: number;\n }\n>(function Details({ itemId, rowIndex }, ref) {\n const table = useTableContext<unknown>();\n const classes = useTheme((t) => t.classes);\n const styles = useTheme((t) => t.styles);\n\n const { details, className, css } = table.useState((state) => {\n const item = state.activeItemsById.get(itemId);\n\n return {\n details: state.expanded.has(itemId)\n ? state.props.rowDetails instanceof Function\n ? item\n ? state.props.rowDetails(item.value, rowIndex)\n : null\n : state.props.rowDetails\n : undefined,\n className:\n classes?.details instanceof Function\n ? classes.details(item?.value, rowIndex)\n : classes?.details,\n css:\n styles?.details instanceof Function\n ? styles.details(item?.value, rowIndex)\n : styles?.details,\n };\n });\n\n return details ? (\n <div ref={ref} className={className} css={[defaultClasses.details, css]}>\n {details}\n </div>\n ) : null;\n});\n","import { useTheme } from '../hooks/useTheme';\nimport { getAncestors, getDescendants } from '../misc/helpers';\nimport { useTableContext } from '../misc/tableContext';\nimport type { Id } from '../types';\n\nexport function ExpandControl<T>({\n itemId,\n hasDeferredChildren,\n}: {\n itemId: Id;\n hasDeferredChildren?: boolean;\n}): 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(\n (state) => !!state.activeItemsById.get(itemId)?.children.length,\n );\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\n const item = activeItemsById.get(itemId);\n for (const descendant of item ? getDescendants(item) : []) {\n newExpanded.delete(descendant);\n }\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 type React from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { getAncestors, getDescendants } from '../misc/helpers';\nimport { useTableContext } from '../misc/tableContext';\nimport type { Id } from '../types';\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(event: React.ChangeEvent) {\n const mouseEvent = event.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 type { HTMLProps, ReactNode } from 'react';\nimport { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { useTableContext } from '../misc/tableContext';\nimport { throttle } from '../misc/throttle';\nimport type { Id } from '../types';\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')\n 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((state) => state.props.virtual);\n const probeRef = useRef<HTMLDivElement>(null);\n const [, setId] = useState({});\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 =\n rowHeight ??\n state.rowHeights.get(itemId) ??\n initalRowHeight ??\n (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 let to = itemIds.length;\n let before = 0;\n let 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 update = useMemo(() => throttle(() => setId({}), throttleScroll), [throttleScroll]);\n\n useEffect(() => {\n if (!virtual || !probeRef.current) return;\n\n window.addEventListener('scroll', update, true);\n window.addEventListener('resize', update, true);\n return () => {\n window.removeEventListener('scroll', update, true);\n window.removeEventListener('resize', update, true);\n };\n }, [update, virtual]);\n\n useEffect(() => update.cancel, [update]);\n\n useLayoutEffect(() =>\n table.getState().props.debugRender?.(`Virtualalized render ${from} to ${to}`),\n );\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","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 type { 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={(event) => onChange(event.target.value)}\n endIcon={\n <IconButton onClick={() => onChange('')}>{!value ? <Search /> : <Clear />}</IconButton>\n }\n placeholder={placeholder}\n />\n </div>\n );\n}\n"],"mappings":"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","names":["import_react","import_react","length","v","p","throttle","eq","throttleFn","e","require$$0","h","n","p","r","u","t","q","shimModule","require$$1","withSelectorModule","useSyncExternalStoreWithSelector","eq","BaseStore","Store","React","__spreadValues","import_react","import_react","className","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","className","import_jsx_runtime","import_react","import_react","import_jsx_runtime","className","import_react","import_jsx_runtime","className","_a","import_react","import_jsx_runtime","css","Store","import_react","import_jsx_runtime","import_react","import_jsx_runtime","Store","memo","t","_a","_b","column","theme","import_react","flatMap","t","_a","_b","n","className","import_jsx_runtime","IconButton","t","Popover","FilterList","ArrowDropDown","filter","import_jsx_runtime","TextField","t","import_immer","import_react","value","onChange","import_react","import_react","import_jsx_runtime","value","import_jsx_runtime","t","import_jsx_runtime","value","Button","t","IconButton","ChevronRight","today","_a","min","max","import_jsx_runtime","value","import_react","import_jsx_runtime","asNumber","t","TextField","import_jsx_runtime","t","minValue","maxValue","value","_a","_b","min","max","import_react","import_jsx_runtime","import_react","throttle","import_jsx_runtime","_a","_b","throttle","import_jsx_runtime","IconButton","t","Checkbox","Search","Clear","value","column","Button","import_react","import_react","value","k","v","q","applyUpdate","_a","_b","id","key","import_immer","import_react","import_immer","import_react","state","sort","column","items","value","id","import_react","_a","_b","_c","_d","_e","_f","id","defaults","v","import_react","state","import_react","state","import_react","import_react","Store","state","import_jsx_runtime","Button","t","import_jsx_runtime","column","import_immer","import_react","import_jsx_runtime","className","_a","import_jsx_runtime","Badge","t","ArrowUpward","index","column","toggle","import_jsx_runtime","column","_a","_b","e","index","import_react","import_jsx_runtime","IconButton","t","Popover","Checkbox","Button","Settings","toggle","column","state","import_react","import_jsx_runtime","Export","Button","t","IconButton","Popover","Clipboard","import_react","import_react","import_jsx_runtime","Cell","column","_a","className","t","import_react","import_jsx_runtime","Details","t","className","css","import_jsx_runtime","IconButton","t","Spinner","ChevronRight","toggle","import_jsx_runtime","Checkbox","t","itemId","toggle","import_jsx_runtime","Row","t","className","h","import_react","import_jsx_runtime","_a","_b","itemIds","h","from","to","before","after","throttle","import_jsx_runtime","t","TableInner","Export","import_jsx_runtime","IconButton","t","Search","Clear","value"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/components/autoFocusTextField.tsx","../src/hooks/useTheme.ts","../node_modules/schummar-state/src/persist/persistPathHelpers.ts","../node_modules/schummar-state/src/persist/storePersist.ts","../node_modules/schummar-state/src/helpers/hash.ts","../node_modules/schummar-state/node_modules/fast-deep-equal/es6/react.js","../node_modules/schummar-state/src/helpers/stringSelector.ts","../node_modules/schummar-state/src/helpers/throttle.ts","../node_modules/schummar-state/src/store.ts","../node_modules/schummar-state/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js","../node_modules/schummar-state/node_modules/use-sync-external-store/shim/index.js","../node_modules/schummar-state/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js","../node_modules/schummar-state/node_modules/use-sync-external-store/shim/with-selector.js","../node_modules/schummar-state/src/react/useStoreState.ts","../node_modules/schummar-state/src/react/useStoreProp.ts","../node_modules/schummar-state/src/react/store.ts","../node_modules/schummar-state/src/react/storeScope.tsx","../node_modules/schummar-state/src/react/useResource.ts","../src/misc/tableContext.ts","../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/popover.tsx","../src/theme/defaultTheme/defaultClasses.ts","../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/theme/tableTheme.tsx","../src/hooks/useTableMemo.tsx","../src/misc/tableSettings.tsx","../src/exporters/csvExporter.ts","../src/components/filterControl.tsx","../src/misc/helpers.ts","../src/theme/useCssVariables.ts","../src/hooks/useFilter.ts","../src/misc/debounce.ts","../src/components/datePicker.tsx","../src/misc/defaults.ts","../src/components/dateInput.tsx","../src/components/text.tsx","../src/components/dateFilter.tsx","../src/components/numberField.tsx","../src/components/rangeFilter.tsx","../src/components/selectFilter.tsx","../src/components/formControlLabel.tsx","../src/components/virtualList.tsx","../src/misc/throttle.ts","../src/components/table.tsx","../src/internalState/tableStateStorage.ts","../src/misc/queue.ts","../src/internalState/useTableState.ts","../src/internalState/calcItems.ts","../src/internalState/calcProps.ts","../src/exporters/serializer.ts","../src/internalState/cleanupState.ts","../src/internalState/filterColumns.ts","../src/internalState/normalizeExpanded.ts","../src/internalState/syncSelections.ts","../src/components/clearFiltersButton.tsx","../src/components/columnFooter.tsx","../src/components/columnHeader.tsx","../src/components/resizeHandle.tsx","../src/components/sortComponent.tsx","../src/components/columnSelection.tsx","../src/components/export.tsx","../src/components/row.tsx","../src/misc/calcClassNames.ts","../src/components/cell.tsx","../src/components/details.tsx","../src/components/expandControl.tsx","../src/components/selectComponent.tsx","../src/components/virtualized.tsx","../src/misc/textMatch.ts","../src/components/textFilter.tsx"],"sourcesContent":["export { AutoFocusTextField } from './components/autoFocusTextField';\nexport { DateFilter } from './components/dateFilter';\nexport {\n DatePicker,\n DatePickerProvider,\n commonQuickOptions,\n dateClamp,\n dateIntersect,\n endOfDay,\n getCalendarWeek,\n lastDays,\n startOfDay,\n thisMonth,\n thisWeek,\n thisYear,\n today,\n} from './components/datePicker';\nexport type { DatePickerProps, DatePickerQuickOption, DateRange } from './components/datePicker';\nexport { RangeFilter } from './components/rangeFilter';\nexport { SelectFilter } from './components/selectFilter';\nexport { Table } from './components/table';\nexport { TextFilter } from './components/textFilter';\nexport { useFilter } from './hooks/useFilter';\nexport { useTheme } from './hooks/useTheme';\nexport type { TableStateStorage } from './internalState/tableStateStorage';\nexport * as helpers from './misc/helpers';\nexport {\n ColumnContext,\n TableContext,\n TableResetContext,\n useColumnContext,\n useTableContext,\n} from './misc/tableContext';\nexport { TableSettingsContext, TableSettingsProvider } from './misc/tableSettings';\nexport { termMatch, textMatch } from './misc/textMatch';\nexport { configureTableTheme, mergeThemes } from './theme/tableTheme';\nexport type {\n Column,\n CommonFilterProps,\n FilterImplementation,\n FunctionWithDeps,\n Id,\n InternalColumn,\n PartialTableTheme,\n Sort,\n SortDirection,\n TableProps,\n} from './types';\n\n","import type { ComponentType } from 'react';\nimport { useContext, useLayoutEffect, useRef } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport type { 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 (\n <TextField\n {...props}\n inputRef={ref}\n css={{\n input: {\n backgroundColor: 'inherit',\n color: 'inherit',\n },\n }}\n />\n );\n}\n","import { useContext } from 'react';\nimport { Store } from 'schummar-state/react';\nimport { ColumnContext, TableContext } from '../misc/tableContext';\nimport { defaultTableTheme } from '../theme/defaultTheme';\nimport { globalTableTheme, mergeThemes } from '../theme/tableTheme';\nimport type { MemoizedTableTheme, TableTheme } from '../types';\nimport { useTableMemo } from './useTableMemo';\nimport { TableSettingsContext } from '../misc/tableSettings';\n\nconst emptyStore = new Store(undefined);\n\nexport function useTheme<T, S>(selector: (theme: MemoizedTableTheme<T>) => S): S {\n const { theme: contextTableTheme = {} } = useContext(TableSettingsContext);\n const table = useContext(TableContext);\n const columnId = useContext(ColumnContext);\n const memo = useTableMemo();\n const _globalTableTheme = globalTableTheme.useState();\n\n const process = (t: TableTheme<T>): MemoizedTableTheme<T> => {\n const cellClass = t.classes?.cell;\n const cellStyles = t.styles?.cell;\n const detailsClass = t.classes?.details;\n const detailsStyles = t.styles?.details;\n\n return {\n ...t,\n classes: {\n ...t.classes,\n cell:\n cellClass instanceof Function || Array.isArray(cellClass)\n ? memo('theme.classes.cell', cellClass)\n : cellClass,\n details:\n detailsClass instanceof Function || Array.isArray(detailsClass)\n ? memo('theme.classes.details', detailsClass)\n : detailsClass,\n },\n styles: {\n ...t.styles,\n cell:\n cellStyles instanceof Function || Array.isArray(cellStyles)\n ? memo('theme.styles.cell', cellStyles)\n : cellStyles,\n details:\n detailsStyles instanceof Function || Array.isArray(detailsStyles)\n ? memo('theme.styles.details', detailsStyles)\n : detailsStyles,\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 styles: state.props.styles,\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 styles: column?.styles,\n };\n\n const theme = mergeThemes(\n defaultTableTheme,\n _globalTableTheme,\n contextTableTheme,\n localTheme,\n columnsTheme,\n ) as TableTheme<T>;\n\n return selector(process(theme));\n }) ??\n emptyStore.useState() ??\n selector(\n process(\n mergeThemes(defaultTableTheme, _globalTableTheme, contextTableTheme) as TableTheme<T>,\n ),\n );\n\n return theme;\n}\n","export type Path = (string | number)[];\n\nexport const isAncestor = (ancestor: Path, path: Path): boolean => {\n return ancestor.length <= path.length && ancestor.every((v, i) => v === '*' || path[i] === '*' || String(v) === String(path[i]));\n};\n\nexport const get = (value: unknown, path: Path): unknown => {\n for (const part of path) {\n if (value instanceof Object && part in value) value = value[part as keyof typeof value];\n else {\n value = undefined;\n break;\n }\n }\n return value;\n};\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const split = (value: any, path: Path): [value: unknown, subValues: { path: Path; value: unknown }[]] => {\n const [first, ...rest] = path;\n if (first === undefined) return [value, []];\n\n if (rest.length === 0) {\n if (first === '*') return [{}, Object.entries(value).map(([k, v]) => ({ path: [k], value: v }))];\n if (!(first in value)) return [value, []];\n const { [first]: subValue, ...newValue } = value;\n return [newValue, [{ path: [first], value: subValue }]];\n }\n\n const newValue = { ...value };\n const subValues = new Array<{ path: Path; value: unknown }>();\n for (const key of first === '*' ? Object.keys(value) : [first]) {\n if (!(newValue[key] instanceof Object)) return [value, []];\n const result = split(newValue[key], rest);\n newValue[key] = result[0];\n subValues.push(...result[1].map((s) => ({ path: [key, ...s.path], value: s.value })));\n }\n return [newValue, subValues];\n};\n","import { Patch } from 'immer';\nimport { Store } from '../store';\nimport { get, isAncestor, Path, split } from './persistPathHelpers';\nimport { PersistPaths } from './persistPaths';\nimport { StorePersistStorage } from './persistStorage';\n\nexport class StorePersist<T> {\n private replayPatches = new Array<Patch>();\n isInitialized = false;\n whenInitialized = this.load();\n private isStopped = false;\n private sub?: () => void;\n private saveQueue = new Array<{ path: Path; t: number }>();\n private isSaving = false;\n private saveTimeout?: ReturnType<typeof setTimeout>;\n private paths: { path: Path; throttleMs?: number }[];\n\n constructor(\n public readonly store: Store<T>,\n public readonly storage: StorePersistStorage,\n public readonly options: {\n paths?: (PersistPaths<T> | { path: PersistPaths<T>; throttleMs?: number })[];\n throttleMs?: number;\n log?: (...args: any[]) => void;\n } = {}\n ) {\n if (!options.paths) {\n this.paths = [{ path: [], throttleMs: options.throttleMs }];\n } else {\n this.paths = options.paths.map((p) => ({\n path: (typeof p === 'object' ? p.path : p).split('.'),\n throttleMs: (typeof p === 'object' ? p.throttleMs : undefined) ?? options.throttleMs,\n }));\n }\n\n this.paths.sort((a, b) => b.path.length - a.path.length);\n this.watch();\n }\n\n private async load() {\n try {\n const storage = this.storage;\n\n let keys;\n if ('keys' in storage) {\n keys = await storage.keys();\n } else {\n const length = storage.length instanceof Function ? await storage.length() : storage.length;\n keys = new Array<string>();\n for (let i = 0; i < length; i++) {\n const key = await storage.key(i);\n if (key !== null) keys.push(key);\n }\n }\n keys.sort((a, b) => a.length - b.length);\n\n const patches = new Array<Patch & { persist: StorePersist<T> }>();\n for (const key of keys) {\n const value = await storage.getItem(key);\n if (value) {\n patches.push({\n path: key.split('.'),\n op: 'replace',\n value: value === 'undefined' ? undefined : JSON.parse(value),\n persist: this,\n });\n }\n }\n\n if (this.isStopped) {\n return false;\n }\n\n if (patches.length > 0) {\n this.store.applyPatches(patches);\n }\n\n this.isInitialized = true;\n if (this.replayPatches.length > 0) {\n this.store.applyPatches(this.replayPatches);\n this.replayPatches = [];\n }\n\n return true;\n } catch (e) {\n (this.options.log ?? console.error)('Failed to load storePersist:', e);\n return false;\n }\n }\n\n private watch() {\n this.sub = this.store.subscribePatches((patches) => {\n for (const patch of patches) {\n if ((patch as any).persist === this) {\n continue;\n } else if (this.isInitialized === true) {\n this.addToSaveQueue(patch.path);\n } else {\n this.replayPatches.push(patch);\n }\n }\n });\n }\n\n private addToSaveQueue(path: Path) {\n const match = this.paths.find((p) => isAncestor(p.path, path));\n if (!match) return;\n\n path = path.slice(0, match.path.length);\n const t = Date.now() + (match.throttleMs ?? 0);\n\n if (this.saveQueue.some((i) => i.t <= t && isAncestor(i.path, path))) return;\n this.saveQueue.push({ path, t });\n this.saveQueue.sort((a, b) => a.t - b.t);\n this.run();\n }\n\n private async run() {\n if (this.saveTimeout) clearTimeout(this.saveTimeout);\n const next = this.saveQueue[0];\n\n if (!next) return;\n if (next.t > Date.now()) {\n this.saveTimeout = setTimeout(() => this.run(), next.t - Date.now());\n return;\n }\n\n try {\n this.isSaving = true;\n this.saveQueue.shift();\n await this.save(next.path);\n } finally {\n this.isSaving = false;\n this.run();\n }\n }\n\n private async save(path: Path) {\n const { store, storage } = this;\n let value = get(store.getState(), path);\n\n const subPaths = this.paths\n .filter((p) => isAncestor(path, p.path) && p.path.length > path.length)\n .map((p) => p.path.slice(path.length));\n\n const subValues = new Array<{ path: Path; value: unknown }>();\n for (const subPath of subPaths) {\n const result = split(value, subPath);\n value = result[0];\n subValues.push(...result[1].map((s) => ({ path: [...path, ...s.path], value: s.value })));\n }\n\n const result = storage.setItem(path.join('.'), JSON.stringify(value) ?? 'undefined');\n if (result instanceof Promise) await result;\n for (const { path, value } of subValues) {\n const result = storage.setItem(path.join('.'), JSON.stringify(value) ?? 'undefined');\n if (result instanceof Promise) await result;\n }\n }\n\n stop(): void {\n this.isStopped = true;\n this.sub?.();\n }\n}\n","export function hash(arg: unknown): string {\n return JSON.stringify({ arg }, (_key, value) => {\n if (value instanceof Object && !(value instanceof Array)) {\n const obj: any = {};\n for (const key of Object.keys(value).sort()) {\n obj[key] = value[key as keyof typeof value];\n }\n return obj;\n }\n return value;\n });\n}\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n var envHasBigInt64Array = typeof BigInt64Array !== 'undefined';\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n if ((a instanceof Map) && (b instanceof Map)) {\n if (a.size !== b.size) return false;\n for (i of a.entries())\n if (!b.has(i[0])) return false;\n for (i of a.entries())\n if (!equal(i[1], b.get(i[0]))) return false;\n return true;\n }\n\n if ((a instanceof Set) && (b instanceof Set)) {\n if (a.size !== b.size) return false;\n for (i of a.entries())\n if (!b.has(i[0])) return false;\n return true;\n }\n\n if (ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (a[i] !== b[i]) return false;\n return true;\n }\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (key === '_owner' && a.$$typeof) {\n // React-specific: avoid traversing React elements' _owner.\n // _owner contains circular references\n // and is not needed when comparing the actual elements (and not their owners)\n continue;\n }\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","type FilterString<T> = T extends string ? T : never;\n\nexport declare type SelectorPaths<T> = FilterString<\n keyof {\n [K in keyof NonNullable<T> as\n | K\n | (0 extends 1 & NonNullable<T>[K]\n ? `${FilterString<K>}.${any}`\n : NonNullable<NonNullable<T>[K]> extends Record<string, unknown>\n ? `${FilterString<K>}.${SelectorPaths<NonNullable<T>[K]>}`\n : never)]: 1;\n }\n>;\n\ntype Value<T, K> = K extends keyof T ? T[K] : K extends keyof NonNullable<T> ? NonNullable<T>[K] | undefined : undefined;\n\nexport type SelectorValue<T, K> = K extends `${infer K}.${infer Rest}` ? SelectorValue<Value<T, K>, Rest> : Value<T, K>;\n\nexport function createSelector<T, S>(stringSelector: string): (state: T) => S {\n const parts = stringSelector.split('.');\n return (state) => parts.reduce<any>((v, p) => (v instanceof Object && p in v ? v[p as keyof typeof v] : undefined), state);\n}\n\nexport function setWithSelector(state: unknown, stringSelector: string, value: unknown): void {\n const parts = stringSelector.split('.');\n const prefix = parts.slice(0, -1);\n const last = parts[parts.length - 1]!;\n\n for (const part of prefix) {\n if (state instanceof Object && part in state) {\n state = state[part as keyof typeof state];\n } else {\n throw Error(`Could not set ${stringSelector} because path ${stringSelector} doesn't exist`);\n }\n }\n\n if (state instanceof Object) {\n state[last as keyof typeof state] = value as any;\n } else {\n throw Error(`Could not set ${stringSelector} because path ${stringSelector} doesn't exist`);\n }\n}\n","export function throttle<Args extends any[]>(fn: (...args: Args) => void, ms: number): (...args: Args) => 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 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","import eq from 'fast-deep-equal/es6/react';\nimport { applyPatches, Draft, enableMapSet, enablePatches, freeze, Patch, produce } from 'immer';\nimport { Cancel } from './helpers/misc';\nimport { createSelector, SelectorPaths, SelectorValue } from './helpers/stringSelector';\nimport { throttle as throttleFn } from './helpers/throttle';\n\nexport type StoreOptions = {\n /** Log errors. Default: console.error */\n log?: (...data: any[]) => void;\n};\n\nexport type StoreSubscribeOptions = {\n /** Invoke callback immediately with the current value? Default: true */\n runNow?: boolean;\n /** Throttle invocations of callback. */\n throttle?: number;\n /** Comparison function to determine if the data has changed. Default: fast-deep-equal */\n compare?: (a: any, b: any) => boolean;\n};\n\nexport type StoreAddReactionOptions = {\n /** Invoke callback immediately with the current value? Default: true */\n runNow?: boolean;\n /** Comparison function to determine if the data has changed. Default: fast-deep-equal */\n compare?: (a: any, b: any) => boolean;\n};\n\nconst RESTART_UPDATE = Symbol('RESTART_UPDATE');\n\nexport class Store<T> {\n private subscriptions = new Set<(state: T, patches: Patch[]) => void>();\n private batchCounter = 0;\n private reactions = new Set<() => void>();\n private patches = new Array<Patch>();\n private lock?: 'reaction';\n private options;\n\n constructor(private state: T, { log = (...data: any[]) => console.error(...data) }: StoreOptions = {}) {\n freeze(state, true);\n enableMapSet();\n enablePatches();\n\n this.options = {\n log,\n };\n }\n\n getState(): T {\n return this.state;\n }\n\n update(update: (draft: Draft<T>, original: T) => Draft<T> | void | undefined): void {\n this.checkLock();\n\n this.state = produce(\n this.state,\n (draft) => update(draft, this.state),\n (patches) => this.patches.push(...patches)\n );\n\n this.notify();\n }\n\n set(state: T): void {\n this.checkLock();\n\n this.state = produce(\n this.state,\n () => state,\n (patches) => this.patches.push(...patches)\n ) as T;\n\n this.notify();\n }\n\n applyPatches(patches: Patch[]): void {\n this.checkLock();\n\n this.state = applyPatches(this.state, patches);\n this.patches.push(...patches);\n\n this.notify();\n }\n\n batchUpdates(fn: () => void): void {\n try {\n this.batchCounter++;\n fn();\n } finally {\n this.batchCounter--;\n if (this.batchCounter === 0) {\n this.notify();\n }\n }\n }\n\n subscribe(listener: (value: T, prev: T, state: T) => void, options?: StoreSubscribeOptions): Cancel;\n subscribe<S>(selector: (state: T) => S, listener: (value: S, prev: S, state: T) => void, options?: StoreSubscribeOptions): Cancel;\n subscribe<K extends SelectorPaths<T>>(\n selector: K,\n listener: (value: SelectorValue<T, K>, prev: SelectorValue<T, K>, state: T) => void,\n options?: StoreSubscribeOptions\n ): Cancel;\n subscribe<S>(...args: any[]): Cancel {\n let selector: (state: T) => S, listener: (value: S, prev: S, state: T) => void, options: StoreSubscribeOptions | undefined;\n\n if (args[1] instanceof Function) {\n [selector, listener, options] = args;\n if (typeof selector === 'string') {\n selector = createSelector<T, S>(selector);\n }\n } else {\n [selector, listener, options] = [(x) => x as any, ...args];\n }\n\n const { runNow = true, throttle = 0, compare = eq } = options ?? {};\n const throttledListener = throttle ? throttleFn(listener, throttle) : listener;\n\n let value = selector(this.state);\n\n const internalListener = (state: T, _patches: Patch[], init?: boolean) => {\n try {\n const oldValue = value;\n value = selector(state);\n if (!init && compare(value, oldValue)) return;\n (init ? listener : throttledListener)(value, oldValue, this.state);\n } catch (e) {\n this.options.log('Failed to execute listener:', e);\n }\n };\n\n this.subscriptions.add(internalListener);\n if (runNow) internalListener(this.state, [], true);\n return () => {\n this.subscriptions.delete(internalListener);\n };\n }\n\n addReaction(reaction: (value: T, draft: Draft<T>, original: T, prev: T) => void, options?: StoreAddReactionOptions): Cancel;\n addReaction<S>(\n selector: (state: T) => S,\n reaction: (value: S, draft: Draft<T>, original: T, prev: S) => void,\n options?: StoreAddReactionOptions\n ): Cancel;\n addReaction<K extends SelectorPaths<T>>(\n selector: K,\n reaction: (value: SelectorValue<T, K>, draft: Draft<T>, original: T, prev: SelectorValue<T, K>) => void,\n options?: StoreAddReactionOptions\n ): Cancel;\n addReaction<S>(...args: any[]): Cancel {\n let selector: (state: T) => S,\n reaction: (value: S, draft: Draft<T>, original: T, prev: S) => void,\n options: StoreAddReactionOptions | undefined;\n\n if (args[1] instanceof Function) {\n [selector, reaction, options] = args;\n if (typeof selector === 'string') {\n selector = createSelector<T, S>(selector);\n }\n } else {\n [selector, reaction, options] = [(x) => x as any, ...args];\n }\n const { runNow = true, compare = eq } = options ?? {};\n\n let value = selector(this.state);\n\n const internalListener = (init?: boolean) => {\n let hasChanged = false;\n\n try {\n this.lock = 'reaction';\n const oldValue = value;\n value = selector(this.state);\n if (!init && compare(value, oldValue)) return;\n\n this.state = produce(\n this.state,\n (draft) => reaction(value, draft, this.state, oldValue),\n (patches) => {\n hasChanged = true;\n this.patches.push(...patches);\n }\n );\n } catch (e) {\n this.options.log('Failed to execute reaction:', e);\n } finally {\n delete this.lock;\n }\n\n if (hasChanged && !init) throw RESTART_UPDATE;\n if (hasChanged && init) this.notify();\n };\n\n this.reactions.add(internalListener);\n if (runNow) internalListener(true);\n return () => {\n this.reactions.delete(internalListener);\n };\n }\n\n subscribePatches(listener: (patches: Patch[]) => void): Cancel {\n const internalListener = (_state: T, patches: Patch[]) => {\n try {\n listener(patches);\n } catch (e) {\n this.options.log('Failed to execute patch listener:', e);\n }\n };\n\n this.subscriptions.add(internalListener);\n return () => {\n this.subscriptions.delete(internalListener);\n };\n }\n\n private checkLock() {\n if (this.lock === 'reaction') {\n throw Error('You cannot call update from within a reaction. Use the passed draft instead.');\n }\n }\n\n private notify(): void {\n if (this.batchCounter > 0 || this.patches.length === 0) return;\n\n try {\n for (const reaction of this.reactions) {\n reaction();\n }\n } catch (e) {\n return this.notify();\n }\n\n const patches = this.patches;\n this.patches = [];\n\n this.batchUpdates(() => {\n for (const subscription of this.subscriptions) {\n subscription(this.state, patches);\n }\n });\n }\n}\n","/** @license React vundefined\n * use-sync-external-store-shim.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var e=require(\"react\");function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k=\"function\"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c})},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c})})},[a]);p(d);return d}\nfunction r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return!k(a,d)}catch(f){return!0}}function t(a,b){return b()}var u=\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement?t:q;exports.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/** @license React vundefined\n * use-sync-external-store-shim/with-selector.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var h=require(\"react\"),n=require(\"use-sync-external-store/shim\");function p(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var q=\"function\"===typeof Object.is?Object.is:p,r=n.useSyncExternalStore,t=h.useRef,u=h.useEffect,v=h.useMemo,w=h.useDebugValue;\nexports.useSyncExternalStoreWithSelector=function(a,b,e,l,g){var c=t(null);if(null===c.current){var f={hasValue:!1,value:null};c.current=f}else f=c.current;c=v(function(){function a(a){if(!c){c=!0;d=a;a=l(a);if(void 0!==g&&f.hasValue){var b=f.value;if(g(b,a))return k=b}return k=a}b=k;if(q(d,a))return b;var e=l(a);if(void 0!==g&&g(b,e))return b;d=a;return k=e}var c=!1,d,k,m=void 0===e?null:e;return[function(){return a(b())},null===m?void 0:function(){return a(m())}]},[b,e,l,g]);var d=r(a,c[0],c[1]);\nu(function(){f.hasValue=!0;f.value=d},[d]);w(d);return d};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","import eq from 'fast-deep-equal/es6/react';\nimport { useCallback, useDebugValue } from 'react';\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';\nimport { StoreSubscribeOptions } from '..';\nimport { createSelector, SelectorPaths, SelectorValue } from '../helpers/stringSelector';\nimport { Store } from './store';\n\nexport type UseStoreStateOptions = Omit<StoreSubscribeOptions, 'runNow'>;\n\nexport function useStoreState<T>(store: Store<T>, options?: UseStoreStateOptions): T;\nexport function useStoreState<T, S>(store: Store<T>, selector: (state: T) => S, options?: UseStoreStateOptions): S;\nexport function useStoreState<T, K extends SelectorPaths<T>>(\n store: Store<T>,\n selector: K,\n options?: UseStoreStateOptions\n): SelectorValue<T, K>;\nexport function useStoreState<T, S>(store: Store<T>, ...args: any[]): S {\n let selector: (state: T) => S, options: UseStoreStateOptions;\n\n if (args[0] instanceof Function) {\n selector = args[0];\n options = args[1] ?? {};\n } else if (typeof args[0] === 'string') {\n selector = createSelector(args[0]);\n options = args[1] ?? {};\n } else {\n selector = (x) => x as any;\n options = args[0] ?? {};\n }\n\n const subscribe = useCallback(\n (listener: () => void) => {\n return store.subscribe((x) => x, listener, {\n throttle: options.throttle,\n runNow: false,\n compare: (a, b) => a === b,\n });\n },\n [store, options.throttle]\n );\n\n const getSnapshot = useCallback(() => store.getState(), [store]);\n\n const value = useSyncExternalStoreWithSelector(\n //\n subscribe,\n getSnapshot,\n getSnapshot,\n selector,\n options.compare ?? eq\n );\n\n useDebugValue(value);\n return value;\n}\n","import { SelectorPaths, SelectorValue, setWithSelector } from '../helpers/stringSelector';\nimport { Store } from './store';\nimport { useStoreState } from './useStoreState';\n\nexport type UseStorePropResult<T, K extends SelectorPaths<T>> = [value: SelectorValue<T, K>, update: (value: SelectorValue<T, K>) => void];\n\nexport function useStoreProp<T, K extends SelectorPaths<T>>(store: Store<T>, selector: K): UseStorePropResult<T, K> {\n const value = useStoreState(store, selector);\n const update = (value: SelectorValue<T, K>) => store.update((state) => setWithSelector(state, selector, value));\n\n return [value, update];\n}\n","import { Store as BaseStore } from '../store';\nimport { SelectorPaths, SelectorValue } from '../helpers/stringSelector';\nimport { useStoreProp, UseStorePropResult } from './useStoreProp';\nimport { useStoreState, UseStoreStateOptions } from './useStoreState';\n\nexport class Store<T> extends BaseStore<T> {\n useState(options?: { throttle?: number }): T;\n useState<S>(selector: (state: T) => S, options?: UseStoreStateOptions): S;\n useState<K extends SelectorPaths<T>>(selector: K, options?: UseStoreStateOptions): SelectorValue<T, K>;\n useState(...args: any[]): any {\n return useStoreState(this, ...args);\n }\n\n useProp<K extends SelectorPaths<T>>(selector: K): UseStorePropResult<T, K> {\n return useStoreProp(this, selector);\n }\n}\n","import React, { Context, createContext, ReactNode, useContext, useMemo } from 'react';\nimport { SelectorPaths, SelectorValue } from '../helpers/stringSelector';\nimport { Store } from './store';\nimport { useStoreProp, UseStorePropResult } from './useStoreProp';\nimport { useStoreState, UseStoreStateOptions } from './useStoreState';\n\nexport class StoreScope<T> {\n readonly context: Context<Store<T>>;\n\n constructor(public readonly defaultValue: T) {\n this.context = createContext(new Store(defaultValue));\n }\n\n Provider = ({ children, store }: { children: ReactNode; store?: Store<T> }): JSX.Element => {\n const _store = useMemo(() => store ?? new Store(this.defaultValue), [store]);\n\n return <this.context.Provider value={_store}>{children}</this.context.Provider>;\n };\n\n withScope = <Args extends Record<string, unknown>>(Component: (args: Args) => JSX.Element) => {\n return (args: Args): JSX.Element => (\n <this.Provider>\n <Component {...args} />\n </this.Provider>\n );\n };\n\n useStore(): Store<T> {\n return useContext(this.context);\n }\n\n useState(options?: { throttle?: number }): T;\n useState<S>(selector: (state: T) => S, dependencies?: any[], options?: { throttle?: number }): S;\n useState<K extends SelectorPaths<T>>(selector: K, options?: UseStoreStateOptions): SelectorValue<T, K>;\n useState(...args: any[]): any {\n const store = this.useStore();\n return useStoreState(store, ...args);\n }\n\n useProp<K extends SelectorPaths<T>>(selector: K): UseStorePropResult<T, K> {\n const store = this.useStore();\n return useStoreProp(store, selector);\n }\n}\n","import eq from 'fast-deep-equal/es6/react';\nimport { useCallback, useDebugValue, useEffect } from 'react';\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';\nimport { ResourceInfo, ResourceInstance, ResourceSubscribeOptions } from '..';\nimport { hash } from '../helpers/hash';\n\nexport type UseResource<Value> = Pick<ResourceInstance<unknown, Value>, 'id' | 'invalidateCache' | 'subscribe' | 'getCache' | 'get'>;\n\nexport type UseResourceOptions = Omit<ResourceSubscribeOptions, 'runNow'> & {\n /** Invalidate the resource on mount, causing it to update in the background */\n updateOnMount?: boolean;\n /** Don't subscribe resource while this is true */\n dormant?: boolean;\n};\n\n/** Subscribe to a resource. This will immediately return cached values, if available, and update for future updates.\n * @param resource the resource to subscribe to.\n * @param options options\n */\nexport function useResource<Value>(resource: UseResource<Value>, options?: UseResourceOptions): ResourceInfo<Value> {\n const { compare, dormant, throttle, updateOnMount, watchOnly } = options ?? {};\n\n useEffect(() => {\n if (updateOnMount && !dormant) {\n resource.invalidateCache();\n }\n }, []);\n\n const subscribe = useCallback(\n (listener: () => void) => {\n if (dormant)\n return () => {\n // nothing to do\n };\n\n return resource.subscribe(listener, {\n watchOnly,\n throttle,\n runNow: false,\n compare,\n });\n },\n [resource.id, watchOnly, dormant, throttle]\n );\n\n const getSnapshot = useCallback(() => resource.getCache(), [resource.id]);\n\n let value = useSyncExternalStoreWithSelector(\n //\n subscribe,\n getSnapshot,\n getSnapshot,\n (x) => x,\n eq\n );\n\n if (dormant) {\n value = { state: 'empty', isLoading: false };\n }\n\n useDebugValue(value);\n return value;\n}\n\n/** Subscribe to a resource. This will immediately return cached values, if available, and update for future updates. While waiting for data, it throws so that the Component will be suspended. If there is an error, it throws.\n * @param resource the resource to subscribe to.\n * @param options options\n */\nexport function useReadResource<Value>(resource: UseResource<Value>, options?: UseResourceOptions): Value {\n const info = useResource(resource, options);\n\n if (info.state === 'error') {\n throw info.error;\n }\n\n if (info.state === 'empty') {\n throw resource.get();\n }\n\n useDebugValue(info.value);\n return info.value;\n}\n\nexport type CombineValues<T> = T extends [UseResource<infer Value>]\n ? [Value]\n : T extends [UseResource<infer Value>, ...infer Rest]\n ? [Value, ...CombineValues<Rest>]\n : T extends readonly UseResource<infer Value>[]\n ? Value[]\n : any[];\n\n/** Combine multiple resources into one that can be fed into useResource or useReadResource. Return value will be an array of the combined resources' values.\n * @param resources resources to be combined\n */\nexport function combineResources<Resources extends readonly UseResource<any>[]>(\n ...resources: Resources\n): UseResource<CombineValues<Resources>> {\n return {\n id: hash(resources.map((resource) => resource.id)),\n\n invalidateCache() {\n for (const resource of resources) {\n resource.invalidateCache();\n }\n },\n\n subscribe(listener, options) {\n const handles = resources.map((resource) => resource.subscribe(listener, options));\n\n return () => {\n for (const handle of handles) {\n handle();\n }\n };\n },\n\n getCache() {\n const caches = resources.map((resource) => resource.getCache());\n const isStale = caches.some((cache) => cache.isStale);\n const isLoading = caches.some((cache) => cache.isLoading);\n\n if (caches.some((resource) => resource.state === 'error')) {\n const error = caches.find((cache) => cache.error !== undefined)?.error;\n return { state: 'error', error, isStale, isLoading };\n }\n\n if (caches.every((resource) => resource.state === 'value')) {\n const value = caches.map((cache) => cache.value) as CombineValues<Resources>;\n return { state: 'value', value, isStale, isLoading };\n }\n\n return { state: 'empty', isLoading };\n },\n\n get() {\n return Promise.all(resources.map((resource) => resource.get())) as Promise<CombineValues<Resources>>;\n },\n };\n}\n","import { createContext, useContext } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport type { Id, InternalTableState } from '../types';\n\nexport const TableContext = createContext<Store<InternalTableState<any>> | null>(null);\n\nexport const TableResetContext = createContext<() => void>(() => undefined);\n\nexport const ColumnContext = createContext<Id | null>(null);\n\nexport function useTableContext<T>(): Store<InternalTableState<T>> {\n const value = useContext(TableContext);\n if (!value) throw new Error('No table context available');\n return value as Store<InternalTableState<T>>;\n}\n\nexport function useColumnContext(): Id {\n const value = useContext(ColumnContext);\n if (value === null) throw new Error('No column context available');\n return value;\n}\n","import type { 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 blocked: { main: '#f44336', light: '#f26257', contrastText: '#fff' },\n background: '#ffffff',\n text: 'inherit',\n border: '#777',\n borderLight: '#eee',\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 type { TableTheme } from '../../types';\n\nexport const Badge: TableTheme['components']['Badge'] = ({ badgeContent, children }) => {\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 type { TableTheme } from '../../types';\n\nexport const Button: TableTheme['components']['Button'] = ({\n startIcon,\n children,\n variant = 'text',\n ...props\n}) => {\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 var(--table-button-border, var(--table-border, #777777))',\n\n '&:disabled': {\n borderColor: 'var(--table-button-border-disabled, #eeeeee)',\n },\n },\n variant === 'contained' && {\n color: 'var(--primaryContrastText)',\n backgroundColor: 'var(--primaryMain)',\n boxShadow:\n '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 type { 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 type { 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 { useLayoutEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport type { TableTheme } from '../../types';\nimport { defaultClasses } from './defaultClasses';\n\nconst MARGIN = 10;\nconst MAX_OFFSET = 20;\n\nexport const Popover: TableTheme['components']['Popover'] = ({\n anchorEl,\n open,\n hidden,\n onClose,\n children,\n className,\n backdropClassName,\n align,\n}) => {\n const popper = useRef<HTMLDivElement>(null);\n const [position, setPosition] = useState<{ left: number; top: number }>();\n const [maxHeight, setMaxHeight] = useState(document.documentElement.clientHeight - 2 * MARGIN);\n const [zIndex, setZIndex] = useState(1);\n\n useLayoutEffect(() => {\n if (!anchorEl || !open) {\n setPosition(undefined);\n return;\n }\n\n let last: { left: number; top: number } | undefined;\n\n function check() {\n if (!anchorEl) return;\n const {\n left: anchorLeft,\n bottom: anchorBottom,\n width: anchorWidth,\n } = anchorEl.getBoundingClientRect();\n const { width: popperWidth = 0 } = popper.current?.getBoundingClientRect() ?? {};\n const viewportWidth = document.documentElement.clientWidth;\n const viewportHeight = document.documentElement.clientHeight;\n\n const next = {\n left:\n align === 'center'\n ? anchorLeft + anchorWidth / 2 - popperWidth / 2\n : anchorLeft -\n Math.min(popperWidth ? popperWidth / 2 : Number.POSITIVE_INFINITY, MAX_OFFSET),\n top: anchorBottom,\n };\n\n if (next.left < MARGIN) {\n next.left = MARGIN;\n }\n if (next.left + popperWidth > viewportWidth - MARGIN) {\n next.left = viewportWidth - MARGIN - popperWidth;\n }\n if (next.top < MARGIN) {\n next.top = MARGIN;\n }\n\n if (next.left !== last?.left || next.top !== last?.top) {\n setPosition(next);\n }\n\n setMaxHeight(viewportHeight - MARGIN - next.top);\n\n last = next;\n }\n check();\n\n const handle = setInterval(check, 16);\n return () => {\n clearInterval(handle);\n };\n }, [anchorEl, open, align]);\n\n function updateZIndex(div: HTMLDivElement | null) {\n const ancestors = [];\n for (let node = div?.parentElement; node; node = node.parentElement) {\n ancestors.push(node);\n }\n\n for (const node of ancestors.reverse()) {\n const value = document.defaultView?.getComputedStyle(node).getPropertyValue('z-index');\n\n if (value && !Number.isNaN(Number(value))) {\n setZIndex(Number(value) + 1);\n return;\n }\n }\n }\n\n if (!open) return null;\n\n return (\n <>\n <div\n ref={updateZIndex}\n css={{\n display: 'none',\n }}\n />\n\n {createPortal(\n <>\n <div\n className={backdropClassName}\n css={[\n {\n position: 'fixed',\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n zIndex,\n },\n hidden && { display: 'none' },\n ]}\n onClick={() => onClose()}\n />\n\n <div\n ref={popper}\n className={className}\n css={[\n defaultClasses.card,\n {\n position: 'fixed',\n maxWidth: document.documentElement.clientWidth - 2 * MARGIN,\n maxHeight,\n ...position,\n zIndex: zIndex + 1,\n overflowY: 'auto',\n color: 'var(--table-text-color)',\n },\n hidden && { display: 'none' },\n !position && { visibility: 'hidden' },\n ]}\n >\n {children}\n </div>\n </>,\n document.body,\n )}\n </>\n );\n};\n","import { css } from '@emotion/react';\n\nconst cell = css({\n display: 'flex',\n alignItems: 'center',\n borderBottom: '1px solid var(--table-border-light-color)',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n background: 'var(--table-background-color)',\n\n '&:not(:empty)': {\n padding: `calc(var(--spacing) * 0.1) calc(2 * var(--spacing))`,\n },\n});\n\nexport const defaultClasses = {\n table: css({\n position: 'relative',\n display: 'grid',\n color: 'var(--table-text-color)',\n }),\n\n cell,\n\n cellFill: css({\n borderBottom: '1px solid var(--table-border-light-color)',\n background: 'var(--table-background-color)',\n }),\n\n headerCell: css(cell, {\n borderBottom: '1px solid var(--table-border-color)',\n\n '&:not(:empty)': {\n padding: `var(--spacing) 0 var(--spacing) calc(2 * var(--spacing))`,\n },\n }),\n\n footerCell: css(cell, {\n padding: `var(--spacing) calc(2 * var(--spacing))`,\n borderTop: '1px solid var(--table-border-color)',\n borderBottom: 'none',\n }),\n\n firstCell: css({\n justifyContent: 'start',\n }),\n\n sticky: css({\n position: 'sticky',\n top: 0,\n zIndex: 2,\n }),\n\n stickyBottom: css({\n position: 'sticky',\n bottom: 0,\n zIndex: 2,\n }),\n\n headerFill: css({\n borderBottom: '1px solid var(--table-border-color)',\n background: 'var(--table-background-color)',\n }),\n\n footerFill: css({\n borderTop: '1px solid var(--table-border-color)',\n background: 'var(--table-background-color)',\n }),\n\n text: css({\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }),\n\n card: css({\n borderRadius: 4,\n boxShadow: '0px 3px 14px 2px rgb(0 0 0 / 12%)',\n background: 'var(--table-background-color)',\n }),\n\n clearFiltersButton: css({\n padding: `0 calc(2 * var(--spacing))`,\n fontWeight: 'bold',\n position: 'sticky',\n left: 0,\n maxWidth: 'fit-content',\n gridColumn: '2/-1',\n button: {\n color: 'var(--primaryMain) !important',\n border: 'solid 1px',\n borderColor: 'var(--primaryMain) !important',\n margin: 'var(--spacing)',\n },\n }),\n\n details: css(cell, {\n gridColumn: '1 / -1',\n whiteSpace: 'normal',\n }),\n};\n","import { useState } from 'react';\nimport type { TableTheme } from '../../types';\n\nexport const TextField: TableTheme['components']['TextField'] = ({\n startIcon,\n endIcon,\n className,\n inputRef,\n onBlur,\n ...props\n}) => {\n const [focus, setFocus] = useState(false);\n\n return (\n <div\n className={className}\n css={[\n {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n border: '1px solid var(--table-textfield-border, var(--table-border, #777777))',\n borderRadius: 4,\n },\n focus && { border: '2px solid var(--primaryMain)', margin: -1 },\n ]}\n >\n {startIcon}\n\n <input\n ref={inputRef}\n {...props}\n value={props.value ?? ''}\n onFocus={() => setFocus(true)}\n onBlur={(event) => {\n setFocus(false);\n onBlur?.(event);\n }}\n css={{\n minWidth: 0,\n width: '100%',\n flex: 1,\n border: 'none',\n outline: 'none',\n borderRadius: 4,\n padding: 'calc(var(--spacing) * 2)',\n paddingLeft: startIcon ? 0 : undefined,\n paddingRight: endIcon ? 0 : undefined,\n transition: 'outline 500ms',\n }}\n />\n\n {endIcon}\n </div>\n );\n};\n","import { Spinner } from '../../components/spinnner';\nimport type { 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 type { HTMLProps } from 'react';\nimport { cloneElement } from 'react';\nimport type { 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 function IconComponent(props: HTMLProps<Element>) {\n return (\n <ClassNames>\n {({ css }) =>\n cloneElement(svg, {\n ...props,\n className: css(IconDefaultStyle, props.className),\n })\n }\n </ClassNames>\n );\n };\n}\n\nconst Settings = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\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\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\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\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\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\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\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\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\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\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\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\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\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 type { TableTheme } from '../../types';\n\nexport const defaultTexts: TableTheme['text'] = {\n selectColumns: 'Select visible columns',\n showAllColumns: 'Show all',\n hideAllColumns: 'Hide all',\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 rangeMin: 'Min',\n rangeMax: 'Max',\n calendarWeek: 'Wk',\n};\n","import type { 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 { Store } from 'schummar-state/react';\nimport type { PartialTableTheme } from '../types';\n\nexport const globalTableTheme = new Store<PartialTableTheme>({});\n\nexport function configureTableTheme(tableTheme: PartialTableTheme) {\n globalTableTheme.set(tableTheme);\n}\n\nexport function mergeThemes<T>(...themes: PartialTableTheme<T>[]): PartialTableTheme<T> {\n return {\n text: Object.assign({}, ...themes.map((theme) => theme.text)),\n classes: Object.assign({}, ...themes.map((theme) => theme.classes)),\n styles: Object.assign({}, ...themes.map((theme) => theme.styles)),\n components: Object.assign({}, ...themes.map((theme) => theme.components)),\n icons: Object.assign({}, ...themes.map((theme) => theme.icons)),\n colors: {\n primary: Object.assign({}, ...themes.map((theme) => theme.colors?.primary)),\n secondary: Object.assign({}, ...themes.map((theme) => theme.colors?.secondary)),\n blocked: Object.assign({}, ...themes.map((theme) => theme.colors?.blocked)),\n background: themes\n .map((theme) => theme.colors?.background)\n .reverse()\n .find((x) => x !== undefined),\n text: themes\n .map((theme) => theme.colors?.text)\n .reverse()\n .find((x) => x !== undefined),\n border: themes\n .map((theme) => theme.colors?.border)\n .reverse()\n .find((x) => x !== undefined),\n borderLight: themes\n .map((theme) => theme.colors?.borderLight)\n .reverse()\n .find((x) => x !== undefined),\n },\n spacing: themes\n .map((theme) => theme.spacing)\n .reverse()\n .find((x) => x !== undefined),\n };\n}\n","import type { DependencyList, ReactNode } from 'react';\nimport { createContext, useContext, useMemo } from 'react';\nimport type { FunctionWithDeps } from '../types';\n\nconst TableMemoContext = createContext(new Map<string, [value: any, deps: DependencyList]>());\n\nexport function TableMemoContextProvider({ children }: { children: ReactNode }) {\n return (\n <TableMemoContext.Provider value={useMemo(() => new Map(), [])}>\n {children}\n </TableMemoContext.Provider>\n );\n}\n\nexport function useTableMemo() {\n const memoCache = useContext(TableMemoContext);\n\n return <Function_ extends (...args: any[]) => any>(\n key: string,\n function_: FunctionWithDeps<Function_>,\n ): Function_ => {\n let deps: DependencyList;\n if (Array.isArray(function_)) {\n deps = function_.slice(1);\n function_ = function_[0];\n } else {\n deps = [function_.toString()];\n }\n\n let cachedValue = memoCache.get(key);\n const hit =\n cachedValue &&\n cachedValue[1].length === deps.length &&\n cachedValue[1].every((x, i) => x === deps[i]);\n if (!cachedValue || !hit) {\n cachedValue = [function_, deps];\n memoCache.set(key, cachedValue);\n }\n return cachedValue[0];\n };\n}\n","import { ReactNode, createContext, useContext } from 'react';\nimport CsvExporter from '../exporters/csvExporter';\nimport { ExporterEntry } from '../exporters/exporter';\nimport { PartialTableTheme } from '../types';\n\nexport interface TableSettingsContextType {\n theme: PartialTableTheme;\n exporters: ExporterEntry[];\n}\n\nexport const TableSettingsContext = createContext<TableSettingsContextType>({\n theme: {},\n exporters: [\n { action: 'copy', exporter: new CsvExporter() },\n { action: 'download', exporter: new CsvExporter() },\n ],\n});\n\nexport function TableSettingsProvider({\n theme,\n exporters,\n additionalExporters,\n children,\n}: Partial<TableSettingsContextType> & {\n additionalExporters?: ExporterEntry[];\n children?: ReactNode;\n}) {\n const inherited = useContext(TableSettingsContext);\n theme ??= inherited.theme;\n exporters ??= inherited.exporters;\n\n if (additionalExporters) {\n exporters = [...exporters, ...additionalExporters];\n }\n\n return (\n <TableSettingsContext.Provider\n value={{\n theme,\n exporters,\n }}\n >\n {children}\n </TableSettingsContext.Provider>\n );\n}\n","import { BlobExporter, StringExporter } from './exporter';\n\nexport interface CsvExporterOptions {\n sepPrefix?: boolean;\n separator?: string;\n quote?: string;\n eol?: string;\n}\n\nexport default class CsvExporter implements StringExporter, BlobExporter {\n readonly type = 'csv';\n readonly fileEnding = 'csv';\n\n constructor(public readonly options: CsvExporterOptions = {}) {}\n\n exportToString(\n columns: (string | number | Date)[],\n rows: (string | number | Date)[][],\n options = this.options,\n ): string {\n const { sepPrefix, separator = '\\t', quote = '\"', eol = '\\n' } = options;\n\n const cells = [columns, ...rows].map((line) =>\n line.map((value) => {\n let stringValue: string;\n if (typeof value === 'number') {\n stringValue = String(value);\n } else if (value instanceof Date) {\n stringValue = value.toISOString();\n } else {\n stringValue = value;\n }\n\n if (![separator, quote, eol].some((c) => stringValue.includes(c))) {\n return value;\n }\n\n const clean = stringValue.replace(new RegExp(quote, 'g'), `${quote}${quote}`);\n return `${quote}${clean}${quote}`;\n }),\n );\n\n return (\n (sepPrefix ? `SEP=${separator}\\n` : '') + cells.map((line) => line.join(separator)).join(eol)\n );\n }\n\n exportToBlob(columns: (string | number | Date)[], rows: (string | number | Date)[][]): Blob {\n const data = this.exportToString(columns, rows, {\n ...this.options,\n sepPrefix: this.options.sepPrefix ?? true,\n });\n return new Blob([data], { type: 'text/csv' });\n }\n}\n","import { createContext, useMemo, useState } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { cx } from '../misc/helpers';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport { useCssVariables } from '../theme/useCssVariables';\n\nexport const FilterControlContext = createContext({\n isActive: false,\n close: (): void => undefined,\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(\n (state) => state.activeColumns.find((column) => column.id === columnId)?.filter,\n );\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={(event) => setAnchor(event.currentTarget)}\n onContextMenu={(event) => {\n reset();\n event.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={(event) => {\n event.stopPropagation();\n }}\n onPointerMove={(event) => {\n event.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 type { Id, TableItem } from '../types';\n\nexport const flatMap = <T, S>(array: Iterable<T>, flatMap: (t: T) => S[]): S[] => {\n return [...array].flatMap(flatMap);\n};\n\nexport const orderBy = <T>(\n array: T[],\n selectors: ((t: T) => any)[] = [],\n direction: ('desc' | 'asc')[] = [],\n): T[] => {\n if (selectors.length === 0) selectors = [(t) => t];\n\n return [...array].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 _direction = direction[i] === 'desc' ? -1 : 1;\n if (_a > _b) return _direction;\n if (_a < _b) return -_direction;\n }\n return 0;\n });\n};\n\nexport const uniq = <T>(array: T[]): T[] => {\n const set = new Set<T>();\n for (const t of array) 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>(\n activeItemsById: Map<Id, TableItem<T>>,\n ...items: TableItem<T>[]\n): Set<Id> => {\n const result = new Set<Id>();\n\n const find = ({ parentId }: TableItem<T>): void => {\n const parent =\n parentId !== undefined && parentId !== null ? 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 (Array.isArray(x)) 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 (Array.isArray(x)) return x.map(asString);\n return asString(x);\n};\n\nexport const asNumber = (x: unknown): number | null => {\n const n = Number(x);\n return Number.isNaN(n) ? null : n;\n};\n\nexport const asNumberOrArray = (x: unknown): number | null | (number | null)[] => {\n if (Array.isArray(x)) return x.map(asNumber);\n return asNumber(x);\n};\n\nexport const defaultEquals = (a: unknown, b: unknown): boolean => a === b;\n\nexport const subStringMatch = (a: string, b: string): boolean =>\n a.toLowerCase().includes(b.toLowerCase());\n\nexport const castArray = <T>(a: T | T[]) => (Array.isArray(a) ? a : [a]);\n\nexport const cx = (\n ...classNames: (string | false | undefined | null | Record<string, boolean>)[]\n) =>\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\ntype Falsy = false | 0 | '' | null | undefined;\nexport function isTruthy<T>(x: T): x is Exclude<T, Falsy> {\n return !!x;\n}\n","import { useTheme } from '../hooks/useTheme';\n\nexport function useCssVariables() {\n return useTheme(({ spacing, colors }) => {\n return {\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 '--blockedMain': colors.blocked.main,\n '--blockedLight': colors.blocked.light,\n '--blockedContrastText': colors.blocked.contrastText,\n '--table-background-color': colors.background,\n '--table-text-color': colors.text,\n '--table-border-color': colors.border,\n '--table-border-light-color': colors.borderLight,\n };\n });\n}\n","import { castDraft } from 'immer';\nimport { useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { nanoid } from 'nanoid';\nimport { FilterControlContext } from '../components/filterControl';\nimport { debounce } from '../misc/debounce';\nimport type { FilterImplementation, SerializableValue } from '../types';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport { useTableMemo } from './useTableMemo';\n\nexport function useFilter<T, V, F, S extends SerializableValue>(\n impl: FilterImplementation<T, V, F, S>,\n) {\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n const cache = useTableMemo();\n const cacheId = useMemo(() => nanoid(), []);\n const filterBy = impl.filterBy && cache(cacheId, 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 function debounce<Args extends any[]>(\n function_: (...args: Args) => void,\n ms: number,\n): { (...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 function_(...(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 { DateObj, useDayzed } from 'dayzed';\nimport {\n Fragment,\n ReactNode,\n createContext,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { defaults } from '../misc/defaults';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport { DateInput } from './dateInput';\nimport { Text } from './text';\nimport { Interpolation, Theme } from '@emotion/react';\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 /** Currently visible date. */\n dateInView?: Date;\n /** Callback for when the currently visible date changes. */\n onDateInViewChange?: (value: Date) => 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 /** Minimum selectable date */\n /** Date ranges that are visually marked as blocked */\n blockedRanges?: DateRange[];\n minDate?: Date;\n /** Maximum selectable date */\n maxDate?: Date;\n /** Whether to show the calendar week in the first column */\n showCalendarWeek?: boolean;\n};\n\nconst DatePickerContext = createContext<Partial<Omit<DatePickerProps, 'value' | 'onChange'>>>({});\n\nexport function DatePickerProvider({\n children,\n ...props\n}: Partial<Omit<DatePickerProps, 'value' | 'onChange'>> & { children?: ReactNode }) {\n const value = useMemo(() => props, [JSON.stringify(props)]);\n\n return <DatePickerContext.Provider value={value}>{children}</DatePickerContext.Provider>;\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) =>\n 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 + 1);\n\n return {\n min: startOfDay(min),\n max: endOfDay(now),\n };\n};\n\nexport const today = () => lastDays(1);\n\nexport const thisWeek = (delta = 0, 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 + delta * 7);\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 = (delta = 0): DateRange => {\n const now = new Date();\n const min = new Date(now);\n min.setDate(1);\n min.setMonth(min.getMonth() + delta);\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 = (delta = 0): DateRange => {\n const now = new Date();\n const min = new Date(now);\n min.setDate(1);\n min.setMonth(0);\n min.setFullYear(min.getFullYear() + delta);\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\nconst MS_PER_DAY = 1000 * 60 * 60 * 24;\nexport const getCalendarWeek = (date: Date): number => {\n // ISO 8601: Week 1 is the week with the first Thursday of the year.\n // https://en.wikipedia.org/wiki/ISO_week_date\n\n const endOfWeek = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate() + (7 - (date.getDay() || 7)),\n );\n\n const year = endOfWeek.getFullYear();\n const firstDayOfYear = new Date(year, 0, 1);\n const dayOfYear =\n Math.floor(\n (endOfWeek.getTime() -\n firstDayOfYear.getTime() +\n (endOfWeek.getTimezoneOffset() - firstDayOfYear.getTimezoneOffset())) /\n MS_PER_DAY,\n ) + 1;\n const weekOfYear = Math.floor((3 + dayOfYear) / 7);\n\n if (weekOfYear === 0) {\n return (\n getCalendarWeek(\n new Date(endOfWeek.getFullYear(), endOfWeek.getMonth(), endOfWeek.getDate() - 7),\n ) + 1\n );\n }\n\n return weekOfYear;\n};\n\nexport const commonQuickOptions = {\n today: { label: <Text id=\"today\" />, value: today },\n thisWeek: { label: <Text id=\"thisWeek\" />, value: (props) => thisWeek(0, props.firstDayOfWeek) },\n thisMonth: { label: <Text id=\"thisMonth\" />, value: () => thisMonth() },\n thisYear: { label: <Text id=\"thisYear\" />, value: () => thisYear() },\n lastSevenDays: { label: <Text id=\"lastSevenDays\" />, value: () => lastDays(7) },\n lastThirtyDays: { label: <Text id=\"lastThirtyDays\" />, value: () => lastDays(30) },\n} satisfies Record<\n DatePickerQuickOption & string,\n { label: ReactNode; value: Date | DateRange | ((props: DatePickerProps) => Date | DateRange) }\n>;\n\n/** Returns whether two dates and/or date ranges intersect. Intersection is considered per day. */\nexport function dateIntersect(\n a: Date | DateRange | null | undefined,\n b: Date | DateRange | null | undefined,\n) {\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 dateClamp(date: Date, min?: Date, max?: Date) {\n if (min && date < min) {\n return min;\n }\n\n if (max && date > max) {\n return max;\n }\n\n return date;\n}\n\nfunction getValueForComparison(value?: Date | DateRange | null) {\n if (!value) {\n return value;\n }\n if (value instanceof Date) {\n return value.getTime();\n }\n return `${value.min?.getTime()}-${value.max?.getTime()}`;\n}\n\nexport function DatePicker(props: DatePickerProps) {\n const context = useContext(DatePickerContext);\n\n const {\n value,\n rangeSelect,\n locale,\n firstDayOfWeek = 1,\n defaultDateInView,\n quickOptions = ['today', 'thisWeek'],\n minDate,\n maxDate,\n showCalendarWeek,\n blockedRanges = [],\n } = defaults<DatePickerProps>(props, context);\n\n function onChange(value: Date | DateRange | null) {\n if (value instanceof Date) {\n value = dateClamp(value, minDate, maxDate);\n } else if (value) {\n value = {\n min: dateClamp(value.min, minDate, maxDate),\n max: dateClamp(value.max, minDate, maxDate),\n };\n }\n\n props.onChange(value);\n }\n\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 function getDayCssStyles({\n disabled,\n prevMonth,\n nextMonth,\n today,\n blocked,\n selected,\n preSelected,\n }: {\n disabled?: boolean;\n prevMonth?: boolean;\n nextMonth?: boolean;\n today?: boolean;\n blocked?: boolean;\n selected?: boolean;\n preSelected?: boolean;\n }): Interpolation<Theme> {\n return [\n {\n padding: 10,\n border: 'none',\n background: 'transparent',\n cursor: disabled ? undefined : 'pointer',\n font: 'inherit',\n color: 'inherit',\n },\n (prevMonth || nextMonth) && {\n color: 'var(--date-picker-disemphasized, #bdbdbd)',\n },\n today && {\n outline: '1px solid var(--secondaryMain)',\n },\n blocked && {\n background: 'var(--blockedMain)',\n color: 'var(--blockedContrastText)',\n },\n selected && {\n background: 'var(--primaryMain)',\n color: 'var(--primaryContrastText)',\n },\n blocked &&\n selected && {\n position: 'relative',\n '::before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n background: 'var(--blockedMain)',\n clipPath: 'polygon(0 0, 0 50%, 50% 0)',\n },\n },\n preSelected && {\n background: 'var(--primaryLight)',\n color: 'var(--primaryContrastText)',\n },\n ];\n }\n\n const mountTime = useMemo(() => new Date(), []);\n const [dirty, setDirty] = useState<Partial<DateRange>>();\n const [hovered, setHovered] = useState<DateRange>();\n const [dateInViewLocal, setDateInViewLocal] = useState<Date>(defaultDateInView ?? mountTime);\n const dateInView = props.dateInView ?? dateInViewLocal;\n\n function setDateInView(date: Date) {\n setDateInViewLocal(date);\n props.onDateInViewChange?.(date);\n }\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 const resolvedQuickOptions = [...quickOptions, { label: <Text id=\"reset\" />, value: null }].map(\n (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 type=\"button\"\n css={{\n color: 'inherit',\n }}\n onClick={() => {\n setDirty(undefined);\n\n if (value instanceof Function) {\n onChange(value(props));\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) =>\n setDateInView(new Date(dateInView.getFullYear(), dateInView.getMonth() + offset)),\n offset: 0,\n minDate,\n maxDate,\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) =>\n format(new Date(Date.UTC(2021, 7, ((weekDay + firstDayOfWeek) % 7) + 1)));\n }, [locale, firstDayOfWeek]);\n\n useEffect(\n () =>\n setDateInView(\n value === null ? defaultDateInView ?? mountTime : value instanceof Date ? value : value.max,\n ),\n [getValueForComparison(value), getValueForComparison(defaultDateInView), mountTime],\n );\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\n css={[\n cssVariables,\n {\n color: 'var(--table-text-color)',\n },\n ]}\n >\n <div\n css={{\n display: 'grid',\n gridAutoFlow: 'column',\n justifyContent: 'center',\n alignItems: 'baseline',\n gap: 'var(--spacing)',\n }}\n >\n <DateInput\n value={min ?? null}\n onChange={(date) => set(date ?? undefined, max, 'min')}\n locale={locale}\n />\n\n {rangeSelect && (\n <>\n {' - '}\n <DateInput\n value={max ?? null}\n onChange={(date) => set(min, date ?? undefined, 'max')}\n locale={locale}\n />\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 type=\"button\" {...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 type=\"button\" {...getForwardProps({ calendars })}>\n <ChevronRight />\n </IconButton>\n </div>\n\n <div\n css={{\n justifySelf: 'center',\n display: 'grid',\n gridTemplateColumns: 'repeat(8, max-content)',\n }}\n >\n {showCalendarWeek ? (\n <div\n css={{\n justifySelf: 'center',\n padding: 10,\n borderRight:\n '1px solid var(--date-picker-separator, var(--table-border, #bdbdbd))',\n }}\n >\n <Text id=\"calendarWeek\" />\n </div>\n ) : (\n <div />\n )}\n\n {weekDays.map((_v, weekDay) => (\n <div\n key={weekDay}\n css={{\n justifySelf: 'center',\n padding: 10,\n }}\n >\n {formatWeekday(weekDay)}\n </div>\n ))}\n\n {weeks.map((week, index) => {\n const weekStart = week[0] as DateObj;\n const weekEnd = week[6] as DateObj;\n const weekDisabled =\n !rangeSelect ||\n (minDate && weekEnd.date < minDate) ||\n (maxDate && weekStart.date > maxDate);\n\n return (\n <Fragment key={index}>\n {showCalendarWeek ? (\n <button\n type=\"button\"\n css={{\n padding: 10,\n border: 'none',\n background: 'transparent',\n cursor: weekDisabled ? undefined : 'pointer',\n font: 'inherit',\n borderRight:\n '1px solid var(--date-picker-separator, var(--table-border, #bdbdbd))',\n color: 'inherit',\n }}\n onClick={() => {\n if (weekDisabled) {\n return;\n }\n\n const min = minDate && weekStart.date < minDate ? minDate : weekStart.date;\n const max = maxDate && weekEnd.date > maxDate ? maxDate : weekEnd.date;\n set(min, max);\n }}\n onPointerOver={() =>\n !weekDisabled && setHovered({ min: weekStart.date, max: weekEnd.date })\n }\n onPointerOut={() => !weekDisabled && setHovered(undefined)}\n >\n {getCalendarWeek(weekEnd.date)}\n </button>\n ) : (\n <div />\n )}\n\n {week.map((dateObject, dayIndex) => {\n if (!dateObject) {\n return <div key={dayIndex} />;\n }\n\n const { prevMonth, nextMonth, date } = dateObject;\n const today = startOfDay(date).getTime() === now.getTime();\n const disabled = (minDate && date < minDate) || (maxDate && date > maxDate);\n\n const selected =\n date.getTime() === min?.getTime() ||\n (min && max && dateIntersect(date, { min, max }));\n const preSelected =\n !selected &&\n !disabled &&\n (dateIntersect(date, hovered) ||\n (min &&\n !max &&\n hovered &&\n dateIntersect(\n date,\n min <= hovered.min\n ? { min, max: hovered.min }\n : { min: hovered.max, max: min },\n )));\n const blocked = blockedRanges.some((range) => dateIntersect(date, range));\n\n return (\n <button\n type=\"button\"\n key={`${index}-${dayIndex}`}\n css={getDayCssStyles({\n disabled,\n prevMonth,\n nextMonth,\n today,\n blocked,\n selected,\n preSelected,\n })}\n {...getDateProps({ dateObj: dateObject })}\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({ min: date, max: date })}\n onPointerOut={() => setHovered(undefined)}\n disabled={disabled}\n >\n {date.getDate()}\n </button>\n );\n })}\n </Fragment>\n );\n })}\n </div>\n </div>\n ))}\n\n <div\n css={{\n marginTop: 'var(--spacing)',\n display: 'grid',\n gridAutoFlow: 'column',\n justifyContent: 'center',\n }}\n >\n {resolvedQuickOptions}\n </div>\n </div>\n );\n}\n","export function defaults<T extends object>(first: T, ...more: Partial<T>[]): T {\n return more.reduce<T>((acc, source) => {\n const copy = { ...acc };\n\n for (const [key, value] of Object.entries(source)) {\n copy[key as keyof T] ??= value as any;\n }\n\n return copy;\n }, first);\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: Number.POSITIVE_INFINITY,\n};\n\nconst length = (type: 'day' | 'month' | 'year', value: string) =>\n Math.max(value.length, defaultLengths[type]);\n\nconst tabNext = (event: Element) => {\n const all = Array.from(document.querySelectorAll(`.${className}`));\n const index = all.indexOf(event);\n const next = all[(index + 1) % all.length];\n\n if (next instanceof HTMLElement) {\n next.focus();\n }\n};\n\nexport function DateInput({\n value,\n onChange,\n locale,\n}: {\n value: Date | null;\n onChange: (date: Date | null) => void;\n locale?: string;\n}) {\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 switch (override.type) {\n case 'day': {\n newValue.setDate(Number(override.value));\n break;\n }\n\n case 'month': {\n newValue.setMonth(Number(override.value) - 1);\n break;\n }\n\n case 'year': {\n newValue.setFullYear(Number(override.value));\n break;\n }\n\n default: {\n break;\n }\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 boxSizing: 'content-box',\n overflow: 'visible',\n border: 'none',\n borderBottom: '2px solid transparent',\n outline: 'none',\n fontSize: 'inherit',\n backgroundColor: 'inherit',\n color: 'inherit',\n\n '::placeholder': {\n color: 'inherit',\n opacity: 0.5,\n },\n\n '&:focus': {\n borderBottom: '2px solid var(--primaryMain)',\n },\n }}\n style={{\n width: `${length(type, value)}ch`,\n }}\n placeholder={''.padEnd(length(type, value), '0')}\n value={override?.type === type ? override.value : !isEmpty ? value : ''}\n onChange={(event) => {\n setOverride({ type, value: event.target.value });\n if (event.target.value.length >= maxLengths[type]) {\n setTimeout(() => tabNext(event.target));\n }\n }}\n onFocus={(event) => event.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 { useFilter } from '../hooks/useFilter';\nimport type { CommonFilterProps } from '../types';\nimport type { DatePickerProps, DateRange } from './datePicker';\nimport { dateIntersect, DatePicker } 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 (Array.isArray(x)) 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 minDate,\n maxDate,\n showCalendarWeek,\n ...props\n}: {\n /** If enabled, only single days can be selected. Ranges otherwise. */\n singleSelect?: boolean;\n} & Pick<\n DatePickerProps,\n | 'locale'\n | 'firstDayOfWeek'\n | 'defaultDateInView'\n | 'quickOptions'\n | 'minDate'\n | 'maxDate'\n | 'showCalendarWeek'\n> &\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 minDate={minDate}\n maxDate={maxDate}\n showCalendarWeek={showCalendarWeek}\n />\n </div>\n );\n}\n","import { useState } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport type { TableTheme } from '../types';\n\ntype TextFieldProps = TableTheme['components']['TextField'] extends React.ComponentType<infer T>\n ? T\n : never;\n\nexport interface NumberFieldProps extends Omit<TextFieldProps, 'value' | 'onChange'> {\n value?: number | null;\n onChange?: (value: number | null) => void;\n}\n\nconst Pattern = /^-?\\d*(?:[.,]\\d*)?$/;\n\nconst printNumber = (value: number | null, locale?: string) => {\n if (value === null) {\n return '';\n }\n\n return value.toLocaleString(locale);\n};\n\nconst parseNumber = (value: string) => {\n if (value === '') {\n return null;\n }\n\n const asNumber = Number(value.replace(',', '.'));\n return Number.isNaN(asNumber) ? null : asNumber;\n};\n\nexport function NumberField({\n value: commitedValue = null,\n onChange,\n ...textFieldProps\n}: NumberFieldProps) {\n const locale = useTheme((t) => t.locale);\n const TextField = useTheme((t) => t.components.TextField);\n const [value = printNumber(commitedValue, locale), setValue] = useState<string>();\n\n return (\n <TextField\n value={value}\n onChange={(event) => {\n if (Pattern.test(event.target.value)) {\n setValue(event.target.value);\n }\n }}\n onBlur={() => {\n onChange?.(parseNumber(value));\n setValue(undefined);\n }}\n {...textFieldProps}\n css={{\n input: {\n backgroundColor: 'inherit',\n color: 'inherit',\n },\n }}\n />\n );\n}\n","import { useFilter } from '../hooks/useFilter';\nimport { useTheme } from '../hooks/useTheme';\nimport { asNumberOrArray, castArray } from '../misc/helpers';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport type { CommonFilterProps } from '../types';\nimport { NumberField } from './numberField';\n\nexport interface RangeFilterProps<T, V>\n extends CommonFilterProps<T, V, number | null, [number | null, number | null] | null> {\n min?: number;\n max?: number;\n}\n\nexport function RangeFilter<T, V>({\n min,\n max,\n filterBy = asNumberOrArray,\n ...props\n}: RangeFilterProps<T, V>): JSX.Element {\n const rangeMinText = useTheme((t) => t.text.rangeMin);\n const rangeMaxText = useTheme((t) => t.text.rangeMax);\n\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n const filterByFunction = filterBy instanceof Function ? filterBy : filterBy[0];\n\n const [minValue, maxValue] = table.useState((state) => {\n if (typeof min === 'number' && typeof max === 'number') {\n return [min, max];\n }\n\n const column = state.activeColumns.find((c) => c.id === columnId);\n\n if (!column) {\n return [0, 100];\n }\n\n let minValue;\n let maxValue;\n\n for (const item of state.items) {\n const columnValue = column.value(item.value) as V;\n const numberValues = castArray(filterByFunction(columnValue, item.value)).filter(\n (value): value is number => value !== null,\n );\n\n for (const value of numberValues) {\n minValue = Math.min(minValue ?? value, value);\n maxValue = Math.max(maxValue ?? value, value);\n }\n }\n\n return [min ?? minValue, max ?? maxValue];\n });\n\n const { value, onChange } = useFilter({\n ...props,\n filterBy,\n\n id: 'rangeFilter',\n\n isActive(filterValue) {\n return !!filterValue;\n },\n\n test(filterValue, value) {\n if (!filterValue || (filterValue[0] === null && filterValue[1] === null)) {\n return true;\n }\n\n const min = filterValue[0] ?? Number.NEGATIVE_INFINITY;\n const max = filterValue[1] ?? Number.POSITIVE_INFINITY;\n return value !== null && value >= min && value <= max;\n },\n });\n\n return (\n <div\n css={{\n padding: `calc(var(--spacing) * 2)`,\n display: 'grid',\n gap: '1em',\n }}\n >\n <div\n css={{\n display: 'flex',\n gap: '1em',\n alignItems: 'center',\n\n '& > *': {\n width: '10em',\n },\n }}\n >\n <NumberField\n value={value?.[0]}\n onChange={(newMin) => onChange(normalize(newMin, value?.[1], 'min', { min, max }))}\n startIcon={<span css={{ margin: '0 calc(var(--spacing) * 2)' }}>{rangeMinText}</span>}\n placeholder={String(minValue ?? '')}\n css={{\n alignItems: 'baseline',\n }}\n />\n -\n <NumberField\n value={value?.[1]}\n onChange={(newMax) => onChange(normalize(value?.[0], newMax, 'max', { min, max }))}\n startIcon={<span css={{ margin: '0 calc(var(--spacing) * 2)' }}>{rangeMaxText}</span>}\n placeholder={String(maxValue ?? '')}\n css={{\n alignItems: 'baseline',\n }}\n />\n </div>\n </div>\n );\n}\n\nfunction normalize(\n min: number | null | undefined,\n max: number | null | undefined,\n changed: 'min' | 'max',\n limits: { min?: number; max?: number },\n): [number | null, number | null] | null {\n min ??= null;\n max ??= null;\n\n if (min !== null && max !== null && min > max) {\n if (changed === 'min') {\n max = min;\n } else {\n min = max;\n }\n }\n\n return min !== null || max !== null\n ? [clamp(min, limits.min, limits.max), clamp(max, limits.min, limits.max)]\n : null;\n}\n\nfunction clamp(\n value: number | null,\n min = Number.NEGATIVE_INFINITY,\n max = Number.POSITIVE_INFINITY,\n): number | null {\n return value === null ? null : Math.min(Math.max(value, min), max);\n}\n","import type { ReactNode } from 'react';\nimport { useEffect, useMemo, useState } from 'react';\nimport { useFilter } from '../hooks/useFilter';\nimport { useTheme } from '../hooks/useTheme';\nimport { asString, castArray, flatMap, orderBy, uniq } from '../misc/helpers';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport type { CommonFilterProps, InternalColumn, SerializableValue } from '../types';\nimport { AutoFocusTextField } from './autoFocusTextField';\nimport { FormControlLabel } from './formControlLabel';\nimport type { VirtualListProps } from './virtualList';\nimport { VirtualList } from './virtualList';\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 hideSearchField,\n hideResetButton,\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 /** If enabled, the search field is hidden. */\n hideSearchField?: boolean;\n /** If enabled, the reset button is hidden. */\n hideResetButton?: boolean;\n /** Virtual list props.\n * @default true */\n virtual?: VirtualListProps<unknown>['virtual'];\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 isActive,\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\n | InternalColumn<T, V>\n | undefined;\n if (!column) return [];\n\n return orderBy(\n uniq(\n flatMap(state.items, (item) => castArray(filterBy(column.value(item.value), item.value))),\n ),\n );\n });\n\n const [query, setQuery] = useState('');\n const filtered = options.filter(\n (option) => !query || stringValue(option).toLowerCase().includes(query.toLowerCase()),\n );\n const delayedValue = useMemo(() => value, [isActive]);\n const ordered = filtered\n .filter((option) => delayedValue.has(option))\n .concat(filtered.filter((option) => !delayedValue.has(option)));\n\n const Button = useTheme((t) => t.components.Button);\n\n useEffect(() => {\n setQuery('');\n }, [isActive]);\n\n return (\n <div\n css={{\n padding: 'calc(var(--spacing) * 2)',\n display: 'grid',\n gap: 'var(--spacing)',\n }}\n >\n {!hideSearchField && (\n <AutoFocusTextField\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n endIcon={\n <IconButton onClick={() => setQuery('')}>{!query ? <Search /> : <Clear />}</IconButton>\n }\n css={{ marginBottom: 'var(--spacing)' }}\n />\n )}\n\n {!hideResetButton && (\n <Button\n disabled={value.size === 0}\n onClick={() => onChange(new Set())}\n variant=\"outlined\"\n css={{\n justifyContent: 'center',\n width: '100%',\n marginBottom: 'var(--spacing)',\n color: 'inherit',\n }}\n >\n {deselectAll}\n </Button>\n )}\n\n <VirtualList\n items={ordered}\n css={{\n width: '20em',\n maxHeight: '20em',\n }}\n >\n {(option, index) => (\n <FormControlLabel\n key={index}\n control={\n <Checkbox\n checked={value.has(option)}\n onChange={() => onChange(toggle(value, option, singleSelect))}\n />\n }\n label={render(option)}\n ></FormControlLabel>\n )}\n </VirtualList>\n\n {ordered.length === 0 && <span css={{ textAlign: 'center' }}>{noResults}</span>}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nexport function FormControlLabel({\n control,\n label,\n disabled,\n}: {\n control: ReactNode;\n label: ReactNode;\n disabled?: boolean;\n}) {\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 type { HTMLProps, ReactNode } from 'react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { throttle } from '../misc/throttle';\n\nexport interface VirtualListProps<T> extends Omit<HTMLProps<HTMLDivElement>, 'children'> {\n virtual?:\n | boolean\n | {\n rowHeight?: number;\n initalRowHeight?: number;\n throttleScroll?: number;\n overscan?: number;\n overscanBottom?: number;\n overscanTop?: number;\n };\n items: T[];\n children: (item: T, index: number) => ReactNode;\n}\n\nexport function VirtualList<T>({\n virtual = true,\n items,\n children,\n ...props\n}: VirtualListProps<T>): JSX.Element {\n const container = useRef<HTMLDivElement>(null);\n const [, setId] = useState({});\n\n const throttleScroll = (typeof virtual === 'boolean' ? undefined : virtual)?.throttleScroll ?? 16;\n const update = useMemo(() => throttle(() => setId({}), throttleScroll), [throttleScroll]);\n\n useEffect(() => {\n if (!virtual) return;\n\n const ro = new ResizeObserver(update);\n\n if (container.current) {\n ro.observe(container.current);\n }\n\n window.addEventListener('resize', update, true);\n return () => {\n ro.disconnect();\n window.removeEventListener('resize', update, true);\n update.cancel();\n };\n }, [update, virtual, throttleScroll]);\n\n if (!virtual) {\n return (\n <div\n {...props}\n css={{\n overflowY: 'auto',\n display: 'grid',\n }}\n >\n {items.map((item, index) => children(item, index))}\n </div>\n );\n }\n\n const {\n rowHeight,\n initalRowHeight = 38,\n overscan = 100,\n overscanTop,\n overscanBottom,\n } = (virtual instanceof Object ? virtual : undefined) ?? {};\n\n const itemHeight = rowHeight ?? (averageItemHeight(container.current) || initalRowHeight);\n const from = container.current?.clientHeight\n ? Math.max(\n 0,\n Math.floor((container.current.scrollTop - (overscanTop ?? overscan)) / itemHeight),\n )\n : 0;\n const to = container.current?.clientHeight\n ? Math.min(\n items.length,\n Math.ceil(\n (container.current.scrollTop +\n container.current.clientHeight +\n (overscanBottom ?? overscan)) /\n itemHeight,\n ),\n )\n : 1;\n const before = from * itemHeight;\n const after = (items.length - to) * itemHeight;\n\n return (\n <div\n {...props}\n onScroll={(event) => {\n update();\n props.onScroll?.(event);\n }}\n ref={container}\n css={{\n overflowY: 'auto',\n display: 'grid',\n }}\n >\n <div data-virtual-before style={{ height: before }} />\n {items.slice(from, to).map((item, index) => children(item, index + from))}\n <div data-virtual-after style={{ height: after }} />\n </div>\n );\n}\n\nfunction averageItemHeight(container: HTMLDivElement | null) {\n if (!container?.children.length) {\n return undefined;\n }\n\n const heights = Array.from(container.children)\n .slice(1, -1)\n .map((child) => child.clientHeight);\n return heights.reduce((a, b) => a + b, 0) / heights.length;\n}\n","export function throttle<Args extends any[]>(\n function_: (...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 function_(...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 { memo, useEffect, useLayoutEffect, useState } from 'react';\nimport { TableMemoContextProvider } from '../hooks/useTableMemo';\nimport { useTheme } from '../hooks/useTheme';\nimport { useTableStateStorage } from '../internalState/tableStateStorage';\nimport { useTableState } from '../internalState/useTableState';\nimport {\n ColumnContext,\n TableContext,\n TableResetContext,\n useTableContext,\n} from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport type { 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 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((state) => state.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 styles: column.styles,\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((state) => state.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 styles = useTheme((theme) => theme.styles);\n const stickyHeader = table.useState((state) => state.props.stickyHeader);\n const stickyFooter = table.useState((state) => state.props.stickyFooter);\n\n const enableSelection = table.useState((state) => state.props.enableSelection);\n const enableColumnSelection = table.useState((state) => state.props.enableColumnSelection);\n const enableExport = table.useState((state) => !!state.props.enableExport);\n const cssVariables = useCssVariables();\n\n const enableClearFiltersButton = table.useState((state) => state.props.enableClearFiltersButton);\n\n useLayoutEffect(() => table.getState().props.debugRender?.('render table inner'));\n\n return (\n <Virtualized\n className={classes?.table}\n css={[cssVariables, defaultClasses.table, styles?.table, hidden && { visibility: 'hidden' }]}\n style={{\n gridTemplateColumns: [\n //\n fullWidth === 'right' || fullWidth === true ? 'auto' : '0',\n 'max-content',\n ...activeColumns.map(\n (column) => columnWidths.get(column.id) ?? column.width ?? 'max-content',\n ),\n fullWidth === 'left' || fullWidth === true ? 'auto' : '0',\n ].join(' '),\n }}\n header={\n <>\n <div\n className={classes?.headerCell}\n css={[\n defaultClasses.headerFill,\n stickyHeader && defaultClasses.sticky,\n stickyHeader instanceof Object && stickyHeader,\n styles?.headerCell,\n ]}\n />\n\n <div\n className={classes?.headerCell}\n css={[\n defaultClasses.headerCell,\n stickyHeader && defaultClasses.sticky,\n stickyHeader instanceof Object && stickyHeader,\n styles?.headerCell,\n ]}\n >\n {enableSelection && <SelectComponent />}\n\n {enableColumnSelection && <ColumnSelection />}\n\n {enableExport && <Export />}\n\n {(enableSelection || enableColumnSelection || enableExport) && (\n <>\n <div css={{ flex: 1 }} />\n <ResizeHandleView />\n </>\n )}\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={[\n defaultClasses.headerFill,\n stickyHeader && defaultClasses.sticky,\n stickyHeader instanceof Object && stickyHeader,\n styles?.headerCell,\n ]}\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 styles?.footerCell,\n ]}\n />\n <div\n className={classes?.footerCell}\n css={[\n defaultClasses.footerFill,\n stickyFooter && defaultClasses.stickyBottom,\n stickyFooter instanceof Object && stickyFooter,\n styles?.footerCell,\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 styles?.footerCell,\n ]}\n />\n </>\n )}\n </>\n }\n >\n {(itemIds, startIndex) =>\n itemIds.map((itemId, index) => (\n <Row key={itemId} itemId={itemId} rowIndex={startIndex + index} />\n ))\n }\n </Virtualized>\n );\n});\n","import { useEffect, useState } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport type { Draft } from 'immer';\nimport { Queue } from '../misc/queue';\nimport type { InternalTableState, SerializableValue } from '../types';\n\nconst KEYS = [\n 'sort',\n 'selection',\n 'expanded',\n 'hiddenColumns',\n 'filterValues',\n 'columnWidths',\n 'columnOrder',\n] 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 (Array.isArray(value)) {\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 // eslint-disable-next-line no-inner-declarations\n function applyUpdate(state: Draft<InternalTableState<any>>, key: (typeof KEYS)[number]) {\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 const filter = state.filters.get(id);\n\n if (filter && (filter.persist ?? filter.value === undefined)) {\n state.filterValues.set(id, value);\n state.filters.get(id)?.onChange?.(value);\n }\n }\n } else {\n if (\n key === 'expanded' ||\n key === 'hiddenColumns' ||\n key === 'selection' ||\n key === 'sort'\n ) {\n if (state.props[key] !== undefined) {\n return;\n }\n\n state.props[\n `on${\n (key.slice(0, 1).toUpperCase() + key.slice(1)) as Capitalize<typeof key>\n }Change`\n ]?.(data[key]);\n }\n\n state[key] = data[key];\n }\n }\n }\n\n table.update((state) => {\n for (const key of KEYS.filter((key) => key !== 'filterValues')) {\n applyUpdate(state, key);\n }\n });\n\n // First apply other keys and wait until changes take effect. Filters cannot be applied to hidden columns.\n await new Promise((resolve) => {\n setTimeout(resolve);\n });\n table.update((state) => applyUpdate(state, 'filterValues'));\n } catch (error) {\n console.error('Failed to load table state:', error);\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' ||\n key === 'hiddenColumns' ||\n key === 'selection' ||\n 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","export class Queue {\n private q = new Array<{\n job: () => Promise<any>;\n resolve: (value: any) => void;\n reject: (reason?: any) => void;\n }>();\n\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 (error) {\n next.reject(error);\n }\n }\n\n this.isRunning = false;\n }\n}\n","import { castDraft } from 'immer';\nimport { useEffect, useMemo, useState } from 'react';\nimport { Store } from 'schummar-state/react';\nimport type { 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>(\n _props: TableProps<T>,\n): [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?.('table');\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 { castDraft } from 'immer';\nimport { useEffect } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport { castArray, flatMap, orderBy } from '../misc/helpers';\nimport type { 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 (\n [\n items = [],\n id,\n parentId,\n revealFiltered,\n externalSort,\n sort,\n filters,\n filterValues,\n activeColumns,\n ],\n draft,\n ) => {\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 =\n item.parentId !== undefined && item.parentId !== null\n ? lookup.get(item.parentId)\n : 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 || item.parentId === null));\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 && item.parentId !== null) {\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 && item.parentId !== null) {\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 type { Column, Id, InternalColumn, InternalTableProps, TableProps } from '../types';\nimport { defaultSerializer } from '../exporters/serializer';\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', [\n (item: T) => item[props.parentId as keyof T] as unknown as Id | undefined,\n props.parentId,\n ]);\n } else {\n parentId = noopParentId;\n }\n\n const columnProps = props.columnProps && cache('columnProps', props.columnProps);\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 globalDefaults = props.defaultColumnProps;\n const mapColumn = <V>(\n {\n id: _id,\n header,\n exportHeader,\n footer,\n value,\n renderCell,\n exportCell,\n sortBy,\n disableSort,\n hidden,\n classes,\n styles,\n filter,\n 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 const defaults = { ...globalDefaults, ...columnProps?.(id) };\n\n return {\n id,\n header: header ?? defaults?.header ?? null,\n exportHeader: exportHeader ?? defaults?.exportHeader ?? id,\n footer: footer ?? defaults?.footer ?? null,\n value: cache(`columns.${cacheKey}.value`, value),\n renderCell: cache(\n `columns.${cacheKey}.renderCell`,\n renderCell ?? defaults?.renderCell ?? asString,\n ),\n exportCell: exportCell ?? defaults?.exportCell ?? defaultSerializer,\n sortBy: (\n sortBy ??\n defaults?.sortBy ?? [\n (v) =>\n typeof v === 'number' || v instanceof Date\n ? v\n : v === null || v === undefined\n ? ''\n : String(v),\n ]\n ).map((function_, i) => cache(`columns.${cacheKey}.sortBy.${i}`, function_)),\n disableSort,\n hidden: hidden ?? defaults?.hidden,\n classes: classes ?? defaults?.classes,\n styles: styles ?? defaults?.styles,\n filter: filter ?? defaults?.filter,\n width: width ?? defaults?.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)\n ? cache('rowAction', props.rowAction)\n : props.rowAction;\n\n const rowDetails =\n props.rowDetails instanceof Function || Array.isArray(props.rowDetails)\n ? cache('rowDetails', props.rowDetails)\n : props.rowDetails;\n\n return {\n ...props,\n id,\n parentId,\n columns,\n columnProps,\n wrapCell,\n rowAction,\n rowDetails,\n enableSelection: props.enableSelection ?? true,\n selectSyncChildren: props.selectSyncChildren ?? true,\n stickyHeader: props.stickyHeader ?? true,\n stickyFooter: props.stickyFooter ?? true,\n enableExport: props.enableExport ?? false,\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","export function defaultSerializer(x: unknown): string | number | Date {\n if (x instanceof Date || typeof x === 'number' || typeof x === 'string') {\n return x;\n }\n\n return JSON.stringify(x);\n}\n","import { useEffect } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport { intersect } from '../misc/helpers';\nimport type { InternalTableState } from '../types';\n\nexport function cleanupState<T>(state: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n state.addReaction(\n (state) =>\n [\n state.props.columns,\n state.itemsById,\n state.activeItemsById,\n state.activeColumns,\n ] 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 type { Store } from 'schummar-state/react';\nimport { orderBy } from '../misc/helpers';\nimport type { 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) => !(column.hidden ?? 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 type { Store } from 'schummar-state/react';\nimport { getAncestors, orderBy } from '../misc/helpers';\nimport type { 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 (\n [...expanded].some(\n (id) => id !== withMostAncestors?.id && !withMostAncestors?.ancestors.has(id),\n )\n ) {\n expanded = withMostAncestors?.ancestors ?? new Set();\n state.expanded = expanded;\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 type { Store } from 'schummar-state/react';\nimport type { 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 (\n item.parentId !== undefined &&\n item.parentId !== null &&\n newSelection.has(item.parentId)\n ) {\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 { useTheme } from '../hooks/useTheme';\nimport { useTableContext } from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\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 table.getState().props.onReset?.('filters');\n });\n }}\n >\n {textClearFilters}\n </Button>\n </div>\n );\n}\n","import { useTheme } from '../hooks/useTheme';\nimport { cx } from '../misc/helpers';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\n\nexport function ColumnFooter() {\n const table = useTableContext();\n const columnId = useColumnContext();\n const stickyFooter = table.useState((state) => state.props.stickyFooter);\n const columnStyleOverride = table.useState((state) => state.columnStyleOverride.get(columnId), {\n throttle: 16,\n });\n const columnClasses = table.useState(\n (state) => state.activeColumns.find((column) => column.id === columnId)?.classes?.footerCell,\n );\n const classes = useTheme((theme) => theme.classes?.footerCell);\n const columnCss = table.useState(\n (state) => state.activeColumns.find((column) => column.id === columnId)?.styles?.footerCell,\n );\n const styles = useTheme((theme) => theme.styles?.footerCell);\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, columnClasses)}\n css={[\n defaultClasses.footerCell,\n stickyFooter && defaultClasses.stickyBottom,\n stickyFooter instanceof Object && stickyFooter,\n styles,\n columnCss,\n ]}\n style={columnStyleOverride}\n >\n {content}\n </div>\n );\n}\n","import { castDraft } from 'immer';\nimport type React from 'react';\nimport { useEffect, useRef } from 'react';\nimport { StoreScope } from 'schummar-state/react';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport { useTheme } from '../hooks/useTheme';\nimport { cx } from '../misc/helpers';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport type { Id } from '../types';\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((state) => state.props.enableColumnReorder);\n const columnStyleOverride = table.useState((state) => state.columnStyleOverride.get(columnId), {\n throttle: 16,\n });\n const stickyHeader = table.useState((state) => state.props.stickyHeader);\n const classes = useTheme((theme) => theme.classes?.headerCell);\n const styles = useTheme((theme) => theme.styles?.headerCell);\n\n const { header, columnClasses, columnStyles } = table.useState((state) => {\n const column = state.activeColumns.find((column) => column.id === columnId);\n return {\n header: column?.header,\n columnClasses: column?.classes?.headerCell,\n columnStyles: column?.styles?.headerCell,\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 }, [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\n .getState()\n .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(event: React.PointerEvent) {\n const div = ref.current;\n if (!div) return;\n draggingStart.current = { mouseX: event.clientX, bounds: div.getBoundingClientRect() };\n }\n\n // When mouse moves while clicked: Calculate transforms\n function onPointerMove(event: React.PointerEvent) {\n table.update((state) => {\n const div = ref.current;\n if (\n !div ||\n draggingStart.current === undefined ||\n Math.abs(event.clientX - draggingStart.current.mouseX) < 5\n )\n return;\n\n event.stopPropagation();\n div.setPointerCapture(event.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:\n '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 = `${\n draggingStart.current.bounds.left + event.clientX - draggingStart.current.mouseX\n }px`;\n\n // Calculate target index\n const index = state.columnOrder.indexOf(columnId);\n const targetIndex = calcTargetIndex(\n div.offsetLeft + event.clientX - draggingStart.current.mouseX,\n );\n\n // Apply transforms to each column\n const columns = table.getState().columnOrder.map((id, index) => ({\n id,\n index,\n width: store.getState().items.get(id)?.offsetWidth ?? 0,\n }));\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\n .slice(index + 1, targetIndex + 1)\n .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(event: 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(\n div.offsetLeft + event.clientX - draggingStart.current.mouseX,\n );\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, columnClasses)}\n css={[\n defaultClasses.headerCell,\n {\n position: 'relative',\n userSelect: 'none',\n },\n stickyHeader && defaultClasses.sticky,\n stickyHeader instanceof Object && stickyHeader,\n styles,\n columnStyles,\n ]}\n style={columnStyleOverride}\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 type React from 'react';\nimport type { HTMLProps } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\n\nexport function ResizeHandle() {\n const table = useTableContext();\n const columnId = useColumnContext();\n const enabled = table.useState((state) => state.props.enableColumnResize);\n\n function onPointerDown(event: React.PointerEvent) {\n event.stopPropagation();\n\n const div = event.target as HTMLDivElement;\n div.setPointerCapture(event.pointerId);\n }\n\n function onPointerMove(event: React.PointerEvent) {\n event.stopPropagation();\n\n const div = event.target as HTMLDivElement;\n if (!div.hasPointerCapture(event.pointerId)) return;\n\n const parent = div.parentElement as HTMLDivElement;\n const width = Math.max(event.clientX - parent.getBoundingClientRect().left + 5, 50);\n\n table.update((state) => {\n state.columnWidths.set(columnId, `${width}px`);\n });\n }\n\n function onPointerUp(event: React.PointerEvent) {\n event.stopPropagation();\n\n const div = event.target as HTMLDivElement;\n div.releasePointerCapture(event.pointerId);\n }\n\n function onDoubleClick(event: React.MouseEvent) {\n table.update((state) => {\n if (event.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({\n enabled,\n ...props\n}: HTMLProps<HTMLDivElement> & { enabled?: boolean }) {\n const className = useTheme((theme) => theme.classes?.columnDivider);\n const styles = useTheme((theme) => theme.styles?.columnDivider);\n\n return (\n <div\n className={className}\n css={[\n {\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 styles,\n ]}\n {...props}\n />\n );\n}\n","import type { ReactNode } from 'react';\nimport type React from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\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(event: 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 =\n event.getModifierState('Control') || off\n ? table.getState().sort.filter((s) => s.columnId !== columnId)\n : [];\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 event.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={(event) => toggle(event)}\n onContextMenu={(event) => toggle(event, 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 { useContext, useState } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { TableResetContext, useTableContext } from '../misc/tableContext';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport type { InternalColumn } from '../types';\nimport { FormControlLabel } from './formControlLabel';\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 showAll = useTheme((t) => t.text.showAllColumns);\n const hideAll = useTheme((t) => t.text.hideAllColumns);\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((state) => state.props.columns);\n const hiddenColumns = table.useState((state) => state.hiddenColumns);\n\n const [anchorElement, setAnchorElement] = useState<Element | null>(null);\n\n const toggle = (column?: InternalColumn<T, unknown>, state?: boolean) => {\n const {\n props: { hiddenColumns: controlledHiddenColumns, onHiddenColumnsChange },\n } = table.getState();\n\n const newValue = new Set(hiddenColumns);\n\n for (const columnId of column ? [column.id] : columns.map((column) => column.id)) {\n if (state ?? hiddenColumns.has(columnId)) {\n newValue.delete(columnId);\n } else {\n newValue.add(columnId);\n }\n }\n\n if (!controlledHiddenColumns) {\n table.update((state) => {\n state.hiddenColumns = newValue;\n });\n }\n\n onHiddenColumnsChange?.(newValue);\n };\n\n const allVisible = columns.every((column) => !hiddenColumns.has(column.id));\n\n return (\n <>\n <IconButton onClick={(event) => setAnchorElement(anchorElement ? null : event.currentTarget)}>\n <Settings />\n </IconButton>\n\n <Popover\n anchorEl={anchorElement}\n open={!!anchorElement}\n onClose={() => setAnchorElement(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 <div css={{ margin: '0.5em 0', display: 'flex', gap: '0.5em' }}>\n <Button variant=\"outlined\" onClick={() => toggle(undefined, !allVisible)}>\n {allVisible ? hideAll : showAll}\n </Button>\n\n <Button variant=\"outlined\" onClick={reset}>\n {resetAll}\n </Button>\n </div>\n\n {columns.map((column) => (\n <FormControlLabel\n key={column.id}\n control={\n <Checkbox\n checked={!(column.hidden ?? hiddenColumns.has(column.id))}\n onChange={() => toggle(column)}\n disabled={column.hidden !== undefined}\n />\n }\n label={column.header}\n ></FormControlLabel>\n ))}\n </div>\n </Popover>\n </>\n );\n}\n","import { useContext, useState } from 'react';\nimport { ExportOptions, ExporterEntry } from '../exporters/exporter';\nimport { useTheme } from '../hooks/useTheme';\nimport { useTableContext } from '../misc/tableContext';\nimport { TableSettingsContext } from '../misc/tableSettings';\nimport { useCssVariables } from '../theme/useCssVariables';\n\nexport function Export<T>(): JSX.Element {\n const { exporters: contextExporters } = useContext(TableSettingsContext);\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 ExportIcon = 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 { all, exporters } = table.useState((state): ExportOptions => {\n if (typeof state.props.enableExport === 'boolean') {\n return {\n all: false,\n exporters: contextExporters,\n };\n }\n\n return state.props.enableExport;\n });\n\n const [anchor, setAnchor] = useState<Element | null>(null);\n\n function execute({ action, exporter }: ExporterEntry) {\n const { activeColumns, activeItems, items } = table.getState();\n const columns = activeColumns.map((column) => column.exportHeader);\n const rows = (all ? items : activeItems).map((item) =>\n activeColumns.map((column) => column.exportCell(column.value(item.value), item.value)),\n );\n\n if (action === 'copy') {\n const data = exporter.exportToString(columns, rows);\n navigator.clipboard.writeText(data);\n } else {\n const blob = exporter.exportToBlob(columns, rows);\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = `export.${exporter.fileEnding}`;\n document.body.append(a);\n a.click();\n a.remove();\n URL.revokeObjectURL(url);\n }\n }\n\n return (\n <>\n <IconButton onClick={(event) => setAnchor(anchor ? null : event.currentTarget)}>\n <ExportIcon 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\n {exporters.map((entry, index) => (\n <Button\n key={index}\n startIcon={entry.action === 'copy' ? <Clipboard /> : <ExportIcon />}\n onClick={() => execute(entry)}\n >\n {entry.action === 'copy' ? exportCopy : exportDownload} (.{entry.exporter.type})\n </Button>\n ))}\n </div>\n </Popover>\n </>\n );\n}\n","import { memo, useEffect, useLayoutEffect, useRef } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { calcClassNames, calcCss } from '../misc/calcClassNames';\nimport { cx, getAncestors } from '../misc/helpers';\nimport { ColumnContext, useTableContext } from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport type { Id } from '../types';\nimport { Cell } from './cell';\nimport { Details } from './details';\nimport { ExpandControl } from './expandControl';\nimport { SelectComponent } from './selectComponent';\n\nexport const Row = memo(function Row<T>({\n itemId,\n rowIndex,\n}: {\n itemId: Id;\n rowIndex: number;\n}): JSX.Element | null {\n const table = useTableContext<T>();\n const divRef = useRef<HTMLDivElement>(null);\n const detailsDivRef = useRef<HTMLDivElement>(null);\n\n const classes = useTheme((t) => t.classes);\n const styles = useTheme((t) => t.styles);\n\n const {\n className,\n css_,\n indent,\n hasChildren,\n hasDeferredChildren,\n columnIds,\n enableSelection,\n rowAction,\n hasDetails,\n } = table.useState((state) => {\n const item = state.activeItemsById.get(itemId);\n\n return {\n className: cx(...calcClassNames(classes, item?.value, rowIndex)),\n css_: calcCss<T>(styles, item?.value, 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\n ? item\n ? state.props.rowAction(item.value, rowIndex)\n : null\n : state.props.rowAction,\n hasDetails:\n state.props.rowDetails instanceof Function\n ? item\n ? !!state.props.rowDetails(item.value, rowIndex)\n : null\n : !!state.props.rowDetails,\n };\n });\n\n useLayoutEffect(() => {\n function update() {\n table.update((state) => {\n if (!divRef.current) {\n return;\n }\n\n const h1 = divRef.current.offsetHeight;\n const h2 =\n detailsDivRef.current && document.contains(detailsDivRef.current)\n ? detailsDivRef.current.offsetHeight\n : 0;\n\n state.rowHeights.set(itemId, h1 + h2);\n });\n }\n\n update();\n\n const handles = [divRef.current, detailsDivRef.current]\n .filter((x): x is HTMLDivElement => !!x)\n .map((div) => {\n const o = new ResizeObserver(update);\n o.observe(div);\n return () => o.disconnect();\n });\n\n return () => {\n handles.forEach((h) => h());\n };\n }, [table, itemId, divRef.current, detailsDivRef.current]);\n\n useLayoutEffect(() => table.getState().props.debugRender?.('render row', itemId));\n\n return (\n <div css={{ display: 'contents' }}>\n <div className={className} css={[defaultClasses.cellFill, css_]} ref={divRef} />\n\n <div className={className} css={[defaultClasses.cell, defaultClasses.firstCell, css_]}>\n {indent > 0 && <div css={{ width: indent * 20 }} />}\n\n {enableSelection && <SelectComponent itemId={itemId} />}\n\n {(hasChildren || hasDeferredChildren || hasDetails) && (\n <ExpandControl itemId={itemId} hasDeferredChildren={hasDeferredChildren} />\n )}\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, css_]} />\n\n <Details ref={detailsDivRef} itemId={itemId} rowIndex={rowIndex} />\n </div>\n );\n});\n","import type { MemoizedTableTheme } from '../types';\n\nexport function calcClassNames<T>(\n classes: MemoizedTableTheme<T>['classes'] | undefined,\n item: T,\n index: number,\n) {\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 function calcCss<T>(\n styles: MemoizedTableTheme<T>['styles'] | undefined,\n item: T | undefined,\n index: number,\n) {\n return [\n styles?.cell instanceof Function\n ? item !== undefined\n ? styles.cell(item, index)\n : undefined\n : styles?.cell,\n index % 2 === 0 && styles?.evenCell,\n index % 2 === 1 && styles?.oddCell,\n ];\n}\n","import type { ReactNode } from 'react';\nimport { memo, useLayoutEffect } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { calcClassNames, calcCss } from '../misc/calcClassNames';\nimport { cx } from '../misc/helpers';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport type { Id } from '../types';\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), {\n throttle: 16,\n });\n\n useLayoutEffect(() => table.getState().props.debugRender?.('render cell', itemId, columnId));\n const className = useTheme((t) => cx(...calcClassNames(t.classes, item?.value, rowIndex)));\n const styles = useTheme((t) => calcCss<T>(t.styles, item?.value, 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, styles]} style={columnStyleOverride}>\n {wrapCell(content, column.value(item.value), item.value, rowIndex)}\n </div>\n );\n});\n","import { forwardRef } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useTableContext } from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { Id } from '../types';\n\nexport const Details = forwardRef<\n HTMLDivElement,\n {\n itemId: Id;\n rowIndex: number;\n }\n>(function Details({ itemId, rowIndex }, ref) {\n const table = useTableContext<unknown>();\n const classes = useTheme((t) => t.classes);\n const styles = useTheme((t) => t.styles);\n\n const { details, className, css } = table.useState((state) => {\n const item = state.activeItemsById.get(itemId);\n\n return {\n details: state.expanded.has(itemId)\n ? state.props.rowDetails instanceof Function\n ? item\n ? state.props.rowDetails(item.value, rowIndex)\n : null\n : state.props.rowDetails\n : undefined,\n className:\n classes?.details instanceof Function\n ? classes.details(item?.value, rowIndex)\n : classes?.details,\n css:\n styles?.details instanceof Function\n ? styles.details(item?.value, rowIndex)\n : styles?.details,\n };\n });\n\n return details ? (\n <div ref={ref} className={className} css={[defaultClasses.details, css]}>\n {details}\n </div>\n ) : null;\n});\n","import { useTheme } from '../hooks/useTheme';\nimport { getAncestors, getDescendants } from '../misc/helpers';\nimport { useTableContext } from '../misc/tableContext';\nimport type { Id } from '../types';\n\nexport function ExpandControl<T>({\n itemId,\n hasDeferredChildren,\n}: {\n itemId: Id;\n hasDeferredChildren?: boolean;\n}): 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(\n (state) => !!state.activeItemsById.get(itemId)?.children.length,\n );\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\n const item = activeItemsById.get(itemId);\n for (const descendant of item ? getDescendants(item) : []) {\n newExpanded.delete(descendant);\n }\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 type React from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { getAncestors, getDescendants } from '../misc/helpers';\nimport { useTableContext } from '../misc/tableContext';\nimport type { Id } from '../types';\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(event: React.ChangeEvent) {\n const mouseEvent = event.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 type { HTMLProps, ReactNode } from 'react';\nimport { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { useTableContext } from '../misc/tableContext';\nimport { throttle } from '../misc/throttle';\nimport type { Id } from '../types';\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')\n 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((state) => state.props.virtual);\n const probeRef = useRef<HTMLDivElement>(null);\n const [, setId] = useState({});\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 =\n rowHeight ??\n state.rowHeights.get(itemId) ??\n initalRowHeight ??\n (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 let to = itemIds.length;\n let before = 0;\n let 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 update = useMemo(() => throttle(() => setId({}), throttleScroll), [throttleScroll]);\n\n useEffect(() => {\n if (!virtual || !probeRef.current) return;\n\n window.addEventListener('scroll', update, true);\n window.addEventListener('resize', update, true);\n return () => {\n window.removeEventListener('scroll', update, true);\n window.removeEventListener('resize', update, true);\n };\n }, [update, virtual]);\n\n useEffect(() => update.cancel, [update]);\n\n useLayoutEffect(() =>\n table.getState().props.debugRender?.(`Virtualalized render ${from} to ${to}`),\n );\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","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 type { 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={(event) => onChange(event.target.value)}\n endIcon={\n <IconButton onClick={() => onChange('')}>{!value ? <Search /> : <Clear />}</IconButton>\n }\n placeholder={placeholder}\n />\n </div>\n );\n}\n"],"mappings":"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","names":["import_react","import_react","length","v","p","throttle","eq","throttleFn","e","require$$0","h","n","p","r","u","t","q","shimModule","require$$1","withSelectorModule","useSyncExternalStoreWithSelector","eq","BaseStore","Store","React","__spreadValues","import_react","import_react","className","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","className","import_jsx_runtime","import_react","import_react","import_jsx_runtime","className","import_react","import_jsx_runtime","className","_a","import_react","import_jsx_runtime","css","Store","import_react","import_jsx_runtime","import_react","import_jsx_runtime","Store","memo","t","_a","_b","column","theme","import_react","flatMap","t","_a","_b","n","className","import_jsx_runtime","IconButton","t","Popover","FilterList","ArrowDropDown","filter","import_jsx_runtime","TextField","t","import_immer","import_react","value","onChange","import_react","import_react","import_jsx_runtime","value","import_jsx_runtime","t","import_jsx_runtime","value","Button","t","IconButton","ChevronRight","today","_a","min","max","import_jsx_runtime","value","import_react","import_jsx_runtime","asNumber","t","TextField","import_jsx_runtime","t","minValue","maxValue","value","_a","_b","min","max","import_react","import_jsx_runtime","import_react","throttle","import_jsx_runtime","_a","_b","throttle","import_jsx_runtime","IconButton","t","Checkbox","Search","Clear","value","column","Button","import_react","import_react","value","k","v","q","applyUpdate","_a","_b","id","key","import_immer","import_react","import_immer","import_react","state","sort","column","items","value","id","import_react","_a","_b","_c","_d","_e","_f","id","defaults","v","import_react","state","import_react","state","import_react","import_react","Store","state","import_jsx_runtime","Button","t","import_jsx_runtime","column","import_immer","import_react","import_jsx_runtime","className","_a","import_jsx_runtime","Badge","t","ArrowUpward","index","column","toggle","import_jsx_runtime","column","_a","_b","e","index","import_react","import_jsx_runtime","IconButton","t","Popover","Checkbox","Button","Settings","toggle","column","state","import_react","import_jsx_runtime","Export","Button","t","IconButton","Popover","Clipboard","import_react","import_react","import_jsx_runtime","Cell","column","_a","className","t","import_react","import_jsx_runtime","Details","t","className","css","import_jsx_runtime","IconButton","t","Spinner","ChevronRight","toggle","import_jsx_runtime","Checkbox","t","itemId","toggle","import_jsx_runtime","Row","t","className","h","import_react","import_jsx_runtime","_a","_b","itemIds","h","from","to","before","after","throttle","import_jsx_runtime","t","TableInner","Export","import_jsx_runtime","IconButton","t","Search","Clear","value"]}