schummar-table 1.0.0-beta.2 → 1.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["identity","serializeStyles","createCache","__unsafe_useEmotionCache","useMemo","useEmotionTheme","css","css","css","cloneElement","Export","createContext","useContext","TableSettingsContext","useMemo","mergeThemes","useRef","differenceInCalendarMonths","addDays","isBefore","startOfDay","isToday","useState","useRef","className","defaultDate","isIncludedType","maxValues","tabNext","useId","useState","useMemo","Fragment","useId","useState","useMemo","Fragment","createContext","useMemo","Temporal","useContext","useState","Fragment","createContext","useContext","useState","useRef","useState","useRef","useState","useMemo","useMemo","useMemo","useMemo","useMemo","useMemo","isValidElement","useSyncExternalStore","useRef","useMemo","useMemo","useRef","useState","useState","useRef","useCallback","useRef","createContext","useState","useContext","useRef","memo","css","css","memo","useContext","memo","css","useMemo","defaultClasses","defaultClasses","defaultClasses","memo","defaultClasses","useState","useMemo","useState","ClassNames","defaultClasses","useState","useContext","TableSettingsContext","useState","useState","memo","defaultClasses","useState","useContext","useVirtualizer","useWindowVirtualizer","useRef","useCallback","useMemo","defaultClasses","useState","useState","useMemo","useState","useVirtualizer","useMemo","useState"],"sources":["../src/theme/defaultTheme/defaultColors.ts","../src/components/spinnner.tsx","../src/theme/defaultTheme/badge.tsx","../src/theme/defaultTheme/button.tsx","../src/misc/helpers.ts","../src/theme/emotion.ts","../src/theme/defaultTheme/checkbox.tsx","../src/theme/defaultTheme/iconButton.tsx","../src/theme/defaultTheme/textField.tsx","../src/theme/defaultTheme/defaultComponents.ts","../src/theme/defaultTheme/defaultIcons.tsx","../src/theme/defaultTheme/defaultTexts.tsx","../src/theme/defaultTheme/index.tsx","../src/hooks/useTheme.ts","../src/components/autoFocusTextField.tsx","../src/misc/defaults.ts","../src/theme/useCssVariables.ts","../src/vendor/dayzed/utils.ts","../src/vendor/dayzed/dayzed.ts","../src/hooks/useLatestRef.ts","../src/misc/debounce.ts","../src/components/dateInput.tsx","../src/components/text.tsx","../src/components/timeInput.tsx","../src/components/datePicker.tsx","../src/state/context.ts","../src/misc/queue.ts","../src/state/persistence.ts","../src/state/useControllableState.ts","../src/state/useColumns.ts","../src/state/useExpanded.ts","../src/state/useFilters.ts","../src/state/useSort.ts","../src/state/useItems.ts","../src/state/useSelection.ts","../src/exporters/serializer.ts","../src/misc/equal.ts","../src/state/useTableProps.ts","../src/state/useTable.ts","../src/state/useTableImperativeHandle.ts","../src/state/useTableReset.ts","../src/components/resizeHandle.tsx","../src/components/cellScheduler.ts","../src/components/cell.tsx","../src/components/details.tsx","../src/components/expandControl.tsx","../src/components/selectComponent.tsx","../src/components/row.tsx","../src/components/rowStyles.ts","../src/components/clearFiltersButton.tsx","../src/components/columnFooter.tsx","../src/components/tableFooter.tsx","../src/components/filterPanel.tsx","../src/components/filterControl.tsx","../src/components/sortComponent.tsx","../src/components/columnHeader.tsx","../src/components/formControlLabel.tsx","../src/components/columnSelection.tsx","../src/components/export.tsx","../src/components/hiddenColumnFilters.tsx","../src/components/tableHeader.tsx","../src/components/virtualized.tsx","../src/components/tableGrid.tsx","../src/components/tableLoadingState.tsx","../src/components/table.tsx","../src/filters/defineFilter.ts","../src/filters/dateFilter.tsx","../src/components/numberField.tsx","../src/filters/rangeFilter.tsx","../src/components/virtualList.tsx","../src/filters/selectFilter.tsx","../src/filters/textFilter.tsx","../src/misc/textMatch.ts"],"sourcesContent":["import type { TableTheme } from '../../types';\n\nexport const defaultColors: TableTheme['colors'] = {\n primary: { main: '#1976d2', light: '#42a5f5', contrastText: '#fff' },\n secondary: { main: '#9c27b0', light: '#ba68c8', contrastText: '#fff' },\n blocked: { main: '#f44336', light: '#f26257', contrastText: '#fff' },\n background: '#ffffff',\n text: 'inherit',\n border: '#777',\n borderLight: '#eee',\n};\n","import { css } from '@emotion/react';\n\nexport function Spinner({ className }: { className?: string }) {\n return (\n <div\n className={className}\n css={css`\n display: inline-block;\n position: relative;\n width: 1em;\n height: 1em;\n\n div {\n box-sizing: border-box;\n display: block;\n position: absolute;\n width: 0.8em;\n height: 0.8em;\n margin: 0.1em;\n border: 0.1em solid #fff;\n border-radius: 50%;\n animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n border-color: currentColor transparent transparent transparent;\n }\n div:nth-of-type(1) {\n animation-delay: -0.45s;\n }\n div:nth-of-type(2) {\n animation-delay: -0.3s;\n }\n div:nth-of-type(3) {\n animation-delay: -0.15s;\n }\n @keyframes lds-ring {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n `}\n >\n <div />\n <div />\n <div />\n </div>\n );\n}\n","import type { TableTheme } from '../../types';\n\nexport const Badge: TableTheme['components']['Badge'] = ({ badgeContent, children }) => {\n return (\n <span\n css={{\n display: 'inline-flex',\n position: 'relative',\n flexShrink: 0,\n verticalAlign: 'middle',\n }}\n >\n {children}\n\n <span\n css={[\n {\n top: 0,\n right: 0,\n transform: 'scale(1) translate(50%, -50%)',\n transformOrigin: '100% 0%',\n height: 20,\n display: 'flex',\n padding: '0 6px',\n zIndex: 1,\n position: 'absolute',\n flexWrap: 'wrap',\n minWidth: 20,\n transition: 'transform 225ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',\n alignItems: 'center',\n lineHeight: 1,\n alignContent: 'center',\n borderRadius: 10,\n justifyContent: 'center',\n fontSize: '0.8em',\n },\n !badgeContent && {\n transform: 'scale(0) translate(50%, -50%)',\n transition: 'transform 195ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',\n },\n ]}\n >\n {badgeContent}\n </span>\n </span>\n );\n};\n","import type { TableTheme } from '../../types';\n\nexport const Button: TableTheme['components']['Button'] = ({\n startIcon,\n children,\n variant = 'text',\n ...props\n}) => {\n return (\n <button\n css={[\n {\n padding: `var(--spacing) calc(var(--spacing) * 2)`,\n display: 'inline-flex',\n alignItems: 'center',\n transition: 'background-color 150ms',\n border: 'none',\n cursor: 'pointer',\n background: 'transparent',\n borderRadius: 4,\n\n '&:active:not(:disabled)': {\n transform: 'scale3d(0.95, 0.95, 1)',\n },\n },\n variant === 'text' && {\n '&:hover': {\n background: 'rgba(0, 0, 0, 0.1)',\n },\n },\n variant === 'outlined' && {\n border: '1px solid var(--table-button-border, var(--table-border, #777777))',\n\n '&:disabled': {\n borderColor: 'var(--table-button-border-disabled, #eeeeee)',\n },\n },\n variant === 'contained' && {\n color: 'var(--primaryContrastText)',\n backgroundColor: 'var(--primaryMain)',\n boxShadow:\n '0px 3px 1px -2px rgb(0 0 0 / 20%), 0px 2px 2px 0px rgb(0 0 0 / 14%), 0px 1px 5px 0px rgb(0 0 0 / 12%)',\n\n '&:hover': {\n filter: 'brightness(0.9)',\n },\n\n '&:disabled': {\n filter: 'grayscale()',\n opacity: 0.5,\n },\n },\n ]}\n {...props}\n >\n {startIcon && <span css={{ marginRight: `calc(var(--spacing) * 2)` }}>{startIcon}</span>}\n <span>{children}</span>\n </button>\n );\n};\n","import type { Id, SingleOrMultiple, 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 locale?: (string | undefined)[],\n options?: (Intl.CollatorOptions | undefined)[],\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 const _locale = locale?.[i];\n const _options = options?.[i];\n\n if (typeof _a === 'string' && typeof _b === 'string') {\n const result = _a.localeCompare(_b, _locale, _options);\n if (result !== 0) return result * _direction;\n continue;\n }\n\n if (_a > _b) return _direction;\n if (_a < _b) return -_direction;\n }\n return 0;\n });\n};\n\nexport const uniq = <T>(array: T[]): T[] => {\n const set = new Set<T>();\n for (const t of array) set.add(t);\n return Array.from(set);\n};\n\nexport const intersect = <T>(a: Iterable<T>, b: { has(t: T): boolean }): Set<T> => {\n const result = new Set<T>();\n for (const x of a) if (b.has(x)) result.add(x);\n return result;\n};\n\nexport const getAncestors = <T>(\n activeItemsById: Map<Id, TableItem<T>>,\n ...items: TableItem<T>[]\n): Set<Id> => {\n const result = new Set<Id>();\n\n const find = ({ parentId }: TableItem<T>): void => {\n const parent =\n parentId !== undefined && parentId !== null ? activeItemsById.get(parentId) : undefined;\n if (parent && !result.has(parent.id)) {\n result.add(parent.id);\n find(parent);\n }\n };\n items.forEach(find);\n return result;\n};\n\nexport const getDescendants = <T>(...items: TableItem<T>[]): Set<Id> => {\n const result = new Set<Id>();\n\n const find = (item: TableItem<T>): void => {\n for (const child of item.children) {\n if (!result.has(child.id)) {\n result.add(child.id);\n find(child);\n }\n }\n };\n items.forEach(find);\n return result;\n};\n\nexport const identity = (x: unknown): any => x;\n\nexport const asString = (x: unknown): string => {\n if (Array.isArray(x)) return x.map(asString).join(', ');\n if (x === null || x === undefined) return '';\n if (x instanceof Object) return JSON.stringify(x);\n return String(x as string | number | bigint | boolean | symbol);\n};\n\nexport const asStringOrArray = (x: unknown): string | string[] => {\n if (Array.isArray(x)) return x.map(asString);\n return asString(x);\n};\n\nexport const asNumber = (x: unknown): number | null => {\n const n = Number(x);\n return Number.isNaN(n) ? null : n;\n};\n\nexport const asNumberOrArray = (x: unknown): number | null | (number | null)[] => {\n if (Array.isArray(x)) return x.map(asNumber);\n return asNumber(x);\n};\n\nexport const defaultEquals = (a: unknown, b: unknown): boolean => a === b;\n\nexport const subStringMatch = (a: string, b: string): boolean =>\n a.toLowerCase().includes(b.toLowerCase());\n\nexport const castArray = <T>(a: T | T[]) => (Array.isArray(a) ? a : [a]);\n\nexport const cx = (\n ...classNames: (string | false | undefined | null | Record<string, boolean>)[]\n) =>\n classNames\n .flatMap((entry) => {\n if (!entry) return [];\n if (typeof entry === 'string') return [entry];\n return Object.entries(entry)\n .filter(([, predicate]) => predicate)\n .map(([className]) => className);\n })\n .join(' ');\n\ntype Falsy = false | 0 | '' | null | undefined;\nexport function isTruthy<T>(x: T): x is Exclude<T, Falsy> {\n return !!x;\n}\n\n/** The single values of a `SingleOrMultiple` value. */\nexport function toSingles<T>(value: SingleOrMultiple<T>): readonly T[] {\n if (Array.isArray(value)) return value;\n if (value instanceof Set) return [...value];\n return [value as T];\n}\n","import createCache, { type EmotionCache } from '@emotion/cache';\nimport { __unsafe_useEmotionCache, useTheme as useEmotionTheme } from '@emotion/react';\nimport { serializeStyles, type Interpolation, type SerializedStyles } from '@emotion/serialize';\nimport { insertStyles } from '@emotion/utils';\nimport { useMemo } from 'react';\n\nexport type ClassNameOf = (...styles: Interpolation<any>[]) => string;\n\nconst isServer = typeof document === 'undefined';\n\nconst isSerialized = (x: object): x is SerializedStyles =>\n typeof (x as SerializedStyles).name === 'string' &&\n typeof (x as SerializedStyles).styles === 'string';\n\n/**\n * Turns emotion styles into a class name without re-serializing them on every call: serialized styles\n * are keyed by their hash, objects and functions by identity. Styles are inserted on the client only.\n */\nfunction createClassNameOf(cache: EmotionCache, theme: object | undefined): ClassNameOf {\n const classNames = new Map<string, string>();\n const ids = new WeakMap<object, number>();\n let nextId = 0;\n\n const keyOf = (style: Interpolation<any>): string => {\n if (style === null || style === undefined || typeof style === 'boolean') return '';\n if (typeof style !== 'object' && typeof style !== 'function') {\n return `${typeof style}:${String(style)}`;\n }\n if (typeof style === 'object' && isSerialized(style)) return `s:${style.name}`;\n let id = ids.get(style);\n if (id === undefined) ids.set(style, (id = nextId++));\n return `o:${id}`;\n };\n\n return (...styles) => {\n const key = JSON.stringify(styles.map(keyOf));\n let className = classNames.get(key);\n if (className === undefined) {\n // The theme is what the css prop passes to function interpolations.\n const serialized = serializeStyles(styles, cache.registered, theme);\n if (!isServer) insertStyles(cache, serialized, false);\n className = serialized.styles ? `${cache.key}-${serialized.name}` : '';\n // Function styles returning fresh objects would grow this forever.\n if (classNames.size > 5000) classNames.clear();\n classNames.set(key, className);\n }\n return className;\n };\n}\n\n// Without a CacheProvider, @emotion/react uses a cache keyed `css` in the browser and none on the\n// server; these mirror it so server and client produce the same class names.\nlet standaloneAppCache: EmotionCache | undefined;\nconst getStandaloneAppCache = () => (standaloneAppCache ??= createCache({ key: 'css' }));\n\nconst libraryClassNameOf = new WeakMap<EmotionCache, ClassNameOf>();\n\n/**\n * For the library's own styles. They go into a separate cache that is prepended to the document, so\n * user styles of equal specificity (emotion or plain CSS) always override them. It inherits the app\n * cache's nonce and container.\n */\nexport function useLibraryClassName(): ClassNameOf {\n const appCache = __unsafe_useEmotionCache() ?? getStandaloneAppCache();\n\n return useMemo(() => {\n let classNameOf = libraryClassNameOf.get(appCache);\n if (!classNameOf) {\n // A prepended sheet takes the top spot when it creates its first tag. If the app cache is\n // prepended too (MUI's recommended setup) and hasn't created one yet, it would later land above\n // ours and lose to the library styles, so make it create its tag first.\n if (!isServer && appCache.sheet.tags.length === 0) {\n insertStyles(appCache, serializeStyles(['--schummar-table: 1;']), false);\n }\n\n classNameOf = createClassNameOf(\n createCache({\n key: `${appCache.key}-st`,\n prepend: true,\n nonce: appCache.nonce,\n container: appCache.sheet.container,\n }),\n undefined,\n );\n libraryClassNameOf.set(appCache, classNameOf);\n }\n return classNameOf;\n }, [appCache]);\n}\n\nconst userClassNameOf = new WeakMap<EmotionCache, WeakMap<object, ClassNameOf>>();\n\n/**\n * For user supplied styles, and for library styles that must beat a theme component's own styles:\n * the app's emotion cache, with its theme for function interpolations.\n */\nexport function useUserClassName(): ClassNameOf {\n const appCache = __unsafe_useEmotionCache() ?? getStandaloneAppCache();\n const theme = useEmotionTheme();\n\n return useMemo(() => {\n let byTheme = userClassNameOf.get(appCache);\n if (!byTheme) userClassNameOf.set(appCache, (byTheme = new WeakMap()));\n\n let classNameOf = byTheme.get(theme);\n if (!classNameOf) byTheme.set(theme, (classNameOf = createClassNameOf(appCache, theme)));\n return classNameOf;\n }, [appCache, theme]);\n}\n","import { css } from '@emotion/react';\nimport { cx } from '../../misc/helpers';\nimport type { TableTheme } from '../../types';\nimport { useLibraryClassName } from '../emotion';\n\nconst labelCss = css({\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\nconst disabledCss = css({ color: 'rgba(0, 0, 0, 0.26)' });\n\nconst iconCss = css({ fontSize: '1.25rem', width: '1em', height: '1em', fill: 'currentColor' });\n\nconst checkedIconCss = css({ fill: 'var(--primaryMain)' });\n\nexport const Checkbox: TableTheme['components']['Checkbox'] = ({ className, ...props }) => {\n const libraryClass = useLibraryClassName();\n\n return (\n <label\n className={cx(libraryClass(labelCss), props.disabled && libraryClass(disabledCss), className)}\n >\n <input type=\"checkbox\" {...props} />\n\n {props.checked ? (\n <svg\n className={libraryClass(iconCss, checkedIconCss)}\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 className={libraryClass(iconCss)}\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 { css } from '@emotion/react';\nimport { cx } from '../../misc/helpers';\nimport type { TableTheme } from '../../types';\nimport { useLibraryClassName } from '../emotion';\n\nconst iconButtonCss = 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\nexport const IconButton: TableTheme['components']['IconButton'] = ({ className, ...props }) => {\n const libraryClass = useLibraryClassName();\n return <button className={cx(libraryClass(iconButtonCss), className)} {...props} />;\n};\n","import type { TableTheme } from '../../types';\n\nexport const TextField: TableTheme['components']['TextField'] = ({\n startIcon,\n endIcon,\n className,\n inputRef,\n onBlur,\n ...props\n}) => {\n return (\n <div\n className={className}\n css={[\n {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n border: '1px solid var(--table-textfield-border, var(--table-border, #777777))',\n borderRadius: 4,\n\n '&:focus-within': {\n border: '2px solid var(--primaryMain)',\n margin: -1,\n },\n },\n ]}\n >\n {startIcon}\n\n <input\n ref={inputRef}\n {...props}\n value={props.value ?? ''}\n onBlur={onBlur}\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 { css } from '@emotion/react';\nimport type { HTMLProps, ReactElement } from 'react';\nimport { cloneElement } from 'react';\nimport { cx } from '../../misc/helpers';\nimport type { TableTheme } from '../../types';\nimport { useLibraryClassName } from '../emotion';\n\nconst IconDefaultStyle = css({\n width: '1.5em',\n height: '1.5em',\n color: 'inherit',\n});\n\nfunction Icon(svg: ReactElement<HTMLProps<Element>>) {\n return function IconComponent(props: HTMLProps<Element>) {\n const libraryClass = useLibraryClassName();\n return cloneElement(svg, {\n ...props,\n className: cx(libraryClass(IconDefaultStyle), props.className),\n });\n };\n}\n\nconst Settings = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M3 17v2h6v-2H3zM3 5v2h10V5H3zm10 16v-2h8v-2h-8v-2h-2v6h2zM7 9v2H3v2h4v2h2V9H7zm14 4v-2H11v2h10zm-6-4h2V7h4V5h-4V3h-2v6z\" />\n </svg>,\n);\n\nconst Export = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n enableBackground=\"new 0 0 24 24\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <g>\n <rect fill=\"none\" height=\"24\" width=\"24\" />\n </g>\n <g>\n <path d=\"M18,15v3H6v-3H4v3c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2v-3H18z M17,11l-1.41-1.41L13,12.17V4h-2v8.17L8.41,9.59L7,11l5,5 L17,11z\" />\n </g>\n </svg>,\n);\n\nconst Clipboard = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M19 2h-4.18C14.4.84 13.3 0 12 0S9.6.84 9.18 2H5c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm7 18H5V4h2v3h10V4h2v16z\" />\n </svg>,\n);\n\nconst ChevronRight = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6-6-6z\" />\n </svg>,\n);\n\nconst Search = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\" />\n </svg>,\n);\n\nconst Clear = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z\" />\n </svg>,\n);\n\nconst ArrowDropDown = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M7 10l5 5 5-5H7z\" />\n </svg>,\n);\n\nconst FilterList = Icon(\n <svg viewBox=\"0 0 24 24\">\n <path\n fill=\"currentColor\"\n d=\"M14,12V19.88C14.04,20.18 13.94,20.5 13.71,20.71C13.32,21.1 12.69,21.1 12.3,20.71L10.29,18.7C10.06,18.47 9.96,18.16 10,17.87V12H9.97L4.21,4.62C3.87,4.19 3.95,3.56 4.38,3.22C4.57,3.08 4.78,3 5,3V3H19V3C19.22,3 19.43,3.08 19.62,3.22C20.05,3.56 20.13,4.19 19.79,4.62L14.03,12H14Z\"\n />\n </svg>,\n);\n\nconst ArrowUpward = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z\" />\n </svg>,\n);\n\nexport const defaultIcons: TableTheme['icons'] = {\n Settings,\n Export,\n Clipboard,\n ChevronRight,\n Search,\n Clear,\n ArrowDropDown,\n FilterList,\n ArrowUpward,\n};\n","import type { TableTheme } from '../../types';\n\nexport const defaultTexts: TableTheme['text'] = {\n selectColumns: 'Select visible columns',\n showAllColumns: 'Show all',\n hideAllColumns: 'Hide all',\n noResults: 'No results',\n exportTitle: 'Export',\n exportCopy: 'To clipboard',\n exportDownload: 'Download',\n today: 'Today',\n thisWeek: 'This week',\n thisMonth: 'This month',\n thisYear: 'This year',\n lastSevenDays: 'Last 7 days',\n lastThirtyDays: 'Last 30 days',\n clearFilters: 'Clear all filters',\n reset: 'Reset',\n loading: 'Loading',\n deselectAll: 'Deselect all',\n resetAll: 'Reset table state',\n rangeMin: 'Min',\n rangeMax: 'Max',\n calendarWeek: 'Wk',\n hiddenColumnFilters: 'Filters of hidden columns',\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 { createContext, useContext, useMemo } from 'react';\nimport { TableSettingsContext } from '../misc/tableSettings';\nimport { defaultTableTheme } from '../theme/defaultTheme';\nimport { mergeThemes } from '../theme/tableTheme';\nimport type { InternalColumn, PartialTableTheme, TableTheme } from '../types';\n\nexport const ThemeContext = createContext<TableTheme<any> | null>(null);\n\n/** default < TableSettingsProvider < table props, merged once per change instead of per consumer. */\nexport function useTableTheme<T>(props: PartialTableTheme<T>): TableTheme<T> {\n const { theme: contextTheme } = useContext(TableSettingsContext);\n const { text, classes, styles, components, icons, colors, spacing } = props;\n\n return useMemo(\n () =>\n mergeThemes<T>(defaultTableTheme as TableTheme<T>, contextTheme as PartialTableTheme<T>, {\n text,\n classes,\n styles,\n components,\n icons,\n colors,\n spacing,\n }) as TableTheme<T>,\n [contextTheme, text, classes, styles, components, icons, colors, spacing],\n );\n}\n\nexport function useTheme<T, S>(selector: (theme: TableTheme<T>) => S): S {\n const tableTheme = useContext(ThemeContext);\n const { theme: contextTheme } = useContext(TableSettingsContext);\n const fallback = useMemo(\n () =>\n tableTheme\n ? undefined\n : (mergeThemes(defaultTableTheme, contextTheme) as TableTheme<unknown>),\n [tableTheme, contextTheme],\n );\n\n return selector((tableTheme ?? fallback) as TableTheme<T>);\n}\n\n/** The theme with a column's own classes and styles layered on top. */\nexport function columnTheme<T>(\n theme: TableTheme<T>,\n column: Pick<InternalColumn<T, unknown>, 'classes' | 'styles'> | undefined,\n): TableTheme<T> {\n if (!column?.classes && !column?.styles) return theme;\n return {\n ...theme,\n classes: { ...theme.classes, ...column.classes },\n styles: { ...theme.styles, ...column.styles },\n };\n}\n","import type { ComponentType } from 'react';\nimport { useLayoutEffect, useRef } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport type { TableTheme } from '../types';\n\ntype Props = TableTheme['components']['TextField'] extends ComponentType<infer T> ? T : never;\n\nexport function AutoFocusTextField(props: Omit<Props, 'inputRef'>) {\n const TextField = useTheme((t) => t.components.TextField);\n\n const ref = useRef<HTMLInputElement>(null);\n // Filters mount when their popover opens. The popover positions itself first.\n useLayoutEffect(() => {\n const timeout = setTimeout(() => ref.current?.focus());\n return () => clearTimeout(timeout);\n }, []);\n\n return (\n <TextField\n {...props}\n inputRef={ref}\n css={{\n input: {\n backgroundColor: 'inherit',\n color: 'inherit',\n },\n }}\n />\n );\n}\n","export function defaults<T extends object>(first: T, ...more: Partial<T>[]): T {\n return more.reduce<T>((acc, source) => {\n const copy = { ...acc };\n\n for (const [key, value] of Object.entries(source)) {\n copy[key as keyof T] ??= value as any;\n }\n\n return copy;\n }, first);\n}\n","import { useTheme } from '../hooks/useTheme';\n\nexport function useCssVariables() {\n return useTheme(({ spacing, colors }) => {\n return {\n '--spacing': spacing,\n '--primaryMain': colors.primary.main,\n '--primaryLight': colors.primary.light,\n '--primaryContrastText': colors.primary.contrastText,\n '--secondaryMain': colors.secondary.main,\n '--secondaryLight': colors.secondary.light,\n '--secondaryContrastText': colors.secondary.contrastText,\n '--blockedMain': colors.blocked.main,\n '--blockedLight': colors.blocked.light,\n '--blockedContrastText': colors.blocked.contrastText,\n '--table-background-color': colors.background,\n '--table-text-color': colors.text,\n '--table-border-color': colors.border,\n '--table-border-light-color': colors.borderLight,\n };\n });\n}\n","import { addDays, isBefore, isToday, startOfDay, differenceInCalendarMonths } from 'date-fns';\nimport { SyntheticEvent } from 'react';\n\nexport type DayzedDateObject = {\n date: Date;\n nextMonth: boolean;\n prevMonth: boolean;\n selectable: boolean;\n selected: boolean;\n today: boolean;\n};\n\nexport type DayzedCalendar = {\n firstDayOfMonth: Date;\n lastDayOfMonth: Date;\n month: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11;\n weeks: Array<Array<DayzedDateObject | ''>>;\n year: number;\n};\n\n/**\n * This is intended to be used to compose event handlers\n * They are executed in order until one of them calls\n * `event.preventDefault()`. Not sure this is the best\n * way to do this, but it seems legit...\n * @param {Function} fns the event hanlder functions\n * @return {Function} the event handler to add to an element\n */\nexport function composeEventHandlers(\n ...fns: (((event: SyntheticEvent, ...args: any[]) => any) | undefined)[]\n) {\n return (event: SyntheticEvent, ...args: any[]) =>\n fns.some((fn) => {\n if (fn) {\n fn(event, ...args);\n }\n return event.defaultPrevented;\n });\n}\n\n/**\n * Throws a helpful error message for required properties. Useful\n * to be used as a default in destructuring or object params.\n * @param {String} fnName the function name\n * @param {String} propName the prop name\n */\nexport function requiredProp(fnName: string, propName: string): never {\n throw new Error(`The property \"${propName}\" is required in \"${fnName}\"`);\n}\n\n/**\n * Takes a calendars array and figures out the number of months to subtract\n * based on the current offset and the minDate allowed.\n * @param {Object} param The param object\n * @param {Array} param.calendars The calendars array created by the getCalendars function\n * @param {Number} param.offset The num of months to be subtracted\n * @param {Date} param.minDate The earliest date we are allow to subtract back to\n * @returns {Number} The number of months to subtract\n */\nexport function subtractMonth({\n calendars,\n offset,\n minDate,\n}: {\n calendars: DayzedCalendar[];\n offset: number;\n minDate?: Date;\n}) {\n if (offset > 1 && minDate) {\n const { firstDayOfMonth } = calendars[0]!;\n const diffInMonths = differenceInCalendarMonths(firstDayOfMonth, minDate);\n if (diffInMonths < offset) {\n offset = diffInMonths;\n }\n }\n return offset;\n}\n\n/**\n * Takes a calendars array and figures out the number of months to add\n * based on the current offset and the maxDate allowed.\n * @param {Object} param The param object\n * @param {Array} param.calendars The calendars array created by the getCalendars function\n * @param {Number} param.offset The num of months to be added\n * @param {Date} param.maxDate The furthest date we are allow to add forward to\n * @returns {Number} The number of months to add\n */\nexport function addMonth({\n calendars,\n offset,\n maxDate,\n}: {\n calendars: DayzedCalendar[];\n offset: number;\n maxDate?: Date;\n}) {\n if (offset > 1 && maxDate) {\n const { lastDayOfMonth } = calendars[calendars.length - 1]!;\n const diffInMonths = differenceInCalendarMonths(maxDate, lastDayOfMonth);\n if (diffInMonths < offset) {\n offset = diffInMonths;\n }\n }\n return offset;\n}\n\n/**\n * Takes a calendars array and figures out if the back button should be\n * disabled based on the minDate allowed.\n * @param {Object} param The param object\n * @param {Array} param.calendars The calendars array created by the getCalendars function\n * @param {Date} param.minDate The earliest date available\n * @returns {Boolean} Whether the back button should be disabled.\n */\nexport function isBackDisabled({\n calendars,\n minDate,\n}: {\n calendars: DayzedCalendar[];\n minDate?: Date;\n}) {\n if (!minDate) {\n return false;\n }\n const { firstDayOfMonth } = calendars[0]!;\n const firstDayOfMonthMinusOne = addDays(firstDayOfMonth, -1);\n if (isBefore(firstDayOfMonthMinusOne, minDate)) {\n return true;\n }\n return false;\n}\n\n/**\n * Takes a calendars array and figures out if the forward button should be\n * disabled based on the maxDate allowed.\n * @param {Object} param The param object\n * @param {Array} param.calendars The calendars array created by the getCalendars function\n * @param {Date} param.maxDate The furthest date available\n * @returns {Boolean} Whether the forward button should be disabled.\n */\nexport function isForwardDisabled({\n calendars,\n maxDate,\n}: {\n calendars: DayzedCalendar[];\n maxDate?: Date;\n}) {\n if (!maxDate) {\n return false;\n }\n const { lastDayOfMonth } = calendars[calendars.length - 1]!;\n const lastDayOfMonthPlusOne = addDays(lastDayOfMonth, 1);\n if (isBefore(maxDate, lastDayOfMonthPlusOne)) {\n return true;\n }\n return false;\n}\n\n/**\n * Figures out the months data needed based off the number of monthsToDisplay\n * and other options provided.\n * @param {Object} param The param object\n * @param {Date} param.date The date to start the calendar at\n * @param {Array.<Date>} param.selected An array of dates currently selected\n * @param {Number} param.monthsToDisplay The number of months to return in the calendar view\n * @param {Number} param.offset The number of months to offset based off the param.date given\n * @param {Date} param.minDate The earliest date available\n * @param {Date} param.maxDate The furthest date available\n * @param {Number} param.firstDayOfWeek First day of week, 0-6 (Sunday to Saturday)\n * @param {Bool} param.showOutsideDays Flag to fill front and back weeks with dates from adjacent months\n * @returns {Array.<Object>} An array of objects with month data\n */\nexport function getCalendars({\n date,\n selected,\n monthsToDisplay,\n offset,\n minDate,\n maxDate,\n firstDayOfWeek,\n showOutsideDays,\n}: {\n date: Date;\n selected: Date[];\n monthsToDisplay: number;\n offset: number;\n minDate?: Date;\n maxDate?: Date;\n firstDayOfWeek: number;\n showOutsideDays: boolean;\n}): DayzedCalendar[] {\n const months: DayzedCalendar[] = [];\n const startDate = getStartDate(date, minDate, maxDate);\n for (let i = 0; i < monthsToDisplay; i++) {\n const calendarDates = getMonths({\n month: startDate.getMonth() + i + offset,\n year: startDate.getFullYear(),\n selectedDates: selected,\n minDate,\n maxDate,\n firstDayOfWeek,\n showOutsideDays,\n });\n months.push(calendarDates);\n }\n return months;\n}\n\n/**\n * Figures out the actual start date based on\n * the min and max dates available.\n * @param {Date} date The we want to start the calendar at\n * @param {Date} minDate The earliest date available to start at\n * @param {Date} maxDate The latest date available to start at\n * @returns {Date} The actual start date\n */\nfunction getStartDate(date: Date, minDate?: Date, maxDate?: Date): Date {\n let startDate = startOfDay(date);\n if (minDate) {\n const minDateNormalized = startOfDay(minDate);\n if (isBefore(startDate, minDateNormalized)) {\n startDate = minDateNormalized;\n }\n }\n if (maxDate) {\n const maxDateNormalized = startOfDay(maxDate);\n if (isBefore(maxDateNormalized, startDate)) {\n startDate = maxDateNormalized;\n }\n }\n return startDate;\n}\n\n/**\n * Figures what week/day data to return for the given month\n * and year. Adds flags to day data if found in the given selectedDates,\n * if is selectable inside the given min and max dates, or is today.\n * @param {Object} param The param object\n * @param {Number} param.month The month to grab data for\n * @param {Number} param.year The year to grab data for\n * @param {Array.<Date>} param.selectedDates An array of dates currently selected\n * @param {Date} param.minDate The earliest date available\n * @param {Date} param.maxDate The furthest date available\n * @param {Number} param.firstDayOfWeek First day of week, 0-6 (Sunday to Saturday)\n * @param {Bool} param.showOutsideDays Flag to fill front and back weeks with dates from adjacent months\n * @returns {Object} The data for the selected month/year\n */\nfunction getMonths({\n month,\n year,\n selectedDates,\n minDate,\n maxDate,\n firstDayOfWeek,\n showOutsideDays,\n}: {\n month: number;\n year: number;\n selectedDates: Date[];\n minDate?: Date;\n maxDate?: Date;\n firstDayOfWeek: number;\n showOutsideDays: boolean;\n}): DayzedCalendar {\n // Get the normalized month and year, along with days in the month.\n const daysMonthYear = getNumDaysMonthYear(month, year);\n const daysInMonth = daysMonthYear.daysInMonth;\n month = daysMonthYear.month;\n year = daysMonthYear.year;\n\n // Fill out the dates for the month.\n const dates: ('' | DayzedDateObject)[] = [];\n for (let day = 1; day <= daysInMonth; day++) {\n const date = new Date(year, month, day);\n const dateObj = {\n date,\n selected: isSelected(selectedDates, date),\n selectable: isSelectable(minDate, maxDate, date),\n today: isToday(date),\n prevMonth: false,\n nextMonth: false,\n };\n dates.push(dateObj);\n }\n\n const firstDayOfMonth = new Date(year, month, 1);\n const lastDayOfMonth = new Date(year, month, daysInMonth);\n\n const frontWeekBuffer = fillFrontWeek({\n firstDayOfMonth,\n minDate,\n maxDate,\n selectedDates,\n firstDayOfWeek,\n showOutsideDays,\n });\n\n const backWeekBuffer = fillBackWeek({\n lastDayOfMonth,\n minDate,\n maxDate,\n selectedDates,\n firstDayOfWeek,\n showOutsideDays,\n });\n\n dates.unshift(...frontWeekBuffer);\n dates.push(...backWeekBuffer);\n\n // Get the filled out weeks for the\n // given dates.\n const weeks = getWeeks(dates);\n // return the calendar data.\n return {\n firstDayOfMonth,\n lastDayOfMonth,\n month: month as DayzedCalendar['month'],\n year,\n weeks,\n };\n}\n\n/**\n * Fill front week with either empty buffer or dates from previous month,\n * depending on showOutsideDays flag\n * @param {Object} param The param object\n * @param {Array.<Date>} param.selectedDates An array of dates currently selected\n * @param {Date} param.minDate The earliest date available\n * @param {Date} param.maxDate The furthest date available\n * @param {Date} param.firstDayOfMonth First day of the month\n * @param {Number} param.firstDayOfWeek First day of week, 0-6 (Sunday to Saturday)\n * @param {Bool} param.showOutsideDays Flag to fill front and back weeks with dates from adjacent months\n * @returns {Array.<Date>} Buffer to fill front week\n */\nfunction fillFrontWeek({\n firstDayOfMonth,\n minDate,\n maxDate,\n selectedDates,\n firstDayOfWeek,\n showOutsideDays,\n}: {\n firstDayOfMonth: Date;\n minDate?: Date;\n maxDate?: Date;\n selectedDates: Date[];\n firstDayOfWeek: number;\n showOutsideDays: boolean;\n}) {\n const dates: ('' | DayzedDateObject)[] = [];\n let firstDay = (firstDayOfMonth.getDay() + 7 - firstDayOfWeek) % 7;\n\n if (showOutsideDays) {\n const lastDayOfPrevMonth = addDays(firstDayOfMonth, -1);\n const prevDate = lastDayOfPrevMonth.getDate();\n const prevDateMonth = lastDayOfPrevMonth.getMonth();\n const prevDateYear = lastDayOfPrevMonth.getFullYear();\n\n // Fill out front week for days from\n // preceding month with dates from previous month.\n let counter = 0;\n while (counter < firstDay) {\n const date = new Date(prevDateYear, prevDateMonth, prevDate - counter);\n const dateObj = {\n date,\n selected: isSelected(selectedDates, date),\n selectable: isSelectable(minDate, maxDate, date),\n today: false,\n prevMonth: true,\n nextMonth: false,\n };\n dates.unshift(dateObj);\n counter++;\n }\n } else {\n // Fill out front week for days from\n // preceding month with buffer.\n while (firstDay > 0) {\n dates.unshift('');\n firstDay--;\n }\n }\n\n return dates;\n}\n\n/**\n * Fill back weeks with either empty buffer or dates from next month,\n * depending on showOutsideDays flag\n * @param {Object} param The param object\n * @param {Array.<Date>} param.selectedDates An array of dates currently selected\n * @param {Date} param.minDate The earliest date available\n * @param {Date} param.maxDate The furthest date available\n * @param {Date} param.lastDayOfMonth Last day of the month\n * @param {Number} param.firstDayOfWeek First day of week, 0-6 (Sunday to Saturday)\n * @param {Bool} param.showOutsideDays Flag to fill front and back weeks with dates from adjacent months\n * @returns {Array.<Date>} Buffer to fill back week\n */\nfunction fillBackWeek({\n lastDayOfMonth,\n minDate,\n maxDate,\n selectedDates,\n firstDayOfWeek,\n showOutsideDays,\n}: {\n lastDayOfMonth: Date;\n minDate?: Date;\n maxDate?: Date;\n selectedDates: Date[];\n firstDayOfWeek: number;\n showOutsideDays: boolean;\n}) {\n const dates: ('' | DayzedDateObject)[] = [];\n let lastDay = (lastDayOfMonth.getDay() + 7 - firstDayOfWeek) % 7;\n\n if (showOutsideDays) {\n const firstDayOfNextMonth = addDays(lastDayOfMonth, 1);\n const nextDateMonth = firstDayOfNextMonth.getMonth();\n const nextDateYear = firstDayOfNextMonth.getFullYear();\n\n // Fill out back week for days from\n // following month with dates from next month.\n let counter = 0;\n while (counter < 6 - lastDay) {\n const date = new Date(nextDateYear, nextDateMonth, 1 + counter);\n const dateObj = {\n date,\n selected: isSelected(selectedDates, date),\n selectable: isSelectable(minDate, maxDate, date),\n today: false,\n prevMonth: false,\n nextMonth: true,\n };\n dates.push(dateObj);\n counter++;\n }\n } else {\n // Fill out back week for days from\n // following month with buffer.\n while (lastDay < 6) {\n dates.push('');\n lastDay++;\n }\n }\n\n return dates;\n}\n\n/**\n * Normalizes month (could be overflow) and year pairs and returns the\n * normalized month and year along with the number of days in the month.\n * @param {Number} month The month to normalize\n * @param {Number} year The year to normalize\n * @returns {Object} The normalized month and year along with the number of days in the month\n */\nfunction getNumDaysMonthYear(month: number, year: number) {\n // If a parameter you specify is outside of the expected range for Month or Day,\n // JS Date attempts to update the date information in the Date object accordingly!\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMonth\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setDate\n\n // Let Date handle the overflow of the month,\n // which should return the normalized month and year.\n const normalizedMonthYear = new Date(year, month, 1);\n month = normalizedMonthYear.getMonth();\n year = normalizedMonthYear.getFullYear();\n // Overflow the date to the next month, then subtract the difference\n // to get the number of days in the previous month.\n // This will also account for leap years!\n const daysInMonth = 32 - new Date(year, month, 32).getDate();\n return { daysInMonth, month, year };\n}\n\n/**\n * Takes an array of dates, and turns them into a multi dimensional\n * array with 7 entries for each week.\n * @param {Array.<Object>} dates An array of dates\n * @returns {Array} The weeks as a multi dimensional array\n */\nfunction getWeeks(dates: ('' | DayzedDateObject)[]) {\n const weeksLength = Math.ceil(dates.length / 7);\n const weeks: ('' | DayzedDateObject)[][] = [];\n for (let i = 0; i < weeksLength; i++) {\n weeks[i] = [];\n for (let x = 0; x < 7; x++) {\n weeks[i]!.push(dates[i * 7 + x]!);\n }\n }\n return weeks;\n}\n\n/**\n * Normalizes dates to the beginning of the day,\n * then checks to see if the day given is found\n * in the selectedDates.\n * @param {Array.<Date>} selectedDates An array of dates currently selected\n * @param {Date} date The date to search with against selectedDates\n * @returns {Boolean} Whether day is found in selectedDates\n */\nfunction isSelected(selectedDates: Date[], date: Date): boolean {\n selectedDates = Array.isArray(selectedDates) ? selectedDates : [selectedDates];\n return selectedDates.some((selectedDate) => {\n if (\n selectedDate instanceof Date &&\n startOfDay(selectedDate).getTime() === startOfDay(date).getTime()\n ) {\n return true;\n }\n return false;\n });\n}\n\n/**\n * Checks to see if the date given is\n * between the min and max dates.\n * @param {Date} minDate The earliest date available\n * @param {Date} maxDate The furthest date available\n * @param {Date} date The date to compare with\n * @returns {Boolean} Whether the date is between min and max date\n */\nfunction isSelectable(minDate: Date | undefined, maxDate: Date | undefined, date: Date): boolean {\n if ((minDate && isBefore(date, minDate)) || (maxDate && isBefore(maxDate, date))) {\n return false;\n }\n return true;\n}\n","import { HTMLProps, SyntheticEvent, useState } from 'react';\n\nimport {\n composeEventHandlers,\n requiredProp,\n subtractMonth,\n addMonth,\n isBackDisabled,\n isForwardDisabled,\n getCalendars,\n type DayzedDateObject,\n type DayzedCalendar,\n} from './utils';\n\nfunction isOffsetControlled(propOffset: number | undefined) {\n return propOffset !== undefined;\n}\n\nfunction getOffset(prop: number | undefined, state: number) {\n return isOffsetControlled(prop) ? prop : state;\n}\n\nfunction getDateProps(\n onDateSelected: ((date: DayzedDateObject, event: SyntheticEvent) => void) | undefined,\n {\n onClick,\n dateObj = requiredProp('getDateProps', 'dateObj'),\n ...rest\n }: Partial<GetDatePropsOptions> = {},\n) {\n return {\n onClick: composeEventHandlers(onClick as any, (event) => {\n onDateSelected?.(dateObj, event);\n }),\n disabled: !dateObj.selectable,\n 'aria-label': dateObj.date.toDateString(),\n 'aria-pressed': dateObj.selected,\n role: 'button',\n ...rest,\n };\n}\n\nfunction getBackProps(\n {\n minDate,\n offsetMonth,\n handleOffsetChanged,\n }: {\n minDate?: Date;\n offsetMonth: number;\n handleOffsetChanged: (offset: number) => void;\n },\n {\n onClick,\n offset = 1,\n calendars = requiredProp('getBackProps', 'calendars'),\n ...rest\n }: Partial<GetBackForwardPropsOptions> = {},\n) {\n return {\n onClick: composeEventHandlers(onClick as any, () => {\n handleOffsetChanged(offsetMonth - subtractMonth({ calendars, offset, minDate }));\n }),\n disabled: isBackDisabled({ calendars, minDate }),\n 'aria-label': `Go back ${offset} month${offset === 1 ? '' : 's'}`,\n ...rest,\n };\n}\n\nfunction getForwardProps(\n {\n maxDate,\n offsetMonth,\n handleOffsetChanged,\n }: {\n maxDate?: Date;\n offsetMonth: number;\n handleOffsetChanged: (offset: number) => void;\n },\n {\n onClick,\n offset = 1,\n calendars = requiredProp('getForwardProps', 'calendars'),\n ...rest\n }: Partial<GetBackForwardPropsOptions> = {},\n) {\n return {\n onClick: composeEventHandlers(onClick as any, () => {\n handleOffsetChanged(offsetMonth + addMonth({ calendars, offset, maxDate }));\n }),\n disabled: isForwardDisabled({ calendars, maxDate }),\n 'aria-label': `Go forward ${offset} month${offset === 1 ? '' : 's'}`,\n ...rest,\n };\n}\n\nexport function useDayzed({\n date = new Date(),\n maxDate,\n minDate,\n monthsToDisplay = 1,\n firstDayOfWeek = 0,\n showOutsideDays = false,\n offset,\n onDateSelected,\n onOffsetChanged = () => {},\n selected,\n}: {\n date?: Date;\n maxDate?: Date;\n minDate?: Date;\n monthsToDisplay?: number;\n firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n showOutsideDays?: boolean;\n selected?: Date | Date[];\n offset?: number;\n onOffsetChanged?(offset: number): void;\n onDateSelected(selectedDate: DayzedDateObject, event: SyntheticEvent): void;\n}): RenderProps {\n const [stateOffset, setStateOffset] = useState(0);\n const offsetMonth = getOffset(offset, stateOffset);\n\n function handleOffsetChanged(newOffset: number) {\n if (!isOffsetControlled(offset)) {\n setStateOffset(newOffset);\n }\n onOffsetChanged(newOffset);\n }\n\n const calendars = getCalendars({\n date,\n selected: Array.isArray(selected) ? selected : selected ? [selected] : [],\n monthsToDisplay,\n minDate,\n maxDate,\n offset: offsetMonth,\n firstDayOfWeek,\n showOutsideDays,\n });\n return {\n calendars,\n getDateProps: getDateProps.bind(null, onDateSelected),\n getBackProps: getBackProps.bind(null, {\n minDate,\n offsetMonth,\n handleOffsetChanged,\n }),\n getForwardProps: getForwardProps.bind(null, {\n maxDate,\n offsetMonth,\n handleOffsetChanged,\n }),\n };\n}\n\ninterface GetBackForwardPropsOptions extends HTMLProps<HTMLButtonElement> {\n calendars: DayzedCalendar[];\n offset?: number;\n}\n\ninterface GetDatePropsOptions extends HTMLProps<HTMLButtonElement> {\n dateObj: DayzedDateObject;\n}\n\ninterface RenderProps {\n calendars: DayzedCalendar[];\n getBackProps: (data: GetBackForwardPropsOptions) => Record<string, any>;\n getForwardProps: (data: GetBackForwardPropsOptions) => Record<string, any>;\n getDateProps: (data: GetDatePropsOptions) => Record<string, any>;\n}\n\nexport type { DayzedDateObject } from './utils';\n","import { useEffect, useRef } from 'react';\n\nexport default function useLatestRef<T>(value: T) {\n const latestValue = useRef(value);\n\n useEffect(() => {\n latestValue.current = value;\n }, [value]);\n\n return latestValue;\n}\n","export function debounce<Args extends any[]>(\n function_: (...args: Args) => void,\n ms: number,\n): { (...args: Args): void; flush(): void; cancel(): 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 cancel() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n lastArgs = undefined;\n }\n },\n },\n );\n}\n","import { Fragment, useId, useMemo, useState } from 'react';\nimport useLatestRef from '../hooks/useLatestRef';\nimport { debounce } from '../misc/debounce';\n\nexport interface DateInputProps {\n value: Date | null;\n onChange: (date: Date | null) => void;\n locale?: string;\n}\n\ntype Part = 'day' | 'month' | 'year';\n\nconst className = 'schummar-table-date-input';\nconst defaultDate = new Date(1970, 0, 1);\n\nconst isIncludedType = (type: Intl.DateTimeFormatPartTypes): type is Part =>\n type === 'day' || type === 'month' || type === 'year';\n\nconst maxValues = {\n day: 31,\n month: 12,\n year: 9999,\n};\n\nconst tabNext = (event: Element, id: string) => {\n const all = Array.from(document.querySelectorAll(`.${className}-${id}`));\n const index = all.indexOf(event);\n const next = all[index + 1];\n\n if (next instanceof HTMLElement) {\n next.focus();\n }\n};\n\nfunction buildDate(value: Partial<Record<Part, string>>, baseDate = new Date()): Date {\n const date = new Date(baseDate);\n\n if (value.year) {\n date.setFullYear(Number(value.year));\n }\n\n if (value.month) {\n date.setMonth(Number(value.month) - 1);\n }\n\n if (value.day) {\n date.setDate(Number(value.day));\n }\n\n return date;\n}\n\nexport function DateInput({ value, onChange, locale }: DateInputProps) {\n const id = useId();\n const [localValue, setLocalValue] = useState<Partial<Record<Part, string>>>();\n const latestValue = useLatestRef(value);\n\n const commit = useMemo(\n () =>\n debounce(\n (\n localValue: Partial<Record<Part, string>> = {},\n value: Date | null,\n onChange: (date: Date | null) => void,\n ) => {\n if (value !== latestValue.current) {\n // Value has been changed from outside, don't override it.\n return;\n }\n\n const date = buildDate(localValue, value ?? undefined);\n setLocalValue(undefined);\n onChange(isNaN(date.getTime()) ? null : date);\n },\n 100,\n ),\n [],\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\n let parts;\n try {\n parts = format.formatToParts(value ?? defaultDate);\n } catch {\n parts = format.formatToParts(defaultDate);\n }\n\n const isEmpty = !value;\n\n return (\n <div\n css={{\n display: 'flex',\n alignItems: 'baseline',\n }}\n >\n {parts.map(({ type, value: partValue }, index) => (\n <Fragment key={index}>\n {isIncludedType(type) ? (\n <input\n className={`${className}-${id}`}\n css={{\n boxSizing: 'content-box',\n overflow: 'visible',\n border: 'none',\n borderBottom: '2px solid transparent',\n outline: 'none',\n fontSize: 'inherit',\n backgroundColor: 'inherit',\n color: 'inherit',\n\n '::placeholder': {\n color: 'inherit',\n opacity: 0.5,\n },\n\n '&:focus': {\n borderBottom: '2px solid var(--primaryMain)',\n },\n }}\n style={{\n width: `${String(maxValues[type]).length}ch`,\n }}\n placeholder={''.padEnd(String(maxValues[type]).length, '0')}\n value={localValue?.[type] ?? (isEmpty ? '' : partValue)}\n onChange={(event) => {\n const input = event.target.value;\n if (!/^\\d*$/.test(input)) return;\n\n const newValue = { ...localValue, [type]: input };\n\n if (Number(input) > maxValues[type]) {\n newValue[type] = String(maxValues[type]);\n }\n\n setLocalValue(newValue);\n\n if (input.length >= String(maxValues[type]).length) {\n setTimeout(() => tabNext(event.target, id));\n }\n }}\n onFocus={(event) => {\n commit.cancel();\n event.target.select();\n }}\n onBlur={() => {\n commit(localValue, value, onChange);\n }}\n />\n ) : type === 'literal' ? (\n <span>{partValue}</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 { Fragment, useId, useMemo, useState } from 'react';\nimport { debounce } from '../misc/debounce';\nimport useLatestRef from '../hooks/useLatestRef';\n\nexport interface TimeInputProps {\n value: Date | null;\n onChange: (date: Date | null) => void;\n locale?: string;\n showSeconds?: boolean;\n}\n\ntype Part = 'hour' | 'minute' | 'second';\n\nconst className = 'schummar-table-time-input';\nconst defaultDate = new Date(1970, 0, 1);\n\nconst isIncludedType = (type: Intl.DateTimeFormatPartTypes): type is Part =>\n type === 'hour' || type === 'minute' || type === 'second';\n\nconst maxValues = {\n hour: 23,\n minute: 59,\n second: 59,\n};\n\nconst tabNext = (event: Element, id: string) => {\n const all = Array.from(document.querySelectorAll(`.${className}-${id}`));\n const index = all.indexOf(event);\n const next = all[index + 1];\n\n if (next instanceof HTMLElement) {\n next.focus();\n }\n};\n\nfunction buildTime(value: Partial<Record<Part, string>>, baseDate = new Date()): Date {\n const date = new Date(baseDate);\n\n if (value.hour) {\n date.setHours(Number(value.hour));\n }\n\n if (value.minute) {\n date.setMinutes(Number(value.minute));\n }\n\n if (value.second) {\n date.setSeconds(Number(value.second));\n }\n\n return date;\n}\n\nexport function TimeInput({ value, onChange, locale, showSeconds = true }: TimeInputProps) {\n const id = useId();\n const [localValue, setLocalValue] = useState<Partial<Record<Part, string>>>();\n const latestValue = useLatestRef(value);\n\n const commit = useMemo(\n () =>\n debounce(\n (\n localValue: Partial<Record<Part, string>> = {},\n value: Date | null,\n onChange: (date: Date | null) => void,\n ) => {\n if (value !== latestValue.current) {\n // Value has been changed from outside, don't override it.\n return;\n }\n\n const date = buildTime(localValue, value ?? undefined);\n setLocalValue(undefined);\n onChange(isNaN(date.getTime()) ? null : date);\n },\n 100,\n ),\n [],\n );\n\n const format = useMemo(\n () =>\n new Intl.DateTimeFormat(locale, {\n hour: '2-digit',\n minute: '2-digit',\n second: showSeconds ? '2-digit' : undefined,\n }),\n [locale],\n );\n\n let parts;\n try {\n parts = format.formatToParts(value ?? defaultDate);\n } catch {\n parts = format.formatToParts(defaultDate);\n }\n\n const isEmpty = !value;\n\n return (\n <div\n css={{\n display: 'flex',\n alignItems: 'baseline',\n }}\n >\n {parts.map(({ type, value: partValue }, index) => (\n <Fragment key={index}>\n {isIncludedType(type) ? (\n <input\n className={`${className}-${id}`}\n css={{\n boxSizing: 'content-box',\n overflow: 'visible',\n border: 'none',\n borderBottom: '2px solid transparent',\n outline: 'none',\n fontSize: 'inherit',\n backgroundColor: 'inherit',\n color: 'inherit',\n\n '::placeholder': {\n color: 'inherit',\n opacity: 0.5,\n },\n\n '&:focus': {\n borderBottom: '2px solid var(--primaryMain)',\n },\n }}\n style={{\n width: `${String(maxValues[type]).length}ch`,\n }}\n placeholder={''.padEnd(String(maxValues[type]).length, '0')}\n value={localValue?.[type] ?? (isEmpty ? '' : partValue)}\n onChange={(event) => {\n const input = event.target.value;\n if (!/^\\d*$/.test(input)) return;\n\n const newValue = { ...localValue, [type]: input };\n\n if (Number(input) > maxValues[type]) {\n newValue[type] = String(maxValues[type]);\n }\n\n setLocalValue(newValue);\n\n if (input.length >= String(maxValues[type]).length) {\n setTimeout(() => tabNext(event.target, id));\n }\n }}\n onFocus={(event) => {\n commit.cancel();\n event.target.select();\n }}\n onBlur={() => {\n commit(localValue, value, onChange);\n }}\n />\n ) : type === 'literal' ? (\n <span>{partValue}</span>\n ) : null}\n </Fragment>\n ))}\n </div>\n );\n}\n","import { Interpolation, Theme } from '@emotion/react';\nimport {\n Fragment,\n ReactNode,\n createContext,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport { Temporal } from 'temporal-polyfill';\nimport { useTheme } from '../hooks/useTheme';\nimport { defaults } from '../misc/defaults';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport { useDayzed, type DayzedDateObject } from '../vendor/dayzed/dayzed';\nimport { DateInput } from './dateInput';\nimport { Text } from './text';\nimport { TimeInput } from './timeInput';\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 DatePickerChangeSource = 'input' | 'calendarWeek' | 'calendar' | 'quickOption';\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, source: DatePickerChangeSource) => void;\n /** Currently visible date. */\n dateInView?: Date;\n /** Callback for when the currently visible date changes. */\n onDateInViewChange?: (value: Date) => void;\n /** If enabled, ranges can be selected. */\n rangeSelect?: boolean;\n /** Which locale to use to render the calendar. */\n locale?: string;\n /** Which day of the week should be in the first column. (0=Sunday, 1=Monday, ...)\n * @default 1\n */\n firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n /** Which month to show initially */\n defaultDateInView?: Date;\n /** Show buttons to quickly select suggested dates or date ranges */\n quickOptions?: DatePickerQuickOption[];\n noReset?: boolean;\n /** Minimum selectable date */\n /** Date ranges that are visually marked as blocked */\n blockedRanges?: DateRange[];\n minDate?: Date;\n /** Maximum selectable date */\n maxDate?: Date;\n /** Whether to show the calendar week in the first column */\n showCalendarWeek?: boolean;\n /** Whether to show and allow editing of time */\n showTime?: boolean | { showSeconds?: boolean };\n};\n\nconst DatePickerContext = createContext<Partial<Omit<DatePickerProps, 'value' | 'onChange'>>>({});\n\nexport function DatePickerProvider({\n children,\n ...props\n}: Partial<Omit<DatePickerProps, 'value' | 'onChange'>> & { children?: ReactNode }) {\n const value = useMemo(() => props, [JSON.stringify(props)]);\n\n return <DatePickerContext.Provider value={value}>{children}</DatePickerContext.Provider>;\n}\n\nconst weekDays = [0, 1, 2, 3, 4, 5, 6] as const;\n\n/** Rounds a date down to the start of the day. */\nexport const startOfDay = (d: Date) => new Date(d.getFullYear(), d.getMonth(), d.getDate());\n\n/** Rounds a date up to the end of the day. */\nexport const endOfDay = (d: Date) =>\n new Date(d.getFullYear(), d.getMonth(), d.getDate() + 1, 0, 0, 0, -1);\n\nexport const lastDays = (days: number): DateRange => {\n const now = new Date();\n const min = new Date(now);\n min.setDate(min.getDate() - days + 1);\n\n return {\n min: startOfDay(min),\n max: endOfDay(now),\n };\n};\n\nexport const today = () => lastDays(1);\n\nexport const thisWeek = (delta = 0, firstDayOfWeek = 1): DateRange => {\n const now = new Date();\n const min = new Date(now);\n\n let diff = min.getDay() - firstDayOfWeek;\n if (diff < 0) {\n diff += 7;\n }\n min.setDate(min.getDate() - diff + delta * 7);\n\n const max = new Date(min);\n max.setDate(max.getDate() + 6);\n\n return {\n min: startOfDay(min),\n max: endOfDay(max),\n };\n};\n\nexport const thisMonth = (delta = 0): DateRange => {\n const now = new Date();\n const min = new Date(now);\n min.setDate(1);\n min.setMonth(min.getMonth() + delta);\n const max = new Date(min);\n max.setMonth(max.getMonth() + 1);\n max.setDate(max.getDate() - 1);\n\n return {\n min: startOfDay(min),\n max: endOfDay(max),\n };\n};\n\nexport const thisYear = (delta = 0): DateRange => {\n const now = new Date();\n const min = new Date(now);\n min.setDate(1);\n min.setMonth(0);\n min.setFullYear(min.getFullYear() + delta);\n const max = new Date(min);\n max.setFullYear(max.getFullYear() + 1);\n max.setDate(max.getDate() - 1);\n\n return {\n min: startOfDay(min),\n max: endOfDay(max),\n };\n};\n\nexport const getCalendarWeek = (date: Date): number => {\n // ISO 8601: Week 1 is the week with the first Thursday of the year.\n // https://en.wikipedia.org/wiki/ISO_week_date\n\n const tz = Temporal.Now.timeZoneId();\n return (\n Temporal.Instant.fromEpochMilliseconds(date.getTime()).toZonedDateTimeISO(tz).weekOfYear ?? 0\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(\n a: Date | DateRange | null | undefined,\n b: Date | DateRange | null | undefined,\n) {\n if (a instanceof Date) {\n a = { min: a, max: a };\n }\n if (b instanceof Date) {\n b = { min: b, max: b };\n }\n\n if (!a?.min || !a.max || !b?.min || !b.max) {\n return false;\n }\n\n return !(endOfDay(a.max) < startOfDay(b.min) || startOfDay(a.min) > endOfDay(b.max));\n}\n\nexport function dateClamp(date: Date, min?: Date, max?: Date) {\n if (min && date < min) {\n return min;\n }\n\n if (max && date > max) {\n return max;\n }\n\n return date;\n}\n\nfunction getValueForComparison(value?: Date | DateRange | null) {\n if (!value) {\n return value;\n }\n if (value instanceof Date) {\n return value.getTime();\n }\n return `${value.min?.getTime()}-${value.max?.getTime()}`;\n}\n\nexport function DatePicker(props: DatePickerProps) {\n const context = useContext(DatePickerContext);\n\n const {\n value,\n rangeSelect,\n locale,\n firstDayOfWeek = 1,\n defaultDateInView,\n quickOptions = ['today', 'thisWeek'],\n noReset,\n minDate,\n maxDate,\n showCalendarWeek,\n blockedRanges = [],\n showTime,\n } = defaults<DatePickerProps>(props, context);\n\n function onChange(value: Date | DateRange | null, source: DatePickerChangeSource) {\n if (value instanceof Date) {\n value = dateClamp(value, minDate, maxDate);\n } else if (value) {\n value = {\n min: dateClamp(value.min, minDate, maxDate),\n max: dateClamp(value.max, minDate, maxDate),\n };\n }\n\n props.onChange(value, source);\n }\n\n const Button = useTheme((t) => t.components.Button);\n const IconButton = useTheme((t) => t.components.IconButton);\n const ChevronRight = useTheme((t) => t.icons.ChevronRight);\n const cssVariables = useCssVariables();\n function getDayCssStyles({\n disabled,\n prevMonth,\n nextMonth,\n today,\n blocked,\n selected,\n preSelected,\n }: {\n disabled?: boolean;\n prevMonth?: boolean;\n nextMonth?: boolean;\n today?: boolean;\n blocked?: boolean;\n selected?: boolean;\n preSelected?: boolean;\n }): Interpolation<Theme> {\n return [\n {\n padding: 10,\n border: 'none',\n background: 'transparent',\n cursor: disabled ? undefined : 'pointer',\n font: 'inherit',\n color: 'inherit',\n },\n (prevMonth || nextMonth) && {\n color: 'var(--date-picker-disemphasized, #bdbdbd)',\n },\n today && {\n outline: '1px solid var(--secondaryMain)',\n },\n blocked && {\n background: 'var(--blockedMain)',\n color: 'var(--blockedContrastText)',\n },\n selected && {\n background: 'var(--primaryMain)',\n color: 'var(--primaryContrastText)',\n },\n blocked &&\n selected && {\n position: 'relative',\n '::before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n background: 'var(--blockedMain)',\n clipPath: 'polygon(0 0, 0 50%, 50% 0)',\n },\n },\n preSelected && {\n background: 'var(--primaryLight)',\n color: 'var(--primaryContrastText)',\n },\n ];\n }\n\n const mountTime = useMemo(() => new Date(), []);\n const [dirty, setDirty] = useState<Partial<DateRange>>();\n const [hovered, setHovered] = useState<DateRange>();\n const [dateInViewLocal, setDateInViewLocal] = useState<Date>(defaultDateInView ?? mountTime);\n const dateInView = props.dateInView ?? dateInViewLocal;\n\n function setDateInView(date: Date) {\n setDateInViewLocal(date);\n props.onDateInViewChange?.(date);\n }\n\n const min = dirty ? dirty.min : value instanceof Date ? value : value?.min;\n const max = dirty ? dirty.max : value instanceof Date ? value : value?.max;\n\n const resolvedQuickOptions = [\n ...quickOptions,\n ...(noReset ? [] : [{ label: <Text id=\"reset\" />, value: null }]),\n ].map((option, index) => {\n if (option instanceof Function) {\n return option((value) => {\n setDirty(undefined);\n onChange(value, 'quickOption');\n });\n }\n\n const { label, value } = typeof option === 'string' ? commonQuickOptions[option] : option;\n\n return (\n <Button\n key={index}\n variant=\"text\"\n type=\"button\"\n css={{\n color: 'inherit',\n }}\n onClick={() => {\n setDirty(undefined);\n\n if (value instanceof Function) {\n onChange(value(props), 'quickOption');\n } else {\n onChange(value, 'quickOption');\n }\n }}\n >\n {label}\n </Button>\n );\n });\n\n const { calendars, getBackProps, getForwardProps, getDateProps } = useDayzed({\n onDateSelected: () => undefined,\n firstDayOfWeek,\n showOutsideDays: true,\n date: dateInView,\n onOffsetChanged: (offset) =>\n setDateInView(new Date(dateInView.getFullYear(), dateInView.getMonth() + offset)),\n offset: 0,\n minDate,\n maxDate,\n });\n const now = useMemo(() => startOfDay(new Date()), []);\n\n const formatWeekday = useMemo(() => {\n const { format } = new Intl.DateTimeFormat(locale, { weekday: 'short' });\n return (weekDay: number) =>\n format(new Date(Date.UTC(2021, 7, ((weekDay + firstDayOfWeek) % 7) + 1)));\n }, [locale, firstDayOfWeek]);\n\n useEffect(\n () =>\n setDateInView(\n value === null\n ? (defaultDateInView ?? mountTime)\n : value instanceof Date\n ? value\n : value.max,\n ),\n [getValueForComparison(value), getValueForComparison(defaultDateInView), mountTime],\n );\n\n useEffect(() => {\n if (!rangeSelect) {\n setDirty(undefined);\n }\n }, [rangeSelect]);\n\n function set(source: DatePickerChangeSource, min?: Date, max?: Date, edit?: 'min' | 'max') {\n if (!rangeSelect) {\n onChange(min ?? null, source);\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, source);\n } else {\n setDirty({ min, max });\n }\n }\n\n const formatMonth = useMemo(() => {\n const { format } = new Intl.DateTimeFormat(locale, { month: 'long' });\n return (month: number) => format(new Date(2021, month));\n }, [locale]);\n\n const formatYear = useMemo(() => {\n const { format } = new Intl.DateTimeFormat(locale, { year: 'numeric' });\n return (year: number) => format(new Date(year, 0, 1));\n }, [locale]);\n\n return (\n <div\n css={[\n cssVariables,\n {\n color: 'var(--table-text-color)',\n },\n ]}\n >\n <div\n css={{\n display: 'grid',\n gridAutoFlow: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n gap: 'calc(var(--spacing) * 4)',\n\n '& > div': {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n },\n }}\n >\n <div>\n <DateInput\n value={min ?? null}\n onChange={(newMin) => set('input', newMin ?? undefined, max, 'min')}\n locale={locale}\n />\n\n {showTime && (\n <TimeInput\n value={min ?? null}\n onChange={(newMin) => set('input', newMin ?? undefined, max, 'min')}\n locale={locale}\n showSeconds={typeof showTime === 'boolean' ? true : showTime.showSeconds}\n />\n )}\n </div>\n\n {rangeSelect && (\n <>\n {' - '}\n\n <div>\n <DateInput\n value={max ?? null}\n onChange={(newMax) => set('input', min, newMax ?? undefined, 'max')}\n locale={locale}\n />\n\n {showTime && (\n <TimeInput\n value={max ?? null}\n onChange={(newMax) => set('input', min, newMax ?? undefined, 'max')}\n locale={locale}\n showSeconds={typeof showTime === 'boolean' ? true : showTime.showSeconds}\n />\n )}\n </div>\n </>\n )}\n </div>\n\n {calendars.map(({ month, year, weeks }) => (\n <div key={`${month}${year}`} css={{ display: 'grid' }}>\n <div\n css={{\n margin: 'calc(var(--spacing) * 4) 0',\n display: 'grid',\n gridAutoFlow: 'column',\n justifyContent: 'space-between',\n alignItems: 'center',\n }}\n >\n <IconButton type=\"button\" {...getBackProps({ calendars })}>\n <ChevronRight css={{ transform: 'rotate3d(0, 0, 1, 180deg)' }} />\n </IconButton>\n\n <div css={{ display: 'flex' }}>\n {formatMonth(month)} {formatYear(year)}\n </div>\n\n <IconButton type=\"button\" {...getForwardProps({ calendars })}>\n <ChevronRight />\n </IconButton>\n </div>\n\n <div\n css={{\n justifySelf: 'center',\n display: 'grid',\n gridTemplateColumns: 'repeat(8, max-content)',\n }}\n >\n {showCalendarWeek ? (\n <div\n css={{\n justifySelf: 'center',\n padding: 10,\n borderRight:\n '1px solid var(--date-picker-separator, var(--table-border, #bdbdbd))',\n }}\n >\n <Text id=\"calendarWeek\" />\n </div>\n ) : (\n <div />\n )}\n\n {weekDays.map((_v, weekDay) => (\n <div\n key={weekDay}\n css={{\n justifySelf: 'center',\n padding: 10,\n }}\n >\n {formatWeekday(weekDay)}\n </div>\n ))}\n\n {weeks.map((week, index) => {\n const weekStart = week[0] as DayzedDateObject;\n const weekEnd = week[6] as DayzedDateObject;\n const weekDisabled =\n !rangeSelect ||\n (minDate && weekEnd.date < minDate) ||\n (maxDate && weekStart.date > maxDate);\n\n return (\n <Fragment key={index}>\n {showCalendarWeek ? (\n <button\n type=\"button\"\n css={{\n padding: 10,\n border: 'none',\n background: 'transparent',\n cursor: weekDisabled ? undefined : 'pointer',\n font: 'inherit',\n borderRight:\n '1px solid var(--date-picker-separator, var(--table-border, #bdbdbd))',\n color: 'inherit',\n }}\n onClick={() => {\n if (weekDisabled) {\n return;\n }\n\n const min = minDate && weekStart.date < minDate ? minDate : weekStart.date;\n const max = maxDate && weekEnd.date > maxDate ? maxDate : weekEnd.date;\n set('calendarWeek', min, max);\n }}\n onPointerOver={() =>\n !weekDisabled && setHovered({ min: weekStart.date, max: weekEnd.date })\n }\n onPointerOut={() => !weekDisabled && setHovered(undefined)}\n >\n {getCalendarWeek(weekEnd.date)}\n </button>\n ) : (\n <div />\n )}\n\n {week.map((dateObject, dayIndex) => {\n if (!dateObject) {\n return <div key={dayIndex} />;\n }\n\n const { prevMonth, nextMonth, date } = dateObject;\n const today = startOfDay(date).getTime() === now.getTime();\n const disabled = (minDate && date < minDate) || (maxDate && date > maxDate);\n\n const selected =\n date.getTime() === min?.getTime() ||\n (min && max && dateIntersect(date, { min, max }));\n const preSelected =\n !selected &&\n !disabled &&\n (dateIntersect(date, hovered) ||\n (min &&\n !max &&\n hovered &&\n dateIntersect(\n date,\n min <= hovered.min\n ? { min, max: hovered.min }\n : { min: hovered.max, max: min },\n )));\n const blocked = blockedRanges.some((range) => dateIntersect(date, range));\n\n return (\n <button\n type=\"button\"\n key={`${index}-${dayIndex}`}\n css={getDayCssStyles({\n disabled,\n prevMonth,\n nextMonth,\n today,\n blocked,\n selected,\n preSelected,\n })}\n {...getDateProps({ dateObj: dateObject })}\n onClick={() => {\n if (dirty) {\n if (min) set('calendar', min, date);\n else set('calendar', date, max);\n } else {\n set('calendar', date);\n }\n }}\n onPointerOver={() => setHovered({ min: date, max: date })}\n onPointerOut={() => setHovered(undefined)}\n disabled={disabled}\n >\n {date.getDate()}\n </button>\n );\n })}\n </Fragment>\n );\n })}\n </div>\n </div>\n ))}\n\n <div\n css={{\n marginTop: 'var(--spacing)',\n display: 'grid',\n gridAutoFlow: 'column',\n justifyContent: 'center',\n }}\n >\n {resolvedQuickOptions}\n </div>\n </div>\n );\n}\n","import { createContext, useContext } from 'react';\nimport type { Id, TableActions, TableContextValue, TableStructure } from '../types';\n\n/** Full table state. Changes on every state change: rows and cells must not consume it. */\nexport const TableContext = createContext<TableContextValue<any> | null>(null);\n\n/** Header, footer and filter components use this so that row interactions (selection,\n * expansion) don't render them. */\nexport const TableStructureContext = createContext<TableStructure<any> | null>(null);\n\n/** Stable for the lifetime of the table. */\nexport const TableActionsContext = createContext<TableActions<any> | null>(null);\n\n/** Only the row checkboxes consume this, so a selection change does not render rows. */\nexport const SelectionContext = createContext<Set<Id>>(new Set());\n\nexport const ColumnContext = createContext<Id | null>(null);\n\nexport function useTableContext<T>(): TableContextValue<T> {\n const value = useContext(TableContext);\n if (!value) throw new Error('No table context available');\n return value as TableContextValue<T>;\n}\n\nexport function useTableStructure<T>(): TableStructure<T> {\n const value = useContext(TableStructureContext);\n if (!value) throw new Error('No table context available');\n return value as TableStructure<T>;\n}\n\nexport function useTableActions<T>(): TableActions<T> {\n const value = useContext(TableActionsContext);\n if (!value) throw new Error('No table context available');\n return value as TableActions<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","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 // start() never rejects: each job's outcome goes to its own promise.\n if (!this.isRunning) void 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, useRef, useState } from 'react';\nimport { Queue } from '../misc/queue';\nimport type { Id, TableProps } from '../types';\n\nexport const PERSIST_KEYS = [\n 'sort',\n 'selection',\n 'expanded',\n 'hiddenColumns',\n 'filterValues',\n 'columnWidths',\n] as const;\n\nexport type PersistKey = (typeof PERSIST_KEYS)[number];\nexport type PersistedData = Partial<Record<PersistKey, any>>;\n\nconst storageName = (id: string) => `schummar-table_state-v1_${id}`;\n\nexport type TableStateStorage = {\n getItem: (key: string) => string | null | Promise<string | null>;\n /** May return a promise. */\n setItem: (key: string, value: string) => unknown;\n /** May return a promise. */\n removeItem: (key: string) => 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: unknown) {\n function prepare(value: unknown): 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\n/** A persisted key, or `{ filterValues: [...] }` for the values of some filters only. */\nexport type PersistEntry = PersistKey | { filterValues: readonly Id[] };\n\ntype Persist = NonNullable<TableProps<any>['persist']>;\n\nconst filterIds = (entries: readonly PersistEntry[] | undefined) =>\n entries?.flatMap((entry) => (typeof entry === 'object' ? entry.filterValues : []));\n\nexport function isPersisted(persist: Persist, key: PersistKey) {\n const isIncluded =\n !persist.include ||\n persist.include.includes(key) ||\n (key === 'filterValues' && filterIds(persist.include)!.length > 0);\n return isIncluded && !persist.exclude?.includes(key);\n}\n\nexport function isFilterValuePersisted(persist: Persist, columnId: Id) {\n if (!isPersisted(persist, 'filterValues')) return false;\n const included = persist.include?.includes('filterValues')\n ? undefined\n : filterIds(persist.include);\n return (\n (included === undefined || included.includes(columnId)) &&\n !filterIds(persist.exclude)?.includes(columnId)\n );\n}\n\n/**\n * Loads the persisted state once on mount and saves `data` (at most once per second) after that.\n * `data` must already be reduced to what should be saved.\n */\nexport function usePersistence(\n persist: TableProps<any>['persist'],\n data: PersistedData,\n restore: (data: PersistedData) => void,\n debug?: (...output: any) => void,\n) {\n const [isHydrated, setIsHydrated] = useState(!persist);\n const [queue] = useState(() => new Queue());\n const latest = useRef({ persist, data, restore, debug });\n const timer = useRef<ReturnType<typeof setTimeout>>(undefined);\n const lastSave = useRef(0);\n\n useEffect(() => {\n latest.current = { persist, data, restore, debug };\n });\n\n useEffect(() => {\n const { persist } = latest.current;\n if (!persist) return;\n\n let isCanceled = false;\n\n void (async () => {\n try {\n const json = await persist.storage.getItem(storageName(persist.id));\n if (isCanceled || !json) return;\n\n const data = parse(json);\n latest.current.debug?.('load', json, data);\n latest.current.restore(\n Object.fromEntries(\n PERSIST_KEYS.filter((key) => key in data && isPersisted(persist, key)).map((key) => [\n key,\n data[key],\n ]),\n ),\n );\n } catch (error) {\n console.error('Failed to load table state:', error);\n } finally {\n if (!isCanceled) setIsHydrated(true);\n }\n })();\n\n return () => {\n isCanceled = true;\n };\n }, []);\n\n useEffect(() => {\n if (!isHydrated || !latest.current.persist || timer.current) return;\n\n timer.current = setTimeout(\n () => {\n timer.current = undefined;\n lastSave.current = Date.now();\n\n const { persist, data, debug } = latest.current;\n if (!persist) return;\n\n const json = stringify(data);\n debug?.('save', data, json);\n void queue.run(async () => {\n await persist.storage.setItem(storageName(persist.id), json);\n }, true);\n },\n Math.max(0, lastSave.current + 1000 - Date.now()),\n );\n }, [isHydrated, data, queue]);\n\n useEffect(() => () => clearTimeout(timer.current), []);\n\n async function clear() {\n clearTimeout(timer.current);\n timer.current = undefined;\n\n const { persist } = latest.current;\n if (!persist) return;\n\n await queue.run(async () => {\n await persist.storage.removeItem(storageName(persist.id));\n }, true);\n }\n\n return [isHydrated, clear] as const;\n}\n","import { useEffect, useRef, useState } from 'react';\n\n/**\n * State that can be controlled through a prop. Setting it reports the new value and only stores\n * it when uncontrolled, like a React <input>.\n */\nexport function useControllableState<V>(\n controlled: V | undefined,\n initial: () => V,\n onChange: ((value: V) => void) | undefined,\n) {\n const [internal, setInternal] = useState(initial);\n const value = controlled ?? internal;\n\n const latest = useRef({ controlled, onChange });\n useEffect(() => {\n latest.current = { controlled, onChange };\n });\n\n const [set] = useState(() => (next: V) => {\n latest.current.onChange?.(next);\n if (latest.current.controlled === undefined) {\n setInternal(next);\n }\n });\n\n return [value, set, setInternal] as const;\n}\n\n/**\n * Keeps a state normalized: renders use the normalized value right away, and an effect writes it\n * back (reporting it like any other change) when it differs. `normalize` must return its input\n * unchanged when there is nothing to fix, or this loops.\n */\nexport function useNormalized<V>(value: V, normalized: V, set: (value: V) => void) {\n useEffect(() => {\n if (normalized !== value) {\n set(normalized);\n }\n }, [value, normalized, set]);\n\n return normalized;\n}\n","import { useMemo, useState } from 'react';\nimport type { DisplaySize, Id, InternalColumn, InternalTableProps } from '../types';\nimport { useControllableState } from './useControllableState';\n\nexport function useColumns<T>(props: InternalTableProps<T>, displaySize: DisplaySize | undefined) {\n const [hiddenColumns, setHiddenColumns, setHiddenColumnsInternal] = useControllableState(\n props.hiddenColumns,\n () => props.defaultHiddenColumns ?? new Set<Id>(),\n props.onHiddenColumnsChange,\n );\n const [columnWidths, setColumnWidths] = useState(() => new Map<Id, string>());\n\n const allColumns = props.columns;\n\n const matchesDisplaySize = (column: InternalColumn<T, unknown>) =>\n displaySize === undefined ||\n column.displaySize === undefined ||\n column.displaySize.includes(displaySize);\n\n const columns = useMemo(() => allColumns.filter(matchesDisplaySize), [allColumns, displaySize]);\n\n const activeColumns = useMemo(\n () => allColumns.filter((column) => !(column.hidden ?? hiddenColumns.has(column.id))),\n [allColumns, hiddenColumns],\n );\n\n const visibleColumns = useMemo(\n () => activeColumns.filter(matchesDisplaySize),\n [activeColumns, displaySize],\n );\n\n return {\n hiddenColumns,\n setHiddenColumns,\n setHiddenColumnsInternal,\n columnWidths,\n setColumnWidths,\n columns,\n activeColumns,\n visibleColumns,\n };\n}\n","import { useMemo } from 'react';\nimport { getAncestors } from '../misc/helpers';\nimport type { Id, InternalTableProps, TableItem } from '../types';\nimport { useControllableState, useNormalized } from './useControllableState';\n\nexport function useExpanded<T>(\n props: InternalTableProps<T>,\n itemsById: Map<Id, TableItem<T>>,\n matching: Set<Id> | undefined,\n) {\n const [value, setExpanded, setExpandedInternal] = useControllableState(\n props.expanded,\n () => props.defaultExpanded ?? new Set<Id>(),\n props.onExpandedChange,\n );\n\n const normalized = useMemo(() => {\n let result = value;\n const add = (id: Id) => {\n if (result.has(id)) return;\n if (result === value) result = new Set(value);\n result.add(id);\n };\n\n if (props.expandOnlyOne && value.size > 1) {\n // Keep the deepest expanded item and its ancestors, collapse every other branch.\n const deepest = [...value]\n .map((id) => itemsById.get(id))\n .filter((item) => item !== undefined)\n .sort((a, b) => b.depth - a.depth)[0];\n const branch = deepest ? getAncestors(itemsById, deepest).add(deepest.id) : new Set<Id>();\n if ([...value].some((id) => !branch.has(id))) return branch;\n }\n\n for (const id of value) {\n const item = itemsById.get(id);\n if (item) getAncestors(itemsById, item).forEach(add);\n }\n\n if (props.items !== undefined) {\n for (const id of value) {\n if (!itemsById.has(id)) {\n if (result === value) result = new Set(value);\n result.delete(id);\n }\n }\n }\n\n // Parents of matching items, so matches nested in collapsed branches become visible.\n if (props.revealFiltered && matching) {\n for (const id of matching) {\n const parentId = itemsById.get(id)?.parentId;\n if (parentId !== undefined && parentId !== null) add(parentId);\n }\n }\n\n return result;\n }, [value, itemsById, matching, props.items, props.expandOnlyOne, props.revealFiltered]);\n\n const expanded = useNormalized(value, normalized, setExpanded);\n\n return { expanded, setExpanded, setExpandedInternal };\n}\n","import { useMemo } from 'react';\nimport type { Filter, Id, InternalColumn, InternalTableProps, TableItem } from '../types';\nimport { useControllableState } from './useControllableState';\n\nexport const isActiveFilter = (filter: Filter<any, any> | undefined, value: unknown) =>\n filter !== undefined &&\n value !== undefined &&\n value !== null &&\n filter.isActive(value, filter.options);\n\n/** Columns whose filters apply: the visible ones, or all with `enableHiddenColumnFilters`. */\nexport function filteredColumns<T>(\n props: InternalTableProps<T>,\n visibleColumns: InternalColumn<T, unknown>[],\n) {\n return props.enableHiddenColumnFilters ? props.columns : visibleColumns;\n}\n\nexport function useFilters<T>(\n props: InternalTableProps<T>,\n visibleColumns: InternalColumn<T, unknown>[],\n items: TableItem<T>[],\n) {\n const [stored, setFilterValues, setFilterValuesInternal] = useControllableState(\n props.filterValues,\n () => props.defaultFilterValues ?? new Map<Id, unknown>(),\n props.onFilterValuesChange,\n );\n\n const filterValues = useMemo(() => {\n let result = stored;\n for (const { id, filter } of props.columns) {\n const value =\n filter?.value !== undefined || stored.has(id) ? filter?.value : filter?.defaultValue;\n if (value === undefined) continue;\n if (result === stored) result = new Map(stored);\n result.set(id, value);\n }\n return result;\n }, [stored, props.columns]);\n\n const applied = filteredColumns(props, visibleColumns);\n\n /** Ids of matching items and of all their ancestors; undefined when no filter is active. */\n const matching = useMemo(() => {\n const active = applied.flatMap((column) => {\n const { filter } = column;\n const value = filterValues.get(column.id);\n if (!filter || filter.external || !isActiveFilter(filter, value)) return [];\n return [{ column, filter, value }];\n });\n\n if (active.length === 0) return undefined;\n\n const result = new Set<Id>();\n // Children come after their parent, so walking backwards sees descendants first.\n for (let i = items.length - 1; i >= 0; i--) {\n const item = items[i]!;\n const isMatch =\n result.has(item.id) ||\n active.every(({ column, filter, value }) =>\n filter.test(value, column.filterBy(column.value(item.value), item.value), filter.options),\n );\n\n if (isMatch) {\n result.add(item.id);\n if (item.parentId !== undefined && item.parentId !== null) result.add(item.parentId);\n }\n }\n return result;\n }, [applied, filterValues, items]);\n\n return { stored, filterValues, setFilterValues, setFilterValuesInternal, matching };\n}\n","import { useMemo } from 'react';\nimport type { InternalColumn, InternalTableProps } from '../types';\nimport { useControllableState, useNormalized } from './useControllableState';\n\ntype Criterion<T> = {\n key: (item: T) => unknown;\n direction: 1 | -1;\n collator: Intl.Collator;\n};\n\nconst collators = new Map<string, Intl.Collator>();\n\nfunction getCollator(locale: string | undefined, options: Intl.CollatorOptions | undefined) {\n const cacheKey = `${locale}|${JSON.stringify(options)}`;\n let collator = collators.get(cacheKey);\n if (!collator) {\n collator = new Intl.Collator(locale, options);\n collators.set(cacheKey, collator);\n }\n return collator;\n}\n\nexport function useSort<T>(\n props: InternalTableProps<T>,\n activeColumns: InternalColumn<T, unknown>[],\n) {\n const [value, setSort, setSortInternal] = useControllableState(\n props.sort,\n () => props.defaultSort ?? [],\n props.onSortChange,\n );\n\n const normalized = useMemo(() => {\n const filtered = value.filter((s) => activeColumns.some((column) => column.id === s.columnId));\n return filtered.length === value.length ? value : filtered;\n }, [value, activeColumns]);\n\n const sort = useNormalized(value, normalized, setSort);\n\n const criteria = useMemo(() => {\n if (props.externalSort) return [];\n\n return sort.flatMap((s): Criterion<T>[] => {\n const column = activeColumns.find((column) => column.id === s.columnId);\n if (!column) return [];\n\n return column.sortBy.map((sortBy) => ({\n key: (item: T) => sortBy(column.value(item), item),\n direction: s.direction === 'desc' ? -1 : 1,\n collator: getCollator(s.locale ?? props.locale, s.options),\n }));\n });\n }, [sort, activeColumns, props.externalSort, props.locale]);\n\n return { sort, setSort, setSortInternal, criteria };\n}\n\n/** Stable sort that evaluates each sort key once per item instead of once per comparison. */\nexport function sortBy<R>(records: R[], criteria: Criterion<any>[], getValue: (record: R) => any) {\n if (criteria.length === 0) return records;\n\n const keys = criteria.map((criterion) =>\n records.map((record) => criterion.key(getValue(record))),\n );\n const indices = records.map((_, index) => index);\n\n indices.sort((a, b) => {\n for (let i = 0; i < criteria.length; i++) {\n const { direction, collator } = criteria[i]!;\n const x = keys[i]![a];\n const y = keys[i]![b];\n\n if (typeof x === 'string' && typeof y === 'string') {\n const result = collator.compare(x, y);\n if (result !== 0) return result * direction;\n continue;\n }\n\n if ((x as any) > (y as any)) return direction;\n if ((x as any) < (y as any)) return -direction;\n }\n return a - b;\n });\n\n return indices.map((index) => records[index]!);\n}\n","import { useMemo } from 'react';\nimport type { Id, InternalTableProps, TableItem } from '../types';\nimport { sortBy } from './useSort';\nimport type { useSort } from './useSort';\n\ntype ItemRecord<T> = { id: Id; parentId: Id | undefined | null; value: T };\n\nconst isRoot = (parentId: Id | undefined | null) => parentId === undefined || parentId === null;\n\n/** All items, sorted, as a flattened tree. */\nexport function useItems<T>(\n props: InternalTableProps<T>,\n criteria: ReturnType<typeof useSort<T>>['criteria'],\n) {\n const { items: input, id, parentId } = props;\n\n const records = useMemo(\n () =>\n (input ?? []).map<ItemRecord<T>>((value) => ({\n id: id(value),\n parentId: parentId?.(value),\n value,\n })),\n [input, id, parentId],\n );\n\n const sorted = useMemo(\n () => sortBy(records, criteria, (record) => record.value),\n [records, criteria],\n );\n\n return useMemo(() => {\n const byId = new Map<Id, TableItem<T>>();\n for (const record of sorted) {\n byId.set(record.id, { ...record, children: [], depth: 0 });\n }\n\n const roots: TableItem<T>[] = [];\n for (const item of byId.values()) {\n if (isRoot(item.parentId)) {\n roots.push(item);\n } else {\n byId.get(item.parentId!)?.children.push(item);\n }\n }\n\n // Items whose parent is missing are dropped, like before: they are unreachable from a root.\n const items: TableItem<T>[] = [];\n const itemsById = new Map<Id, TableItem<T>>();\n const traverse = (level: TableItem<T>[], depth: number) => {\n for (const item of level) {\n item.depth = depth;\n items.push(item);\n itemsById.set(item.id, item);\n traverse(item.children, depth + 1);\n }\n };\n traverse(roots, 0);\n\n return { items, itemsById };\n }, [sorted]);\n}\n\n/** Items that pass the filters and whose ancestors are all expanded. */\nexport function useActiveItems<T>(\n items: TableItem<T>[],\n matching: Set<Id> | undefined,\n expanded: Set<Id>,\n) {\n return useMemo(() => {\n const activeItems: TableItem<T>[] = [];\n const activeItemsById = new Map<Id, TableItem<T>>();\n\n for (const item of items) {\n if (matching && !matching.has(item.id)) continue;\n if (\n !isRoot(item.parentId) &&\n !(activeItemsById.has(item.parentId!) && expanded.has(item.parentId!))\n ) {\n continue;\n }\n\n activeItems.push(item);\n activeItemsById.set(item.id, item);\n }\n\n return { activeItems, activeItemsById };\n }, [items, matching, expanded]);\n}\n","import { useMemo } from 'react';\nimport type { Id, InternalTableProps, TableItem } from '../types';\nimport { useControllableState, useNormalized } from './useControllableState';\n\nexport function useSelection<T>(\n props: InternalTableProps<T>,\n activeItems: TableItem<T>[],\n activeItemsById: Map<Id, TableItem<T>>,\n) {\n const [value, setSelection, setSelectionInternal] = useControllableState(\n props.selection,\n () => props.defaultSelection ?? new Set<Id>(),\n props.onSelectionChange,\n );\n\n const hasItems = props.items !== undefined;\n\n const normalized = useMemo(() => {\n let result = value;\n const copy = () => (result === value ? (result = new Set(value)) : result);\n\n if (props.selectSyncChildren) {\n for (const item of activeItems) {\n if (\n item.parentId !== undefined &&\n item.parentId !== null &&\n result.has(item.parentId) &&\n !result.has(item.id)\n ) {\n copy().add(item.id);\n }\n }\n }\n\n // Selection only covers what is shown: filtered out or collapsed items are deselected.\n if (hasItems) {\n for (const id of result) {\n if (!activeItemsById.has(id)) copy().delete(id);\n }\n }\n\n return result;\n }, [value, activeItems, activeItemsById, props.selectSyncChildren, hasItems]);\n\n const selection = useNormalized(value, normalized, setSelection);\n\n return { selection, setSelection, setSelectionInternal };\n}\n","export function defaultSerializer(x: unknown): string | number | Date {\n if (x instanceof Date || typeof x === 'number' || typeof x === 'string') {\n return x;\n }\n\n return JSON.stringify(x) ?? '';\n}\n","import { isValidElement } from 'react';\n\nconst isPlainObject = (x: object) => {\n const prototype = Object.getPrototypeOf(x);\n return prototype === Object.prototype || prototype === null;\n};\n\n/**\n * Structural equality for props. Functions and class instances compare by reference: keeping those\n * stable is up to the caller (or the React Compiler). React elements compare by type, key and props.\n */\nconst handlerTarget = Symbol('eventHandler');\n\ntype EventHandler<F> = F & { [handlerTarget]: F };\n\nconst isEventHandler = (x: unknown): x is EventHandler<(...args: any[]) => unknown> =>\n typeof x === 'function' && handlerTarget in x;\n\n/**\n * Wraps a callback that `deepEqual` compares like an event handler: any two are equal, so passing a\n * new function on every render doesn't make its object unequal. The previous one, which the\n * caller keeps, then calls the next one's function.\n */\nexport function eventHandler<F extends (...args: any[]) => unknown>(fn: F): F {\n const handler = ((...args: Parameters<F>) => handler[handlerTarget](...args)) as EventHandler<F>;\n handler[handlerTarget] = fn;\n return handler;\n}\n\n/** `a` is the next value, `b` the previous one, see `eventHandler`. */\nexport function deepEqual(a: unknown, b: unknown, depth = 0): boolean {\n if (Object.is(a, b)) return true;\n if (isEventHandler(a) && isEventHandler(b)) {\n b[handlerTarget] = a[handlerTarget];\n return true;\n }\n if (typeof a !== 'object' || typeof b !== 'object' || a === null || b === null) return false;\n if (depth > 20) return false;\n\n if (Array.isArray(a)) {\n return (\n Array.isArray(b) &&\n a.length === b.length &&\n a.every((value, index) => deepEqual(value, b[index], depth + 1))\n );\n }\n\n if (a instanceof Set) {\n if (!(b instanceof Set) || a.size !== b.size) return false;\n for (const value of a) if (!b.has(value)) return false;\n return true;\n }\n\n if (a instanceof Map) {\n if (!(b instanceof Map) || a.size !== b.size) return false;\n for (const [key, value] of a) {\n if (!b.has(key) || !deepEqual(value, b.get(key), depth + 1)) return false;\n }\n return true;\n }\n\n if (a instanceof Date) return b instanceof Date && a.getTime() === b.getTime();\n\n if (isValidElement(a)) {\n return (\n isValidElement(b) &&\n a.type === b.type &&\n a.key === b.key &&\n deepEqual(a.props, b.props, depth + 1)\n );\n }\n\n if (!isPlainObject(a) || !isPlainObject(b)) return false;\n\n const keys = Object.keys(a);\n if (keys.length !== Object.keys(b).length) return false;\n return keys.every(\n (key) =>\n key in b &&\n deepEqual(\n (a as Record<string, unknown>)[key],\n (b as Record<string, unknown>)[key],\n depth + 1,\n ),\n );\n}\n\n/** Same length and the same elements by reference. For large arrays like `items`. */\nexport function shallowArrayEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false;\n return true;\n}\n","import { useMemo, useRef, useSyncExternalStore } from 'react';\nimport { defaultSerializer } from '../exporters/serializer';\nimport { deepEqual, shallowArrayEqual } from '../misc/equal';\nimport { asString, castArray } from '../misc/helpers';\nimport type {\n Column,\n DisplaySize,\n DisplaySizes,\n Id,\n InternalColumn,\n InternalTableProps,\n TableProps,\n} from '../types';\n\nconst defaultProps = {\n enableSelection: true,\n selectSyncChildren: true,\n stickyHeader: true,\n stickyFooter: true,\n enableColumnSelection: true,\n enableColumnResize: true,\n displaySizeOverrides: {\n mobile: {\n enableSelection: false,\n enableColumnSelection: false,\n enableExport: false,\n enableColumnResize: false,\n },\n },\n} satisfies Partial<TableProps<any>>;\n\nconst identity = (value: unknown) => value;\n\nconst defaultSortBy = (v: unknown) =>\n typeof v === 'number' || v instanceof Date ? v : asString(v);\n\nfunction normalizeId<T>(id: TableProps<T>['id']): (item: T) => Id {\n return id instanceof Function ? id : (item) => item[id] as Id;\n}\n\nfunction normalizeParentId<T>(\n parentId: TableProps<T>['parentId'],\n): ((item: T) => Id | undefined) | undefined {\n if (parentId === undefined) return undefined;\n return parentId instanceof Function ? parentId : (item) => item[parentId] as Id | undefined;\n}\n\nfunction normalizeColumns<T>(\n columns: TableProps<T>['columns'],\n defaultColumnProps: TableProps<T>['defaultColumnProps'],\n columnProps: TableProps<T>['columnProps'],\n disableSort: boolean | undefined,\n): InternalColumn<T, unknown>[] {\n const input =\n columns instanceof Function ? columns((value, column) => ({ ...column, value })) : columns;\n\n return input\n .filter((column): column is Column<T, unknown> => !!column)\n .map((column, index) => {\n const id = column.id ?? index;\n const defaults = { ...defaultColumnProps, ...columnProps?.(id) };\n const displaySize = column.displaySize ?? defaults.displaySize;\n\n return {\n id,\n header: column.header ?? defaults.header ?? null,\n exportHeader: column.exportHeader ?? defaults.exportHeader ?? id,\n footer: column.footer ?? defaults.footer ?? null,\n value: column.value,\n renderCell: column.renderCell ?? defaults.renderCell ?? asString,\n exportCell: column.exportCell ?? defaults.exportCell ?? defaultSerializer,\n sortBy: column.sortBy ?? defaults.sortBy ?? [defaultSortBy],\n disableSort: column.disableSort ?? defaults.disableSort ?? disableSort ?? false,\n deferred: column.deferred ?? defaults.deferred,\n hidden: column.hidden ?? defaults.hidden,\n classes: column.classes ?? defaults.classes,\n styles: column.styles ?? defaults.styles,\n filterBy: column.filterBy ?? defaults.filterBy ?? identity,\n filter: column.filter ?? defaults.filter,\n width: column.width ?? defaults.width,\n displaySize: displaySize !== undefined ? castArray(displaySize) : undefined,\n };\n });\n}\n\nfunction subscribeResize(onChange: () => void) {\n window.addEventListener('resize', onChange);\n return () => window.removeEventListener('resize', onChange);\n}\n\nfunction useDisplaySize(displaySize: DisplaySize | DisplaySizes | undefined) {\n const width = useSyncExternalStore(\n subscribeResize,\n () => window.innerWidth,\n () => undefined,\n );\n\n if (typeof displaySize !== 'object') return displaySize;\n if (width === undefined) return undefined;\n\n return Object.entries(displaySize).find(\n ([, maxWidth]) => maxWidth !== undefined && maxWidth >= width,\n )?.[0];\n}\n\nfunction definedOnly<T extends object>(object: T): Partial<T> {\n return Object.fromEntries(\n Object.entries(object).filter(([, value]) => value !== undefined),\n ) as Partial<T>;\n}\n\n/**\n * Returns the previous props object while every prop is equal to the previous one: structurally,\n * with functions by reference, and `items` element by element. Parents creating equal objects,\n * Sets or arrays on each render then don't cause any recomputation.\n */\nfunction useStableProps<T>(raw: TableProps<T>): TableProps<T> {\n const previous = useRef<TableProps<T>>(undefined);\n const last = previous.current;\n\n if (last) {\n const keys = Object.keys(raw) as (keyof TableProps<T>)[];\n const isEqual =\n keys.length === Object.keys(last).length &&\n keys.every((key) =>\n key === 'items' ? shallowArrayEqual(raw[key], last[key]) : deepEqual(raw[key], last[key]),\n );\n if (isEqual) return last;\n }\n\n previous.current = raw;\n return raw;\n}\n\n/** Keeps the previous column objects (and array) for columns that are structurally unchanged. */\nfunction useStableColumns<T>(columns: InternalColumn<T, unknown>[]) {\n const previous = useRef<InternalColumn<T, unknown>[]>(undefined);\n const last = previous.current;\n if (!last || last === columns) {\n previous.current = columns;\n return columns;\n }\n\n const lastById = new Map(last.map((column) => [column.id, column]));\n const result = columns.map((column) => {\n const lastColumn = lastById.get(column.id);\n return lastColumn && deepEqual(column, lastColumn) ? lastColumn : column;\n });\n\n const isUnchanged =\n result.length === last.length && result.every((column, index) => column === last[index]);\n previous.current = isUnchanged ? last : result;\n return previous.current;\n}\n\n/**\n * Normalizes the props. Every derived value keeps its identity as long as its inputs do, so memos\n * downstream only recompute when the relevant props change.\n */\nexport function useTableProps<T>(input: TableProps<T>) {\n const raw = useStableProps(input);\n const displaySize = useDisplaySize(raw.displaySize);\n\n const id = useMemo(() => normalizeId(raw.id), [raw.id]);\n const parentId = useMemo(() => normalizeParentId(raw.parentId), [raw.parentId]);\n const columns = useStableColumns(\n useMemo(\n () => normalizeColumns(raw.columns, raw.defaultColumnProps, raw.columnProps, raw.disableSort),\n [raw.columns, raw.defaultColumnProps, raw.columnProps, raw.disableSort],\n ),\n );\n\n const displaySizeOverrides: TableProps<T>['displaySizeOverrides'] =\n raw.displaySizeOverrides ?? defaultProps.displaySizeOverrides;\n const override = displaySize !== undefined ? displaySizeOverrides[displaySize] : undefined;\n\n const overrideId = useMemo(\n () => (override?.id !== undefined ? normalizeId(override.id) : undefined),\n [override?.id],\n );\n const overrideParentId = useMemo(\n () => normalizeParentId(override?.parentId),\n [override?.parentId],\n );\n const overrideColumns = useMemo(\n () =>\n override?.columns !== undefined\n ? normalizeColumns(\n override.columns,\n override.defaultColumnProps ?? raw.defaultColumnProps,\n override.columnProps ?? raw.columnProps,\n override.disableSort ?? raw.disableSort,\n )\n : undefined,\n [\n override?.columns,\n override?.defaultColumnProps,\n override?.columnProps,\n override?.disableSort,\n raw.defaultColumnProps,\n raw.columnProps,\n raw.disableSort,\n ],\n );\n\n const props = useMemo(\n () =>\n ({\n ...defaultProps,\n ...definedOnly(raw),\n ...(override && definedOnly(override)),\n id: overrideId ?? id,\n parentId: overrideParentId ?? parentId,\n columns: overrideColumns ?? columns,\n }) as InternalTableProps<T>,\n [raw, override, id, parentId, columns, overrideId, overrideParentId, overrideColumns],\n );\n\n return { props, displaySize };\n}\n","import { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { useTableTheme } from '../hooks/useTheme';\nimport { getAncestors, getDescendants } from '../misc/helpers';\nimport type {\n Id,\n InternalColumn,\n TableActions,\n TableContextValue,\n TableProps,\n TableState,\n TableStructure,\n} from '../types';\nimport {\n isFilterValuePersisted,\n isPersisted,\n usePersistence,\n type PersistedData,\n} from './persistence';\nimport { useColumns } from './useColumns';\nimport { useExpanded } from './useExpanded';\nimport { useFilters } from './useFilters';\nimport { useActiveItems, useItems } from './useItems';\nimport { useSelection } from './useSelection';\nimport { useSort } from './useSort';\nimport { useTableProps } from './useTableProps';\n\nconst isControlledFilter = (columns: InternalColumn<any, unknown>[], columnId: Id) =>\n columns.find((column) => column.id === columnId)?.filter?.value !== undefined;\n\nfunction withEntry<K, V>(map: Map<K, V>, key: K, value: V | undefined) {\n const result = new Map(map);\n if (value === undefined) result.delete(key);\n else result.set(key, value);\n return result;\n}\n\n/** `isReset`: whether this state replaces one that got reset. */\nexport function useTable<T>(raw: TableProps<T>, onReset: () => void, isReset = false) {\n const { props, displaySize } = useTableProps(raw);\n const theme = useTableTheme(props);\n const columns = useColumns(props, displaySize);\n const sort = useSort(props, columns.activeColumns);\n const { items, itemsById } = useItems(props, sort.criteria);\n const filters = useFilters(props, columns.visibleColumns, items);\n const expanded = useExpanded(props, itemsById, filters.matching);\n const { activeItems, activeItemsById } = useActiveItems(\n items,\n filters.matching,\n expanded.expanded,\n );\n const selection = useSelection(props, activeItems, activeItemsById);\n\n const state: TableState<T> = {\n props,\n displaySize,\n sort: sort.sort,\n selection: selection.selection,\n expanded: expanded.expanded,\n hiddenColumns: columns.hiddenColumns,\n columnWidths: columns.columnWidths,\n filterValues: filters.filterValues,\n columns: columns.columns,\n activeColumns: columns.activeColumns,\n visibleColumns: columns.visibleColumns,\n items,\n itemsById,\n activeItems,\n activeItemsById,\n };\n\n const { persist } = props;\n const persistData = useMemo(() => {\n const data: PersistedData = {};\n if (!persist) return data;\n\n const add = (key: keyof PersistedData, value: unknown, isControlled = false) => {\n if (!isControlled && isPersisted(persist, key)) data[key] = value;\n };\n\n add('sort', sort.sort, props.sort !== undefined);\n add('selection', selection.selection, props.selection !== undefined);\n add('expanded', expanded.expanded, props.expanded !== undefined);\n add('hiddenColumns', columns.hiddenColumns, props.hiddenColumns !== undefined);\n add('columnWidths', columns.columnWidths);\n add(\n 'filterValues',\n new Map(\n [...filters.stored].filter(\n ([columnId]) =>\n isFilterValuePersisted(persist, columnId) &&\n !isControlledFilter(props.columns, columnId),\n ),\n ),\n props.filterValues !== undefined,\n );\n\n return data;\n }, [\n persist?.storage,\n persist?.id,\n JSON.stringify(persist?.include),\n JSON.stringify(persist?.exclude),\n sort.sort,\n selection.selection,\n expanded.expanded,\n columns.hiddenColumns,\n columns.columnWidths,\n filters.stored,\n props.columns,\n props.sort !== undefined,\n props.selection !== undefined,\n props.expanded !== undefined,\n props.hiddenColumns !== undefined,\n props.filterValues !== undefined,\n ]);\n\n const latest = useRef({ state, sort, selection, expanded, columns, filters, onReset });\n useLayoutEffect(() => {\n latest.current = { state, sort, selection, expanded, columns, filters, onReset };\n });\n\n function restore(data: PersistedData) {\n const { state, sort, selection, expanded, columns } = latest.current;\n const { props } = state;\n\n if (data.sort && props.sort === undefined) sort.setSort(data.sort);\n if (data.selection && props.selection === undefined) selection.setSelection(data.selection);\n if (data.expanded && props.expanded === undefined) expanded.setExpanded(data.expanded);\n if (data.hiddenColumns && props.hiddenColumns === undefined) {\n columns.setHiddenColumns(data.hiddenColumns);\n }\n if (data.columnWidths) columns.setColumnWidths(data.columnWidths);\n\n const filterValues = data.filterValues as Map<Id, unknown> | undefined;\n if (filterValues && props.filterValues === undefined) {\n const next = new Map(state.filterValues);\n for (const [columnId, value] of filterValues) {\n if (\n props.persist &&\n isFilterValuePersisted(props.persist, columnId) &&\n !isControlledFilter(props.columns, columnId)\n ) {\n next.set(columnId, value);\n }\n }\n commitFilterValues(next);\n }\n }\n\n useEffect(() => {\n if (!isReset) return;\n if (props.filterValues === undefined) props.onFilterValuesChange?.(filters.filterValues);\n\n for (const { id, filter } of props.columns) {\n filter?.onChange?.(filters.stored.has(id) ? filters.stored.get(id) : filter.defaultValue);\n }\n }, []);\n\n const [isHydrated, clearStorage] = usePersistence(persist, persistData, restore, props.debug);\n const clearStorageRef = useRef(clearStorage);\n clearStorageRef.current = clearStorage;\n\n const lastSelectedId = useRef<Id | undefined>(undefined);\n\n // `latest` only catches up after the next render.\n function patchState(patch: Partial<TableState<T>>) {\n latest.current = { ...latest.current, state: { ...latest.current.state, ...patch } };\n }\n\n /** Sets filter values and notifies the `onChange` of each filter whose value changed. */\n function commitFilterValues(next: Map<Id, unknown>) {\n const { state, filters } = latest.current;\n const previous = state.filterValues;\n filters.setFilterValues(next);\n patchState({ filterValues: next });\n\n for (const { id, filter } of state.props.columns) {\n const value = next.get(id);\n if (filter?.onChange && !Object.is(value, previous.get(id))) filter.onChange(value);\n }\n }\n\n const [actions] = useState((): TableActions<T> => {\n const get = () => latest.current;\n\n return {\n getState: () => get().state,\n\n setSort: (sort) => get().sort.setSort(sort),\n\n setSelection: (selection) => get().selection.setSelection(selection),\n\n toggleSelection(itemId, { range: isRange } = {}) {\n const { state, selection } = get();\n const { activeItems, activeItemsById, props } = state;\n const current = state.selection;\n\n const isSelected =\n itemId !== undefined\n ? current.has(itemId)\n : activeItems.length > 0 && activeItems.every((item) => current.has(item.id));\n\n let range;\n if (isRange && itemId !== undefined) {\n const b = activeItems.findIndex((item) => item.id === itemId);\n const last = lastSelectedId.current;\n const a = last !== undefined ? activeItems.findIndex((item) => item.id === last) : 0;\n range = activeItems.slice(Math.min(a < 0 ? b : a, b), Math.max(a, b) + 1);\n } else {\n const item = itemId !== undefined ? activeItemsById.get(itemId) : undefined;\n range = item ? [item] : activeItems;\n }\n\n const next = new Set(current);\n for (const item of range) {\n if (isSelected) next.delete(item.id);\n else next.add(item.id);\n }\n\n if (props.selectSyncChildren && isSelected) {\n for (const id of getAncestors(activeItemsById, ...range)) next.delete(id);\n for (const id of getDescendants(...range)) next.delete(id);\n }\n\n lastSelectedId.current = itemId;\n selection.setSelection(next);\n // A second action before the next render must build on this one.\n patchState({ selection: next });\n },\n\n setExpanded: (value) => get().expanded.setExpanded(value),\n\n toggleExpanded(itemId) {\n const { state, expanded } = get();\n const { activeItemsById, props } = state;\n const item = activeItemsById.get(itemId);\n const isExpanded = state.expanded.has(itemId);\n const next = new Set(state.expanded);\n\n if (props.expandOnlyOne) {\n next.clear();\n for (const id of item ? getAncestors(activeItemsById, item) : []) next.add(id);\n }\n\n if (isExpanded) {\n next.delete(itemId);\n for (const id of item ? getDescendants(item) : []) next.delete(id);\n } else {\n next.add(itemId);\n }\n\n expanded.setExpanded(next);\n patchState({ expanded: next });\n },\n\n setHiddenColumns: (hiddenColumns) => get().columns.setHiddenColumns(hiddenColumns),\n\n setColumnWidth(columnId, width) {\n get().columns.setColumnWidths((widths) => withEntry(widths, columnId, width));\n },\n\n setFilterValues: (filterValues) => commitFilterValues(filterValues),\n\n setFilterValue(columnId, value) {\n const next = new Map(get().state.filterValues);\n next.set(columnId, value);\n commitFilterValues(next);\n },\n\n clearFilters() {\n const { state } = get();\n const next = new Map(state.filterValues);\n for (const column of state.props.columns) {\n if (column.filter) next.set(column.id, undefined);\n }\n commitFilterValues(next);\n state.props.onReset?.('filters');\n },\n\n async resetTable() {\n await clearStorageRef.current();\n get().onReset();\n },\n };\n });\n const { sort: sortValue, hiddenColumns, columnWidths, filterValues } = state;\n const { columns: allColumns, activeColumns, visibleColumns } = state;\n const structure = useMemo(\n (): TableStructure<T> => ({\n props,\n displaySize,\n sort: sortValue,\n hiddenColumns,\n columnWidths,\n filterValues,\n columns: allColumns,\n activeColumns,\n visibleColumns,\n items,\n itemsById,\n actions,\n }),\n [\n props,\n displaySize,\n sortValue,\n hiddenColumns,\n columnWidths,\n filterValues,\n allColumns,\n activeColumns,\n visibleColumns,\n items,\n itemsById,\n actions,\n ],\n );\n\n const context = useMemo(\n (): TableContextValue<T> => ({\n ...structure,\n selection: state.selection,\n expanded: state.expanded,\n activeItems,\n activeItemsById,\n }),\n [structure, state.selection, state.expanded, activeItems, activeItemsById],\n );\n\n return {\n context,\n structure,\n actions,\n theme,\n isHydrated,\n setSortInternal: sort.setSortInternal,\n setSelectionInternal: selection.setSelectionInternal,\n setExpandedInternal: expanded.setExpandedInternal,\n setHiddenColumnsInternal: columns.setHiddenColumnsInternal,\n setFilterValuesInternal: filters.setFilterValuesInternal,\n };\n}\n","import { useImperativeHandle, type Ref } from 'react';\nimport type { TableRef } from '../types';\nimport type { useTable } from './useTable';\n\n/** The setters bypass the on*Change callbacks, as they always have. */\nexport function useTableImperativeHandle(\n ref: Ref<TableRef> | undefined,\n table: ReturnType<typeof useTable<any>>,\n) {\n const { actions } = table;\n\n useImperativeHandle(\n ref,\n () => ({\n getSort: () => actions.getState().sort,\n setSort: table.setSortInternal,\n getSelection: () => actions.getState().selection,\n setSelection: table.setSelectionInternal,\n getExpanded: () => actions.getState().expanded,\n setExpanded: table.setExpandedInternal,\n getHiddenColumns: () => actions.getState().hiddenColumns,\n setHiddenColumns: table.setHiddenColumnsInternal,\n getFilterValues: () => actions.getState().filterValues,\n setFilterValues: table.setFilterValuesInternal,\n }),\n [actions],\n );\n}\n","import { useCallback, useRef, useState } from 'react';\nimport type { TableProps } from '../types';\n\n/** Resetting remounts the table state under a new key and reports the defaults. */\nexport function useTableReset<T>(props: TableProps<T>) {\n const [resetKey, setResetKey] = useState(0);\n const latestProps = useRef(props);\n latestProps.current = props;\n\n const onReset = useCallback(() => {\n const props = latestProps.current;\n setResetKey((key) => key + 1);\n\n if (props.sort === undefined) props.onSortChange?.(props.defaultSort ?? []);\n if (props.expanded === undefined) props.onExpandedChange?.(props.defaultExpanded ?? new Set());\n if (props.selection === undefined) {\n props.onSelectionChange?.(props.defaultSelection ?? new Set());\n }\n if (props.hiddenColumns === undefined) {\n props.onHiddenColumnsChange?.(props.defaultHiddenColumns ?? new Set());\n }\n props.onReset?.('table');\n }, []);\n\n return [resetKey, onReset] as const;\n}\n","import type React from 'react';\nimport { useEffect, useRef, type HTMLProps } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useColumnContext, useTableStructure } from '../state/context';\n\nexport const columnWidthVariable = (index: number) => `--column-width-${index}`;\n\nexport function ResizeHandle() {\n const { props, visibleColumns, actions } = useTableStructure();\n const columnId = useColumnContext();\n const enabled = props.enableColumnResize;\n const index = visibleColumns.findIndex((column) => column.id === columnId);\n const table = useRef<HTMLElement | null>(null);\n const hasMoved = useRef(false);\n\n // The drag width lives in a CSS variable, keyed by visible index, so dragging renders nothing.\n const variable = columnWidthVariable(index);\n useEffect(\n () => () => {\n table.current?.style.removeProperty(variable);\n },\n [variable],\n );\n\n function onPointerDown(event: React.PointerEvent<HTMLDivElement>) {\n event.stopPropagation();\n event.currentTarget.setPointerCapture(event.pointerId);\n table.current = event.currentTarget.closest('[data-schummar-table]');\n hasMoved.current = false;\n }\n\n function widthAt(event: React.PointerEvent<HTMLDivElement>) {\n const header = event.currentTarget.parentElement!;\n const minWidth = visibleColumns.find((column) => column.id === columnId)?.filter ? 80 : 50;\n return Math.max(event.clientX - header.getBoundingClientRect().left + 5, minWidth);\n }\n\n function onPointerMove(event: React.PointerEvent<HTMLDivElement>) {\n event.stopPropagation();\n if (!event.currentTarget.hasPointerCapture(event.pointerId)) return;\n hasMoved.current = true;\n table.current?.style.setProperty(variable, `${widthAt(event)}px`);\n }\n\n function onPointerUp(event: React.PointerEvent<HTMLDivElement>) {\n event.stopPropagation();\n if (!event.currentTarget.hasPointerCapture(event.pointerId)) return;\n event.currentTarget.releasePointerCapture(event.pointerId);\n // The committed width renders before the next paint, so dropping the variable doesn't flash.\n table.current?.style.removeProperty(variable);\n if (hasMoved.current) actions.setColumnWidth(columnId, `${widthAt(event)}px`);\n }\n\n function onDoubleClick(event: React.MouseEvent) {\n actions.setColumnWidth(columnId, event.getModifierState('Control') ? undefined : 'max-content');\n }\n\n if (!enabled) {\n return null;\n }\n\n return (\n <ResizeHandleView\n enabled={enabled}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n onDoubleClick={onDoubleClick}\n />\n );\n}\n\nexport function ResizeHandleView({\n enabled,\n ...props\n}: HTMLProps<HTMLDivElement> & { enabled?: boolean | 'visualOnly' }) {\n const className = useTheme((theme) => theme.classes?.columnDivider);\n const styles = useTheme((theme) => theme.styles?.columnDivider);\n\n return (\n <div\n className={className}\n css={[\n {\n alignSelf: 'stretch',\n padding: '0 5px',\n cursor: enabled === true ? '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 '@media (pointer: coarse)': {\n pointerEvents: 'none',\n },\n },\n styles,\n ]}\n {...props}\n />\n );\n}\n","import { createContext, useContext, useEffect, useRef, useState } from 'react';\nimport { flushSync } from 'react-dom';\n\nconst FRAME_BUDGET_MS = 8;\n\ninterface Task {\n rowIndex: number;\n reveal: () => void;\n}\n\n/**\n * Spreads the rendering of deferred cells over time, a row at a time. Rows render synchronously until\n * the current frame's budget is used up; the deferred cells of the rest show a placeholder and get\n * revealed here, visible rows first, in slices of the same budget. Slices run as separate tasks, so the browser paints and handles input\n * in between, like React's own scheduler.\n */\nexport class CellScheduler {\n private frameStart: number | undefined;\n private queue = new Set<Task>();\n private visible = { start: 0, end: Infinity };\n private isScheduled = false;\n private channel: MessageChannel | undefined;\n // Pessimistic until measured, so the first batch is a single row.\n private costPerRow = FRAME_BUDGET_MS;\n\n /** Called while rendering a row for the first time: whether it may render right away. */\n claim(): boolean {\n const now = performance.now();\n if (this.frameStart === undefined) {\n this.frameStart = now;\n requestAnimationFrame(() => {\n this.frameStart = undefined;\n });\n }\n return now - this.frameStart < FRAME_BUDGET_MS;\n }\n\n /** Returns a function that removes the task again, e.g. when its cell unmounts. */\n enqueue(task: Task) {\n this.queue.add(task);\n this.schedule();\n return () => {\n this.queue.delete(task);\n };\n }\n\n setVisibleRange(start: number, end: number) {\n this.visible = { start, end };\n }\n\n dispose() {\n this.queue.clear();\n }\n\n private schedule() {\n if (this.isScheduled) return;\n this.isScheduled = true;\n if (!this.channel) {\n this.channel = new MessageChannel();\n this.channel.port1.onmessage = this.run;\n }\n this.channel.port2.postMessage(null);\n }\n\n private isVisible(task: Task) {\n return task.rowIndex >= this.visible.start && task.rowIndex <= this.visible.end;\n }\n\n private next(count: number) {\n return [...this.queue]\n .sort(\n (a, b) => Number(this.isVisible(b)) - Number(this.isVisible(a)) || a.rowIndex - b.rowIndex,\n )\n .slice(0, count);\n }\n\n private run = () => {\n this.isScheduled = false;\n const start = performance.now();\n\n while (this.queue.size > 0) {\n const remaining = FRAME_BUDGET_MS - (performance.now() - start);\n if (remaining <= 0) break;\n\n const batch = this.next(Math.max(1, Math.floor(remaining / this.costPerRow)));\n const batchStart = performance.now();\n flushSync(() => {\n for (const task of batch) {\n this.queue.delete(task);\n task.reveal();\n }\n });\n const cost = (performance.now() - batchStart) / batch.length;\n this.costPerRow = this.costPerRow * 0.7 + cost * 0.3;\n }\n\n if (this.queue.size > 0) this.schedule();\n };\n}\n\nexport const CellSchedulerContext = createContext<CellScheduler | null>(null);\n\nexport function useCellScheduler() {\n const [scheduler] = useState(() => new CellScheduler());\n useEffect(() => () => scheduler.dispose(), [scheduler]);\n return scheduler;\n}\n\n/** Whether a row with deferred cells renders them. Once revealed, it stays revealed. */\nexport function useReveal(deferred: boolean, rowIndex: number) {\n const scheduler = useContext(CellSchedulerContext);\n const [revealed, setRevealed] = useState(() => !deferred || !scheduler || scheduler.claim());\n const task = useRef<Task>({ rowIndex, reveal: () => setRevealed(true) });\n task.current.rowIndex = rowIndex;\n\n useEffect(() => {\n if (revealed || !scheduler) return;\n return scheduler.enqueue(task.current);\n }, [revealed, scheduler]);\n\n return revealed;\n}\n","import type { ReactElement, ReactNode } from 'react';\nimport { memo, useLayoutEffect } from 'react';\nimport type { InternalColumn } from '../types';\nimport type { RowConfig } from './row';\n\nfunction wrapText(content: ReactNode, className: string) {\n if (typeof content === 'string') {\n return (\n <span className={className} title={content}>\n {content}\n </span>\n );\n }\n return content;\n}\n\nexport const Cell = memo(function Cell<T>({\n column,\n placeholder,\n value,\n rowIndex,\n config,\n}: {\n column: InternalColumn<T, unknown>;\n /** A deferred cell whose row hasn't been revealed yet. */\n placeholder: boolean;\n value: T;\n rowIndex: number;\n config: RowConfig<T>;\n}) {\n const { styles, wrapCell } = config;\n const className = styles.cells.get(column.id)!(value, rowIndex);\n\n useLayoutEffect(() => {\n config.debugRender(placeholder ? 'defer cell' : 'render cell', column.id);\n });\n\n if (placeholder) {\n return (\n <div\n className={className}\n data-deferred=\"\"\n style={{ boxSizing: 'border-box', minHeight: config.placeholderHeight }}\n />\n );\n }\n\n const columnValue = column.value(value);\n const content = column.renderCell(columnValue, value);\n\n return (\n <div className={className}>\n {wrapCell ? wrapCell(content, columnValue, value, rowIndex) : wrapText(content, styles.text)}\n </div>\n );\n}) as <T>(props: {\n column: InternalColumn<T, unknown>;\n placeholder: boolean;\n value: T;\n rowIndex: number;\n config: RowConfig<T>;\n}) => ReactElement;\n","import type { RowConfig } from './row';\n\nexport function Details<T>({\n value,\n rowIndex,\n config,\n}: {\n value: T;\n rowIndex: number;\n config: RowConfig<T>;\n}) {\n const { rowDetails, styles } = config;\n const details = rowDetails instanceof Function ? rowDetails(value, rowIndex) : rowDetails;\n if (!details) return null;\n\n return <div className={styles.details(value, rowIndex)}>{details}</div>;\n}\n","import { css } from '@emotion/react';\nimport type { MouseEvent, ReactElement } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useTableActions } from '../state/context';\nimport { useLibraryClassName } from '../theme/emotion';\nimport type { Id } from '../types';\n\nconst spinnerCss = css({ margin: '0 var(--spacing)' });\n\nconst chevronCss = css({\n display: 'inline-flex',\n transition: 'all 300ms',\n transform: 'rotate3d(0, 0, 1, 0deg)',\n});\n\nconst expandedChevronCss = css({ transform: 'rotate3d(0, 0, 1, 90deg)' });\n\nexport function ExpandControl({\n itemId,\n expanded,\n hasChildren,\n hasDeferredChildren,\n}: {\n itemId: Id;\n expanded: boolean;\n hasChildren: boolean;\n hasDeferredChildren?: boolean;\n}): ReactElement {\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 const actions = useTableActions();\n const libraryClass = useLibraryClassName();\n\n function toggle(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n actions.toggleExpanded(itemId);\n }\n\n if (expanded && hasDeferredChildren && !hasChildren) {\n return <Spinner className={libraryClass(spinnerCss)} />;\n }\n\n return (\n <IconButton onClick={toggle}>\n <span className={libraryClass(chevronCss, expanded && expandedChevronCss)}>\n <ChevronRight />\n </span>\n </IconButton>\n );\n}\n","import { css } from '@emotion/react';\nimport { memo, useContext } from 'react';\nimport type React from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { SelectionContext, useTableActions, useTableContext } from '../state/context';\nimport { useUserClassName } from '../theme/emotion';\nimport type { Id } from '../types';\n\n// In the app cache, like a user override, so it beats the theme Checkbox's own colour.\nconst checkboxCss = css({ justifySelf: 'start', color: '#c9cfda' });\n\nexport const SelectComponent = memo(function SelectComponent({ itemId }: { itemId: Id }) {\n const selected = useContext(SelectionContext).has(itemId);\n const Checkbox = useTheme((t) => t.components.Checkbox);\n const overrideClass = useUserClassName();\n const actions = useTableActions();\n\n return (\n <Checkbox\n className={overrideClass(checkboxCss)}\n checked={selected}\n onChange={(event: React.ChangeEvent) =>\n actions.toggleSelection(itemId, { range: (event.nativeEvent as MouseEvent).shiftKey })\n }\n />\n );\n});\n\nexport function SelectAll() {\n const Checkbox = useTheme((t) => t.components.Checkbox);\n const overrideClass = useUserClassName();\n const { activeItems, selection, actions } = useTableContext();\n const selected = activeItems.length > 0 && activeItems.every((item) => selection.has(item.id));\n\n return (\n <Checkbox\n className={overrideClass(checkboxCss)}\n checked={selected}\n onChange={() => actions.toggleSelection(undefined)}\n />\n );\n}\n","import { memo, useLayoutEffect, type ReactElement, type ReactNode, type Ref } from 'react';\nimport { ColumnContext } from '../state/context';\nimport type { Id, InternalColumn, TableProps, WrapRowProps } from '../types';\nimport { Cell } from './cell';\nimport { useReveal } from './cellScheduler';\nimport { Details } from './details';\nimport { ExpandControl } from './expandControl';\nimport type { RowStyles } from './rowStyles';\nimport { SelectComponent } from './selectComponent';\n\n/** Everything rows need from the table props. Changing it renders every row. */\nexport interface RowConfig<T> {\n styles: RowStyles<T>;\n /** Columns whose cells render progressively. */\n deferredColumns: Set<Id>;\n placeholderHeight: number;\n columns: InternalColumn<T, unknown>[];\n enableSelection: boolean | undefined;\n rowAction: TableProps<T>['rowAction'];\n rowDetails: TableProps<T>['rowDetails'];\n wrapRow: TableProps<T>['wrapRow'];\n wrapCell: TableProps<T>['wrapCell'];\n hasDeferredChildren: TableProps<T>['hasDeferredChildren'];\n debugRender: (...output: any) => void;\n}\n\ninterface RowProps<T> {\n id: Id;\n value: T;\n rowIndex: number;\n depth: number;\n hasChildren: boolean;\n expanded: boolean;\n config: RowConfig<T>;\n measureRef?: Ref<HTMLDivElement>;\n}\n\nconst defaultWrapRow = (props: WrapRowProps) => <div {...props} />;\n\nexport const Row = memo(function Row<T>({\n id,\n value,\n rowIndex,\n depth,\n hasChildren,\n expanded,\n config,\n measureRef,\n}: RowProps<T>): ReactElement {\n const { styles, columns, enableSelection, rowAction, rowDetails, hasDeferredChildren } = config;\n const wrapRow = config.wrapRow ?? defaultWrapRow;\n\n useLayoutEffect(() => {\n config.debugRender('render row', id);\n });\n\n const fillClassName = styles.fillCell(value, rowIndex);\n const revealed = useReveal(config.deferredColumns.size > 0, rowIndex);\n const deferred = hasDeferredChildren?.(value) ?? false;\n const action = rowAction instanceof Function ? rowAction(value, rowIndex) : rowAction;\n const hasDetails = rowDetails instanceof Function ? !!rowDetails(value, rowIndex) : !!rowDetails;\n\n const children: ReactNode = (\n <>\n <div className={fillClassName} />\n\n <div className={styles.firstCell(value, rowIndex)}>\n {depth > 0 && <div style={{ width: depth * 20 }} />}\n\n {enableSelection && <SelectComponent itemId={id} />}\n\n {(hasChildren || deferred || hasDetails) && (\n <ExpandControl\n itemId={id}\n expanded={expanded}\n hasChildren={hasChildren}\n hasDeferredChildren={deferred}\n />\n )}\n\n {action}\n </div>\n\n {columns.map((column) => (\n <ColumnContext.Provider key={column.id} value={column.id}>\n <Cell\n column={column}\n placeholder={!revealed && config.deferredColumns.has(column.id)}\n value={value}\n rowIndex={rowIndex}\n config={config}\n />\n </ColumnContext.Provider>\n ))}\n\n <div className={fillClassName} />\n\n {expanded && hasDetails && <Details value={value} rowIndex={rowIndex} config={config} />}\n </>\n );\n\n return wrapRow(\n {\n ref: measureRef ?? null,\n 'data-index': rowIndex,\n className: styles.row(value, rowIndex),\n children,\n },\n value,\n rowIndex,\n ) as ReactElement;\n}) as <T>(props: RowProps<T>) => ReactElement;\n","import { css, type Interpolation } from '@emotion/react';\nimport { useMemo } from 'react';\nimport { columnTheme } from '../hooks/useTheme';\nimport { cx } from '../misc/helpers';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { useLibraryClassName, useUserClassName } from '../theme/emotion';\nimport type { Id, InternalColumn, TableTheme } from '../types';\n\ntype ClassOf<T> = (value: T, index: number) => string;\n\n/** Class names for everything a row renders, resolved once per theme and column change. */\nexport interface RowStyles<T> {\n row: ClassOf<T>;\n fillCell: ClassOf<T>;\n firstCell: ClassOf<T>;\n cells: Map<Id, ClassOf<T>>;\n details: ClassOf<T>;\n text: string;\n}\n\nconst rowCss = css({ gridColumn: '1 / -1', display: 'grid', gridTemplateColumns: 'subgrid' });\n\nexport function useRowStyles<T>(\n theme: TableTheme<T>,\n columns: InternalColumn<T, unknown>[],\n): RowStyles<T> {\n const libraryClass = useLibraryClassName();\n const userClass = useUserClassName();\n\n return useMemo(() => {\n // Static parts are resolved here; only function classes and styles run per row or cell.\n const cellClassOf = ({ classes, styles }: TableTheme<T>, baseClass: string): ClassOf<T> => {\n const { cell: cellClass, evenCell, oddCell } = classes ?? {};\n const { cell: cellStyle, evenCell: evenStyle, oddCell: oddStyle } = styles ?? {};\n\n if (!(cellClass instanceof Function) && !(cellStyle instanceof Function)) {\n const even = cx(baseClass, cellClass, evenCell, userClass(cellStyle, evenStyle));\n const odd = cx(baseClass, cellClass, oddCell, userClass(cellStyle, oddStyle));\n return (_value, index) => (index % 2 === 0 ? even : odd);\n }\n\n return (value, index) => {\n const isEven = index % 2 === 0;\n return cx(\n baseClass,\n cellClass instanceof Function ? cellClass(value, index) : cellClass,\n isEven ? evenCell : oddCell,\n userClass(\n cellStyle instanceof Function ? cellStyle(value, index) : cellStyle,\n isEven ? evenStyle : oddStyle,\n ),\n );\n };\n };\n\n const elementClassOf = (\n baseClass: string,\n className: string | ((value: T, index: number) => string | undefined) | undefined,\n style: Interpolation<any> | ((value: T, index: number) => Interpolation<any>),\n ): ClassOf<T> => {\n if (!(className instanceof Function) && !(style instanceof Function)) {\n const result = cx(baseClass, className, userClass(style));\n return () => result;\n }\n return (value, index) =>\n cx(\n baseClass,\n className instanceof Function ? className(value, index) : className,\n userClass(style instanceof Function ? style(value, index) : style),\n );\n };\n\n const cellBase = libraryClass(defaultClasses.cell);\n\n return {\n row: elementClassOf(libraryClass(rowCss), theme.classes?.row, theme.styles?.row),\n fillCell: cellClassOf(theme, libraryClass(defaultClasses.cellFill)),\n firstCell: cellClassOf(theme, libraryClass(defaultClasses.cell, defaultClasses.firstCell)),\n cells: new Map(\n columns.map((column) => [column.id, cellClassOf(columnTheme(theme, column), cellBase)]),\n ),\n details: elementClassOf(\n libraryClass(defaultClasses.details),\n theme.classes?.details,\n theme.styles?.details,\n ),\n text: libraryClass(defaultClasses.text),\n };\n }, [libraryClass, userClass, theme, columns]);\n}\n","import { useTheme } from '../hooks/useTheme';\nimport { useTableActions } from '../state/context';\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 actions = useTableActions<T>();\n\n return (\n <div css={defaultClasses.clearFiltersButton}>\n <Button variant=\"outlined\" onClick={() => actions.clearFilters()}>\n {textClearFilters}\n </Button>\n </div>\n );\n}\n","import { columnTheme, useTheme } from '../hooks/useTheme';\nimport { useColumnContext, useTableStructure } from '../state/context';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\n\nexport function ColumnFooter() {\n const columnId = useColumnContext();\n const { activeColumns } = useTableStructure();\n const column = activeColumns.find((column) => column.id === columnId);\n const { classes, styles } = useTheme((theme) => columnTheme(theme, column));\n\n return (\n <div className={classes?.footerCell} css={[defaultClasses.footerCell, styles?.footerCell]}>\n {column?.footer}\n </div>\n );\n}\n","import { memo } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { ColumnContext, useTableStructure } from '../state/context';\nimport { filteredColumns, isActiveFilter } from '../state/useFilters';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport ClearFiltersButton from './clearFiltersButton';\nimport { ColumnFooter } from './columnFooter';\n\n// Memoized so that rendering the rows (e.g. on selection) leaves it alone.\nexport const TableFooter = memo(function TableFooter() {\n const { props, visibleColumns, activeColumns, filterValues } = useTableStructure();\n const classes = useTheme((t) => t.classes?.footerCell);\n const styles = useTheme((t) => t.styles?.footerCell);\n const { stickyFooter, enableClearFiltersButton } = props;\n\n const hasActiveFilters = filteredColumns(props, visibleColumns).some((column) =>\n isActiveFilter(column.filter, filterValues.get(column.id)),\n );\n const hasFooter = activeColumns.some((column) => column.footer);\n\n return (\n <>\n {enableClearFiltersButton && hasActiveFilters && <ClearFiltersButton />}\n\n {hasFooter && (\n <div\n css={[\n { gridColumn: '1 / -1', display: 'grid', gridTemplateColumns: 'subgrid' },\n stickyFooter && defaultClasses.stickyBottom,\n stickyFooter instanceof Object && stickyFooter,\n ]}\n >\n <div className={classes} css={[defaultClasses.footerFill, styles]} />\n <div className={classes} css={[defaultClasses.footerFill, styles]} />\n\n {visibleColumns.map((column) => (\n <ColumnContext.Provider key={column.id} value={column.id}>\n <ColumnFooter />\n </ColumnContext.Provider>\n ))}\n\n <div className={classes} css={[defaultClasses.footerFill, styles]} />\n </div>\n )}\n </>\n );\n});\n","import { useEffect, useMemo, useState, type ReactElement } from 'react';\nimport { debounce } from '../misc/debounce';\nimport { toSingles, uniq } from '../misc/helpers';\nimport { useTableStructure } from '../state/context';\nimport type { InternalColumn } from '../types';\n\n/** Renders a column's filter UI. Changes apply after the filter's `debounce`, or on unmount. */\nexport function FilterPanel<T>({\n column,\n close,\n}: {\n column: InternalColumn<T, unknown>;\n close: () => void;\n}): ReactElement | null {\n const { filterValues, items, actions } = useTableStructure<T>();\n const [draft, setDraft] = useState<{ value: unknown }>();\n const { filter } = column;\n const delay = filter?.debounce ?? 0;\n\n const commit = useMemo(\n () =>\n debounce((value: unknown) => {\n actions.setFilterValue(column.id, value);\n setDraft(undefined);\n }, delay),\n [actions, column.id, delay],\n );\n\n useEffect(() => () => commit.flush(), [commit]);\n\n const getValues = useMemo(() => {\n let values: unknown[] | undefined;\n return () =>\n (values ??= uniq(\n items.flatMap((item) =>\n toSingles(column.filterBy(column.value(item.value), item.value) as unknown[]),\n ),\n ));\n }, [items, column]);\n\n if (!filter) return null;\n\n function onChange(value: unknown) {\n if (delay > 0) {\n setDraft({ value });\n commit(value);\n } else {\n actions.setFilterValue(column.id, value);\n }\n }\n\n const { Component } = filter;\n\n return (\n <Component\n value={draft ? draft.value : filterValues.get(column.id)}\n onChange={onChange}\n close={close}\n options={filter.options}\n getValues={getValues}\n />\n );\n}\n","import { ClassNames } from '@emotion/react';\nimport { useState, type ReactElement } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useColumnContext, useTableStructure } from '../state/context';\nimport { isActiveFilter } from '../state/useFilters';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport type { InternalColumn } from '../types';\nimport { FilterPanel } from './filterPanel';\n\nexport function FilterControl<T>(): ReactElement | null {\n const { filterValues, visibleColumns, actions } = useTableStructure<T>();\n const columnId = useColumnContext();\n const column = visibleColumns.find((column) => column.id === columnId);\n\n const IconButton = useTheme((t) => t.components.IconButton);\n const FilterList = useTheme((t) => t.icons.FilterList);\n const ArrowDropDown = useTheme((t) => t.icons.ArrowDropDown);\n\n const [anchor, setAnchor] = useState<Element | null>(null);\n\n if (!column?.filter) return null;\n\n const isActive = isActiveFilter(column.filter, filterValues.get(columnId));\n\n return (\n <>\n <IconButton\n onClick={(event) => setAnchor(event.currentTarget)}\n onContextMenu={(event) => {\n actions.setFilterValue(columnId, undefined);\n event.preventDefault();\n return false;\n }}\n css={[{ color: '#b0bac9' }, isActive && { color: 'var(--primaryMain) !important' }]}\n >\n {isActive ? <FilterList /> : <ArrowDropDown />}\n </IconButton>\n\n {anchor && (\n <FilterPopover anchor={anchor} onClose={() => setAnchor(null)} column={column}>\n <FilterPanel column={column} close={() => setAnchor(null)} />\n </FilterPopover>\n )}\n </>\n );\n}\n\nexport function FilterPopover<T>({\n anchor,\n onClose,\n column,\n children,\n}: {\n anchor: Element;\n onClose: () => void;\n column?: InternalColumn<T, unknown>;\n children: React.ReactNode;\n}): ReactElement {\n const Popover = useTheme((t) => t.components.Popover);\n const classes = useTheme((t) => t.classes);\n const styles = useTheme((t) => t.styles);\n const cssVariables = useCssVariables();\n const filterClassNames = column?.filter?.classNames;\n\n return (\n // Keeps pointer events from reaching the header, e.g. the resize handle.\n <div\n onPointerDown={(event) => event.stopPropagation()}\n onPointerMove={(event) => event.stopPropagation()}\n >\n <ClassNames>\n {({ css, cx }) => (\n <Popover\n open\n onClose={onClose}\n anchorEl={anchor}\n css={[cssVariables, styles?.popover]}\n className={cx(classes?.popover, filterClassNames?.popover)}\n backdropClassName={cx(\n classes?.popoverBackdrop,\n filterClassNames?.popoverBackdrop,\n css(styles?.popoverBackdrop),\n )}\n >\n {children}\n </Popover>\n )}\n </ClassNames>\n </div>\n );\n}\n","import type { ReactElement, ReactNode } from 'react';\nimport type React from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useColumnContext, useTableStructure } from '../state/context';\n\nexport function SortComponent<T>({ children }: { children: ReactNode }): ReactElement {\n const { sort, activeColumns, props, actions } = useTableStructure<T>();\n const columnId = useColumnContext();\n const Badge = useTheme((t) => t.components.Badge);\n const ArrowUpward = useTheme((t) => t.icons.ArrowUpward);\n\n const sortIndex = sort.findIndex((s) => s.columnId === columnId);\n const direction = sort[sortIndex]?.direction;\n const index = sortIndex >= 0 && sort.length > 1 ? sortIndex + 1 : undefined;\n const sortDisabled =\n activeColumns.find((column) => column.id === columnId)?.disableSort ?? props.disableSort;\n\n function toggle(event: React.MouseEvent, off?: boolean) {\n if (sortDisabled) {\n return;\n }\n\n const newDirection = direction === 'asc' ? 'desc' : 'asc';\n const newSort =\n event.getModifierState('Control') || off ? sort.filter((s) => s.columnId !== columnId) : [];\n if (!off) {\n newSort.push({\n columnId,\n direction: newDirection,\n });\n }\n\n actions.setSort(newSort);\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 type { ReactElement } from 'react';\nimport { columnTheme, useTheme } from '../hooks/useTheme';\nimport { useColumnContext, useTableStructure } from '../state/context';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { FilterControl } from './filterControl';\nimport { ResizeHandle } from './resizeHandle';\nimport { SortComponent } from './sortComponent';\n\nexport function ColumnHeader(): ReactElement {\n const columnId = useColumnContext();\n const { activeColumns } = useTableStructure();\n const column = activeColumns.find((column) => column.id === columnId);\n const { classes, styles } = useTheme((theme) => columnTheme(theme, column));\n\n return (\n <div\n data-column-header=\"\"\n className={classes?.headerCell}\n css={[\n defaultClasses.headerCell,\n { position: 'relative', userSelect: 'none' },\n styles?.headerCell,\n ]}\n >\n <SortComponent>{column?.header}</SortComponent>\n <div css={{ flex: 1 }} />\n <FilterControl />\n <ResizeHandle />\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nexport function FormControlLabel({\n control,\n label,\n disabled,\n}: {\n control: ReactNode;\n label: ReactNode;\n disabled?: boolean;\n}) {\n return (\n <label\n css={[\n {\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n userSelect: 'none',\n\n '& > *': {\n cursor: 'pointer',\n },\n },\n disabled && { color: 'rgba(0, 0, 0, 0.26)' },\n ]}\n >\n {control}\n <span css={{ marginLeft: 'var(--spacing)' }}>{label}</span>\n </label>\n );\n}\n","import { useState, type ReactElement } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useTableStructure } from '../state/context';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport type { InternalColumn } from '../types';\nimport { FormControlLabel } from './formControlLabel';\n\nexport function ColumnSelection<T>(): ReactElement {\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 { columns, hiddenColumns, actions } = useTableStructure<T>();\n\n const [anchorElement, setAnchorElement] = useState<Element | null>(null);\n\n const toggle = (column?: InternalColumn<T, unknown>, state?: boolean) => {\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 actions.setHiddenColumns(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={() => actions.resetTable()}>\n {resetAll}\n </Button>\n </div>\n\n {columns.map((column) => (\n <FormControlLabel\n key={column.id}\n control={\n <Checkbox\n checked={!(column.hidden ?? hiddenColumns.has(column.id))}\n onChange={() => toggle(column)}\n disabled={column.hidden !== undefined}\n />\n }\n label={column.header}\n ></FormControlLabel>\n ))}\n </div>\n </Popover>\n </>\n );\n}\n","import { useContext, useState, type ReactElement } from 'react';\nimport { ExportOptions, ExporterEntry } from '../exporters/exporter';\nimport { useTheme } from '../hooks/useTheme';\nimport { useTableStructure } from '../state/context';\nimport { TableSettingsContext } from '../misc/tableSettings';\nimport { useCssVariables } from '../theme/useCssVariables';\n\nexport function Export<T>(): ReactElement {\n const { exporters: contextExporters } = useContext(TableSettingsContext);\n const { props, actions } = useTableStructure<T>();\n const Button = useTheme((t) => t.components.Button);\n const IconButton = useTheme((t) => t.components.IconButton);\n const Popover = useTheme((t) => t.components.Popover);\n const ExportIcon = useTheme((t) => t.icons.Export);\n const Clipboard = useTheme((t) => t.icons.Clipboard);\n const exportTitle = useTheme((t) => t.text.exportTitle);\n const exportCopy = useTheme((t) => t.text.exportCopy);\n const exportDownload = useTheme((t) => t.text.exportDownload);\n const classes = useTheme((t) => t.classes);\n const cssVariables = useCssVariables();\n\n const { all, exporters }: ExportOptions =\n typeof props.enableExport === 'boolean' || props.enableExport === undefined\n ? { all: false, exporters: contextExporters }\n : props.enableExport;\n\n const [anchor, setAnchor] = useState<Element | null>(null);\n\n function execute({ action, exporter }: ExporterEntry) {\n const { activeColumns, activeItems, selection, items } = actions.getState();\n const columns = activeColumns.map((column) => column.exportHeader);\n\n let exportedItems = items;\n if (!all) {\n exportedItems = activeItems;\n\n if (selection.size > 0) {\n exportedItems = exportedItems.filter((item) => selection.has(item.id));\n }\n }\n\n const rows = exportedItems.map((item) =>\n activeColumns.map((column) => column.exportCell(column.value(item.value), item.value)),\n );\n\n if (action === 'copy') {\n const data = exporter.exportToString(columns, rows);\n navigator.clipboard.writeText(data).catch((error: unknown) => {\n console.error('Failed to copy the export to the clipboard:', error);\n });\n } else {\n Promise.resolve(exporter.exportToBlob(columns, rows))\n .then((blob) => {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = `export.${exporter.fileEnding}`;\n document.body.append(a);\n a.click();\n a.remove();\n URL.revokeObjectURL(url);\n })\n .catch((error: unknown) => {\n console.error('Failed to export:', error);\n });\n }\n }\n\n return (\n <>\n <IconButton onClick={(event) => setAnchor(anchor ? null : event.currentTarget)}>\n <ExportIcon css={!!anchor && { color: 'var(--primaryMain)' }} />\n </IconButton>\n\n <Popover\n open={!!anchor}\n onClose={() => setAnchor(null)}\n anchorEl={anchor}\n css={cssVariables}\n className={classes?.popover}\n backdropClassName={classes?.popoverBackdrop}\n >\n <div\n css={{\n padding: `calc(var(--spacing) * 2)`,\n display: 'grid',\n justifyItems: 'stretch',\n gap: 'var(--spacing)',\n\n '& > *': {\n justifyContent: 'start',\n },\n }}\n >\n <div css={{ marginBottom: 'var(--spacing)' }}>{exportTitle}</div>\n\n {exporters.map((entry, index) => (\n <Button\n key={index}\n startIcon={entry.action === 'copy' ? <Clipboard /> : <ExportIcon />}\n onClick={() => execute(entry)}\n >\n {entry.action === 'copy' ? exportCopy : exportDownload} (.{entry.exporter.type})\n </Button>\n ))}\n </div>\n </Popover>\n </>\n );\n}\n","import { useState, type ReactElement } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useTableStructure } from '../state/context';\nimport { isActiveFilter } from '../state/useFilters';\nimport type { Id } from '../types';\nimport { FilterPanel } from './filterPanel';\nimport { FilterPopover } from './filterControl';\n\n/** Lets users edit the filters of columns that are not visible, see `enableHiddenColumnFilters`. */\nexport function HiddenColumnFilters<T>(): ReactElement | null {\n const { props, visibleColumns, filterValues, actions } = useTableStructure<T>();\n const IconButton = useTheme((t) => t.components.IconButton);\n const Button = useTheme((t) => t.components.Button);\n const FilterList = useTheme((t) => t.icons.FilterList);\n const title = useTheme((t) => t.text.hiddenColumnFilters);\n\n const [anchor, setAnchor] = useState<Element | null>(null);\n const [selected, setSelected] = useState<Id>();\n\n const columns = props.columns.filter(\n (column) => column.filter && !visibleColumns.some((visible) => visible.id === column.id),\n );\n if (columns.length === 0) return null;\n\n const isActive = (columnId: Id) =>\n isActiveFilter(\n columns.find((column) => column.id === columnId)?.filter,\n filterValues.get(columnId),\n );\n const anyActive = columns.some((column) => isActive(column.id));\n const selectedColumn = columns.find((column) => column.id === selected);\n\n function close() {\n setAnchor(null);\n setSelected(undefined);\n }\n\n const color = (active: boolean) => (active ? 'var(--primaryMain)' : '#b0bac9');\n\n return (\n <>\n <IconButton\n onClick={(event) => setAnchor(event.currentTarget)}\n css={{ color: color(anyActive) }}\n >\n <FilterList />\n </IconButton>\n\n {anchor && (\n <FilterPopover anchor={anchor} onClose={close} column={selectedColumn}>\n {selectedColumn ? (\n <div css={{ display: 'grid' }}>\n <Button\n onClick={() => setSelected(undefined)}\n css={{ justifyContent: 'flex-start', color: 'inherit' }}\n >\n ‹ {selectedColumn.header}\n </Button>\n <FilterPanel key={selectedColumn.id} column={selectedColumn} close={close} />\n </div>\n ) : (\n <div\n css={{ padding: 'calc(var(--spacing) * 2)', display: 'grid', gap: 'var(--spacing)' }}\n >\n <div>{title}</div>\n {columns.map((column) => (\n <Button\n key={column.id}\n onClick={() => setSelected(column.id)}\n onContextMenu={(event) => {\n actions.setFilterValue(column.id, undefined);\n event.preventDefault();\n }}\n startIcon={<FilterList css={{ color: color(isActive(column.id)) }} />}\n css={{\n justifyContent: 'flex-start',\n color: isActive(column.id) ? 'var(--primaryMain)' : 'inherit',\n }}\n >\n {column.header}\n </Button>\n ))}\n </div>\n )}\n </FilterPopover>\n )}\n </>\n );\n}\n","import { memo } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { ColumnContext, useTableStructure } from '../state/context';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { ColumnHeader } from './columnHeader';\nimport { ColumnSelection } from './columnSelection';\nimport { Export } from './export';\nimport { HiddenColumnFilters } from './hiddenColumnFilters';\nimport { ResizeHandleView } from './resizeHandle';\nimport { SelectAll } from './selectComponent';\n\n// Memoized so that rendering the rows (e.g. on selection) leaves it alone.\nexport const TableHeader = memo(function TableHeader() {\n const { props, visibleColumns } = useTableStructure();\n const classes = useTheme((t) => t.classes?.headerCell);\n const styles = useTheme((t) => t.styles?.headerCell);\n const { stickyHeader, enableSelection, enableColumnSelection, enableExport } = props;\n const { enableHiddenColumnFilters } = props;\n\n return (\n <div\n css={[\n { gridColumn: '1 / -1', display: 'grid', gridTemplateColumns: 'subgrid' },\n stickyHeader && defaultClasses.sticky,\n stickyHeader instanceof Object && stickyHeader,\n ]}\n >\n <div className={classes} css={[defaultClasses.headerFill, styles]} />\n\n <div className={classes} css={[defaultClasses.headerCell, styles]}>\n {enableSelection && <SelectAll />}\n {enableColumnSelection && <ColumnSelection />}\n {enableExport && <Export />}\n {enableHiddenColumnFilters && <HiddenColumnFilters />}\n\n {(enableSelection ||\n enableColumnSelection ||\n enableExport ||\n enableHiddenColumnFilters) && (\n <>\n <div css={{ flex: 1 }} />\n <ResizeHandleView />\n </>\n )}\n </div>\n\n {visibleColumns.map((column) => (\n <ColumnContext.Provider key={column.id} value={column.id}>\n <ColumnHeader />\n </ColumnContext.Provider>\n ))}\n\n <div className={classes} css={[defaultClasses.headerFill, styles]} />\n </div>\n );\n});\n","import { useVirtualizer, useWindowVirtualizer, type Virtualizer } from '@tanstack/react-virtual';\nimport {\n useContext,\n useLayoutEffect,\n useState,\n type ReactNode,\n type Ref,\n type RefObject,\n} from 'react';\nimport { CellSchedulerContext } from './cellScheduler';\nimport type { Id, TableProps } from '../types';\n\ntype VirtualOptions = Exclude<TableProps<unknown>['virtual'], boolean | undefined>;\n\nexport type RenderRow = (index: number, measureRef?: Ref<HTMLDivElement>) => ReactNode;\n\nconst spacerCss = { gridColumn: '1 / -1' } as const;\n\nconst scrolls = (element: HTMLElement) =>\n element.scrollHeight > element.clientHeight && getComputedStyle(element).overflowY !== 'visible';\n\nfunction findScrollRoot(element: HTMLElement): HTMLElement | undefined {\n for (let parent = element.parentElement; parent; parent = parent.parentElement) {\n if (parent === document.documentElement) return undefined;\n if (parent === document.body) {\n // body's overflow applies to the viewport unless <html> sets its own.\n const ownScroller = getComputedStyle(document.documentElement).overflowY !== 'visible';\n return ownScroller && scrolls(parent) ? parent : undefined;\n }\n if (scrolls(parent)) return parent;\n }\n return undefined;\n}\n\n/** Offset of the first row from the start of the scroll root's content. */\nfunction measureScrollMargin(probe: HTMLElement, root: HTMLElement | undefined) {\n if (!root) return probe.getBoundingClientRect().top + window.scrollY;\n return probe.getBoundingClientRect().top - root.getBoundingClientRect().top + root.scrollTop;\n}\n\n/**\n * Finds the scroll root and the rows' offset in it. Both are re-measured when the table or the\n * page layout resizes: a container only becomes a scroll root once its content overflows, and\n * content above the table shifts the offset.\n */\nfunction useScrollRoot(tableRef: RefObject<HTMLElement | null>, probe: HTMLElement | null) {\n const [root, setRoot] = useState<{ element: HTMLElement | undefined; margin: number }>();\n\n useLayoutEffect(() => {\n const table = tableRef.current;\n if (!probe || !table) return;\n\n function update() {\n setRoot((current) => {\n // A container stays the scroll root while it can scroll, even when a filter shrinks the\n // content below its height: switching virtualizers would remount every row.\n const keep =\n current?.element?.contains(probe) &&\n getComputedStyle(current.element).overflowY !== 'visible';\n const element = keep ? current!.element : findScrollRoot(probe!);\n const margin = Math.round(measureScrollMargin(probe!, element));\n return current && current.element === element && current.margin === margin\n ? current\n : { element, margin };\n });\n }\n\n update();\n const observer = new ResizeObserver(update);\n observer.observe(table);\n observer.observe(document.body);\n return () => observer.disconnect();\n }, [tableRef, probe]);\n\n return root;\n}\n\ninterface VirtualRowsProps {\n count: number;\n getKey: (index: number) => Id;\n options: VirtualOptions;\n scrollMargin: number;\n renderRow: RenderRow;\n}\n\nfunction VirtualWindow({\n virtualizer,\n renderRow,\n measure,\n}: {\n virtualizer: Virtualizer<any, HTMLDivElement>;\n renderRow: RenderRow;\n measure: boolean;\n}) {\n const items = virtualizer.getVirtualItems();\n const scheduler = useContext(CellSchedulerContext);\n\n // Deferred cells of rows in the viewport are revealed before those in the overscan.\n useLayoutEffect(() => {\n const { range } = virtualizer;\n if (range) scheduler?.setVisibleRange(range.startIndex, range.endIndex);\n });\n\n const margin = virtualizer.options.scrollMargin;\n const before = items.length ? items[0]!.start - margin : 0;\n const after = items.length\n ? virtualizer.getTotalSize() - (items[items.length - 1]!.end - margin)\n : 0;\n\n return (\n <>\n <div style={{ ...spacerCss, height: before }} />\n {items.map((item) => renderRow(item.index, measure ? virtualizer.measureElement : undefined))}\n <div style={{ ...spacerCss, height: after }} />\n </>\n );\n}\n\nfunction virtualizerOptions({ count, getKey, options, scrollMargin }: VirtualRowsProps) {\n return {\n count,\n getItemKey: getKey,\n estimateSize: () => options.rowHeight ?? options.estimatedRowHeight ?? 40,\n overscan: options.overscan ?? 5,\n scrollMargin,\n };\n}\n\nfunction ElementRows(props: VirtualRowsProps & { root: HTMLElement }) {\n const virtualizer = useVirtualizer<HTMLElement, HTMLDivElement>({\n ...virtualizerOptions(props),\n getScrollElement: () => props.root,\n });\n return (\n <VirtualWindow\n virtualizer={virtualizer}\n renderRow={props.renderRow}\n measure={props.options.rowHeight === undefined}\n />\n );\n}\n\nfunction WindowRows(props: VirtualRowsProps) {\n const virtualizer = useWindowVirtualizer<HTMLDivElement>(virtualizerOptions(props));\n return (\n <VirtualWindow\n virtualizer={virtualizer}\n renderRow={props.renderRow}\n measure={props.options.rowHeight === undefined}\n />\n );\n}\n\nexport function VirtualRows({\n tableRef,\n ...props\n}: Omit<VirtualRowsProps, 'scrollMargin'> & { tableRef: RefObject<HTMLElement | null> }) {\n const [probe, setProbe] = useState<HTMLDivElement | null>(null);\n const root = useScrollRoot(tableRef, probe);\n const estimate = props.options.rowHeight ?? props.options.estimatedRowHeight ?? 40;\n\n return (\n <>\n <div ref={setProbe} style={spacerCss} />\n {/* Takes the rows' estimated space until the scroll root is known, so the container that\n will scroll already overflows and gets picked right away. */}\n {!root && <div style={{ ...spacerCss, height: props.count * estimate }} />}\n {root &&\n (root.element ? (\n <ElementRows {...props} root={root.element} scrollMargin={root.margin} />\n ) : (\n <WindowRows {...props} scrollMargin={root.margin} />\n ))}\n </>\n );\n}\n","import { useCallback, useLayoutEffect, useMemo, useRef, type Ref } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useTableContext } from '../state/context';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport type { TableTheme } from '../types';\nimport { columnWidthVariable } from './resizeHandle';\nimport { CellSchedulerContext, useCellScheduler } from './cellScheduler';\nimport { Row, type RowConfig } from './row';\nimport { useRowStyles } from './rowStyles';\nimport { TableFooter } from './tableFooter';\nimport { TableHeader } from './tableHeader';\nimport { VirtualRows } from './virtualized';\n\nexport function TableGrid<T>({ hidden }: { hidden: boolean }) {\n const state = useTableContext<T>();\n const theme = useTheme((t: TableTheme<T>) => t);\n const { props, visibleColumns, columnWidths, activeItems, expanded } = state;\n const cssVariables = useCssVariables();\n const tableRef = useRef<HTMLDivElement>(null);\n\n const debugRenderRef = useRef(props.debugRender);\n debugRenderRef.current = props.debugRender;\n const debugRender = useCallback((...output: any) => debugRenderRef.current?.(...output), []);\n\n useLayoutEffect(() => {\n debugRender('render table');\n });\n\n const { enableSelection, rowAction, rowDetails, wrapRow, wrapCell, hasDeferredChildren } = props;\n const styles = useRowStyles(theme, visibleColumns);\n const scheduler = useCellScheduler();\n const virtualOptions = props.virtual instanceof Object ? props.virtual : undefined;\n const deferCells = virtualOptions?.deferCells;\n const placeholderHeight = virtualOptions?.rowHeight ?? virtualOptions?.estimatedRowHeight ?? 40;\n const deferredColumns = useMemo(\n () =>\n new Set(\n visibleColumns.filter((column) => column.deferred ?? deferCells).map((column) => column.id),\n ),\n [visibleColumns, deferCells],\n );\n const config = useMemo(\n (): RowConfig<T> => ({\n styles,\n deferredColumns,\n placeholderHeight,\n columns: visibleColumns,\n enableSelection,\n rowAction,\n rowDetails,\n wrapRow,\n wrapCell,\n hasDeferredChildren,\n debugRender,\n }),\n [\n styles,\n deferredColumns,\n placeholderHeight,\n visibleColumns,\n enableSelection,\n rowAction,\n rowDetails,\n wrapRow,\n wrapCell,\n hasDeferredChildren,\n debugRender,\n ],\n );\n\n const renderRow = (index: number, measureRef?: Ref<HTMLDivElement>) => {\n const item = activeItems[index]!;\n return (\n <Row\n key={item.id}\n id={item.id}\n value={item.value}\n rowIndex={index}\n depth={item.depth}\n hasChildren={item.children.length > 0}\n expanded={expanded.has(item.id)}\n config={config}\n measureRef={measureRef}\n />\n );\n };\n\n const getKey = useCallback((index: number) => activeItems[index]!.id, [activeItems]);\n const { fullWidth, virtual } = props;\n\n return (\n <CellSchedulerContext.Provider value={scheduler}>\n <div\n ref={tableRef}\n data-schummar-table=\"\"\n className={theme.classes?.table}\n css={[\n cssVariables,\n defaultClasses.table,\n theme.styles?.table,\n hidden && { visibility: 'hidden' },\n ]}\n style={{\n gridTemplateColumns: [\n fullWidth === 'right' || fullWidth === true ? 'auto' : '0',\n 'max-content',\n ...visibleColumns.map(\n (column, index) =>\n `var(${columnWidthVariable(index)}, ${columnWidths.get(column.id) ?? column.width ?? 'max-content'})`,\n ),\n fullWidth === 'left' || fullWidth === true ? 'auto' : '0',\n ].join(' '),\n }}\n >\n <TableHeader />\n\n {virtual ? (\n <VirtualRows\n tableRef={tableRef}\n count={activeItems.length}\n getKey={getKey}\n options={virtual === true ? {} : virtual}\n renderRow={renderRow}\n />\n ) : (\n activeItems.map((_, index) => renderRow(index))\n )}\n\n <TableFooter />\n </div>\n </CellSchedulerContext.Provider>\n );\n}\n","import { useEffect, useState } from 'react';\nimport { useTheme } from '../hooks/useTheme';\n\nexport function TableLoadingState({ isHydrated }: { isHydrated: boolean }) {\n const [showLoading, setShowLoading] = useState(false);\n const loadingText = useTheme((t) => t.text.loading);\n\n useEffect(() => {\n const handle = setTimeout(() => setShowLoading(true), 500);\n return () => clearTimeout(handle);\n }, []);\n\n return !isHydrated && showLoading ? <div>{loadingText}</div> : null;\n}\n","import type { ReactElement, Ref } from 'react';\nimport { ThemeContext } from '../hooks/useTheme';\nimport {\n SelectionContext,\n TableActionsContext,\n TableContext,\n TableStructureContext,\n} from '../state/context';\nimport { useTable } from '../state/useTable';\nimport { useTableImperativeHandle } from '../state/useTableImperativeHandle';\nimport { useTableReset } from '../state/useTableReset';\nimport type { TableProps, TableRef } from '../types';\nimport { TableGrid } from './tableGrid';\nimport { TableLoadingState } from './tableLoadingState';\n\nexport function Table<T>({ ref, ...props }: TableProps<T> & { ref?: Ref<TableRef> }): ReactElement {\n const [resetKey, onReset] = useTableReset(props);\n return (\n <TableWithState\n key={resetKey}\n props={props}\n tableRef={ref}\n onReset={onReset}\n isReset={resetKey > 0}\n />\n );\n}\n\nfunction TableWithState<T>({\n props,\n tableRef,\n onReset,\n isReset,\n}: {\n props: TableProps<T>;\n tableRef?: Ref<TableRef>;\n onReset: () => void;\n isReset: boolean;\n}): ReactElement {\n const table = useTable(props, onReset, isReset);\n const { context, structure, actions, theme, isHydrated } = table;\n useTableImperativeHandle(tableRef, table);\n\n return (\n <ThemeContext.Provider value={theme}>\n <TableActionsContext.Provider value={actions}>\n <TableStructureContext.Provider value={structure}>\n <TableContext.Provider value={context}>\n <TableLoadingState isHydrated={isHydrated} />\n <SelectionContext.Provider value={context.selection}>\n <TableGrid hidden={!isHydrated} />\n </SelectionContext.Provider>\n </TableContext.Provider>\n </TableStructureContext.Provider>\n </TableActionsContext.Provider>\n </ThemeContext.Provider>\n );\n}\n","import type { ReactNode } from 'react';\nimport { eventHandler } from '../misc/equal';\nimport type { Filter, FilterComponentProps, FilterOptions } from '../types';\n\nexport interface FilterDefinition<TInput, TState, TOptions> {\n isActive(value: TState, options: TOptions): boolean;\n /** `input` is the column's `filterBy` value, see `SingleOrMultiple` and `toSingles`. */\n test(value: TState, input: TInput, options: TOptions): boolean;\n /** Delay in ms before changes made in the UI apply, unless the `debounce` option overrides it. */\n debounce?: number;\n Component(props: FilterComponentProps<TInput, TState, TOptions>): ReactNode;\n}\n\n/**\n * Creates a filter factory, like `textFilter`. `TInput` is what the filter accepts from a column,\n * typically a `SingleOrMultiple<…>`. A `debounce` option overrides the definition's.\n *\n * The definition's functions are shared by every filter created from it and everything else\n * passed goes into `options`, so a filter created inline on every render stays deep equal and\n * doesn't cause refiltering. Keep options to plain data where possible: functions are compared by\n * reference.\n */\nexport function defineFilter<TInput, TState, TOptions extends object = {}>(\n definition: FilterDefinition<TInput, TState, TOptions>,\n) {\n return (input?: FilterOptions<TState> & TOptions): Filter<TInput, TState, TOptions> => {\n const { defaultValue, value, onChange, external, classNames, ...options } =\n input ?? ({} as FilterOptions<TState>);\n\n return {\n isActive: definition.isActive,\n test: definition.test,\n debounce: (options as { debounce?: number }).debounce ?? definition.debounce,\n Component: definition.Component,\n defaultValue,\n value,\n onChange: onChange && eventHandler(onChange),\n external,\n classNames,\n options: options as TOptions,\n };\n };\n}\n","import type { ReactElement } from 'react';\nimport type { DatePickerProps, DateRange } from '../components/datePicker';\nimport { dateIntersect, DatePicker } from '../components/datePicker';\nimport { toSingles } from '../misc/helpers';\nimport type { FilterComponentProps, SingleOrMultiple } from '../types';\nimport { defineFilter } from './defineFilter';\n\n/** An ISO 8601 date or date-time string, e.g. `2024-05-03` or `2024-05-03T13:47:23Z`. */\nexport type ISODate = `${number}-${number}-${number}${string}`;\n\ntype DateValue = Date | DateRange | null;\ntype DateInput = SingleOrMultiple<Date | DateRange | ISODate | null | undefined>;\n\nconst toDate = (x: Date | DateRange | ISODate | null | undefined) =>\n typeof x === 'string' ? new Date(x) : x;\n\nexport type DateFilterOptions = {\n /** If enabled, only single days can be selected. Ranges otherwise. */\n singleSelect?: boolean;\n} & Pick<\n DatePickerProps,\n | 'locale'\n | 'firstDayOfWeek'\n | 'defaultDateInView'\n | 'quickOptions'\n | 'minDate'\n | 'maxDate'\n | 'showCalendarWeek'\n | 'showTime'\n>;\n\nfunction DateFilterComponent({\n value = null,\n onChange,\n close,\n options: {\n locale,\n firstDayOfWeek,\n defaultDateInView,\n quickOptions,\n singleSelect,\n minDate,\n maxDate,\n showCalendarWeek,\n showTime,\n },\n}: FilterComponentProps<DateInput, DateValue, DateFilterOptions>): ReactElement {\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 ?? null}\n onChange={(value, source) => {\n onChange(value);\n if (source !== 'input') {\n close();\n }\n }}\n locale={locale}\n firstDayOfWeek={firstDayOfWeek}\n defaultDateInView={defaultDateInView}\n quickOptions={quickOptions}\n minDate={minDate}\n maxDate={maxDate}\n showCalendarWeek={showCalendarWeek}\n showTime={showTime}\n />\n </div>\n );\n}\n\nexport const dateFilter = defineFilter<DateInput, DateValue, DateFilterOptions>({\n isActive: (value) => !!value,\n test: (value, input) => toSingles(input).some((x) => dateIntersect(value, toDate(x))),\n Component: DateFilterComponent,\n});\n","import { useState } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport type { TableTheme } from '../types';\n\ntype TextFieldProps =\n TableTheme['components']['TextField'] extends React.ComponentType<infer T> ? T : never;\n\nexport interface NumberFieldProps extends Omit<TextFieldProps, 'value' | 'onChange'> {\n value?: number | null;\n onChange?: (value: number | null) => void;\n}\n\nconst Pattern = /^-?\\d*(?:[.,]\\d*)?$/;\n\nconst printNumber = (value: number | null, locale?: string) => {\n if (value === null) {\n return '';\n }\n\n return value.toLocaleString(locale);\n};\n\nconst parseNumber = (value: string) => {\n if (value === '') {\n return null;\n }\n\n const asNumber = Number(value.replace(',', '.'));\n return Number.isNaN(asNumber) ? null : asNumber;\n};\n\nexport function NumberField({\n value: commitedValue = null,\n onChange,\n ...textFieldProps\n}: NumberFieldProps) {\n const locale = useTheme((t) => t.locale);\n const TextField = useTheme((t) => t.components.TextField);\n const [value = printNumber(commitedValue, locale), setValue] = useState<string>();\n\n return (\n <TextField\n value={value}\n onChange={(event) => {\n if (Pattern.test(event.target.value)) {\n setValue(event.target.value);\n }\n }}\n onBlur={() => {\n onChange?.(parseNumber(value));\n setValue(undefined);\n }}\n {...textFieldProps}\n css={{\n input: {\n backgroundColor: 'inherit',\n color: 'inherit',\n },\n }}\n />\n );\n}\n","import { useMemo, type ReactElement } from 'react';\nimport { NumberField } from '../components/numberField';\nimport { useTheme } from '../hooks/useTheme';\nimport { toSingles } from '../misc/helpers';\nimport type { FilterComponentProps, SingleOrMultiple } from '../types';\nimport { defineFilter } from './defineFilter';\n\ntype Range = [number | null, number | null] | null;\ntype RangeInput = SingleOrMultiple<number | bigint | null | undefined>;\n\nexport interface RangeFilterOptions {\n min?: number;\n max?: number;\n /** Delay in ms before changes apply. The inputs apply on blur anyway. */\n debounce?: number;\n}\n\nfunction RangeFilterComponent({\n value,\n onChange,\n options: { min, max },\n getValues,\n}: FilterComponentProps<RangeInput, Range, RangeFilterOptions>): ReactElement {\n const rangeMinText = useTheme((t) => t.text.rangeMin);\n const rangeMaxText = useTheme((t) => t.text.rangeMax);\n\n const [minValue, maxValue] = useMemo(() => {\n if (typeof min === 'number' && typeof max === 'number') {\n return [min, max];\n }\n\n let minValue;\n let maxValue;\n\n for (const value of getValues()) {\n if (value === null || value === undefined) continue;\n const number = Number(value);\n minValue = Math.min(minValue ?? number, number);\n maxValue = Math.max(maxValue ?? number, number);\n }\n\n return [min ?? minValue, max ?? maxValue];\n }, [min, max, getValues]);\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\nexport const rangeFilter = defineFilter<RangeInput, Range, RangeFilterOptions>({\n isActive: (value) => !!value,\n test(value, input) {\n if (!value || (value[0] === null && value[1] === null)) {\n return true;\n }\n\n const min = value[0] ?? Number.NEGATIVE_INFINITY;\n const max = value[1] ?? Number.POSITIVE_INFINITY;\n return toSingles(input).some(\n (x) => (typeof x === 'number' || typeof x === 'bigint') && x >= min && x <= max,\n );\n },\n Component: RangeFilterComponent,\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 { useVirtualizer } from '@tanstack/react-virtual';\nimport type { HTMLProps, ReactElement, ReactNode } from 'react';\nimport { useState } from 'react';\n\ntype VirtualOptions = { rowHeight?: number; estimatedRowHeight?: number; overscan?: number };\n\nexport interface VirtualListProps<T> extends Omit<HTMLProps<HTMLDivElement>, 'children'> {\n virtual?: boolean | VirtualOptions;\n items: T[];\n children: (item: T, index: number) => ReactNode;\n}\n\nconst containerCss = { overflowY: 'auto', display: 'grid' } as const;\n\nexport function VirtualList<T>({\n virtual = true,\n items,\n children,\n ...props\n}: VirtualListProps<T>): ReactElement {\n if (!virtual) {\n return (\n <div {...props} css={containerCss}>\n {items.map((item, index) => children(item, index))}\n </div>\n );\n }\n\n return (\n <VirtualItems {...props} items={items} options={virtual === true ? {} : virtual}>\n {children}\n </VirtualItems>\n );\n}\n\nfunction VirtualItems<T>({\n items,\n options,\n children,\n ...props\n}: Omit<VirtualListProps<T>, 'virtual'> & { options: VirtualOptions }) {\n const [scrollElement, setScrollElement] = useState<HTMLDivElement | null>(null);\n\n const virtualizer = useVirtualizer<HTMLDivElement, HTMLDivElement>({\n count: items.length,\n getScrollElement: () => scrollElement,\n estimateSize: () => options.rowHeight ?? options.estimatedRowHeight ?? 38,\n overscan: options.overscan ?? 5,\n useFlushSync: false,\n });\n\n const virtualItems = virtualizer.getVirtualItems();\n const measure = options.rowHeight === undefined ? virtualizer.measureElement : undefined;\n const before = virtualItems[0]?.start ?? 0;\n // With no items rendered yet the spacer must still take up the full size: the virtualizer\n // renders nothing while the container has no height.\n const after = virtualizer.getTotalSize() - (virtualItems[virtualItems.length - 1]?.end ?? 0);\n\n return (\n <div {...props} ref={setScrollElement} css={containerCss}>\n <div style={{ height: before }} />\n {virtualItems.map((virtualItem) => (\n <div\n key={virtualItem.key}\n ref={measure}\n data-index={virtualItem.index}\n css={{ display: 'grid' }}\n >\n {children(items[virtualItem.index]!, virtualItem.index)}\n </div>\n ))}\n <div style={{ height: after }} />\n </div>\n );\n}\n","import type { ReactElement, ReactNode } from 'react';\nimport { useMemo, useState } from 'react';\nimport { AutoFocusTextField } from '../components/autoFocusTextField';\nimport { FormControlLabel } from '../components/formControlLabel';\nimport type { VirtualListProps } from '../components/virtualList';\nimport { VirtualList } from '../components/virtualList';\nimport { useTheme } from '../hooks/useTheme';\nimport { asString, orderBy, toSingles, uniq } from '../misc/helpers';\nimport type { Filter, FilterComponentProps, FilterOptions, SingleOrMultiple } from '../types';\nimport { defineFilter } from './defineFilter';\n\nexport interface SelectFilterOptions<TFilterBy> {\n /** Which options are provided to select. By default all unique item values are used. */\n options?: TFilterBy[];\n /** String representation of a value. Used to filter options via the text field. */\n stringValue?: (value: TFilterBy) => string;\n /** Render values. By default a string representation of the value is used. */\n render?: (value: TFilterBy) => 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}\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\nfunction SelectFilterComponent({\n value: currentValue,\n onChange,\n options: {\n options: providedOptions,\n stringValue = asString,\n render = stringValue,\n singleSelect,\n hideSearchField,\n hideResetButton,\n virtual,\n },\n getValues,\n}: FilterComponentProps<unknown, Set<unknown>, SelectFilterOptions<unknown>>): ReactElement {\n const IconButton = useTheme((t) => t.components.IconButton);\n const Checkbox = useTheme((t) => t.components.Checkbox);\n const Button = useTheme((t) => t.components.Button);\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 value = currentValue ?? new Set<unknown>();\n\n const options = useMemo(\n () => (providedOptions ? uniq(providedOptions) : orderBy(getValues())),\n [providedOptions, getValues],\n );\n\n const [query, setQuery] = useState('');\n // Selected options come first, as they were when the filter opened.\n const [initialValue] = useState(value);\n const filtered = options.filter(\n (option) => !query || stringValue(option).toLowerCase().includes(query.toLowerCase()),\n );\n const ordered = filtered\n .filter((option) => initialValue.has(option))\n .concat(filtered.filter((option) => !initialValue.has(option)));\n\n return (\n <div\n css={{\n padding: 'calc(var(--spacing) * 2)',\n display: 'grid',\n gridTemplateColumns: 'minmax(0, 1fr)',\n gap: 'var(--spacing)',\n }}\n >\n {!hideSearchField && (\n <AutoFocusTextField\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n endIcon={\n <IconButton onClick={() => setQuery('')}>{!query ? <Search /> : <Clear />}</IconButton>\n }\n css={{ marginBottom: 'var(--spacing)' }}\n />\n )}\n\n {!hideResetButton && (\n <Button\n disabled={value.size === 0}\n onClick={() => onChange(new Set())}\n variant=\"outlined\"\n css={{\n justifyContent: 'center',\n width: '100%',\n marginBottom: 'var(--spacing)',\n color: 'inherit',\n }}\n >\n {deselectAll}\n </Button>\n )}\n\n <VirtualList\n items={ordered}\n virtual={virtual}\n css={{\n width: '20em',\n maxWidth: '100%',\n maxHeight: 'min(20em, 50vh)',\n overflow: 'hidden auto',\n display: 'grid',\n gridTemplateColumns: 'minmax(0, 1fr)',\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 />\n )}\n </VirtualList>\n\n {ordered.length === 0 && <span css={{ textAlign: 'center' }}>{noResults}</span>}\n </div>\n );\n}\n\n/** Accepts any value; typing `options`, `defaultValue`, `render` etc. narrows it. */\n// defineFilter can't make the factory generic, hence the cast.\nexport const selectFilter = defineFilter<\n SingleOrMultiple<unknown>,\n Set<unknown>,\n SelectFilterOptions<unknown>\n>({\n isActive: (value) => value.size > 0,\n test: (value, input) => toSingles(input).some((x) => value.has(x)),\n Component: SelectFilterComponent,\n}) as <T>(\n options?: FilterOptions<Set<T>> & SelectFilterOptions<T>,\n) => Filter<SingleOrMultiple<T>, Set<T>, SelectFilterOptions<T>>;\n","import type { ReactElement } from 'react';\nimport { AutoFocusTextField } from '../components/autoFocusTextField';\nimport { useTheme } from '../hooks/useTheme';\nimport { toSingles } from '../misc/helpers';\nimport type { FilterComponentProps, SingleOrMultiple } from '../types';\nimport { defineFilter } from './defineFilter';\n\nconst compares = {\n contains: (itemValue: string, filterValue: string) =>\n itemValue.toLowerCase().includes(filterValue.toLowerCase()),\n prefix: (itemValue: string, filterValue: string) =>\n itemValue.toLowerCase().startsWith(filterValue.toLowerCase()),\n exact: (itemValue: string, filterValue: string) =>\n itemValue.toLowerCase() === filterValue.toLowerCase(),\n};\n\nexport interface TextFilterOptions {\n /** How item values are matched, ignoring case. A function gets the item value and the filter\n * value and returns whether they match.\n * @default 'contains'\n */\n compare?: keyof typeof compares | ((itemValue: string, filterValue: string) => boolean);\n placeholder?: string;\n /** Delay in ms before typed text applies.\n * @default 300\n */\n debounce?: number;\n}\n\ntype TextInput = SingleOrMultiple<string | number | bigint | null | undefined>;\n\nfunction TextFilterComponent({\n value,\n onChange,\n close,\n options,\n}: FilterComponentProps<TextInput, string, TextFilterOptions>): ReactElement {\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 return (\n <div css={{ padding: `calc(var(--spacing) * 2)`, display: 'grid' }}>\n <AutoFocusTextField\n value={value ?? ''}\n onChange={(event) => onChange(event.target.value)}\n onKeyUp={(event) => {\n if (event.key === 'Enter') close();\n }}\n endIcon={\n <IconButton onClick={() => onChange('')}>{!value ? <Search /> : <Clear />}</IconButton>\n }\n placeholder={options.placeholder}\n />\n </div>\n );\n}\n\nexport const textFilter = defineFilter<TextInput, string, TextFilterOptions>({\n isActive: (value) => !!value,\n test(value, input, { compare = 'contains' }) {\n const match = typeof compare === 'function' ? compare : compares[compare];\n return toSingles(input).some((x) => x !== null && x !== undefined && match(String(x), value));\n },\n debounce: 300,\n Component: TextFilterComponent,\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"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["identity","serializeStyles","createCache","useEmotionCache","useMemo","useEmotionTheme","css","css","css","cloneElement","Export","createContext","useContext","TableSettingsContext","useMemo","mergeThemes","useRef","differenceInCalendarMonths","addDays","isBefore","startOfDay","isToday","useState","useRef","className","defaultDate","isIncludedType","maxValues","tabNext","useId","useState","useMemo","Fragment","useId","useState","useMemo","Fragment","createContext","useMemo","Temporal","useContext","useState","Fragment","createContext","useContext","useState","useRef","useState","useRef","useState","useMemo","useMemo","useMemo","useMemo","useMemo","useMemo","isValidElement","useSyncExternalStore","useRef","useMemo","useMemo","useRef","useState","useState","useRef","useCallback","useRef","createContext","useState","useContext","useRef","memo","css","css","memo","useContext","memo","css","useMemo","defaultClasses","defaultClasses","defaultClasses","memo","defaultClasses","useState","useMemo","useState","ClassNames","defaultClasses","useState","useContext","TableSettingsContext","useState","useState","memo","defaultClasses","useState","useContext","useVirtualizer","useWindowVirtualizer","useRef","useCallback","useMemo","defaultClasses","useState","useState","useMemo","useState","useVirtualizer","useMemo","useState"],"sources":["../src/theme/defaultTheme/defaultColors.ts","../src/components/spinnner.tsx","../src/theme/defaultTheme/badge.tsx","../src/theme/defaultTheme/button.tsx","../src/misc/helpers.ts","../src/theme/emotion.ts","../src/theme/defaultTheme/checkbox.tsx","../src/theme/defaultTheme/iconButton.tsx","../src/theme/defaultTheme/textField.tsx","../src/theme/defaultTheme/defaultComponents.ts","../src/theme/defaultTheme/defaultIcons.tsx","../src/theme/defaultTheme/defaultTexts.tsx","../src/theme/defaultTheme/index.tsx","../src/hooks/useTheme.ts","../src/components/autoFocusTextField.tsx","../src/misc/defaults.ts","../src/theme/useCssVariables.ts","../src/vendor/dayzed/utils.ts","../src/vendor/dayzed/dayzed.ts","../src/hooks/useLatestRef.ts","../src/misc/debounce.ts","../src/components/dateInput.tsx","../src/components/text.tsx","../src/components/timeInput.tsx","../src/components/datePicker.tsx","../src/state/context.ts","../src/misc/queue.ts","../src/state/persistence.ts","../src/state/useControllableState.ts","../src/state/useColumns.ts","../src/state/useExpanded.ts","../src/state/useFilters.ts","../src/state/useSort.ts","../src/state/useItems.ts","../src/state/useSelection.ts","../src/exporters/serializer.ts","../src/misc/equal.ts","../src/state/useTableProps.ts","../src/state/useTable.ts","../src/state/useTableImperativeHandle.ts","../src/state/useTableReset.ts","../src/components/resizeHandle.tsx","../src/components/cellScheduler.ts","../src/components/cell.tsx","../src/components/details.tsx","../src/components/expandControl.tsx","../src/components/selectComponent.tsx","../src/components/row.tsx","../src/components/rowStyles.ts","../src/components/clearFiltersButton.tsx","../src/components/columnFooter.tsx","../src/components/tableFooter.tsx","../src/components/filterPanel.tsx","../src/components/filterControl.tsx","../src/components/sortComponent.tsx","../src/components/columnHeader.tsx","../src/components/formControlLabel.tsx","../src/components/columnSelection.tsx","../src/components/export.tsx","../src/components/hiddenColumnFilters.tsx","../src/components/tableHeader.tsx","../src/components/virtualized.tsx","../src/components/tableGrid.tsx","../src/components/tableLoadingState.tsx","../src/components/table.tsx","../src/filters/defineFilter.ts","../src/filters/dateFilter.tsx","../src/components/numberField.tsx","../src/filters/rangeFilter.tsx","../src/components/virtualList.tsx","../src/filters/selectFilter.tsx","../src/filters/textFilter.tsx","../src/misc/textMatch.ts"],"sourcesContent":["import type { TableTheme } from '../../types';\n\nexport const defaultColors: TableTheme['colors'] = {\n primary: { main: '#1976d2', light: '#42a5f5', contrastText: '#fff' },\n secondary: { main: '#9c27b0', light: '#ba68c8', contrastText: '#fff' },\n blocked: { main: '#f44336', light: '#f26257', contrastText: '#fff' },\n background: '#ffffff',\n text: 'inherit',\n border: '#777',\n borderLight: '#eee',\n};\n","import { css } from '@emotion/react';\n\nexport function Spinner({ className }: { className?: string }) {\n return (\n <div\n className={className}\n css={css`\n display: inline-block;\n position: relative;\n width: 1em;\n height: 1em;\n\n div {\n box-sizing: border-box;\n display: block;\n position: absolute;\n width: 0.8em;\n height: 0.8em;\n margin: 0.1em;\n border: 0.1em solid #fff;\n border-radius: 50%;\n animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n border-color: currentColor transparent transparent transparent;\n }\n div:nth-of-type(1) {\n animation-delay: -0.45s;\n }\n div:nth-of-type(2) {\n animation-delay: -0.3s;\n }\n div:nth-of-type(3) {\n animation-delay: -0.15s;\n }\n @keyframes lds-ring {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n `}\n >\n <div />\n <div />\n <div />\n </div>\n );\n}\n","import type { TableTheme } from '../../types';\n\nexport const Badge: TableTheme['components']['Badge'] = ({ badgeContent, children }) => {\n return (\n <span\n css={{\n display: 'inline-flex',\n position: 'relative',\n flexShrink: 0,\n verticalAlign: 'middle',\n }}\n >\n {children}\n\n <span\n css={[\n {\n top: 0,\n right: 0,\n transform: 'scale(1) translate(50%, -50%)',\n transformOrigin: '100% 0%',\n height: 20,\n display: 'flex',\n padding: '0 6px',\n zIndex: 1,\n position: 'absolute',\n flexWrap: 'wrap',\n minWidth: 20,\n transition: 'transform 225ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',\n alignItems: 'center',\n lineHeight: 1,\n alignContent: 'center',\n borderRadius: 10,\n justifyContent: 'center',\n fontSize: '0.8em',\n },\n !badgeContent && {\n transform: 'scale(0) translate(50%, -50%)',\n transition: 'transform 195ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',\n },\n ]}\n >\n {badgeContent}\n </span>\n </span>\n );\n};\n","import type { TableTheme } from '../../types';\n\nexport const Button: TableTheme['components']['Button'] = ({\n startIcon,\n children,\n variant = 'text',\n ...props\n}) => {\n return (\n <button\n css={[\n {\n padding: `var(--spacing) calc(var(--spacing) * 2)`,\n display: 'inline-flex',\n alignItems: 'center',\n transition: 'background-color 150ms',\n border: 'none',\n cursor: 'pointer',\n background: 'transparent',\n borderRadius: 4,\n\n '&:active:not(:disabled)': {\n transform: 'scale3d(0.95, 0.95, 1)',\n },\n },\n variant === 'text' && {\n '&:hover': {\n background: 'rgba(0, 0, 0, 0.1)',\n },\n },\n variant === 'outlined' && {\n border: '1px solid var(--table-button-border, var(--table-border, #777777))',\n\n '&:disabled': {\n borderColor: 'var(--table-button-border-disabled, #eeeeee)',\n },\n },\n variant === 'contained' && {\n color: 'var(--primaryContrastText)',\n backgroundColor: 'var(--primaryMain)',\n boxShadow:\n '0px 3px 1px -2px rgb(0 0 0 / 20%), 0px 2px 2px 0px rgb(0 0 0 / 14%), 0px 1px 5px 0px rgb(0 0 0 / 12%)',\n\n '&:hover': {\n filter: 'brightness(0.9)',\n },\n\n '&:disabled': {\n filter: 'grayscale()',\n opacity: 0.5,\n },\n },\n ]}\n {...props}\n >\n {startIcon && <span css={{ marginRight: `calc(var(--spacing) * 2)` }}>{startIcon}</span>}\n <span>{children}</span>\n </button>\n );\n};\n","import type { Id, SingleOrMultiple, 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 locale?: (string | undefined)[],\n options?: (Intl.CollatorOptions | undefined)[],\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 const _locale = locale?.[i];\n const _options = options?.[i];\n\n if (typeof _a === 'string' && typeof _b === 'string') {\n const result = _a.localeCompare(_b, _locale, _options);\n if (result !== 0) return result * _direction;\n continue;\n }\n\n if (_a > _b) return _direction;\n if (_a < _b) return -_direction;\n }\n return 0;\n });\n};\n\nexport const uniq = <T>(array: T[]): T[] => {\n const set = new Set<T>();\n for (const t of array) set.add(t);\n return Array.from(set);\n};\n\nexport const intersect = <T>(a: Iterable<T>, b: { has(t: T): boolean }): Set<T> => {\n const result = new Set<T>();\n for (const x of a) if (b.has(x)) result.add(x);\n return result;\n};\n\nexport const getAncestors = <T>(\n activeItemsById: Map<Id, TableItem<T>>,\n ...items: TableItem<T>[]\n): Set<Id> => {\n const result = new Set<Id>();\n\n const find = ({ parentId }: TableItem<T>): void => {\n const parent =\n parentId !== undefined && parentId !== null ? activeItemsById.get(parentId) : undefined;\n if (parent && !result.has(parent.id)) {\n result.add(parent.id);\n find(parent);\n }\n };\n items.forEach(find);\n return result;\n};\n\nexport const getDescendants = <T>(...items: TableItem<T>[]): Set<Id> => {\n const result = new Set<Id>();\n\n const find = (item: TableItem<T>): void => {\n for (const child of item.children) {\n if (!result.has(child.id)) {\n result.add(child.id);\n find(child);\n }\n }\n };\n items.forEach(find);\n return result;\n};\n\nexport const identity = (x: unknown): any => x;\n\nexport const asString = (x: unknown): string => {\n if (Array.isArray(x)) return x.map(asString).join(', ');\n if (x === null || x === undefined) return '';\n if (x instanceof Object) return JSON.stringify(x);\n return String(x as string | number | bigint | boolean | symbol);\n};\n\nexport const asStringOrArray = (x: unknown): string | string[] => {\n if (Array.isArray(x)) return x.map(asString);\n return asString(x);\n};\n\nexport const asNumber = (x: unknown): number | null => {\n const n = Number(x);\n return Number.isNaN(n) ? null : n;\n};\n\nexport const asNumberOrArray = (x: unknown): number | null | (number | null)[] => {\n if (Array.isArray(x)) return x.map(asNumber);\n return asNumber(x);\n};\n\nexport const defaultEquals = (a: unknown, b: unknown): boolean => a === b;\n\nexport const subStringMatch = (a: string, b: string): boolean =>\n a.toLowerCase().includes(b.toLowerCase());\n\nexport const castArray = <T>(a: T | T[]) => (Array.isArray(a) ? a : [a]);\n\nexport const cx = (\n ...classNames: (string | false | undefined | null | Record<string, boolean>)[]\n) =>\n classNames\n .flatMap((entry) => {\n if (!entry) return [];\n if (typeof entry === 'string') return [entry];\n return Object.entries(entry)\n .filter(([, predicate]) => predicate)\n .map(([className]) => className);\n })\n .join(' ');\n\ntype Falsy = false | 0 | '' | null | undefined;\nexport function isTruthy<T>(x: T): x is Exclude<T, Falsy> {\n return !!x;\n}\n\n/** The single values of a `SingleOrMultiple` value. */\nexport function toSingles<T>(value: SingleOrMultiple<T>): readonly T[] {\n if (Array.isArray(value)) return value;\n if (value instanceof Set) return [...value];\n return [value as T];\n}\n","import createCache, { type EmotionCache } from '@emotion/cache';\n// Aliased to a `use…` name: React Compiler only treats functions named like that as hooks, and\n// would otherwise call it on the first render only.\nimport {\n __unsafe_useEmotionCache as useEmotionCache,\n useTheme as useEmotionTheme,\n} from '@emotion/react';\nimport { serializeStyles, type Interpolation, type SerializedStyles } from '@emotion/serialize';\nimport { insertStyles } from '@emotion/utils';\nimport { useMemo } from 'react';\n\nexport type ClassNameOf = (...styles: Interpolation<any>[]) => string;\n\nconst isServer = typeof document === 'undefined';\n\nconst isSerialized = (x: object): x is SerializedStyles =>\n typeof (x as SerializedStyles).name === 'string' &&\n typeof (x as SerializedStyles).styles === 'string';\n\n/**\n * Turns emotion styles into a class name without re-serializing them on every call: serialized styles\n * are keyed by their hash, objects and functions by identity. Styles are inserted on the client only.\n */\nfunction createClassNameOf(cache: EmotionCache, theme: object | undefined): ClassNameOf {\n const classNames = new Map<string, string>();\n const ids = new WeakMap<object, number>();\n let nextId = 0;\n\n const keyOf = (style: Interpolation<any>): string => {\n if (style === null || style === undefined || typeof style === 'boolean') return '';\n if (typeof style !== 'object' && typeof style !== 'function') {\n return `${typeof style}:${String(style)}`;\n }\n if (typeof style === 'object' && isSerialized(style)) return `s:${style.name}`;\n let id = ids.get(style);\n if (id === undefined) ids.set(style, (id = nextId++));\n return `o:${id}`;\n };\n\n return (...styles) => {\n const key = JSON.stringify(styles.map(keyOf));\n let className = classNames.get(key);\n if (className === undefined) {\n // The theme is what the css prop passes to function interpolations.\n const serialized = serializeStyles(styles, cache.registered, theme);\n if (!isServer) insertStyles(cache, serialized, false);\n className = serialized.styles ? `${cache.key}-${serialized.name}` : '';\n // Function styles returning fresh objects would grow this forever.\n if (classNames.size > 5000) classNames.clear();\n classNames.set(key, className);\n }\n return className;\n };\n}\n\n// Without a CacheProvider, @emotion/react uses a cache keyed `css` in the browser and none on the\n// server; these mirror it so server and client produce the same class names.\nlet standaloneAppCache: EmotionCache | undefined;\nconst getStandaloneAppCache = () => (standaloneAppCache ??= createCache({ key: 'css' }));\n\nconst libraryClassNameOf = new WeakMap<EmotionCache, ClassNameOf>();\n\n/**\n * For the library's own styles. They go into a separate cache that is prepended to the document, so\n * user styles of equal specificity (emotion or plain CSS) always override them. It inherits the app\n * cache's nonce and container.\n */\nexport function useLibraryClassName(): ClassNameOf {\n const appCache = useEmotionCache() ?? getStandaloneAppCache();\n\n return useMemo(() => {\n let classNameOf = libraryClassNameOf.get(appCache);\n if (!classNameOf) {\n // A prepended sheet takes the top spot when it creates its first tag. If the app cache is\n // prepended too (MUI's recommended setup) and hasn't created one yet, it would later land above\n // ours and lose to the library styles, so make it create its tag first.\n if (!isServer && appCache.sheet.tags.length === 0) {\n insertStyles(appCache, serializeStyles(['--schummar-table: 1;']), false);\n }\n\n classNameOf = createClassNameOf(\n createCache({\n key: `${appCache.key}-st`,\n prepend: true,\n nonce: appCache.nonce,\n container: appCache.sheet.container,\n }),\n undefined,\n );\n libraryClassNameOf.set(appCache, classNameOf);\n }\n return classNameOf;\n }, [appCache]);\n}\n\nconst userClassNameOf = new WeakMap<EmotionCache, WeakMap<object, ClassNameOf>>();\n\n/**\n * For user supplied styles, and for library styles that must beat a theme component's own styles:\n * the app's emotion cache, with its theme for function interpolations.\n */\nexport function useUserClassName(): ClassNameOf {\n const appCache = useEmotionCache() ?? getStandaloneAppCache();\n const theme = useEmotionTheme();\n\n return useMemo(() => {\n let byTheme = userClassNameOf.get(appCache);\n if (!byTheme) userClassNameOf.set(appCache, (byTheme = new WeakMap()));\n\n let classNameOf = byTheme.get(theme);\n if (!classNameOf) byTheme.set(theme, (classNameOf = createClassNameOf(appCache, theme)));\n return classNameOf;\n }, [appCache, theme]);\n}\n","import { css } from '@emotion/react';\nimport { cx } from '../../misc/helpers';\nimport type { TableTheme } from '../../types';\nimport { useLibraryClassName } from '../emotion';\n\nconst labelCss = css({\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\nconst disabledCss = css({ color: 'rgba(0, 0, 0, 0.26)' });\n\nconst iconCss = css({ fontSize: '1.25rem', width: '1em', height: '1em', fill: 'currentColor' });\n\nconst checkedIconCss = css({ fill: 'var(--primaryMain)' });\n\nexport const Checkbox: TableTheme['components']['Checkbox'] = ({ className, ...props }) => {\n const libraryClass = useLibraryClassName();\n\n return (\n <label\n className={cx(libraryClass(labelCss), props.disabled && libraryClass(disabledCss), className)}\n >\n <input type=\"checkbox\" {...props} />\n\n {props.checked ? (\n <svg\n className={libraryClass(iconCss, checkedIconCss)}\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 className={libraryClass(iconCss)}\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 { css } from '@emotion/react';\nimport { cx } from '../../misc/helpers';\nimport type { TableTheme } from '../../types';\nimport { useLibraryClassName } from '../emotion';\n\nconst iconButtonCss = 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\nexport const IconButton: TableTheme['components']['IconButton'] = ({ className, ...props }) => {\n const libraryClass = useLibraryClassName();\n return <button className={cx(libraryClass(iconButtonCss), className)} {...props} />;\n};\n","import type { TableTheme } from '../../types';\n\nexport const TextField: TableTheme['components']['TextField'] = ({\n startIcon,\n endIcon,\n className,\n inputRef,\n onBlur,\n ...props\n}) => {\n return (\n <div\n className={className}\n css={[\n {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n border: '1px solid var(--table-textfield-border, var(--table-border, #777777))',\n borderRadius: 4,\n\n '&:focus-within': {\n border: '2px solid var(--primaryMain)',\n margin: -1,\n },\n },\n ]}\n >\n {startIcon}\n\n <input\n ref={inputRef}\n {...props}\n value={props.value ?? ''}\n onBlur={onBlur}\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 { css } from '@emotion/react';\nimport type { HTMLProps, ReactElement } from 'react';\nimport { cloneElement } from 'react';\nimport { cx } from '../../misc/helpers';\nimport type { TableTheme } from '../../types';\nimport { useLibraryClassName } from '../emotion';\n\nconst IconDefaultStyle = css({\n width: '1.5em',\n height: '1.5em',\n color: 'inherit',\n});\n\nfunction Icon(svg: ReactElement<HTMLProps<Element>>) {\n return function IconComponent(props: HTMLProps<Element>) {\n const libraryClass = useLibraryClassName();\n return cloneElement(svg, {\n ...props,\n className: cx(libraryClass(IconDefaultStyle), props.className),\n });\n };\n}\n\nconst Settings = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M3 17v2h6v-2H3zM3 5v2h10V5H3zm10 16v-2h8v-2h-8v-2h-2v6h2zM7 9v2H3v2h4v2h2V9H7zm14 4v-2H11v2h10zm-6-4h2V7h4V5h-4V3h-2v6z\" />\n </svg>,\n);\n\nconst Export = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n enableBackground=\"new 0 0 24 24\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <g>\n <rect fill=\"none\" height=\"24\" width=\"24\" />\n </g>\n <g>\n <path d=\"M18,15v3H6v-3H4v3c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2v-3H18z M17,11l-1.41-1.41L13,12.17V4h-2v8.17L8.41,9.59L7,11l5,5 L17,11z\" />\n </g>\n </svg>,\n);\n\nconst Clipboard = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M19 2h-4.18C14.4.84 13.3 0 12 0S9.6.84 9.18 2H5c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm7 18H5V4h2v3h10V4h2v16z\" />\n </svg>,\n);\n\nconst ChevronRight = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6-6-6z\" />\n </svg>,\n);\n\nconst Search = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\" />\n </svg>,\n);\n\nconst Clear = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z\" />\n </svg>,\n);\n\nconst ArrowDropDown = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M7 10l5 5 5-5H7z\" />\n </svg>,\n);\n\nconst FilterList = Icon(\n <svg viewBox=\"0 0 24 24\">\n <path\n fill=\"currentColor\"\n d=\"M14,12V19.88C14.04,20.18 13.94,20.5 13.71,20.71C13.32,21.1 12.69,21.1 12.3,20.71L10.29,18.7C10.06,18.47 9.96,18.16 10,17.87V12H9.97L4.21,4.62C3.87,4.19 3.95,3.56 4.38,3.22C4.57,3.08 4.78,3 5,3V3H19V3C19.22,3 19.43,3.08 19.62,3.22C20.05,3.56 20.13,4.19 19.79,4.62L14.03,12H14Z\"\n />\n </svg>,\n);\n\nconst ArrowUpward = Icon(\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"currentColor\"\n >\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n <path d=\"M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z\" />\n </svg>,\n);\n\nexport const defaultIcons: TableTheme['icons'] = {\n Settings,\n Export,\n Clipboard,\n ChevronRight,\n Search,\n Clear,\n ArrowDropDown,\n FilterList,\n ArrowUpward,\n};\n","import type { TableTheme } from '../../types';\n\nexport const defaultTexts: TableTheme['text'] = {\n selectColumns: 'Select visible columns',\n showAllColumns: 'Show all',\n hideAllColumns: 'Hide all',\n noResults: 'No results',\n exportTitle: 'Export',\n exportCopy: 'To clipboard',\n exportDownload: 'Download',\n today: 'Today',\n thisWeek: 'This week',\n thisMonth: 'This month',\n thisYear: 'This year',\n lastSevenDays: 'Last 7 days',\n lastThirtyDays: 'Last 30 days',\n clearFilters: 'Clear all filters',\n reset: 'Reset',\n loading: 'Loading',\n deselectAll: 'Deselect all',\n resetAll: 'Reset table state',\n rangeMin: 'Min',\n rangeMax: 'Max',\n calendarWeek: 'Wk',\n hiddenColumnFilters: 'Filters of hidden columns',\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 { createContext, useContext, useMemo } from 'react';\nimport { TableSettingsContext } from '../misc/tableSettings';\nimport { defaultTableTheme } from '../theme/defaultTheme';\nimport { mergeThemes } from '../theme/tableTheme';\nimport type { InternalColumn, PartialTableTheme, TableTheme } from '../types';\n\nexport const ThemeContext = createContext<TableTheme<any> | null>(null);\n\n/** default < TableSettingsProvider < table props, merged once per change instead of per consumer. */\nexport function useTableTheme<T>(props: PartialTableTheme<T>): TableTheme<T> {\n const { theme: contextTheme } = useContext(TableSettingsContext);\n const { text, classes, styles, components, icons, colors, spacing } = props;\n\n return useMemo(\n () =>\n mergeThemes<T>(defaultTableTheme as TableTheme<T>, contextTheme as PartialTableTheme<T>, {\n text,\n classes,\n styles,\n components,\n icons,\n colors,\n spacing,\n }) as TableTheme<T>,\n [contextTheme, text, classes, styles, components, icons, colors, spacing],\n );\n}\n\nexport function useTheme<T, S>(selector: (theme: TableTheme<T>) => S): S {\n const tableTheme = useContext(ThemeContext);\n const { theme: contextTheme } = useContext(TableSettingsContext);\n const fallback = useMemo(\n () =>\n tableTheme\n ? undefined\n : (mergeThemes(defaultTableTheme, contextTheme) as TableTheme<unknown>),\n [tableTheme, contextTheme],\n );\n\n return selector((tableTheme ?? fallback) as TableTheme<T>);\n}\n\n/** The theme with a column's own classes and styles layered on top. */\nexport function columnTheme<T>(\n theme: TableTheme<T>,\n column: Pick<InternalColumn<T, unknown>, 'classes' | 'styles'> | undefined,\n): TableTheme<T> {\n if (!column?.classes && !column?.styles) return theme;\n return {\n ...theme,\n classes: { ...theme.classes, ...column.classes },\n styles: { ...theme.styles, ...column.styles },\n };\n}\n","import type { ComponentType } from 'react';\nimport { useLayoutEffect, useRef } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport type { TableTheme } from '../types';\n\ntype Props = TableTheme['components']['TextField'] extends ComponentType<infer T> ? T : never;\n\nexport function AutoFocusTextField(props: Omit<Props, 'inputRef'>) {\n const TextField = useTheme((t) => t.components.TextField);\n\n const ref = useRef<HTMLInputElement>(null);\n // Filters mount when their popover opens. The popover positions itself first.\n useLayoutEffect(() => {\n const timeout = setTimeout(() => ref.current?.focus());\n return () => clearTimeout(timeout);\n }, []);\n\n return (\n <TextField\n {...props}\n inputRef={ref}\n css={{\n input: {\n backgroundColor: 'inherit',\n color: 'inherit',\n },\n }}\n />\n );\n}\n","export function defaults<T extends object>(first: T, ...more: Partial<T>[]): T {\n return more.reduce<T>((acc, source) => {\n const copy = { ...acc };\n\n for (const [key, value] of Object.entries(source)) {\n copy[key as keyof T] ??= value as any;\n }\n\n return copy;\n }, first);\n}\n","import { useTheme } from '../hooks/useTheme';\n\nexport function useCssVariables() {\n return useTheme(({ spacing, colors }) => {\n return {\n '--spacing': spacing,\n '--primaryMain': colors.primary.main,\n '--primaryLight': colors.primary.light,\n '--primaryContrastText': colors.primary.contrastText,\n '--secondaryMain': colors.secondary.main,\n '--secondaryLight': colors.secondary.light,\n '--secondaryContrastText': colors.secondary.contrastText,\n '--blockedMain': colors.blocked.main,\n '--blockedLight': colors.blocked.light,\n '--blockedContrastText': colors.blocked.contrastText,\n '--table-background-color': colors.background,\n '--table-text-color': colors.text,\n '--table-border-color': colors.border,\n '--table-border-light-color': colors.borderLight,\n };\n });\n}\n","import { addDays, isBefore, isToday, startOfDay, differenceInCalendarMonths } from 'date-fns';\nimport { SyntheticEvent } from 'react';\n\nexport type DayzedDateObject = {\n date: Date;\n nextMonth: boolean;\n prevMonth: boolean;\n selectable: boolean;\n selected: boolean;\n today: boolean;\n};\n\nexport type DayzedCalendar = {\n firstDayOfMonth: Date;\n lastDayOfMonth: Date;\n month: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11;\n weeks: Array<Array<DayzedDateObject | ''>>;\n year: number;\n};\n\n/**\n * This is intended to be used to compose event handlers\n * They are executed in order until one of them calls\n * `event.preventDefault()`. Not sure this is the best\n * way to do this, but it seems legit...\n * @param {Function} fns the event hanlder functions\n * @return {Function} the event handler to add to an element\n */\nexport function composeEventHandlers(\n ...fns: (((event: SyntheticEvent, ...args: any[]) => any) | undefined)[]\n) {\n return (event: SyntheticEvent, ...args: any[]) =>\n fns.some((fn) => {\n if (fn) {\n fn(event, ...args);\n }\n return event.defaultPrevented;\n });\n}\n\n/**\n * Throws a helpful error message for required properties. Useful\n * to be used as a default in destructuring or object params.\n * @param {String} fnName the function name\n * @param {String} propName the prop name\n */\nexport function requiredProp(fnName: string, propName: string): never {\n throw new Error(`The property \"${propName}\" is required in \"${fnName}\"`);\n}\n\n/**\n * Takes a calendars array and figures out the number of months to subtract\n * based on the current offset and the minDate allowed.\n * @param {Object} param The param object\n * @param {Array} param.calendars The calendars array created by the getCalendars function\n * @param {Number} param.offset The num of months to be subtracted\n * @param {Date} param.minDate The earliest date we are allow to subtract back to\n * @returns {Number} The number of months to subtract\n */\nexport function subtractMonth({\n calendars,\n offset,\n minDate,\n}: {\n calendars: DayzedCalendar[];\n offset: number;\n minDate?: Date;\n}) {\n if (offset > 1 && minDate) {\n const { firstDayOfMonth } = calendars[0]!;\n const diffInMonths = differenceInCalendarMonths(firstDayOfMonth, minDate);\n if (diffInMonths < offset) {\n offset = diffInMonths;\n }\n }\n return offset;\n}\n\n/**\n * Takes a calendars array and figures out the number of months to add\n * based on the current offset and the maxDate allowed.\n * @param {Object} param The param object\n * @param {Array} param.calendars The calendars array created by the getCalendars function\n * @param {Number} param.offset The num of months to be added\n * @param {Date} param.maxDate The furthest date we are allow to add forward to\n * @returns {Number} The number of months to add\n */\nexport function addMonth({\n calendars,\n offset,\n maxDate,\n}: {\n calendars: DayzedCalendar[];\n offset: number;\n maxDate?: Date;\n}) {\n if (offset > 1 && maxDate) {\n const { lastDayOfMonth } = calendars[calendars.length - 1]!;\n const diffInMonths = differenceInCalendarMonths(maxDate, lastDayOfMonth);\n if (diffInMonths < offset) {\n offset = diffInMonths;\n }\n }\n return offset;\n}\n\n/**\n * Takes a calendars array and figures out if the back button should be\n * disabled based on the minDate allowed.\n * @param {Object} param The param object\n * @param {Array} param.calendars The calendars array created by the getCalendars function\n * @param {Date} param.minDate The earliest date available\n * @returns {Boolean} Whether the back button should be disabled.\n */\nexport function isBackDisabled({\n calendars,\n minDate,\n}: {\n calendars: DayzedCalendar[];\n minDate?: Date;\n}) {\n if (!minDate) {\n return false;\n }\n const { firstDayOfMonth } = calendars[0]!;\n const firstDayOfMonthMinusOne = addDays(firstDayOfMonth, -1);\n if (isBefore(firstDayOfMonthMinusOne, minDate)) {\n return true;\n }\n return false;\n}\n\n/**\n * Takes a calendars array and figures out if the forward button should be\n * disabled based on the maxDate allowed.\n * @param {Object} param The param object\n * @param {Array} param.calendars The calendars array created by the getCalendars function\n * @param {Date} param.maxDate The furthest date available\n * @returns {Boolean} Whether the forward button should be disabled.\n */\nexport function isForwardDisabled({\n calendars,\n maxDate,\n}: {\n calendars: DayzedCalendar[];\n maxDate?: Date;\n}) {\n if (!maxDate) {\n return false;\n }\n const { lastDayOfMonth } = calendars[calendars.length - 1]!;\n const lastDayOfMonthPlusOne = addDays(lastDayOfMonth, 1);\n if (isBefore(maxDate, lastDayOfMonthPlusOne)) {\n return true;\n }\n return false;\n}\n\n/**\n * Figures out the months data needed based off the number of monthsToDisplay\n * and other options provided.\n * @param {Object} param The param object\n * @param {Date} param.date The date to start the calendar at\n * @param {Array.<Date>} param.selected An array of dates currently selected\n * @param {Number} param.monthsToDisplay The number of months to return in the calendar view\n * @param {Number} param.offset The number of months to offset based off the param.date given\n * @param {Date} param.minDate The earliest date available\n * @param {Date} param.maxDate The furthest date available\n * @param {Number} param.firstDayOfWeek First day of week, 0-6 (Sunday to Saturday)\n * @param {Bool} param.showOutsideDays Flag to fill front and back weeks with dates from adjacent months\n * @returns {Array.<Object>} An array of objects with month data\n */\nexport function getCalendars({\n date,\n selected,\n monthsToDisplay,\n offset,\n minDate,\n maxDate,\n firstDayOfWeek,\n showOutsideDays,\n}: {\n date: Date;\n selected: Date[];\n monthsToDisplay: number;\n offset: number;\n minDate?: Date;\n maxDate?: Date;\n firstDayOfWeek: number;\n showOutsideDays: boolean;\n}): DayzedCalendar[] {\n const months: DayzedCalendar[] = [];\n const startDate = getStartDate(date, minDate, maxDate);\n for (let i = 0; i < monthsToDisplay; i++) {\n const calendarDates = getMonths({\n month: startDate.getMonth() + i + offset,\n year: startDate.getFullYear(),\n selectedDates: selected,\n minDate,\n maxDate,\n firstDayOfWeek,\n showOutsideDays,\n });\n months.push(calendarDates);\n }\n return months;\n}\n\n/**\n * Figures out the actual start date based on\n * the min and max dates available.\n * @param {Date} date The we want to start the calendar at\n * @param {Date} minDate The earliest date available to start at\n * @param {Date} maxDate The latest date available to start at\n * @returns {Date} The actual start date\n */\nfunction getStartDate(date: Date, minDate?: Date, maxDate?: Date): Date {\n let startDate = startOfDay(date);\n if (minDate) {\n const minDateNormalized = startOfDay(minDate);\n if (isBefore(startDate, minDateNormalized)) {\n startDate = minDateNormalized;\n }\n }\n if (maxDate) {\n const maxDateNormalized = startOfDay(maxDate);\n if (isBefore(maxDateNormalized, startDate)) {\n startDate = maxDateNormalized;\n }\n }\n return startDate;\n}\n\n/**\n * Figures what week/day data to return for the given month\n * and year. Adds flags to day data if found in the given selectedDates,\n * if is selectable inside the given min and max dates, or is today.\n * @param {Object} param The param object\n * @param {Number} param.month The month to grab data for\n * @param {Number} param.year The year to grab data for\n * @param {Array.<Date>} param.selectedDates An array of dates currently selected\n * @param {Date} param.minDate The earliest date available\n * @param {Date} param.maxDate The furthest date available\n * @param {Number} param.firstDayOfWeek First day of week, 0-6 (Sunday to Saturday)\n * @param {Bool} param.showOutsideDays Flag to fill front and back weeks with dates from adjacent months\n * @returns {Object} The data for the selected month/year\n */\nfunction getMonths({\n month,\n year,\n selectedDates,\n minDate,\n maxDate,\n firstDayOfWeek,\n showOutsideDays,\n}: {\n month: number;\n year: number;\n selectedDates: Date[];\n minDate?: Date;\n maxDate?: Date;\n firstDayOfWeek: number;\n showOutsideDays: boolean;\n}): DayzedCalendar {\n // Get the normalized month and year, along with days in the month.\n const daysMonthYear = getNumDaysMonthYear(month, year);\n const daysInMonth = daysMonthYear.daysInMonth;\n month = daysMonthYear.month;\n year = daysMonthYear.year;\n\n // Fill out the dates for the month.\n const dates: ('' | DayzedDateObject)[] = [];\n for (let day = 1; day <= daysInMonth; day++) {\n const date = new Date(year, month, day);\n const dateObj = {\n date,\n selected: isSelected(selectedDates, date),\n selectable: isSelectable(minDate, maxDate, date),\n today: isToday(date),\n prevMonth: false,\n nextMonth: false,\n };\n dates.push(dateObj);\n }\n\n const firstDayOfMonth = new Date(year, month, 1);\n const lastDayOfMonth = new Date(year, month, daysInMonth);\n\n const frontWeekBuffer = fillFrontWeek({\n firstDayOfMonth,\n minDate,\n maxDate,\n selectedDates,\n firstDayOfWeek,\n showOutsideDays,\n });\n\n const backWeekBuffer = fillBackWeek({\n lastDayOfMonth,\n minDate,\n maxDate,\n selectedDates,\n firstDayOfWeek,\n showOutsideDays,\n });\n\n dates.unshift(...frontWeekBuffer);\n dates.push(...backWeekBuffer);\n\n // Get the filled out weeks for the\n // given dates.\n const weeks = getWeeks(dates);\n // return the calendar data.\n return {\n firstDayOfMonth,\n lastDayOfMonth,\n month: month as DayzedCalendar['month'],\n year,\n weeks,\n };\n}\n\n/**\n * Fill front week with either empty buffer or dates from previous month,\n * depending on showOutsideDays flag\n * @param {Object} param The param object\n * @param {Array.<Date>} param.selectedDates An array of dates currently selected\n * @param {Date} param.minDate The earliest date available\n * @param {Date} param.maxDate The furthest date available\n * @param {Date} param.firstDayOfMonth First day of the month\n * @param {Number} param.firstDayOfWeek First day of week, 0-6 (Sunday to Saturday)\n * @param {Bool} param.showOutsideDays Flag to fill front and back weeks with dates from adjacent months\n * @returns {Array.<Date>} Buffer to fill front week\n */\nfunction fillFrontWeek({\n firstDayOfMonth,\n minDate,\n maxDate,\n selectedDates,\n firstDayOfWeek,\n showOutsideDays,\n}: {\n firstDayOfMonth: Date;\n minDate?: Date;\n maxDate?: Date;\n selectedDates: Date[];\n firstDayOfWeek: number;\n showOutsideDays: boolean;\n}) {\n const dates: ('' | DayzedDateObject)[] = [];\n let firstDay = (firstDayOfMonth.getDay() + 7 - firstDayOfWeek) % 7;\n\n if (showOutsideDays) {\n const lastDayOfPrevMonth = addDays(firstDayOfMonth, -1);\n const prevDate = lastDayOfPrevMonth.getDate();\n const prevDateMonth = lastDayOfPrevMonth.getMonth();\n const prevDateYear = lastDayOfPrevMonth.getFullYear();\n\n // Fill out front week for days from\n // preceding month with dates from previous month.\n let counter = 0;\n while (counter < firstDay) {\n const date = new Date(prevDateYear, prevDateMonth, prevDate - counter);\n const dateObj = {\n date,\n selected: isSelected(selectedDates, date),\n selectable: isSelectable(minDate, maxDate, date),\n today: false,\n prevMonth: true,\n nextMonth: false,\n };\n dates.unshift(dateObj);\n counter++;\n }\n } else {\n // Fill out front week for days from\n // preceding month with buffer.\n while (firstDay > 0) {\n dates.unshift('');\n firstDay--;\n }\n }\n\n return dates;\n}\n\n/**\n * Fill back weeks with either empty buffer or dates from next month,\n * depending on showOutsideDays flag\n * @param {Object} param The param object\n * @param {Array.<Date>} param.selectedDates An array of dates currently selected\n * @param {Date} param.minDate The earliest date available\n * @param {Date} param.maxDate The furthest date available\n * @param {Date} param.lastDayOfMonth Last day of the month\n * @param {Number} param.firstDayOfWeek First day of week, 0-6 (Sunday to Saturday)\n * @param {Bool} param.showOutsideDays Flag to fill front and back weeks with dates from adjacent months\n * @returns {Array.<Date>} Buffer to fill back week\n */\nfunction fillBackWeek({\n lastDayOfMonth,\n minDate,\n maxDate,\n selectedDates,\n firstDayOfWeek,\n showOutsideDays,\n}: {\n lastDayOfMonth: Date;\n minDate?: Date;\n maxDate?: Date;\n selectedDates: Date[];\n firstDayOfWeek: number;\n showOutsideDays: boolean;\n}) {\n const dates: ('' | DayzedDateObject)[] = [];\n let lastDay = (lastDayOfMonth.getDay() + 7 - firstDayOfWeek) % 7;\n\n if (showOutsideDays) {\n const firstDayOfNextMonth = addDays(lastDayOfMonth, 1);\n const nextDateMonth = firstDayOfNextMonth.getMonth();\n const nextDateYear = firstDayOfNextMonth.getFullYear();\n\n // Fill out back week for days from\n // following month with dates from next month.\n let counter = 0;\n while (counter < 6 - lastDay) {\n const date = new Date(nextDateYear, nextDateMonth, 1 + counter);\n const dateObj = {\n date,\n selected: isSelected(selectedDates, date),\n selectable: isSelectable(minDate, maxDate, date),\n today: false,\n prevMonth: false,\n nextMonth: true,\n };\n dates.push(dateObj);\n counter++;\n }\n } else {\n // Fill out back week for days from\n // following month with buffer.\n while (lastDay < 6) {\n dates.push('');\n lastDay++;\n }\n }\n\n return dates;\n}\n\n/**\n * Normalizes month (could be overflow) and year pairs and returns the\n * normalized month and year along with the number of days in the month.\n * @param {Number} month The month to normalize\n * @param {Number} year The year to normalize\n * @returns {Object} The normalized month and year along with the number of days in the month\n */\nfunction getNumDaysMonthYear(month: number, year: number) {\n // If a parameter you specify is outside of the expected range for Month or Day,\n // JS Date attempts to update the date information in the Date object accordingly!\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMonth\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setDate\n\n // Let Date handle the overflow of the month,\n // which should return the normalized month and year.\n const normalizedMonthYear = new Date(year, month, 1);\n month = normalizedMonthYear.getMonth();\n year = normalizedMonthYear.getFullYear();\n // Overflow the date to the next month, then subtract the difference\n // to get the number of days in the previous month.\n // This will also account for leap years!\n const daysInMonth = 32 - new Date(year, month, 32).getDate();\n return { daysInMonth, month, year };\n}\n\n/**\n * Takes an array of dates, and turns them into a multi dimensional\n * array with 7 entries for each week.\n * @param {Array.<Object>} dates An array of dates\n * @returns {Array} The weeks as a multi dimensional array\n */\nfunction getWeeks(dates: ('' | DayzedDateObject)[]) {\n const weeksLength = Math.ceil(dates.length / 7);\n const weeks: ('' | DayzedDateObject)[][] = [];\n for (let i = 0; i < weeksLength; i++) {\n weeks[i] = [];\n for (let x = 0; x < 7; x++) {\n weeks[i]!.push(dates[i * 7 + x]!);\n }\n }\n return weeks;\n}\n\n/**\n * Normalizes dates to the beginning of the day,\n * then checks to see if the day given is found\n * in the selectedDates.\n * @param {Array.<Date>} selectedDates An array of dates currently selected\n * @param {Date} date The date to search with against selectedDates\n * @returns {Boolean} Whether day is found in selectedDates\n */\nfunction isSelected(selectedDates: Date[], date: Date): boolean {\n selectedDates = Array.isArray(selectedDates) ? selectedDates : [selectedDates];\n return selectedDates.some((selectedDate) => {\n if (\n selectedDate instanceof Date &&\n startOfDay(selectedDate).getTime() === startOfDay(date).getTime()\n ) {\n return true;\n }\n return false;\n });\n}\n\n/**\n * Checks to see if the date given is\n * between the min and max dates.\n * @param {Date} minDate The earliest date available\n * @param {Date} maxDate The furthest date available\n * @param {Date} date The date to compare with\n * @returns {Boolean} Whether the date is between min and max date\n */\nfunction isSelectable(minDate: Date | undefined, maxDate: Date | undefined, date: Date): boolean {\n if ((minDate && isBefore(date, minDate)) || (maxDate && isBefore(maxDate, date))) {\n return false;\n }\n return true;\n}\n","import { HTMLProps, SyntheticEvent, useState } from 'react';\n\nimport {\n composeEventHandlers,\n requiredProp,\n subtractMonth,\n addMonth,\n isBackDisabled,\n isForwardDisabled,\n getCalendars,\n type DayzedDateObject,\n type DayzedCalendar,\n} from './utils';\n\nfunction isOffsetControlled(propOffset: number | undefined) {\n return propOffset !== undefined;\n}\n\nfunction getOffset(prop: number | undefined, state: number) {\n return isOffsetControlled(prop) ? prop : state;\n}\n\nfunction getDateProps(\n onDateSelected: ((date: DayzedDateObject, event: SyntheticEvent) => void) | undefined,\n {\n onClick,\n dateObj = requiredProp('getDateProps', 'dateObj'),\n ...rest\n }: Partial<GetDatePropsOptions> = {},\n) {\n return {\n onClick: composeEventHandlers(onClick as any, (event) => {\n onDateSelected?.(dateObj, event);\n }),\n disabled: !dateObj.selectable,\n 'aria-label': dateObj.date.toDateString(),\n 'aria-pressed': dateObj.selected,\n role: 'button',\n ...rest,\n };\n}\n\nfunction getBackProps(\n {\n minDate,\n offsetMonth,\n handleOffsetChanged,\n }: {\n minDate?: Date;\n offsetMonth: number;\n handleOffsetChanged: (offset: number) => void;\n },\n {\n onClick,\n offset = 1,\n calendars = requiredProp('getBackProps', 'calendars'),\n ...rest\n }: Partial<GetBackForwardPropsOptions> = {},\n) {\n return {\n onClick: composeEventHandlers(onClick as any, () => {\n handleOffsetChanged(offsetMonth - subtractMonth({ calendars, offset, minDate }));\n }),\n disabled: isBackDisabled({ calendars, minDate }),\n 'aria-label': `Go back ${offset} month${offset === 1 ? '' : 's'}`,\n ...rest,\n };\n}\n\nfunction getForwardProps(\n {\n maxDate,\n offsetMonth,\n handleOffsetChanged,\n }: {\n maxDate?: Date;\n offsetMonth: number;\n handleOffsetChanged: (offset: number) => void;\n },\n {\n onClick,\n offset = 1,\n calendars = requiredProp('getForwardProps', 'calendars'),\n ...rest\n }: Partial<GetBackForwardPropsOptions> = {},\n) {\n return {\n onClick: composeEventHandlers(onClick as any, () => {\n handleOffsetChanged(offsetMonth + addMonth({ calendars, offset, maxDate }));\n }),\n disabled: isForwardDisabled({ calendars, maxDate }),\n 'aria-label': `Go forward ${offset} month${offset === 1 ? '' : 's'}`,\n ...rest,\n };\n}\n\nexport function useDayzed({\n date = new Date(),\n maxDate,\n minDate,\n monthsToDisplay = 1,\n firstDayOfWeek = 0,\n showOutsideDays = false,\n offset,\n onDateSelected,\n onOffsetChanged = () => {},\n selected,\n}: {\n date?: Date;\n maxDate?: Date;\n minDate?: Date;\n monthsToDisplay?: number;\n firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n showOutsideDays?: boolean;\n selected?: Date | Date[];\n offset?: number;\n onOffsetChanged?(offset: number): void;\n onDateSelected(selectedDate: DayzedDateObject, event: SyntheticEvent): void;\n}): RenderProps {\n const [stateOffset, setStateOffset] = useState(0);\n const offsetMonth = getOffset(offset, stateOffset);\n\n function handleOffsetChanged(newOffset: number) {\n if (!isOffsetControlled(offset)) {\n setStateOffset(newOffset);\n }\n onOffsetChanged(newOffset);\n }\n\n const calendars = getCalendars({\n date,\n selected: Array.isArray(selected) ? selected : selected ? [selected] : [],\n monthsToDisplay,\n minDate,\n maxDate,\n offset: offsetMonth,\n firstDayOfWeek,\n showOutsideDays,\n });\n return {\n calendars,\n getDateProps: getDateProps.bind(null, onDateSelected),\n getBackProps: getBackProps.bind(null, {\n minDate,\n offsetMonth,\n handleOffsetChanged,\n }),\n getForwardProps: getForwardProps.bind(null, {\n maxDate,\n offsetMonth,\n handleOffsetChanged,\n }),\n };\n}\n\ninterface GetBackForwardPropsOptions extends HTMLProps<HTMLButtonElement> {\n calendars: DayzedCalendar[];\n offset?: number;\n}\n\ninterface GetDatePropsOptions extends HTMLProps<HTMLButtonElement> {\n dateObj: DayzedDateObject;\n}\n\ninterface RenderProps {\n calendars: DayzedCalendar[];\n getBackProps: (data: GetBackForwardPropsOptions) => Record<string, any>;\n getForwardProps: (data: GetBackForwardPropsOptions) => Record<string, any>;\n getDateProps: (data: GetDatePropsOptions) => Record<string, any>;\n}\n\nexport type { DayzedDateObject } from './utils';\n","import { useEffect, useRef } from 'react';\n\nexport default function useLatestRef<T>(value: T) {\n const latestValue = useRef(value);\n\n useEffect(() => {\n latestValue.current = value;\n }, [value]);\n\n return latestValue;\n}\n","export function debounce<Args extends any[]>(\n function_: (...args: Args) => void,\n ms: number,\n): { (...args: Args): void; flush(): void; cancel(): 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 cancel() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n lastArgs = undefined;\n }\n },\n },\n );\n}\n","import { Fragment, useId, useMemo, useState } from 'react';\nimport useLatestRef from '../hooks/useLatestRef';\nimport { debounce } from '../misc/debounce';\n\nexport interface DateInputProps {\n value: Date | null;\n onChange: (date: Date | null) => void;\n locale?: string;\n}\n\ntype Part = 'day' | 'month' | 'year';\n\nconst className = 'schummar-table-date-input';\nconst defaultDate = new Date(1970, 0, 1);\n\nconst isIncludedType = (type: Intl.DateTimeFormatPartTypes): type is Part =>\n type === 'day' || type === 'month' || type === 'year';\n\nconst maxValues = {\n day: 31,\n month: 12,\n year: 9999,\n};\n\nconst tabNext = (event: Element, id: string) => {\n const all = Array.from(document.querySelectorAll(`.${className}-${id}`));\n const index = all.indexOf(event);\n const next = all[index + 1];\n\n if (next instanceof HTMLElement) {\n next.focus();\n }\n};\n\nfunction buildDate(value: Partial<Record<Part, string>>, baseDate = new Date()): Date {\n const date = new Date(baseDate);\n\n if (value.year) {\n date.setFullYear(Number(value.year));\n }\n\n if (value.month) {\n date.setMonth(Number(value.month) - 1);\n }\n\n if (value.day) {\n date.setDate(Number(value.day));\n }\n\n return date;\n}\n\nexport function DateInput({ value, onChange, locale }: DateInputProps) {\n const id = useId();\n const [localValue, setLocalValue] = useState<Partial<Record<Part, string>>>();\n const latestValue = useLatestRef(value);\n\n const commit = useMemo(\n () =>\n debounce(\n (\n localValue: Partial<Record<Part, string>> = {},\n value: Date | null,\n onChange: (date: Date | null) => void,\n ) => {\n if (value !== latestValue.current) {\n // Value has been changed from outside, don't override it.\n return;\n }\n\n const date = buildDate(localValue, value ?? undefined);\n setLocalValue(undefined);\n onChange(isNaN(date.getTime()) ? null : date);\n },\n 100,\n ),\n [],\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\n let parts;\n try {\n parts = format.formatToParts(value ?? defaultDate);\n } catch {\n parts = format.formatToParts(defaultDate);\n }\n\n const isEmpty = !value;\n\n return (\n <div\n css={{\n display: 'flex',\n alignItems: 'baseline',\n }}\n >\n {parts.map(({ type, value: partValue }, index) => (\n <Fragment key={index}>\n {isIncludedType(type) ? (\n <input\n className={`${className}-${id}`}\n css={{\n boxSizing: 'content-box',\n overflow: 'visible',\n border: 'none',\n borderBottom: '2px solid transparent',\n outline: 'none',\n fontSize: 'inherit',\n backgroundColor: 'inherit',\n color: 'inherit',\n\n '::placeholder': {\n color: 'inherit',\n opacity: 0.5,\n },\n\n '&:focus': {\n borderBottom: '2px solid var(--primaryMain)',\n },\n }}\n style={{\n width: `${String(maxValues[type]).length}ch`,\n }}\n placeholder={''.padEnd(String(maxValues[type]).length, '0')}\n value={localValue?.[type] ?? (isEmpty ? '' : partValue)}\n onChange={(event) => {\n const input = event.target.value;\n if (!/^\\d*$/.test(input)) return;\n\n const newValue = { ...localValue, [type]: input };\n\n if (Number(input) > maxValues[type]) {\n newValue[type] = String(maxValues[type]);\n }\n\n setLocalValue(newValue);\n\n if (input.length >= String(maxValues[type]).length) {\n setTimeout(() => tabNext(event.target, id));\n }\n }}\n onFocus={(event) => {\n commit.cancel();\n event.target.select();\n }}\n onBlur={() => {\n commit(localValue, value, onChange);\n }}\n />\n ) : type === 'literal' ? (\n <span>{partValue}</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 { Fragment, useId, useMemo, useState } from 'react';\nimport { debounce } from '../misc/debounce';\nimport useLatestRef from '../hooks/useLatestRef';\n\nexport interface TimeInputProps {\n value: Date | null;\n onChange: (date: Date | null) => void;\n locale?: string;\n showSeconds?: boolean;\n}\n\ntype Part = 'hour' | 'minute' | 'second';\n\nconst className = 'schummar-table-time-input';\nconst defaultDate = new Date(1970, 0, 1);\n\nconst isIncludedType = (type: Intl.DateTimeFormatPartTypes): type is Part =>\n type === 'hour' || type === 'minute' || type === 'second';\n\nconst maxValues = {\n hour: 23,\n minute: 59,\n second: 59,\n};\n\nconst tabNext = (event: Element, id: string) => {\n const all = Array.from(document.querySelectorAll(`.${className}-${id}`));\n const index = all.indexOf(event);\n const next = all[index + 1];\n\n if (next instanceof HTMLElement) {\n next.focus();\n }\n};\n\nfunction buildTime(value: Partial<Record<Part, string>>, baseDate = new Date()): Date {\n const date = new Date(baseDate);\n\n if (value.hour) {\n date.setHours(Number(value.hour));\n }\n\n if (value.minute) {\n date.setMinutes(Number(value.minute));\n }\n\n if (value.second) {\n date.setSeconds(Number(value.second));\n }\n\n return date;\n}\n\nexport function TimeInput({ value, onChange, locale, showSeconds = true }: TimeInputProps) {\n const id = useId();\n const [localValue, setLocalValue] = useState<Partial<Record<Part, string>>>();\n const latestValue = useLatestRef(value);\n\n const commit = useMemo(\n () =>\n debounce(\n (\n localValue: Partial<Record<Part, string>> = {},\n value: Date | null,\n onChange: (date: Date | null) => void,\n ) => {\n if (value !== latestValue.current) {\n // Value has been changed from outside, don't override it.\n return;\n }\n\n const date = buildTime(localValue, value ?? undefined);\n setLocalValue(undefined);\n onChange(isNaN(date.getTime()) ? null : date);\n },\n 100,\n ),\n [],\n );\n\n const format = useMemo(\n () =>\n new Intl.DateTimeFormat(locale, {\n hour: '2-digit',\n minute: '2-digit',\n second: showSeconds ? '2-digit' : undefined,\n }),\n [locale],\n );\n\n let parts;\n try {\n parts = format.formatToParts(value ?? defaultDate);\n } catch {\n parts = format.formatToParts(defaultDate);\n }\n\n const isEmpty = !value;\n\n return (\n <div\n css={{\n display: 'flex',\n alignItems: 'baseline',\n }}\n >\n {parts.map(({ type, value: partValue }, index) => (\n <Fragment key={index}>\n {isIncludedType(type) ? (\n <input\n className={`${className}-${id}`}\n css={{\n boxSizing: 'content-box',\n overflow: 'visible',\n border: 'none',\n borderBottom: '2px solid transparent',\n outline: 'none',\n fontSize: 'inherit',\n backgroundColor: 'inherit',\n color: 'inherit',\n\n '::placeholder': {\n color: 'inherit',\n opacity: 0.5,\n },\n\n '&:focus': {\n borderBottom: '2px solid var(--primaryMain)',\n },\n }}\n style={{\n width: `${String(maxValues[type]).length}ch`,\n }}\n placeholder={''.padEnd(String(maxValues[type]).length, '0')}\n value={localValue?.[type] ?? (isEmpty ? '' : partValue)}\n onChange={(event) => {\n const input = event.target.value;\n if (!/^\\d*$/.test(input)) return;\n\n const newValue = { ...localValue, [type]: input };\n\n if (Number(input) > maxValues[type]) {\n newValue[type] = String(maxValues[type]);\n }\n\n setLocalValue(newValue);\n\n if (input.length >= String(maxValues[type]).length) {\n setTimeout(() => tabNext(event.target, id));\n }\n }}\n onFocus={(event) => {\n commit.cancel();\n event.target.select();\n }}\n onBlur={() => {\n commit(localValue, value, onChange);\n }}\n />\n ) : type === 'literal' ? (\n <span>{partValue}</span>\n ) : null}\n </Fragment>\n ))}\n </div>\n );\n}\n","import { Interpolation, Theme } from '@emotion/react';\nimport {\n Fragment,\n ReactNode,\n createContext,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport { Temporal } from 'temporal-polyfill';\nimport { useTheme } from '../hooks/useTheme';\nimport { defaults } from '../misc/defaults';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport { useDayzed, type DayzedDateObject } from '../vendor/dayzed/dayzed';\nimport { DateInput } from './dateInput';\nimport { Text } from './text';\nimport { TimeInput } from './timeInput';\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 DatePickerChangeSource = 'input' | 'calendarWeek' | 'calendar' | 'quickOption';\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, source: DatePickerChangeSource) => void;\n /** Currently visible date. */\n dateInView?: Date;\n /** Callback for when the currently visible date changes. */\n onDateInViewChange?: (value: Date) => void;\n /** If enabled, ranges can be selected. */\n rangeSelect?: boolean;\n /** Which locale to use to render the calendar. */\n locale?: string;\n /** Which day of the week should be in the first column. (0=Sunday, 1=Monday, ...)\n * @default 1\n */\n firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n /** Which month to show initially */\n defaultDateInView?: Date;\n /** Show buttons to quickly select suggested dates or date ranges */\n quickOptions?: DatePickerQuickOption[];\n noReset?: boolean;\n /** Minimum selectable date */\n /** Date ranges that are visually marked as blocked */\n blockedRanges?: DateRange[];\n minDate?: Date;\n /** Maximum selectable date */\n maxDate?: Date;\n /** Whether to show the calendar week in the first column */\n showCalendarWeek?: boolean;\n /** Whether to show and allow editing of time */\n showTime?: boolean | { showSeconds?: boolean };\n};\n\nconst DatePickerContext = createContext<Partial<Omit<DatePickerProps, 'value' | 'onChange'>>>({});\n\nexport function DatePickerProvider({\n children,\n ...props\n}: Partial<Omit<DatePickerProps, 'value' | 'onChange'>> & { children?: ReactNode }) {\n const value = useMemo(() => props, [JSON.stringify(props)]);\n\n return <DatePickerContext.Provider value={value}>{children}</DatePickerContext.Provider>;\n}\n\nconst weekDays = [0, 1, 2, 3, 4, 5, 6] as const;\n\n/** Rounds a date down to the start of the day. */\nexport const startOfDay = (d: Date) => new Date(d.getFullYear(), d.getMonth(), d.getDate());\n\n/** Rounds a date up to the end of the day. */\nexport const endOfDay = (d: Date) =>\n new Date(d.getFullYear(), d.getMonth(), d.getDate() + 1, 0, 0, 0, -1);\n\nexport const lastDays = (days: number): DateRange => {\n const now = new Date();\n const min = new Date(now);\n min.setDate(min.getDate() - days + 1);\n\n return {\n min: startOfDay(min),\n max: endOfDay(now),\n };\n};\n\nexport const today = () => lastDays(1);\n\nexport const thisWeek = (delta = 0, firstDayOfWeek = 1): DateRange => {\n const now = new Date();\n const min = new Date(now);\n\n let diff = min.getDay() - firstDayOfWeek;\n if (diff < 0) {\n diff += 7;\n }\n min.setDate(min.getDate() - diff + delta * 7);\n\n const max = new Date(min);\n max.setDate(max.getDate() + 6);\n\n return {\n min: startOfDay(min),\n max: endOfDay(max),\n };\n};\n\nexport const thisMonth = (delta = 0): DateRange => {\n const now = new Date();\n const min = new Date(now);\n min.setDate(1);\n min.setMonth(min.getMonth() + delta);\n const max = new Date(min);\n max.setMonth(max.getMonth() + 1);\n max.setDate(max.getDate() - 1);\n\n return {\n min: startOfDay(min),\n max: endOfDay(max),\n };\n};\n\nexport const thisYear = (delta = 0): DateRange => {\n const now = new Date();\n const min = new Date(now);\n min.setDate(1);\n min.setMonth(0);\n min.setFullYear(min.getFullYear() + delta);\n const max = new Date(min);\n max.setFullYear(max.getFullYear() + 1);\n max.setDate(max.getDate() - 1);\n\n return {\n min: startOfDay(min),\n max: endOfDay(max),\n };\n};\n\nexport const getCalendarWeek = (date: Date): number => {\n // ISO 8601: Week 1 is the week with the first Thursday of the year.\n // https://en.wikipedia.org/wiki/ISO_week_date\n\n const tz = Temporal.Now.timeZoneId();\n return (\n Temporal.Instant.fromEpochMilliseconds(date.getTime()).toZonedDateTimeISO(tz).weekOfYear ?? 0\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(\n a: Date | DateRange | null | undefined,\n b: Date | DateRange | null | undefined,\n) {\n if (a instanceof Date) {\n a = { min: a, max: a };\n }\n if (b instanceof Date) {\n b = { min: b, max: b };\n }\n\n if (!a?.min || !a.max || !b?.min || !b.max) {\n return false;\n }\n\n return !(endOfDay(a.max) < startOfDay(b.min) || startOfDay(a.min) > endOfDay(b.max));\n}\n\nexport function dateClamp(date: Date, min?: Date, max?: Date) {\n if (min && date < min) {\n return min;\n }\n\n if (max && date > max) {\n return max;\n }\n\n return date;\n}\n\nfunction getValueForComparison(value?: Date | DateRange | null) {\n if (!value) {\n return value;\n }\n if (value instanceof Date) {\n return value.getTime();\n }\n return `${value.min?.getTime()}-${value.max?.getTime()}`;\n}\n\nexport function DatePicker(props: DatePickerProps) {\n const context = useContext(DatePickerContext);\n\n const {\n value,\n rangeSelect,\n locale,\n firstDayOfWeek = 1,\n defaultDateInView,\n quickOptions = ['today', 'thisWeek'],\n noReset,\n minDate,\n maxDate,\n showCalendarWeek,\n blockedRanges = [],\n showTime,\n } = defaults<DatePickerProps>(props, context);\n\n function onChange(value: Date | DateRange | null, source: DatePickerChangeSource) {\n if (value instanceof Date) {\n value = dateClamp(value, minDate, maxDate);\n } else if (value) {\n value = {\n min: dateClamp(value.min, minDate, maxDate),\n max: dateClamp(value.max, minDate, maxDate),\n };\n }\n\n props.onChange(value, source);\n }\n\n const Button = useTheme((t) => t.components.Button);\n const IconButton = useTheme((t) => t.components.IconButton);\n const ChevronRight = useTheme((t) => t.icons.ChevronRight);\n const cssVariables = useCssVariables();\n function getDayCssStyles({\n disabled,\n prevMonth,\n nextMonth,\n today,\n blocked,\n selected,\n preSelected,\n }: {\n disabled?: boolean;\n prevMonth?: boolean;\n nextMonth?: boolean;\n today?: boolean;\n blocked?: boolean;\n selected?: boolean;\n preSelected?: boolean;\n }): Interpolation<Theme> {\n return [\n {\n padding: 10,\n border: 'none',\n background: 'transparent',\n cursor: disabled ? undefined : 'pointer',\n font: 'inherit',\n color: 'inherit',\n },\n (prevMonth || nextMonth) && {\n color: 'var(--date-picker-disemphasized, #bdbdbd)',\n },\n today && {\n outline: '1px solid var(--secondaryMain)',\n },\n blocked && {\n background: 'var(--blockedMain)',\n color: 'var(--blockedContrastText)',\n },\n selected && {\n background: 'var(--primaryMain)',\n color: 'var(--primaryContrastText)',\n },\n blocked &&\n selected && {\n position: 'relative',\n '::before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n background: 'var(--blockedMain)',\n clipPath: 'polygon(0 0, 0 50%, 50% 0)',\n },\n },\n preSelected && {\n background: 'var(--primaryLight)',\n color: 'var(--primaryContrastText)',\n },\n ];\n }\n\n const mountTime = useMemo(() => new Date(), []);\n const [dirty, setDirty] = useState<Partial<DateRange>>();\n const [hovered, setHovered] = useState<DateRange>();\n const [dateInViewLocal, setDateInViewLocal] = useState<Date>(defaultDateInView ?? mountTime);\n const dateInView = props.dateInView ?? dateInViewLocal;\n\n function setDateInView(date: Date) {\n setDateInViewLocal(date);\n props.onDateInViewChange?.(date);\n }\n\n const min = dirty ? dirty.min : value instanceof Date ? value : value?.min;\n const max = dirty ? dirty.max : value instanceof Date ? value : value?.max;\n\n const resolvedQuickOptions = [\n ...quickOptions,\n ...(noReset ? [] : [{ label: <Text id=\"reset\" />, value: null }]),\n ].map((option, index) => {\n if (option instanceof Function) {\n return option((value) => {\n setDirty(undefined);\n onChange(value, 'quickOption');\n });\n }\n\n const { label, value } = typeof option === 'string' ? commonQuickOptions[option] : option;\n\n return (\n <Button\n key={index}\n variant=\"text\"\n type=\"button\"\n css={{\n color: 'inherit',\n }}\n onClick={() => {\n setDirty(undefined);\n\n if (value instanceof Function) {\n onChange(value(props), 'quickOption');\n } else {\n onChange(value, 'quickOption');\n }\n }}\n >\n {label}\n </Button>\n );\n });\n\n const { calendars, getBackProps, getForwardProps, getDateProps } = useDayzed({\n onDateSelected: () => undefined,\n firstDayOfWeek,\n showOutsideDays: true,\n date: dateInView,\n onOffsetChanged: (offset) =>\n setDateInView(new Date(dateInView.getFullYear(), dateInView.getMonth() + offset)),\n offset: 0,\n minDate,\n maxDate,\n });\n const now = useMemo(() => startOfDay(new Date()), []);\n\n const formatWeekday = useMemo(() => {\n const { format } = new Intl.DateTimeFormat(locale, { weekday: 'short' });\n return (weekDay: number) =>\n format(new Date(Date.UTC(2021, 7, ((weekDay + firstDayOfWeek) % 7) + 1)));\n }, [locale, firstDayOfWeek]);\n\n useEffect(\n () =>\n setDateInView(\n value === null\n ? (defaultDateInView ?? mountTime)\n : value instanceof Date\n ? value\n : value.max,\n ),\n [getValueForComparison(value), getValueForComparison(defaultDateInView), mountTime],\n );\n\n useEffect(() => {\n if (!rangeSelect) {\n setDirty(undefined);\n }\n }, [rangeSelect]);\n\n function set(source: DatePickerChangeSource, min?: Date, max?: Date, edit?: 'min' | 'max') {\n if (!rangeSelect) {\n onChange(min ?? null, source);\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, source);\n } else {\n setDirty({ min, max });\n }\n }\n\n const formatMonth = useMemo(() => {\n const { format } = new Intl.DateTimeFormat(locale, { month: 'long' });\n return (month: number) => format(new Date(2021, month));\n }, [locale]);\n\n const formatYear = useMemo(() => {\n const { format } = new Intl.DateTimeFormat(locale, { year: 'numeric' });\n return (year: number) => format(new Date(year, 0, 1));\n }, [locale]);\n\n return (\n <div\n css={[\n cssVariables,\n {\n color: 'var(--table-text-color)',\n },\n ]}\n >\n <div\n css={{\n display: 'grid',\n gridAutoFlow: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n gap: 'calc(var(--spacing) * 4)',\n\n '& > div': {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n },\n }}\n >\n <div>\n <DateInput\n value={min ?? null}\n onChange={(newMin) => set('input', newMin ?? undefined, max, 'min')}\n locale={locale}\n />\n\n {showTime && (\n <TimeInput\n value={min ?? null}\n onChange={(newMin) => set('input', newMin ?? undefined, max, 'min')}\n locale={locale}\n showSeconds={typeof showTime === 'boolean' ? true : showTime.showSeconds}\n />\n )}\n </div>\n\n {rangeSelect && (\n <>\n {' - '}\n\n <div>\n <DateInput\n value={max ?? null}\n onChange={(newMax) => set('input', min, newMax ?? undefined, 'max')}\n locale={locale}\n />\n\n {showTime && (\n <TimeInput\n value={max ?? null}\n onChange={(newMax) => set('input', min, newMax ?? undefined, 'max')}\n locale={locale}\n showSeconds={typeof showTime === 'boolean' ? true : showTime.showSeconds}\n />\n )}\n </div>\n </>\n )}\n </div>\n\n {calendars.map(({ month, year, weeks }) => (\n <div key={`${month}${year}`} css={{ display: 'grid' }}>\n <div\n css={{\n margin: 'calc(var(--spacing) * 4) 0',\n display: 'grid',\n gridAutoFlow: 'column',\n justifyContent: 'space-between',\n alignItems: 'center',\n }}\n >\n <IconButton type=\"button\" {...getBackProps({ calendars })}>\n <ChevronRight css={{ transform: 'rotate3d(0, 0, 1, 180deg)' }} />\n </IconButton>\n\n <div css={{ display: 'flex' }}>\n {formatMonth(month)} {formatYear(year)}\n </div>\n\n <IconButton type=\"button\" {...getForwardProps({ calendars })}>\n <ChevronRight />\n </IconButton>\n </div>\n\n <div\n css={{\n justifySelf: 'center',\n display: 'grid',\n gridTemplateColumns: 'repeat(8, max-content)',\n }}\n >\n {showCalendarWeek ? (\n <div\n css={{\n justifySelf: 'center',\n padding: 10,\n borderRight:\n '1px solid var(--date-picker-separator, var(--table-border, #bdbdbd))',\n }}\n >\n <Text id=\"calendarWeek\" />\n </div>\n ) : (\n <div />\n )}\n\n {weekDays.map((_v, weekDay) => (\n <div\n key={weekDay}\n css={{\n justifySelf: 'center',\n padding: 10,\n }}\n >\n {formatWeekday(weekDay)}\n </div>\n ))}\n\n {weeks.map((week, index) => {\n const weekStart = week[0] as DayzedDateObject;\n const weekEnd = week[6] as DayzedDateObject;\n const weekDisabled =\n !rangeSelect ||\n (minDate && weekEnd.date < minDate) ||\n (maxDate && weekStart.date > maxDate);\n\n return (\n <Fragment key={index}>\n {showCalendarWeek ? (\n <button\n type=\"button\"\n css={{\n padding: 10,\n border: 'none',\n background: 'transparent',\n cursor: weekDisabled ? undefined : 'pointer',\n font: 'inherit',\n borderRight:\n '1px solid var(--date-picker-separator, var(--table-border, #bdbdbd))',\n color: 'inherit',\n }}\n onClick={() => {\n if (weekDisabled) {\n return;\n }\n\n const min = minDate && weekStart.date < minDate ? minDate : weekStart.date;\n const max = maxDate && weekEnd.date > maxDate ? maxDate : weekEnd.date;\n set('calendarWeek', min, max);\n }}\n onPointerOver={() =>\n !weekDisabled && setHovered({ min: weekStart.date, max: weekEnd.date })\n }\n onPointerOut={() => !weekDisabled && setHovered(undefined)}\n >\n {getCalendarWeek(weekEnd.date)}\n </button>\n ) : (\n <div />\n )}\n\n {week.map((dateObject, dayIndex) => {\n if (!dateObject) {\n return <div key={dayIndex} />;\n }\n\n const { prevMonth, nextMonth, date } = dateObject;\n const today = startOfDay(date).getTime() === now.getTime();\n const disabled = (minDate && date < minDate) || (maxDate && date > maxDate);\n\n const selected =\n date.getTime() === min?.getTime() ||\n (min && max && dateIntersect(date, { min, max }));\n const preSelected =\n !selected &&\n !disabled &&\n (dateIntersect(date, hovered) ||\n (min &&\n !max &&\n hovered &&\n dateIntersect(\n date,\n min <= hovered.min\n ? { min, max: hovered.min }\n : { min: hovered.max, max: min },\n )));\n const blocked = blockedRanges.some((range) => dateIntersect(date, range));\n\n return (\n <button\n type=\"button\"\n key={`${index}-${dayIndex}`}\n css={getDayCssStyles({\n disabled,\n prevMonth,\n nextMonth,\n today,\n blocked,\n selected,\n preSelected,\n })}\n {...getDateProps({ dateObj: dateObject })}\n onClick={() => {\n if (dirty) {\n if (min) set('calendar', min, date);\n else set('calendar', date, max);\n } else {\n set('calendar', date);\n }\n }}\n onPointerOver={() => setHovered({ min: date, max: date })}\n onPointerOut={() => setHovered(undefined)}\n disabled={disabled}\n >\n {date.getDate()}\n </button>\n );\n })}\n </Fragment>\n );\n })}\n </div>\n </div>\n ))}\n\n <div\n css={{\n marginTop: 'var(--spacing)',\n display: 'grid',\n gridAutoFlow: 'column',\n justifyContent: 'center',\n }}\n >\n {resolvedQuickOptions}\n </div>\n </div>\n );\n}\n","import { createContext, useContext } from 'react';\nimport type { Id, TableActions, TableContextValue, TableStructure } from '../types';\n\n/** Full table state. Changes on every state change: rows and cells must not consume it. */\nexport const TableContext = createContext<TableContextValue<any> | null>(null);\n\n/** Header, footer and filter components use this so that row interactions (selection,\n * expansion) don't render them. */\nexport const TableStructureContext = createContext<TableStructure<any> | null>(null);\n\n/** Stable for the lifetime of the table. */\nexport const TableActionsContext = createContext<TableActions<any> | null>(null);\n\n/** Only the row checkboxes consume this, so a selection change does not render rows. */\nexport const SelectionContext = createContext<Set<Id>>(new Set());\n\nexport const ColumnContext = createContext<Id | null>(null);\n\nexport function useTableContext<T>(): TableContextValue<T> {\n const value = useContext(TableContext);\n if (!value) throw new Error('No table context available');\n return value as TableContextValue<T>;\n}\n\nexport function useTableStructure<T>(): TableStructure<T> {\n const value = useContext(TableStructureContext);\n if (!value) throw new Error('No table context available');\n return value as TableStructure<T>;\n}\n\nexport function useTableActions<T>(): TableActions<T> {\n const value = useContext(TableActionsContext);\n if (!value) throw new Error('No table context available');\n return value as TableActions<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","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 // start() never rejects: each job's outcome goes to its own promise.\n if (!this.isRunning) void 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, useRef, useState } from 'react';\nimport { Queue } from '../misc/queue';\nimport type { Id, TableProps } from '../types';\n\nexport const PERSIST_KEYS = [\n 'sort',\n 'selection',\n 'expanded',\n 'hiddenColumns',\n 'filterValues',\n 'columnWidths',\n] as const;\n\nexport type PersistKey = (typeof PERSIST_KEYS)[number];\nexport type PersistedData = Partial<Record<PersistKey, any>>;\n\nconst storageName = (id: string) => `schummar-table_state-v1_${id}`;\n\nexport type TableStateStorage = {\n getItem: (key: string) => string | null | Promise<string | null>;\n /** May return a promise. */\n setItem: (key: string, value: string) => unknown;\n /** May return a promise. */\n removeItem: (key: string) => 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: unknown) {\n function prepare(value: unknown): 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\n/** A persisted key, or `{ filterValues: [...] }` for the values of some filters only. */\nexport type PersistEntry = PersistKey | { filterValues: readonly Id[] };\n\ntype Persist = NonNullable<TableProps<any>['persist']>;\n\nconst filterIds = (entries: readonly PersistEntry[] | undefined) =>\n entries?.flatMap((entry) => (typeof entry === 'object' ? entry.filterValues : []));\n\nexport function isPersisted(persist: Persist, key: PersistKey) {\n const isIncluded =\n !persist.include ||\n persist.include.includes(key) ||\n (key === 'filterValues' && filterIds(persist.include)!.length > 0);\n return isIncluded && !persist.exclude?.includes(key);\n}\n\nexport function isFilterValuePersisted(persist: Persist, columnId: Id) {\n if (!isPersisted(persist, 'filterValues')) return false;\n const included = persist.include?.includes('filterValues')\n ? undefined\n : filterIds(persist.include);\n return (\n (included === undefined || included.includes(columnId)) &&\n !filterIds(persist.exclude)?.includes(columnId)\n );\n}\n\n/**\n * Loads the persisted state once on mount and saves `data` (at most once per second) after that.\n * `data` must already be reduced to what should be saved.\n */\nexport function usePersistence(\n persist: TableProps<any>['persist'],\n data: PersistedData,\n restore: (data: PersistedData) => void,\n debug?: (...output: any) => void,\n) {\n const [isHydrated, setIsHydrated] = useState(!persist);\n const [queue] = useState(() => new Queue());\n const latest = useRef({ persist, data, restore, debug });\n const timer = useRef<ReturnType<typeof setTimeout>>(undefined);\n const lastSave = useRef(0);\n\n useEffect(() => {\n latest.current = { persist, data, restore, debug };\n });\n\n useEffect(() => {\n const { persist } = latest.current;\n if (!persist) return;\n\n let isCanceled = false;\n\n void (async () => {\n try {\n const json = await persist.storage.getItem(storageName(persist.id));\n if (isCanceled || !json) return;\n\n const data = parse(json);\n latest.current.debug?.('load', json, data);\n latest.current.restore(\n Object.fromEntries(\n PERSIST_KEYS.filter((key) => key in data && isPersisted(persist, key)).map((key) => [\n key,\n data[key],\n ]),\n ),\n );\n } catch (error) {\n console.error('Failed to load table state:', error);\n } finally {\n if (!isCanceled) setIsHydrated(true);\n }\n })();\n\n return () => {\n isCanceled = true;\n };\n }, []);\n\n useEffect(() => {\n if (!isHydrated || !latest.current.persist || timer.current) return;\n\n timer.current = setTimeout(\n () => {\n timer.current = undefined;\n lastSave.current = Date.now();\n\n const { persist, data, debug } = latest.current;\n if (!persist) return;\n\n const json = stringify(data);\n debug?.('save', data, json);\n void queue.run(async () => {\n await persist.storage.setItem(storageName(persist.id), json);\n }, true);\n },\n Math.max(0, lastSave.current + 1000 - Date.now()),\n );\n }, [isHydrated, data, queue]);\n\n useEffect(() => () => clearTimeout(timer.current), []);\n\n async function clear() {\n clearTimeout(timer.current);\n timer.current = undefined;\n\n const { persist } = latest.current;\n if (!persist) return;\n\n await queue.run(async () => {\n await persist.storage.removeItem(storageName(persist.id));\n }, true);\n }\n\n return [isHydrated, clear] as const;\n}\n","import { useEffect, useRef, useState } from 'react';\n\n/**\n * State that can be controlled through a prop. Setting it reports the new value and only stores\n * it when uncontrolled, like a React <input>.\n */\nexport function useControllableState<V>(\n controlled: V | undefined,\n initial: () => V,\n onChange: ((value: V) => void) | undefined,\n) {\n const [internal, setInternal] = useState(initial);\n const value = controlled ?? internal;\n\n const latest = useRef({ controlled, onChange });\n useEffect(() => {\n latest.current = { controlled, onChange };\n });\n\n const [set] = useState(() => (next: V) => {\n latest.current.onChange?.(next);\n if (latest.current.controlled === undefined) {\n setInternal(next);\n }\n });\n\n return [value, set, setInternal] as const;\n}\n\n/**\n * Keeps a state normalized: renders use the normalized value right away, and an effect writes it\n * back (reporting it like any other change) when it differs. `normalize` must return its input\n * unchanged when there is nothing to fix, or this loops.\n */\nexport function useNormalized<V>(value: V, normalized: V, set: (value: V) => void) {\n useEffect(() => {\n if (normalized !== value) {\n set(normalized);\n }\n }, [value, normalized, set]);\n\n return normalized;\n}\n","import { useMemo, useState } from 'react';\nimport type { DisplaySize, Id, InternalColumn, InternalTableProps } from '../types';\nimport { useControllableState } from './useControllableState';\n\nexport function useColumns<T>(props: InternalTableProps<T>, displaySize: DisplaySize | undefined) {\n const [hiddenColumns, setHiddenColumns, setHiddenColumnsInternal] = useControllableState(\n props.hiddenColumns,\n () => props.defaultHiddenColumns ?? new Set<Id>(),\n props.onHiddenColumnsChange,\n );\n const [columnWidths, setColumnWidths] = useState(() => new Map<Id, string>());\n\n const allColumns = props.columns;\n\n const matchesDisplaySize = (column: InternalColumn<T, unknown>) =>\n displaySize === undefined ||\n column.displaySize === undefined ||\n column.displaySize.includes(displaySize);\n\n const columns = useMemo(() => allColumns.filter(matchesDisplaySize), [allColumns, displaySize]);\n\n const activeColumns = useMemo(\n () => allColumns.filter((column) => !(column.hidden ?? hiddenColumns.has(column.id))),\n [allColumns, hiddenColumns],\n );\n\n const visibleColumns = useMemo(\n () => activeColumns.filter(matchesDisplaySize),\n [activeColumns, displaySize],\n );\n\n return {\n hiddenColumns,\n setHiddenColumns,\n setHiddenColumnsInternal,\n columnWidths,\n setColumnWidths,\n columns,\n activeColumns,\n visibleColumns,\n };\n}\n","import { useMemo } from 'react';\nimport { getAncestors } from '../misc/helpers';\nimport type { Id, InternalTableProps, TableItem } from '../types';\nimport { useControllableState, useNormalized } from './useControllableState';\n\nexport function useExpanded<T>(\n props: InternalTableProps<T>,\n itemsById: Map<Id, TableItem<T>>,\n matching: Set<Id> | undefined,\n) {\n const [value, setExpanded, setExpandedInternal] = useControllableState(\n props.expanded,\n () => props.defaultExpanded ?? new Set<Id>(),\n props.onExpandedChange,\n );\n\n const normalized = useMemo(() => {\n let result = value;\n const add = (id: Id) => {\n if (result.has(id)) return;\n if (result === value) result = new Set(value);\n result.add(id);\n };\n\n if (props.expandOnlyOne && value.size > 1) {\n // Keep the deepest expanded item and its ancestors, collapse every other branch.\n const deepest = [...value]\n .map((id) => itemsById.get(id))\n .filter((item) => item !== undefined)\n .sort((a, b) => b.depth - a.depth)[0];\n const branch = deepest ? getAncestors(itemsById, deepest).add(deepest.id) : new Set<Id>();\n if ([...value].some((id) => !branch.has(id))) return branch;\n }\n\n for (const id of value) {\n const item = itemsById.get(id);\n if (item) getAncestors(itemsById, item).forEach(add);\n }\n\n if (props.items !== undefined) {\n for (const id of value) {\n if (!itemsById.has(id)) {\n if (result === value) result = new Set(value);\n result.delete(id);\n }\n }\n }\n\n // Parents of matching items, so matches nested in collapsed branches become visible.\n if (props.revealFiltered && matching) {\n for (const id of matching) {\n const parentId = itemsById.get(id)?.parentId;\n if (parentId !== undefined && parentId !== null) add(parentId);\n }\n }\n\n return result;\n }, [value, itemsById, matching, props.items, props.expandOnlyOne, props.revealFiltered]);\n\n const expanded = useNormalized(value, normalized, setExpanded);\n\n return { expanded, setExpanded, setExpandedInternal };\n}\n","import { useMemo } from 'react';\nimport type { Filter, Id, InternalColumn, InternalTableProps, TableItem } from '../types';\nimport { useControllableState } from './useControllableState';\n\nexport const isActiveFilter = (filter: Filter<any, any> | undefined, value: unknown) =>\n filter !== undefined &&\n value !== undefined &&\n value !== null &&\n filter.isActive(value, filter.options);\n\n/** Columns whose filters apply: the visible ones, or all with `enableHiddenColumnFilters`. */\nexport function filteredColumns<T>(\n props: InternalTableProps<T>,\n visibleColumns: InternalColumn<T, unknown>[],\n) {\n return props.enableHiddenColumnFilters ? props.columns : visibleColumns;\n}\n\n/** Adds controlled values and defaults. Returns `stored` itself when there are none. */\n// Outside the hook: React Compiler miscompiles the reassigned `result` into a memo that never hits.\nfunction withFilterDefaults(stored: Map<Id, unknown>, columns: InternalColumn<any, unknown>[]) {\n let result = stored;\n for (const { id, filter } of columns) {\n const value =\n filter?.value !== undefined || stored.has(id) ? filter?.value : filter?.defaultValue;\n if (value === undefined) continue;\n if (result === stored) result = new Map(stored);\n result.set(id, value);\n }\n return result;\n}\n\nexport function useFilters<T>(\n props: InternalTableProps<T>,\n visibleColumns: InternalColumn<T, unknown>[],\n items: TableItem<T>[],\n) {\n const [stored, setFilterValues, setFilterValuesInternal] = useControllableState(\n props.filterValues,\n () => props.defaultFilterValues ?? new Map<Id, unknown>(),\n props.onFilterValuesChange,\n );\n\n const filterValues = useMemo(\n () => withFilterDefaults(stored, props.columns),\n [stored, props.columns],\n );\n\n const applied = filteredColumns(props, visibleColumns);\n\n /** Ids of matching items and of all their ancestors; undefined when no filter is active. */\n const matching = useMemo(() => {\n const active = applied.flatMap((column) => {\n const { filter } = column;\n const value = filterValues.get(column.id);\n if (!filter || filter.external || !isActiveFilter(filter, value)) return [];\n return [{ column, filter, value }];\n });\n\n if (active.length === 0) return undefined;\n\n const result = new Set<Id>();\n // Children come after their parent, so walking backwards sees descendants first.\n for (let i = items.length - 1; i >= 0; i--) {\n const item = items[i]!;\n const isMatch =\n result.has(item.id) ||\n active.every(({ column, filter, value }) =>\n filter.test(value, column.filterBy(column.value(item.value), item.value), filter.options),\n );\n\n if (isMatch) {\n result.add(item.id);\n if (item.parentId !== undefined && item.parentId !== null) result.add(item.parentId);\n }\n }\n return result;\n }, [applied, filterValues, items]);\n\n return { stored, filterValues, setFilterValues, setFilterValuesInternal, matching };\n}\n","import { useMemo } from 'react';\nimport type { InternalColumn, InternalTableProps } from '../types';\nimport { useControllableState, useNormalized } from './useControllableState';\n\ntype Criterion<T> = {\n key: (item: T) => unknown;\n direction: 1 | -1;\n collator: Intl.Collator;\n};\n\nconst collators = new Map<string, Intl.Collator>();\n\nfunction getCollator(locale: string | undefined, options: Intl.CollatorOptions | undefined) {\n const cacheKey = `${locale}|${JSON.stringify(options)}`;\n let collator = collators.get(cacheKey);\n if (!collator) {\n collator = new Intl.Collator(locale, options);\n collators.set(cacheKey, collator);\n }\n return collator;\n}\n\nexport function useSort<T>(\n props: InternalTableProps<T>,\n activeColumns: InternalColumn<T, unknown>[],\n) {\n const [value, setSort, setSortInternal] = useControllableState(\n props.sort,\n () => props.defaultSort ?? [],\n props.onSortChange,\n );\n\n const normalized = useMemo(() => {\n const filtered = value.filter((s) => activeColumns.some((column) => column.id === s.columnId));\n return filtered.length === value.length ? value : filtered;\n }, [value, activeColumns]);\n\n const sort = useNormalized(value, normalized, setSort);\n\n const criteria = useMemo(() => {\n if (props.externalSort) return [];\n\n return sort.flatMap((s): Criterion<T>[] => {\n const column = activeColumns.find((column) => column.id === s.columnId);\n if (!column) return [];\n\n return column.sortBy.map((sortBy) => ({\n key: (item: T) => sortBy(column.value(item), item),\n direction: s.direction === 'desc' ? -1 : 1,\n collator: getCollator(s.locale ?? props.locale, s.options),\n }));\n });\n }, [sort, activeColumns, props.externalSort, props.locale]);\n\n return { sort, setSort, setSortInternal, criteria };\n}\n\n/** Stable sort that evaluates each sort key once per item instead of once per comparison. */\nexport function sortBy<R>(records: R[], criteria: Criterion<any>[], getValue: (record: R) => any) {\n if (criteria.length === 0) return records;\n\n const keys = criteria.map((criterion) =>\n records.map((record) => criterion.key(getValue(record))),\n );\n const indices = records.map((_, index) => index);\n\n indices.sort((a, b) => {\n for (let i = 0; i < criteria.length; i++) {\n const { direction, collator } = criteria[i]!;\n const x = keys[i]![a];\n const y = keys[i]![b];\n\n if (typeof x === 'string' && typeof y === 'string') {\n const result = collator.compare(x, y);\n if (result !== 0) return result * direction;\n continue;\n }\n\n if ((x as any) > (y as any)) return direction;\n if ((x as any) < (y as any)) return -direction;\n }\n return a - b;\n });\n\n return indices.map((index) => records[index]!);\n}\n","import { useMemo } from 'react';\nimport type { Id, InternalTableProps, TableItem } from '../types';\nimport { sortBy } from './useSort';\nimport type { useSort } from './useSort';\n\ntype ItemRecord<T> = { id: Id; parentId: Id | undefined | null; value: T };\n\nconst isRoot = (parentId: Id | undefined | null) => parentId === undefined || parentId === null;\n\n/** All items, sorted, as a flattened tree. */\nexport function useItems<T>(\n props: InternalTableProps<T>,\n criteria: ReturnType<typeof useSort<T>>['criteria'],\n) {\n const { items: input, id, parentId } = props;\n\n const records = useMemo(\n () =>\n (input ?? []).map<ItemRecord<T>>((value) => ({\n id: id(value),\n parentId: parentId?.(value),\n value,\n })),\n [input, id, parentId],\n );\n\n const sorted = useMemo(\n () => sortBy(records, criteria, (record) => record.value),\n [records, criteria],\n );\n\n return useMemo(() => {\n const byId = new Map<Id, TableItem<T>>();\n for (const record of sorted) {\n byId.set(record.id, { ...record, children: [], depth: 0 });\n }\n\n const roots: TableItem<T>[] = [];\n for (const item of byId.values()) {\n if (isRoot(item.parentId)) {\n roots.push(item);\n } else {\n byId.get(item.parentId!)?.children.push(item);\n }\n }\n\n // Items whose parent is missing are dropped, like before: they are unreachable from a root.\n const items: TableItem<T>[] = [];\n const itemsById = new Map<Id, TableItem<T>>();\n const traverse = (level: TableItem<T>[], depth: number) => {\n for (const item of level) {\n item.depth = depth;\n items.push(item);\n itemsById.set(item.id, item);\n traverse(item.children, depth + 1);\n }\n };\n traverse(roots, 0);\n\n return { items, itemsById };\n }, [sorted]);\n}\n\n/** Items that pass the filters and whose ancestors are all expanded. */\nexport function useActiveItems<T>(\n items: TableItem<T>[],\n matching: Set<Id> | undefined,\n expanded: Set<Id>,\n) {\n return useMemo(() => {\n const activeItems: TableItem<T>[] = [];\n const activeItemsById = new Map<Id, TableItem<T>>();\n\n for (const item of items) {\n if (matching && !matching.has(item.id)) continue;\n if (\n !isRoot(item.parentId) &&\n !(activeItemsById.has(item.parentId!) && expanded.has(item.parentId!))\n ) {\n continue;\n }\n\n activeItems.push(item);\n activeItemsById.set(item.id, item);\n }\n\n return { activeItems, activeItemsById };\n }, [items, matching, expanded]);\n}\n","import { useMemo } from 'react';\nimport type { Id, InternalTableProps, TableItem } from '../types';\nimport { useControllableState, useNormalized } from './useControllableState';\n\nexport function useSelection<T>(\n props: InternalTableProps<T>,\n activeItems: TableItem<T>[],\n activeItemsById: Map<Id, TableItem<T>>,\n) {\n const [value, setSelection, setSelectionInternal] = useControllableState(\n props.selection,\n () => props.defaultSelection ?? new Set<Id>(),\n props.onSelectionChange,\n );\n\n const hasItems = props.items !== undefined;\n\n const normalized = useMemo(() => {\n let result = value;\n const copy = () => (result === value ? (result = new Set(value)) : result);\n\n if (props.selectSyncChildren) {\n for (const item of activeItems) {\n if (\n item.parentId !== undefined &&\n item.parentId !== null &&\n result.has(item.parentId) &&\n !result.has(item.id)\n ) {\n copy().add(item.id);\n }\n }\n }\n\n // Selection only covers what is shown: filtered out or collapsed items are deselected.\n if (hasItems) {\n for (const id of result) {\n if (!activeItemsById.has(id)) copy().delete(id);\n }\n }\n\n return result;\n }, [value, activeItems, activeItemsById, props.selectSyncChildren, hasItems]);\n\n const selection = useNormalized(value, normalized, setSelection);\n\n return { selection, setSelection, setSelectionInternal };\n}\n","export function defaultSerializer(x: unknown): string | number | Date {\n if (x instanceof Date || typeof x === 'number' || typeof x === 'string') {\n return x;\n }\n\n return JSON.stringify(x) ?? '';\n}\n","import { isValidElement } from 'react';\n\nconst isPlainObject = (x: object) => {\n const prototype = Object.getPrototypeOf(x);\n return prototype === Object.prototype || prototype === null;\n};\n\n/**\n * Structural equality for props. Functions and class instances compare by reference: keeping those\n * stable is up to the caller (or the React Compiler). React elements compare by type, key and props.\n */\nconst handlerTarget = Symbol('eventHandler');\n\ntype EventHandler<F> = F & { [handlerTarget]: F };\n\nconst isEventHandler = (x: unknown): x is EventHandler<(...args: any[]) => unknown> =>\n typeof x === 'function' && handlerTarget in x;\n\n/**\n * Wraps a callback that `deepEqual` compares like an event handler: any two are equal, so passing a\n * new function on every render doesn't make its object unequal. The previous one, which the\n * caller keeps, then calls the next one's function.\n */\nexport function eventHandler<F extends (...args: any[]) => unknown>(fn: F): F {\n const handler = ((...args: Parameters<F>) => handler[handlerTarget](...args)) as EventHandler<F>;\n handler[handlerTarget] = fn;\n return handler;\n}\n\n/** `a` is the next value, `b` the previous one, see `eventHandler`. */\nexport function deepEqual(a: unknown, b: unknown, depth = 0): boolean {\n if (Object.is(a, b)) return true;\n if (isEventHandler(a) && isEventHandler(b)) {\n b[handlerTarget] = a[handlerTarget];\n return true;\n }\n if (typeof a !== 'object' || typeof b !== 'object' || a === null || b === null) return false;\n if (depth > 20) return false;\n\n if (Array.isArray(a)) {\n return (\n Array.isArray(b) &&\n a.length === b.length &&\n a.every((value, index) => deepEqual(value, b[index], depth + 1))\n );\n }\n\n if (a instanceof Set) {\n if (!(b instanceof Set) || a.size !== b.size) return false;\n for (const value of a) if (!b.has(value)) return false;\n return true;\n }\n\n if (a instanceof Map) {\n if (!(b instanceof Map) || a.size !== b.size) return false;\n for (const [key, value] of a) {\n if (!b.has(key) || !deepEqual(value, b.get(key), depth + 1)) return false;\n }\n return true;\n }\n\n if (a instanceof Date) return b instanceof Date && a.getTime() === b.getTime();\n\n if (isValidElement(a)) {\n return (\n isValidElement(b) &&\n a.type === b.type &&\n a.key === b.key &&\n deepEqual(a.props, b.props, depth + 1)\n );\n }\n\n if (!isPlainObject(a) || !isPlainObject(b)) return false;\n\n const keys = Object.keys(a);\n if (keys.length !== Object.keys(b).length) return false;\n return keys.every(\n (key) =>\n key in b &&\n deepEqual(\n (a as Record<string, unknown>)[key],\n (b as Record<string, unknown>)[key],\n depth + 1,\n ),\n );\n}\n\n/** Same length and the same elements by reference. For large arrays like `items`. */\nexport function shallowArrayEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false;\n return true;\n}\n","import { useMemo, useRef, useSyncExternalStore } from 'react';\nimport { defaultSerializer } from '../exporters/serializer';\nimport { deepEqual, shallowArrayEqual } from '../misc/equal';\nimport { asString, castArray } from '../misc/helpers';\nimport type {\n Column,\n DisplaySize,\n DisplaySizes,\n Id,\n InternalColumn,\n InternalTableProps,\n TableProps,\n} from '../types';\n\nconst defaultProps = {\n enableSelection: true,\n selectSyncChildren: true,\n stickyHeader: true,\n stickyFooter: true,\n enableColumnSelection: true,\n enableColumnResize: true,\n displaySizeOverrides: {\n mobile: {\n enableSelection: false,\n enableColumnSelection: false,\n enableExport: false,\n enableColumnResize: false,\n },\n },\n} satisfies Partial<TableProps<any>>;\n\nconst identity = (value: unknown) => value;\n\nconst defaultSortBy = (v: unknown) =>\n typeof v === 'number' || v instanceof Date ? v : asString(v);\n\nfunction normalizeId<T>(id: TableProps<T>['id']): (item: T) => Id {\n return id instanceof Function ? id : (item) => item[id] as Id;\n}\n\nfunction normalizeParentId<T>(\n parentId: TableProps<T>['parentId'],\n): ((item: T) => Id | undefined) | undefined {\n if (parentId === undefined) return undefined;\n return parentId instanceof Function ? parentId : (item) => item[parentId] as Id | undefined;\n}\n\nfunction normalizeColumns<T>(\n columns: TableProps<T>['columns'],\n defaultColumnProps: TableProps<T>['defaultColumnProps'],\n columnProps: TableProps<T>['columnProps'],\n disableSort: boolean | undefined,\n): InternalColumn<T, unknown>[] {\n const input =\n columns instanceof Function ? columns((value, column) => ({ ...column, value })) : columns;\n\n return input\n .filter((column): column is Column<T, unknown> => !!column)\n .map((column, index) => {\n const id = column.id ?? index;\n const defaults = { ...defaultColumnProps, ...columnProps?.(id) };\n const displaySize = column.displaySize ?? defaults.displaySize;\n\n return {\n id,\n header: column.header ?? defaults.header ?? null,\n exportHeader: column.exportHeader ?? defaults.exportHeader ?? id,\n footer: column.footer ?? defaults.footer ?? null,\n value: column.value,\n renderCell: column.renderCell ?? defaults.renderCell ?? asString,\n exportCell: column.exportCell ?? defaults.exportCell ?? defaultSerializer,\n sortBy: column.sortBy ?? defaults.sortBy ?? [defaultSortBy],\n disableSort: column.disableSort ?? defaults.disableSort ?? disableSort ?? false,\n deferred: column.deferred ?? defaults.deferred,\n hidden: column.hidden ?? defaults.hidden,\n classes: column.classes ?? defaults.classes,\n styles: column.styles ?? defaults.styles,\n filterBy: column.filterBy ?? defaults.filterBy ?? identity,\n filter: column.filter ?? defaults.filter,\n width: column.width ?? defaults.width,\n displaySize: displaySize !== undefined ? castArray(displaySize) : undefined,\n };\n });\n}\n\nfunction subscribeResize(onChange: () => void) {\n window.addEventListener('resize', onChange);\n return () => window.removeEventListener('resize', onChange);\n}\n\nfunction useDisplaySize(displaySize: DisplaySize | DisplaySizes | undefined) {\n const width = useSyncExternalStore(\n subscribeResize,\n () => window.innerWidth,\n () => undefined,\n );\n\n if (typeof displaySize !== 'object') return displaySize;\n if (width === undefined) return undefined;\n\n return Object.entries(displaySize).find(\n ([, maxWidth]) => maxWidth !== undefined && maxWidth >= width,\n )?.[0];\n}\n\nfunction definedOnly<T extends object>(object: T): Partial<T> {\n return Object.fromEntries(\n Object.entries(object).filter(([, value]) => value !== undefined),\n ) as Partial<T>;\n}\n\n/**\n * Returns the previous props object while every prop is equal to the previous one: structurally,\n * with functions by reference, and `items` element by element. Parents creating equal objects,\n * Sets or arrays on each render then don't cause any recomputation.\n */\nfunction useStableProps<T>(raw: TableProps<T>): TableProps<T> {\n const previous = useRef<TableProps<T>>(undefined);\n const last = previous.current;\n\n if (last) {\n const keys = Object.keys(raw) as (keyof TableProps<T>)[];\n const isEqual =\n keys.length === Object.keys(last).length &&\n keys.every((key) =>\n key === 'items' ? shallowArrayEqual(raw[key], last[key]) : deepEqual(raw[key], last[key]),\n );\n if (isEqual) return last;\n }\n\n previous.current = raw;\n return raw;\n}\n\n/** Keeps the previous column objects (and array) for columns that are structurally unchanged. */\nfunction useStableColumns<T>(columns: InternalColumn<T, unknown>[]) {\n const previous = useRef<InternalColumn<T, unknown>[]>(undefined);\n const last = previous.current;\n if (!last || last === columns) {\n previous.current = columns;\n return columns;\n }\n\n const lastById = new Map(last.map((column) => [column.id, column]));\n const result = columns.map((column) => {\n const lastColumn = lastById.get(column.id);\n return lastColumn && deepEqual(column, lastColumn) ? lastColumn : column;\n });\n\n const isUnchanged =\n result.length === last.length && result.every((column, index) => column === last[index]);\n previous.current = isUnchanged ? last : result;\n return previous.current;\n}\n\n/**\n * Normalizes the props. Every derived value keeps its identity as long as its inputs do, so memos\n * downstream only recompute when the relevant props change.\n */\nexport function useTableProps<T>(input: TableProps<T>) {\n const raw = useStableProps(input);\n const displaySize = useDisplaySize(raw.displaySize);\n\n const id = useMemo(() => normalizeId(raw.id), [raw.id]);\n const parentId = useMemo(() => normalizeParentId(raw.parentId), [raw.parentId]);\n const columns = useStableColumns(\n useMemo(\n () => normalizeColumns(raw.columns, raw.defaultColumnProps, raw.columnProps, raw.disableSort),\n [raw.columns, raw.defaultColumnProps, raw.columnProps, raw.disableSort],\n ),\n );\n\n const displaySizeOverrides: TableProps<T>['displaySizeOverrides'] =\n raw.displaySizeOverrides ?? defaultProps.displaySizeOverrides;\n const override = displaySize !== undefined ? displaySizeOverrides[displaySize] : undefined;\n\n const overrideId = useMemo(\n () => (override?.id !== undefined ? normalizeId(override.id) : undefined),\n [override?.id],\n );\n const overrideParentId = useMemo(\n () => normalizeParentId(override?.parentId),\n [override?.parentId],\n );\n const overrideColumns = useMemo(\n () =>\n override?.columns !== undefined\n ? normalizeColumns(\n override.columns,\n override.defaultColumnProps ?? raw.defaultColumnProps,\n override.columnProps ?? raw.columnProps,\n override.disableSort ?? raw.disableSort,\n )\n : undefined,\n [\n override?.columns,\n override?.defaultColumnProps,\n override?.columnProps,\n override?.disableSort,\n raw.defaultColumnProps,\n raw.columnProps,\n raw.disableSort,\n ],\n );\n\n const props = useMemo(\n () =>\n ({\n ...defaultProps,\n ...definedOnly(raw),\n ...(override && definedOnly(override)),\n id: overrideId ?? id,\n parentId: overrideParentId ?? parentId,\n columns: overrideColumns ?? columns,\n }) as InternalTableProps<T>,\n [raw, override, id, parentId, columns, overrideId, overrideParentId, overrideColumns],\n );\n\n return { props, displaySize };\n}\n","import { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { useTableTheme } from '../hooks/useTheme';\nimport { getAncestors, getDescendants } from '../misc/helpers';\nimport type {\n Id,\n InternalColumn,\n TableActions,\n TableContextValue,\n TableProps,\n TableState,\n TableStructure,\n} from '../types';\nimport {\n isFilterValuePersisted,\n isPersisted,\n usePersistence,\n type PersistedData,\n} from './persistence';\nimport { useColumns } from './useColumns';\nimport { useExpanded } from './useExpanded';\nimport { useFilters } from './useFilters';\nimport { useActiveItems, useItems } from './useItems';\nimport { useSelection } from './useSelection';\nimport { useSort } from './useSort';\nimport { useTableProps } from './useTableProps';\n\nconst isControlledFilter = (columns: InternalColumn<any, unknown>[], columnId: Id) =>\n columns.find((column) => column.id === columnId)?.filter?.value !== undefined;\n\nfunction withEntry<K, V>(map: Map<K, V>, key: K, value: V | undefined) {\n const result = new Map(map);\n if (value === undefined) result.delete(key);\n else result.set(key, value);\n return result;\n}\n\n/** `isReset`: whether this state replaces one that got reset. */\nexport function useTable<T>(raw: TableProps<T>, onReset: () => void, isReset = false) {\n const { props, displaySize } = useTableProps(raw);\n const theme = useTableTheme(props);\n const columns = useColumns(props, displaySize);\n const sort = useSort(props, columns.activeColumns);\n const { items, itemsById } = useItems(props, sort.criteria);\n const filters = useFilters(props, columns.visibleColumns, items);\n const expanded = useExpanded(props, itemsById, filters.matching);\n const { activeItems, activeItemsById } = useActiveItems(\n items,\n filters.matching,\n expanded.expanded,\n );\n const selection = useSelection(props, activeItems, activeItemsById);\n\n const state: TableState<T> = {\n props,\n displaySize,\n sort: sort.sort,\n selection: selection.selection,\n expanded: expanded.expanded,\n hiddenColumns: columns.hiddenColumns,\n columnWidths: columns.columnWidths,\n filterValues: filters.filterValues,\n columns: columns.columns,\n activeColumns: columns.activeColumns,\n visibleColumns: columns.visibleColumns,\n items,\n itemsById,\n activeItems,\n activeItemsById,\n };\n\n const { persist } = props;\n const persistData = useMemo(() => {\n const data: PersistedData = {};\n if (!persist) return data;\n\n const add = (key: keyof PersistedData, value: unknown, isControlled = false) => {\n if (!isControlled && isPersisted(persist, key)) data[key] = value;\n };\n\n add('sort', sort.sort, props.sort !== undefined);\n add('selection', selection.selection, props.selection !== undefined);\n add('expanded', expanded.expanded, props.expanded !== undefined);\n add('hiddenColumns', columns.hiddenColumns, props.hiddenColumns !== undefined);\n add('columnWidths', columns.columnWidths);\n add(\n 'filterValues',\n new Map(\n [...filters.stored].filter(\n ([columnId]) =>\n isFilterValuePersisted(persist, columnId) &&\n !isControlledFilter(props.columns, columnId),\n ),\n ),\n props.filterValues !== undefined,\n );\n\n return data;\n }, [\n persist?.storage,\n persist?.id,\n JSON.stringify(persist?.include),\n JSON.stringify(persist?.exclude),\n sort.sort,\n selection.selection,\n expanded.expanded,\n columns.hiddenColumns,\n columns.columnWidths,\n filters.stored,\n props.columns,\n props.sort !== undefined,\n props.selection !== undefined,\n props.expanded !== undefined,\n props.hiddenColumns !== undefined,\n props.filterValues !== undefined,\n ]);\n\n const latest = useRef({ state, sort, selection, expanded, columns, filters, onReset });\n useLayoutEffect(() => {\n latest.current = { state, sort, selection, expanded, columns, filters, onReset };\n });\n\n function restore(data: PersistedData) {\n const { state, sort, selection, expanded, columns } = latest.current;\n const { props } = state;\n\n if (data.sort && props.sort === undefined) sort.setSort(data.sort);\n if (data.selection && props.selection === undefined) selection.setSelection(data.selection);\n if (data.expanded && props.expanded === undefined) expanded.setExpanded(data.expanded);\n if (data.hiddenColumns && props.hiddenColumns === undefined) {\n columns.setHiddenColumns(data.hiddenColumns);\n }\n if (data.columnWidths) columns.setColumnWidths(data.columnWidths);\n\n const filterValues = data.filterValues as Map<Id, unknown> | undefined;\n if (filterValues && props.filterValues === undefined) {\n const next = new Map(state.filterValues);\n for (const [columnId, value] of filterValues) {\n if (\n props.persist &&\n isFilterValuePersisted(props.persist, columnId) &&\n !isControlledFilter(props.columns, columnId)\n ) {\n next.set(columnId, value);\n }\n }\n commitFilterValues(next);\n }\n }\n\n useEffect(() => {\n if (!isReset) return;\n if (props.filterValues === undefined) props.onFilterValuesChange?.(filters.filterValues);\n\n for (const { id, filter } of props.columns) {\n filter?.onChange?.(filters.stored.has(id) ? filters.stored.get(id) : filter.defaultValue);\n }\n }, []);\n\n const [isHydrated, clearStorage] = usePersistence(persist, persistData, restore, props.debug);\n const clearStorageRef = useRef(clearStorage);\n clearStorageRef.current = clearStorage;\n\n const lastSelectedId = useRef<Id | undefined>(undefined);\n\n // `latest` only catches up after the next render.\n function patchState(patch: Partial<TableState<T>>) {\n latest.current = { ...latest.current, state: { ...latest.current.state, ...patch } };\n }\n\n /** Sets filter values and notifies the `onChange` of each filter whose value changed. */\n function commitFilterValues(next: Map<Id, unknown>) {\n const { state, filters } = latest.current;\n const previous = state.filterValues;\n filters.setFilterValues(next);\n patchState({ filterValues: next });\n\n for (const { id, filter } of state.props.columns) {\n const value = next.get(id);\n if (filter?.onChange && !Object.is(value, previous.get(id))) filter.onChange(value);\n }\n }\n\n const [actions] = useState((): TableActions<T> => {\n const get = () => latest.current;\n\n return {\n getState: () => get().state,\n\n setSort: (sort) => get().sort.setSort(sort),\n\n setSelection: (selection) => get().selection.setSelection(selection),\n\n toggleSelection(itemId, { range: isRange } = {}) {\n const { state, selection } = get();\n const { activeItems, activeItemsById, props } = state;\n const current = state.selection;\n\n const isSelected =\n itemId !== undefined\n ? current.has(itemId)\n : activeItems.length > 0 && activeItems.every((item) => current.has(item.id));\n\n let range;\n if (isRange && itemId !== undefined) {\n const b = activeItems.findIndex((item) => item.id === itemId);\n const last = lastSelectedId.current;\n const a = last !== undefined ? activeItems.findIndex((item) => item.id === last) : 0;\n range = activeItems.slice(Math.min(a < 0 ? b : a, b), Math.max(a, b) + 1);\n } else {\n const item = itemId !== undefined ? activeItemsById.get(itemId) : undefined;\n range = item ? [item] : activeItems;\n }\n\n const next = new Set(current);\n for (const item of range) {\n if (isSelected) next.delete(item.id);\n else next.add(item.id);\n }\n\n if (props.selectSyncChildren && isSelected) {\n for (const id of getAncestors(activeItemsById, ...range)) next.delete(id);\n for (const id of getDescendants(...range)) next.delete(id);\n }\n\n lastSelectedId.current = itemId;\n selection.setSelection(next);\n // A second action before the next render must build on this one.\n patchState({ selection: next });\n },\n\n setExpanded: (value) => get().expanded.setExpanded(value),\n\n toggleExpanded(itemId) {\n const { state, expanded } = get();\n const { activeItemsById, props } = state;\n const item = activeItemsById.get(itemId);\n const isExpanded = state.expanded.has(itemId);\n const next = new Set(state.expanded);\n\n if (props.expandOnlyOne) {\n next.clear();\n for (const id of item ? getAncestors(activeItemsById, item) : []) next.add(id);\n }\n\n if (isExpanded) {\n next.delete(itemId);\n for (const id of item ? getDescendants(item) : []) next.delete(id);\n } else {\n next.add(itemId);\n }\n\n expanded.setExpanded(next);\n patchState({ expanded: next });\n },\n\n setHiddenColumns: (hiddenColumns) => get().columns.setHiddenColumns(hiddenColumns),\n\n setColumnWidth(columnId, width) {\n get().columns.setColumnWidths((widths) => withEntry(widths, columnId, width));\n },\n\n setFilterValues: (filterValues) => commitFilterValues(filterValues),\n\n setFilterValue(columnId, value) {\n const next = new Map(get().state.filterValues);\n next.set(columnId, value);\n commitFilterValues(next);\n },\n\n clearFilters() {\n const { state } = get();\n const next = new Map(state.filterValues);\n for (const column of state.props.columns) {\n if (column.filter) next.set(column.id, undefined);\n }\n commitFilterValues(next);\n state.props.onReset?.('filters');\n },\n\n async resetTable() {\n await clearStorageRef.current();\n get().onReset();\n },\n };\n });\n const { sort: sortValue, hiddenColumns, columnWidths, filterValues } = state;\n const { columns: allColumns, activeColumns, visibleColumns } = state;\n const structure = useMemo(\n (): TableStructure<T> => ({\n props,\n displaySize,\n sort: sortValue,\n hiddenColumns,\n columnWidths,\n filterValues,\n columns: allColumns,\n activeColumns,\n visibleColumns,\n items,\n itemsById,\n actions,\n }),\n [\n props,\n displaySize,\n sortValue,\n hiddenColumns,\n columnWidths,\n filterValues,\n allColumns,\n activeColumns,\n visibleColumns,\n items,\n itemsById,\n actions,\n ],\n );\n\n const context = useMemo(\n (): TableContextValue<T> => ({\n ...structure,\n selection: state.selection,\n expanded: state.expanded,\n activeItems,\n activeItemsById,\n }),\n [structure, state.selection, state.expanded, activeItems, activeItemsById],\n );\n\n return {\n context,\n structure,\n actions,\n theme,\n isHydrated,\n setSortInternal: sort.setSortInternal,\n setSelectionInternal: selection.setSelectionInternal,\n setExpandedInternal: expanded.setExpandedInternal,\n setHiddenColumnsInternal: columns.setHiddenColumnsInternal,\n setFilterValuesInternal: filters.setFilterValuesInternal,\n };\n}\n","import { useImperativeHandle, type Ref } from 'react';\nimport type { TableRef } from '../types';\nimport type { useTable } from './useTable';\n\n/** The setters bypass the on*Change callbacks, as they always have. */\nexport function useTableImperativeHandle(\n ref: Ref<TableRef> | undefined,\n table: ReturnType<typeof useTable<any>>,\n) {\n const { actions } = table;\n\n useImperativeHandle(\n ref,\n () => ({\n getSort: () => actions.getState().sort,\n setSort: table.setSortInternal,\n getSelection: () => actions.getState().selection,\n setSelection: table.setSelectionInternal,\n getExpanded: () => actions.getState().expanded,\n setExpanded: table.setExpandedInternal,\n getHiddenColumns: () => actions.getState().hiddenColumns,\n setHiddenColumns: table.setHiddenColumnsInternal,\n getFilterValues: () => actions.getState().filterValues,\n setFilterValues: table.setFilterValuesInternal,\n }),\n [actions],\n );\n}\n","import { useCallback, useRef, useState } from 'react';\nimport type { TableProps } from '../types';\n\n/** Resetting remounts the table state under a new key and reports the defaults. */\nexport function useTableReset<T>(props: TableProps<T>) {\n const [resetKey, setResetKey] = useState(0);\n const latestProps = useRef(props);\n latestProps.current = props;\n\n const onReset = useCallback(() => {\n const props = latestProps.current;\n setResetKey((key) => key + 1);\n\n if (props.sort === undefined) props.onSortChange?.(props.defaultSort ?? []);\n if (props.expanded === undefined) props.onExpandedChange?.(props.defaultExpanded ?? new Set());\n if (props.selection === undefined) {\n props.onSelectionChange?.(props.defaultSelection ?? new Set());\n }\n if (props.hiddenColumns === undefined) {\n props.onHiddenColumnsChange?.(props.defaultHiddenColumns ?? new Set());\n }\n props.onReset?.('table');\n }, []);\n\n return [resetKey, onReset] as const;\n}\n","import type React from 'react';\nimport { useEffect, useRef, type HTMLProps } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useColumnContext, useTableStructure } from '../state/context';\n\nexport const columnWidthVariable = (index: number) => `--column-width-${index}`;\n\nexport function ResizeHandle() {\n const { props, visibleColumns, actions } = useTableStructure();\n const columnId = useColumnContext();\n const enabled = props.enableColumnResize;\n const index = visibleColumns.findIndex((column) => column.id === columnId);\n const table = useRef<HTMLElement | null>(null);\n const hasMoved = useRef(false);\n\n // The drag width lives in a CSS variable, keyed by visible index, so dragging renders nothing.\n const variable = columnWidthVariable(index);\n useEffect(\n () => () => {\n table.current?.style.removeProperty(variable);\n },\n [variable],\n );\n\n function onPointerDown(event: React.PointerEvent<HTMLDivElement>) {\n event.stopPropagation();\n event.currentTarget.setPointerCapture(event.pointerId);\n table.current = event.currentTarget.closest('[data-schummar-table]');\n hasMoved.current = false;\n }\n\n function widthAt(event: React.PointerEvent<HTMLDivElement>) {\n const header = event.currentTarget.parentElement!;\n const minWidth = visibleColumns.find((column) => column.id === columnId)?.filter ? 80 : 50;\n return Math.max(event.clientX - header.getBoundingClientRect().left + 5, minWidth);\n }\n\n function onPointerMove(event: React.PointerEvent<HTMLDivElement>) {\n event.stopPropagation();\n if (!event.currentTarget.hasPointerCapture(event.pointerId)) return;\n hasMoved.current = true;\n table.current?.style.setProperty(variable, `${widthAt(event)}px`);\n }\n\n function onPointerUp(event: React.PointerEvent<HTMLDivElement>) {\n event.stopPropagation();\n if (!event.currentTarget.hasPointerCapture(event.pointerId)) return;\n event.currentTarget.releasePointerCapture(event.pointerId);\n // The committed width renders before the next paint, so dropping the variable doesn't flash.\n table.current?.style.removeProperty(variable);\n if (hasMoved.current) actions.setColumnWidth(columnId, `${widthAt(event)}px`);\n }\n\n function onDoubleClick(event: React.MouseEvent) {\n actions.setColumnWidth(columnId, event.getModifierState('Control') ? undefined : 'max-content');\n }\n\n if (!enabled) {\n return null;\n }\n\n return (\n <ResizeHandleView\n enabled={enabled}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n onDoubleClick={onDoubleClick}\n />\n );\n}\n\nexport function ResizeHandleView({\n enabled,\n ...props\n}: HTMLProps<HTMLDivElement> & { enabled?: boolean | 'visualOnly' }) {\n const className = useTheme((theme) => theme.classes?.columnDivider);\n const styles = useTheme((theme) => theme.styles?.columnDivider);\n\n return (\n <div\n className={className}\n css={[\n {\n alignSelf: 'stretch',\n padding: '0 5px',\n cursor: enabled === true ? '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 '@media (pointer: coarse)': {\n pointerEvents: 'none',\n },\n },\n styles,\n ]}\n {...props}\n />\n );\n}\n","import { createContext, useContext, useEffect, useRef, useState } from 'react';\nimport { flushSync } from 'react-dom';\n\nconst FRAME_BUDGET_MS = 8;\n\ninterface Task {\n rowIndex: number;\n reveal: () => void;\n}\n\n/**\n * Spreads the rendering of deferred cells over time, a row at a time. Rows render synchronously until\n * the current frame's budget is used up; the deferred cells of the rest show a placeholder and get\n * revealed here, visible rows first, in slices of the same budget. Slices run as separate tasks, so the browser paints and handles input\n * in between, like React's own scheduler.\n */\nexport class CellScheduler {\n private frameStart: number | undefined;\n private queue = new Set<Task>();\n private visible = { start: 0, end: Infinity };\n private isScheduled = false;\n private channel: MessageChannel | undefined;\n // Pessimistic until measured, so the first batch is a single row.\n private costPerRow = FRAME_BUDGET_MS;\n\n /** Called while rendering a row for the first time: whether it may render right away. */\n claim(): boolean {\n const now = performance.now();\n if (this.frameStart === undefined) {\n this.frameStart = now;\n requestAnimationFrame(() => {\n this.frameStart = undefined;\n });\n }\n return now - this.frameStart < FRAME_BUDGET_MS;\n }\n\n /** Returns a function that removes the task again, e.g. when its cell unmounts. */\n enqueue(task: Task) {\n this.queue.add(task);\n this.schedule();\n return () => {\n this.queue.delete(task);\n };\n }\n\n setVisibleRange(start: number, end: number) {\n this.visible = { start, end };\n }\n\n dispose() {\n this.queue.clear();\n }\n\n private schedule() {\n if (this.isScheduled) return;\n this.isScheduled = true;\n if (!this.channel) {\n this.channel = new MessageChannel();\n this.channel.port1.onmessage = this.run;\n }\n this.channel.port2.postMessage(null);\n }\n\n private isVisible(task: Task) {\n return task.rowIndex >= this.visible.start && task.rowIndex <= this.visible.end;\n }\n\n private next(count: number) {\n return [...this.queue]\n .sort(\n (a, b) => Number(this.isVisible(b)) - Number(this.isVisible(a)) || a.rowIndex - b.rowIndex,\n )\n .slice(0, count);\n }\n\n private run = () => {\n this.isScheduled = false;\n const start = performance.now();\n\n while (this.queue.size > 0) {\n const remaining = FRAME_BUDGET_MS - (performance.now() - start);\n if (remaining <= 0) break;\n\n const batch = this.next(Math.max(1, Math.floor(remaining / this.costPerRow)));\n const batchStart = performance.now();\n flushSync(() => {\n for (const task of batch) {\n this.queue.delete(task);\n task.reveal();\n }\n });\n const cost = (performance.now() - batchStart) / batch.length;\n this.costPerRow = this.costPerRow * 0.7 + cost * 0.3;\n }\n\n if (this.queue.size > 0) this.schedule();\n };\n}\n\nexport const CellSchedulerContext = createContext<CellScheduler | null>(null);\n\nexport function useCellScheduler() {\n const [scheduler] = useState(() => new CellScheduler());\n useEffect(() => () => scheduler.dispose(), [scheduler]);\n return scheduler;\n}\n\n/** Whether a row with deferred cells renders them. Once revealed, it stays revealed. */\nexport function useReveal(deferred: boolean, rowIndex: number) {\n const scheduler = useContext(CellSchedulerContext);\n const [revealed, setRevealed] = useState(() => !deferred || !scheduler || scheduler.claim());\n const task = useRef<Task>({ rowIndex, reveal: () => setRevealed(true) });\n task.current.rowIndex = rowIndex;\n\n useEffect(() => {\n if (revealed || !scheduler) return;\n return scheduler.enqueue(task.current);\n }, [revealed, scheduler]);\n\n return revealed;\n}\n","import type { ReactElement, ReactNode } from 'react';\nimport { memo, useLayoutEffect } from 'react';\nimport type { InternalColumn } from '../types';\nimport type { RowConfig } from './row';\n\nfunction wrapText(content: ReactNode, className: string) {\n if (typeof content === 'string') {\n return (\n <span className={className} title={content}>\n {content}\n </span>\n );\n }\n return content;\n}\n\nexport const Cell = memo(function Cell<T>({\n column,\n placeholder,\n value,\n rowIndex,\n config,\n}: {\n column: InternalColumn<T, unknown>;\n /** A deferred cell whose row hasn't been revealed yet. */\n placeholder: boolean;\n value: T;\n rowIndex: number;\n config: RowConfig<T>;\n}) {\n const { styles, wrapCell } = config;\n const className = styles.cells.get(column.id)!(value, rowIndex);\n\n useLayoutEffect(() => {\n config.debugRender(placeholder ? 'defer cell' : 'render cell', column.id);\n });\n\n if (placeholder) {\n return (\n <div\n className={className}\n data-deferred=\"\"\n style={{ boxSizing: 'border-box', minHeight: config.placeholderHeight }}\n />\n );\n }\n\n const columnValue = column.value(value);\n const content = column.renderCell(columnValue, value);\n\n return (\n <div className={className}>\n {wrapCell ? wrapCell(content, columnValue, value, rowIndex) : wrapText(content, styles.text)}\n </div>\n );\n}) as <T>(props: {\n column: InternalColumn<T, unknown>;\n placeholder: boolean;\n value: T;\n rowIndex: number;\n config: RowConfig<T>;\n}) => ReactElement;\n","import type { RowConfig } from './row';\n\nexport function Details<T>({\n value,\n rowIndex,\n config,\n}: {\n value: T;\n rowIndex: number;\n config: RowConfig<T>;\n}) {\n const { rowDetails, styles } = config;\n const details = rowDetails instanceof Function ? rowDetails(value, rowIndex) : rowDetails;\n if (!details) return null;\n\n return <div className={styles.details(value, rowIndex)}>{details}</div>;\n}\n","import { css } from '@emotion/react';\nimport type { MouseEvent, ReactElement } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useTableActions } from '../state/context';\nimport { useLibraryClassName } from '../theme/emotion';\nimport type { Id } from '../types';\n\nconst spinnerCss = css({ margin: '0 var(--spacing)' });\n\nconst chevronCss = css({\n display: 'inline-flex',\n transition: 'all 300ms',\n transform: 'rotate3d(0, 0, 1, 0deg)',\n});\n\nconst expandedChevronCss = css({ transform: 'rotate3d(0, 0, 1, 90deg)' });\n\nexport function ExpandControl({\n itemId,\n expanded,\n hasChildren,\n hasDeferredChildren,\n}: {\n itemId: Id;\n expanded: boolean;\n hasChildren: boolean;\n hasDeferredChildren?: boolean;\n}): ReactElement {\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 const actions = useTableActions();\n const libraryClass = useLibraryClassName();\n\n function toggle(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n actions.toggleExpanded(itemId);\n }\n\n if (expanded && hasDeferredChildren && !hasChildren) {\n return <Spinner className={libraryClass(spinnerCss)} />;\n }\n\n return (\n <IconButton onClick={toggle}>\n <span className={libraryClass(chevronCss, expanded && expandedChevronCss)}>\n <ChevronRight />\n </span>\n </IconButton>\n );\n}\n","import { css } from '@emotion/react';\nimport { memo, useContext } from 'react';\nimport type React from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { SelectionContext, useTableActions, useTableContext } from '../state/context';\nimport { useUserClassName } from '../theme/emotion';\nimport type { Id } from '../types';\n\n// In the app cache, like a user override, so it beats the theme Checkbox's own colour.\nconst checkboxCss = css({ justifySelf: 'start', color: '#c9cfda' });\n\nexport const SelectComponent = memo(function SelectComponent({ itemId }: { itemId: Id }) {\n const selected = useContext(SelectionContext).has(itemId);\n const Checkbox = useTheme((t) => t.components.Checkbox);\n const overrideClass = useUserClassName();\n const actions = useTableActions();\n\n return (\n <Checkbox\n className={overrideClass(checkboxCss)}\n checked={selected}\n onChange={(event: React.ChangeEvent) =>\n actions.toggleSelection(itemId, { range: (event.nativeEvent as MouseEvent).shiftKey })\n }\n />\n );\n});\n\nexport function SelectAll() {\n const Checkbox = useTheme((t) => t.components.Checkbox);\n const overrideClass = useUserClassName();\n const { activeItems, selection, actions } = useTableContext();\n const selected = activeItems.length > 0 && activeItems.every((item) => selection.has(item.id));\n\n return (\n <Checkbox\n className={overrideClass(checkboxCss)}\n checked={selected}\n onChange={() => actions.toggleSelection(undefined)}\n />\n );\n}\n","import { memo, useLayoutEffect, type ReactElement, type ReactNode, type RefCallback } from 'react';\nimport { ColumnContext } from '../state/context';\nimport type { Id, InternalColumn, TableProps, WrapRowProps } from '../types';\nimport { Cell } from './cell';\nimport { useReveal } from './cellScheduler';\nimport { Details } from './details';\nimport { ExpandControl } from './expandControl';\nimport type { RowStyles } from './rowStyles';\nimport { SelectComponent } from './selectComponent';\n\n/** Everything rows need from the table props. Changing it renders every row. */\nexport interface RowConfig<T> {\n styles: RowStyles<T>;\n /** Columns whose cells render progressively. */\n deferredColumns: Set<Id>;\n placeholderHeight: number;\n columns: InternalColumn<T, unknown>[];\n enableSelection: boolean | undefined;\n rowAction: TableProps<T>['rowAction'];\n rowDetails: TableProps<T>['rowDetails'];\n wrapRow: TableProps<T>['wrapRow'];\n wrapCell: TableProps<T>['wrapCell'];\n hasDeferredChildren: TableProps<T>['hasDeferredChildren'];\n debugRender: (...output: any) => void;\n}\n\ninterface RowProps<T> {\n id: Id;\n value: T;\n rowIndex: number;\n depth: number;\n hasChildren: boolean;\n expanded: boolean;\n config: RowConfig<T>;\n measureRef?: RefCallback<HTMLElement>;\n}\n\nconst defaultWrapRow = (props: WrapRowProps) => <div {...props} />;\n\nexport const Row = memo(function Row<T>({\n id,\n value,\n rowIndex,\n depth,\n hasChildren,\n expanded,\n config,\n measureRef,\n}: RowProps<T>): ReactElement {\n const { styles, columns, enableSelection, rowAction, rowDetails, hasDeferredChildren } = config;\n const wrapRow = config.wrapRow ?? defaultWrapRow;\n\n useLayoutEffect(() => {\n config.debugRender('render row', id);\n });\n\n const fillClassName = styles.fillCell(value, rowIndex);\n const revealed = useReveal(config.deferredColumns.size > 0, rowIndex);\n const deferred = hasDeferredChildren?.(value) ?? false;\n const action = rowAction instanceof Function ? rowAction(value, rowIndex) : rowAction;\n const hasDetails = rowDetails instanceof Function ? !!rowDetails(value, rowIndex) : !!rowDetails;\n\n const children: ReactNode = (\n <>\n <div className={fillClassName} />\n\n <div className={styles.firstCell(value, rowIndex)}>\n {depth > 0 && <div style={{ width: depth * 20 }} />}\n\n {enableSelection && <SelectComponent itemId={id} />}\n\n {(hasChildren || deferred || hasDetails) && (\n <ExpandControl\n itemId={id}\n expanded={expanded}\n hasChildren={hasChildren}\n hasDeferredChildren={deferred}\n />\n )}\n\n {action}\n </div>\n\n {columns.map((column) => (\n <ColumnContext.Provider key={column.id} value={column.id}>\n <Cell\n column={column}\n placeholder={!revealed && config.deferredColumns.has(column.id)}\n value={value}\n rowIndex={rowIndex}\n config={config}\n />\n </ColumnContext.Provider>\n ))}\n\n <div className={fillClassName} />\n\n {expanded && hasDetails && <Details value={value} rowIndex={rowIndex} config={config} />}\n </>\n );\n\n return wrapRow(\n {\n ref: measureRef ?? null,\n 'data-index': rowIndex,\n className: styles.row(value, rowIndex),\n children,\n },\n value,\n rowIndex,\n ) as ReactElement;\n}) as <T>(props: RowProps<T>) => ReactElement;\n","import { css, type Interpolation } from '@emotion/react';\nimport { useMemo } from 'react';\nimport { columnTheme } from '../hooks/useTheme';\nimport { cx } from '../misc/helpers';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { useLibraryClassName, useUserClassName } from '../theme/emotion';\nimport type { Id, InternalColumn, TableTheme } from '../types';\n\ntype ClassOf<T> = (value: T, index: number) => string;\n\n/** Class names for everything a row renders, resolved once per theme and column change. */\nexport interface RowStyles<T> {\n row: ClassOf<T>;\n fillCell: ClassOf<T>;\n firstCell: ClassOf<T>;\n cells: Map<Id, ClassOf<T>>;\n details: ClassOf<T>;\n text: string;\n}\n\nconst rowCss = css({ gridColumn: '1 / -1', display: 'grid', gridTemplateColumns: 'subgrid' });\n\nexport function useRowStyles<T>(\n theme: TableTheme<T>,\n columns: InternalColumn<T, unknown>[],\n): RowStyles<T> {\n const libraryClass = useLibraryClassName();\n const userClass = useUserClassName();\n\n return useMemo(() => {\n // Static parts are resolved here; only function classes and styles run per row or cell.\n const cellClassOf = ({ classes, styles }: TableTheme<T>, baseClass: string): ClassOf<T> => {\n const { cell: cellClass, evenCell, oddCell } = classes ?? {};\n const { cell: cellStyle, evenCell: evenStyle, oddCell: oddStyle } = styles ?? {};\n\n if (!(cellClass instanceof Function) && !(cellStyle instanceof Function)) {\n const even = cx(baseClass, cellClass, evenCell, userClass(cellStyle, evenStyle));\n const odd = cx(baseClass, cellClass, oddCell, userClass(cellStyle, oddStyle));\n return (_value, index) => (index % 2 === 0 ? even : odd);\n }\n\n return (value, index) => {\n const isEven = index % 2 === 0;\n return cx(\n baseClass,\n cellClass instanceof Function ? cellClass(value, index) : cellClass,\n isEven ? evenCell : oddCell,\n userClass(\n cellStyle instanceof Function ? cellStyle(value, index) : cellStyle,\n isEven ? evenStyle : oddStyle,\n ),\n );\n };\n };\n\n const elementClassOf = (\n baseClass: string,\n className: string | ((value: T, index: number) => string | undefined) | undefined,\n style: Interpolation<any> | ((value: T, index: number) => Interpolation<any>),\n ): ClassOf<T> => {\n if (!(className instanceof Function) && !(style instanceof Function)) {\n const result = cx(baseClass, className, userClass(style));\n return () => result;\n }\n return (value, index) =>\n cx(\n baseClass,\n className instanceof Function ? className(value, index) : className,\n userClass(style instanceof Function ? style(value, index) : style),\n );\n };\n\n const cellBase = libraryClass(defaultClasses.cell);\n\n return {\n row: elementClassOf(libraryClass(rowCss), theme.classes?.row, theme.styles?.row),\n fillCell: cellClassOf(theme, libraryClass(defaultClasses.cellFill)),\n firstCell: cellClassOf(theme, libraryClass(defaultClasses.cell, defaultClasses.firstCell)),\n cells: new Map(\n columns.map((column) => [column.id, cellClassOf(columnTheme(theme, column), cellBase)]),\n ),\n details: elementClassOf(\n libraryClass(defaultClasses.details),\n theme.classes?.details,\n theme.styles?.details,\n ),\n text: libraryClass(defaultClasses.text),\n };\n }, [libraryClass, userClass, theme, columns]);\n}\n","import { useTheme } from '../hooks/useTheme';\nimport { useTableActions } from '../state/context';\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 actions = useTableActions<T>();\n\n return (\n <div css={defaultClasses.clearFiltersButton}>\n <Button variant=\"outlined\" onClick={() => actions.clearFilters()}>\n {textClearFilters}\n </Button>\n </div>\n );\n}\n","import { columnTheme, useTheme } from '../hooks/useTheme';\nimport { useColumnContext, useTableStructure } from '../state/context';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\n\nexport function ColumnFooter() {\n const columnId = useColumnContext();\n const { activeColumns } = useTableStructure();\n const column = activeColumns.find((column) => column.id === columnId);\n const { classes, styles } = useTheme((theme) => columnTheme(theme, column));\n\n return (\n <div className={classes?.footerCell} css={[defaultClasses.footerCell, styles?.footerCell]}>\n {column?.footer}\n </div>\n );\n}\n","import { memo } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { ColumnContext, useTableStructure } from '../state/context';\nimport { filteredColumns, isActiveFilter } from '../state/useFilters';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport ClearFiltersButton from './clearFiltersButton';\nimport { ColumnFooter } from './columnFooter';\n\n// Memoized so that rendering the rows (e.g. on selection) leaves it alone.\nexport const TableFooter = memo(function TableFooter() {\n const { props, visibleColumns, activeColumns, filterValues } = useTableStructure();\n const classes = useTheme((t) => t.classes?.footerCell);\n const styles = useTheme((t) => t.styles?.footerCell);\n const { stickyFooter, enableClearFiltersButton } = props;\n\n const hasActiveFilters = filteredColumns(props, visibleColumns).some((column) =>\n isActiveFilter(column.filter, filterValues.get(column.id)),\n );\n const hasFooter = activeColumns.some((column) => column.footer);\n\n return (\n <>\n {enableClearFiltersButton && hasActiveFilters && <ClearFiltersButton />}\n\n {hasFooter && (\n <div\n css={[\n { gridColumn: '1 / -1', display: 'grid', gridTemplateColumns: 'subgrid' },\n stickyFooter && defaultClasses.stickyBottom,\n stickyFooter instanceof Object && stickyFooter,\n ]}\n >\n <div className={classes} css={[defaultClasses.footerFill, styles]} />\n <div className={classes} css={[defaultClasses.footerFill, styles]} />\n\n {visibleColumns.map((column) => (\n <ColumnContext.Provider key={column.id} value={column.id}>\n <ColumnFooter />\n </ColumnContext.Provider>\n ))}\n\n <div className={classes} css={[defaultClasses.footerFill, styles]} />\n </div>\n )}\n </>\n );\n});\n","import { useEffect, useMemo, useState, type ReactElement } from 'react';\nimport { debounce } from '../misc/debounce';\nimport { toSingles, uniq } from '../misc/helpers';\nimport { useTableStructure } from '../state/context';\nimport type { InternalColumn } from '../types';\n\n/** Renders a column's filter UI. Changes apply after the filter's `debounce`, or on unmount. */\nexport function FilterPanel<T>({\n column,\n close,\n}: {\n column: InternalColumn<T, unknown>;\n close: () => void;\n}): ReactElement | null {\n const { filterValues, items, actions } = useTableStructure<T>();\n const [draft, setDraft] = useState<{ value: unknown }>();\n const { filter } = column;\n const delay = filter?.debounce ?? 0;\n\n const commit = useMemo(\n () =>\n debounce((value: unknown) => {\n actions.setFilterValue(column.id, value);\n setDraft(undefined);\n }, delay),\n [actions, column.id, delay],\n );\n\n useEffect(() => () => commit.flush(), [commit]);\n\n const getValues = useMemo(() => {\n let values: unknown[] | undefined;\n return () =>\n (values ??= uniq(\n items.flatMap((item) =>\n toSingles(column.filterBy(column.value(item.value), item.value) as unknown[]),\n ),\n ));\n }, [items, column]);\n\n if (!filter) return null;\n\n function onChange(value: unknown) {\n if (delay > 0) {\n setDraft({ value });\n commit(value);\n } else {\n actions.setFilterValue(column.id, value);\n }\n }\n\n const { Component } = filter;\n\n return (\n <Component\n value={draft ? draft.value : filterValues.get(column.id)}\n onChange={onChange}\n close={close}\n options={filter.options}\n getValues={getValues}\n />\n );\n}\n","import { ClassNames } from '@emotion/react';\nimport { useState, type ReactElement } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useColumnContext, useTableStructure } from '../state/context';\nimport { isActiveFilter } from '../state/useFilters';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport type { InternalColumn } from '../types';\nimport { FilterPanel } from './filterPanel';\n\nexport function FilterControl<T>(): ReactElement | null {\n const { filterValues, visibleColumns, actions } = useTableStructure<T>();\n const columnId = useColumnContext();\n const column = visibleColumns.find((column) => column.id === columnId);\n\n const IconButton = useTheme((t) => t.components.IconButton);\n const FilterList = useTheme((t) => t.icons.FilterList);\n const ArrowDropDown = useTheme((t) => t.icons.ArrowDropDown);\n\n const [anchor, setAnchor] = useState<Element | null>(null);\n\n if (!column?.filter) return null;\n\n const isActive = isActiveFilter(column.filter, filterValues.get(columnId));\n\n return (\n <>\n <IconButton\n onClick={(event) => setAnchor(event.currentTarget)}\n onContextMenu={(event) => {\n actions.setFilterValue(columnId, undefined);\n event.preventDefault();\n return false;\n }}\n css={[{ color: '#b0bac9' }, isActive && { color: 'var(--primaryMain) !important' }]}\n >\n {isActive ? <FilterList /> : <ArrowDropDown />}\n </IconButton>\n\n {anchor && (\n <FilterPopover anchor={anchor} onClose={() => setAnchor(null)} column={column}>\n <FilterPanel column={column} close={() => setAnchor(null)} />\n </FilterPopover>\n )}\n </>\n );\n}\n\nexport function FilterPopover<T>({\n anchor,\n onClose,\n column,\n children,\n}: {\n anchor: Element;\n onClose: () => void;\n column?: InternalColumn<T, unknown>;\n children: React.ReactNode;\n}): ReactElement {\n const Popover = useTheme((t) => t.components.Popover);\n const classes = useTheme((t) => t.classes);\n const styles = useTheme((t) => t.styles);\n const cssVariables = useCssVariables();\n const filterClassNames = column?.filter?.classNames;\n\n return (\n // Keeps pointer events from reaching the header, e.g. the resize handle.\n <div\n onPointerDown={(event) => event.stopPropagation()}\n onPointerMove={(event) => event.stopPropagation()}\n >\n <ClassNames>\n {({ css, cx }) => (\n <Popover\n open\n onClose={onClose}\n anchorEl={anchor}\n css={[cssVariables, styles?.popover]}\n className={cx(classes?.popover, filterClassNames?.popover)}\n backdropClassName={cx(\n classes?.popoverBackdrop,\n filterClassNames?.popoverBackdrop,\n css(styles?.popoverBackdrop),\n )}\n >\n {children}\n </Popover>\n )}\n </ClassNames>\n </div>\n );\n}\n","import type { ReactElement, ReactNode } from 'react';\nimport type React from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useColumnContext, useTableStructure } from '../state/context';\n\nexport function SortComponent<T>({ children }: { children: ReactNode }): ReactElement {\n const { sort, activeColumns, props, actions } = useTableStructure<T>();\n const columnId = useColumnContext();\n const Badge = useTheme((t) => t.components.Badge);\n const ArrowUpward = useTheme((t) => t.icons.ArrowUpward);\n\n const sortIndex = sort.findIndex((s) => s.columnId === columnId);\n const direction = sort[sortIndex]?.direction;\n const index = sortIndex >= 0 && sort.length > 1 ? sortIndex + 1 : undefined;\n const sortDisabled =\n activeColumns.find((column) => column.id === columnId)?.disableSort ?? props.disableSort;\n\n function toggle(event: React.MouseEvent, off?: boolean) {\n if (sortDisabled) {\n return;\n }\n\n const newDirection = direction === 'asc' ? 'desc' : 'asc';\n const newSort =\n event.getModifierState('Control') || off ? sort.filter((s) => s.columnId !== columnId) : [];\n if (!off) {\n newSort.push({\n columnId,\n direction: newDirection,\n });\n }\n\n actions.setSort(newSort);\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 type { ReactElement } from 'react';\nimport { columnTheme, useTheme } from '../hooks/useTheme';\nimport { useColumnContext, useTableStructure } from '../state/context';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { FilterControl } from './filterControl';\nimport { ResizeHandle } from './resizeHandle';\nimport { SortComponent } from './sortComponent';\n\nexport function ColumnHeader(): ReactElement {\n const columnId = useColumnContext();\n const { activeColumns } = useTableStructure();\n const column = activeColumns.find((column) => column.id === columnId);\n const { classes, styles } = useTheme((theme) => columnTheme(theme, column));\n\n return (\n <div\n data-column-header=\"\"\n className={classes?.headerCell}\n css={[\n defaultClasses.headerCell,\n { position: 'relative', userSelect: 'none' },\n styles?.headerCell,\n ]}\n >\n <SortComponent>{column?.header}</SortComponent>\n <div css={{ flex: 1 }} />\n <FilterControl />\n <ResizeHandle />\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nexport function FormControlLabel({\n control,\n label,\n disabled,\n}: {\n control: ReactNode;\n label: ReactNode;\n disabled?: boolean;\n}) {\n return (\n <label\n css={[\n {\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n userSelect: 'none',\n\n '& > *': {\n cursor: 'pointer',\n },\n },\n disabled && { color: 'rgba(0, 0, 0, 0.26)' },\n ]}\n >\n {control}\n <span css={{ marginLeft: 'var(--spacing)' }}>{label}</span>\n </label>\n );\n}\n","import { useState, type ReactElement } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useTableStructure } from '../state/context';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport type { InternalColumn } from '../types';\nimport { FormControlLabel } from './formControlLabel';\n\nexport function ColumnSelection<T>(): ReactElement {\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 { columns, hiddenColumns, actions } = useTableStructure<T>();\n\n const [anchorElement, setAnchorElement] = useState<Element | null>(null);\n\n const toggle = (column?: InternalColumn<T, unknown>, state?: boolean) => {\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 actions.setHiddenColumns(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={() => actions.resetTable()}>\n {resetAll}\n </Button>\n </div>\n\n {columns.map((column) => (\n <FormControlLabel\n key={column.id}\n control={\n <Checkbox\n checked={!(column.hidden ?? hiddenColumns.has(column.id))}\n onChange={() => toggle(column)}\n disabled={column.hidden !== undefined}\n />\n }\n label={column.header}\n ></FormControlLabel>\n ))}\n </div>\n </Popover>\n </>\n );\n}\n","import { useContext, useState, type ReactElement } from 'react';\nimport { ExportOptions, ExporterEntry } from '../exporters/exporter';\nimport { useTheme } from '../hooks/useTheme';\nimport { useTableStructure } from '../state/context';\nimport { TableSettingsContext } from '../misc/tableSettings';\nimport { useCssVariables } from '../theme/useCssVariables';\n\nexport function Export<T>(): ReactElement {\n const { exporters: contextExporters } = useContext(TableSettingsContext);\n const { props, actions } = useTableStructure<T>();\n const Button = useTheme((t) => t.components.Button);\n const IconButton = useTheme((t) => t.components.IconButton);\n const Popover = useTheme((t) => t.components.Popover);\n const ExportIcon = useTheme((t) => t.icons.Export);\n const Clipboard = useTheme((t) => t.icons.Clipboard);\n const exportTitle = useTheme((t) => t.text.exportTitle);\n const exportCopy = useTheme((t) => t.text.exportCopy);\n const exportDownload = useTheme((t) => t.text.exportDownload);\n const classes = useTheme((t) => t.classes);\n const cssVariables = useCssVariables();\n\n const { all, exporters }: ExportOptions =\n typeof props.enableExport === 'boolean' || props.enableExport === undefined\n ? { all: false, exporters: contextExporters }\n : props.enableExport;\n\n const [anchor, setAnchor] = useState<Element | null>(null);\n\n function execute({ action, exporter }: ExporterEntry) {\n const { activeColumns, activeItems, selection, items } = actions.getState();\n const columns = activeColumns.map((column) => column.exportHeader);\n\n let exportedItems = items;\n if (!all) {\n exportedItems = activeItems;\n\n if (selection.size > 0) {\n exportedItems = exportedItems.filter((item) => selection.has(item.id));\n }\n }\n\n const rows = exportedItems.map((item) =>\n activeColumns.map((column) => column.exportCell(column.value(item.value), item.value)),\n );\n\n if (action === 'copy') {\n const data = exporter.exportToString(columns, rows);\n navigator.clipboard.writeText(data).catch((error: unknown) => {\n console.error('Failed to copy the export to the clipboard:', error);\n });\n } else {\n Promise.resolve(exporter.exportToBlob(columns, rows))\n .then((blob) => {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = `export.${exporter.fileEnding}`;\n document.body.append(a);\n a.click();\n a.remove();\n URL.revokeObjectURL(url);\n })\n .catch((error: unknown) => {\n console.error('Failed to export:', error);\n });\n }\n }\n\n return (\n <>\n <IconButton onClick={(event) => setAnchor(anchor ? null : event.currentTarget)}>\n <ExportIcon css={!!anchor && { color: 'var(--primaryMain)' }} />\n </IconButton>\n\n <Popover\n open={!!anchor}\n onClose={() => setAnchor(null)}\n anchorEl={anchor}\n css={cssVariables}\n className={classes?.popover}\n backdropClassName={classes?.popoverBackdrop}\n >\n <div\n css={{\n padding: `calc(var(--spacing) * 2)`,\n display: 'grid',\n justifyItems: 'stretch',\n gap: 'var(--spacing)',\n\n '& > *': {\n justifyContent: 'start',\n },\n }}\n >\n <div css={{ marginBottom: 'var(--spacing)' }}>{exportTitle}</div>\n\n {exporters.map((entry, index) => (\n <Button\n key={index}\n startIcon={entry.action === 'copy' ? <Clipboard /> : <ExportIcon />}\n onClick={() => execute(entry)}\n >\n {entry.action === 'copy' ? exportCopy : exportDownload} (.{entry.exporter.type})\n </Button>\n ))}\n </div>\n </Popover>\n </>\n );\n}\n","import { useState, type ReactElement } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useTableStructure } from '../state/context';\nimport { isActiveFilter } from '../state/useFilters';\nimport type { Id } from '../types';\nimport { FilterPanel } from './filterPanel';\nimport { FilterPopover } from './filterControl';\n\n/** Lets users edit the filters of columns that are not visible, see `enableHiddenColumnFilters`. */\nexport function HiddenColumnFilters<T>(): ReactElement | null {\n const { props, visibleColumns, filterValues, actions } = useTableStructure<T>();\n const IconButton = useTheme((t) => t.components.IconButton);\n const Button = useTheme((t) => t.components.Button);\n const FilterList = useTheme((t) => t.icons.FilterList);\n const title = useTheme((t) => t.text.hiddenColumnFilters);\n\n const [anchor, setAnchor] = useState<Element | null>(null);\n const [selected, setSelected] = useState<Id>();\n\n const columns = props.columns.filter(\n (column) => column.filter && !visibleColumns.some((visible) => visible.id === column.id),\n );\n if (columns.length === 0) return null;\n\n const isActive = (columnId: Id) =>\n isActiveFilter(\n columns.find((column) => column.id === columnId)?.filter,\n filterValues.get(columnId),\n );\n const anyActive = columns.some((column) => isActive(column.id));\n const selectedColumn = columns.find((column) => column.id === selected);\n\n function close() {\n setAnchor(null);\n setSelected(undefined);\n }\n\n const color = (active: boolean) => (active ? 'var(--primaryMain)' : '#b0bac9');\n\n return (\n <>\n <IconButton\n onClick={(event) => setAnchor(event.currentTarget)}\n css={{ color: color(anyActive) }}\n >\n <FilterList />\n </IconButton>\n\n {anchor && (\n <FilterPopover anchor={anchor} onClose={close} column={selectedColumn}>\n {selectedColumn ? (\n <div css={{ display: 'grid' }}>\n <Button\n onClick={() => setSelected(undefined)}\n css={{ justifyContent: 'flex-start', color: 'inherit' }}\n >\n ‹ {selectedColumn.header}\n </Button>\n <FilterPanel key={selectedColumn.id} column={selectedColumn} close={close} />\n </div>\n ) : (\n <div\n css={{ padding: 'calc(var(--spacing) * 2)', display: 'grid', gap: 'var(--spacing)' }}\n >\n <div>{title}</div>\n {columns.map((column) => (\n <Button\n key={column.id}\n onClick={() => setSelected(column.id)}\n onContextMenu={(event) => {\n actions.setFilterValue(column.id, undefined);\n event.preventDefault();\n }}\n startIcon={<FilterList css={{ color: color(isActive(column.id)) }} />}\n css={{\n justifyContent: 'flex-start',\n color: isActive(column.id) ? 'var(--primaryMain)' : 'inherit',\n }}\n >\n {column.header}\n </Button>\n ))}\n </div>\n )}\n </FilterPopover>\n )}\n </>\n );\n}\n","import { memo } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { ColumnContext, useTableStructure } from '../state/context';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { ColumnHeader } from './columnHeader';\nimport { ColumnSelection } from './columnSelection';\nimport { Export } from './export';\nimport { HiddenColumnFilters } from './hiddenColumnFilters';\nimport { ResizeHandleView } from './resizeHandle';\nimport { SelectAll } from './selectComponent';\n\n// Memoized so that rendering the rows (e.g. on selection) leaves it alone.\nexport const TableHeader = memo(function TableHeader() {\n const { props, visibleColumns } = useTableStructure();\n const classes = useTheme((t) => t.classes?.headerCell);\n const styles = useTheme((t) => t.styles?.headerCell);\n const { stickyHeader, enableSelection, enableColumnSelection, enableExport } = props;\n const { enableHiddenColumnFilters } = props;\n\n return (\n <div\n css={[\n { gridColumn: '1 / -1', display: 'grid', gridTemplateColumns: 'subgrid' },\n stickyHeader && defaultClasses.sticky,\n stickyHeader instanceof Object && stickyHeader,\n ]}\n >\n <div className={classes} css={[defaultClasses.headerFill, styles]} />\n\n <div className={classes} css={[defaultClasses.headerCell, styles]}>\n {enableSelection && <SelectAll />}\n {enableColumnSelection && <ColumnSelection />}\n {enableExport && <Export />}\n {enableHiddenColumnFilters && <HiddenColumnFilters />}\n\n {(enableSelection ||\n enableColumnSelection ||\n enableExport ||\n enableHiddenColumnFilters) && (\n <>\n <div css={{ flex: 1 }} />\n <ResizeHandleView />\n </>\n )}\n </div>\n\n {visibleColumns.map((column) => (\n <ColumnContext.Provider key={column.id} value={column.id}>\n <ColumnHeader />\n </ColumnContext.Provider>\n ))}\n\n <div className={classes} css={[defaultClasses.headerFill, styles]} />\n </div>\n );\n});\n","import { useVirtualizer, useWindowVirtualizer, type Virtualizer } from '@tanstack/react-virtual';\nimport {\n useContext,\n useLayoutEffect,\n useState,\n type ReactNode,\n type RefCallback,\n type RefObject,\n} from 'react';\nimport { CellSchedulerContext } from './cellScheduler';\nimport type { Id, TableProps } from '../types';\n\ntype VirtualOptions = Exclude<TableProps<unknown>['virtual'], boolean | undefined>;\n\nexport type RenderRow = (index: number, measureRef?: RefCallback<HTMLElement>) => ReactNode;\n\nconst spacerCss = { gridColumn: '1 / -1' } as const;\n\nconst scrolls = (element: HTMLElement) =>\n element.scrollHeight > element.clientHeight && getComputedStyle(element).overflowY !== 'visible';\n\nfunction findScrollRoot(element: HTMLElement): HTMLElement | undefined {\n for (let parent = element.parentElement; parent; parent = parent.parentElement) {\n if (parent === document.documentElement) return undefined;\n if (parent === document.body) {\n // body's overflow applies to the viewport unless <html> sets its own.\n const ownScroller = getComputedStyle(document.documentElement).overflowY !== 'visible';\n return ownScroller && scrolls(parent) ? parent : undefined;\n }\n if (scrolls(parent)) return parent;\n }\n return undefined;\n}\n\n/** Offset of the first row from the start of the scroll root's content. */\nfunction measureScrollMargin(probe: HTMLElement, root: HTMLElement | undefined) {\n if (!root) return probe.getBoundingClientRect().top + window.scrollY;\n return probe.getBoundingClientRect().top - root.getBoundingClientRect().top + root.scrollTop;\n}\n\n/**\n * Finds the scroll root and the rows' offset in it. Both are re-measured when the table or the\n * page layout resizes: a container only becomes a scroll root once its content overflows, and\n * content above the table shifts the offset.\n */\nfunction useScrollRoot(tableRef: RefObject<HTMLElement | null>, probe: HTMLElement | null) {\n const [root, setRoot] = useState<{ element: HTMLElement | undefined; margin: number }>();\n\n useLayoutEffect(() => {\n const table = tableRef.current;\n if (!probe || !table) return;\n\n function update() {\n setRoot((current) => {\n // A container stays the scroll root while it can scroll, even when a filter shrinks the\n // content below its height: switching virtualizers would remount every row.\n const keep =\n current?.element?.contains(probe) &&\n getComputedStyle(current.element).overflowY !== 'visible';\n const element = keep ? current!.element : findScrollRoot(probe!);\n const margin = Math.round(measureScrollMargin(probe!, element));\n return current && current.element === element && current.margin === margin\n ? current\n : { element, margin };\n });\n }\n\n update();\n const observer = new ResizeObserver(update);\n observer.observe(table);\n observer.observe(document.body);\n return () => observer.disconnect();\n }, [tableRef, probe]);\n\n return root;\n}\n\ninterface VirtualRowsProps {\n count: number;\n getKey: (index: number) => Id;\n options: VirtualOptions;\n scrollMargin: number;\n renderRow: RenderRow;\n}\n\nfunction VirtualWindow({\n virtualizer,\n renderRow,\n measure,\n}: {\n virtualizer: Virtualizer<any, HTMLDivElement>;\n renderRow: RenderRow;\n measure: boolean;\n}) {\n 'use no memo';\n const items = virtualizer.getVirtualItems();\n const scheduler = useContext(CellSchedulerContext);\n\n // Deferred cells of rows in the viewport are revealed before those in the overscan.\n useLayoutEffect(() => {\n const { range } = virtualizer;\n if (range) scheduler?.setVisibleRange(range.startIndex, range.endIndex);\n });\n\n const margin = virtualizer.options.scrollMargin;\n const before = items.length ? items[0]!.start - margin : 0;\n const after = items.length\n ? virtualizer.getTotalSize() - (items[items.length - 1]!.end - margin)\n : 0;\n\n return (\n <>\n <div style={{ ...spacerCss, height: before }} />\n {items.map((item) => renderRow(item.index, measure ? virtualizer.measureElement : undefined))}\n <div style={{ ...spacerCss, height: after }} />\n </>\n );\n}\n\nfunction virtualizerOptions({ count, getKey, options, scrollMargin }: VirtualRowsProps) {\n return {\n count,\n getItemKey: getKey,\n estimateSize: () => options.rowHeight ?? options.estimatedRowHeight ?? 40,\n overscan: options.overscan ?? 5,\n scrollMargin,\n };\n}\n\n// The virtualizers return the same mutable object on every render: memoizing on it would freeze\n// the rows, so these must stay out of React Compiler.\nfunction ElementRows(props: VirtualRowsProps & { root: HTMLElement }) {\n 'use no memo';\n const virtualizer = useVirtualizer<HTMLElement, HTMLDivElement>({\n ...virtualizerOptions(props),\n getScrollElement: () => props.root,\n });\n return (\n <VirtualWindow\n virtualizer={virtualizer}\n renderRow={props.renderRow}\n measure={props.options.rowHeight === undefined}\n />\n );\n}\n\nfunction WindowRows(props: VirtualRowsProps) {\n 'use no memo';\n const virtualizer = useWindowVirtualizer<HTMLDivElement>(virtualizerOptions(props));\n return (\n <VirtualWindow\n virtualizer={virtualizer}\n renderRow={props.renderRow}\n measure={props.options.rowHeight === undefined}\n />\n );\n}\n\nexport function VirtualRows({\n tableRef,\n ...props\n}: Omit<VirtualRowsProps, 'scrollMargin'> & { tableRef: RefObject<HTMLElement | null> }) {\n const [probe, setProbe] = useState<HTMLDivElement | null>(null);\n const root = useScrollRoot(tableRef, probe);\n const estimate = props.options.rowHeight ?? props.options.estimatedRowHeight ?? 40;\n\n return (\n <>\n <div ref={setProbe} style={spacerCss} />\n {/* Takes the rows' estimated space until the scroll root is known, so the container that\n will scroll already overflows and gets picked right away. */}\n {!root && <div style={{ ...spacerCss, height: props.count * estimate }} />}\n {root &&\n (root.element ? (\n <ElementRows {...props} root={root.element} scrollMargin={root.margin} />\n ) : (\n <WindowRows {...props} scrollMargin={root.margin} />\n ))}\n </>\n );\n}\n","import { useCallback, useLayoutEffect, useMemo, useRef, type RefCallback } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useTableContext } from '../state/context';\nimport { defaultClasses } from '../theme/defaultTheme/defaultClasses';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport type { TableTheme } from '../types';\nimport { columnWidthVariable } from './resizeHandle';\nimport { CellSchedulerContext, useCellScheduler } from './cellScheduler';\nimport { Row, type RowConfig } from './row';\nimport { useRowStyles } from './rowStyles';\nimport { TableFooter } from './tableFooter';\nimport { TableHeader } from './tableHeader';\nimport { VirtualRows } from './virtualized';\n\nexport function TableGrid<T>({ hidden }: { hidden: boolean }) {\n const state = useTableContext<T>();\n const theme = useTheme((t: TableTheme<T>) => t);\n const { props, visibleColumns, columnWidths, activeItems, expanded } = state;\n const cssVariables = useCssVariables();\n const tableRef = useRef<HTMLDivElement>(null);\n\n const debugRenderRef = useRef(props.debugRender);\n debugRenderRef.current = props.debugRender;\n const debugRender = useCallback((...output: any) => debugRenderRef.current?.(...output), []);\n\n useLayoutEffect(() => {\n debugRender('render table');\n });\n\n const { enableSelection, rowAction, rowDetails, wrapRow, wrapCell, hasDeferredChildren } = props;\n const styles = useRowStyles(theme, visibleColumns);\n const scheduler = useCellScheduler();\n const virtualOptions = props.virtual instanceof Object ? props.virtual : undefined;\n const deferCells = virtualOptions?.deferCells;\n const placeholderHeight = virtualOptions?.rowHeight ?? virtualOptions?.estimatedRowHeight ?? 40;\n const deferredColumns = useMemo(\n () =>\n new Set(\n visibleColumns.filter((column) => column.deferred ?? deferCells).map((column) => column.id),\n ),\n [visibleColumns, deferCells],\n );\n const config = useMemo(\n (): RowConfig<T> => ({\n styles,\n deferredColumns,\n placeholderHeight,\n columns: visibleColumns,\n enableSelection,\n rowAction,\n rowDetails,\n wrapRow,\n wrapCell,\n hasDeferredChildren,\n debugRender,\n }),\n [\n styles,\n deferredColumns,\n placeholderHeight,\n visibleColumns,\n enableSelection,\n rowAction,\n rowDetails,\n wrapRow,\n wrapCell,\n hasDeferredChildren,\n debugRender,\n ],\n );\n\n const renderRow = (index: number, measureRef?: RefCallback<HTMLElement>) => {\n const item = activeItems[index]!;\n return (\n <Row\n key={item.id}\n id={item.id}\n value={item.value}\n rowIndex={index}\n depth={item.depth}\n hasChildren={item.children.length > 0}\n expanded={expanded.has(item.id)}\n config={config}\n measureRef={measureRef}\n />\n );\n };\n\n const getKey = useCallback((index: number) => activeItems[index]!.id, [activeItems]);\n const { fullWidth, virtual } = props;\n\n return (\n <CellSchedulerContext.Provider value={scheduler}>\n <div\n ref={tableRef}\n data-schummar-table=\"\"\n className={theme.classes?.table}\n css={[\n cssVariables,\n defaultClasses.table,\n theme.styles?.table,\n hidden && { visibility: 'hidden' },\n ]}\n style={{\n gridTemplateColumns: [\n fullWidth === 'right' || fullWidth === true ? 'auto' : '0',\n 'max-content',\n ...visibleColumns.map(\n (column, index) =>\n `var(${columnWidthVariable(index)}, ${columnWidths.get(column.id) ?? column.width ?? 'max-content'})`,\n ),\n fullWidth === 'left' || fullWidth === true ? 'auto' : '0',\n ].join(' '),\n }}\n >\n <TableHeader />\n\n {virtual ? (\n <VirtualRows\n tableRef={tableRef}\n count={activeItems.length}\n getKey={getKey}\n options={virtual === true ? {} : virtual}\n renderRow={renderRow}\n />\n ) : (\n activeItems.map((_, index) => renderRow(index))\n )}\n\n <TableFooter />\n </div>\n </CellSchedulerContext.Provider>\n );\n}\n","import { useEffect, useState } from 'react';\nimport { useTheme } from '../hooks/useTheme';\n\nexport function TableLoadingState({ isHydrated }: { isHydrated: boolean }) {\n const [showLoading, setShowLoading] = useState(false);\n const loadingText = useTheme((t) => t.text.loading);\n\n useEffect(() => {\n const handle = setTimeout(() => setShowLoading(true), 500);\n return () => clearTimeout(handle);\n }, []);\n\n return !isHydrated && showLoading ? <div>{loadingText}</div> : null;\n}\n","import type { ReactElement, Ref } from 'react';\nimport { ThemeContext } from '../hooks/useTheme';\nimport {\n SelectionContext,\n TableActionsContext,\n TableContext,\n TableStructureContext,\n} from '../state/context';\nimport { useTable } from '../state/useTable';\nimport { useTableImperativeHandle } from '../state/useTableImperativeHandle';\nimport { useTableReset } from '../state/useTableReset';\nimport type { TableProps, TableRef } from '../types';\nimport { TableGrid } from './tableGrid';\nimport { TableLoadingState } from './tableLoadingState';\n\nexport function Table<T>({ ref, ...props }: TableProps<T> & { ref?: Ref<TableRef> }): ReactElement {\n const [resetKey, onReset] = useTableReset(props);\n return (\n <TableWithState\n key={resetKey}\n props={props}\n tableRef={ref}\n onReset={onReset}\n isReset={resetKey > 0}\n />\n );\n}\n\nfunction TableWithState<T>({\n props,\n tableRef,\n onReset,\n isReset,\n}: {\n props: TableProps<T>;\n tableRef?: Ref<TableRef>;\n onReset: () => void;\n isReset: boolean;\n}): ReactElement {\n const table = useTable(props, onReset, isReset);\n const { context, structure, actions, theme, isHydrated } = table;\n useTableImperativeHandle(tableRef, table);\n\n return (\n <ThemeContext.Provider value={theme}>\n <TableActionsContext.Provider value={actions}>\n <TableStructureContext.Provider value={structure}>\n <TableContext.Provider value={context}>\n <TableLoadingState isHydrated={isHydrated} />\n <SelectionContext.Provider value={context.selection}>\n <TableGrid hidden={!isHydrated} />\n </SelectionContext.Provider>\n </TableContext.Provider>\n </TableStructureContext.Provider>\n </TableActionsContext.Provider>\n </ThemeContext.Provider>\n );\n}\n","import type { ReactNode } from 'react';\nimport { eventHandler } from '../misc/equal';\nimport type { Filter, FilterComponentProps, FilterOptions } from '../types';\n\nexport interface FilterDefinition<TInput, TState, TOptions> {\n isActive(value: TState, options: TOptions): boolean;\n /** `input` is the column's `filterBy` value, see `SingleOrMultiple` and `toSingles`. */\n test(value: TState, input: TInput, options: TOptions): boolean;\n /** Delay in ms before changes made in the UI apply, unless the `debounce` option overrides it. */\n debounce?: number;\n Component(props: FilterComponentProps<TInput, TState, TOptions>): ReactNode;\n}\n\n/**\n * Creates a filter factory, like `textFilter`. `TInput` is what the filter accepts from a column,\n * typically a `SingleOrMultiple<…>`. A `debounce` option overrides the definition's.\n *\n * The definition's functions are shared by every filter created from it and everything else\n * passed goes into `options`, so a filter created inline on every render stays deep equal and\n * doesn't cause refiltering. Keep options to plain data where possible: functions are compared by\n * reference.\n */\nexport function defineFilter<TInput, TState, TOptions extends object = {}>(\n definition: FilterDefinition<TInput, TState, TOptions>,\n) {\n return (input?: FilterOptions<TState> & TOptions): Filter<TInput, TState, TOptions> => {\n const { defaultValue, value, onChange, external, classNames, ...options } =\n input ?? ({} as FilterOptions<TState>);\n\n return {\n isActive: definition.isActive,\n test: definition.test,\n debounce: (options as { debounce?: number }).debounce ?? definition.debounce,\n Component: definition.Component,\n defaultValue,\n value,\n onChange: onChange && eventHandler(onChange),\n external,\n classNames,\n options: options as TOptions,\n };\n };\n}\n","import type { ReactElement } from 'react';\nimport type { DatePickerProps, DateRange } from '../components/datePicker';\nimport { dateIntersect, DatePicker } from '../components/datePicker';\nimport { toSingles } from '../misc/helpers';\nimport type { FilterComponentProps, SingleOrMultiple } from '../types';\nimport { defineFilter } from './defineFilter';\n\n/** An ISO 8601 date or date-time string, e.g. `2024-05-03` or `2024-05-03T13:47:23Z`. */\nexport type ISODate = `${number}-${number}-${number}${string}`;\n\ntype DateValue = Date | DateRange | null;\ntype DateInput = SingleOrMultiple<Date | DateRange | ISODate | null | undefined>;\n\nconst toDate = (x: Date | DateRange | ISODate | null | undefined) =>\n typeof x === 'string' ? new Date(x) : x;\n\nexport type DateFilterOptions = {\n /** If enabled, only single days can be selected. Ranges otherwise. */\n singleSelect?: boolean;\n} & Pick<\n DatePickerProps,\n | 'locale'\n | 'firstDayOfWeek'\n | 'defaultDateInView'\n | 'quickOptions'\n | 'minDate'\n | 'maxDate'\n | 'showCalendarWeek'\n | 'showTime'\n>;\n\nfunction DateFilterComponent({\n value = null,\n onChange,\n close,\n options: {\n locale,\n firstDayOfWeek,\n defaultDateInView,\n quickOptions,\n singleSelect,\n minDate,\n maxDate,\n showCalendarWeek,\n showTime,\n },\n}: FilterComponentProps<DateInput, DateValue, DateFilterOptions>): ReactElement {\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 ?? null}\n onChange={(value, source) => {\n onChange(value);\n if (source !== 'input') {\n close();\n }\n }}\n locale={locale}\n firstDayOfWeek={firstDayOfWeek}\n defaultDateInView={defaultDateInView}\n quickOptions={quickOptions}\n minDate={minDate}\n maxDate={maxDate}\n showCalendarWeek={showCalendarWeek}\n showTime={showTime}\n />\n </div>\n );\n}\n\nexport const dateFilter = defineFilter<DateInput, DateValue, DateFilterOptions>({\n isActive: (value) => !!value,\n test: (value, input) => toSingles(input).some((x) => dateIntersect(value, toDate(x))),\n Component: DateFilterComponent,\n});\n","import { useState } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport type { TableTheme } from '../types';\n\ntype TextFieldProps =\n TableTheme['components']['TextField'] extends React.ComponentType<infer T> ? T : never;\n\nexport interface NumberFieldProps extends Omit<TextFieldProps, 'value' | 'onChange'> {\n value?: number | null;\n onChange?: (value: number | null) => void;\n}\n\nconst Pattern = /^-?\\d*(?:[.,]\\d*)?$/;\n\nconst printNumber = (value: number | null, locale?: string) => {\n if (value === null) {\n return '';\n }\n\n return value.toLocaleString(locale);\n};\n\nconst parseNumber = (value: string) => {\n if (value === '') {\n return null;\n }\n\n const asNumber = Number(value.replace(',', '.'));\n return Number.isNaN(asNumber) ? null : asNumber;\n};\n\nexport function NumberField({\n value: commitedValue = null,\n onChange,\n ...textFieldProps\n}: NumberFieldProps) {\n const locale = useTheme((t) => t.locale);\n const TextField = useTheme((t) => t.components.TextField);\n const [value = printNumber(commitedValue, locale), setValue] = useState<string>();\n\n return (\n <TextField\n value={value}\n onChange={(event) => {\n if (Pattern.test(event.target.value)) {\n setValue(event.target.value);\n }\n }}\n onBlur={() => {\n onChange?.(parseNumber(value));\n setValue(undefined);\n }}\n {...textFieldProps}\n css={{\n input: {\n backgroundColor: 'inherit',\n color: 'inherit',\n },\n }}\n />\n );\n}\n","import { useMemo, type ReactElement } from 'react';\nimport { NumberField } from '../components/numberField';\nimport { useTheme } from '../hooks/useTheme';\nimport { toSingles } from '../misc/helpers';\nimport type { FilterComponentProps, SingleOrMultiple } from '../types';\nimport { defineFilter } from './defineFilter';\n\ntype Range = [number | null, number | null] | null;\ntype RangeInput = SingleOrMultiple<number | bigint | null | undefined>;\n\nexport interface RangeFilterOptions {\n min?: number;\n max?: number;\n /** Delay in ms before changes apply. The inputs apply on blur anyway. */\n debounce?: number;\n}\n\nfunction RangeFilterComponent({\n value,\n onChange,\n options: { min, max },\n getValues,\n}: FilterComponentProps<RangeInput, Range, RangeFilterOptions>): ReactElement {\n const rangeMinText = useTheme((t) => t.text.rangeMin);\n const rangeMaxText = useTheme((t) => t.text.rangeMax);\n\n const [minValue, maxValue] = useMemo(() => {\n if (typeof min === 'number' && typeof max === 'number') {\n return [min, max];\n }\n\n let minValue;\n let maxValue;\n\n for (const value of getValues()) {\n if (value === null || value === undefined) continue;\n const number = Number(value);\n minValue = Math.min(minValue ?? number, number);\n maxValue = Math.max(maxValue ?? number, number);\n }\n\n return [min ?? minValue, max ?? maxValue];\n }, [min, max, getValues]);\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\nexport const rangeFilter = defineFilter<RangeInput, Range, RangeFilterOptions>({\n isActive: (value) => !!value,\n test(value, input) {\n if (!value || (value[0] === null && value[1] === null)) {\n return true;\n }\n\n const min = value[0] ?? Number.NEGATIVE_INFINITY;\n const max = value[1] ?? Number.POSITIVE_INFINITY;\n return toSingles(input).some(\n (x) => (typeof x === 'number' || typeof x === 'bigint') && x >= min && x <= max,\n );\n },\n Component: RangeFilterComponent,\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 { useVirtualizer } from '@tanstack/react-virtual';\nimport type { HTMLProps, ReactElement, ReactNode } from 'react';\nimport { useState } from 'react';\n\ntype VirtualOptions = { rowHeight?: number; estimatedRowHeight?: number; overscan?: number };\n\nexport interface VirtualListProps<T> extends Omit<HTMLProps<HTMLDivElement>, 'children'> {\n virtual?: boolean | VirtualOptions;\n items: T[];\n children: (item: T, index: number) => ReactNode;\n}\n\nconst containerCss = { overflowY: 'auto', display: 'grid' } as const;\n\nexport function VirtualList<T>({\n virtual = true,\n items,\n children,\n ...props\n}: VirtualListProps<T>): ReactElement {\n if (!virtual) {\n return (\n <div {...props} css={containerCss}>\n {items.map((item, index) => children(item, index))}\n </div>\n );\n }\n\n return (\n <VirtualItems {...props} items={items} options={virtual === true ? {} : virtual}>\n {children}\n </VirtualItems>\n );\n}\n\nfunction VirtualItems<T>({\n items,\n options,\n children,\n ...props\n}: Omit<VirtualListProps<T>, 'virtual'> & { options: VirtualOptions }) {\n const [scrollElement, setScrollElement] = useState<HTMLDivElement | null>(null);\n\n const virtualizer = useVirtualizer<HTMLDivElement, HTMLDivElement>({\n count: items.length,\n getScrollElement: () => scrollElement,\n estimateSize: () => options.rowHeight ?? options.estimatedRowHeight ?? 38,\n overscan: options.overscan ?? 5,\n useFlushSync: false,\n });\n\n const virtualItems = virtualizer.getVirtualItems();\n const measure = options.rowHeight === undefined ? virtualizer.measureElement : undefined;\n const before = virtualItems[0]?.start ?? 0;\n // With no items rendered yet the spacer must still take up the full size: the virtualizer\n // renders nothing while the container has no height.\n const after = virtualizer.getTotalSize() - (virtualItems[virtualItems.length - 1]?.end ?? 0);\n\n return (\n <div {...props} ref={setScrollElement} css={containerCss}>\n <div style={{ height: before }} />\n {virtualItems.map((virtualItem) => (\n <div\n key={virtualItem.key}\n ref={measure}\n data-index={virtualItem.index}\n css={{ display: 'grid' }}\n >\n {children(items[virtualItem.index]!, virtualItem.index)}\n </div>\n ))}\n <div style={{ height: after }} />\n </div>\n );\n}\n","import type { ReactElement, ReactNode } from 'react';\nimport { useMemo, useState } from 'react';\nimport { AutoFocusTextField } from '../components/autoFocusTextField';\nimport { FormControlLabel } from '../components/formControlLabel';\nimport type { VirtualListProps } from '../components/virtualList';\nimport { VirtualList } from '../components/virtualList';\nimport { useTheme } from '../hooks/useTheme';\nimport { asString, orderBy, toSingles, uniq } from '../misc/helpers';\nimport type { Filter, FilterComponentProps, FilterOptions, SingleOrMultiple } from '../types';\nimport { defineFilter } from './defineFilter';\n\nexport interface SelectFilterOptions<TFilterBy> {\n /** Which options are provided to select. By default all unique item values are used. */\n options?: TFilterBy[];\n /** String representation of a value. Used to filter options via the text field. */\n stringValue?: (value: TFilterBy) => string;\n /** Render values. By default a string representation of the value is used. */\n render?: (value: TFilterBy) => 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}\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\nfunction SelectFilterComponent({\n value: currentValue,\n onChange,\n options: {\n options: providedOptions,\n stringValue = asString,\n render = stringValue,\n singleSelect,\n hideSearchField,\n hideResetButton,\n virtual,\n },\n getValues,\n}: FilterComponentProps<unknown, Set<unknown>, SelectFilterOptions<unknown>>): ReactElement {\n const IconButton = useTheme((t) => t.components.IconButton);\n const Checkbox = useTheme((t) => t.components.Checkbox);\n const Button = useTheme((t) => t.components.Button);\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 value = currentValue ?? new Set<unknown>();\n\n const options = useMemo(\n () => (providedOptions ? uniq(providedOptions) : orderBy(getValues())),\n [providedOptions, getValues],\n );\n\n const [query, setQuery] = useState('');\n // Selected options come first, as they were when the filter opened.\n const [initialValue] = useState(value);\n const filtered = options.filter(\n (option) => !query || stringValue(option).toLowerCase().includes(query.toLowerCase()),\n );\n const ordered = filtered\n .filter((option) => initialValue.has(option))\n .concat(filtered.filter((option) => !initialValue.has(option)));\n\n return (\n <div\n css={{\n padding: 'calc(var(--spacing) * 2)',\n display: 'grid',\n gridTemplateColumns: 'minmax(0, 1fr)',\n gap: 'var(--spacing)',\n }}\n >\n {!hideSearchField && (\n <AutoFocusTextField\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n endIcon={\n <IconButton onClick={() => setQuery('')}>{!query ? <Search /> : <Clear />}</IconButton>\n }\n css={{ marginBottom: 'var(--spacing)' }}\n />\n )}\n\n {!hideResetButton && (\n <Button\n disabled={value.size === 0}\n onClick={() => onChange(new Set())}\n variant=\"outlined\"\n css={{\n justifyContent: 'center',\n width: '100%',\n marginBottom: 'var(--spacing)',\n color: 'inherit',\n }}\n >\n {deselectAll}\n </Button>\n )}\n\n <VirtualList\n items={ordered}\n virtual={virtual}\n css={{\n width: '20em',\n maxWidth: '100%',\n maxHeight: 'min(20em, 50vh)',\n overflow: 'hidden auto',\n display: 'grid',\n gridTemplateColumns: 'minmax(0, 1fr)',\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 />\n )}\n </VirtualList>\n\n {ordered.length === 0 && <span css={{ textAlign: 'center' }}>{noResults}</span>}\n </div>\n );\n}\n\n/** Accepts any value; typing `options`, `defaultValue`, `render` etc. narrows it. */\n// defineFilter can't make the factory generic, hence the cast.\nexport const selectFilter = defineFilter<\n SingleOrMultiple<unknown>,\n Set<unknown>,\n SelectFilterOptions<unknown>\n>({\n isActive: (value) => value.size > 0,\n test: (value, input) => toSingles(input).some((x) => value.has(x)),\n Component: SelectFilterComponent,\n}) as <T>(\n options?: FilterOptions<Set<T>> & SelectFilterOptions<T>,\n) => Filter<SingleOrMultiple<T>, Set<T>, SelectFilterOptions<T>>;\n","import type { ReactElement } from 'react';\nimport { AutoFocusTextField } from '../components/autoFocusTextField';\nimport { useTheme } from '../hooks/useTheme';\nimport { toSingles } from '../misc/helpers';\nimport type { FilterComponentProps, SingleOrMultiple } from '../types';\nimport { defineFilter } from './defineFilter';\n\nconst compares = {\n contains: (itemValue: string, filterValue: string) =>\n itemValue.toLowerCase().includes(filterValue.toLowerCase()),\n prefix: (itemValue: string, filterValue: string) =>\n itemValue.toLowerCase().startsWith(filterValue.toLowerCase()),\n exact: (itemValue: string, filterValue: string) =>\n itemValue.toLowerCase() === filterValue.toLowerCase(),\n};\n\nexport interface TextFilterOptions {\n /** How item values are matched, ignoring case. A function gets the item value and the filter\n * value and returns whether they match.\n * @default 'contains'\n */\n compare?: keyof typeof compares | ((itemValue: string, filterValue: string) => boolean);\n placeholder?: string;\n /** Delay in ms before typed text applies.\n * @default 300\n */\n debounce?: number;\n}\n\ntype TextInput = SingleOrMultiple<string | number | bigint | null | undefined>;\n\nfunction TextFilterComponent({\n value,\n onChange,\n close,\n options,\n}: FilterComponentProps<TextInput, string, TextFilterOptions>): ReactElement {\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 return (\n <div css={{ padding: `calc(var(--spacing) * 2)`, display: 'grid' }}>\n <AutoFocusTextField\n value={value ?? ''}\n onChange={(event) => onChange(event.target.value)}\n onKeyUp={(event) => {\n if (event.key === 'Enter') close();\n }}\n endIcon={\n <IconButton onClick={() => onChange('')}>{!value ? <Search /> : <Clear />}</IconButton>\n }\n placeholder={options.placeholder}\n />\n </div>\n );\n}\n\nexport const textFilter = defineFilter<TextInput, string, TextFilterOptions>({\n isActive: (value) => !!value,\n test(value, input, { compare = 'contains' }) {\n const match = typeof compare === 'function' ? compare : compares[compare];\n return toSingles(input).some((x) => x !== null && x !== undefined && match(String(x), value));\n },\n debounce: 300,\n Component: TextFilterComponent,\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"],"mappings":"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"}