schummar-table 0.21.2 → 0.21.4

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