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