schummar-table 0.36.0 → 0.37.1

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/misc/defaults.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/misc/throttle.ts","../../src/components/virtualList.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/details.tsx","../../src/components/expandControl.tsx","../../src/components/selectComponent.tsx","../../src/components/row.tsx","../../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 blocked: { main: '#f44336', light: '#f26257', 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 showAllColumns: 'Show all',\n hideAllColumns: 'Hide all',\n noResults: 'No results',\n exportTitle: 'Export',\n exportCopy: 'To clipboard',\n exportDownload: 'Download',\n today: 'Today',\n thisWeek: 'This week',\n thisMonth: 'This month',\n thisYear: 'This year',\n lastSevenDays: 'Last 7 days',\n lastThirtyDays: 'Last 30 days',\n clearFilters: 'Clear all filters',\n reset: 'Reset',\n loading: 'Loading',\n deselectAll: 'Deselect all',\n resetAll: 'Reset table state',\n rangeMin: 'Min',\n rangeMax: 'Max',\n calendarWeek: 'Wk',\n};\n","import type { TableTheme } from '../../types';\nimport { defaultColors } from './defaultColors';\nimport { defaultComponents } from './defaultComponents';\nimport { defaultIcons } from './defaultIcons';\nimport { defaultTexts } from './defaultTexts';\n\nexport const defaultTableTheme: TableTheme = {\n text: defaultTexts,\n components: defaultComponents,\n icons: defaultIcons,\n colors: defaultColors,\n spacing: '5px',\n};\n","import 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 cellClass = t.classes?.cell;\n const cellStyles = t.styles?.cell;\n const detailsClass = t.classes?.details;\n const detailsStyles = t.styles?.details;\n\n return {\n ...t,\n classes: {\n ...t.classes,\n cell:\n cellClass instanceof Function || Array.isArray(cellClass)\n ? memo('theme.classes.cell', cellClass)\n : cellClass,\n details:\n detailsClass instanceof Function || Array.isArray(detailsClass)\n ? memo('theme.classes.details', detailsClass)\n : detailsClass,\n },\n styles: {\n ...t.styles,\n cell:\n cellStyles instanceof Function || Array.isArray(cellStyles)\n ? memo('theme.styles.cell', cellStyles)\n : cellStyles,\n details:\n detailsStyles instanceof Function || Array.isArray(detailsStyles)\n ? memo('theme.styles.details', detailsStyles)\n : detailsStyles,\n },\n text: {\n ...t.text,\n },\n };\n };\n\n const theme =\n table?.useState((state) => {\n const localTheme = {\n text: state.props.text,\n classes: state.props.classes,\n styles: state.props.styles,\n components: state.props.components,\n icons: state.props.icons,\n colors: state.props.colors,\n spacing: state.props.spacing,\n };\n\n const column = state.activeColumns.find((column) => column.id === columnId);\n const columnsTheme = {\n classes: column?.classes,\n styles: column?.styles,\n };\n\n const theme = mergeThemes(\n defaultTableTheme,\n _globalTableTheme,\n contextTableTheme,\n localTheme,\n columnsTheme,\n ) as TableTheme<T>;\n\n return selector(process(theme));\n }) ??\n emptyStore.useState() ??\n selector(\n process(\n mergeThemes(defaultTableTheme, _globalTableTheme, contextTableTheme) as TableTheme<T>,\n ),\n );\n\n return theme;\n}\n","import type { Id, TableItem } from '../types';\n\nexport const flatMap = <T, S>(array: Iterable<T>, flatMap: (t: T) => S[]): S[] => {\n return [...array].flatMap(flatMap);\n};\n\nexport const orderBy = <T>(\n array: T[],\n selectors: ((t: T) => any)[] = [],\n direction: ('desc' | 'asc')[] = [],\n): T[] => {\n if (selectors.length === 0) selectors = [(t) => t];\n\n return [...array].sort((a, b) => {\n for (let i = 0; i < selectors.length; i++) {\n const _a = selectors[i]?.(a);\n const _b = selectors[i]?.(b);\n const _direction = direction[i] === 'desc' ? -1 : 1;\n if (_a > _b) return _direction;\n if (_a < _b) return -_direction;\n }\n return 0;\n });\n};\n\nexport const uniq = <T>(array: T[]): T[] => {\n const set = new Set<T>();\n for (const t of array) set.add(t);\n return Array.from(set);\n};\n\nexport const intersect = <T>(a: Iterable<T>, b: { has(t: T): boolean }): Set<T> => {\n const result = new Set<T>();\n for (const x of a) if (b.has(x)) result.add(x);\n return result;\n};\n\nexport const getAncestors = <T>(\n activeItemsById: Map<Id, TableItem<T>>,\n ...items: TableItem<T>[]\n): Set<Id> => {\n const result = new Set<Id>();\n\n const find = ({ parentId }: TableItem<T>): void => {\n const parent =\n parentId !== undefined && parentId !== null ? activeItemsById.get(parentId) : undefined;\n if (parent && !result.has(parent.id)) {\n result.add(parent.id);\n find(parent);\n }\n };\n items.forEach(find);\n return result;\n};\n\nexport const getDescendants = <T>(...items: TableItem<T>[]): Set<Id> => {\n const result = new Set<Id>();\n\n const find = (item: TableItem<T>): void => {\n for (const child of item.children) {\n if (!result.has(child.id)) {\n result.add(child.id);\n find(child);\n }\n }\n };\n items.forEach(find);\n return result;\n};\n\nexport const identity = (x: unknown): any => x;\n\nexport const asString = (x: unknown): string => {\n if (Array.isArray(x)) return x.map(asString).join(', ');\n if (x instanceof Object) return JSON.stringify(x);\n return String(x ?? '');\n};\n\nexport const asStringOrArray = (x: unknown): string | string[] => {\n if (Array.isArray(x)) return x.map(asString);\n return asString(x);\n};\n\nexport const asNumber = (x: unknown): number | null => {\n const n = Number(x);\n return Number.isNaN(n) ? null : n;\n};\n\nexport const asNumberOrArray = (x: unknown): number | null | (number | null)[] => {\n if (Array.isArray(x)) return x.map(asNumber);\n return asNumber(x);\n};\n\nexport const defaultEquals = (a: unknown, b: unknown): boolean => a === b;\n\nexport const subStringMatch = (a: string, b: string): boolean =>\n a.toLowerCase().includes(b.toLowerCase());\n\nexport const castArray = <T>(a: T | T[]) => (Array.isArray(a) ? a : [a]);\n\nexport const cx = (\n ...classNames: (string | false | undefined | null | Record<string, boolean>)[]\n) =>\n classNames\n .flatMap((entry) => {\n if (!entry) return [];\n if (typeof entry === 'string') return [entry];\n return Object.entries(entry)\n .filter(([, predicate]) => predicate)\n .map(([className]) => className);\n })\n .join(' ');\n","import { useTheme } from '../hooks/useTheme';\n\nexport function useCssVariables() {\n return useTheme(({ spacing, colors }) => {\n return {\n '--spacing': spacing,\n '--primaryMain': colors.primary.main,\n '--primaryLight': colors.primary.light,\n '--primaryContrastText': colors.primary.contrastText,\n '--secondaryMain': colors.secondary.main,\n '--secondaryLight': colors.secondary.light,\n '--secondaryContrastText': colors.secondary.contrastText,\n '--blockedMain': colors.blocked.main,\n '--blockedLight': colors.blocked.light,\n '--blockedContrastText': colors.blocked.contrastText,\n };\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","export function defaults<T extends object>(first: T, ...more: Partial<T>[]): T {\n return more.reduce<T>((acc, source) => {\n const copy = { ...acc };\n\n for (const [key, value] of Object.entries(source)) {\n copy[key as keyof T] ??= value as any;\n }\n\n return copy;\n }, first);\n}\n","import { Fragment, useMemo, useState } from 'react';\n\nconst className = 'schummar-table-date-input';\n\nconst defaultDate = new Date(1970, 0, 1);\n\nconst isIncludedType = (type: Intl.DateTimeFormatPartTypes): type is 'day' | 'month' | 'year' =>\n type === 'day' || type === 'month' || type === 'year';\n\nconst defaultLengths = {\n day: 2,\n month: 2,\n year: 4,\n};\n\nconst maxLengths = {\n day: 2,\n month: 2,\n year: Number.POSITIVE_INFINITY,\n};\n\nconst length = (type: 'day' | 'month' | 'year', value: string) =>\n Math.max(value.length, defaultLengths[type]);\n\nconst tabNext = (event: Element) => {\n const all = Array.from(document.querySelectorAll(`.${className}`));\n const index = all.indexOf(event);\n const next = all[(index + 1) % all.length];\n\n if (next instanceof HTMLElement) {\n next.focus();\n }\n};\n\nexport function DateInput({\n value,\n onChange,\n locale,\n}: {\n value: Date | null;\n onChange: (date: Date | null) => void;\n locale?: string;\n}) {\n const [override, setOverride] = useState<{ type: string; value: string }>();\n\n const commit = () => {\n if (!override) {\n return;\n }\n\n setOverride(undefined);\n\n if (!override.value) {\n onChange(null);\n return;\n }\n\n const newValue = value ? new Date(value) : new Date();\n switch (override.type) {\n case 'day': {\n newValue.setDate(Number(override.value));\n break;\n }\n\n case 'month': {\n newValue.setMonth(Number(override.value) - 1);\n break;\n }\n\n case 'year': {\n newValue.setFullYear(Number(override.value));\n break;\n }\n\n default: {\n break;\n }\n }\n\n onChange(newValue);\n };\n\n const format = useMemo(\n () =>\n new Intl.DateTimeFormat(locale, {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n }),\n [locale],\n );\n const parts = format.formatToParts(value ?? defaultDate);\n const isEmpty = !value;\n\n return (\n <div\n css={{\n display: 'flex',\n alignItems: 'baseline',\n }}\n >\n {parts.map(({ type, value }, index) => (\n <Fragment key={index}>\n {isIncludedType(type) ? (\n <input\n className={className}\n css={{\n boxSizing: 'content-box',\n overflow: 'visible',\n border: 'none',\n borderBottom: '2px solid transparent',\n outline: 'none',\n fontSize: 'inherit',\n\n '&:focus': {\n borderBottom: '2px solid var(--primaryMain)',\n },\n }}\n style={{\n width: `${length(type, value)}ch`,\n }}\n placeholder={''.padEnd(length(type, value), '0')}\n value={override?.type === type ? override.value : !isEmpty ? value : ''}\n onChange={(event) => {\n setOverride({ type, value: event.target.value });\n if (event.target.value.length >= maxLengths[type]) {\n setTimeout(() => tabNext(event.target));\n }\n }}\n onFocus={(event) => event.target.select()}\n onBlur={commit}\n />\n ) : type === 'literal' ? (\n <span>{value}</span>\n ) : null}\n </Fragment>\n ))}\n </div>\n );\n}\n","import { useTheme } from '../hooks/useTheme';\nimport type { TableTheme } from '../types';\n\nexport interface TextProps {\n id: keyof TableTheme['text'];\n}\n\nexport function Text({ id }: TextProps) {\n const text = useTheme((t) => t.text[id]);\n\n return <>{text}</>;\n}\n","import { DateObj, useDayzed } from 'dayzed';\nimport {\n Fragment,\n ReactNode,\n createContext,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { defaults } from '../misc/defaults';\nimport { gray } from '../theme/defaultTheme/defaultClasses';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport { DateInput } from './dateInput';\nimport { Text } from './text';\nimport { Interpolation, Theme } from '@emotion/react';\n\nexport type DateRange = { min: Date; max: Date };\n\nexport type DatePickerQuickOption =\n | 'today'\n | 'thisWeek'\n | 'thisMonth'\n | 'thisYear'\n | 'lastSevenDays'\n | 'lastThirtyDays'\n | { label: ReactNode; value: Date | DateRange | (() => Date | DateRange) }\n | ((onChange: (value: Date | DateRange | null) => void) => ReactNode);\n\nexport type DatePickerProps = {\n /** Currently selected day or range of days. */\n value: Date | DateRange | null;\n /** Callback for when the day (range) changes. */\n onChange: (value: Date | DateRange | null) => void;\n /** If enabled, ranges can be selected. */\n rangeSelect?: boolean;\n /** Which locale to use to render the calendar. */\n locale?: string;\n /** Which day of the week should be in the first column. (0=Sunday, 1=Monday, ...)\n * @default 1\n */\n firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n /** Which month to show initially */\n defaultDateInView?: Date;\n /** Show buttons to quickly select suggested dates or date ranges */\n quickOptions?: DatePickerQuickOption[];\n /** Minimum selectable date */\n /** Date ranges that are visually marked as blocked */\n blockedRanges?: DateRange[];\n minDate?: Date;\n /** Maximum selectable date */\n maxDate?: Date;\n /** Whether to show the calendar week in the first column */\n showCalendarWeek?: boolean;\n};\n\nconst DatePickerContext = createContext<Partial<Omit<DatePickerProps, 'value' | 'onChange'>>>({});\n\nexport function DatePickerProvider({\n children,\n ...props\n}: Partial<Omit<DatePickerProps, 'value' | 'onChange'>> & { children?: ReactNode }) {\n const value = useMemo(() => props, [JSON.stringify(props)]);\n\n return <DatePickerContext.Provider value={value}>{children}</DatePickerContext.Provider>;\n}\n\nconst weekDays = [0, 1, 2, 3, 4, 5, 6] as const;\n\n/** Rounds a date down to the start of the day. */\nexport const startOfDay = (d: Date) => new Date(d.getFullYear(), d.getMonth(), d.getDate());\n\n/** Rounds a date up to the end of the day. */\nexport const endOfDay = (d: Date) =>\n new Date(d.getFullYear(), d.getMonth(), d.getDate() + 1, 0, 0, 0, -1);\n\nexport const lastDays = (days: number): DateRange => {\n const now = new Date();\n const min = new Date(now);\n min.setDate(min.getDate() - days + 1);\n\n return {\n min: startOfDay(min),\n max: endOfDay(now),\n };\n};\n\nexport const today = () => lastDays(1);\n\nexport const thisWeek = (delta = 0, firstDayOfWeek = 1): DateRange => {\n const now = new Date();\n const min = new Date(now);\n\n let diff = min.getDay() - firstDayOfWeek;\n if (diff < 0) {\n diff += 7;\n }\n min.setDate(min.getDate() - diff + delta * 7);\n\n const max = new Date(min);\n max.setDate(max.getDate() + 6);\n\n return {\n min: startOfDay(min),\n max: endOfDay(max),\n };\n};\n\nexport const thisMonth = (delta = 0): DateRange => {\n const now = new Date();\n const min = new Date(now);\n min.setDate(1);\n min.setMonth(min.getMonth() + delta);\n const max = new Date(min);\n max.setMonth(max.getMonth() + 1);\n max.setDate(max.getDate() - 1);\n\n return {\n min: startOfDay(min),\n max: endOfDay(max),\n };\n};\n\nexport const thisYear = (delta = 0): DateRange => {\n const now = new Date();\n const min = new Date(now);\n min.setDate(1);\n min.setMonth(0);\n min.setFullYear(min.getFullYear() + delta);\n const max = new Date(min);\n max.setFullYear(max.getFullYear() + 1);\n max.setDate(max.getDate() - 1);\n\n return {\n min: startOfDay(min),\n max: endOfDay(max),\n };\n};\n\nconst MS_PER_DAY = 1000 * 60 * 60 * 24;\nexport const getCalendarWeek = (date: Date): number => {\n // ISO 8601: Week 1 is the week with the first Thursday of the year.\n // https://en.wikipedia.org/wiki/ISO_week_date\n\n const y = date.getFullYear();\n const fdoy = new Date(y, 0, 1);\n const doy = Math.floor(\n (date.getTime() - fdoy.getTime() + (date.getTimezoneOffset() - fdoy.getTimezoneOffset())) /\n MS_PER_DAY,\n );\n const dow = fdoy.getDay();\n const w = Math.floor((10 + doy - dow) / 7);\n\n if (w === 0) {\n return getCalendarWeek(new Date(y - 1, 11, 31));\n }\n\n return w;\n};\n\nexport const commonQuickOptions = {\n today: { label: <Text id=\"today\" />, value: today },\n thisWeek: { label: <Text id=\"thisWeek\" />, value: (props) => thisWeek(0, props.firstDayOfWeek) },\n thisMonth: { label: <Text id=\"thisMonth\" />, value: () => thisMonth() },\n thisYear: { label: <Text id=\"thisYear\" />, value: () => thisYear() },\n lastSevenDays: { label: <Text id=\"lastSevenDays\" />, value: () => lastDays(7) },\n lastThirtyDays: { label: <Text id=\"lastThirtyDays\" />, value: () => lastDays(30) },\n} satisfies Record<\n DatePickerQuickOption & string,\n { label: ReactNode; value: Date | DateRange | ((props: DatePickerProps) => Date | DateRange) }\n>;\n\n/** Returns whether two dates and/or date ranges intersect. Intersection is considered per day. */\nexport function dateIntersect(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 dateClamp(date: Date, min?: Date, max?: Date) {\n if (min && date < min) {\n return min;\n }\n\n if (max && date > max) {\n return max;\n }\n\n return date;\n}\n\nexport function DatePicker(props: DatePickerProps) {\n const context = useContext(DatePickerContext);\n\n const {\n value,\n rangeSelect,\n locale,\n firstDayOfWeek = 1,\n defaultDateInView,\n quickOptions = ['today', 'thisWeek'],\n minDate,\n maxDate,\n showCalendarWeek,\n blockedRanges = [],\n } = defaults<DatePickerProps>(props, context);\n\n function onChange(value: Date | DateRange | null) {\n if (value instanceof Date) {\n value = dateClamp(value, minDate, maxDate);\n } else if (value) {\n value = {\n min: dateClamp(value.min, minDate, maxDate),\n max: dateClamp(value.max, minDate, maxDate),\n };\n }\n\n props.onChange(value);\n }\n\n const Button = useTheme((t) => t.components.Button);\n const IconButton = useTheme((t) => t.components.IconButton);\n const ChevronRight = useTheme((t) => t.icons.ChevronRight);\n const cssVariables = useCssVariables();\n function getDayCssStyles({\n disabled,\n prevMonth,\n nextMonth,\n today,\n blocked,\n selected,\n preSelected,\n }: {\n disabled?: boolean;\n prevMonth?: boolean;\n nextMonth?: boolean;\n today?: boolean;\n blocked?: boolean;\n selected?: boolean;\n preSelected?: boolean;\n }): Interpolation<Theme> {\n return [\n {\n padding: 10,\n border: 'none',\n background: 'transparent',\n cursor: disabled ? undefined : 'pointer',\n font: 'inherit',\n },\n (prevMonth || nextMonth) && {\n color: gray,\n },\n today && {\n outline: '1px solid var(--secondaryMain)',\n },\n blocked && {\n background: 'var(--blockedMain)',\n color: 'var(--blockedContrastText)',\n },\n selected && {\n background: 'var(--primaryMain)',\n color: 'var(--primaryContrastText)',\n },\n blocked &&\n selected && {\n position: 'relative',\n '::before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n background: 'var(--blockedMain)',\n clipPath: 'polygon(0 0, 0 50%, 50% 0)',\n },\n },\n preSelected && {\n background: 'var(--primaryLight)',\n color: 'var(--primaryContrastText)',\n },\n ];\n }\n\n const mountTime = useMemo(() => new Date(), []);\n const [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 const resolvedQuickOptions = [...quickOptions, { label: <Text id=\"reset\" />, value: null }].map(\n (option, index) => {\n if (option instanceof Function) {\n return option((value) => {\n setDirty(undefined);\n onChange(value);\n });\n }\n\n const { label, value } = typeof option === 'string' ? commonQuickOptions[option] : option;\n\n return (\n <Button\n key={index}\n variant=\"text\"\n type=\"button\"\n onClick={() => {\n setDirty(undefined);\n\n if (value instanceof Function) {\n onChange(value(props));\n } else {\n onChange(value);\n }\n }}\n >\n {label}\n </Button>\n );\n },\n );\n\n const { calendars, getBackProps, getForwardProps, getDateProps } = useDayzed({\n onDateSelected: () => undefined,\n firstDayOfWeek,\n showOutsideDays: true,\n date: dateInView,\n onOffsetChanged: (offset) =>\n setDateInView(new Date(dateInView.getFullYear(), dateInView.getMonth() + offset)),\n offset: 0,\n minDate,\n maxDate,\n });\n const now = useMemo(() => startOfDay(new Date()), []);\n\n const formatWeekday = useMemo(() => {\n const { format } = new Intl.DateTimeFormat(locale, { weekday: 'short' });\n return (weekDay: number) =>\n format(new Date(Date.UTC(2021, 7, ((weekDay + firstDayOfWeek) % 7) + 1)));\n }, [locale, firstDayOfWeek]);\n\n useEffect(\n () =>\n setDateInView(\n value === null ? defaultDateInView ?? mountTime : value instanceof Date ? value : value.max,\n ),\n [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 type=\"button\" {...getBackProps({ calendars })}>\n <ChevronRight css={{ transform: 'rotate3d(0, 0, 1, 180deg)' }} />\n </IconButton>\n\n <div css={{ display: 'flex' }}>\n {formatMonth(month)} {formatYear(year)}\n </div>\n\n <IconButton type=\"button\" {...getForwardProps({ calendars })}>\n <ChevronRight />\n </IconButton>\n </div>\n\n <div\n css={{\n justifySelf: 'center',\n display: 'grid',\n gridTemplateColumns: 'repeat(8, max-content)',\n }}\n >\n {showCalendarWeek ? (\n <div\n css={{\n justifySelf: 'center',\n padding: 10,\n borderRight: `1px solid ${gray}`,\n }}\n >\n <Text id=\"calendarWeek\" />\n </div>\n ) : (\n <div />\n )}\n\n {weekDays.map((_v, weekDay) => (\n <div\n key={weekDay}\n css={{\n justifySelf: 'center',\n padding: 10,\n }}\n >\n {formatWeekday(weekDay)}\n </div>\n ))}\n\n {weeks.map((week, index) => {\n const weekStart = week[0] as DateObj;\n const weekEnd = week[6] as DateObj;\n const weekDisabled =\n !rangeSelect ||\n (minDate && weekEnd.date < minDate) ||\n (maxDate && weekStart.date > maxDate);\n\n return (\n <Fragment key={index}>\n {showCalendarWeek ? (\n <button\n type=\"button\"\n css={{\n padding: 10,\n border: 'none',\n background: 'transparent',\n cursor: weekDisabled ? undefined : 'pointer',\n font: 'inherit',\n borderRight: `1px solid ${gray}`,\n }}\n onClick={() => {\n if (weekDisabled) {\n return;\n }\n\n const min = minDate && weekStart.date < minDate ? minDate : weekStart.date;\n const max = maxDate && weekEnd.date > maxDate ? maxDate : weekEnd.date;\n set(min, max);\n }}\n >\n {getCalendarWeek((week[0] as DateObj).date)}\n </button>\n ) : (\n <div />\n )}\n\n {week.map((dateObject, dayIndex) => {\n if (!dateObject) {\n return <div key={dayIndex} />;\n }\n\n const { prevMonth, nextMonth, date } = dateObject;\n const today = startOfDay(date).getTime() === now.getTime();\n const disabled = (minDate && date < minDate) || (maxDate && date > maxDate);\n\n const selected =\n date.getTime() === min?.getTime() ||\n (min && max && dateIntersect(date, { min, max }));\n const preSelected =\n !selected &&\n !disabled &&\n (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 const blocked = blockedRanges.some((range) => dateIntersect(date, range));\n\n return (\n <button\n type=\"button\"\n key={`${index}-${dayIndex}`}\n css={getDayCssStyles({\n disabled,\n prevMonth,\n nextMonth,\n today,\n blocked,\n selected,\n preSelected,\n })}\n {...getDateProps({ dateObj: dateObject })}\n onClick={() => {\n if (dirty) {\n if (min) set(min, date);\n else set(date, max);\n } else {\n set(date);\n }\n }}\n onPointerOver={() => setHovered(date)}\n onPointerOut={() => setHovered(undefined)}\n disabled={disabled}\n >\n {date.getDate()}\n </button>\n );\n })}\n </Fragment>\n );\n })}\n </div>\n </div>\n ))}\n\n <div\n css={{\n marginTop: 'var(--spacing)',\n display: 'grid',\n gridAutoFlow: 'column',\n justifyContent: 'center',\n }}\n >\n {resolvedQuickOptions}\n </div>\n </div>\n );\n}\n","import { useFilter } from '../hooks/useFilter';\nimport type { CommonFilterProps } from '../types';\nimport type { DatePickerProps, DateRange } from './datePicker';\nimport { dateIntersect, DatePicker } from './datePicker';\n\nfunction convertDate(x: unknown): Date | null {\n if (x instanceof Date) return x;\n if (typeof x === 'number' || typeof x === 'string') return new Date(x);\n return null;\n}\n\nfunction convertDateOrRange(x: unknown): Date | DateRange | null {\n if (x instanceof Object && 'min' in x && 'max' in x) {\n const range = {\n min: convertDate((x as any).min),\n max: convertDate((x as any).max),\n };\n return range.min && range.max ? (range as DateRange) : null;\n }\n return convertDate(x);\n}\n\nfunction convertDateOrArray(x: unknown): Date | DateRange | (Date | DateRange)[] | null {\n if (Array.isArray(x)) return x.map(convertDateOrRange).filter(Boolean) as (Date | DateRange)[];\n return convertDateOrRange(x);\n}\n\nexport function DateFilter<T, V>({\n locale,\n firstDayOfWeek,\n defaultDateInView,\n quickOptions,\n singleSelect,\n filterBy = convertDateOrArray,\n minDate,\n maxDate,\n showCalendarWeek,\n ...props\n}: {\n /** If enabled, only single days can be selected. Ranges otherwise. */\n singleSelect?: boolean;\n} & Pick<\n DatePickerProps,\n | 'locale'\n | 'firstDayOfWeek'\n | 'defaultDateInView'\n | 'quickOptions'\n | 'minDate'\n | 'maxDate'\n | 'showCalendarWeek'\n> &\n CommonFilterProps<T, V, Date | DateRange | null, Date | DateRange | null>): JSX.Element {\n const { value = null, onChange } = useFilter({\n ...props,\n filterBy,\n\n id: 'dateFilter',\n\n isActive(filterValue) {\n return !!filterValue;\n },\n\n test(filterValue, value) {\n return dateIntersect(filterValue, value);\n },\n });\n\n return (\n <div\n css={{\n padding: 'calc(var(--spacing) * 2)',\n display: 'grid',\n }}\n >\n <DatePicker\n rangeSelect={!singleSelect}\n value={value}\n onChange={onChange}\n locale={locale}\n firstDayOfWeek={firstDayOfWeek}\n defaultDateInView={defaultDateInView}\n quickOptions={quickOptions}\n minDate={minDate}\n maxDate={maxDate}\n showCalendarWeek={showCalendarWeek}\n />\n </div>\n );\n}\n","import { useState } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport type { TableTheme } from '../types';\n\ntype TextFieldProps = TableTheme['components']['TextField'] extends React.ComponentType<infer T>\n ? T\n : never;\n\nexport interface NumberFieldProps extends Omit<TextFieldProps, 'value' | 'onChange'> {\n value?: number | null;\n onChange?: (value: number | null) => void;\n}\n\nconst Pattern = /^-?\\d*(?:[.,]\\d*)?$/;\n\nconst printNumber = (value: number | null, locale?: string) => {\n if (value === null) {\n return '';\n }\n\n return value.toLocaleString(locale);\n};\n\nconst parseNumber = (value: string) => {\n if (value === '') {\n return null;\n }\n\n const asNumber = Number(value.replace(',', '.'));\n return Number.isNaN(asNumber) ? null : asNumber;\n};\n\nexport function NumberField({\n value: commitedValue = null,\n onChange,\n ...textFieldProps\n}: NumberFieldProps) {\n const locale = useTheme((t) => t.locale);\n const TextField = useTheme((t) => t.components.TextField);\n const [value = printNumber(commitedValue, locale), setValue] = useState<string>();\n\n return (\n <TextField\n value={value}\n onChange={(event) => {\n if (Pattern.test(event.target.value)) {\n setValue(event.target.value);\n }\n }}\n onBlur={() => {\n onChange?.(parseNumber(value));\n setValue(undefined);\n }}\n {...textFieldProps}\n />\n );\n}\n","import { useFilter } from '../hooks/useFilter';\nimport { useTheme } from '../hooks/useTheme';\nimport { asNumberOrArray, castArray } from '../misc/helpers';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport type { CommonFilterProps } from '../types';\nimport { NumberField } from './numberField';\n\nexport interface RangeFilterProps<T, V>\n extends CommonFilterProps<T, V, number | null, [number | null, number | null] | null> {\n min?: number;\n max?: number;\n}\n\nexport function RangeFilter<T, V>({\n min,\n max,\n filterBy = asNumberOrArray,\n ...props\n}: RangeFilterProps<T, V>): JSX.Element {\n const rangeMinText = useTheme((t) => t.text.rangeMin);\n const rangeMaxText = useTheme((t) => t.text.rangeMax);\n\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n const filterByFunction = filterBy instanceof Function ? filterBy : filterBy[0];\n\n const [minValue, maxValue] = table.useState((state) => {\n if (typeof min === 'number' && typeof max === 'number') {\n return [min, max];\n }\n\n const column = state.activeColumns.find((c) => c.id === columnId);\n\n if (!column) {\n return [0, 100];\n }\n\n let minValue;\n let maxValue;\n\n for (const item of state.items) {\n const columnValue = column.value(item.value) as V;\n const numberValues = castArray(filterByFunction(columnValue, item.value)).filter(\n (value): value is number => value !== null,\n );\n\n for (const value of numberValues) {\n minValue = Math.min(minValue ?? value, value);\n maxValue = Math.max(maxValue ?? value, value);\n }\n }\n\n return [min ?? minValue, max ?? maxValue];\n });\n\n const { value, onChange } = useFilter({\n ...props,\n filterBy,\n\n id: 'rangeFilter',\n\n isActive(filterValue) {\n return !!filterValue;\n },\n\n test(filterValue, value) {\n if (!filterValue || (filterValue[0] === null && filterValue[1] === null)) {\n return true;\n }\n\n const min = filterValue[0] ?? Number.NEGATIVE_INFINITY;\n const max = filterValue[1] ?? Number.POSITIVE_INFINITY;\n return value !== null && value >= min && value <= max;\n },\n });\n\n return (\n <div\n css={{\n padding: `calc(var(--spacing) * 2)`,\n display: 'grid',\n gap: '1em',\n }}\n >\n <div\n css={{\n display: 'flex',\n gap: '1em',\n alignItems: 'center',\n\n '& > *': {\n width: '10em',\n },\n }}\n >\n <NumberField\n value={value?.[0]}\n onChange={(newMin) => onChange(normalize(newMin, value?.[1], 'min', { min, max }))}\n startIcon={<span css={{ margin: '0 calc(var(--spacing) * 2)' }}>{rangeMinText}</span>}\n placeholder={String(minValue ?? '')}\n css={{\n alignItems: 'baseline',\n }}\n />\n -\n <NumberField\n value={value?.[1]}\n onChange={(newMax) => onChange(normalize(value?.[0], newMax, 'max', { min, max }))}\n startIcon={<span css={{ margin: '0 calc(var(--spacing) * 2)' }}>{rangeMaxText}</span>}\n placeholder={String(maxValue ?? '')}\n css={{\n alignItems: 'baseline',\n }}\n />\n </div>\n </div>\n );\n}\n\nfunction normalize(\n min: number | null | undefined,\n max: number | null | undefined,\n changed: 'min' | 'max',\n limits: { min?: number; max?: number },\n): [number | null, number | null] | null {\n min ??= null;\n max ??= null;\n\n if (min !== null && max !== null && min > max) {\n if (changed === 'min') {\n max = min;\n } else {\n min = max;\n }\n }\n\n return min !== null || max !== null\n ? [clamp(min, limits.min, limits.max), clamp(max, limits.min, limits.max)]\n : null;\n}\n\nfunction clamp(\n value: number | null,\n min = Number.NEGATIVE_INFINITY,\n max = Number.POSITIVE_INFINITY,\n): number | null {\n return value === null ? null : Math.min(Math.max(value, min), max);\n}\n","import type { ReactNode } from 'react';\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","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, useMemo, useRef, useState } from 'react';\nimport { throttle } from '../misc/throttle';\n\nexport interface VirtualListProps<T> extends Omit<HTMLProps<HTMLDivElement>, 'children'> {\n virtual?:\n | boolean\n | {\n rowHeight?: number;\n initalRowHeight?: number;\n throttleScroll?: number;\n overscan?: number;\n overscanBottom?: number;\n overscanTop?: number;\n };\n items: T[];\n children: (item: T, index: number) => ReactNode;\n}\n\nexport function VirtualList<T>({\n virtual = true,\n items,\n children,\n ...props\n}: VirtualListProps<T>): JSX.Element {\n const container = useRef<HTMLDivElement>(null);\n const [, setId] = useState({});\n\n const throttleScroll = (typeof virtual === 'boolean' ? undefined : virtual)?.throttleScroll ?? 16;\n const update = useMemo(() => throttle(() => setId({}), throttleScroll), [throttleScroll]);\n\n useEffect(() => {\n if (!virtual) return;\n\n const ro = new ResizeObserver(update);\n\n if (container.current) {\n ro.observe(container.current);\n }\n\n window.addEventListener('resize', update, true);\n return () => {\n ro.disconnect();\n window.removeEventListener('resize', update, true);\n update.cancel();\n };\n }, [update, virtual, throttleScroll]);\n\n if (!virtual) {\n return (\n <div\n {...props}\n css={{\n overflowY: 'auto',\n display: 'grid',\n }}\n >\n {items.map((item, index) => children(item, index))}\n </div>\n );\n }\n\n const {\n rowHeight,\n initalRowHeight = 38,\n overscan = 100,\n overscanTop,\n overscanBottom,\n } = (virtual instanceof Object ? virtual : undefined) ?? {};\n\n const itemHeight = rowHeight ?? (averageItemHeight(container.current) || initalRowHeight);\n const from = container.current?.clientHeight\n ? Math.max(\n 0,\n Math.floor((container.current.scrollTop - (overscanTop ?? overscan)) / itemHeight),\n )\n : 0;\n const to = container.current?.clientHeight\n ? Math.min(\n items.length,\n Math.ceil(\n (container.current.scrollTop +\n container.current.clientHeight +\n (overscanBottom ?? overscan)) /\n itemHeight,\n ),\n )\n : 1;\n const before = from * itemHeight;\n const after = (items.length - to) * itemHeight;\n\n return (\n <div\n {...props}\n onScroll={(event) => {\n update();\n props.onScroll?.(event);\n }}\n ref={container}\n css={{\n overflowY: 'auto',\n display: 'grid',\n }}\n >\n <div data-virtual-before style={{ height: before }} />\n {items.slice(from, to).map((item, index) => children(item, index + from))}\n <div data-virtual-after style={{ height: after }} />\n </div>\n );\n}\n\nfunction averageItemHeight(container: HTMLDivElement | null) {\n if (!container?.children.length) {\n return undefined;\n }\n\n const heights = Array.from(container.children)\n .slice(1, -1)\n .map((child) => child.clientHeight);\n return heights.reduce((a, b) => a + b, 0) / heights.length;\n}\n","import type { ReactNode } from 'react';\nimport { useEffect, useMemo, useState } from 'react';\nimport { useFilter } from '../hooks/useFilter';\nimport { useTheme } from '../hooks/useTheme';\nimport { asString, castArray, flatMap, uniq } from '../misc/helpers';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport type { CommonFilterProps, InternalColumn, SerializableValue } from '../types';\nimport { AutoFocusTextField } from './autoFocusTextField';\nimport { FormControlLabel } from './formControlLabel';\nimport type { VirtualListProps } from './virtualList';\nimport { VirtualList } from './virtualList';\n\nfunction toggle<T>(set: Set<T>, value: T, singleSelect?: boolean) {\n const newSet = new Set(singleSelect ? [] : set);\n if (set.has(value)) {\n newSet.delete(value);\n } else {\n newSet.add(value);\n }\n\n return newSet;\n}\n\nexport function SelectFilter<T, V, F extends SerializableValue>({\n options: providedOptions,\n stringValue = asString,\n render = stringValue,\n singleSelect,\n hideSearchField,\n hideResetButton,\n ...props\n}: {\n /** Which options are provided to select. By default all unique item values are used. */\n options?: F[];\n /** String representation of a value. Used to filter options via the text field. */\n stringValue?: (value: F) => string;\n /** Render values. By default a string representation of the value is used. */\n render?: (value: F) => ReactNode;\n /** If enabled, only one option can be selected at a time. */\n singleSelect?: boolean;\n /** If enabled, the search field is hidden. */\n hideSearchField?: boolean;\n /** If enabled, the reset button is hidden. */\n hideResetButton?: boolean;\n /** Virtual list props.\n * @default true */\n virtual?: VirtualListProps<unknown>['virtual'];\n} & CommonFilterProps<T, V, F, Set<F>>): JSX.Element {\n const IconButton = useTheme((t) => t.components.IconButton);\n const Checkbox = useTheme((t) => t.components.Checkbox);\n const Search = useTheme((t) => t.icons.Search);\n const Clear = useTheme((t) => t.icons.Clear);\n const deselectAll = useTheme((t) => t.text.deselectAll);\n const noResults = useTheme((t) => t.text.noResults);\n\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n\n const {\n value = new Set<F>(),\n onChange,\n filterBy,\n isActive,\n } = useFilter({\n ...props,\n\n id: 'selectFilter',\n\n isActive(filterValue) {\n return filterValue.size > 0;\n },\n\n test(filterValue, value) {\n return filterValue.has(value);\n },\n });\n\n const options = table.useState((state) => {\n if (providedOptions) return uniq(providedOptions);\n\n const column = state.activeColumns.find((column) => column.id === columnId) as\n | InternalColumn<T, V>\n | undefined;\n if (!column) return [];\n\n return 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 const delayedValue = useMemo(() => value, [isActive]);\n const ordered = filtered\n .filter((option) => delayedValue.has(option))\n .concat(filtered.filter((option) => !delayedValue.has(option)));\n\n const Button = useTheme((t) => t.components.Button);\n\n useEffect(() => {\n setQuery('');\n }, [isActive]);\n\n return (\n <div\n css={{\n padding: 'calc(var(--spacing) * 2)',\n display: 'grid',\n gap: 'var(--spacing)',\n }}\n >\n {!hideSearchField && (\n <AutoFocusTextField\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n endIcon={\n <IconButton onClick={() => setQuery('')}>{!query ? <Search /> : <Clear />}</IconButton>\n }\n css={{ marginBottom: 'var(--spacing)' }}\n />\n )}\n\n {!hideResetButton && (\n <Button\n disabled={value.size === 0}\n onClick={() => onChange(new Set())}\n variant=\"outlined\"\n css={{ justifyContent: 'center', width: '100%', marginBottom: 'var(--spacing)' }}\n >\n {deselectAll}\n </Button>\n )}\n\n <VirtualList\n items={ordered}\n css={{\n width: '20em',\n maxHeight: '20em',\n }}\n >\n {(option, index) => (\n <FormControlLabel\n key={index}\n control={\n <Checkbox\n checked={value.has(option)}\n onChange={() => onChange(toggle(value, option, singleSelect))}\n />\n }\n label={render(option)}\n ></FormControlLabel>\n )}\n </VirtualList>\n\n {ordered.length === 0 && <span css={{ textAlign: 'center' }}>{noResults}</span>}\n </div>\n );\n}\n","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 type { Draft } from 'immer';\nimport { Queue } from '../misc/queue';\nimport type { InternalTableState, SerializableValue } from '../types';\n\nconst KEYS = [\n 'sort',\n 'selection',\n 'expanded',\n 'hiddenColumns',\n 'filterValues',\n 'columnWidths',\n 'columnOrder',\n] as const;\n\nconst storageName = (id: string) => `schummar-table_state-v1_${id}`;\n\nexport type TableStateStorage = {\n getItem: (key: string) => string | null | Promise<string | null>;\n setItem: (key: string, value: string) => unknown | Promise<unknown>;\n removeItem: (key: string) => unknown | Promise<unknown>;\n} & (\n | {\n keys: () => string[] | Promise<string[]>;\n }\n | {\n length: number | (() => number | Promise<number>);\n key: (keyIndex: number) => string | null | Promise<string | null>;\n }\n);\n\nfunction stringify(value: SerializableValue) {\n function prepare(value: SerializableValue): any {\n if (value instanceof Date) {\n return { __date: value.toJSON() };\n }\n\n if (value instanceof Set) {\n return { __set: Array.from(value).map(prepare) };\n }\n\n if (value instanceof Map) {\n return { __map: Array.from(value.entries()).map((entry) => entry.map(prepare)) };\n }\n\n if (Array.isArray(value)) {\n return value.map(prepare);\n }\n\n if (value instanceof Object) {\n return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, prepare(v)]));\n }\n\n return value;\n }\n\n return JSON.stringify(prepare(value));\n}\n\nfunction parse(value: string) {\n return JSON.parse(value, (_key, value) => {\n if (value instanceof Object && '__date' in value) {\n return new Date(value.__date);\n }\n\n if (value instanceof Object && '__set' in value) {\n return new Set(value.__set);\n }\n\n if (value instanceof Object && '__map' in value) {\n return new Map(value.__map);\n }\n\n return value;\n });\n}\n\nexport function useTableStateStorage(table: Store<InternalTableState<any>>) {\n const [isHydrated, setIsHydrated] = useState(false);\n const [q] = useState(() => new Queue());\n\n // On mount: load\n useEffect(() => {\n const { persist } = table.getState().props;\n if (!persist) {\n setIsHydrated(true);\n return;\n }\n\n let isCanceled = false;\n\n (async () => {\n try {\n const { storage, id, include, exclude } = persist;\n const json = await storage.getItem(storageName(id));\n if (isCanceled || !json) return;\n\n const data = parse(json);\n table.getState().props.debug?.('load', json, data);\n\n // eslint-disable-next-line no-inner-declarations\n function applyUpdate(state: Draft<InternalTableState<any>>, key: (typeof KEYS)[number]) {\n if (\n //\n (!include || include.includes(key)) &&\n !exclude?.includes(key) &&\n key in data\n ) {\n if (key === 'filterValues') {\n for (const [id, value] of data[key]) {\n const filter = state.filters.get(id);\n\n if (filter && (filter.persist ?? filter.value === undefined)) {\n state.filterValues.set(id, value);\n state.filters.get(id)?.onChange?.(value);\n }\n }\n } else {\n if (\n key === 'expanded' ||\n key === 'hiddenColumns' ||\n key === 'selection' ||\n key === 'sort'\n ) {\n if (state.props[key] !== undefined) {\n return;\n }\n\n state.props[\n `on${\n (key.slice(0, 1).toUpperCase() + key.slice(1)) as Capitalize<typeof key>\n }Change`\n ]?.(data[key]);\n }\n\n state[key] = data[key];\n }\n }\n }\n\n table.update((state) => {\n for (const key of KEYS.filter((key) => key !== 'filterValues')) {\n applyUpdate(state, key);\n }\n });\n\n // First apply other keys and wait until changes take effect. Filters cannot be applied to hidden columns.\n await new Promise((resolve) => {\n setTimeout(resolve);\n });\n table.update((state) => applyUpdate(state, 'filterValues'));\n } catch (error) {\n console.error('Failed to load table state:', error);\n } finally {\n setIsHydrated(true);\n }\n })();\n\n return () => {\n isCanceled = true;\n };\n }, [table]);\n\n // After isHydrated, watch and save state\n useEffect(() => {\n if (!isHydrated) return;\n\n return table.subscribe(\n (state) => {\n if (!state.props.persist) return;\n\n const { storage, id, include, exclude } = state.props.persist;\n const data: any = {};\n\n for (const key of KEYS) {\n if (\n //\n (!include || include.includes(key)) &&\n !exclude?.includes(key)\n ) {\n if (key === 'filterValues') {\n data[key] = new Map();\n for (const [id, value] of state.filterValues) {\n if (state.filters.get(id)?.persist ?? state.filters.get(id)?.value === undefined) {\n data.filterValues.set(id, value);\n }\n }\n } else {\n if (\n (key === 'expanded' ||\n key === 'hiddenColumns' ||\n key === 'selection' ||\n key === 'sort') &&\n state.props[key] !== undefined\n ) {\n continue;\n }\n\n data[key] = state[key];\n }\n }\n }\n\n return { storage, id, data };\n },\n (props) => {\n if (!props) return;\n const { storage, id, data } = props;\n\n table.getState().props.debug?.('save', data, stringify(data));\n q.run(async () => {\n await storage.setItem(storageName(id), stringify(data));\n }, true);\n },\n { throttle: 1000 },\n );\n }, [table, isHydrated]);\n\n async function clear() {\n await q.run(async () => {\n const persist = table.getState().props.persist;\n if (!persist) {\n return;\n }\n\n const { storage, id } = persist;\n await storage.removeItem(storageName(id));\n\n setIsHydrated(false);\n q.clear();\n });\n }\n\n return [isHydrated, clear] as const;\n}\n","import { castDraft } from 'immer';\nimport { useEffect } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport { castArray, flatMap, orderBy } from '../misc/helpers';\nimport type { Id, InternalTableState, TableItem } from '../types';\n\nexport function calcItems<T>(state: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n state.addReaction(\n (state) =>\n [\n state.props.items,\n state.props.id,\n state.props.parentId,\n state.props.revealFiltered,\n state.props.externalSort,\n state.sort,\n state.filters,\n state.filterValues,\n state.activeColumns,\n state.expanded,\n ] as const,\n (\n [\n items = [],\n id,\n parentId,\n revealFiltered,\n externalSort,\n sort,\n filters,\n filterValues,\n activeColumns,\n ],\n draft,\n ) => {\n const tableItems = items.map<TableItem<T>>((item) => ({\n id: id(item),\n parentId: parentId?.(item),\n children: [],\n value: item,\n }));\n\n let sorted;\n if (sort.length === 0 || externalSort) {\n sorted = tableItems;\n } else {\n const selectors = flatMap(sort, (sort) => {\n const column = activeColumns.find((column) => column.id === sort.columnId);\n if (!column) return [];\n return column.sortBy.map((sortBy) => ({\n selector: (item: T) => sortBy(column.value(item), item),\n direction: sort.direction,\n }));\n }).filter(Boolean);\n\n sorted = orderBy(\n tableItems,\n selectors.map((x) => (item) => x.selector(item.value)),\n selectors.map((x) => x.direction),\n );\n }\n\n const lookup = new Map<Id, TableItem<T>>();\n for (const item of sorted) {\n lookup.set(item.id, item);\n }\n\n for (const item of sorted) {\n const parent =\n item.parentId !== undefined && item.parentId !== null\n ? lookup.get(item.parentId)\n : undefined;\n parent?.children.push(item);\n }\n\n const allItems = new Array<TableItem<T>>();\n const allItemsById = new Map<Id, TableItem<T>>();\n\n const traverse = (items: TableItem<T>[]): void => {\n for (const item of items) {\n allItems.push(item);\n allItemsById.set(item.id, item);\n traverse(item.children);\n }\n };\n traverse(sorted.filter((item) => item.parentId === undefined || item.parentId === null));\n\n let expandedChanged = false;\n const activeItemsById = new Map<Id, TableItem<T>>();\n const activeSet = new Set<Id>();\n const activeItems = [...allItems]\n .reverse()\n .filter((item) => {\n let isActive = activeSet.has(item.id);\n\n isActive ||= activeColumns.every((column) => {\n const filter = filters.get(column.id);\n if (!filter || filter.external) return true;\n\n const filterValue = filterValues.get(column.id);\n if (filterValue === undefined || !filter.isActive(filterValue)) return true;\n\n const filterBy = filter.filterBy ?? ((x) => x);\n const value = filterBy(column.value(item.value), item.value);\n return castArray(value).some((value) => filter.test(filterValue, value));\n });\n\n if (isActive && item.parentId !== undefined && item.parentId !== null) {\n if (\n revealFiltered &&\n Array.from(filters.entries()).some(([id, filter]) => {\n const filterValue = filterValues.get(id);\n return !!filter && filterValue !== undefined && filter.isActive(filterValue);\n })\n ) {\n expandedChanged ||= !draft.expanded.has(item.parentId);\n draft.expanded.add(item.parentId);\n } else if (!draft.expanded.has(item.parentId)) {\n isActive = false;\n }\n }\n\n if (isActive && item.parentId !== undefined && item.parentId !== null) {\n activeSet.add(item.parentId);\n }\n if (isActive) {\n activeItemsById.set(item.id, item);\n }\n\n return isActive;\n })\n .reverse();\n\n draft.items = castDraft(allItems);\n draft.itemsById = castDraft(allItemsById);\n draft.activeItems = castDraft(activeItems);\n draft.activeItemsById = castDraft(activeItemsById);\n\n if (expandedChanged) {\n setTimeout(() => {\n state.getState().props.onExpandedChange?.(state.getState().expanded);\n });\n }\n },\n { runNow: true },\n ),\n [state],\n );\n}\n","import { useMemo } from 'react';\nimport { useTableMemo } from '../hooks/useTableMemo';\nimport { asString } from '../misc/helpers';\nimport type { Column, Id, InternalColumn, InternalTableProps, TableProps } from '../types';\n\nconst noopParentId = () => undefined;\n\nexport function calcProps<T>(props: TableProps<T>): InternalTableProps<T> {\n const cache = useTableMemo();\n\n return useMemo(() => {\n let id;\n if (props.id instanceof Function || Array.isArray(props.id)) {\n id = cache('id', props.id);\n } else {\n id = cache('id', [(item: T) => item[props.id as keyof T] as unknown as Id, props.id]);\n }\n\n let parentId;\n if (props.parentId instanceof Function || Array.isArray(props.parentId)) {\n parentId = cache('parentId', props.parentId);\n } else if (props.parentId !== undefined) {\n parentId = cache('parentId', [\n (item: T) => item[props.parentId as keyof T] as unknown as Id | undefined,\n props.parentId,\n ]);\n } else {\n parentId = noopParentId;\n }\n\n const columnProps = props.columnProps && cache('columnProps', props.columnProps);\n\n let inputColumns;\n if (props.columns instanceof Function) {\n inputColumns = props.columns((value, column) => ({ ...column, value }));\n } else {\n inputColumns = props.columns.map((column) => ({ ...column, dependecies: undefined }));\n }\n\n const globalDefaults = props.defaultColumnProps;\n const mapColumn = <V>(\n {\n id: _id,\n header,\n footer,\n value,\n renderCell,\n exportCell,\n sortBy,\n disableSort,\n hidden,\n classes,\n styles,\n filter,\n width,\n }: Column<T, V>,\n index: number,\n ): InternalColumn<T, V> => {\n const id = _id ?? index;\n const cacheKey = typeof id === 'string' ? `s${id}` : `n${id}`;\n const defaults = { ...globalDefaults, ...columnProps?.(id) };\n\n return {\n id,\n header: header ?? defaults?.header ?? null,\n footer: footer ?? defaults?.footer ?? null,\n value: cache(`columns.${cacheKey}.value`, value),\n renderCell: cache(\n `columns.${cacheKey}.renderCell`,\n renderCell ?? defaults?.renderCell ?? asString,\n ),\n exportCell: exportCell ?? defaults?.exportCell ?? asString,\n sortBy: (\n sortBy ??\n defaults?.sortBy ?? [\n (v) =>\n typeof v === 'number' || v instanceof Date\n ? v\n : v === null || v === undefined\n ? ''\n : String(v),\n ]\n ).map((function_, i) => cache(`columns.${cacheKey}.sortBy.${i}`, function_)),\n disableSort,\n hidden: hidden ?? defaults?.hidden,\n classes: classes ?? defaults?.classes,\n styles: styles ?? defaults?.styles,\n filter: filter ?? defaults?.filter,\n width: width ?? defaults?.width,\n };\n };\n\n const columns = inputColumns.map(mapColumn);\n\n const wrapCell = props.wrapCell && cache('wrapCell', props.wrapCell);\n\n const rowAction =\n props.rowAction instanceof Function || Array.isArray(props.rowAction)\n ? cache('rowAction', props.rowAction)\n : props.rowAction;\n\n const rowDetails =\n props.rowDetails instanceof Function || Array.isArray(props.rowDetails)\n ? cache('rowDetails', props.rowDetails)\n : props.rowDetails;\n\n 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 columnProps,\n wrapCell,\n rowAction,\n rowDetails,\n enableSelection: props.enableSelection ?? true,\n selectSyncChildren: props.selectSyncChildren ?? true,\n stickyHeader: props.stickyHeader ?? true,\n stickyFooter: props.stickyFooter ?? true,\n enableExport,\n enableColumnSelection: props.enableColumnSelection ?? true,\n enableClearFiltersButton: props.enableClearFiltersButton ?? false,\n enableColumnResize: props.enableColumnResize ?? true,\n enableColumnReorder: props.enableColumnReorder ?? true,\n };\n }, [props]);\n}\n","import { useEffect } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport { intersect } from '../misc/helpers';\nimport type { InternalTableState } from '../types';\n\nexport function cleanupState<T>(state: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n state.addReaction(\n (state) =>\n [\n state.props.columns,\n state.itemsById,\n state.activeItemsById,\n state.activeColumns,\n ] as const,\n ([columns, itemsById, activeItemsById, activeColumns], draft) => {\n const columnIds = new Set(columns.map((column) => column.id));\n const activeColumnIds = new Set(activeColumns.map((column) => column.id));\n\n // Remove sort entries for non active columns\n const newSort = draft.sort.filter((s) => activeColumnIds.has(s.columnId));\n if (newSort.length < draft.sort.length) {\n draft.sort = newSort;\n setTimeout(() => {\n state.getState().props.onSortChange?.(newSort);\n });\n }\n\n // Remove filters for non active columns\n for (const id of draft.filters.keys()) {\n if (!activeColumnIds.has(id)) draft.filters.delete(id);\n }\n\n // Remove filterValues for non active columns\n for (const id of draft.filterValues.keys()) {\n if (!activeColumnIds.has(id)) draft.filterValues.delete(id);\n }\n\n // Remove hiddenColumns for non existing columns\n for (const id of draft.hiddenColumns.keys()) {\n if (!columnIds.has(id)) draft.hiddenColumns.delete(id);\n }\n\n // Remove columnWidth for non existing columns\n for (const id of draft.columnWidths.keys()) {\n if (!columnIds.has(id)) draft.columnWidths.delete(id);\n }\n\n // Remove non existing columns from columnOrder\n for (const id of draft.columnOrder) {\n if (!columnIds.has(id)) draft.columnOrder = draft.columnOrder.filter((x) => x !== id);\n }\n\n if (draft.props.items) {\n // Remove selection for non active items\n const newSelection = intersect(draft.selection, activeItemsById);\n if (newSelection.size !== draft.selection.size) {\n draft.selection = newSelection;\n setTimeout(() => {\n state.getState().props.onSelectionChange?.(newSelection);\n });\n }\n\n // Remove expanded for non existing items\n const newExpanded = intersect(draft.expanded, itemsById);\n if (newExpanded.size < draft.expanded.size) {\n draft.expanded = newExpanded;\n setTimeout(() => {\n state.getState().props.onExpandedChange?.(newExpanded);\n });\n }\n }\n },\n { runNow: true },\n ),\n [state],\n );\n}\n","import { useEffect } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport { orderBy } from '../misc/helpers';\nimport type { InternalTableState } from '../types';\n\nexport function filterColumns<T>(state: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n state.addReaction(\n (state) => [state.props.columns, state.hiddenColumns, state.columnOrder] as const,\n ([columns, hiddenColumns, columnOrder], draft) => {\n draft.activeColumns = orderBy(\n columns.filter((column) => !(column.hidden ?? hiddenColumns.has(column.id))),\n [(column) => columnOrder.indexOf(column.id)],\n );\n },\n { runNow: true },\n ),\n [state],\n );\n}\n","import { useEffect } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport { getAncestors, orderBy } from '../misc/helpers';\nimport type { Id, InternalTableState } from '../types';\n\nexport function normalizeExpanded<T>(table: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n table.addReaction(\n (state) => [state.props.expandOnlyOne, state.expanded, state.itemsById] as const,\n ([expandOnlyOne, , itemsById], state) => {\n let expanded = state.expanded;\n let hasChanged = false;\n\n const allAncestors = [...expanded].map((id) => {\n const item = itemsById.get(id);\n return {\n id,\n ancestors: item ? getAncestors(itemsById, item) : new Set<Id>(),\n };\n });\n\n // If only one branch may be expanded, check if there are more and close if necessary\n if (expandOnlyOne) {\n const withMostAncestors = orderBy(allAncestors, [(x) => x.ancestors.size], ['desc'])[0];\n\n if (\n [...expanded].some(\n (id) => id !== withMostAncestors?.id && !withMostAncestors?.ancestors.has(id),\n )\n ) {\n expanded = withMostAncestors?.ancestors ?? new Set();\n state.expanded = expanded;\n\n state.props.onExpandedChange?.(expanded);\n return;\n }\n }\n\n for (const { ancestors } of allAncestors) {\n for (const ancestor of ancestors ?? []) {\n if (!expanded.has(ancestor)) {\n expanded.add(ancestor);\n hasChanged = true;\n }\n }\n }\n\n if (hasChanged) {\n state.props.onExpandedChange?.(new Set(expanded));\n }\n },\n { runNow: true },\n ),\n [table],\n );\n}\n","import { useEffect } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport type { InternalTableState } from '../types';\n\nexport function syncSelections<T>(table: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n table.addReaction(\n (state) => [state.props.selectSyncChildren, state.selection, state.activeItems] as const,\n ([selectSyncChildren, selection, activeItems], state) => {\n if (!selectSyncChildren) return;\n\n const newSelection = new Set(selection);\n for (const item of activeItems) {\n if (\n item.parentId !== undefined &&\n item.parentId !== null &&\n newSelection.has(item.parentId)\n ) {\n newSelection.add(item.id);\n }\n }\n\n if (newSelection.size !== selection.size) {\n state.selection = newSelection;\n setTimeout(() => {\n table.getState().props.onSelectionChange?.(newSelection);\n });\n }\n },\n { runNow: true },\n ),\n [table],\n );\n}\n","import { castDraft } from 'immer';\nimport { useEffect, useMemo, useState } from 'react';\nimport { Store } from 'schummar-state/react';\nimport type { InternalTableState, TableProps } from '../types';\nimport { calcItems } from './calcItems';\nimport { calcProps } from './calcProps';\nimport { cleanupState } from './cleanupState';\nimport { filterColumns } from './filterColumns';\nimport { normalizeExpanded } from './normalizeExpanded';\nimport { syncSelections } from './syncSelections';\n\nexport function useTableState<T>(\n _props: TableProps<T>,\n): [Store<InternalTableState<T>>, () => void] {\n const [key, setKey] = useState({});\n const props = calcProps(_props);\n\n function reset() {\n setKey({});\n\n if (props.sort === undefined) {\n props.onSortChange?.(props.defaultSort ?? []);\n }\n\n if (props.expanded === undefined) {\n props.onExpandedChange?.(props.defaultExpanded ?? new Set());\n }\n\n if (props.selection === undefined) {\n props.onSelectionChange?.(props.defaultSelection ?? new Set());\n }\n\n if (props.hiddenColumns === undefined) {\n props.onHiddenColumnsChange?.(props.defaultHiddenColumns ?? new Set());\n }\n\n props.onReset?.('table');\n }\n\n const state = useMemo(\n () =>\n new Store<InternalTableState<T>>({\n props,\n\n key,\n sort: props.defaultSort ?? [],\n selection: props.defaultSelection ?? new Set(),\n expanded: props.defaultExpanded ?? new Set(),\n rowHeights: new Map(),\n filters: new Map(),\n filterValues: new Map(),\n hiddenColumns: props.defaultHiddenColumns ?? new Set(),\n columnWidths: new Map(),\n columnOrder: props.columns.map((column) => column.id),\n columnStyleOverride: new Map(),\n\n activeColumns: [],\n items: [],\n itemsById: new Map(),\n activeItems: [],\n activeItemsById: new Map(),\n lastSelectedId: undefined,\n }),\n [key],\n );\n\n filterColumns(state);\n calcItems(state);\n normalizeExpanded(state);\n syncSelections(state);\n cleanupState(state);\n\n useEffect(() => {\n state.update((state) => {\n state.props = castDraft(props);\n if (props.sort) state.sort = props.sort;\n if (props.selection) state.selection = props.selection;\n if (props.expanded) state.expanded = props.expanded;\n if (props.hiddenColumns) state.hiddenColumns = props.hiddenColumns;\n for (const column of props.columns) {\n if (!state.columnOrder.includes(column.id)) {\n const index = props.columns.indexOf(column);\n state.columnOrder.splice(index, 0, column.id);\n }\n }\n });\n }, [state, props]);\n\n return [state, reset];\n}\n","import { useTheme } from '../hooks/useTheme';\nimport { useTableContext } from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\n\nexport default function ClearFiltersButton<T>() {\n const Button = useTheme((t) => t.components.Button);\n const textClearFilters = useTheme((t) => t.text.clearFilters);\n const table = useTableContext<T>();\n\n return (\n <div css={defaultClasses.clearFiltersButton}>\n <Button\n variant=\"outlined\"\n onClick={() => {\n table.update((state) => {\n state.activeColumns.forEach((column) => {\n state.filterValues.delete(column.id);\n });\n table.getState().props.onReset?.('filters');\n });\n }}\n >\n {textClearFilters}\n </Button>\n </div>\n );\n}\n","import { useTheme } from '../hooks/useTheme';\nimport { cx } from '../misc/helpers';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\n\nexport function ColumnFooter() {\n const table = useTableContext();\n const columnId = useColumnContext();\n const stickyFooter = table.useState((state) => state.props.stickyFooter);\n const columnStyleOverride = table.useState((state) => state.columnStyleOverride.get(columnId), {\n throttle: 16,\n });\n const columnClasses = table.useState(\n (state) => state.activeColumns.find((column) => column.id === columnId)?.classes?.footerCell,\n );\n const classes = useTheme((theme) => theme.classes?.footerCell);\n const columnCss = table.useState(\n (state) => state.activeColumns.find((column) => column.id === columnId)?.styles?.footerCell,\n );\n const styles = useTheme((theme) => theme.styles?.footerCell);\n\n const content = table.useState((state) => {\n const column = state.activeColumns.find((column) => column.id === columnId);\n\n return column?.footer;\n });\n\n return (\n <div\n className={cx(classes, columnClasses)}\n css={[\n defaultClasses.footerCell,\n styles,\n columnCss,\n stickyFooter && defaultClasses.stickyBottom,\n stickyFooter instanceof Object && stickyFooter,\n ]}\n style={columnStyleOverride}\n >\n {content}\n </div>\n );\n}\n","import type React from 'react';\nimport type { HTMLProps } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\n\nexport function ResizeHandle() {\n const table = useTableContext();\n const columnId = useColumnContext();\n const enabled = table.useState((state) => state.props.enableColumnResize);\n\n function onPointerDown(event: React.PointerEvent) {\n event.stopPropagation();\n\n const div = event.target as HTMLDivElement;\n div.setPointerCapture(event.pointerId);\n }\n\n function onPointerMove(event: React.PointerEvent) {\n event.stopPropagation();\n\n const div = event.target as HTMLDivElement;\n if (!div.hasPointerCapture(event.pointerId)) return;\n\n const parent = div.parentElement as HTMLDivElement;\n const width = Math.max(event.clientX - parent.getBoundingClientRect().left + 5, 50);\n\n table.update((state) => {\n state.columnWidths.set(columnId, `${width}px`);\n });\n }\n\n function onPointerUp(event: React.PointerEvent) {\n event.stopPropagation();\n\n const div = event.target as HTMLDivElement;\n div.releasePointerCapture(event.pointerId);\n }\n\n function onDoubleClick(event: React.MouseEvent) {\n table.update((state) => {\n if (event.getModifierState('Control')) {\n state.columnWidths.delete(columnId);\n } else {\n state.columnWidths.set(columnId, 'max-content');\n }\n });\n }\n\n return (\n <ResizeHandleView\n enabled={enabled}\n onPointerDown={enabled ? onPointerDown : undefined}\n onPointerMove={enabled ? onPointerMove : undefined}\n onPointerUp={enabled ? onPointerUp : undefined}\n onDoubleClick={enabled ? onDoubleClick : undefined}\n />\n );\n}\n\nexport function ResizeHandleView({\n enabled,\n ...props\n}: HTMLProps<HTMLDivElement> & { enabled?: boolean }) {\n const className = useTheme((theme) => theme.classes?.columnDivider);\n const styles = useTheme((theme) => theme.styles?.columnDivider);\n\n return (\n <div\n className={className}\n css={[\n {\n alignSelf: 'stretch',\n padding: '0 5px',\n cursor: enabled ? 'col-resize' : 'initial',\n display: 'flex',\n alignItems: 'center',\n\n '&:after': {\n content: '\"\"',\n width: 1,\n height: '1.5em',\n background: '#c9cfda',\n transition: 'transform 300ms',\n },\n },\n styles,\n ]}\n {...props}\n />\n );\n}\n","import type { ReactNode } from 'react';\nimport type React from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\n\nexport function SortComponent<T>({ children }: { children: ReactNode }): JSX.Element {\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n const Badge = useTheme((t) => t.components.Badge);\n const ArrowUpward = useTheme((t) => t.icons.ArrowUpward);\n\n const { direction, index, sortDisabled } = table.useState((state) => {\n const index = state.sort.findIndex((s) => s.columnId === columnId) ?? -1;\n const column = state.activeColumns.find((column) => column.id === columnId);\n\n return {\n direction: state.sort[index]?.direction,\n index: index >= 0 && state.sort.length > 1 ? index + 1 : undefined,\n sortDisabled: column?.disableSort ?? state.props.disableSort,\n };\n });\n\n function toggle(event: React.MouseEvent, off?: boolean) {\n if (sortDisabled) {\n return;\n }\n\n const {\n props: { sort: controlledSort, onSortChange },\n } = table.getState();\n\n const newDirection = direction === 'asc' ? 'desc' : 'asc';\n const newSort =\n event.getModifierState('Control') || off\n ? table.getState().sort.filter((s) => s.columnId !== columnId)\n : [];\n if (!off) {\n newSort.push({\n columnId,\n direction: newDirection,\n });\n }\n\n onSortChange?.(newSort);\n\n if (!controlledSort) {\n table.update((state) => {\n state.sort = newSort;\n });\n }\n\n event.preventDefault();\n return false;\n }\n\n return (\n <div\n css={{\n userSelect: 'none',\n display: 'grid',\n gridTemplateColumns: 'minmax(0, 1fr) max-content',\n alignItems: 'center',\n cursor: 'pointer',\n\n '& > div': {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n }}\n onClick={(event) => toggle(event)}\n onContextMenu={(event) => toggle(event, true)}\n >\n <div>{children}</div>\n\n {\n <Badge badgeContent={sortDisabled ? 0 : index}>\n <span\n css={[\n { transition: 'all 300ms', fontSize: '0.8em' },\n !direction && { opacity: 0 },\n direction === 'desc' && { transform: 'rotate3d(0, 0, 1, 180deg)' },\n ]}\n >\n <ArrowUpward />\n </span>\n </Badge>\n }\n </div>\n );\n}\n","import { castDraft } from 'immer';\nimport type React from 'react';\nimport { useEffect, useRef } from 'react';\nimport { StoreScope } from 'schummar-state/react';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport { useTheme } from '../hooks/useTheme';\nimport { cx } from '../misc/helpers';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport type { Id } from '../types';\nimport { FilterControl } from './filterControl';\nimport { ResizeHandle } from './resizeHandle';\nimport { SortComponent } from './sortComponent';\n\nexport const ColumnHeaderContext = new StoreScope({\n items: new Map<Id, HTMLDivElement>(),\n});\n\nexport function ColumnHeader() {\n const ref = useRef<HTMLDivElement>(null);\n const columnId = useColumnContext();\n const table = useTableContext();\n const enabled = table.useState((state) => state.props.enableColumnReorder);\n const columnStyleOverride = table.useState((state) => state.columnStyleOverride.get(columnId), {\n throttle: 16,\n });\n const stickyHeader = table.useState((state) => state.props.stickyHeader);\n const classes = useTheme((theme) => theme.classes?.headerCell);\n const styles = useTheme((theme) => theme.styles?.headerCell);\n\n const { header, columnClasses, columnStyles } = table.useState((state) => {\n const column = state.activeColumns.find((column) => column.id === columnId);\n return {\n header: column?.header,\n columnClasses: column?.classes?.headerCell,\n columnStyles: column?.styles?.headerCell,\n };\n });\n\n const store = ColumnHeaderContext.useStore();\n const draggingStart = useRef<{ mouseX: number; bounds: DOMRect }>();\n const clone = useRef<HTMLDivElement>();\n\n // Track each headers div in a store\n useEffect(() => {\n const div = ref.current;\n if (!div) return;\n\n store.update((state) => {\n state.items.set(columnId, castDraft(div));\n });\n\n return () => {\n store.update((state) => {\n state.items.delete(columnId);\n });\n };\n }, [store, columnId]);\n\n // Calculate which index the current header would get, given the current offset\n function calcTargetIndex(offsetLeft: number) {\n const cols = table\n .getState()\n .columnOrder.map((id) => ({ id, div: store.getState().items.get(id) }));\n\n const otherCols = cols.filter((col) => col.id !== columnId);\n\n const firstOffsetleft = cols.find((col) => col.div)?.div?.offsetLeft ?? 0;\n\n let sum = 0;\n const targetIndex = otherCols.findIndex((col) => {\n const width = col.div?.offsetWidth ?? 0;\n if (sum + width / 2 > offsetLeft - firstOffsetleft) return true;\n sum += width;\n return false;\n });\n\n return targetIndex === -1 ? otherCols.length : targetIndex;\n }\n\n // When starting clicking: Record initial mouse and div's bounds\n function onPointerDown(event: React.PointerEvent) {\n const div = ref.current;\n if (!div) return;\n draggingStart.current = { mouseX: event.clientX, bounds: div.getBoundingClientRect() };\n }\n\n // When mouse moves while clicked: Calculate transforms\n function onPointerMove(event: React.PointerEvent) {\n table.update((state) => {\n const div = ref.current;\n if (\n !div ||\n draggingStart.current === undefined ||\n Math.abs(event.clientX - draggingStart.current.mouseX) < 5\n )\n return;\n\n event.stopPropagation();\n div.setPointerCapture(event.pointerId);\n\n // Create clone of header div to move around with mouse\n if (!clone.current) {\n clone.current = div.cloneNode(true) as HTMLDivElement;\n document.body.append(clone.current);\n\n for (const [key, value] of Object.entries(getComputedStyle(div))) {\n try {\n clone.current.style[key as any] = value;\n } catch {\n // ignore\n }\n }\n\n Object.assign(clone.current.style, {\n pointerEvents: 'none',\n position: 'fixed',\n boxShadow:\n '0px 5px 5px -3px rgb(0 0 0 / 20%), 0px 8px 10px 1px rgb(0 0 0 / 14%), 0px 3px 14px 2px rgb(0 0 0 / 12%)',\n left: `${draggingStart.current.bounds.left}px`,\n top: `${draggingStart.current.bounds.top}px`,\n });\n\n div.style.color = 'rgba(0, 0, 0, 0.2)';\n }\n\n // Update clone's position each time\n clone.current.style.left = `${\n draggingStart.current.bounds.left + event.clientX - draggingStart.current.mouseX\n }px`;\n\n // Calculate target index\n const index = state.columnOrder.indexOf(columnId);\n const targetIndex = calcTargetIndex(\n div.offsetLeft + event.clientX - draggingStart.current.mouseX,\n );\n\n // Apply transforms to each column\n const columns = table.getState().columnOrder.map((id, index) => ({\n id,\n index,\n width: store.getState().items.get(id)?.offsetWidth ?? 0,\n }));\n\n state.columnOrder.forEach((id, i) => {\n let offset = 0;\n if (i === index) {\n // Current column: Move to target pos\n if (targetIndex > index) {\n offset = columns\n .slice(index + 1, targetIndex + 1)\n .reduce((sum, col) => sum + col.width, 0);\n } else if (targetIndex < index) {\n offset = -columns.slice(targetIndex, index).reduce((sum, col) => sum + col.width, 0);\n }\n } else if (i >= targetIndex && i < index) {\n // Left columns: Move right to make room if needed\n offset = div.offsetWidth;\n } else if (i > index && i <= targetIndex) {\n // Right columns: Move left to make room if needed\n offset = -div.offsetWidth;\n }\n\n state.columnStyleOverride.set(id, {\n transition: 'transform 500ms',\n transform: `translate3d(${offset}px, 0, 0)`,\n zIndex: i === index ? 1 : undefined,\n });\n });\n });\n }\n\n // When releasing mouse: Reset draggin state and apply column move\n function onPointerUp(event: React.PointerEvent) {\n table.update((state) => {\n const div = ref.current;\n if (!div || draggingStart.current === undefined) return;\n\n // Apply column move\n const index = state.columnOrder.indexOf(columnId);\n const targetIndex = calcTargetIndex(\n div.offsetLeft + event.clientX - draggingStart.current.mouseX,\n );\n\n state.columnOrder.splice(index, 1);\n state.columnOrder.splice(targetIndex, 0, columnId);\n\n // Cleanup\n clone.current?.remove();\n div.style.color = '';\n state.columnStyleOverride.clear();\n draggingStart.current = undefined;\n clone.current = undefined;\n });\n }\n\n return (\n <div\n ref={ref}\n className={cx(classes, columnClasses)}\n css={[\n {\n position: 'relative',\n userSelect: 'none',\n },\n defaultClasses.headerCell,\n styles,\n columnStyles,\n stickyHeader && defaultClasses.sticky,\n stickyHeader instanceof Object && stickyHeader,\n ]}\n style={columnStyleOverride}\n onPointerDown={enabled ? onPointerDown : undefined}\n onPointerMove={enabled ? onPointerMove : undefined}\n onPointerUp={enabled ? onPointerUp : undefined}\n >\n <SortComponent>{header}</SortComponent>\n <div css={{ flex: 1 }} />\n <FilterControl />\n <ResizeHandle />\n </div>\n );\n}\n","import { useContext, useState } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { TableResetContext, useTableContext } from '../misc/tableContext';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport type { InternalColumn } from '../types';\nimport { FormControlLabel } from './formControlLabel';\n\nexport function ColumnSelection<T>(): JSX.Element {\n const IconButton = useTheme((t) => t.components.IconButton);\n const Popover = useTheme((t) => t.components.Popover);\n const Checkbox = useTheme((t) => t.components.Checkbox);\n const Button = useTheme((t) => t.components.Button);\n const Settings = useTheme((t) => t.icons.Settings);\n const selectColumns = useTheme((t) => t.text.selectColumns);\n const resetAll = useTheme((t) => t.text.resetAll);\n const showAll = useTheme((t) => t.text.showAllColumns);\n const hideAll = useTheme((t) => t.text.hideAllColumns);\n const classes = useTheme((t) => t.classes);\n const cssVariables = useCssVariables();\n\n const table = useTableContext<T>();\n const reset = useContext(TableResetContext);\n const columns = table.useState((state) => state.props.columns);\n const hiddenColumns = table.useState((state) => state.hiddenColumns);\n\n const [anchorElement, setAnchorElement] = useState<Element | null>(null);\n\n const toggle = (column?: InternalColumn<T, unknown>, state?: boolean) => {\n const {\n props: { hiddenColumns: controlledHiddenColumns, onHiddenColumnsChange },\n } = table.getState();\n\n const newValue = new Set(hiddenColumns);\n\n for (const columnId of column ? [column.id] : columns.map((column) => column.id)) {\n if (state ?? hiddenColumns.has(columnId)) {\n newValue.delete(columnId);\n } else {\n newValue.add(columnId);\n }\n }\n\n if (!controlledHiddenColumns) {\n table.update((state) => {\n state.hiddenColumns = newValue;\n });\n }\n\n onHiddenColumnsChange?.(newValue);\n };\n\n const allVisible = columns.every((column) => !hiddenColumns.has(column.id));\n\n return (\n <>\n <IconButton onClick={(event) => setAnchorElement(anchorElement ? null : event.currentTarget)}>\n <Settings />\n </IconButton>\n\n <Popover\n anchorEl={anchorElement}\n open={!!anchorElement}\n onClose={() => setAnchorElement(null)}\n css={cssVariables}\n className={classes?.popover}\n backdropClassName={classes?.popoverBackdrop}\n >\n <div css={{ padding: `calc(var(--spacing) * 2)`, display: 'grid' }}>\n <div css={{ marginBottom: 'var(--spacing)' }}>{selectColumns}</div>\n\n <div css={{ margin: '0.5em 0', display: 'flex', gap: '0.5em' }}>\n <Button variant=\"outlined\" onClick={() => toggle(undefined, !allVisible)}>\n {allVisible ? hideAll : showAll}\n </Button>\n\n <Button variant=\"outlined\" onClick={reset}>\n {resetAll}\n </Button>\n </div>\n\n {columns.map((column) => (\n <FormControlLabel\n key={column.id}\n control={\n <Checkbox\n checked={!(column.hidden ?? hiddenColumns.has(column.id))}\n onChange={() => toggle(column)}\n disabled={column.hidden !== undefined}\n />\n }\n label={column.header}\n ></FormControlLabel>\n ))}\n </div>\n </Popover>\n </>\n );\n}\n","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<T>['classes'] | undefined,\n item: T,\n index: number,\n) {\n return [\n classes?.cell instanceof Function ? classes.cell(item, index) : classes?.cell,\n index % 2 === 0 && classes?.evenCell,\n index % 2 === 1 && classes?.oddCell,\n ];\n}\n\nexport function calcCss<T>(\n styles: MemoizedTableTheme<T>['styles'] | undefined,\n item: T,\n index: number,\n) {\n return [\n styles?.cell instanceof Function ? styles.cell(item, index) : styles?.cell,\n index % 2 === 0 && styles?.evenCell,\n index % 2 === 1 && styles?.oddCell,\n ];\n}\n","import type { ReactNode } from 'react';\nimport { memo, useLayoutEffect } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { calcClassNames, calcCss } from '../misc/calcClassNames';\nimport { cx } from '../misc/helpers';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport type { Id } from '../types';\n\nconst defaultWrapCell = (content: ReactNode) => {\n if (typeof content === 'string') {\n return (\n <span css={defaultClasses.text} title={content}>\n {content}\n </span>\n );\n }\n return content;\n};\n\nexport const Cell = memo(function Cell<T>({ itemId, rowIndex }: { itemId: Id; rowIndex: number }) {\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n\n const column = table.useState((state) => {\n const col = state.activeColumns.find((column) => column.id === columnId);\n return (\n col && {\n value: col.value,\n renderCell: col.renderCell,\n }\n );\n });\n const wrapCell = table.useState((state) => state.props.wrapCell) ?? defaultWrapCell;\n const item = table.useState((state) => state.activeItemsById.get(itemId));\n const columnStyleOverride = table.useState((state) => state.columnStyleOverride.get(columnId), {\n throttle: 16,\n });\n\n useLayoutEffect(() => table.getState().props.debugRender?.('render cell', itemId, columnId));\n const className = useTheme((t) => cx(...calcClassNames(t.classes, item?.value, rowIndex)));\n const styles = useTheme((t) => calcCss(t.styles, item?.value, rowIndex));\n\n if (!column || !item) return null;\n\n const content = column.renderCell(column.value(item.value), item.value);\n\n return (\n <div className={className} css={[defaultClasses.cell, styles]} style={columnStyleOverride}>\n {wrapCell(content, column.value(item.value), item.value, rowIndex)}\n </div>\n );\n});\n","import { forwardRef } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useTableContext } from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { Id } from '../types';\n\nexport const Details = forwardRef<\n HTMLDivElement,\n {\n itemId: Id;\n rowIndex: number;\n }\n>(function Details({ itemId, rowIndex }, ref) {\n const table = useTableContext<unknown>();\n const classes = useTheme((t) => t.classes);\n const styles = useTheme((t) => t.styles);\n\n const { details, className, css } = table.useState((state) => {\n const item = state.activeItemsById.get(itemId);\n\n return {\n details: state.expanded.has(itemId)\n ? state.props.rowDetails instanceof Function\n ? item\n ? state.props.rowDetails(item.value, rowIndex)\n : null\n : state.props.rowDetails\n : undefined,\n className:\n classes?.details instanceof Function\n ? classes.details(item?.value, rowIndex)\n : classes?.details,\n css:\n styles?.details instanceof Function\n ? styles.details(item?.value, rowIndex)\n : styles?.details,\n };\n });\n\n return details ? (\n <div ref={ref} className={className} css={[defaultClasses.details, css]}>\n {details}\n </div>\n ) : null;\n});\n","import { useTheme } from '../hooks/useTheme';\nimport { getAncestors, getDescendants } from '../misc/helpers';\nimport { useTableContext } from '../misc/tableContext';\nimport type { Id } from '../types';\n\nexport function ExpandControl<T>({\n itemId,\n hasDeferredChildren,\n}: {\n itemId: Id;\n hasDeferredChildren?: boolean;\n}): JSX.Element {\n const IconButton = useTheme((t) => t.components.IconButton);\n const Spinner = useTheme((t) => t.components.Spinner);\n const ChevronRight = useTheme((t) => t.icons.ChevronRight);\n\n const table = useTableContext<T>();\n const isExpanded = table.useState((state) => state.expanded.has(itemId));\n const hasChildren = table.useState(\n (state) => !!state.activeItemsById.get(itemId)?.children.length,\n );\n\n function toggle() {\n const {\n props: { expanded: controlledExpanded, expandOnlyOne, onExpandedChange },\n expanded,\n activeItemsById,\n } = table.getState();\n\n const newExpanded = new Set(expanded);\n\n if (expandOnlyOne) {\n newExpanded.clear();\n\n const item = activeItemsById.get(itemId);\n for (const ancestor of item ? getAncestors(activeItemsById, item) : []) {\n newExpanded.add(ancestor);\n }\n }\n\n if (isExpanded) {\n newExpanded.delete(itemId);\n\n const item = activeItemsById.get(itemId);\n for (const descendant of item ? getDescendants(item) : []) {\n newExpanded.delete(descendant);\n }\n } else {\n newExpanded.add(itemId);\n }\n\n onExpandedChange?.(newExpanded);\n\n if (!controlledExpanded) {\n table.update((state) => {\n state.expanded = newExpanded;\n });\n }\n }\n\n if (isExpanded && hasDeferredChildren && !hasChildren) {\n return <Spinner css={{ margin: '0 var(--spacing)' }} />;\n }\n\n return (\n <IconButton onClick={toggle}>\n <span\n css={{\n display: 'inline-flex',\n transition: 'all 300ms',\n transform: isExpanded ? 'rotate3d(0, 0, 1, 90deg)' : 'rotate3d(0, 0, 1, 0deg)',\n }}\n >\n <ChevronRight />\n </span>\n </IconButton>\n );\n}\n","import type React from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { getAncestors, getDescendants } from '../misc/helpers';\nimport { useTableContext } from '../misc/tableContext';\nimport type { Id } from '../types';\n\nexport function SelectComponent<T>({ itemId }: { itemId?: Id }): JSX.Element {\n const table = useTableContext<T>();\n const Checkbox = useTheme((t) => t.components.Checkbox);\n\n const isSelected = table.useState((state) => {\n const itemIds = itemId ? [itemId] : Array.from(state.activeItemsById.keys());\n return state.activeItemsById.size > 0 && itemIds.every((itemId) => state.selection.has(itemId));\n });\n\n function toggle(event: React.ChangeEvent) {\n const mouseEvent = event.nativeEvent as MouseEvent;\n\n const {\n activeItems,\n activeItemsById,\n lastSelectedId,\n selection,\n props: { selectSyncChildren, selection: controlledSelection, onSelectionChange },\n } = table.getState();\n\n let range;\n if (mouseEvent.shiftKey && itemId) {\n const a = lastSelectedId ? activeItems.findIndex((i) => lastSelectedId === i.id) : 0;\n const b = activeItems.findIndex((item) => item.id === itemId);\n range = activeItems.slice(Math.min(a, b), Math.max(a, b) + 1);\n } else {\n const item = itemId ? activeItemsById.get(itemId) : undefined;\n range = item ? [item] : activeItems;\n }\n\n const newSelection = new Set(selection);\n for (const item of range) {\n if (isSelected) newSelection.delete(item.id);\n else newSelection.add(item.id);\n }\n\n if (selectSyncChildren && isSelected) {\n for (const ancestor of getAncestors(activeItemsById, ...range)) {\n newSelection.delete(ancestor);\n }\n for (const descendant of getDescendants(...range)) {\n newSelection.delete(descendant);\n }\n }\n\n onSelectionChange?.(newSelection);\n\n if (!controlledSelection) {\n table.update((state) => {\n state.selection = newSelection;\n });\n }\n\n table.update((state) => {\n state.lastSelectedId = itemId;\n });\n }\n\n return (\n <Checkbox\n css={{\n justifySelf: 'start',\n color: '#c9cfda',\n }}\n checked={isSelected}\n onChange={toggle}\n />\n );\n}\n","import { memo, useEffect, useLayoutEffect, useRef } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { calcClassNames, calcCss } from '../misc/calcClassNames';\nimport { cx, getAncestors } from '../misc/helpers';\nimport { ColumnContext, useTableContext } from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport type { Id } from '../types';\nimport { Cell } from './cell';\nimport { Details } from './details';\nimport { ExpandControl } from './expandControl';\nimport { SelectComponent } from './selectComponent';\n\nexport const Row = memo(function Row<T>({\n itemId,\n rowIndex,\n}: {\n itemId: Id;\n rowIndex: number;\n}): JSX.Element | null {\n const table = useTableContext<T>();\n const divRef = useRef<HTMLDivElement>(null);\n const detailsDivRef = useRef<HTMLDivElement>(null);\n\n const classes = useTheme((t) => t.classes);\n const styles = useTheme((t) => t.styles);\n\n const {\n className,\n css_,\n indent,\n hasChildren,\n hasDeferredChildren,\n columnIds,\n enableSelection,\n rowAction,\n hasDetails,\n } = table.useState((state) => {\n const item = state.activeItemsById.get(itemId);\n\n return {\n className: cx(...calcClassNames(classes, item?.value, rowIndex)),\n css_: calcCss(styles, item?.value, rowIndex),\n indent: item ? getAncestors(state.activeItemsById, item).size : 0,\n hasChildren: !!item?.children.length,\n hasDeferredChildren: item && state.props.hasDeferredChildren?.(item.value),\n columnIds: state.activeColumns.map((column) => column.id),\n enableSelection: state.props.enableSelection,\n rowAction:\n state.props.rowAction instanceof Function\n ? item\n ? state.props.rowAction(item.value, rowIndex)\n : null\n : state.props.rowAction,\n hasDetails:\n state.props.rowDetails instanceof Function\n ? item\n ? !!state.props.rowDetails(item.value, rowIndex)\n : null\n : !!state.props.rowDetails,\n };\n });\n\n useEffect(() => {\n function update() {\n table.update((state) => {\n const h1 = document.contains(divRef.current) ? divRef.current?.offsetHeight ?? 0 : 0;\n const h2 = document.contains(detailsDivRef.current)\n ? detailsDivRef.current?.offsetHeight ?? 0\n : 0;\n\n state.rowHeights.set(itemId, h1 + h2);\n });\n }\n\n update();\n\n const handles = [divRef.current, detailsDivRef.current]\n .filter((x): x is HTMLDivElement => !!x)\n .map((div) => {\n const o = new ResizeObserver(update);\n o.observe(div);\n return () => o.disconnect();\n });\n\n return () => {\n handles.forEach((h) => h());\n };\n }, [table, itemId, divRef.current, detailsDivRef.current]);\n\n useLayoutEffect(() => table.getState().props.debugRender?.('render row', itemId));\n\n return (\n <div css={{ display: 'contents' }}>\n <div className={className} css={[defaultClasses.cellFill, css_]} ref={divRef} />\n\n <div className={className} css={[defaultClasses.cell, defaultClasses.firstCell, css_]}>\n <div css={{ width: indent * 20 }} />\n\n {enableSelection && <SelectComponent itemId={itemId} />}\n\n {(hasChildren || hasDeferredChildren || hasDetails) && (\n <ExpandControl itemId={itemId} hasDeferredChildren={hasDeferredChildren} />\n )}\n\n {rowAction}\n </div>\n\n {columnIds.map((columnId) => (\n <ColumnContext.Provider key={columnId} value={columnId}>\n <Cell itemId={itemId} rowIndex={rowIndex} />\n </ColumnContext.Provider>\n ))}\n\n <div className={className} css={[defaultClasses.cellFill, css_]} />\n\n <Details ref={detailsDivRef} itemId={itemId} rowIndex={rowIndex} />\n </div>\n );\n});\n","import type { HTMLProps, ReactNode } from 'react';\nimport { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { useTableContext } from '../misc/tableContext';\nimport { throttle } from '../misc/throttle';\nimport type { Id } from '../types';\n\nconst findScrollRoot = (x: HTMLElement): HTMLElement => {\n const parent = x.parentElement;\n if (!parent) return document.documentElement;\n if (parent.scrollHeight > parent.clientHeight && getComputedStyle(parent).overflowY !== 'visible')\n return parent;\n return findScrollRoot(parent);\n};\n\nconst relativeOffset = (x: HTMLElement, y: HTMLElement): number => {\n if (x.offsetParent === y.offsetParent || !x.offsetParent) return x.offsetTop - y.offsetTop;\n if (x.offsetParent instanceof HTMLElement) return relativeOffset(x.offsetParent, y) + x.offsetTop;\n return 0;\n};\n\nexport function Virtualized<T>({\n header,\n footer,\n children,\n ...props\n}: {\n header: ReactNode;\n footer: ReactNode;\n children: (itemIds: Id[], startIndex: number) => ReactNode;\n} & Omit<HTMLProps<HTMLDivElement>, 'children'>): JSX.Element {\n const table = useTableContext<T>();\n const virtual = table.useState((state) => state.props.virtual);\n const probeRef = useRef<HTMLDivElement>(null);\n const [, setId] = useState({});\n\n const {\n itemIds = [],\n from = 0,\n to,\n before = 0,\n after = 0,\n } = table.useState(\n (state) => {\n const itemIds = state.activeItems.map((item) => item.id);\n const root = probeRef.current && findScrollRoot(probeRef.current);\n if (!state.props.virtual) return { itemIds };\n if (!probeRef.current || !root || !document.contains(root)) return {};\n\n const {\n rowHeight,\n initalRowHeight,\n overscan = 100,\n overscanTop,\n overscanBottom,\n } = (state.props.virtual instanceof Object ? state.props.virtual : undefined) ?? {};\n\n let totalHeight = 0;\n const rowHeights = itemIds.map((itemId, index) => {\n const h =\n rowHeight ??\n state.rowHeights.get(itemId) ??\n initalRowHeight ??\n (index === 0 ? 100 : totalHeight / index);\n totalHeight += h;\n return h;\n });\n\n const probeOffset = relativeOffset(probeRef.current, root);\n const headerHeight = probeRef.current.offsetTop;\n const topOfTable = root.scrollTop - probeOffset + headerHeight;\n const bottomOfTable = topOfTable + root.clientHeight - headerHeight;\n\n let from = 0;\n let to = itemIds.length;\n let before = 0;\n let after = 0;\n for (const h of rowHeights) {\n if (before + h > topOfTable - (overscanTop ?? overscan)) break;\n from++;\n before += h;\n }\n\n for (const h of rowHeights.reverse()) {\n if (after + h > totalHeight - bottomOfTable - (overscanBottom ?? overscan)) break;\n to--;\n after += h;\n }\n\n return { itemIds: itemIds.slice(from, to), from, to, before, after };\n },\n { throttle: 16 },\n );\n\n const throttleScroll = (typeof virtual === 'boolean' ? undefined : virtual)?.throttleScroll ?? 16;\n const update = useMemo(() => throttle(() => setId({}), throttleScroll), [throttleScroll]);\n\n useEffect(() => {\n if (!virtual || !probeRef.current) return;\n\n window.addEventListener('scroll', update, true);\n window.addEventListener('resize', update, true);\n return () => {\n window.removeEventListener('scroll', update, true);\n window.removeEventListener('resize', update, true);\n };\n }, [update, virtual]);\n\n useEffect(() => update.cancel, [update]);\n\n useLayoutEffect(() =>\n table.getState().props.debugRender?.(`Virtualalized render ${from} to ${to}`),\n );\n\n return (\n <div {...props}>\n {header}\n\n {virtual && <div style={{ gridColumn: '1 / -1', height: before }} ref={probeRef} />}\n\n {children(itemIds, from)}\n\n {virtual && <div style={{ gridColumn: '1 / -1', height: after }} />}\n\n {footer}\n </div>\n );\n}\n","import { memo, useEffect, useLayoutEffect, useState } from 'react';\nimport { TableMemoContextProvider } from '../hooks/useTableMemo';\nimport { useTheme } from '../hooks/useTheme';\nimport { useTableStateStorage } from '../internalState/tableStateStorage';\nimport { useTableState } from '../internalState/useTableState';\nimport {\n ColumnContext,\n TableContext,\n TableResetContext,\n useTableContext,\n} from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport type { TableProps } from '../types';\nimport ClearFiltersButton from './clearFiltersButton';\nimport { ColumnFooter } from './columnFooter';\nimport { ColumnHeader, ColumnHeaderContext } from './columnHeader';\nimport { ColumnSelection } from './columnSelection';\nimport { Export } from './export';\nimport { ResizeHandleView } from './resizeHandle';\nimport { Row } from './row';\nimport { SelectComponent } from './selectComponent';\nimport { Virtualized } from './virtualized';\n\nexport function Table<T>(props: TableProps<T>): JSX.Element {\n const [table, resetState] = useTableState(props);\n const [isHydrated, clearStorage] = useTableStateStorage(table);\n\n async function reset() {\n await clearStorage();\n resetState();\n }\n\n useLayoutEffect(() => table.getState().props.debugRender?.('render table'));\n\n return (\n <TableContext.Provider value={table}>\n <TableResetContext.Provider value={reset}>\n <TableMemoContextProvider>\n <TableLoadingState isHydrated={isHydrated} />\n </TableMemoContextProvider>\n </TableResetContext.Provider>\n </TableContext.Provider>\n );\n}\n\nfunction TableLoadingState({ isHydrated }: { isHydrated: boolean }) {\n const loadingText = useTheme((t) => t.text.loading);\n const [showLoading, setShowLoading] = useState(false);\n\n useEffect(() => {\n const handle = setTimeout(() => setShowLoading(true), 500);\n return () => clearTimeout(handle);\n });\n\n return (\n <>\n {!isHydrated && showLoading && <div>{loadingText}</div>}\n <TableInner hidden={!isHydrated} />\n </>\n );\n}\n\nconst TableInner = memo(function TableInner<T>({ hidden }: { hidden: boolean }) {\n const table = useTableContext<T>();\n const fullWidth = table.useState((state) => state.props.fullWidth);\n const activeColumns = table.useState((state) =>\n state.activeColumns.map((column) => ({\n id: column.id,\n width: column.width,\n classes: column.classes,\n styles: column.styles,\n })),\n );\n const hasActiveFilters = table.useState((state) => {\n return state.activeColumns.some((column) => {\n const filter = state.filters.get(column.id);\n const filterValue = state.filterValues.get(column.id);\n return filter !== undefined && filterValue !== undefined && filter.isActive(filterValue);\n });\n });\n const columnWidths = table.useState((state) => state.columnWidths, { throttle: 16 });\n const hasFooter = table.useState((state) => state.activeColumns.some((column) => column.footer));\n\n const classes = useTheme((theme) => theme.classes);\n const styles = useTheme((theme) => theme.styles);\n const stickyHeader = table.useState((state) => state.props.stickyHeader);\n const stickyFooter = table.useState((state) => state.props.stickyFooter);\n\n const enableSelection = table.useState((state) => state.props.enableSelection);\n const enableColumnSelection = table.useState((state) => state.props.enableColumnSelection);\n const enableExport = table.useState(\n (state) => !!state.props.enableExport.copy || !!state.props.enableExport.download,\n );\n const cssVariables = useCssVariables();\n\n const enableClearFiltersButton = table.useState((state) => state.props.enableClearFiltersButton);\n\n useLayoutEffect(() => table.getState().props.debugRender?.('render table inner'));\n\n return (\n <Virtualized\n className={classes?.table}\n css={[cssVariables, defaultClasses.table, styles?.table, hidden && { visibility: 'hidden' }]}\n style={{\n gridTemplateColumns: [\n //\n fullWidth === 'right' || fullWidth === true ? 'auto' : '0',\n 'max-content',\n ...activeColumns.map(\n (column) => columnWidths.get(column.id) ?? column.width ?? 'max-content',\n ),\n fullWidth === 'left' || fullWidth === true ? 'auto' : '0',\n ].join(' '),\n }}\n header={\n <>\n <div\n className={classes?.headerCell}\n css={[\n defaultClasses.headerFill,\n styles?.headerCell,\n stickyHeader && defaultClasses.sticky,\n stickyHeader instanceof Object && stickyHeader,\n ]}\n />\n\n <div\n className={classes?.headerCell}\n css={[\n defaultClasses.headerCell,\n styles?.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 styles?.headerCell,\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 styles?.footerCell,\n stickyFooter && defaultClasses.stickyBottom,\n stickyFooter instanceof Object && stickyFooter,\n ]}\n />\n <div\n className={classes?.footerCell}\n css={[\n defaultClasses.footerFill,\n styles?.footerCell,\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 styles?.footerCell,\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","blocked","_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","showAllColumns","hideAllColumns","noResults","exportTitle","exportCopy","exportDownload","today","thisWeek","thisMonth","thisYear","lastSevenDays","lastThirtyDays","clearFilters","reset","loading","deselectAll","resetAll","rangeMin","rangeMax","calendarWeek","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","cellClass","classes","cell","cellStyles","detailsClass","details","detailsStyles","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","defaults","first","more","reduce","acc","source","copy","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","padEnd","target","select","Text","DatePickerContext","DatePickerProvider","weekDays","startOfDay","d","getFullYear","getMonth","getDate","endOfDay","lastDays","days","now","min","delta","firstDayOfWeek","diff","getDay","MS_PER_DAY","getCalendarWeek","date","y","fdoy","doy","floor","getTime","getTimezoneOffset","dow","w","commonQuickOptions","label","dateIntersect","dateClamp","_ref3","_ref4","_ref5","_ref6","_ref7","_ref8","DatePicker","rangeSelect","defaultDateInView","quickOptions","minDate","maxDate","showCalendarWeek","blockedRanges","getDayCssStyles","prevMonth","nextMonth","selected","preSelected","font","gray","position","content","top","right","bottom","left","clipPath","mountTime","dateInView","setDateInView","dirty","setDirty","hovered","setHovered","resolvedQuickOptions","option","calendars","getBackProps","getForwardProps","getDateProps","useDayzed","onDateSelected","showOutsideDays","onOffsetChanged","offset","formatWeekday","weekday","weekDay","UTC","edit","formatMonth","formatYear","weeks","justifySelf","borderRight","_v","week","weekStart","weekEnd","weekDisabled","dateObject","dayIndex","some","range","dateObj","convertDate","convertDateOrRange","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","limits","clamp","FormControlLabel","control","throttle","last","cancel","VirtualList","virtual","container","setId","throttleScroll","ro","ResizeObserver","observe","addEventListener","disconnect","removeEventListener","rowHeight","initalRowHeight","overscan","overscanTop","overscanBottom","itemHeight","averageItemHeight","clientHeight","scrollTop","to","ceil","before","after","onScroll","height","heights","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","removeItem","calcItems","addReaction","revealFiltered","externalSort","expanded","draft","tableItems","sorted","sortBy","lookup","allItems","allItemsById","traverse","expandedChanged","activeSet","activeItems","reverse","external","itemsById","onExpandedChange","runNow","noopParentId","calcProps","columnProps","inputColumns","columns","dependecies","globalDefaults","defaultColumnProps","mapColumn","_id","header","footer","renderCell","exportCell","disableSort","hidden","cacheKey","wrapCell","rowAction","rowDetails","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","footerCell","columnCss","stickyBottom","ResizeHandle","enabled","onPointerDown","div","setPointerCapture","pointerId","onPointerMove","hasPointerCapture","parentElement","clientX","getBoundingClientRect","onPointerUp","releasePointerCapture","onDoubleClick","getModifierState","ResizeHandleView","columnDivider","alignSelf","SortComponent","sortDisabled","findIndex","off","controlledSort","newDirection","ColumnHeaderContext","StoreScope","ColumnHeader","headerCell","columnStyles","store","useStore","draggingStart","clone","calcTargetIndex","offsetLeft","cols","otherCols","col","firstOffsetleft","sum","targetIndex","offsetWidth","mouseX","bounds","abs","cloneNode","append","getComputedStyle","style","pointerEvents","zIndex","remove","sticky","ColumnSelection","showAll","hideAll","anchorElement","setAnchorElement","controlledHiddenColumns","allVisible","csvExport","quote","eol","cells","line","clean","RegExp","ExportIcon","generate","clipboard","writeText","createElement","href","encodeURIComponent","click","justifyItems","justifyContent","calcClassNames","evenCell","oddCell","calcCss","defaultWrapCell","Cell","itemId","rowIndex","debugRender","Details","forwardRef","ExpandControl","hasDeferredChildren","isExpanded","hasChildren","controlledExpanded","descendant","SelectComponent","isSelected","itemIds","mouseEvent","nativeEvent","controlledSelection","shiftKey","Row","divRef","detailsDivRef","css_","indent","hasDetails","h1","contains","offsetHeight","h2","handles","o","h","cellFill","firstCell","findScrollRoot","documentElement","scrollHeight","overflowY","relativeOffset","offsetParent","offsetTop","Virtualized","probeRef","root","totalHeight","probeOffset","headerHeight","topOfTable","bottomOfTable","gridColumn","Table","resetState","clearStorage","TableLoadingState","loadingText","showLoading","setShowLoading","handle","TableInner","fullWidth","hasActiveFilters","hasFooter","visibility","gridTemplateColumns","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/misc/defaults.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/misc/throttle.ts","../../src/components/virtualList.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/details.tsx","../../src/components/expandControl.tsx","../../src/components/selectComponent.tsx","../../src/components/row.tsx","../../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 blocked: { main: '#f44336', light: '#f26257', 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 showAllColumns: 'Show all',\n hideAllColumns: 'Hide all',\n noResults: 'No results',\n exportTitle: 'Export',\n exportCopy: 'To clipboard',\n exportDownload: 'Download',\n today: 'Today',\n thisWeek: 'This week',\n thisMonth: 'This month',\n thisYear: 'This year',\n lastSevenDays: 'Last 7 days',\n lastThirtyDays: 'Last 30 days',\n clearFilters: 'Clear all filters',\n reset: 'Reset',\n loading: 'Loading',\n deselectAll: 'Deselect all',\n resetAll: 'Reset table state',\n rangeMin: 'Min',\n rangeMax: 'Max',\n calendarWeek: 'Wk',\n};\n","import type { TableTheme } from '../../types';\nimport { defaultColors } from './defaultColors';\nimport { defaultComponents } from './defaultComponents';\nimport { defaultIcons } from './defaultIcons';\nimport { defaultTexts } from './defaultTexts';\n\nexport const defaultTableTheme: TableTheme = {\n text: defaultTexts,\n components: defaultComponents,\n icons: defaultIcons,\n colors: defaultColors,\n spacing: '5px',\n};\n","import 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 cellClass = t.classes?.cell;\n const cellStyles = t.styles?.cell;\n const detailsClass = t.classes?.details;\n const detailsStyles = t.styles?.details;\n\n return {\n ...t,\n classes: {\n ...t.classes,\n cell:\n cellClass instanceof Function || Array.isArray(cellClass)\n ? memo('theme.classes.cell', cellClass)\n : cellClass,\n details:\n detailsClass instanceof Function || Array.isArray(detailsClass)\n ? memo('theme.classes.details', detailsClass)\n : detailsClass,\n },\n styles: {\n ...t.styles,\n cell:\n cellStyles instanceof Function || Array.isArray(cellStyles)\n ? memo('theme.styles.cell', cellStyles)\n : cellStyles,\n details:\n detailsStyles instanceof Function || Array.isArray(detailsStyles)\n ? memo('theme.styles.details', detailsStyles)\n : detailsStyles,\n },\n text: {\n ...t.text,\n },\n };\n };\n\n const theme =\n table?.useState((state) => {\n const localTheme = {\n text: state.props.text,\n classes: state.props.classes,\n styles: state.props.styles,\n components: state.props.components,\n icons: state.props.icons,\n colors: state.props.colors,\n spacing: state.props.spacing,\n };\n\n const column = state.activeColumns.find((column) => column.id === columnId);\n const columnsTheme = {\n classes: column?.classes,\n styles: column?.styles,\n };\n\n const theme = mergeThemes(\n defaultTableTheme,\n _globalTableTheme,\n contextTableTheme,\n localTheme,\n columnsTheme,\n ) as TableTheme<T>;\n\n return selector(process(theme));\n }) ??\n emptyStore.useState() ??\n selector(\n process(\n mergeThemes(defaultTableTheme, _globalTableTheme, contextTableTheme) as TableTheme<T>,\n ),\n );\n\n return theme;\n}\n","import type { Id, TableItem } from '../types';\n\nexport const flatMap = <T, S>(array: Iterable<T>, flatMap: (t: T) => S[]): S[] => {\n return [...array].flatMap(flatMap);\n};\n\nexport const orderBy = <T>(\n array: T[],\n selectors: ((t: T) => any)[] = [],\n direction: ('desc' | 'asc')[] = [],\n): T[] => {\n if (selectors.length === 0) selectors = [(t) => t];\n\n return [...array].sort((a, b) => {\n for (let i = 0; i < selectors.length; i++) {\n const _a = selectors[i]?.(a);\n const _b = selectors[i]?.(b);\n const _direction = direction[i] === 'desc' ? -1 : 1;\n if (_a > _b) return _direction;\n if (_a < _b) return -_direction;\n }\n return 0;\n });\n};\n\nexport const uniq = <T>(array: T[]): T[] => {\n const set = new Set<T>();\n for (const t of array) set.add(t);\n return Array.from(set);\n};\n\nexport const intersect = <T>(a: Iterable<T>, b: { has(t: T): boolean }): Set<T> => {\n const result = new Set<T>();\n for (const x of a) if (b.has(x)) result.add(x);\n return result;\n};\n\nexport const getAncestors = <T>(\n activeItemsById: Map<Id, TableItem<T>>,\n ...items: TableItem<T>[]\n): Set<Id> => {\n const result = new Set<Id>();\n\n const find = ({ parentId }: TableItem<T>): void => {\n const parent =\n parentId !== undefined && parentId !== null ? activeItemsById.get(parentId) : undefined;\n if (parent && !result.has(parent.id)) {\n result.add(parent.id);\n find(parent);\n }\n };\n items.forEach(find);\n return result;\n};\n\nexport const getDescendants = <T>(...items: TableItem<T>[]): Set<Id> => {\n const result = new Set<Id>();\n\n const find = (item: TableItem<T>): void => {\n for (const child of item.children) {\n if (!result.has(child.id)) {\n result.add(child.id);\n find(child);\n }\n }\n };\n items.forEach(find);\n return result;\n};\n\nexport const identity = (x: unknown): any => x;\n\nexport const asString = (x: unknown): string => {\n if (Array.isArray(x)) return x.map(asString).join(', ');\n if (x instanceof Object) return JSON.stringify(x);\n return String(x ?? '');\n};\n\nexport const asStringOrArray = (x: unknown): string | string[] => {\n if (Array.isArray(x)) return x.map(asString);\n return asString(x);\n};\n\nexport const asNumber = (x: unknown): number | null => {\n const n = Number(x);\n return Number.isNaN(n) ? null : n;\n};\n\nexport const asNumberOrArray = (x: unknown): number | null | (number | null)[] => {\n if (Array.isArray(x)) return x.map(asNumber);\n return asNumber(x);\n};\n\nexport const defaultEquals = (a: unknown, b: unknown): boolean => a === b;\n\nexport const subStringMatch = (a: string, b: string): boolean =>\n a.toLowerCase().includes(b.toLowerCase());\n\nexport const castArray = <T>(a: T | T[]) => (Array.isArray(a) ? a : [a]);\n\nexport const cx = (\n ...classNames: (string | false | undefined | null | Record<string, boolean>)[]\n) =>\n classNames\n .flatMap((entry) => {\n if (!entry) return [];\n if (typeof entry === 'string') return [entry];\n return Object.entries(entry)\n .filter(([, predicate]) => predicate)\n .map(([className]) => className);\n })\n .join(' ');\n","import { useTheme } from '../hooks/useTheme';\n\nexport function useCssVariables() {\n return useTheme(({ spacing, colors }) => {\n return {\n '--spacing': spacing,\n '--primaryMain': colors.primary.main,\n '--primaryLight': colors.primary.light,\n '--primaryContrastText': colors.primary.contrastText,\n '--secondaryMain': colors.secondary.main,\n '--secondaryLight': colors.secondary.light,\n '--secondaryContrastText': colors.secondary.contrastText,\n '--blockedMain': colors.blocked.main,\n '--blockedLight': colors.blocked.light,\n '--blockedContrastText': colors.blocked.contrastText,\n };\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","export function defaults<T extends object>(first: T, ...more: Partial<T>[]): T {\n return more.reduce<T>((acc, source) => {\n const copy = { ...acc };\n\n for (const [key, value] of Object.entries(source)) {\n copy[key as keyof T] ??= value as any;\n }\n\n return copy;\n }, first);\n}\n","import { Fragment, useMemo, useState } from 'react';\n\nconst className = 'schummar-table-date-input';\n\nconst defaultDate = new Date(1970, 0, 1);\n\nconst isIncludedType = (type: Intl.DateTimeFormatPartTypes): type is 'day' | 'month' | 'year' =>\n type === 'day' || type === 'month' || type === 'year';\n\nconst defaultLengths = {\n day: 2,\n month: 2,\n year: 4,\n};\n\nconst maxLengths = {\n day: 2,\n month: 2,\n year: Number.POSITIVE_INFINITY,\n};\n\nconst length = (type: 'day' | 'month' | 'year', value: string) =>\n Math.max(value.length, defaultLengths[type]);\n\nconst tabNext = (event: Element) => {\n const all = Array.from(document.querySelectorAll(`.${className}`));\n const index = all.indexOf(event);\n const next = all[(index + 1) % all.length];\n\n if (next instanceof HTMLElement) {\n next.focus();\n }\n};\n\nexport function DateInput({\n value,\n onChange,\n locale,\n}: {\n value: Date | null;\n onChange: (date: Date | null) => void;\n locale?: string;\n}) {\n const [override, setOverride] = useState<{ type: string; value: string }>();\n\n const commit = () => {\n if (!override) {\n return;\n }\n\n setOverride(undefined);\n\n if (!override.value) {\n onChange(null);\n return;\n }\n\n const newValue = value ? new Date(value) : new Date();\n switch (override.type) {\n case 'day': {\n newValue.setDate(Number(override.value));\n break;\n }\n\n case 'month': {\n newValue.setMonth(Number(override.value) - 1);\n break;\n }\n\n case 'year': {\n newValue.setFullYear(Number(override.value));\n break;\n }\n\n default: {\n break;\n }\n }\n\n onChange(newValue);\n };\n\n const format = useMemo(\n () =>\n new Intl.DateTimeFormat(locale, {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n }),\n [locale],\n );\n const parts = format.formatToParts(value ?? defaultDate);\n const isEmpty = !value;\n\n return (\n <div\n css={{\n display: 'flex',\n alignItems: 'baseline',\n }}\n >\n {parts.map(({ type, value }, index) => (\n <Fragment key={index}>\n {isIncludedType(type) ? (\n <input\n className={className}\n css={{\n boxSizing: 'content-box',\n overflow: 'visible',\n border: 'none',\n borderBottom: '2px solid transparent',\n outline: 'none',\n fontSize: 'inherit',\n\n '&:focus': {\n borderBottom: '2px solid var(--primaryMain)',\n },\n }}\n style={{\n width: `${length(type, value)}ch`,\n }}\n placeholder={''.padEnd(length(type, value), '0')}\n value={override?.type === type ? override.value : !isEmpty ? value : ''}\n onChange={(event) => {\n setOverride({ type, value: event.target.value });\n if (event.target.value.length >= maxLengths[type]) {\n setTimeout(() => tabNext(event.target));\n }\n }}\n onFocus={(event) => event.target.select()}\n onBlur={commit}\n />\n ) : type === 'literal' ? (\n <span>{value}</span>\n ) : null}\n </Fragment>\n ))}\n </div>\n );\n}\n","import { useTheme } from '../hooks/useTheme';\nimport type { TableTheme } from '../types';\n\nexport interface TextProps {\n id: keyof TableTheme['text'];\n}\n\nexport function Text({ id }: TextProps) {\n const text = useTheme((t) => t.text[id]);\n\n return <>{text}</>;\n}\n","import { DateObj, useDayzed } from 'dayzed';\nimport {\n Fragment,\n ReactNode,\n createContext,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { defaults } from '../misc/defaults';\nimport { gray } from '../theme/defaultTheme/defaultClasses';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport { DateInput } from './dateInput';\nimport { Text } from './text';\nimport { Interpolation, Theme } from '@emotion/react';\n\nexport type DateRange = { min: Date; max: Date };\n\nexport type DatePickerQuickOption =\n | 'today'\n | 'thisWeek'\n | 'thisMonth'\n | 'thisYear'\n | 'lastSevenDays'\n | 'lastThirtyDays'\n | { label: ReactNode; value: Date | DateRange | (() => Date | DateRange) }\n | ((onChange: (value: Date | DateRange | null) => void) => ReactNode);\n\nexport type DatePickerProps = {\n /** Currently selected day or range of days. */\n value: Date | DateRange | null;\n /** Callback for when the day (range) changes. */\n onChange: (value: Date | DateRange | null) => void;\n /** Currently visible date. */\n dateInView?: Date;\n /** Callback for when the currently visible date changes. */\n onDateInViewChange?: (value: Date) => void;\n /** If enabled, ranges can be selected. */\n rangeSelect?: boolean;\n /** Which locale to use to render the calendar. */\n locale?: string;\n /** Which day of the week should be in the first column. (0=Sunday, 1=Monday, ...)\n * @default 1\n */\n firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n /** Which month to show initially */\n defaultDateInView?: Date;\n /** Show buttons to quickly select suggested dates or date ranges */\n quickOptions?: DatePickerQuickOption[];\n /** Minimum selectable date */\n /** Date ranges that are visually marked as blocked */\n blockedRanges?: DateRange[];\n minDate?: Date;\n /** Maximum selectable date */\n maxDate?: Date;\n /** Whether to show the calendar week in the first column */\n showCalendarWeek?: boolean;\n};\n\nconst DatePickerContext = createContext<Partial<Omit<DatePickerProps, 'value' | 'onChange'>>>({});\n\nexport function DatePickerProvider({\n children,\n ...props\n}: Partial<Omit<DatePickerProps, 'value' | 'onChange'>> & { children?: ReactNode }) {\n const value = useMemo(() => props, [JSON.stringify(props)]);\n\n return <DatePickerContext.Provider value={value}>{children}</DatePickerContext.Provider>;\n}\n\nconst weekDays = [0, 1, 2, 3, 4, 5, 6] as const;\n\n/** Rounds a date down to the start of the day. */\nexport const startOfDay = (d: Date) => new Date(d.getFullYear(), d.getMonth(), d.getDate());\n\n/** Rounds a date up to the end of the day. */\nexport const endOfDay = (d: Date) =>\n new Date(d.getFullYear(), d.getMonth(), d.getDate() + 1, 0, 0, 0, -1);\n\nexport const lastDays = (days: number): DateRange => {\n const now = new Date();\n const min = new Date(now);\n min.setDate(min.getDate() - days + 1);\n\n return {\n min: startOfDay(min),\n max: endOfDay(now),\n };\n};\n\nexport const today = () => lastDays(1);\n\nexport const thisWeek = (delta = 0, firstDayOfWeek = 1): DateRange => {\n const now = new Date();\n const min = new Date(now);\n\n let diff = min.getDay() - firstDayOfWeek;\n if (diff < 0) {\n diff += 7;\n }\n min.setDate(min.getDate() - diff + delta * 7);\n\n const max = new Date(min);\n max.setDate(max.getDate() + 6);\n\n return {\n min: startOfDay(min),\n max: endOfDay(max),\n };\n};\n\nexport const thisMonth = (delta = 0): DateRange => {\n const now = new Date();\n const min = new Date(now);\n min.setDate(1);\n min.setMonth(min.getMonth() + delta);\n const max = new Date(min);\n max.setMonth(max.getMonth() + 1);\n max.setDate(max.getDate() - 1);\n\n return {\n min: startOfDay(min),\n max: endOfDay(max),\n };\n};\n\nexport const thisYear = (delta = 0): DateRange => {\n const now = new Date();\n const min = new Date(now);\n min.setDate(1);\n min.setMonth(0);\n min.setFullYear(min.getFullYear() + delta);\n const max = new Date(min);\n max.setFullYear(max.getFullYear() + 1);\n max.setDate(max.getDate() - 1);\n\n return {\n min: startOfDay(min),\n max: endOfDay(max),\n };\n};\n\nconst MS_PER_DAY = 1000 * 60 * 60 * 24;\nexport const getCalendarWeek = (date: Date): number => {\n // ISO 8601: Week 1 is the week with the first Thursday of the year.\n // https://en.wikipedia.org/wiki/ISO_week_date\n\n const y = date.getFullYear();\n const fdoy = new Date(y, 0, 1);\n const doy = Math.floor(\n (date.getTime() - fdoy.getTime() + (date.getTimezoneOffset() - fdoy.getTimezoneOffset())) /\n MS_PER_DAY,\n );\n const dow = fdoy.getDay();\n const w = Math.floor((10 + doy - dow) / 7);\n\n if (w === 0) {\n return getCalendarWeek(new Date(y - 1, 11, 31));\n }\n\n return w;\n};\n\nexport const commonQuickOptions = {\n today: { label: <Text id=\"today\" />, value: today },\n thisWeek: { label: <Text id=\"thisWeek\" />, value: (props) => thisWeek(0, props.firstDayOfWeek) },\n thisMonth: { label: <Text id=\"thisMonth\" />, value: () => thisMonth() },\n thisYear: { label: <Text id=\"thisYear\" />, value: () => thisYear() },\n lastSevenDays: { label: <Text id=\"lastSevenDays\" />, value: () => lastDays(7) },\n lastThirtyDays: { label: <Text id=\"lastThirtyDays\" />, value: () => lastDays(30) },\n} satisfies Record<\n DatePickerQuickOption & string,\n { label: ReactNode; value: Date | DateRange | ((props: DatePickerProps) => Date | DateRange) }\n>;\n\n/** Returns whether two dates and/or date ranges intersect. Intersection is considered per day. */\nexport function dateIntersect(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 dateClamp(date: Date, min?: Date, max?: Date) {\n if (min && date < min) {\n return min;\n }\n\n if (max && date > max) {\n return max;\n }\n\n return date;\n}\n\nfunction getValueForComparison(value?: Date | DateRange | null) {\n if (!value) {\n return value;\n }\n if (value instanceof Date) {\n return value.getTime();\n }\n return `${value.min?.getTime()}-${value.max?.getTime()}`;\n}\n\nexport function DatePicker(props: DatePickerProps) {\n const context = useContext(DatePickerContext);\n\n const {\n value,\n rangeSelect,\n locale,\n firstDayOfWeek = 1,\n defaultDateInView,\n quickOptions = ['today', 'thisWeek'],\n minDate,\n maxDate,\n showCalendarWeek,\n blockedRanges = [],\n } = defaults<DatePickerProps>(props, context);\n\n function onChange(value: Date | DateRange | null) {\n if (value instanceof Date) {\n value = dateClamp(value, minDate, maxDate);\n } else if (value) {\n value = {\n min: dateClamp(value.min, minDate, maxDate),\n max: dateClamp(value.max, minDate, maxDate),\n };\n }\n\n props.onChange(value);\n }\n\n const Button = useTheme((t) => t.components.Button);\n const IconButton = useTheme((t) => t.components.IconButton);\n const ChevronRight = useTheme((t) => t.icons.ChevronRight);\n const cssVariables = useCssVariables();\n function getDayCssStyles({\n disabled,\n prevMonth,\n nextMonth,\n today,\n blocked,\n selected,\n preSelected,\n }: {\n disabled?: boolean;\n prevMonth?: boolean;\n nextMonth?: boolean;\n today?: boolean;\n blocked?: boolean;\n selected?: boolean;\n preSelected?: boolean;\n }): Interpolation<Theme> {\n return [\n {\n padding: 10,\n border: 'none',\n background: 'transparent',\n cursor: disabled ? undefined : 'pointer',\n font: 'inherit',\n },\n (prevMonth || nextMonth) && {\n color: gray,\n },\n today && {\n outline: '1px solid var(--secondaryMain)',\n },\n blocked && {\n background: 'var(--blockedMain)',\n color: 'var(--blockedContrastText)',\n },\n selected && {\n background: 'var(--primaryMain)',\n color: 'var(--primaryContrastText)',\n },\n blocked &&\n selected && {\n position: 'relative',\n '::before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n background: 'var(--blockedMain)',\n clipPath: 'polygon(0 0, 0 50%, 50% 0)',\n },\n },\n preSelected && {\n background: 'var(--primaryLight)',\n color: 'var(--primaryContrastText)',\n },\n ];\n }\n\n const mountTime = useMemo(() => new Date(), []);\n const [dirty, setDirty] = useState<Partial<DateRange>>();\n const [hovered, setHovered] = useState<Date>();\n const [dateInViewLocal, setDateInViewLocal] = useState<Date>(defaultDateInView ?? mountTime);\n const dateInView = props.dateInView ?? dateInViewLocal;\n\n function setDateInView(date: Date) {\n setDateInViewLocal(date);\n props.onDateInViewChange?.(date);\n }\n\n const min = dirty ? dirty.min : value instanceof Date ? value : value?.min;\n const max = dirty ? dirty.max : value instanceof Date ? value : value?.max;\n\n const resolvedQuickOptions = [...quickOptions, { label: <Text id=\"reset\" />, value: null }].map(\n (option, index) => {\n if (option instanceof Function) {\n return option((value) => {\n setDirty(undefined);\n onChange(value);\n });\n }\n\n const { label, value } = typeof option === 'string' ? commonQuickOptions[option] : option;\n\n return (\n <Button\n key={index}\n variant=\"text\"\n type=\"button\"\n onClick={() => {\n setDirty(undefined);\n\n if (value instanceof Function) {\n onChange(value(props));\n } else {\n onChange(value);\n }\n }}\n >\n {label}\n </Button>\n );\n },\n );\n\n const { calendars, getBackProps, getForwardProps, getDateProps } = useDayzed({\n onDateSelected: () => undefined,\n firstDayOfWeek,\n showOutsideDays: true,\n date: dateInView,\n onOffsetChanged: (offset) =>\n setDateInView(new Date(dateInView.getFullYear(), dateInView.getMonth() + offset)),\n offset: 0,\n minDate,\n maxDate,\n });\n const now = useMemo(() => startOfDay(new Date()), []);\n\n const formatWeekday = useMemo(() => {\n const { format } = new Intl.DateTimeFormat(locale, { weekday: 'short' });\n return (weekDay: number) =>\n format(new Date(Date.UTC(2021, 7, ((weekDay + firstDayOfWeek) % 7) + 1)));\n }, [locale, firstDayOfWeek]);\n\n useEffect(\n () =>\n setDateInView(\n value === null ? defaultDateInView ?? mountTime : value instanceof Date ? value : value.max,\n ),\n [getValueForComparison(value), getValueForComparison(defaultDateInView), mountTime],\n );\n\n useEffect(() => {\n if (!rangeSelect) {\n setDirty(undefined);\n }\n }, [rangeSelect]);\n\n function set(min?: Date, max?: Date, edit?: 'min' | 'max') {\n if (!rangeSelect) {\n onChange(min ?? null);\n return;\n }\n\n if (min && max && min > max) {\n if (edit === 'min') {\n max = min;\n } else if (edit === 'max') {\n min = max;\n } else {\n [min, max] = [max, min];\n }\n }\n\n if (!min === !max) {\n setDirty(undefined);\n onChange(min && max ? { min, max: endOfDay(max) } : null);\n } else {\n setDirty({ min, max });\n }\n }\n\n const formatMonth = useMemo(() => {\n const { format } = new Intl.DateTimeFormat(locale, { month: 'long' });\n return (month: number) => format(new Date(2021, month));\n }, [locale]);\n\n const formatYear = useMemo(() => {\n const { format } = new Intl.DateTimeFormat(locale, { year: 'numeric' });\n return (year: number) => format(new Date(year, 0, 1));\n }, [locale]);\n\n return (\n <div 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 type=\"button\" {...getBackProps({ calendars })}>\n <ChevronRight css={{ transform: 'rotate3d(0, 0, 1, 180deg)' }} />\n </IconButton>\n\n <div css={{ display: 'flex' }}>\n {formatMonth(month)} {formatYear(year)}\n </div>\n\n <IconButton type=\"button\" {...getForwardProps({ calendars })}>\n <ChevronRight />\n </IconButton>\n </div>\n\n <div\n css={{\n justifySelf: 'center',\n display: 'grid',\n gridTemplateColumns: 'repeat(8, max-content)',\n }}\n >\n {showCalendarWeek ? (\n <div\n css={{\n justifySelf: 'center',\n padding: 10,\n borderRight: `1px solid ${gray}`,\n }}\n >\n <Text id=\"calendarWeek\" />\n </div>\n ) : (\n <div />\n )}\n\n {weekDays.map((_v, weekDay) => (\n <div\n key={weekDay}\n css={{\n justifySelf: 'center',\n padding: 10,\n }}\n >\n {formatWeekday(weekDay)}\n </div>\n ))}\n\n {weeks.map((week, index) => {\n const weekStart = week[0] as DateObj;\n const weekEnd = week[6] as DateObj;\n const weekDisabled =\n !rangeSelect ||\n (minDate && weekEnd.date < minDate) ||\n (maxDate && weekStart.date > maxDate);\n\n return (\n <Fragment key={index}>\n {showCalendarWeek ? (\n <button\n type=\"button\"\n css={{\n padding: 10,\n border: 'none',\n background: 'transparent',\n cursor: weekDisabled ? undefined : 'pointer',\n font: 'inherit',\n borderRight: `1px solid ${gray}`,\n }}\n onClick={() => {\n if (weekDisabled) {\n return;\n }\n\n const min = minDate && weekStart.date < minDate ? minDate : weekStart.date;\n const max = maxDate && weekEnd.date > maxDate ? maxDate : weekEnd.date;\n set(min, max);\n }}\n >\n {getCalendarWeek((week[0] as DateObj).date)}\n </button>\n ) : (\n <div />\n )}\n\n {week.map((dateObject, dayIndex) => {\n if (!dateObject) {\n return <div key={dayIndex} />;\n }\n\n const { prevMonth, nextMonth, date } = dateObject;\n const today = startOfDay(date).getTime() === now.getTime();\n const disabled = (minDate && date < minDate) || (maxDate && date > maxDate);\n\n const selected =\n date.getTime() === min?.getTime() ||\n (min && max && dateIntersect(date, { min, max }));\n const preSelected =\n !selected &&\n !disabled &&\n (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 const blocked = blockedRanges.some((range) => dateIntersect(date, range));\n\n return (\n <button\n type=\"button\"\n key={`${index}-${dayIndex}`}\n css={getDayCssStyles({\n disabled,\n prevMonth,\n nextMonth,\n today,\n blocked,\n selected,\n preSelected,\n })}\n {...getDateProps({ dateObj: dateObject })}\n onClick={() => {\n if (dirty) {\n if (min) set(min, date);\n else set(date, max);\n } else {\n set(date);\n }\n }}\n onPointerOver={() => setHovered(date)}\n onPointerOut={() => setHovered(undefined)}\n disabled={disabled}\n >\n {date.getDate()}\n </button>\n );\n })}\n </Fragment>\n );\n })}\n </div>\n </div>\n ))}\n\n <div\n css={{\n marginTop: 'var(--spacing)',\n display: 'grid',\n gridAutoFlow: 'column',\n justifyContent: 'center',\n }}\n >\n {resolvedQuickOptions}\n </div>\n </div>\n );\n}\n","import { useFilter } from '../hooks/useFilter';\nimport type { CommonFilterProps } from '../types';\nimport type { DatePickerProps, DateRange } from './datePicker';\nimport { dateIntersect, DatePicker } from './datePicker';\n\nfunction convertDate(x: unknown): Date | null {\n if (x instanceof Date) return x;\n if (typeof x === 'number' || typeof x === 'string') return new Date(x);\n return null;\n}\n\nfunction convertDateOrRange(x: unknown): Date | DateRange | null {\n if (x instanceof Object && 'min' in x && 'max' in x) {\n const range = {\n min: convertDate((x as any).min),\n max: convertDate((x as any).max),\n };\n return range.min && range.max ? (range as DateRange) : null;\n }\n return convertDate(x);\n}\n\nfunction convertDateOrArray(x: unknown): Date | DateRange | (Date | DateRange)[] | null {\n if (Array.isArray(x)) return x.map(convertDateOrRange).filter(Boolean) as (Date | DateRange)[];\n return convertDateOrRange(x);\n}\n\nexport function DateFilter<T, V>({\n locale,\n firstDayOfWeek,\n defaultDateInView,\n quickOptions,\n singleSelect,\n filterBy = convertDateOrArray,\n minDate,\n maxDate,\n showCalendarWeek,\n ...props\n}: {\n /** If enabled, only single days can be selected. Ranges otherwise. */\n singleSelect?: boolean;\n} & Pick<\n DatePickerProps,\n | 'locale'\n | 'firstDayOfWeek'\n | 'defaultDateInView'\n | 'quickOptions'\n | 'minDate'\n | 'maxDate'\n | 'showCalendarWeek'\n> &\n CommonFilterProps<T, V, Date | DateRange | null, Date | DateRange | null>): JSX.Element {\n const { value = null, onChange } = useFilter({\n ...props,\n filterBy,\n\n id: 'dateFilter',\n\n isActive(filterValue) {\n return !!filterValue;\n },\n\n test(filterValue, value) {\n return dateIntersect(filterValue, value);\n },\n });\n\n return (\n <div\n css={{\n padding: 'calc(var(--spacing) * 2)',\n display: 'grid',\n }}\n >\n <DatePicker\n rangeSelect={!singleSelect}\n value={value}\n onChange={onChange}\n locale={locale}\n firstDayOfWeek={firstDayOfWeek}\n defaultDateInView={defaultDateInView}\n quickOptions={quickOptions}\n minDate={minDate}\n maxDate={maxDate}\n showCalendarWeek={showCalendarWeek}\n />\n </div>\n );\n}\n","import { useState } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport type { TableTheme } from '../types';\n\ntype TextFieldProps = TableTheme['components']['TextField'] extends React.ComponentType<infer T>\n ? T\n : never;\n\nexport interface NumberFieldProps extends Omit<TextFieldProps, 'value' | 'onChange'> {\n value?: number | null;\n onChange?: (value: number | null) => void;\n}\n\nconst Pattern = /^-?\\d*(?:[.,]\\d*)?$/;\n\nconst printNumber = (value: number | null, locale?: string) => {\n if (value === null) {\n return '';\n }\n\n return value.toLocaleString(locale);\n};\n\nconst parseNumber = (value: string) => {\n if (value === '') {\n return null;\n }\n\n const asNumber = Number(value.replace(',', '.'));\n return Number.isNaN(asNumber) ? null : asNumber;\n};\n\nexport function NumberField({\n value: commitedValue = null,\n onChange,\n ...textFieldProps\n}: NumberFieldProps) {\n const locale = useTheme((t) => t.locale);\n const TextField = useTheme((t) => t.components.TextField);\n const [value = printNumber(commitedValue, locale), setValue] = useState<string>();\n\n return (\n <TextField\n value={value}\n onChange={(event) => {\n if (Pattern.test(event.target.value)) {\n setValue(event.target.value);\n }\n }}\n onBlur={() => {\n onChange?.(parseNumber(value));\n setValue(undefined);\n }}\n {...textFieldProps}\n />\n );\n}\n","import { useFilter } from '../hooks/useFilter';\nimport { useTheme } from '../hooks/useTheme';\nimport { asNumberOrArray, castArray } from '../misc/helpers';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport type { CommonFilterProps } from '../types';\nimport { NumberField } from './numberField';\n\nexport interface RangeFilterProps<T, V>\n extends CommonFilterProps<T, V, number | null, [number | null, number | null] | null> {\n min?: number;\n max?: number;\n}\n\nexport function RangeFilter<T, V>({\n min,\n max,\n filterBy = asNumberOrArray,\n ...props\n}: RangeFilterProps<T, V>): JSX.Element {\n const rangeMinText = useTheme((t) => t.text.rangeMin);\n const rangeMaxText = useTheme((t) => t.text.rangeMax);\n\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n const filterByFunction = filterBy instanceof Function ? filterBy : filterBy[0];\n\n const [minValue, maxValue] = table.useState((state) => {\n if (typeof min === 'number' && typeof max === 'number') {\n return [min, max];\n }\n\n const column = state.activeColumns.find((c) => c.id === columnId);\n\n if (!column) {\n return [0, 100];\n }\n\n let minValue;\n let maxValue;\n\n for (const item of state.items) {\n const columnValue = column.value(item.value) as V;\n const numberValues = castArray(filterByFunction(columnValue, item.value)).filter(\n (value): value is number => value !== null,\n );\n\n for (const value of numberValues) {\n minValue = Math.min(minValue ?? value, value);\n maxValue = Math.max(maxValue ?? value, value);\n }\n }\n\n return [min ?? minValue, max ?? maxValue];\n });\n\n const { value, onChange } = useFilter({\n ...props,\n filterBy,\n\n id: 'rangeFilter',\n\n isActive(filterValue) {\n return !!filterValue;\n },\n\n test(filterValue, value) {\n if (!filterValue || (filterValue[0] === null && filterValue[1] === null)) {\n return true;\n }\n\n const min = filterValue[0] ?? Number.NEGATIVE_INFINITY;\n const max = filterValue[1] ?? Number.POSITIVE_INFINITY;\n return value !== null && value >= min && value <= max;\n },\n });\n\n return (\n <div\n css={{\n padding: `calc(var(--spacing) * 2)`,\n display: 'grid',\n gap: '1em',\n }}\n >\n <div\n css={{\n display: 'flex',\n gap: '1em',\n alignItems: 'center',\n\n '& > *': {\n width: '10em',\n },\n }}\n >\n <NumberField\n value={value?.[0]}\n onChange={(newMin) => onChange(normalize(newMin, value?.[1], 'min', { min, max }))}\n startIcon={<span css={{ margin: '0 calc(var(--spacing) * 2)' }}>{rangeMinText}</span>}\n placeholder={String(minValue ?? '')}\n css={{\n alignItems: 'baseline',\n }}\n />\n -\n <NumberField\n value={value?.[1]}\n onChange={(newMax) => onChange(normalize(value?.[0], newMax, 'max', { min, max }))}\n startIcon={<span css={{ margin: '0 calc(var(--spacing) * 2)' }}>{rangeMaxText}</span>}\n placeholder={String(maxValue ?? '')}\n css={{\n alignItems: 'baseline',\n }}\n />\n </div>\n </div>\n );\n}\n\nfunction normalize(\n min: number | null | undefined,\n max: number | null | undefined,\n changed: 'min' | 'max',\n limits: { min?: number; max?: number },\n): [number | null, number | null] | null {\n min ??= null;\n max ??= null;\n\n if (min !== null && max !== null && min > max) {\n if (changed === 'min') {\n max = min;\n } else {\n min = max;\n }\n }\n\n return min !== null || max !== null\n ? [clamp(min, limits.min, limits.max), clamp(max, limits.min, limits.max)]\n : null;\n}\n\nfunction clamp(\n value: number | null,\n min = Number.NEGATIVE_INFINITY,\n max = Number.POSITIVE_INFINITY,\n): number | null {\n return value === null ? null : Math.min(Math.max(value, min), max);\n}\n","import type { ReactNode } from 'react';\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","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, useMemo, useRef, useState } from 'react';\nimport { throttle } from '../misc/throttle';\n\nexport interface VirtualListProps<T> extends Omit<HTMLProps<HTMLDivElement>, 'children'> {\n virtual?:\n | boolean\n | {\n rowHeight?: number;\n initalRowHeight?: number;\n throttleScroll?: number;\n overscan?: number;\n overscanBottom?: number;\n overscanTop?: number;\n };\n items: T[];\n children: (item: T, index: number) => ReactNode;\n}\n\nexport function VirtualList<T>({\n virtual = true,\n items,\n children,\n ...props\n}: VirtualListProps<T>): JSX.Element {\n const container = useRef<HTMLDivElement>(null);\n const [, setId] = useState({});\n\n const throttleScroll = (typeof virtual === 'boolean' ? undefined : virtual)?.throttleScroll ?? 16;\n const update = useMemo(() => throttle(() => setId({}), throttleScroll), [throttleScroll]);\n\n useEffect(() => {\n if (!virtual) return;\n\n const ro = new ResizeObserver(update);\n\n if (container.current) {\n ro.observe(container.current);\n }\n\n window.addEventListener('resize', update, true);\n return () => {\n ro.disconnect();\n window.removeEventListener('resize', update, true);\n update.cancel();\n };\n }, [update, virtual, throttleScroll]);\n\n if (!virtual) {\n return (\n <div\n {...props}\n css={{\n overflowY: 'auto',\n display: 'grid',\n }}\n >\n {items.map((item, index) => children(item, index))}\n </div>\n );\n }\n\n const {\n rowHeight,\n initalRowHeight = 38,\n overscan = 100,\n overscanTop,\n overscanBottom,\n } = (virtual instanceof Object ? virtual : undefined) ?? {};\n\n const itemHeight = rowHeight ?? (averageItemHeight(container.current) || initalRowHeight);\n const from = container.current?.clientHeight\n ? Math.max(\n 0,\n Math.floor((container.current.scrollTop - (overscanTop ?? overscan)) / itemHeight),\n )\n : 0;\n const to = container.current?.clientHeight\n ? Math.min(\n items.length,\n Math.ceil(\n (container.current.scrollTop +\n container.current.clientHeight +\n (overscanBottom ?? overscan)) /\n itemHeight,\n ),\n )\n : 1;\n const before = from * itemHeight;\n const after = (items.length - to) * itemHeight;\n\n return (\n <div\n {...props}\n onScroll={(event) => {\n update();\n props.onScroll?.(event);\n }}\n ref={container}\n css={{\n overflowY: 'auto',\n display: 'grid',\n }}\n >\n <div data-virtual-before style={{ height: before }} />\n {items.slice(from, to).map((item, index) => children(item, index + from))}\n <div data-virtual-after style={{ height: after }} />\n </div>\n );\n}\n\nfunction averageItemHeight(container: HTMLDivElement | null) {\n if (!container?.children.length) {\n return undefined;\n }\n\n const heights = Array.from(container.children)\n .slice(1, -1)\n .map((child) => child.clientHeight);\n return heights.reduce((a, b) => a + b, 0) / heights.length;\n}\n","import type { ReactNode } from 'react';\nimport { useEffect, useMemo, useState } from 'react';\nimport { useFilter } from '../hooks/useFilter';\nimport { useTheme } from '../hooks/useTheme';\nimport { asString, castArray, flatMap, uniq } from '../misc/helpers';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport type { CommonFilterProps, InternalColumn, SerializableValue } from '../types';\nimport { AutoFocusTextField } from './autoFocusTextField';\nimport { FormControlLabel } from './formControlLabel';\nimport type { VirtualListProps } from './virtualList';\nimport { VirtualList } from './virtualList';\n\nfunction toggle<T>(set: Set<T>, value: T, singleSelect?: boolean) {\n const newSet = new Set(singleSelect ? [] : set);\n if (set.has(value)) {\n newSet.delete(value);\n } else {\n newSet.add(value);\n }\n\n return newSet;\n}\n\nexport function SelectFilter<T, V, F extends SerializableValue>({\n options: providedOptions,\n stringValue = asString,\n render = stringValue,\n singleSelect,\n hideSearchField,\n hideResetButton,\n ...props\n}: {\n /** Which options are provided to select. By default all unique item values are used. */\n options?: F[];\n /** String representation of a value. Used to filter options via the text field. */\n stringValue?: (value: F) => string;\n /** Render values. By default a string representation of the value is used. */\n render?: (value: F) => ReactNode;\n /** If enabled, only one option can be selected at a time. */\n singleSelect?: boolean;\n /** If enabled, the search field is hidden. */\n hideSearchField?: boolean;\n /** If enabled, the reset button is hidden. */\n hideResetButton?: boolean;\n /** Virtual list props.\n * @default true */\n virtual?: VirtualListProps<unknown>['virtual'];\n} & CommonFilterProps<T, V, F, Set<F>>): JSX.Element {\n const IconButton = useTheme((t) => t.components.IconButton);\n const Checkbox = useTheme((t) => t.components.Checkbox);\n const Search = useTheme((t) => t.icons.Search);\n const Clear = useTheme((t) => t.icons.Clear);\n const deselectAll = useTheme((t) => t.text.deselectAll);\n const noResults = useTheme((t) => t.text.noResults);\n\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n\n const {\n value = new Set<F>(),\n onChange,\n filterBy,\n isActive,\n } = useFilter({\n ...props,\n\n id: 'selectFilter',\n\n isActive(filterValue) {\n return filterValue.size > 0;\n },\n\n test(filterValue, value) {\n return filterValue.has(value);\n },\n });\n\n const options = table.useState((state) => {\n if (providedOptions) return uniq(providedOptions);\n\n const column = state.activeColumns.find((column) => column.id === columnId) as\n | InternalColumn<T, V>\n | undefined;\n if (!column) return [];\n\n return 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 const delayedValue = useMemo(() => value, [isActive]);\n const ordered = filtered\n .filter((option) => delayedValue.has(option))\n .concat(filtered.filter((option) => !delayedValue.has(option)));\n\n const Button = useTheme((t) => t.components.Button);\n\n useEffect(() => {\n setQuery('');\n }, [isActive]);\n\n return (\n <div\n css={{\n padding: 'calc(var(--spacing) * 2)',\n display: 'grid',\n gap: 'var(--spacing)',\n }}\n >\n {!hideSearchField && (\n <AutoFocusTextField\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n endIcon={\n <IconButton onClick={() => setQuery('')}>{!query ? <Search /> : <Clear />}</IconButton>\n }\n css={{ marginBottom: 'var(--spacing)' }}\n />\n )}\n\n {!hideResetButton && (\n <Button\n disabled={value.size === 0}\n onClick={() => onChange(new Set())}\n variant=\"outlined\"\n css={{ justifyContent: 'center', width: '100%', marginBottom: 'var(--spacing)' }}\n >\n {deselectAll}\n </Button>\n )}\n\n <VirtualList\n items={ordered}\n css={{\n width: '20em',\n maxHeight: '20em',\n }}\n >\n {(option, index) => (\n <FormControlLabel\n key={index}\n control={\n <Checkbox\n checked={value.has(option)}\n onChange={() => onChange(toggle(value, option, singleSelect))}\n />\n }\n label={render(option)}\n ></FormControlLabel>\n )}\n </VirtualList>\n\n {ordered.length === 0 && <span css={{ textAlign: 'center' }}>{noResults}</span>}\n </div>\n );\n}\n","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 type { Draft } from 'immer';\nimport { Queue } from '../misc/queue';\nimport type { InternalTableState, SerializableValue } from '../types';\n\nconst KEYS = [\n 'sort',\n 'selection',\n 'expanded',\n 'hiddenColumns',\n 'filterValues',\n 'columnWidths',\n 'columnOrder',\n] as const;\n\nconst storageName = (id: string) => `schummar-table_state-v1_${id}`;\n\nexport type TableStateStorage = {\n getItem: (key: string) => string | null | Promise<string | null>;\n setItem: (key: string, value: string) => unknown | Promise<unknown>;\n removeItem: (key: string) => unknown | Promise<unknown>;\n} & (\n | {\n keys: () => string[] | Promise<string[]>;\n }\n | {\n length: number | (() => number | Promise<number>);\n key: (keyIndex: number) => string | null | Promise<string | null>;\n }\n);\n\nfunction stringify(value: SerializableValue) {\n function prepare(value: SerializableValue): any {\n if (value instanceof Date) {\n return { __date: value.toJSON() };\n }\n\n if (value instanceof Set) {\n return { __set: Array.from(value).map(prepare) };\n }\n\n if (value instanceof Map) {\n return { __map: Array.from(value.entries()).map((entry) => entry.map(prepare)) };\n }\n\n if (Array.isArray(value)) {\n return value.map(prepare);\n }\n\n if (value instanceof Object) {\n return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, prepare(v)]));\n }\n\n return value;\n }\n\n return JSON.stringify(prepare(value));\n}\n\nfunction parse(value: string) {\n return JSON.parse(value, (_key, value) => {\n if (value instanceof Object && '__date' in value) {\n return new Date(value.__date);\n }\n\n if (value instanceof Object && '__set' in value) {\n return new Set(value.__set);\n }\n\n if (value instanceof Object && '__map' in value) {\n return new Map(value.__map);\n }\n\n return value;\n });\n}\n\nexport function useTableStateStorage(table: Store<InternalTableState<any>>) {\n const [isHydrated, setIsHydrated] = useState(false);\n const [q] = useState(() => new Queue());\n\n // On mount: load\n useEffect(() => {\n const { persist } = table.getState().props;\n if (!persist) {\n setIsHydrated(true);\n return;\n }\n\n let isCanceled = false;\n\n (async () => {\n try {\n const { storage, id, include, exclude } = persist;\n const json = await storage.getItem(storageName(id));\n if (isCanceled || !json) return;\n\n const data = parse(json);\n table.getState().props.debug?.('load', json, data);\n\n // eslint-disable-next-line no-inner-declarations\n function applyUpdate(state: Draft<InternalTableState<any>>, key: (typeof KEYS)[number]) {\n if (\n //\n (!include || include.includes(key)) &&\n !exclude?.includes(key) &&\n key in data\n ) {\n if (key === 'filterValues') {\n for (const [id, value] of data[key]) {\n const filter = state.filters.get(id);\n\n if (filter && (filter.persist ?? filter.value === undefined)) {\n state.filterValues.set(id, value);\n state.filters.get(id)?.onChange?.(value);\n }\n }\n } else {\n if (\n key === 'expanded' ||\n key === 'hiddenColumns' ||\n key === 'selection' ||\n key === 'sort'\n ) {\n if (state.props[key] !== undefined) {\n return;\n }\n\n state.props[\n `on${\n (key.slice(0, 1).toUpperCase() + key.slice(1)) as Capitalize<typeof key>\n }Change`\n ]?.(data[key]);\n }\n\n state[key] = data[key];\n }\n }\n }\n\n table.update((state) => {\n for (const key of KEYS.filter((key) => key !== 'filterValues')) {\n applyUpdate(state, key);\n }\n });\n\n // First apply other keys and wait until changes take effect. Filters cannot be applied to hidden columns.\n await new Promise((resolve) => {\n setTimeout(resolve);\n });\n table.update((state) => applyUpdate(state, 'filterValues'));\n } catch (error) {\n console.error('Failed to load table state:', error);\n } finally {\n setIsHydrated(true);\n }\n })();\n\n return () => {\n isCanceled = true;\n };\n }, [table]);\n\n // After isHydrated, watch and save state\n useEffect(() => {\n if (!isHydrated) return;\n\n return table.subscribe(\n (state) => {\n if (!state.props.persist) return;\n\n const { storage, id, include, exclude } = state.props.persist;\n const data: any = {};\n\n for (const key of KEYS) {\n if (\n //\n (!include || include.includes(key)) &&\n !exclude?.includes(key)\n ) {\n if (key === 'filterValues') {\n data[key] = new Map();\n for (const [id, value] of state.filterValues) {\n if (state.filters.get(id)?.persist ?? state.filters.get(id)?.value === undefined) {\n data.filterValues.set(id, value);\n }\n }\n } else {\n if (\n (key === 'expanded' ||\n key === 'hiddenColumns' ||\n key === 'selection' ||\n key === 'sort') &&\n state.props[key] !== undefined\n ) {\n continue;\n }\n\n data[key] = state[key];\n }\n }\n }\n\n return { storage, id, data };\n },\n (props) => {\n if (!props) return;\n const { storage, id, data } = props;\n\n table.getState().props.debug?.('save', data, stringify(data));\n q.run(async () => {\n await storage.setItem(storageName(id), stringify(data));\n }, true);\n },\n { throttle: 1000 },\n );\n }, [table, isHydrated]);\n\n async function clear() {\n await q.run(async () => {\n const persist = table.getState().props.persist;\n if (!persist) {\n return;\n }\n\n const { storage, id } = persist;\n await storage.removeItem(storageName(id));\n\n setIsHydrated(false);\n q.clear();\n });\n }\n\n return [isHydrated, clear] as const;\n}\n","import { castDraft } from 'immer';\nimport { useEffect } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport { castArray, flatMap, orderBy } from '../misc/helpers';\nimport type { Id, InternalTableState, TableItem } from '../types';\n\nexport function calcItems<T>(state: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n state.addReaction(\n (state) =>\n [\n state.props.items,\n state.props.id,\n state.props.parentId,\n state.props.revealFiltered,\n state.props.externalSort,\n state.sort,\n state.filters,\n state.filterValues,\n state.activeColumns,\n state.expanded,\n ] as const,\n (\n [\n items = [],\n id,\n parentId,\n revealFiltered,\n externalSort,\n sort,\n filters,\n filterValues,\n activeColumns,\n ],\n draft,\n ) => {\n const tableItems = items.map<TableItem<T>>((item) => ({\n id: id(item),\n parentId: parentId?.(item),\n children: [],\n value: item,\n }));\n\n let sorted;\n if (sort.length === 0 || externalSort) {\n sorted = tableItems;\n } else {\n const selectors = flatMap(sort, (sort) => {\n const column = activeColumns.find((column) => column.id === sort.columnId);\n if (!column) return [];\n return column.sortBy.map((sortBy) => ({\n selector: (item: T) => sortBy(column.value(item), item),\n direction: sort.direction,\n }));\n }).filter(Boolean);\n\n sorted = orderBy(\n tableItems,\n selectors.map((x) => (item) => x.selector(item.value)),\n selectors.map((x) => x.direction),\n );\n }\n\n const lookup = new Map<Id, TableItem<T>>();\n for (const item of sorted) {\n lookup.set(item.id, item);\n }\n\n for (const item of sorted) {\n const parent =\n item.parentId !== undefined && item.parentId !== null\n ? lookup.get(item.parentId)\n : undefined;\n parent?.children.push(item);\n }\n\n const allItems = new Array<TableItem<T>>();\n const allItemsById = new Map<Id, TableItem<T>>();\n\n const traverse = (items: TableItem<T>[]): void => {\n for (const item of items) {\n allItems.push(item);\n allItemsById.set(item.id, item);\n traverse(item.children);\n }\n };\n traverse(sorted.filter((item) => item.parentId === undefined || item.parentId === null));\n\n let expandedChanged = false;\n const activeItemsById = new Map<Id, TableItem<T>>();\n const activeSet = new Set<Id>();\n const activeItems = [...allItems]\n .reverse()\n .filter((item) => {\n let isActive = activeSet.has(item.id);\n\n isActive ||= activeColumns.every((column) => {\n const filter = filters.get(column.id);\n if (!filter || filter.external) return true;\n\n const filterValue = filterValues.get(column.id);\n if (filterValue === undefined || !filter.isActive(filterValue)) return true;\n\n const filterBy = filter.filterBy ?? ((x) => x);\n const value = filterBy(column.value(item.value), item.value);\n return castArray(value).some((value) => filter.test(filterValue, value));\n });\n\n if (isActive && item.parentId !== undefined && item.parentId !== null) {\n if (\n revealFiltered &&\n Array.from(filters.entries()).some(([id, filter]) => {\n const filterValue = filterValues.get(id);\n return !!filter && filterValue !== undefined && filter.isActive(filterValue);\n })\n ) {\n expandedChanged ||= !draft.expanded.has(item.parentId);\n draft.expanded.add(item.parentId);\n } else if (!draft.expanded.has(item.parentId)) {\n isActive = false;\n }\n }\n\n if (isActive && item.parentId !== undefined && item.parentId !== null) {\n activeSet.add(item.parentId);\n }\n if (isActive) {\n activeItemsById.set(item.id, item);\n }\n\n return isActive;\n })\n .reverse();\n\n draft.items = castDraft(allItems);\n draft.itemsById = castDraft(allItemsById);\n draft.activeItems = castDraft(activeItems);\n draft.activeItemsById = castDraft(activeItemsById);\n\n if (expandedChanged) {\n setTimeout(() => {\n state.getState().props.onExpandedChange?.(state.getState().expanded);\n });\n }\n },\n { runNow: true },\n ),\n [state],\n );\n}\n","import { useMemo } from 'react';\nimport { useTableMemo } from '../hooks/useTableMemo';\nimport { asString } from '../misc/helpers';\nimport type { Column, Id, InternalColumn, InternalTableProps, TableProps } from '../types';\n\nconst noopParentId = () => undefined;\n\nexport function calcProps<T>(props: TableProps<T>): InternalTableProps<T> {\n const cache = useTableMemo();\n\n return useMemo(() => {\n let id;\n if (props.id instanceof Function || Array.isArray(props.id)) {\n id = cache('id', props.id);\n } else {\n id = cache('id', [(item: T) => item[props.id as keyof T] as unknown as Id, props.id]);\n }\n\n let parentId;\n if (props.parentId instanceof Function || Array.isArray(props.parentId)) {\n parentId = cache('parentId', props.parentId);\n } else if (props.parentId !== undefined) {\n parentId = cache('parentId', [\n (item: T) => item[props.parentId as keyof T] as unknown as Id | undefined,\n props.parentId,\n ]);\n } else {\n parentId = noopParentId;\n }\n\n const columnProps = props.columnProps && cache('columnProps', props.columnProps);\n\n let inputColumns;\n if (props.columns instanceof Function) {\n inputColumns = props.columns((value, column) => ({ ...column, value }));\n } else {\n inputColumns = props.columns.map((column) => ({ ...column, dependecies: undefined }));\n }\n\n const globalDefaults = props.defaultColumnProps;\n const mapColumn = <V>(\n {\n id: _id,\n header,\n footer,\n value,\n renderCell,\n exportCell,\n sortBy,\n disableSort,\n hidden,\n classes,\n styles,\n filter,\n width,\n }: Column<T, V>,\n index: number,\n ): InternalColumn<T, V> => {\n const id = _id ?? index;\n const cacheKey = typeof id === 'string' ? `s${id}` : `n${id}`;\n const defaults = { ...globalDefaults, ...columnProps?.(id) };\n\n return {\n id,\n header: header ?? defaults?.header ?? null,\n footer: footer ?? defaults?.footer ?? null,\n value: cache(`columns.${cacheKey}.value`, value),\n renderCell: cache(\n `columns.${cacheKey}.renderCell`,\n renderCell ?? defaults?.renderCell ?? asString,\n ),\n exportCell: exportCell ?? defaults?.exportCell ?? asString,\n sortBy: (\n sortBy ??\n defaults?.sortBy ?? [\n (v) =>\n typeof v === 'number' || v instanceof Date\n ? v\n : v === null || v === undefined\n ? ''\n : String(v),\n ]\n ).map((function_, i) => cache(`columns.${cacheKey}.sortBy.${i}`, function_)),\n disableSort,\n hidden: hidden ?? defaults?.hidden,\n classes: classes ?? defaults?.classes,\n styles: styles ?? defaults?.styles,\n filter: filter ?? defaults?.filter,\n width: width ?? defaults?.width,\n };\n };\n\n const columns = inputColumns.map(mapColumn);\n\n const wrapCell = props.wrapCell && cache('wrapCell', props.wrapCell);\n\n const rowAction =\n props.rowAction instanceof Function || Array.isArray(props.rowAction)\n ? cache('rowAction', props.rowAction)\n : props.rowAction;\n\n const rowDetails =\n props.rowDetails instanceof Function || Array.isArray(props.rowDetails)\n ? cache('rowDetails', props.rowDetails)\n : props.rowDetails;\n\n 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 columnProps,\n wrapCell,\n rowAction,\n rowDetails,\n enableSelection: props.enableSelection ?? true,\n selectSyncChildren: props.selectSyncChildren ?? true,\n stickyHeader: props.stickyHeader ?? true,\n stickyFooter: props.stickyFooter ?? true,\n enableExport,\n enableColumnSelection: props.enableColumnSelection ?? true,\n enableClearFiltersButton: props.enableClearFiltersButton ?? false,\n enableColumnResize: props.enableColumnResize ?? true,\n enableColumnReorder: props.enableColumnReorder ?? true,\n };\n }, [props]);\n}\n","import { useEffect } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport { intersect } from '../misc/helpers';\nimport type { InternalTableState } from '../types';\n\nexport function cleanupState<T>(state: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n state.addReaction(\n (state) =>\n [\n state.props.columns,\n state.itemsById,\n state.activeItemsById,\n state.activeColumns,\n ] as const,\n ([columns, itemsById, activeItemsById, activeColumns], draft) => {\n const columnIds = new Set(columns.map((column) => column.id));\n const activeColumnIds = new Set(activeColumns.map((column) => column.id));\n\n // Remove sort entries for non active columns\n const newSort = draft.sort.filter((s) => activeColumnIds.has(s.columnId));\n if (newSort.length < draft.sort.length) {\n draft.sort = newSort;\n setTimeout(() => {\n state.getState().props.onSortChange?.(newSort);\n });\n }\n\n // Remove filters for non active columns\n for (const id of draft.filters.keys()) {\n if (!activeColumnIds.has(id)) draft.filters.delete(id);\n }\n\n // Remove filterValues for non active columns\n for (const id of draft.filterValues.keys()) {\n if (!activeColumnIds.has(id)) draft.filterValues.delete(id);\n }\n\n // Remove hiddenColumns for non existing columns\n for (const id of draft.hiddenColumns.keys()) {\n if (!columnIds.has(id)) draft.hiddenColumns.delete(id);\n }\n\n // Remove columnWidth for non existing columns\n for (const id of draft.columnWidths.keys()) {\n if (!columnIds.has(id)) draft.columnWidths.delete(id);\n }\n\n // Remove non existing columns from columnOrder\n for (const id of draft.columnOrder) {\n if (!columnIds.has(id)) draft.columnOrder = draft.columnOrder.filter((x) => x !== id);\n }\n\n if (draft.props.items) {\n // Remove selection for non active items\n const newSelection = intersect(draft.selection, activeItemsById);\n if (newSelection.size !== draft.selection.size) {\n draft.selection = newSelection;\n setTimeout(() => {\n state.getState().props.onSelectionChange?.(newSelection);\n });\n }\n\n // Remove expanded for non existing items\n const newExpanded = intersect(draft.expanded, itemsById);\n if (newExpanded.size < draft.expanded.size) {\n draft.expanded = newExpanded;\n setTimeout(() => {\n state.getState().props.onExpandedChange?.(newExpanded);\n });\n }\n }\n },\n { runNow: true },\n ),\n [state],\n );\n}\n","import { useEffect } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport { orderBy } from '../misc/helpers';\nimport type { InternalTableState } from '../types';\n\nexport function filterColumns<T>(state: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n state.addReaction(\n (state) => [state.props.columns, state.hiddenColumns, state.columnOrder] as const,\n ([columns, hiddenColumns, columnOrder], draft) => {\n draft.activeColumns = orderBy(\n columns.filter((column) => !(column.hidden ?? hiddenColumns.has(column.id))),\n [(column) => columnOrder.indexOf(column.id)],\n );\n },\n { runNow: true },\n ),\n [state],\n );\n}\n","import { useEffect } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport { getAncestors, orderBy } from '../misc/helpers';\nimport type { Id, InternalTableState } from '../types';\n\nexport function normalizeExpanded<T>(table: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n table.addReaction(\n (state) => [state.props.expandOnlyOne, state.expanded, state.itemsById] as const,\n ([expandOnlyOne, , itemsById], state) => {\n let expanded = state.expanded;\n let hasChanged = false;\n\n const allAncestors = [...expanded].map((id) => {\n const item = itemsById.get(id);\n return {\n id,\n ancestors: item ? getAncestors(itemsById, item) : new Set<Id>(),\n };\n });\n\n // If only one branch may be expanded, check if there are more and close if necessary\n if (expandOnlyOne) {\n const withMostAncestors = orderBy(allAncestors, [(x) => x.ancestors.size], ['desc'])[0];\n\n if (\n [...expanded].some(\n (id) => id !== withMostAncestors?.id && !withMostAncestors?.ancestors.has(id),\n )\n ) {\n expanded = withMostAncestors?.ancestors ?? new Set();\n state.expanded = expanded;\n\n state.props.onExpandedChange?.(expanded);\n return;\n }\n }\n\n for (const { ancestors } of allAncestors) {\n for (const ancestor of ancestors ?? []) {\n if (!expanded.has(ancestor)) {\n expanded.add(ancestor);\n hasChanged = true;\n }\n }\n }\n\n if (hasChanged) {\n state.props.onExpandedChange?.(new Set(expanded));\n }\n },\n { runNow: true },\n ),\n [table],\n );\n}\n","import { useEffect } from 'react';\nimport type { Store } from 'schummar-state/react';\nimport type { InternalTableState } from '../types';\n\nexport function syncSelections<T>(table: Store<InternalTableState<T>>): void {\n useEffect(\n () =>\n table.addReaction(\n (state) => [state.props.selectSyncChildren, state.selection, state.activeItems] as const,\n ([selectSyncChildren, selection, activeItems], state) => {\n if (!selectSyncChildren) return;\n\n const newSelection = new Set(selection);\n for (const item of activeItems) {\n if (\n item.parentId !== undefined &&\n item.parentId !== null &&\n newSelection.has(item.parentId)\n ) {\n newSelection.add(item.id);\n }\n }\n\n if (newSelection.size !== selection.size) {\n state.selection = newSelection;\n setTimeout(() => {\n table.getState().props.onSelectionChange?.(newSelection);\n });\n }\n },\n { runNow: true },\n ),\n [table],\n );\n}\n","import { castDraft } from 'immer';\nimport { useEffect, useMemo, useState } from 'react';\nimport { Store } from 'schummar-state/react';\nimport type { InternalTableState, TableProps } from '../types';\nimport { calcItems } from './calcItems';\nimport { calcProps } from './calcProps';\nimport { cleanupState } from './cleanupState';\nimport { filterColumns } from './filterColumns';\nimport { normalizeExpanded } from './normalizeExpanded';\nimport { syncSelections } from './syncSelections';\n\nexport function useTableState<T>(\n _props: TableProps<T>,\n): [Store<InternalTableState<T>>, () => void] {\n const [key, setKey] = useState({});\n const props = calcProps(_props);\n\n function reset() {\n setKey({});\n\n if (props.sort === undefined) {\n props.onSortChange?.(props.defaultSort ?? []);\n }\n\n if (props.expanded === undefined) {\n props.onExpandedChange?.(props.defaultExpanded ?? new Set());\n }\n\n if (props.selection === undefined) {\n props.onSelectionChange?.(props.defaultSelection ?? new Set());\n }\n\n if (props.hiddenColumns === undefined) {\n props.onHiddenColumnsChange?.(props.defaultHiddenColumns ?? new Set());\n }\n\n props.onReset?.('table');\n }\n\n const state = useMemo(\n () =>\n new Store<InternalTableState<T>>({\n props,\n\n key,\n sort: props.defaultSort ?? [],\n selection: props.defaultSelection ?? new Set(),\n expanded: props.defaultExpanded ?? new Set(),\n rowHeights: new Map(),\n filters: new Map(),\n filterValues: new Map(),\n hiddenColumns: props.defaultHiddenColumns ?? new Set(),\n columnWidths: new Map(),\n columnOrder: props.columns.map((column) => column.id),\n columnStyleOverride: new Map(),\n\n activeColumns: [],\n items: [],\n itemsById: new Map(),\n activeItems: [],\n activeItemsById: new Map(),\n lastSelectedId: undefined,\n }),\n [key],\n );\n\n filterColumns(state);\n calcItems(state);\n normalizeExpanded(state);\n syncSelections(state);\n cleanupState(state);\n\n useEffect(() => {\n state.update((state) => {\n state.props = castDraft(props);\n if (props.sort) state.sort = props.sort;\n if (props.selection) state.selection = props.selection;\n if (props.expanded) state.expanded = props.expanded;\n if (props.hiddenColumns) state.hiddenColumns = props.hiddenColumns;\n for (const column of props.columns) {\n if (!state.columnOrder.includes(column.id)) {\n const index = props.columns.indexOf(column);\n state.columnOrder.splice(index, 0, column.id);\n }\n }\n });\n }, [state, props]);\n\n return [state, reset];\n}\n","import { useTheme } from '../hooks/useTheme';\nimport { useTableContext } from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\n\nexport default function ClearFiltersButton<T>() {\n const Button = useTheme((t) => t.components.Button);\n const textClearFilters = useTheme((t) => t.text.clearFilters);\n const table = useTableContext<T>();\n\n return (\n <div css={defaultClasses.clearFiltersButton}>\n <Button\n variant=\"outlined\"\n onClick={() => {\n table.update((state) => {\n state.activeColumns.forEach((column) => {\n state.filterValues.delete(column.id);\n });\n table.getState().props.onReset?.('filters');\n });\n }}\n >\n {textClearFilters}\n </Button>\n </div>\n );\n}\n","import { useTheme } from '../hooks/useTheme';\nimport { cx } from '../misc/helpers';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\n\nexport function ColumnFooter() {\n const table = useTableContext();\n const columnId = useColumnContext();\n const stickyFooter = table.useState((state) => state.props.stickyFooter);\n const columnStyleOverride = table.useState((state) => state.columnStyleOverride.get(columnId), {\n throttle: 16,\n });\n const columnClasses = table.useState(\n (state) => state.activeColumns.find((column) => column.id === columnId)?.classes?.footerCell,\n );\n const classes = useTheme((theme) => theme.classes?.footerCell);\n const columnCss = table.useState(\n (state) => state.activeColumns.find((column) => column.id === columnId)?.styles?.footerCell,\n );\n const styles = useTheme((theme) => theme.styles?.footerCell);\n\n const content = table.useState((state) => {\n const column = state.activeColumns.find((column) => column.id === columnId);\n\n return column?.footer;\n });\n\n return (\n <div\n className={cx(classes, columnClasses)}\n css={[\n defaultClasses.footerCell,\n styles,\n columnCss,\n stickyFooter && defaultClasses.stickyBottom,\n stickyFooter instanceof Object && stickyFooter,\n ]}\n style={columnStyleOverride}\n >\n {content}\n </div>\n );\n}\n","import type React from 'react';\nimport type { HTMLProps } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\n\nexport function ResizeHandle() {\n const table = useTableContext();\n const columnId = useColumnContext();\n const enabled = table.useState((state) => state.props.enableColumnResize);\n\n function onPointerDown(event: React.PointerEvent) {\n event.stopPropagation();\n\n const div = event.target as HTMLDivElement;\n div.setPointerCapture(event.pointerId);\n }\n\n function onPointerMove(event: React.PointerEvent) {\n event.stopPropagation();\n\n const div = event.target as HTMLDivElement;\n if (!div.hasPointerCapture(event.pointerId)) return;\n\n const parent = div.parentElement as HTMLDivElement;\n const width = Math.max(event.clientX - parent.getBoundingClientRect().left + 5, 50);\n\n table.update((state) => {\n state.columnWidths.set(columnId, `${width}px`);\n });\n }\n\n function onPointerUp(event: React.PointerEvent) {\n event.stopPropagation();\n\n const div = event.target as HTMLDivElement;\n div.releasePointerCapture(event.pointerId);\n }\n\n function onDoubleClick(event: React.MouseEvent) {\n table.update((state) => {\n if (event.getModifierState('Control')) {\n state.columnWidths.delete(columnId);\n } else {\n state.columnWidths.set(columnId, 'max-content');\n }\n });\n }\n\n return (\n <ResizeHandleView\n enabled={enabled}\n onPointerDown={enabled ? onPointerDown : undefined}\n onPointerMove={enabled ? onPointerMove : undefined}\n onPointerUp={enabled ? onPointerUp : undefined}\n onDoubleClick={enabled ? onDoubleClick : undefined}\n />\n );\n}\n\nexport function ResizeHandleView({\n enabled,\n ...props\n}: HTMLProps<HTMLDivElement> & { enabled?: boolean }) {\n const className = useTheme((theme) => theme.classes?.columnDivider);\n const styles = useTheme((theme) => theme.styles?.columnDivider);\n\n return (\n <div\n className={className}\n css={[\n {\n alignSelf: 'stretch',\n padding: '0 5px',\n cursor: enabled ? 'col-resize' : 'initial',\n display: 'flex',\n alignItems: 'center',\n\n '&:after': {\n content: '\"\"',\n width: 1,\n height: '1.5em',\n background: '#c9cfda',\n transition: 'transform 300ms',\n },\n },\n styles,\n ]}\n {...props}\n />\n );\n}\n","import type { ReactNode } from 'react';\nimport type React from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\n\nexport function SortComponent<T>({ children }: { children: ReactNode }): JSX.Element {\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n const Badge = useTheme((t) => t.components.Badge);\n const ArrowUpward = useTheme((t) => t.icons.ArrowUpward);\n\n const { direction, index, sortDisabled } = table.useState((state) => {\n const index = state.sort.findIndex((s) => s.columnId === columnId) ?? -1;\n const column = state.activeColumns.find((column) => column.id === columnId);\n\n return {\n direction: state.sort[index]?.direction,\n index: index >= 0 && state.sort.length > 1 ? index + 1 : undefined,\n sortDisabled: column?.disableSort ?? state.props.disableSort,\n };\n });\n\n function toggle(event: React.MouseEvent, off?: boolean) {\n if (sortDisabled) {\n return;\n }\n\n const {\n props: { sort: controlledSort, onSortChange },\n } = table.getState();\n\n const newDirection = direction === 'asc' ? 'desc' : 'asc';\n const newSort =\n event.getModifierState('Control') || off\n ? table.getState().sort.filter((s) => s.columnId !== columnId)\n : [];\n if (!off) {\n newSort.push({\n columnId,\n direction: newDirection,\n });\n }\n\n onSortChange?.(newSort);\n\n if (!controlledSort) {\n table.update((state) => {\n state.sort = newSort;\n });\n }\n\n event.preventDefault();\n return false;\n }\n\n return (\n <div\n css={{\n userSelect: 'none',\n display: 'grid',\n gridTemplateColumns: 'minmax(0, 1fr) max-content',\n alignItems: 'center',\n cursor: 'pointer',\n\n '& > div': {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n }}\n onClick={(event) => toggle(event)}\n onContextMenu={(event) => toggle(event, true)}\n >\n <div>{children}</div>\n\n {\n <Badge badgeContent={sortDisabled ? 0 : index}>\n <span\n css={[\n { transition: 'all 300ms', fontSize: '0.8em' },\n !direction && { opacity: 0 },\n direction === 'desc' && { transform: 'rotate3d(0, 0, 1, 180deg)' },\n ]}\n >\n <ArrowUpward />\n </span>\n </Badge>\n }\n </div>\n );\n}\n","import { castDraft } from 'immer';\nimport type React from 'react';\nimport { useEffect, useRef } from 'react';\nimport { StoreScope } from 'schummar-state/react';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport { useTheme } from '../hooks/useTheme';\nimport { cx } from '../misc/helpers';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport type { Id } from '../types';\nimport { FilterControl } from './filterControl';\nimport { ResizeHandle } from './resizeHandle';\nimport { SortComponent } from './sortComponent';\n\nexport const ColumnHeaderContext = new StoreScope({\n items: new Map<Id, HTMLDivElement>(),\n});\n\nexport function ColumnHeader() {\n const ref = useRef<HTMLDivElement>(null);\n const columnId = useColumnContext();\n const table = useTableContext();\n const enabled = table.useState((state) => state.props.enableColumnReorder);\n const columnStyleOverride = table.useState((state) => state.columnStyleOverride.get(columnId), {\n throttle: 16,\n });\n const stickyHeader = table.useState((state) => state.props.stickyHeader);\n const classes = useTheme((theme) => theme.classes?.headerCell);\n const styles = useTheme((theme) => theme.styles?.headerCell);\n\n const { header, columnClasses, columnStyles } = table.useState((state) => {\n const column = state.activeColumns.find((column) => column.id === columnId);\n return {\n header: column?.header,\n columnClasses: column?.classes?.headerCell,\n columnStyles: column?.styles?.headerCell,\n };\n });\n\n const store = ColumnHeaderContext.useStore();\n const draggingStart = useRef<{ mouseX: number; bounds: DOMRect }>();\n const clone = useRef<HTMLDivElement>();\n\n // Track each headers div in a store\n useEffect(() => {\n const div = ref.current;\n if (!div) return;\n\n store.update((state) => {\n state.items.set(columnId, castDraft(div));\n });\n\n return () => {\n store.update((state) => {\n state.items.delete(columnId);\n });\n };\n }, [store, columnId]);\n\n // Calculate which index the current header would get, given the current offset\n function calcTargetIndex(offsetLeft: number) {\n const cols = table\n .getState()\n .columnOrder.map((id) => ({ id, div: store.getState().items.get(id) }));\n\n const otherCols = cols.filter((col) => col.id !== columnId);\n\n const firstOffsetleft = cols.find((col) => col.div)?.div?.offsetLeft ?? 0;\n\n let sum = 0;\n const targetIndex = otherCols.findIndex((col) => {\n const width = col.div?.offsetWidth ?? 0;\n if (sum + width / 2 > offsetLeft - firstOffsetleft) return true;\n sum += width;\n return false;\n });\n\n return targetIndex === -1 ? otherCols.length : targetIndex;\n }\n\n // When starting clicking: Record initial mouse and div's bounds\n function onPointerDown(event: React.PointerEvent) {\n const div = ref.current;\n if (!div) return;\n draggingStart.current = { mouseX: event.clientX, bounds: div.getBoundingClientRect() };\n }\n\n // When mouse moves while clicked: Calculate transforms\n function onPointerMove(event: React.PointerEvent) {\n table.update((state) => {\n const div = ref.current;\n if (\n !div ||\n draggingStart.current === undefined ||\n Math.abs(event.clientX - draggingStart.current.mouseX) < 5\n )\n return;\n\n event.stopPropagation();\n div.setPointerCapture(event.pointerId);\n\n // Create clone of header div to move around with mouse\n if (!clone.current) {\n clone.current = div.cloneNode(true) as HTMLDivElement;\n document.body.append(clone.current);\n\n for (const [key, value] of Object.entries(getComputedStyle(div))) {\n try {\n clone.current.style[key as any] = value;\n } catch {\n // ignore\n }\n }\n\n Object.assign(clone.current.style, {\n pointerEvents: 'none',\n position: 'fixed',\n boxShadow:\n '0px 5px 5px -3px rgb(0 0 0 / 20%), 0px 8px 10px 1px rgb(0 0 0 / 14%), 0px 3px 14px 2px rgb(0 0 0 / 12%)',\n left: `${draggingStart.current.bounds.left}px`,\n top: `${draggingStart.current.bounds.top}px`,\n });\n\n div.style.color = 'rgba(0, 0, 0, 0.2)';\n }\n\n // Update clone's position each time\n clone.current.style.left = `${\n draggingStart.current.bounds.left + event.clientX - draggingStart.current.mouseX\n }px`;\n\n // Calculate target index\n const index = state.columnOrder.indexOf(columnId);\n const targetIndex = calcTargetIndex(\n div.offsetLeft + event.clientX - draggingStart.current.mouseX,\n );\n\n // Apply transforms to each column\n const columns = table.getState().columnOrder.map((id, index) => ({\n id,\n index,\n width: store.getState().items.get(id)?.offsetWidth ?? 0,\n }));\n\n state.columnOrder.forEach((id, i) => {\n let offset = 0;\n if (i === index) {\n // Current column: Move to target pos\n if (targetIndex > index) {\n offset = columns\n .slice(index + 1, targetIndex + 1)\n .reduce((sum, col) => sum + col.width, 0);\n } else if (targetIndex < index) {\n offset = -columns.slice(targetIndex, index).reduce((sum, col) => sum + col.width, 0);\n }\n } else if (i >= targetIndex && i < index) {\n // Left columns: Move right to make room if needed\n offset = div.offsetWidth;\n } else if (i > index && i <= targetIndex) {\n // Right columns: Move left to make room if needed\n offset = -div.offsetWidth;\n }\n\n state.columnStyleOverride.set(id, {\n transition: 'transform 500ms',\n transform: `translate3d(${offset}px, 0, 0)`,\n zIndex: i === index ? 1 : undefined,\n });\n });\n });\n }\n\n // When releasing mouse: Reset draggin state and apply column move\n function onPointerUp(event: React.PointerEvent) {\n table.update((state) => {\n const div = ref.current;\n if (!div || draggingStart.current === undefined) return;\n\n // Apply column move\n const index = state.columnOrder.indexOf(columnId);\n const targetIndex = calcTargetIndex(\n div.offsetLeft + event.clientX - draggingStart.current.mouseX,\n );\n\n state.columnOrder.splice(index, 1);\n state.columnOrder.splice(targetIndex, 0, columnId);\n\n // Cleanup\n clone.current?.remove();\n div.style.color = '';\n state.columnStyleOverride.clear();\n draggingStart.current = undefined;\n clone.current = undefined;\n });\n }\n\n return (\n <div\n ref={ref}\n className={cx(classes, columnClasses)}\n css={[\n {\n position: 'relative',\n userSelect: 'none',\n },\n defaultClasses.headerCell,\n styles,\n columnStyles,\n stickyHeader && defaultClasses.sticky,\n stickyHeader instanceof Object && stickyHeader,\n ]}\n style={columnStyleOverride}\n onPointerDown={enabled ? onPointerDown : undefined}\n onPointerMove={enabled ? onPointerMove : undefined}\n onPointerUp={enabled ? onPointerUp : undefined}\n >\n <SortComponent>{header}</SortComponent>\n <div css={{ flex: 1 }} />\n <FilterControl />\n <ResizeHandle />\n </div>\n );\n}\n","import { useContext, useState } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { TableResetContext, useTableContext } from '../misc/tableContext';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport type { InternalColumn } from '../types';\nimport { FormControlLabel } from './formControlLabel';\n\nexport function ColumnSelection<T>(): JSX.Element {\n const IconButton = useTheme((t) => t.components.IconButton);\n const Popover = useTheme((t) => t.components.Popover);\n const Checkbox = useTheme((t) => t.components.Checkbox);\n const Button = useTheme((t) => t.components.Button);\n const Settings = useTheme((t) => t.icons.Settings);\n const selectColumns = useTheme((t) => t.text.selectColumns);\n const resetAll = useTheme((t) => t.text.resetAll);\n const showAll = useTheme((t) => t.text.showAllColumns);\n const hideAll = useTheme((t) => t.text.hideAllColumns);\n const classes = useTheme((t) => t.classes);\n const cssVariables = useCssVariables();\n\n const table = useTableContext<T>();\n const reset = useContext(TableResetContext);\n const columns = table.useState((state) => state.props.columns);\n const hiddenColumns = table.useState((state) => state.hiddenColumns);\n\n const [anchorElement, setAnchorElement] = useState<Element | null>(null);\n\n const toggle = (column?: InternalColumn<T, unknown>, state?: boolean) => {\n const {\n props: { hiddenColumns: controlledHiddenColumns, onHiddenColumnsChange },\n } = table.getState();\n\n const newValue = new Set(hiddenColumns);\n\n for (const columnId of column ? [column.id] : columns.map((column) => column.id)) {\n if (state ?? hiddenColumns.has(columnId)) {\n newValue.delete(columnId);\n } else {\n newValue.add(columnId);\n }\n }\n\n if (!controlledHiddenColumns) {\n table.update((state) => {\n state.hiddenColumns = newValue;\n });\n }\n\n onHiddenColumnsChange?.(newValue);\n };\n\n const allVisible = columns.every((column) => !hiddenColumns.has(column.id));\n\n return (\n <>\n <IconButton onClick={(event) => setAnchorElement(anchorElement ? null : event.currentTarget)}>\n <Settings />\n </IconButton>\n\n <Popover\n anchorEl={anchorElement}\n open={!!anchorElement}\n onClose={() => setAnchorElement(null)}\n css={cssVariables}\n className={classes?.popover}\n backdropClassName={classes?.popoverBackdrop}\n >\n <div css={{ padding: `calc(var(--spacing) * 2)`, display: 'grid' }}>\n <div css={{ marginBottom: 'var(--spacing)' }}>{selectColumns}</div>\n\n <div css={{ margin: '0.5em 0', display: 'flex', gap: '0.5em' }}>\n <Button variant=\"outlined\" onClick={() => toggle(undefined, !allVisible)}>\n {allVisible ? hideAll : showAll}\n </Button>\n\n <Button variant=\"outlined\" onClick={reset}>\n {resetAll}\n </Button>\n </div>\n\n {columns.map((column) => (\n <FormControlLabel\n key={column.id}\n control={\n <Checkbox\n checked={!(column.hidden ?? hiddenColumns.has(column.id))}\n onChange={() => toggle(column)}\n disabled={column.hidden !== undefined}\n />\n }\n label={column.header}\n ></FormControlLabel>\n ))}\n </div>\n </Popover>\n </>\n );\n}\n","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<T>['classes'] | undefined,\n item: T,\n index: number,\n) {\n return [\n classes?.cell instanceof Function ? classes.cell(item, index) : classes?.cell,\n index % 2 === 0 && classes?.evenCell,\n index % 2 === 1 && classes?.oddCell,\n ];\n}\n\nexport function calcCss<T>(\n styles: MemoizedTableTheme<T>['styles'] | undefined,\n item: T,\n index: number,\n) {\n return [\n styles?.cell instanceof Function ? styles.cell(item, index) : styles?.cell,\n index % 2 === 0 && styles?.evenCell,\n index % 2 === 1 && styles?.oddCell,\n ];\n}\n","import type { ReactNode } from 'react';\nimport { memo, useLayoutEffect } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { calcClassNames, calcCss } from '../misc/calcClassNames';\nimport { cx } from '../misc/helpers';\nimport { useColumnContext, useTableContext } from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport type { Id } from '../types';\n\nconst defaultWrapCell = (content: ReactNode) => {\n if (typeof content === 'string') {\n return (\n <span css={defaultClasses.text} title={content}>\n {content}\n </span>\n );\n }\n return content;\n};\n\nexport const Cell = memo(function Cell<T>({ itemId, rowIndex }: { itemId: Id; rowIndex: number }) {\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n\n const column = table.useState((state) => {\n const col = state.activeColumns.find((column) => column.id === columnId);\n return (\n col && {\n value: col.value,\n renderCell: col.renderCell,\n }\n );\n });\n const wrapCell = table.useState((state) => state.props.wrapCell) ?? defaultWrapCell;\n const item = table.useState((state) => state.activeItemsById.get(itemId));\n const columnStyleOverride = table.useState((state) => state.columnStyleOverride.get(columnId), {\n throttle: 16,\n });\n\n useLayoutEffect(() => table.getState().props.debugRender?.('render cell', itemId, columnId));\n const className = useTheme((t) => cx(...calcClassNames(t.classes, item?.value, rowIndex)));\n const styles = useTheme((t) => calcCss(t.styles, item?.value, rowIndex));\n\n if (!column || !item) return null;\n\n const content = column.renderCell(column.value(item.value), item.value);\n\n return (\n <div className={className} css={[defaultClasses.cell, styles]} style={columnStyleOverride}>\n {wrapCell(content, column.value(item.value), item.value, rowIndex)}\n </div>\n );\n});\n","import { forwardRef } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useTableContext } from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { Id } from '../types';\n\nexport const Details = forwardRef<\n HTMLDivElement,\n {\n itemId: Id;\n rowIndex: number;\n }\n>(function Details({ itemId, rowIndex }, ref) {\n const table = useTableContext<unknown>();\n const classes = useTheme((t) => t.classes);\n const styles = useTheme((t) => t.styles);\n\n const { details, className, css } = table.useState((state) => {\n const item = state.activeItemsById.get(itemId);\n\n return {\n details: state.expanded.has(itemId)\n ? state.props.rowDetails instanceof Function\n ? item\n ? state.props.rowDetails(item.value, rowIndex)\n : null\n : state.props.rowDetails\n : undefined,\n className:\n classes?.details instanceof Function\n ? classes.details(item?.value, rowIndex)\n : classes?.details,\n css:\n styles?.details instanceof Function\n ? styles.details(item?.value, rowIndex)\n : styles?.details,\n };\n });\n\n return details ? (\n <div ref={ref} className={className} css={[defaultClasses.details, css]}>\n {details}\n </div>\n ) : null;\n});\n","import { useTheme } from '../hooks/useTheme';\nimport { getAncestors, getDescendants } from '../misc/helpers';\nimport { useTableContext } from '../misc/tableContext';\nimport type { Id } from '../types';\n\nexport function ExpandControl<T>({\n itemId,\n hasDeferredChildren,\n}: {\n itemId: Id;\n hasDeferredChildren?: boolean;\n}): JSX.Element {\n const IconButton = useTheme((t) => t.components.IconButton);\n const Spinner = useTheme((t) => t.components.Spinner);\n const ChevronRight = useTheme((t) => t.icons.ChevronRight);\n\n const table = useTableContext<T>();\n const isExpanded = table.useState((state) => state.expanded.has(itemId));\n const hasChildren = table.useState(\n (state) => !!state.activeItemsById.get(itemId)?.children.length,\n );\n\n function toggle() {\n const {\n props: { expanded: controlledExpanded, expandOnlyOne, onExpandedChange },\n expanded,\n activeItemsById,\n } = table.getState();\n\n const newExpanded = new Set(expanded);\n\n if (expandOnlyOne) {\n newExpanded.clear();\n\n const item = activeItemsById.get(itemId);\n for (const ancestor of item ? getAncestors(activeItemsById, item) : []) {\n newExpanded.add(ancestor);\n }\n }\n\n if (isExpanded) {\n newExpanded.delete(itemId);\n\n const item = activeItemsById.get(itemId);\n for (const descendant of item ? getDescendants(item) : []) {\n newExpanded.delete(descendant);\n }\n } else {\n newExpanded.add(itemId);\n }\n\n onExpandedChange?.(newExpanded);\n\n if (!controlledExpanded) {\n table.update((state) => {\n state.expanded = newExpanded;\n });\n }\n }\n\n if (isExpanded && hasDeferredChildren && !hasChildren) {\n return <Spinner css={{ margin: '0 var(--spacing)' }} />;\n }\n\n return (\n <IconButton onClick={toggle}>\n <span\n css={{\n display: 'inline-flex',\n transition: 'all 300ms',\n transform: isExpanded ? 'rotate3d(0, 0, 1, 90deg)' : 'rotate3d(0, 0, 1, 0deg)',\n }}\n >\n <ChevronRight />\n </span>\n </IconButton>\n );\n}\n","import type React from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { getAncestors, getDescendants } from '../misc/helpers';\nimport { useTableContext } from '../misc/tableContext';\nimport type { Id } from '../types';\n\nexport function SelectComponent<T>({ itemId }: { itemId?: Id }): JSX.Element {\n const table = useTableContext<T>();\n const Checkbox = useTheme((t) => t.components.Checkbox);\n\n const isSelected = table.useState((state) => {\n const itemIds = itemId ? [itemId] : Array.from(state.activeItemsById.keys());\n return state.activeItemsById.size > 0 && itemIds.every((itemId) => state.selection.has(itemId));\n });\n\n function toggle(event: React.ChangeEvent) {\n const mouseEvent = event.nativeEvent as MouseEvent;\n\n const {\n activeItems,\n activeItemsById,\n lastSelectedId,\n selection,\n props: { selectSyncChildren, selection: controlledSelection, onSelectionChange },\n } = table.getState();\n\n let range;\n if (mouseEvent.shiftKey && itemId) {\n const a = lastSelectedId ? activeItems.findIndex((i) => lastSelectedId === i.id) : 0;\n const b = activeItems.findIndex((item) => item.id === itemId);\n range = activeItems.slice(Math.min(a, b), Math.max(a, b) + 1);\n } else {\n const item = itemId ? activeItemsById.get(itemId) : undefined;\n range = item ? [item] : activeItems;\n }\n\n const newSelection = new Set(selection);\n for (const item of range) {\n if (isSelected) newSelection.delete(item.id);\n else newSelection.add(item.id);\n }\n\n if (selectSyncChildren && isSelected) {\n for (const ancestor of getAncestors(activeItemsById, ...range)) {\n newSelection.delete(ancestor);\n }\n for (const descendant of getDescendants(...range)) {\n newSelection.delete(descendant);\n }\n }\n\n onSelectionChange?.(newSelection);\n\n if (!controlledSelection) {\n table.update((state) => {\n state.selection = newSelection;\n });\n }\n\n table.update((state) => {\n state.lastSelectedId = itemId;\n });\n }\n\n return (\n <Checkbox\n css={{\n justifySelf: 'start',\n color: '#c9cfda',\n }}\n checked={isSelected}\n onChange={toggle}\n />\n );\n}\n","import { memo, useEffect, useLayoutEffect, useRef } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { calcClassNames, calcCss } from '../misc/calcClassNames';\nimport { cx, getAncestors } from '../misc/helpers';\nimport { ColumnContext, useTableContext } from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport type { Id } from '../types';\nimport { Cell } from './cell';\nimport { Details } from './details';\nimport { ExpandControl } from './expandControl';\nimport { SelectComponent } from './selectComponent';\n\nexport const Row = memo(function Row<T>({\n itemId,\n rowIndex,\n}: {\n itemId: Id;\n rowIndex: number;\n}): JSX.Element | null {\n const table = useTableContext<T>();\n const divRef = useRef<HTMLDivElement>(null);\n const detailsDivRef = useRef<HTMLDivElement>(null);\n\n const classes = useTheme((t) => t.classes);\n const styles = useTheme((t) => t.styles);\n\n const {\n className,\n css_,\n indent,\n hasChildren,\n hasDeferredChildren,\n columnIds,\n enableSelection,\n rowAction,\n hasDetails,\n } = table.useState((state) => {\n const item = state.activeItemsById.get(itemId);\n\n return {\n className: cx(...calcClassNames(classes, item?.value, rowIndex)),\n css_: calcCss(styles, item?.value, rowIndex),\n indent: item ? getAncestors(state.activeItemsById, item).size : 0,\n hasChildren: !!item?.children.length,\n hasDeferredChildren: item && state.props.hasDeferredChildren?.(item.value),\n columnIds: state.activeColumns.map((column) => column.id),\n enableSelection: state.props.enableSelection,\n rowAction:\n state.props.rowAction instanceof Function\n ? item\n ? state.props.rowAction(item.value, rowIndex)\n : null\n : state.props.rowAction,\n hasDetails:\n state.props.rowDetails instanceof Function\n ? item\n ? !!state.props.rowDetails(item.value, rowIndex)\n : null\n : !!state.props.rowDetails,\n };\n });\n\n useEffect(() => {\n function update() {\n table.update((state) => {\n const h1 = document.contains(divRef.current) ? divRef.current?.offsetHeight ?? 0 : 0;\n const h2 = document.contains(detailsDivRef.current)\n ? detailsDivRef.current?.offsetHeight ?? 0\n : 0;\n\n state.rowHeights.set(itemId, h1 + h2);\n });\n }\n\n update();\n\n const handles = [divRef.current, detailsDivRef.current]\n .filter((x): x is HTMLDivElement => !!x)\n .map((div) => {\n const o = new ResizeObserver(update);\n o.observe(div);\n return () => o.disconnect();\n });\n\n return () => {\n handles.forEach((h) => h());\n };\n }, [table, itemId, divRef.current, detailsDivRef.current]);\n\n useLayoutEffect(() => table.getState().props.debugRender?.('render row', itemId));\n\n return (\n <div css={{ display: 'contents' }}>\n <div className={className} css={[defaultClasses.cellFill, css_]} ref={divRef} />\n\n <div className={className} css={[defaultClasses.cell, defaultClasses.firstCell, css_]}>\n <div css={{ width: indent * 20 }} />\n\n {enableSelection && <SelectComponent itemId={itemId} />}\n\n {(hasChildren || hasDeferredChildren || hasDetails) && (\n <ExpandControl itemId={itemId} hasDeferredChildren={hasDeferredChildren} />\n )}\n\n {rowAction}\n </div>\n\n {columnIds.map((columnId) => (\n <ColumnContext.Provider key={columnId} value={columnId}>\n <Cell itemId={itemId} rowIndex={rowIndex} />\n </ColumnContext.Provider>\n ))}\n\n <div className={className} css={[defaultClasses.cellFill, css_]} />\n\n <Details ref={detailsDivRef} itemId={itemId} rowIndex={rowIndex} />\n </div>\n );\n});\n","import type { HTMLProps, ReactNode } from 'react';\nimport { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { useTableContext } from '../misc/tableContext';\nimport { throttle } from '../misc/throttle';\nimport type { Id } from '../types';\n\nconst findScrollRoot = (x: HTMLElement): HTMLElement => {\n const parent = x.parentElement;\n if (!parent) return document.documentElement;\n if (parent.scrollHeight > parent.clientHeight && getComputedStyle(parent).overflowY !== 'visible')\n return parent;\n return findScrollRoot(parent);\n};\n\nconst relativeOffset = (x: HTMLElement, y: HTMLElement): number => {\n if (x.offsetParent === y.offsetParent || !x.offsetParent) return x.offsetTop - y.offsetTop;\n if (x.offsetParent instanceof HTMLElement) return relativeOffset(x.offsetParent, y) + x.offsetTop;\n return 0;\n};\n\nexport function Virtualized<T>({\n header,\n footer,\n children,\n ...props\n}: {\n header: ReactNode;\n footer: ReactNode;\n children: (itemIds: Id[], startIndex: number) => ReactNode;\n} & Omit<HTMLProps<HTMLDivElement>, 'children'>): JSX.Element {\n const table = useTableContext<T>();\n const virtual = table.useState((state) => state.props.virtual);\n const probeRef = useRef<HTMLDivElement>(null);\n const [, setId] = useState({});\n\n const {\n itemIds = [],\n from = 0,\n to,\n before = 0,\n after = 0,\n } = table.useState(\n (state) => {\n const itemIds = state.activeItems.map((item) => item.id);\n const root = probeRef.current && findScrollRoot(probeRef.current);\n if (!state.props.virtual) return { itemIds };\n if (!probeRef.current || !root || !document.contains(root)) return {};\n\n const {\n rowHeight,\n initalRowHeight,\n overscan = 100,\n overscanTop,\n overscanBottom,\n } = (state.props.virtual instanceof Object ? state.props.virtual : undefined) ?? {};\n\n let totalHeight = 0;\n const rowHeights = itemIds.map((itemId, index) => {\n const h =\n rowHeight ??\n state.rowHeights.get(itemId) ??\n initalRowHeight ??\n (index === 0 ? 100 : totalHeight / index);\n totalHeight += h;\n return h;\n });\n\n const probeOffset = relativeOffset(probeRef.current, root);\n const headerHeight = probeRef.current.offsetTop;\n const topOfTable = root.scrollTop - probeOffset + headerHeight;\n const bottomOfTable = topOfTable + root.clientHeight - headerHeight;\n\n let from = 0;\n let to = itemIds.length;\n let before = 0;\n let after = 0;\n for (const h of rowHeights) {\n if (before + h > topOfTable - (overscanTop ?? overscan)) break;\n from++;\n before += h;\n }\n\n for (const h of rowHeights.reverse()) {\n if (after + h > totalHeight - bottomOfTable - (overscanBottom ?? overscan)) break;\n to--;\n after += h;\n }\n\n return { itemIds: itemIds.slice(from, to), from, to, before, after };\n },\n { throttle: 16 },\n );\n\n const throttleScroll = (typeof virtual === 'boolean' ? undefined : virtual)?.throttleScroll ?? 16;\n const update = useMemo(() => throttle(() => setId({}), throttleScroll), [throttleScroll]);\n\n useEffect(() => {\n if (!virtual || !probeRef.current) return;\n\n window.addEventListener('scroll', update, true);\n window.addEventListener('resize', update, true);\n return () => {\n window.removeEventListener('scroll', update, true);\n window.removeEventListener('resize', update, true);\n };\n }, [update, virtual]);\n\n useEffect(() => update.cancel, [update]);\n\n useLayoutEffect(() =>\n table.getState().props.debugRender?.(`Virtualalized render ${from} to ${to}`),\n );\n\n return (\n <div {...props}>\n {header}\n\n {virtual && <div style={{ gridColumn: '1 / -1', height: before }} ref={probeRef} />}\n\n {children(itemIds, from)}\n\n {virtual && <div style={{ gridColumn: '1 / -1', height: after }} />}\n\n {footer}\n </div>\n );\n}\n","import { memo, useEffect, useLayoutEffect, useState } from 'react';\nimport { TableMemoContextProvider } from '../hooks/useTableMemo';\nimport { useTheme } from '../hooks/useTheme';\nimport { useTableStateStorage } from '../internalState/tableStateStorage';\nimport { useTableState } from '../internalState/useTableState';\nimport {\n ColumnContext,\n TableContext,\n TableResetContext,\n useTableContext,\n} from '../misc/tableContext';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport type { TableProps } from '../types';\nimport ClearFiltersButton from './clearFiltersButton';\nimport { ColumnFooter } from './columnFooter';\nimport { ColumnHeader, ColumnHeaderContext } from './columnHeader';\nimport { ColumnSelection } from './columnSelection';\nimport { Export } from './export';\nimport { ResizeHandleView } from './resizeHandle';\nimport { Row } from './row';\nimport { SelectComponent } from './selectComponent';\nimport { Virtualized } from './virtualized';\n\nexport function Table<T>(props: TableProps<T>): JSX.Element {\n const [table, resetState] = useTableState(props);\n const [isHydrated, clearStorage] = useTableStateStorage(table);\n\n async function reset() {\n await clearStorage();\n resetState();\n }\n\n useLayoutEffect(() => table.getState().props.debugRender?.('render table'));\n\n return (\n <TableContext.Provider value={table}>\n <TableResetContext.Provider value={reset}>\n <TableMemoContextProvider>\n <TableLoadingState isHydrated={isHydrated} />\n </TableMemoContextProvider>\n </TableResetContext.Provider>\n </TableContext.Provider>\n );\n}\n\nfunction TableLoadingState({ isHydrated }: { isHydrated: boolean }) {\n const loadingText = useTheme((t) => t.text.loading);\n const [showLoading, setShowLoading] = useState(false);\n\n useEffect(() => {\n const handle = setTimeout(() => setShowLoading(true), 500);\n return () => clearTimeout(handle);\n });\n\n return (\n <>\n {!isHydrated && showLoading && <div>{loadingText}</div>}\n <TableInner hidden={!isHydrated} />\n </>\n );\n}\n\nconst TableInner = memo(function TableInner<T>({ hidden }: { hidden: boolean }) {\n const table = useTableContext<T>();\n const fullWidth = table.useState((state) => state.props.fullWidth);\n const activeColumns = table.useState((state) =>\n state.activeColumns.map((column) => ({\n id: column.id,\n width: column.width,\n classes: column.classes,\n styles: column.styles,\n })),\n );\n const hasActiveFilters = table.useState((state) => {\n return state.activeColumns.some((column) => {\n const filter = state.filters.get(column.id);\n const filterValue = state.filterValues.get(column.id);\n return filter !== undefined && filterValue !== undefined && filter.isActive(filterValue);\n });\n });\n const columnWidths = table.useState((state) => state.columnWidths, { throttle: 16 });\n const hasFooter = table.useState((state) => state.activeColumns.some((column) => column.footer));\n\n const classes = useTheme((theme) => theme.classes);\n const styles = useTheme((theme) => theme.styles);\n const stickyHeader = table.useState((state) => state.props.stickyHeader);\n const stickyFooter = table.useState((state) => state.props.stickyFooter);\n\n const enableSelection = table.useState((state) => state.props.enableSelection);\n const enableColumnSelection = table.useState((state) => state.props.enableColumnSelection);\n const enableExport = table.useState(\n (state) => !!state.props.enableExport.copy || !!state.props.enableExport.download,\n );\n const cssVariables = useCssVariables();\n\n const enableClearFiltersButton = table.useState((state) => state.props.enableClearFiltersButton);\n\n useLayoutEffect(() => table.getState().props.debugRender?.('render table inner'));\n\n return (\n <Virtualized\n className={classes?.table}\n css={[cssVariables, defaultClasses.table, styles?.table, hidden && { visibility: 'hidden' }]}\n style={{\n gridTemplateColumns: [\n //\n fullWidth === 'right' || fullWidth === true ? 'auto' : '0',\n 'max-content',\n ...activeColumns.map(\n (column) => columnWidths.get(column.id) ?? column.width ?? 'max-content',\n ),\n fullWidth === 'left' || fullWidth === true ? 'auto' : '0',\n ].join(' '),\n }}\n header={\n <>\n <div\n className={classes?.headerCell}\n css={[\n defaultClasses.headerFill,\n styles?.headerCell,\n stickyHeader && defaultClasses.sticky,\n stickyHeader instanceof Object && stickyHeader,\n ]}\n />\n\n <div\n className={classes?.headerCell}\n css={[\n defaultClasses.headerCell,\n styles?.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 styles?.headerCell,\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 styles?.footerCell,\n stickyFooter && defaultClasses.stickyBottom,\n stickyFooter instanceof Object && stickyFooter,\n ]}\n />\n <div\n className={classes?.footerCell}\n css={[\n defaultClasses.footerFill,\n styles?.footerCell,\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 styles?.footerCell,\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","blocked","_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","showAllColumns","hideAllColumns","noResults","exportTitle","exportCopy","exportDownload","today","thisWeek","thisMonth","thisYear","lastSevenDays","lastThirtyDays","clearFilters","reset","loading","deselectAll","resetAll","rangeMin","rangeMax","calendarWeek","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","cellClass","classes","cell","cellStyles","detailsClass","details","detailsStyles","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","defaults","first","more","reduce","acc","source","copy","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","padEnd","target","select","Text","DatePickerContext","DatePickerProvider","weekDays","startOfDay","d","getFullYear","getMonth","getDate","endOfDay","lastDays","days","now","min","delta","firstDayOfWeek","diff","getDay","MS_PER_DAY","getCalendarWeek","date","y","fdoy","doy","floor","getTime","getTimezoneOffset","dow","w","commonQuickOptions","label","dateIntersect","dateClamp","getValueForComparison","_ref3","_ref4","_ref5","_ref6","_ref7","_ref8","DatePicker","rangeSelect","defaultDateInView","quickOptions","minDate","maxDate","showCalendarWeek","blockedRanges","getDayCssStyles","prevMonth","nextMonth","selected","preSelected","font","gray","position","content","top","right","bottom","left","clipPath","mountTime","dirty","setDirty","hovered","setHovered","dateInViewLocal","setDateInViewLocal","dateInView","setDateInView","onDateInViewChange","resolvedQuickOptions","option","calendars","getBackProps","getForwardProps","getDateProps","useDayzed","onDateSelected","showOutsideDays","onOffsetChanged","offset","formatWeekday","weekday","weekDay","UTC","edit","formatMonth","formatYear","weeks","justifySelf","borderRight","_v","week","weekStart","weekEnd","weekDisabled","dateObject","dayIndex","some","range","dateObj","convertDate","convertDateOrRange","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","limits","clamp","FormControlLabel","control","throttle","last","cancel","VirtualList","virtual","container","setId","throttleScroll","ro","ResizeObserver","observe","addEventListener","disconnect","removeEventListener","rowHeight","initalRowHeight","overscan","overscanTop","overscanBottom","itemHeight","averageItemHeight","clientHeight","scrollTop","to","ceil","before","after","onScroll","height","heights","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","removeItem","calcItems","addReaction","revealFiltered","externalSort","expanded","draft","tableItems","sorted","sortBy","lookup","allItems","allItemsById","traverse","expandedChanged","activeSet","activeItems","reverse","external","itemsById","onExpandedChange","runNow","noopParentId","calcProps","columnProps","inputColumns","columns","dependecies","globalDefaults","defaultColumnProps","mapColumn","_id","header","footer","renderCell","exportCell","disableSort","hidden","cacheKey","wrapCell","rowAction","rowDetails","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","footerCell","columnCss","stickyBottom","ResizeHandle","enabled","onPointerDown","div","setPointerCapture","pointerId","onPointerMove","hasPointerCapture","parentElement","clientX","getBoundingClientRect","onPointerUp","releasePointerCapture","onDoubleClick","getModifierState","ResizeHandleView","columnDivider","alignSelf","SortComponent","sortDisabled","findIndex","off","controlledSort","newDirection","ColumnHeaderContext","StoreScope","ColumnHeader","headerCell","columnStyles","store","useStore","draggingStart","clone","calcTargetIndex","offsetLeft","cols","otherCols","col","firstOffsetleft","sum","targetIndex","offsetWidth","mouseX","bounds","abs","cloneNode","append","getComputedStyle","style","pointerEvents","zIndex","remove","sticky","ColumnSelection","showAll","hideAll","anchorElement","setAnchorElement","controlledHiddenColumns","allVisible","csvExport","quote","eol","cells","line","clean","RegExp","ExportIcon","generate","clipboard","writeText","createElement","href","encodeURIComponent","click","justifyItems","justifyContent","calcClassNames","evenCell","oddCell","calcCss","defaultWrapCell","Cell","itemId","rowIndex","debugRender","Details","forwardRef","ExpandControl","hasDeferredChildren","isExpanded","hasChildren","controlledExpanded","descendant","SelectComponent","isSelected","itemIds","mouseEvent","nativeEvent","controlledSelection","shiftKey","Row","divRef","detailsDivRef","css_","indent","hasDetails","h1","contains","offsetHeight","h2","handles","o","h","cellFill","firstCell","findScrollRoot","documentElement","scrollHeight","overflowY","relativeOffset","offsetParent","offsetTop","Virtualized","probeRef","root","totalHeight","probeOffset","headerHeight","topOfTable","bottomOfTable","gridColumn","Table","resetState","clearStorage","TableLoadingState","loadingText","showLoading","setShowLoading","handle","TableInner","fullWidth","hasActiveFilters","hasFooter","visibility","gridTemplateColumns","headerFill","footerFill","startIndex","textMatch","split","part","termMatch","outer","char","TextFilter","compare","placeholder"],"mappings":"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"}