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