schummar-table 0.43.1 → 0.44.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -147,13 +147,14 @@ var import_react_dom = require("react-dom");
147
147
  // src/theme/defaultTheme/defaultClasses.ts
148
148
  var import_react2 = require("@emotion/react");
149
149
  var cell = (0, import_react2.css)({
150
+ padding: `calc(var(--spacing) * 0.1) calc(2 * var(--spacing))`,
150
151
  display: "flex",
151
152
  alignItems: "center",
152
153
  borderBottom: "1px solid var(--table-border-light-color)",
153
154
  whiteSpace: "nowrap",
154
155
  overflow: "hidden",
155
- "&:not(:empty)": {
156
- padding: `calc(var(--spacing) * 0.1) calc(2 * var(--spacing))`
156
+ "&:empty": {
157
+ padding: 0
157
158
  }
158
159
  });
159
160
  var defaultClasses = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/theme/mui4Theme/index.tsx","../src/misc/tableSettings.tsx","../src/exporters/csvExporter.ts","../src/theme/defaultTheme/popover.tsx","../src/theme/defaultTheme/defaultClasses.ts","../node_modules/schummar-state/src/persist/persistPathHelpers.ts","../node_modules/schummar-state/src/persist/storePersist.ts","../node_modules/schummar-state/src/helpers/hash.ts","../node_modules/schummar-state/node_modules/fast-deep-equal/es6/react.js","../node_modules/schummar-state/src/helpers/stringSelector.ts","../node_modules/schummar-state/src/helpers/throttle.ts","../node_modules/schummar-state/src/store.ts","../node_modules/schummar-state/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js","../node_modules/schummar-state/node_modules/use-sync-external-store/shim/index.js","../node_modules/schummar-state/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js","../node_modules/schummar-state/node_modules/use-sync-external-store/shim/with-selector.js","../node_modules/schummar-state/src/react/useStoreState.ts","../node_modules/schummar-state/src/react/useStoreProp.ts","../node_modules/schummar-state/src/react/store.ts","../node_modules/schummar-state/src/react/storeScope.tsx","../node_modules/schummar-state/src/react/useResource.ts","../src/theme/tableTheme.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Checkbox,\n CircularProgress,\n IconButton,\n TextField,\n useTheme,\n} from '@material-ui/core';\nimport type { ReactNode } from 'react';\nimport { useMemo } from 'react';\nimport { TableSettingsProvider } from '../../misc/tableSettings';\nimport type { PartialTableTheme } from '../../types';\nimport { Popover } from '../defaultTheme/popover';\nimport { mergeThemes } from '../tableTheme';\n\nexport const mui4Theme: PartialTableTheme = {\n components: {\n Button: (props) => (\n <Button\n {...props}\n size=\"small\"\n fullWidth\n css={{ justifyContent: 'start !important' }}\n color={props.variant === 'contained' ? 'primary' : 'inherit'}\n />\n ),\n IconButton: (props) => <IconButton {...props} size=\"small\" color=\"inherit\" />,\n Checkbox: (props) => <Checkbox {...props} color=\"primary\" size=\"medium\" />,\n Popover,\n Badge,\n TextField: ({ startIcon, endIcon, ...props }) => (\n <TextField\n {...props}\n InputProps={{ startAdornment: startIcon, endAdornment: endIcon }}\n size=\"small\"\n variant=\"outlined\"\n />\n ),\n Spinner: CircularProgress,\n },\n};\n\nexport function Mui4TableThemeProvider({\n theme,\n children,\n}: {\n theme?: PartialTableTheme;\n children: ReactNode;\n}) {\n const muiTheme = useTheme();\n\n const _theme = useMemo(() => {\n return mergeThemes(\n {\n colors: {\n primary: muiTheme.palette.primary,\n secondary: muiTheme.palette.secondary,\n background: muiTheme.palette.background.default,\n text: muiTheme.palette.text.primary,\n border: muiTheme.palette.divider,\n borderLight: muiTheme.palette.divider,\n },\n },\n mui4Theme,\n theme ?? {},\n );\n }, [muiTheme, theme]);\n\n return <TableSettingsProvider theme={_theme}>{children}</TableSettingsProvider>;\n}\n","import { ReactNode, createContext, useContext } from 'react';\nimport CsvExporter from '../exporters/csvExporter';\nimport { ExporterEntry } from '../exporters/exporter';\nimport { PartialTableTheme } from '../types';\n\nexport interface TableSettingsContextType {\n theme: PartialTableTheme;\n exporters: ExporterEntry[];\n}\n\nexport const TableSettingsContext = createContext<TableSettingsContextType>({\n theme: {},\n exporters: [\n { action: 'copy', exporter: new CsvExporter() },\n { action: 'download', exporter: new CsvExporter() },\n ],\n});\n\nexport function TableSettingsProvider({\n theme,\n exporters,\n additionalExporters,\n children,\n}: Partial<TableSettingsContextType> & {\n additionalExporters?: ExporterEntry[];\n children?: ReactNode;\n}) {\n const inherited = useContext(TableSettingsContext);\n theme ??= inherited.theme;\n exporters ??= inherited.exporters;\n\n if (additionalExporters) {\n exporters = [...exporters, ...additionalExporters];\n }\n\n return (\n <TableSettingsContext.Provider\n value={{\n theme,\n exporters,\n }}\n >\n {children}\n </TableSettingsContext.Provider>\n );\n}\n","import { BlobExporter, StringExporter } from './exporter';\n\nexport interface CsvExporterOptions {\n sepPrefix?: boolean;\n separator?: string;\n quote?: string;\n eol?: string;\n}\n\nexport default class CsvExporter implements StringExporter, BlobExporter {\n readonly type = 'csv';\n readonly fileEnding = 'csv';\n\n constructor(public readonly options: CsvExporterOptions = {}) {}\n\n exportToString(\n columns: (string | number | Date)[],\n rows: (string | number | Date)[][],\n options = this.options,\n ): string {\n const { sepPrefix, separator = '\\t', quote = '\"', eol = '\\n' } = options;\n\n const cells = [columns, ...rows].map((line) =>\n line.map((value) => {\n let stringValue: string;\n if (typeof value === 'number') {\n stringValue = String(value);\n } else if (value instanceof Date) {\n stringValue = value.toISOString();\n } else {\n stringValue = value;\n }\n\n if (![separator, quote, eol].some((c) => stringValue.includes(c))) {\n return value;\n }\n\n const clean = stringValue.replace(new RegExp(quote, 'g'), `${quote}${quote}`);\n return `${quote}${clean}${quote}`;\n }),\n );\n\n return (\n (sepPrefix ? `SEP=${separator}\\n` : '') + cells.map((line) => line.join(separator)).join(eol)\n );\n }\n\n exportToBlob(columns: (string | number | Date)[], rows: (string | number | Date)[][]): Blob {\n const data = this.exportToString(columns, rows, {\n ...this.options,\n sepPrefix: this.options.sepPrefix ?? true,\n });\n return new Blob([data], { type: 'text/csv' });\n }\n}\n","import { useLayoutEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport type { TableTheme } from '../../types';\nimport { defaultClasses } from './defaultClasses';\n\nconst MARGIN = 10;\nconst MAX_OFFSET = 20;\n\nexport const Popover: TableTheme['components']['Popover'] = ({\n anchorEl,\n open,\n hidden,\n onClose,\n children,\n className,\n backdropClassName,\n align,\n}) => {\n const popper = useRef<HTMLDivElement>(null);\n const [position, setPosition] = useState<{ left: number; top: number }>();\n const [maxHeight, setMaxHeight] = useState(document.documentElement.clientHeight - 2 * MARGIN);\n const [zIndex, setZIndex] = useState(1);\n\n useLayoutEffect(() => {\n if (!anchorEl || !open) {\n setPosition(undefined);\n return;\n }\n\n let last: { left: number; top: number } | undefined;\n\n function check() {\n if (!anchorEl) return;\n const {\n left: anchorLeft,\n bottom: anchorBottom,\n width: anchorWidth,\n } = anchorEl.getBoundingClientRect();\n const { width: popperWidth = 0 } = popper.current?.getBoundingClientRect() ?? {};\n const viewportWidth = document.documentElement.clientWidth;\n const viewportHeight = document.documentElement.clientHeight;\n\n const next = {\n left:\n align === 'center'\n ? anchorLeft + anchorWidth / 2 - popperWidth / 2\n : anchorLeft -\n Math.min(popperWidth ? popperWidth / 2 : Number.POSITIVE_INFINITY, MAX_OFFSET),\n top: anchorBottom,\n };\n\n if (next.left < MARGIN) {\n next.left = MARGIN;\n }\n if (next.left + popperWidth > viewportWidth - MARGIN) {\n next.left = viewportWidth - MARGIN - popperWidth;\n }\n if (next.top < MARGIN) {\n next.top = MARGIN;\n }\n\n if (next.left !== last?.left || next.top !== last?.top) {\n setPosition(next);\n }\n\n setMaxHeight(viewportHeight - MARGIN - next.top);\n\n last = next;\n }\n check();\n\n const handle = setInterval(check, 16);\n return () => {\n clearInterval(handle);\n };\n }, [anchorEl, open, align]);\n\n function updateZIndex(div: HTMLDivElement | null) {\n const ancestors = [];\n for (let node = div?.parentElement; node; node = node.parentElement) {\n ancestors.push(node);\n }\n\n for (const node of ancestors.reverse()) {\n const value = document.defaultView?.getComputedStyle(node).getPropertyValue('z-index');\n\n if (value && !Number.isNaN(Number(value))) {\n setZIndex(Number(value) + 1);\n return;\n }\n }\n }\n\n if (!open) return null;\n\n return (\n <>\n <div\n ref={updateZIndex}\n css={{\n display: 'none',\n }}\n />\n\n {createPortal(\n <>\n <div\n className={backdropClassName}\n css={[\n {\n position: 'fixed',\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n zIndex,\n },\n hidden && { display: 'none' },\n ]}\n onClick={() => onClose()}\n />\n\n <div\n ref={popper}\n className={className}\n css={[\n defaultClasses.card,\n {\n position: 'fixed',\n maxWidth: document.documentElement.clientWidth - 2 * MARGIN,\n maxHeight,\n ...position,\n zIndex: zIndex + 1,\n overflowY: 'auto',\n color: 'var(--table-text-color)',\n },\n hidden && { display: 'none' },\n !position && { visibility: 'hidden' },\n ]}\n >\n {children}\n </div>\n </>,\n document.body,\n )}\n </>\n );\n};\n","import { css } from '@emotion/react';\n\nconst cell = css({\n display: 'flex',\n alignItems: 'center',\n borderBottom: '1px solid var(--table-border-light-color)',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n\n '&:not(:empty)': {\n padding: `calc(var(--spacing) * 0.1) calc(2 * var(--spacing))`,\n },\n});\n\nexport const defaultClasses = {\n table: css({\n position: 'relative',\n display: 'grid',\n color: 'var(--table-text-color)',\n }),\n\n cell,\n\n cellFill: css({\n borderBottom: '1px solid var(--table-border-light-color)',\n }),\n\n headerCell: css(cell, {\n borderBottom: '1px solid var(--table-border-color)',\n background: 'var(--table-background-color)',\n\n '&:not(:empty)': {\n padding: `var(--spacing) 0 var(--spacing) calc(2 * var(--spacing))`,\n },\n }),\n\n footerCell: css(cell, {\n padding: `var(--spacing) calc(2 * var(--spacing))`,\n borderTop: '1px solid var(--table-border-color)',\n borderBottom: 'none',\n background: 'var(--table-background-color)',\n }),\n\n firstCell: css({\n justifyContent: 'start',\n }),\n\n sticky: css({\n position: 'sticky',\n top: 0,\n zIndex: 2,\n }),\n\n stickyBottom: css({\n position: 'sticky',\n bottom: 0,\n zIndex: 2,\n }),\n\n headerFill: css({\n borderBottom: '1px solid var(--table-border-color)',\n background: 'var(--table-background-color)',\n }),\n\n footerFill: css({\n borderTop: '1px solid var(--table-border-color)',\n background: 'var(--table-background-color)',\n }),\n\n text: css({\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }),\n\n card: css({\n borderRadius: 4,\n boxShadow: '0px 3px 14px 2px rgb(0 0 0 / 12%)',\n background: 'var(--table-background-color)',\n }),\n\n clearFiltersButton: css({\n padding: `0 calc(2 * var(--spacing))`,\n fontWeight: 'bold',\n position: 'sticky',\n left: 0,\n maxWidth: 'fit-content',\n gridColumn: '2/-1',\n button: {\n color: 'var(--primaryMain) !important',\n border: 'solid 1px',\n borderColor: 'var(--primaryMain) !important',\n margin: 'var(--spacing)',\n },\n }),\n\n details: css(cell, {\n gridColumn: '1 / -1',\n whiteSpace: 'normal',\n }),\n};\n","export type Path = (string | number)[];\n\nexport const isAncestor = (ancestor: Path, path: Path): boolean => {\n return ancestor.length <= path.length && ancestor.every((v, i) => v === '*' || path[i] === '*' || String(v) === String(path[i]));\n};\n\nexport const get = (value: unknown, path: Path): unknown => {\n for (const part of path) {\n if (value instanceof Object && part in value) value = value[part as keyof typeof value];\n else {\n value = undefined;\n break;\n }\n }\n return value;\n};\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const split = (value: any, path: Path): [value: unknown, subValues: { path: Path; value: unknown }[]] => {\n const [first, ...rest] = path;\n if (first === undefined) return [value, []];\n\n if (rest.length === 0) {\n if (first === '*') return [{}, Object.entries(value).map(([k, v]) => ({ path: [k], value: v }))];\n if (!(first in value)) return [value, []];\n const { [first]: subValue, ...newValue } = value;\n return [newValue, [{ path: [first], value: subValue }]];\n }\n\n const newValue = { ...value };\n const subValues = new Array<{ path: Path; value: unknown }>();\n for (const key of first === '*' ? Object.keys(value) : [first]) {\n if (!(newValue[key] instanceof Object)) return [value, []];\n const result = split(newValue[key], rest);\n newValue[key] = result[0];\n subValues.push(...result[1].map((s) => ({ path: [key, ...s.path], value: s.value })));\n }\n return [newValue, subValues];\n};\n","import { Patch } from 'immer';\nimport { Store } from '../store';\nimport { get, isAncestor, Path, split } from './persistPathHelpers';\nimport { PersistPaths } from './persistPaths';\nimport { StorePersistStorage } from './persistStorage';\n\nexport class StorePersist<T> {\n private replayPatches = new Array<Patch>();\n isInitialized = false;\n whenInitialized = this.load();\n private isStopped = false;\n private sub?: () => void;\n private saveQueue = new Array<{ path: Path; t: number }>();\n private isSaving = false;\n private saveTimeout?: ReturnType<typeof setTimeout>;\n private paths: { path: Path; throttleMs?: number }[];\n\n constructor(\n public readonly store: Store<T>,\n public readonly storage: StorePersistStorage,\n public readonly options: {\n paths?: (PersistPaths<T> | { path: PersistPaths<T>; throttleMs?: number })[];\n throttleMs?: number;\n log?: (...args: any[]) => void;\n } = {}\n ) {\n if (!options.paths) {\n this.paths = [{ path: [], throttleMs: options.throttleMs }];\n } else {\n this.paths = options.paths.map((p) => ({\n path: (typeof p === 'object' ? p.path : p).split('.'),\n throttleMs: (typeof p === 'object' ? p.throttleMs : undefined) ?? options.throttleMs,\n }));\n }\n\n this.paths.sort((a, b) => b.path.length - a.path.length);\n this.watch();\n }\n\n private async load() {\n try {\n const storage = this.storage;\n\n let keys;\n if ('keys' in storage) {\n keys = await storage.keys();\n } else {\n const length = storage.length instanceof Function ? await storage.length() : storage.length;\n keys = new Array<string>();\n for (let i = 0; i < length; i++) {\n const key = await storage.key(i);\n if (key !== null) keys.push(key);\n }\n }\n keys.sort((a, b) => a.length - b.length);\n\n const patches = new Array<Patch & { persist: StorePersist<T> }>();\n for (const key of keys) {\n const value = await storage.getItem(key);\n if (value) {\n patches.push({\n path: key.split('.'),\n op: 'replace',\n value: value === 'undefined' ? undefined : JSON.parse(value),\n persist: this,\n });\n }\n }\n\n if (this.isStopped) {\n return false;\n }\n\n if (patches.length > 0) {\n this.store.applyPatches(patches);\n }\n\n this.isInitialized = true;\n if (this.replayPatches.length > 0) {\n this.store.applyPatches(this.replayPatches);\n this.replayPatches = [];\n }\n\n return true;\n } catch (e) {\n (this.options.log ?? console.error)('Failed to load storePersist:', e);\n return false;\n }\n }\n\n private watch() {\n this.sub = this.store.subscribePatches((patches) => {\n for (const patch of patches) {\n if ((patch as any).persist === this) {\n continue;\n } else if (this.isInitialized === true) {\n this.addToSaveQueue(patch.path);\n } else {\n this.replayPatches.push(patch);\n }\n }\n });\n }\n\n private addToSaveQueue(path: Path) {\n const match = this.paths.find((p) => isAncestor(p.path, path));\n if (!match) return;\n\n path = path.slice(0, match.path.length);\n const t = Date.now() + (match.throttleMs ?? 0);\n\n if (this.saveQueue.some((i) => i.t <= t && isAncestor(i.path, path))) return;\n this.saveQueue.push({ path, t });\n this.saveQueue.sort((a, b) => a.t - b.t);\n this.run();\n }\n\n private async run() {\n if (this.saveTimeout) clearTimeout(this.saveTimeout);\n const next = this.saveQueue[0];\n\n if (!next) return;\n if (next.t > Date.now()) {\n this.saveTimeout = setTimeout(() => this.run(), next.t - Date.now());\n return;\n }\n\n try {\n this.isSaving = true;\n this.saveQueue.shift();\n await this.save(next.path);\n } finally {\n this.isSaving = false;\n this.run();\n }\n }\n\n private async save(path: Path) {\n const { store, storage } = this;\n let value = get(store.getState(), path);\n\n const subPaths = this.paths\n .filter((p) => isAncestor(path, p.path) && p.path.length > path.length)\n .map((p) => p.path.slice(path.length));\n\n const subValues = new Array<{ path: Path; value: unknown }>();\n for (const subPath of subPaths) {\n const result = split(value, subPath);\n value = result[0];\n subValues.push(...result[1].map((s) => ({ path: [...path, ...s.path], value: s.value })));\n }\n\n const result = storage.setItem(path.join('.'), JSON.stringify(value) ?? 'undefined');\n if (result instanceof Promise) await result;\n for (const { path, value } of subValues) {\n const result = storage.setItem(path.join('.'), JSON.stringify(value) ?? 'undefined');\n if (result instanceof Promise) await result;\n }\n }\n\n stop(): void {\n this.isStopped = true;\n this.sub?.();\n }\n}\n","export function hash(arg: unknown): string {\n return JSON.stringify({ arg }, (_key, value) => {\n if (value instanceof Object && !(value instanceof Array)) {\n const obj: any = {};\n for (const key of Object.keys(value).sort()) {\n obj[key] = value[key as keyof typeof value];\n }\n return obj;\n }\n return value;\n });\n}\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n var envHasBigInt64Array = typeof BigInt64Array !== 'undefined';\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n if ((a instanceof Map) && (b instanceof Map)) {\n if (a.size !== b.size) return false;\n for (i of a.entries())\n if (!b.has(i[0])) return false;\n for (i of a.entries())\n if (!equal(i[1], b.get(i[0]))) return false;\n return true;\n }\n\n if ((a instanceof Set) && (b instanceof Set)) {\n if (a.size !== b.size) return false;\n for (i of a.entries())\n if (!b.has(i[0])) return false;\n return true;\n }\n\n if (ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (a[i] !== b[i]) return false;\n return true;\n }\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (key === '_owner' && a.$$typeof) {\n // React-specific: avoid traversing React elements' _owner.\n // _owner contains circular references\n // and is not needed when comparing the actual elements (and not their owners)\n continue;\n }\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","type FilterString<T> = T extends string ? T : never;\n\nexport declare type SelectorPaths<T> = FilterString<\n keyof {\n [K in keyof NonNullable<T> as\n | K\n | (0 extends 1 & NonNullable<T>[K]\n ? `${FilterString<K>}.${any}`\n : NonNullable<NonNullable<T>[K]> extends Record<string, unknown>\n ? `${FilterString<K>}.${SelectorPaths<NonNullable<T>[K]>}`\n : never)]: 1;\n }\n>;\n\ntype Value<T, K> = K extends keyof T ? T[K] : K extends keyof NonNullable<T> ? NonNullable<T>[K] | undefined : undefined;\n\nexport type SelectorValue<T, K> = K extends `${infer K}.${infer Rest}` ? SelectorValue<Value<T, K>, Rest> : Value<T, K>;\n\nexport function createSelector<T, S>(stringSelector: string): (state: T) => S {\n const parts = stringSelector.split('.');\n return (state) => parts.reduce<any>((v, p) => (v instanceof Object && p in v ? v[p as keyof typeof v] : undefined), state);\n}\n\nexport function setWithSelector(state: unknown, stringSelector: string, value: unknown): void {\n const parts = stringSelector.split('.');\n const prefix = parts.slice(0, -1);\n const last = parts[parts.length - 1]!;\n\n for (const part of prefix) {\n if (state instanceof Object && part in state) {\n state = state[part as keyof typeof state];\n } else {\n throw Error(`Could not set ${stringSelector} because path ${stringSelector} doesn't exist`);\n }\n }\n\n if (state instanceof Object) {\n state[last as keyof typeof state] = value as any;\n } else {\n throw Error(`Could not set ${stringSelector} because path ${stringSelector} doesn't exist`);\n }\n}\n","export function throttle<Args extends any[]>(fn: (...args: Args) => void, ms: number): (...args: Args) => void {\n let last = 0;\n let lastArgs: Args | undefined;\n let timeout: ReturnType<typeof setTimeout> | undefined;\n\n function run() {\n const args = lastArgs;\n\n last = Date.now();\n lastArgs = undefined;\n timeout = undefined;\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n fn(...args!);\n }\n\n return function (...args: Args) {\n const now = Date.now();\n lastArgs = args;\n\n if (timeout) {\n // do nothing\n } else if (now < last + ms) {\n timeout = setTimeout(run, last + ms - now);\n } else {\n run();\n }\n };\n}\n","import eq from 'fast-deep-equal/es6/react';\nimport { applyPatches, Draft, enableMapSet, enablePatches, freeze, Patch, produce } from 'immer';\nimport { Cancel } from './helpers/misc';\nimport { createSelector, SelectorPaths, SelectorValue } from './helpers/stringSelector';\nimport { throttle as throttleFn } from './helpers/throttle';\n\nexport type StoreOptions = {\n /** Log errors. Default: console.error */\n log?: (...data: any[]) => void;\n};\n\nexport type StoreSubscribeOptions = {\n /** Invoke callback immediately with the current value? Default: true */\n runNow?: boolean;\n /** Throttle invocations of callback. */\n throttle?: number;\n /** Comparison function to determine if the data has changed. Default: fast-deep-equal */\n compare?: (a: any, b: any) => boolean;\n};\n\nexport type StoreAddReactionOptions = {\n /** Invoke callback immediately with the current value? Default: true */\n runNow?: boolean;\n /** Comparison function to determine if the data has changed. Default: fast-deep-equal */\n compare?: (a: any, b: any) => boolean;\n};\n\nconst RESTART_UPDATE = Symbol('RESTART_UPDATE');\n\nexport class Store<T> {\n private subscriptions = new Set<(state: T, patches: Patch[]) => void>();\n private batchCounter = 0;\n private reactions = new Set<() => void>();\n private patches = new Array<Patch>();\n private lock?: 'reaction';\n private options;\n\n constructor(private state: T, { log = (...data: any[]) => console.error(...data) }: StoreOptions = {}) {\n freeze(state, true);\n enableMapSet();\n enablePatches();\n\n this.options = {\n log,\n };\n }\n\n getState(): T {\n return this.state;\n }\n\n update(update: (draft: Draft<T>, original: T) => Draft<T> | void | undefined): void {\n this.checkLock();\n\n this.state = produce(\n this.state,\n (draft) => update(draft, this.state),\n (patches) => this.patches.push(...patches)\n );\n\n this.notify();\n }\n\n set(state: T): void {\n this.checkLock();\n\n this.state = produce(\n this.state,\n () => state,\n (patches) => this.patches.push(...patches)\n ) as T;\n\n this.notify();\n }\n\n applyPatches(patches: Patch[]): void {\n this.checkLock();\n\n this.state = applyPatches(this.state, patches);\n this.patches.push(...patches);\n\n this.notify();\n }\n\n batchUpdates(fn: () => void): void {\n try {\n this.batchCounter++;\n fn();\n } finally {\n this.batchCounter--;\n if (this.batchCounter === 0) {\n this.notify();\n }\n }\n }\n\n subscribe(listener: (value: T, prev: T, state: T) => void, options?: StoreSubscribeOptions): Cancel;\n subscribe<S>(selector: (state: T) => S, listener: (value: S, prev: S, state: T) => void, options?: StoreSubscribeOptions): Cancel;\n subscribe<K extends SelectorPaths<T>>(\n selector: K,\n listener: (value: SelectorValue<T, K>, prev: SelectorValue<T, K>, state: T) => void,\n options?: StoreSubscribeOptions\n ): Cancel;\n subscribe<S>(...args: any[]): Cancel {\n let selector: (state: T) => S, listener: (value: S, prev: S, state: T) => void, options: StoreSubscribeOptions | undefined;\n\n if (args[1] instanceof Function) {\n [selector, listener, options] = args;\n if (typeof selector === 'string') {\n selector = createSelector<T, S>(selector);\n }\n } else {\n [selector, listener, options] = [(x) => x as any, ...args];\n }\n\n const { runNow = true, throttle = 0, compare = eq } = options ?? {};\n const throttledListener = throttle ? throttleFn(listener, throttle) : listener;\n\n let value = selector(this.state);\n\n const internalListener = (state: T, _patches: Patch[], init?: boolean) => {\n try {\n const oldValue = value;\n value = selector(state);\n if (!init && compare(value, oldValue)) return;\n (init ? listener : throttledListener)(value, oldValue, this.state);\n } catch (e) {\n this.options.log('Failed to execute listener:', e);\n }\n };\n\n this.subscriptions.add(internalListener);\n if (runNow) internalListener(this.state, [], true);\n return () => {\n this.subscriptions.delete(internalListener);\n };\n }\n\n addReaction(reaction: (value: T, draft: Draft<T>, original: T, prev: T) => void, options?: StoreAddReactionOptions): Cancel;\n addReaction<S>(\n selector: (state: T) => S,\n reaction: (value: S, draft: Draft<T>, original: T, prev: S) => void,\n options?: StoreAddReactionOptions\n ): Cancel;\n addReaction<K extends SelectorPaths<T>>(\n selector: K,\n reaction: (value: SelectorValue<T, K>, draft: Draft<T>, original: T, prev: SelectorValue<T, K>) => void,\n options?: StoreAddReactionOptions\n ): Cancel;\n addReaction<S>(...args: any[]): Cancel {\n let selector: (state: T) => S,\n reaction: (value: S, draft: Draft<T>, original: T, prev: S) => void,\n options: StoreAddReactionOptions | undefined;\n\n if (args[1] instanceof Function) {\n [selector, reaction, options] = args;\n if (typeof selector === 'string') {\n selector = createSelector<T, S>(selector);\n }\n } else {\n [selector, reaction, options] = [(x) => x as any, ...args];\n }\n const { runNow = true, compare = eq } = options ?? {};\n\n let value = selector(this.state);\n\n const internalListener = (init?: boolean) => {\n let hasChanged = false;\n\n try {\n this.lock = 'reaction';\n const oldValue = value;\n value = selector(this.state);\n if (!init && compare(value, oldValue)) return;\n\n this.state = produce(\n this.state,\n (draft) => reaction(value, draft, this.state, oldValue),\n (patches) => {\n hasChanged = true;\n this.patches.push(...patches);\n }\n );\n } catch (e) {\n this.options.log('Failed to execute reaction:', e);\n } finally {\n delete this.lock;\n }\n\n if (hasChanged && !init) throw RESTART_UPDATE;\n if (hasChanged && init) this.notify();\n };\n\n this.reactions.add(internalListener);\n if (runNow) internalListener(true);\n return () => {\n this.reactions.delete(internalListener);\n };\n }\n\n subscribePatches(listener: (patches: Patch[]) => void): Cancel {\n const internalListener = (_state: T, patches: Patch[]) => {\n try {\n listener(patches);\n } catch (e) {\n this.options.log('Failed to execute patch listener:', e);\n }\n };\n\n this.subscriptions.add(internalListener);\n return () => {\n this.subscriptions.delete(internalListener);\n };\n }\n\n private checkLock() {\n if (this.lock === 'reaction') {\n throw Error('You cannot call update from within a reaction. Use the passed draft instead.');\n }\n }\n\n private notify(): void {\n if (this.batchCounter > 0 || this.patches.length === 0) return;\n\n try {\n for (const reaction of this.reactions) {\n reaction();\n }\n } catch (e) {\n return this.notify();\n }\n\n const patches = this.patches;\n this.patches = [];\n\n this.batchUpdates(() => {\n for (const subscription of this.subscriptions) {\n subscription(this.state, patches);\n }\n });\n }\n}\n","/** @license React vundefined\n * use-sync-external-store-shim.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var e=require(\"react\");function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k=\"function\"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c})},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c})})},[a]);p(d);return d}\nfunction r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return!k(a,d)}catch(f){return!0}}function t(a,b){return b()}var u=\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement?t:q;exports.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/** @license React vundefined\n * use-sync-external-store-shim/with-selector.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var h=require(\"react\"),n=require(\"use-sync-external-store/shim\");function p(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var q=\"function\"===typeof Object.is?Object.is:p,r=n.useSyncExternalStore,t=h.useRef,u=h.useEffect,v=h.useMemo,w=h.useDebugValue;\nexports.useSyncExternalStoreWithSelector=function(a,b,e,l,g){var c=t(null);if(null===c.current){var f={hasValue:!1,value:null};c.current=f}else f=c.current;c=v(function(){function a(a){if(!c){c=!0;d=a;a=l(a);if(void 0!==g&&f.hasValue){var b=f.value;if(g(b,a))return k=b}return k=a}b=k;if(q(d,a))return b;var e=l(a);if(void 0!==g&&g(b,e))return b;d=a;return k=e}var c=!1,d,k,m=void 0===e?null:e;return[function(){return a(b())},null===m?void 0:function(){return a(m())}]},[b,e,l,g]);var d=r(a,c[0],c[1]);\nu(function(){f.hasValue=!0;f.value=d},[d]);w(d);return d};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","import eq from 'fast-deep-equal/es6/react';\nimport { useCallback, useDebugValue } from 'react';\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';\nimport { StoreSubscribeOptions } from '..';\nimport { createSelector, SelectorPaths, SelectorValue } from '../helpers/stringSelector';\nimport { Store } from './store';\n\nexport type UseStoreStateOptions = Omit<StoreSubscribeOptions, 'runNow'>;\n\nexport function useStoreState<T>(store: Store<T>, options?: UseStoreStateOptions): T;\nexport function useStoreState<T, S>(store: Store<T>, selector: (state: T) => S, options?: UseStoreStateOptions): S;\nexport function useStoreState<T, K extends SelectorPaths<T>>(\n store: Store<T>,\n selector: K,\n options?: UseStoreStateOptions\n): SelectorValue<T, K>;\nexport function useStoreState<T, S>(store: Store<T>, ...args: any[]): S {\n let selector: (state: T) => S, options: UseStoreStateOptions;\n\n if (args[0] instanceof Function) {\n selector = args[0];\n options = args[1] ?? {};\n } else if (typeof args[0] === 'string') {\n selector = createSelector(args[0]);\n options = args[1] ?? {};\n } else {\n selector = (x) => x as any;\n options = args[0] ?? {};\n }\n\n const subscribe = useCallback(\n (listener: () => void) => {\n return store.subscribe((x) => x, listener, {\n throttle: options.throttle,\n runNow: false,\n compare: (a, b) => a === b,\n });\n },\n [store, options.throttle]\n );\n\n const getSnapshot = useCallback(() => store.getState(), [store]);\n\n const value = useSyncExternalStoreWithSelector(\n //\n subscribe,\n getSnapshot,\n getSnapshot,\n selector,\n options.compare ?? eq\n );\n\n useDebugValue(value);\n return value;\n}\n","import { SelectorPaths, SelectorValue, setWithSelector } from '../helpers/stringSelector';\nimport { Store } from './store';\nimport { useStoreState } from './useStoreState';\n\nexport type UseStorePropResult<T, K extends SelectorPaths<T>> = [value: SelectorValue<T, K>, update: (value: SelectorValue<T, K>) => void];\n\nexport function useStoreProp<T, K extends SelectorPaths<T>>(store: Store<T>, selector: K): UseStorePropResult<T, K> {\n const value = useStoreState(store, selector);\n const update = (value: SelectorValue<T, K>) => store.update((state) => setWithSelector(state, selector, value));\n\n return [value, update];\n}\n","import { Store as BaseStore } from '../store';\nimport { SelectorPaths, SelectorValue } from '../helpers/stringSelector';\nimport { useStoreProp, UseStorePropResult } from './useStoreProp';\nimport { useStoreState, UseStoreStateOptions } from './useStoreState';\n\nexport class Store<T> extends BaseStore<T> {\n useState(options?: { throttle?: number }): T;\n useState<S>(selector: (state: T) => S, options?: UseStoreStateOptions): S;\n useState<K extends SelectorPaths<T>>(selector: K, options?: UseStoreStateOptions): SelectorValue<T, K>;\n useState(...args: any[]): any {\n return useStoreState(this, ...args);\n }\n\n useProp<K extends SelectorPaths<T>>(selector: K): UseStorePropResult<T, K> {\n return useStoreProp(this, selector);\n }\n}\n","import React, { Context, createContext, ReactNode, useContext, useMemo } from 'react';\nimport { SelectorPaths, SelectorValue } from '../helpers/stringSelector';\nimport { Store } from './store';\nimport { useStoreProp, UseStorePropResult } from './useStoreProp';\nimport { useStoreState, UseStoreStateOptions } from './useStoreState';\n\nexport class StoreScope<T> {\n readonly context: Context<Store<T>>;\n\n constructor(public readonly defaultValue: T) {\n this.context = createContext(new Store(defaultValue));\n }\n\n Provider = ({ children, store }: { children: ReactNode; store?: Store<T> }): JSX.Element => {\n const _store = useMemo(() => store ?? new Store(this.defaultValue), [store]);\n\n return <this.context.Provider value={_store}>{children}</this.context.Provider>;\n };\n\n withScope = <Args extends Record<string, unknown>>(Component: (args: Args) => JSX.Element) => {\n return (args: Args): JSX.Element => (\n <this.Provider>\n <Component {...args} />\n </this.Provider>\n );\n };\n\n useStore(): Store<T> {\n return useContext(this.context);\n }\n\n useState(options?: { throttle?: number }): T;\n useState<S>(selector: (state: T) => S, dependencies?: any[], options?: { throttle?: number }): S;\n useState<K extends SelectorPaths<T>>(selector: K, options?: UseStoreStateOptions): SelectorValue<T, K>;\n useState(...args: any[]): any {\n const store = this.useStore();\n return useStoreState(store, ...args);\n }\n\n useProp<K extends SelectorPaths<T>>(selector: K): UseStorePropResult<T, K> {\n const store = this.useStore();\n return useStoreProp(store, selector);\n }\n}\n","import eq from 'fast-deep-equal/es6/react';\nimport { useCallback, useDebugValue, useEffect } from 'react';\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';\nimport { ResourceInfo, ResourceInstance, ResourceSubscribeOptions } from '..';\nimport { hash } from '../helpers/hash';\n\nexport type UseResource<Value> = Pick<ResourceInstance<unknown, Value>, 'id' | 'invalidateCache' | 'subscribe' | 'getCache' | 'get'>;\n\nexport type UseResourceOptions = Omit<ResourceSubscribeOptions, 'runNow'> & {\n /** Invalidate the resource on mount, causing it to update in the background */\n updateOnMount?: boolean;\n /** Don't subscribe resource while this is true */\n dormant?: boolean;\n};\n\n/** Subscribe to a resource. This will immediately return cached values, if available, and update for future updates.\n * @param resource the resource to subscribe to.\n * @param options options\n */\nexport function useResource<Value>(resource: UseResource<Value>, options?: UseResourceOptions): ResourceInfo<Value> {\n const { compare, dormant, throttle, updateOnMount, watchOnly } = options ?? {};\n\n useEffect(() => {\n if (updateOnMount && !dormant) {\n resource.invalidateCache();\n }\n }, []);\n\n const subscribe = useCallback(\n (listener: () => void) => {\n if (dormant)\n return () => {\n // nothing to do\n };\n\n return resource.subscribe(listener, {\n watchOnly,\n throttle,\n runNow: false,\n compare,\n });\n },\n [resource.id, watchOnly, dormant, throttle]\n );\n\n const getSnapshot = useCallback(() => resource.getCache(), [resource.id]);\n\n let value = useSyncExternalStoreWithSelector(\n //\n subscribe,\n getSnapshot,\n getSnapshot,\n (x) => x,\n eq\n );\n\n if (dormant) {\n value = { state: 'empty', isLoading: false };\n }\n\n useDebugValue(value);\n return value;\n}\n\n/** Subscribe to a resource. This will immediately return cached values, if available, and update for future updates. While waiting for data, it throws so that the Component will be suspended. If there is an error, it throws.\n * @param resource the resource to subscribe to.\n * @param options options\n */\nexport function useReadResource<Value>(resource: UseResource<Value>, options?: UseResourceOptions): Value {\n const info = useResource(resource, options);\n\n if (info.state === 'error') {\n throw info.error;\n }\n\n if (info.state === 'empty') {\n throw resource.get();\n }\n\n useDebugValue(info.value);\n return info.value;\n}\n\nexport type CombineValues<T> = T extends [UseResource<infer Value>]\n ? [Value]\n : T extends [UseResource<infer Value>, ...infer Rest]\n ? [Value, ...CombineValues<Rest>]\n : T extends readonly UseResource<infer Value>[]\n ? Value[]\n : any[];\n\n/** Combine multiple resources into one that can be fed into useResource or useReadResource. Return value will be an array of the combined resources' values.\n * @param resources resources to be combined\n */\nexport function combineResources<Resources extends readonly UseResource<any>[]>(\n ...resources: Resources\n): UseResource<CombineValues<Resources>> {\n return {\n id: hash(resources.map((resource) => resource.id)),\n\n invalidateCache() {\n for (const resource of resources) {\n resource.invalidateCache();\n }\n },\n\n subscribe(listener, options) {\n const handles = resources.map((resource) => resource.subscribe(listener, options));\n\n return () => {\n for (const handle of handles) {\n handle();\n }\n };\n },\n\n getCache() {\n const caches = resources.map((resource) => resource.getCache());\n const isStale = caches.some((cache) => cache.isStale);\n const isLoading = caches.some((cache) => cache.isLoading);\n\n if (caches.some((resource) => resource.state === 'error')) {\n const error = caches.find((cache) => cache.error !== undefined)?.error;\n return { state: 'error', error, isStale, isLoading };\n }\n\n if (caches.every((resource) => resource.state === 'value')) {\n const value = caches.map((cache) => cache.value) as CombineValues<Resources>;\n return { state: 'value', value, isStale, isLoading };\n }\n\n return { state: 'empty', isLoading };\n },\n\n get() {\n return Promise.all(resources.map((resource) => resource.get())) as Promise<CombineValues<Resources>>;\n },\n };\n}\n","import { Store } from 'schummar-state/react';\nimport type { PartialTableTheme } from '../types';\n\nexport const globalTableTheme = new Store<PartialTableTheme>({});\n\nexport function configureTableTheme(tableTheme: PartialTableTheme) {\n globalTableTheme.set(tableTheme);\n}\n\nexport function mergeThemes<T>(...themes: PartialTableTheme<T>[]): PartialTableTheme<T> {\n return {\n text: Object.assign({}, ...themes.map((theme) => theme.text)),\n classes: Object.assign({}, ...themes.map((theme) => theme.classes)),\n styles: Object.assign({}, ...themes.map((theme) => theme.styles)),\n components: Object.assign({}, ...themes.map((theme) => theme.components)),\n icons: Object.assign({}, ...themes.map((theme) => theme.icons)),\n colors: {\n primary: Object.assign({}, ...themes.map((theme) => theme.colors?.primary)),\n secondary: Object.assign({}, ...themes.map((theme) => theme.colors?.secondary)),\n blocked: Object.assign({}, ...themes.map((theme) => theme.colors?.blocked)),\n background: themes\n .map((theme) => theme.colors?.background)\n .reverse()\n .find((x) => x !== undefined),\n text: themes\n .map((theme) => theme.colors?.text)\n .reverse()\n .find((x) => x !== undefined),\n border: themes\n .map((theme) => theme.colors?.border)\n .reverse()\n .find((x) => x !== undefined),\n borderLight: themes\n .map((theme) => theme.colors?.borderLight)\n .reverse()\n .find((x) => x !== undefined),\n },\n spacing: themes\n .map((theme) => theme.spacing)\n .reverse()\n .find((x) => x !== undefined),\n };\n}\n"],"mappings":"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","names":["import_react","import_react","import_react","import_jsx_runtime","v","p","throttle","eq","throttleFn","e","require$$0","h","n","p","r","u","t","q","shimModule","require$$1","withSelectorModule","useSyncExternalStoreWithSelector","eq","BaseStore","Store","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../src/theme/mui4Theme/index.tsx","../src/misc/tableSettings.tsx","../src/exporters/csvExporter.ts","../src/theme/defaultTheme/popover.tsx","../src/theme/defaultTheme/defaultClasses.ts","../node_modules/schummar-state/src/persist/persistPathHelpers.ts","../node_modules/schummar-state/src/persist/storePersist.ts","../node_modules/schummar-state/src/helpers/hash.ts","../node_modules/schummar-state/node_modules/fast-deep-equal/es6/react.js","../node_modules/schummar-state/src/helpers/stringSelector.ts","../node_modules/schummar-state/src/helpers/throttle.ts","../node_modules/schummar-state/src/store.ts","../node_modules/schummar-state/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js","../node_modules/schummar-state/node_modules/use-sync-external-store/shim/index.js","../node_modules/schummar-state/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js","../node_modules/schummar-state/node_modules/use-sync-external-store/shim/with-selector.js","../node_modules/schummar-state/src/react/useStoreState.ts","../node_modules/schummar-state/src/react/useStoreProp.ts","../node_modules/schummar-state/src/react/store.ts","../node_modules/schummar-state/src/react/storeScope.tsx","../node_modules/schummar-state/src/react/useResource.ts","../src/theme/tableTheme.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Checkbox,\n CircularProgress,\n IconButton,\n TextField,\n useTheme,\n} from '@material-ui/core';\nimport type { ReactNode } from 'react';\nimport { useMemo } from 'react';\nimport { TableSettingsProvider } from '../../misc/tableSettings';\nimport type { PartialTableTheme } from '../../types';\nimport { Popover } from '../defaultTheme/popover';\nimport { mergeThemes } from '../tableTheme';\n\nexport const mui4Theme: PartialTableTheme = {\n components: {\n Button: (props) => (\n <Button\n {...props}\n size=\"small\"\n fullWidth\n css={{ justifyContent: 'start !important' }}\n color={props.variant === 'contained' ? 'primary' : 'inherit'}\n />\n ),\n IconButton: (props) => <IconButton {...props} size=\"small\" color=\"inherit\" />,\n Checkbox: (props) => <Checkbox {...props} color=\"primary\" size=\"medium\" />,\n Popover,\n Badge,\n TextField: ({ startIcon, endIcon, ...props }) => (\n <TextField\n {...props}\n InputProps={{ startAdornment: startIcon, endAdornment: endIcon }}\n size=\"small\"\n variant=\"outlined\"\n />\n ),\n Spinner: CircularProgress,\n },\n};\n\nexport function Mui4TableThemeProvider({\n theme,\n children,\n}: {\n theme?: PartialTableTheme;\n children: ReactNode;\n}) {\n const muiTheme = useTheme();\n\n const _theme = useMemo(() => {\n return mergeThemes(\n {\n colors: {\n primary: muiTheme.palette.primary,\n secondary: muiTheme.palette.secondary,\n background: muiTheme.palette.background.default,\n text: muiTheme.palette.text.primary,\n border: muiTheme.palette.divider,\n borderLight: muiTheme.palette.divider,\n },\n },\n mui4Theme,\n theme ?? {},\n );\n }, [muiTheme, theme]);\n\n return <TableSettingsProvider theme={_theme}>{children}</TableSettingsProvider>;\n}\n","import { ReactNode, createContext, useContext } from 'react';\nimport CsvExporter from '../exporters/csvExporter';\nimport { ExporterEntry } from '../exporters/exporter';\nimport { PartialTableTheme } from '../types';\n\nexport interface TableSettingsContextType {\n theme: PartialTableTheme;\n exporters: ExporterEntry[];\n}\n\nexport const TableSettingsContext = createContext<TableSettingsContextType>({\n theme: {},\n exporters: [\n { action: 'copy', exporter: new CsvExporter() },\n { action: 'download', exporter: new CsvExporter() },\n ],\n});\n\nexport function TableSettingsProvider({\n theme,\n exporters,\n additionalExporters,\n children,\n}: Partial<TableSettingsContextType> & {\n additionalExporters?: ExporterEntry[];\n children?: ReactNode;\n}) {\n const inherited = useContext(TableSettingsContext);\n theme ??= inherited.theme;\n exporters ??= inherited.exporters;\n\n if (additionalExporters) {\n exporters = [...exporters, ...additionalExporters];\n }\n\n return (\n <TableSettingsContext.Provider\n value={{\n theme,\n exporters,\n }}\n >\n {children}\n </TableSettingsContext.Provider>\n );\n}\n","import { BlobExporter, StringExporter } from './exporter';\n\nexport interface CsvExporterOptions {\n sepPrefix?: boolean;\n separator?: string;\n quote?: string;\n eol?: string;\n}\n\nexport default class CsvExporter implements StringExporter, BlobExporter {\n readonly type = 'csv';\n readonly fileEnding = 'csv';\n\n constructor(public readonly options: CsvExporterOptions = {}) {}\n\n exportToString(\n columns: (string | number | Date)[],\n rows: (string | number | Date)[][],\n options = this.options,\n ): string {\n const { sepPrefix, separator = '\\t', quote = '\"', eol = '\\n' } = options;\n\n const cells = [columns, ...rows].map((line) =>\n line.map((value) => {\n let stringValue: string;\n if (typeof value === 'number') {\n stringValue = String(value);\n } else if (value instanceof Date) {\n stringValue = value.toISOString();\n } else {\n stringValue = value;\n }\n\n if (![separator, quote, eol].some((c) => stringValue.includes(c))) {\n return value;\n }\n\n const clean = stringValue.replace(new RegExp(quote, 'g'), `${quote}${quote}`);\n return `${quote}${clean}${quote}`;\n }),\n );\n\n return (\n (sepPrefix ? `SEP=${separator}\\n` : '') + cells.map((line) => line.join(separator)).join(eol)\n );\n }\n\n exportToBlob(columns: (string | number | Date)[], rows: (string | number | Date)[][]): Blob {\n const data = this.exportToString(columns, rows, {\n ...this.options,\n sepPrefix: this.options.sepPrefix ?? true,\n });\n return new Blob([data], { type: 'text/csv' });\n }\n}\n","import { useLayoutEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport type { TableTheme } from '../../types';\nimport { defaultClasses } from './defaultClasses';\n\nconst MARGIN = 10;\nconst MAX_OFFSET = 20;\n\nexport const Popover: TableTheme['components']['Popover'] = ({\n anchorEl,\n open,\n hidden,\n onClose,\n children,\n className,\n backdropClassName,\n align,\n}) => {\n const popper = useRef<HTMLDivElement>(null);\n const [position, setPosition] = useState<{ left: number; top: number }>();\n const [maxHeight, setMaxHeight] = useState(document.documentElement.clientHeight - 2 * MARGIN);\n const [zIndex, setZIndex] = useState(1);\n\n useLayoutEffect(() => {\n if (!anchorEl || !open) {\n setPosition(undefined);\n return;\n }\n\n let last: { left: number; top: number } | undefined;\n\n function check() {\n if (!anchorEl) return;\n const {\n left: anchorLeft,\n bottom: anchorBottom,\n width: anchorWidth,\n } = anchorEl.getBoundingClientRect();\n const { width: popperWidth = 0 } = popper.current?.getBoundingClientRect() ?? {};\n const viewportWidth = document.documentElement.clientWidth;\n const viewportHeight = document.documentElement.clientHeight;\n\n const next = {\n left:\n align === 'center'\n ? anchorLeft + anchorWidth / 2 - popperWidth / 2\n : anchorLeft -\n Math.min(popperWidth ? popperWidth / 2 : Number.POSITIVE_INFINITY, MAX_OFFSET),\n top: anchorBottom,\n };\n\n if (next.left < MARGIN) {\n next.left = MARGIN;\n }\n if (next.left + popperWidth > viewportWidth - MARGIN) {\n next.left = viewportWidth - MARGIN - popperWidth;\n }\n if (next.top < MARGIN) {\n next.top = MARGIN;\n }\n\n if (next.left !== last?.left || next.top !== last?.top) {\n setPosition(next);\n }\n\n setMaxHeight(viewportHeight - MARGIN - next.top);\n\n last = next;\n }\n check();\n\n const handle = setInterval(check, 16);\n return () => {\n clearInterval(handle);\n };\n }, [anchorEl, open, align]);\n\n function updateZIndex(div: HTMLDivElement | null) {\n const ancestors = [];\n for (let node = div?.parentElement; node; node = node.parentElement) {\n ancestors.push(node);\n }\n\n for (const node of ancestors.reverse()) {\n const value = document.defaultView?.getComputedStyle(node).getPropertyValue('z-index');\n\n if (value && !Number.isNaN(Number(value))) {\n setZIndex(Number(value) + 1);\n return;\n }\n }\n }\n\n if (!open) return null;\n\n return (\n <>\n <div\n ref={updateZIndex}\n css={{\n display: 'none',\n }}\n />\n\n {createPortal(\n <>\n <div\n className={backdropClassName}\n css={[\n {\n position: 'fixed',\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n zIndex,\n },\n hidden && { display: 'none' },\n ]}\n onClick={() => onClose()}\n />\n\n <div\n ref={popper}\n className={className}\n css={[\n defaultClasses.card,\n {\n position: 'fixed',\n maxWidth: document.documentElement.clientWidth - 2 * MARGIN,\n maxHeight,\n ...position,\n zIndex: zIndex + 1,\n overflowY: 'auto',\n color: 'var(--table-text-color)',\n },\n hidden && { display: 'none' },\n !position && { visibility: 'hidden' },\n ]}\n >\n {children}\n </div>\n </>,\n document.body,\n )}\n </>\n );\n};\n","import { css } from '@emotion/react';\n\nconst cell = css({\n padding: `calc(var(--spacing) * 0.1) calc(2 * var(--spacing))`,\n display: 'flex',\n alignItems: 'center',\n borderBottom: '1px solid var(--table-border-light-color)',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n\n '&:empty': {\n padding: 0,\n },\n});\n\nexport const defaultClasses = {\n table: css({\n position: 'relative',\n display: 'grid',\n color: 'var(--table-text-color)',\n }),\n\n cell,\n\n cellFill: css({\n borderBottom: '1px solid var(--table-border-light-color)',\n }),\n\n headerCell: css(cell, {\n borderBottom: '1px solid var(--table-border-color)',\n background: 'var(--table-background-color)',\n\n '&:not(:empty)': {\n padding: `var(--spacing) 0 var(--spacing) calc(2 * var(--spacing))`,\n },\n }),\n\n footerCell: css(cell, {\n padding: `var(--spacing) calc(2 * var(--spacing))`,\n borderTop: '1px solid var(--table-border-color)',\n borderBottom: 'none',\n background: 'var(--table-background-color)',\n }),\n\n firstCell: css({\n justifyContent: 'start',\n }),\n\n sticky: css({\n position: 'sticky',\n top: 0,\n zIndex: 2,\n }),\n\n stickyBottom: css({\n position: 'sticky',\n bottom: 0,\n zIndex: 2,\n }),\n\n headerFill: css({\n borderBottom: '1px solid var(--table-border-color)',\n background: 'var(--table-background-color)',\n }),\n\n footerFill: css({\n borderTop: '1px solid var(--table-border-color)',\n background: 'var(--table-background-color)',\n }),\n\n text: css({\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }),\n\n card: css({\n borderRadius: 4,\n boxShadow: '0px 3px 14px 2px rgb(0 0 0 / 12%)',\n background: 'var(--table-background-color)',\n }),\n\n clearFiltersButton: css({\n padding: `0 calc(2 * var(--spacing))`,\n fontWeight: 'bold',\n position: 'sticky',\n left: 0,\n maxWidth: 'fit-content',\n gridColumn: '2/-1',\n button: {\n color: 'var(--primaryMain) !important',\n border: 'solid 1px',\n borderColor: 'var(--primaryMain) !important',\n margin: 'var(--spacing)',\n },\n }),\n\n details: css(cell, {\n gridColumn: '1 / -1',\n whiteSpace: 'normal',\n }),\n};\n","export type Path = (string | number)[];\n\nexport const isAncestor = (ancestor: Path, path: Path): boolean => {\n return ancestor.length <= path.length && ancestor.every((v, i) => v === '*' || path[i] === '*' || String(v) === String(path[i]));\n};\n\nexport const get = (value: unknown, path: Path): unknown => {\n for (const part of path) {\n if (value instanceof Object && part in value) value = value[part as keyof typeof value];\n else {\n value = undefined;\n break;\n }\n }\n return value;\n};\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const split = (value: any, path: Path): [value: unknown, subValues: { path: Path; value: unknown }[]] => {\n const [first, ...rest] = path;\n if (first === undefined) return [value, []];\n\n if (rest.length === 0) {\n if (first === '*') return [{}, Object.entries(value).map(([k, v]) => ({ path: [k], value: v }))];\n if (!(first in value)) return [value, []];\n const { [first]: subValue, ...newValue } = value;\n return [newValue, [{ path: [first], value: subValue }]];\n }\n\n const newValue = { ...value };\n const subValues = new Array<{ path: Path; value: unknown }>();\n for (const key of first === '*' ? Object.keys(value) : [first]) {\n if (!(newValue[key] instanceof Object)) return [value, []];\n const result = split(newValue[key], rest);\n newValue[key] = result[0];\n subValues.push(...result[1].map((s) => ({ path: [key, ...s.path], value: s.value })));\n }\n return [newValue, subValues];\n};\n","import { Patch } from 'immer';\nimport { Store } from '../store';\nimport { get, isAncestor, Path, split } from './persistPathHelpers';\nimport { PersistPaths } from './persistPaths';\nimport { StorePersistStorage } from './persistStorage';\n\nexport class StorePersist<T> {\n private replayPatches = new Array<Patch>();\n isInitialized = false;\n whenInitialized = this.load();\n private isStopped = false;\n private sub?: () => void;\n private saveQueue = new Array<{ path: Path; t: number }>();\n private isSaving = false;\n private saveTimeout?: ReturnType<typeof setTimeout>;\n private paths: { path: Path; throttleMs?: number }[];\n\n constructor(\n public readonly store: Store<T>,\n public readonly storage: StorePersistStorage,\n public readonly options: {\n paths?: (PersistPaths<T> | { path: PersistPaths<T>; throttleMs?: number })[];\n throttleMs?: number;\n log?: (...args: any[]) => void;\n } = {}\n ) {\n if (!options.paths) {\n this.paths = [{ path: [], throttleMs: options.throttleMs }];\n } else {\n this.paths = options.paths.map((p) => ({\n path: (typeof p === 'object' ? p.path : p).split('.'),\n throttleMs: (typeof p === 'object' ? p.throttleMs : undefined) ?? options.throttleMs,\n }));\n }\n\n this.paths.sort((a, b) => b.path.length - a.path.length);\n this.watch();\n }\n\n private async load() {\n try {\n const storage = this.storage;\n\n let keys;\n if ('keys' in storage) {\n keys = await storage.keys();\n } else {\n const length = storage.length instanceof Function ? await storage.length() : storage.length;\n keys = new Array<string>();\n for (let i = 0; i < length; i++) {\n const key = await storage.key(i);\n if (key !== null) keys.push(key);\n }\n }\n keys.sort((a, b) => a.length - b.length);\n\n const patches = new Array<Patch & { persist: StorePersist<T> }>();\n for (const key of keys) {\n const value = await storage.getItem(key);\n if (value) {\n patches.push({\n path: key.split('.'),\n op: 'replace',\n value: value === 'undefined' ? undefined : JSON.parse(value),\n persist: this,\n });\n }\n }\n\n if (this.isStopped) {\n return false;\n }\n\n if (patches.length > 0) {\n this.store.applyPatches(patches);\n }\n\n this.isInitialized = true;\n if (this.replayPatches.length > 0) {\n this.store.applyPatches(this.replayPatches);\n this.replayPatches = [];\n }\n\n return true;\n } catch (e) {\n (this.options.log ?? console.error)('Failed to load storePersist:', e);\n return false;\n }\n }\n\n private watch() {\n this.sub = this.store.subscribePatches((patches) => {\n for (const patch of patches) {\n if ((patch as any).persist === this) {\n continue;\n } else if (this.isInitialized === true) {\n this.addToSaveQueue(patch.path);\n } else {\n this.replayPatches.push(patch);\n }\n }\n });\n }\n\n private addToSaveQueue(path: Path) {\n const match = this.paths.find((p) => isAncestor(p.path, path));\n if (!match) return;\n\n path = path.slice(0, match.path.length);\n const t = Date.now() + (match.throttleMs ?? 0);\n\n if (this.saveQueue.some((i) => i.t <= t && isAncestor(i.path, path))) return;\n this.saveQueue.push({ path, t });\n this.saveQueue.sort((a, b) => a.t - b.t);\n this.run();\n }\n\n private async run() {\n if (this.saveTimeout) clearTimeout(this.saveTimeout);\n const next = this.saveQueue[0];\n\n if (!next) return;\n if (next.t > Date.now()) {\n this.saveTimeout = setTimeout(() => this.run(), next.t - Date.now());\n return;\n }\n\n try {\n this.isSaving = true;\n this.saveQueue.shift();\n await this.save(next.path);\n } finally {\n this.isSaving = false;\n this.run();\n }\n }\n\n private async save(path: Path) {\n const { store, storage } = this;\n let value = get(store.getState(), path);\n\n const subPaths = this.paths\n .filter((p) => isAncestor(path, p.path) && p.path.length > path.length)\n .map((p) => p.path.slice(path.length));\n\n const subValues = new Array<{ path: Path; value: unknown }>();\n for (const subPath of subPaths) {\n const result = split(value, subPath);\n value = result[0];\n subValues.push(...result[1].map((s) => ({ path: [...path, ...s.path], value: s.value })));\n }\n\n const result = storage.setItem(path.join('.'), JSON.stringify(value) ?? 'undefined');\n if (result instanceof Promise) await result;\n for (const { path, value } of subValues) {\n const result = storage.setItem(path.join('.'), JSON.stringify(value) ?? 'undefined');\n if (result instanceof Promise) await result;\n }\n }\n\n stop(): void {\n this.isStopped = true;\n this.sub?.();\n }\n}\n","export function hash(arg: unknown): string {\n return JSON.stringify({ arg }, (_key, value) => {\n if (value instanceof Object && !(value instanceof Array)) {\n const obj: any = {};\n for (const key of Object.keys(value).sort()) {\n obj[key] = value[key as keyof typeof value];\n }\n return obj;\n }\n return value;\n });\n}\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n var envHasBigInt64Array = typeof BigInt64Array !== 'undefined';\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n if ((a instanceof Map) && (b instanceof Map)) {\n if (a.size !== b.size) return false;\n for (i of a.entries())\n if (!b.has(i[0])) return false;\n for (i of a.entries())\n if (!equal(i[1], b.get(i[0]))) return false;\n return true;\n }\n\n if ((a instanceof Set) && (b instanceof Set)) {\n if (a.size !== b.size) return false;\n for (i of a.entries())\n if (!b.has(i[0])) return false;\n return true;\n }\n\n if (ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (a[i] !== b[i]) return false;\n return true;\n }\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (key === '_owner' && a.$$typeof) {\n // React-specific: avoid traversing React elements' _owner.\n // _owner contains circular references\n // and is not needed when comparing the actual elements (and not their owners)\n continue;\n }\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","type FilterString<T> = T extends string ? T : never;\n\nexport declare type SelectorPaths<T> = FilterString<\n keyof {\n [K in keyof NonNullable<T> as\n | K\n | (0 extends 1 & NonNullable<T>[K]\n ? `${FilterString<K>}.${any}`\n : NonNullable<NonNullable<T>[K]> extends Record<string, unknown>\n ? `${FilterString<K>}.${SelectorPaths<NonNullable<T>[K]>}`\n : never)]: 1;\n }\n>;\n\ntype Value<T, K> = K extends keyof T ? T[K] : K extends keyof NonNullable<T> ? NonNullable<T>[K] | undefined : undefined;\n\nexport type SelectorValue<T, K> = K extends `${infer K}.${infer Rest}` ? SelectorValue<Value<T, K>, Rest> : Value<T, K>;\n\nexport function createSelector<T, S>(stringSelector: string): (state: T) => S {\n const parts = stringSelector.split('.');\n return (state) => parts.reduce<any>((v, p) => (v instanceof Object && p in v ? v[p as keyof typeof v] : undefined), state);\n}\n\nexport function setWithSelector(state: unknown, stringSelector: string, value: unknown): void {\n const parts = stringSelector.split('.');\n const prefix = parts.slice(0, -1);\n const last = parts[parts.length - 1]!;\n\n for (const part of prefix) {\n if (state instanceof Object && part in state) {\n state = state[part as keyof typeof state];\n } else {\n throw Error(`Could not set ${stringSelector} because path ${stringSelector} doesn't exist`);\n }\n }\n\n if (state instanceof Object) {\n state[last as keyof typeof state] = value as any;\n } else {\n throw Error(`Could not set ${stringSelector} because path ${stringSelector} doesn't exist`);\n }\n}\n","export function throttle<Args extends any[]>(fn: (...args: Args) => void, ms: number): (...args: Args) => void {\n let last = 0;\n let lastArgs: Args | undefined;\n let timeout: ReturnType<typeof setTimeout> | undefined;\n\n function run() {\n const args = lastArgs;\n\n last = Date.now();\n lastArgs = undefined;\n timeout = undefined;\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n fn(...args!);\n }\n\n return function (...args: Args) {\n const now = Date.now();\n lastArgs = args;\n\n if (timeout) {\n // do nothing\n } else if (now < last + ms) {\n timeout = setTimeout(run, last + ms - now);\n } else {\n run();\n }\n };\n}\n","import eq from 'fast-deep-equal/es6/react';\nimport { applyPatches, Draft, enableMapSet, enablePatches, freeze, Patch, produce } from 'immer';\nimport { Cancel } from './helpers/misc';\nimport { createSelector, SelectorPaths, SelectorValue } from './helpers/stringSelector';\nimport { throttle as throttleFn } from './helpers/throttle';\n\nexport type StoreOptions = {\n /** Log errors. Default: console.error */\n log?: (...data: any[]) => void;\n};\n\nexport type StoreSubscribeOptions = {\n /** Invoke callback immediately with the current value? Default: true */\n runNow?: boolean;\n /** Throttle invocations of callback. */\n throttle?: number;\n /** Comparison function to determine if the data has changed. Default: fast-deep-equal */\n compare?: (a: any, b: any) => boolean;\n};\n\nexport type StoreAddReactionOptions = {\n /** Invoke callback immediately with the current value? Default: true */\n runNow?: boolean;\n /** Comparison function to determine if the data has changed. Default: fast-deep-equal */\n compare?: (a: any, b: any) => boolean;\n};\n\nconst RESTART_UPDATE = Symbol('RESTART_UPDATE');\n\nexport class Store<T> {\n private subscriptions = new Set<(state: T, patches: Patch[]) => void>();\n private batchCounter = 0;\n private reactions = new Set<() => void>();\n private patches = new Array<Patch>();\n private lock?: 'reaction';\n private options;\n\n constructor(private state: T, { log = (...data: any[]) => console.error(...data) }: StoreOptions = {}) {\n freeze(state, true);\n enableMapSet();\n enablePatches();\n\n this.options = {\n log,\n };\n }\n\n getState(): T {\n return this.state;\n }\n\n update(update: (draft: Draft<T>, original: T) => Draft<T> | void | undefined): void {\n this.checkLock();\n\n this.state = produce(\n this.state,\n (draft) => update(draft, this.state),\n (patches) => this.patches.push(...patches)\n );\n\n this.notify();\n }\n\n set(state: T): void {\n this.checkLock();\n\n this.state = produce(\n this.state,\n () => state,\n (patches) => this.patches.push(...patches)\n ) as T;\n\n this.notify();\n }\n\n applyPatches(patches: Patch[]): void {\n this.checkLock();\n\n this.state = applyPatches(this.state, patches);\n this.patches.push(...patches);\n\n this.notify();\n }\n\n batchUpdates(fn: () => void): void {\n try {\n this.batchCounter++;\n fn();\n } finally {\n this.batchCounter--;\n if (this.batchCounter === 0) {\n this.notify();\n }\n }\n }\n\n subscribe(listener: (value: T, prev: T, state: T) => void, options?: StoreSubscribeOptions): Cancel;\n subscribe<S>(selector: (state: T) => S, listener: (value: S, prev: S, state: T) => void, options?: StoreSubscribeOptions): Cancel;\n subscribe<K extends SelectorPaths<T>>(\n selector: K,\n listener: (value: SelectorValue<T, K>, prev: SelectorValue<T, K>, state: T) => void,\n options?: StoreSubscribeOptions\n ): Cancel;\n subscribe<S>(...args: any[]): Cancel {\n let selector: (state: T) => S, listener: (value: S, prev: S, state: T) => void, options: StoreSubscribeOptions | undefined;\n\n if (args[1] instanceof Function) {\n [selector, listener, options] = args;\n if (typeof selector === 'string') {\n selector = createSelector<T, S>(selector);\n }\n } else {\n [selector, listener, options] = [(x) => x as any, ...args];\n }\n\n const { runNow = true, throttle = 0, compare = eq } = options ?? {};\n const throttledListener = throttle ? throttleFn(listener, throttle) : listener;\n\n let value = selector(this.state);\n\n const internalListener = (state: T, _patches: Patch[], init?: boolean) => {\n try {\n const oldValue = value;\n value = selector(state);\n if (!init && compare(value, oldValue)) return;\n (init ? listener : throttledListener)(value, oldValue, this.state);\n } catch (e) {\n this.options.log('Failed to execute listener:', e);\n }\n };\n\n this.subscriptions.add(internalListener);\n if (runNow) internalListener(this.state, [], true);\n return () => {\n this.subscriptions.delete(internalListener);\n };\n }\n\n addReaction(reaction: (value: T, draft: Draft<T>, original: T, prev: T) => void, options?: StoreAddReactionOptions): Cancel;\n addReaction<S>(\n selector: (state: T) => S,\n reaction: (value: S, draft: Draft<T>, original: T, prev: S) => void,\n options?: StoreAddReactionOptions\n ): Cancel;\n addReaction<K extends SelectorPaths<T>>(\n selector: K,\n reaction: (value: SelectorValue<T, K>, draft: Draft<T>, original: T, prev: SelectorValue<T, K>) => void,\n options?: StoreAddReactionOptions\n ): Cancel;\n addReaction<S>(...args: any[]): Cancel {\n let selector: (state: T) => S,\n reaction: (value: S, draft: Draft<T>, original: T, prev: S) => void,\n options: StoreAddReactionOptions | undefined;\n\n if (args[1] instanceof Function) {\n [selector, reaction, options] = args;\n if (typeof selector === 'string') {\n selector = createSelector<T, S>(selector);\n }\n } else {\n [selector, reaction, options] = [(x) => x as any, ...args];\n }\n const { runNow = true, compare = eq } = options ?? {};\n\n let value = selector(this.state);\n\n const internalListener = (init?: boolean) => {\n let hasChanged = false;\n\n try {\n this.lock = 'reaction';\n const oldValue = value;\n value = selector(this.state);\n if (!init && compare(value, oldValue)) return;\n\n this.state = produce(\n this.state,\n (draft) => reaction(value, draft, this.state, oldValue),\n (patches) => {\n hasChanged = true;\n this.patches.push(...patches);\n }\n );\n } catch (e) {\n this.options.log('Failed to execute reaction:', e);\n } finally {\n delete this.lock;\n }\n\n if (hasChanged && !init) throw RESTART_UPDATE;\n if (hasChanged && init) this.notify();\n };\n\n this.reactions.add(internalListener);\n if (runNow) internalListener(true);\n return () => {\n this.reactions.delete(internalListener);\n };\n }\n\n subscribePatches(listener: (patches: Patch[]) => void): Cancel {\n const internalListener = (_state: T, patches: Patch[]) => {\n try {\n listener(patches);\n } catch (e) {\n this.options.log('Failed to execute patch listener:', e);\n }\n };\n\n this.subscriptions.add(internalListener);\n return () => {\n this.subscriptions.delete(internalListener);\n };\n }\n\n private checkLock() {\n if (this.lock === 'reaction') {\n throw Error('You cannot call update from within a reaction. Use the passed draft instead.');\n }\n }\n\n private notify(): void {\n if (this.batchCounter > 0 || this.patches.length === 0) return;\n\n try {\n for (const reaction of this.reactions) {\n reaction();\n }\n } catch (e) {\n return this.notify();\n }\n\n const patches = this.patches;\n this.patches = [];\n\n this.batchUpdates(() => {\n for (const subscription of this.subscriptions) {\n subscription(this.state, patches);\n }\n });\n }\n}\n","/** @license React vundefined\n * use-sync-external-store-shim.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var e=require(\"react\");function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k=\"function\"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c})},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c})})},[a]);p(d);return d}\nfunction r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return!k(a,d)}catch(f){return!0}}function t(a,b){return b()}var u=\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement?t:q;exports.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/** @license React vundefined\n * use-sync-external-store-shim/with-selector.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var h=require(\"react\"),n=require(\"use-sync-external-store/shim\");function p(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var q=\"function\"===typeof Object.is?Object.is:p,r=n.useSyncExternalStore,t=h.useRef,u=h.useEffect,v=h.useMemo,w=h.useDebugValue;\nexports.useSyncExternalStoreWithSelector=function(a,b,e,l,g){var c=t(null);if(null===c.current){var f={hasValue:!1,value:null};c.current=f}else f=c.current;c=v(function(){function a(a){if(!c){c=!0;d=a;a=l(a);if(void 0!==g&&f.hasValue){var b=f.value;if(g(b,a))return k=b}return k=a}b=k;if(q(d,a))return b;var e=l(a);if(void 0!==g&&g(b,e))return b;d=a;return k=e}var c=!1,d,k,m=void 0===e?null:e;return[function(){return a(b())},null===m?void 0:function(){return a(m())}]},[b,e,l,g]);var d=r(a,c[0],c[1]);\nu(function(){f.hasValue=!0;f.value=d},[d]);w(d);return d};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","import eq from 'fast-deep-equal/es6/react';\nimport { useCallback, useDebugValue } from 'react';\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';\nimport { StoreSubscribeOptions } from '..';\nimport { createSelector, SelectorPaths, SelectorValue } from '../helpers/stringSelector';\nimport { Store } from './store';\n\nexport type UseStoreStateOptions = Omit<StoreSubscribeOptions, 'runNow'>;\n\nexport function useStoreState<T>(store: Store<T>, options?: UseStoreStateOptions): T;\nexport function useStoreState<T, S>(store: Store<T>, selector: (state: T) => S, options?: UseStoreStateOptions): S;\nexport function useStoreState<T, K extends SelectorPaths<T>>(\n store: Store<T>,\n selector: K,\n options?: UseStoreStateOptions\n): SelectorValue<T, K>;\nexport function useStoreState<T, S>(store: Store<T>, ...args: any[]): S {\n let selector: (state: T) => S, options: UseStoreStateOptions;\n\n if (args[0] instanceof Function) {\n selector = args[0];\n options = args[1] ?? {};\n } else if (typeof args[0] === 'string') {\n selector = createSelector(args[0]);\n options = args[1] ?? {};\n } else {\n selector = (x) => x as any;\n options = args[0] ?? {};\n }\n\n const subscribe = useCallback(\n (listener: () => void) => {\n return store.subscribe((x) => x, listener, {\n throttle: options.throttle,\n runNow: false,\n compare: (a, b) => a === b,\n });\n },\n [store, options.throttle]\n );\n\n const getSnapshot = useCallback(() => store.getState(), [store]);\n\n const value = useSyncExternalStoreWithSelector(\n //\n subscribe,\n getSnapshot,\n getSnapshot,\n selector,\n options.compare ?? eq\n );\n\n useDebugValue(value);\n return value;\n}\n","import { SelectorPaths, SelectorValue, setWithSelector } from '../helpers/stringSelector';\nimport { Store } from './store';\nimport { useStoreState } from './useStoreState';\n\nexport type UseStorePropResult<T, K extends SelectorPaths<T>> = [value: SelectorValue<T, K>, update: (value: SelectorValue<T, K>) => void];\n\nexport function useStoreProp<T, K extends SelectorPaths<T>>(store: Store<T>, selector: K): UseStorePropResult<T, K> {\n const value = useStoreState(store, selector);\n const update = (value: SelectorValue<T, K>) => store.update((state) => setWithSelector(state, selector, value));\n\n return [value, update];\n}\n","import { Store as BaseStore } from '../store';\nimport { SelectorPaths, SelectorValue } from '../helpers/stringSelector';\nimport { useStoreProp, UseStorePropResult } from './useStoreProp';\nimport { useStoreState, UseStoreStateOptions } from './useStoreState';\n\nexport class Store<T> extends BaseStore<T> {\n useState(options?: { throttle?: number }): T;\n useState<S>(selector: (state: T) => S, options?: UseStoreStateOptions): S;\n useState<K extends SelectorPaths<T>>(selector: K, options?: UseStoreStateOptions): SelectorValue<T, K>;\n useState(...args: any[]): any {\n return useStoreState(this, ...args);\n }\n\n useProp<K extends SelectorPaths<T>>(selector: K): UseStorePropResult<T, K> {\n return useStoreProp(this, selector);\n }\n}\n","import React, { Context, createContext, ReactNode, useContext, useMemo } from 'react';\nimport { SelectorPaths, SelectorValue } from '../helpers/stringSelector';\nimport { Store } from './store';\nimport { useStoreProp, UseStorePropResult } from './useStoreProp';\nimport { useStoreState, UseStoreStateOptions } from './useStoreState';\n\nexport class StoreScope<T> {\n readonly context: Context<Store<T>>;\n\n constructor(public readonly defaultValue: T) {\n this.context = createContext(new Store(defaultValue));\n }\n\n Provider = ({ children, store }: { children: ReactNode; store?: Store<T> }): JSX.Element => {\n const _store = useMemo(() => store ?? new Store(this.defaultValue), [store]);\n\n return <this.context.Provider value={_store}>{children}</this.context.Provider>;\n };\n\n withScope = <Args extends Record<string, unknown>>(Component: (args: Args) => JSX.Element) => {\n return (args: Args): JSX.Element => (\n <this.Provider>\n <Component {...args} />\n </this.Provider>\n );\n };\n\n useStore(): Store<T> {\n return useContext(this.context);\n }\n\n useState(options?: { throttle?: number }): T;\n useState<S>(selector: (state: T) => S, dependencies?: any[], options?: { throttle?: number }): S;\n useState<K extends SelectorPaths<T>>(selector: K, options?: UseStoreStateOptions): SelectorValue<T, K>;\n useState(...args: any[]): any {\n const store = this.useStore();\n return useStoreState(store, ...args);\n }\n\n useProp<K extends SelectorPaths<T>>(selector: K): UseStorePropResult<T, K> {\n const store = this.useStore();\n return useStoreProp(store, selector);\n }\n}\n","import eq from 'fast-deep-equal/es6/react';\nimport { useCallback, useDebugValue, useEffect } from 'react';\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';\nimport { ResourceInfo, ResourceInstance, ResourceSubscribeOptions } from '..';\nimport { hash } from '../helpers/hash';\n\nexport type UseResource<Value> = Pick<ResourceInstance<unknown, Value>, 'id' | 'invalidateCache' | 'subscribe' | 'getCache' | 'get'>;\n\nexport type UseResourceOptions = Omit<ResourceSubscribeOptions, 'runNow'> & {\n /** Invalidate the resource on mount, causing it to update in the background */\n updateOnMount?: boolean;\n /** Don't subscribe resource while this is true */\n dormant?: boolean;\n};\n\n/** Subscribe to a resource. This will immediately return cached values, if available, and update for future updates.\n * @param resource the resource to subscribe to.\n * @param options options\n */\nexport function useResource<Value>(resource: UseResource<Value>, options?: UseResourceOptions): ResourceInfo<Value> {\n const { compare, dormant, throttle, updateOnMount, watchOnly } = options ?? {};\n\n useEffect(() => {\n if (updateOnMount && !dormant) {\n resource.invalidateCache();\n }\n }, []);\n\n const subscribe = useCallback(\n (listener: () => void) => {\n if (dormant)\n return () => {\n // nothing to do\n };\n\n return resource.subscribe(listener, {\n watchOnly,\n throttle,\n runNow: false,\n compare,\n });\n },\n [resource.id, watchOnly, dormant, throttle]\n );\n\n const getSnapshot = useCallback(() => resource.getCache(), [resource.id]);\n\n let value = useSyncExternalStoreWithSelector(\n //\n subscribe,\n getSnapshot,\n getSnapshot,\n (x) => x,\n eq\n );\n\n if (dormant) {\n value = { state: 'empty', isLoading: false };\n }\n\n useDebugValue(value);\n return value;\n}\n\n/** Subscribe to a resource. This will immediately return cached values, if available, and update for future updates. While waiting for data, it throws so that the Component will be suspended. If there is an error, it throws.\n * @param resource the resource to subscribe to.\n * @param options options\n */\nexport function useReadResource<Value>(resource: UseResource<Value>, options?: UseResourceOptions): Value {\n const info = useResource(resource, options);\n\n if (info.state === 'error') {\n throw info.error;\n }\n\n if (info.state === 'empty') {\n throw resource.get();\n }\n\n useDebugValue(info.value);\n return info.value;\n}\n\nexport type CombineValues<T> = T extends [UseResource<infer Value>]\n ? [Value]\n : T extends [UseResource<infer Value>, ...infer Rest]\n ? [Value, ...CombineValues<Rest>]\n : T extends readonly UseResource<infer Value>[]\n ? Value[]\n : any[];\n\n/** Combine multiple resources into one that can be fed into useResource or useReadResource. Return value will be an array of the combined resources' values.\n * @param resources resources to be combined\n */\nexport function combineResources<Resources extends readonly UseResource<any>[]>(\n ...resources: Resources\n): UseResource<CombineValues<Resources>> {\n return {\n id: hash(resources.map((resource) => resource.id)),\n\n invalidateCache() {\n for (const resource of resources) {\n resource.invalidateCache();\n }\n },\n\n subscribe(listener, options) {\n const handles = resources.map((resource) => resource.subscribe(listener, options));\n\n return () => {\n for (const handle of handles) {\n handle();\n }\n };\n },\n\n getCache() {\n const caches = resources.map((resource) => resource.getCache());\n const isStale = caches.some((cache) => cache.isStale);\n const isLoading = caches.some((cache) => cache.isLoading);\n\n if (caches.some((resource) => resource.state === 'error')) {\n const error = caches.find((cache) => cache.error !== undefined)?.error;\n return { state: 'error', error, isStale, isLoading };\n }\n\n if (caches.every((resource) => resource.state === 'value')) {\n const value = caches.map((cache) => cache.value) as CombineValues<Resources>;\n return { state: 'value', value, isStale, isLoading };\n }\n\n return { state: 'empty', isLoading };\n },\n\n get() {\n return Promise.all(resources.map((resource) => resource.get())) as Promise<CombineValues<Resources>>;\n },\n };\n}\n","import { Store } from 'schummar-state/react';\nimport type { PartialTableTheme } from '../types';\n\nexport const globalTableTheme = new Store<PartialTableTheme>({});\n\nexport function configureTableTheme(tableTheme: PartialTableTheme) {\n globalTableTheme.set(tableTheme);\n}\n\nexport function mergeThemes<T>(...themes: PartialTableTheme<T>[]): PartialTableTheme<T> {\n return {\n text: Object.assign({}, ...themes.map((theme) => theme.text)),\n classes: Object.assign({}, ...themes.map((theme) => theme.classes)),\n styles: Object.assign({}, ...themes.map((theme) => theme.styles)),\n components: Object.assign({}, ...themes.map((theme) => theme.components)),\n icons: Object.assign({}, ...themes.map((theme) => theme.icons)),\n colors: {\n primary: Object.assign({}, ...themes.map((theme) => theme.colors?.primary)),\n secondary: Object.assign({}, ...themes.map((theme) => theme.colors?.secondary)),\n blocked: Object.assign({}, ...themes.map((theme) => theme.colors?.blocked)),\n background: themes\n .map((theme) => theme.colors?.background)\n .reverse()\n .find((x) => x !== undefined),\n text: themes\n .map((theme) => theme.colors?.text)\n .reverse()\n .find((x) => x !== undefined),\n border: themes\n .map((theme) => theme.colors?.border)\n .reverse()\n .find((x) => x !== undefined),\n borderLight: themes\n .map((theme) => theme.colors?.borderLight)\n .reverse()\n .find((x) => x !== undefined),\n },\n spacing: themes\n .map((theme) => theme.spacing)\n .reverse()\n .find((x) => x !== undefined),\n };\n}\n"],"mappings":"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","names":["import_react","import_react","import_react","import_jsx_runtime","v","p","throttle","eq","throttleFn","e","require$$0","h","n","p","r","u","t","q","shimModule","require$$1","withSelectorModule","useSyncExternalStoreWithSelector","eq","BaseStore","Store","import_jsx_runtime"]}
@@ -1,6 +1,6 @@
1
1
  import * as _emotion_react_jsx_runtime from '@emotion/react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
- import { P as PartialTableTheme } from './types-CkiMjwT9.cjs';
3
+ import { P as PartialTableTheme } from './types-DKqBJ_4v.cjs';
4
4
  import '@emotion/react';
5
5
  import './exporter-u6SatTo6.cjs';
6
6
 
@@ -1,6 +1,6 @@
1
1
  import * as _emotion_react_jsx_runtime from '@emotion/react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
- import { P as PartialTableTheme } from './types-C_rP1nwr.js';
3
+ import { P as PartialTableTheme } from './types-cAzUt-yT.js';
4
4
  import '@emotion/react';
5
5
  import './exporter-u6SatTo6.js';
6
6
 
package/dist/mui4Theme.js CHANGED
@@ -2,7 +2,7 @@ import {
2
2
  Popover,
3
3
  TableSettingsProvider,
4
4
  mergeThemes
5
- } from "./chunk-FTCKJOPQ.js";
5
+ } from "./chunk-NTYYITKA.js";
6
6
  import "./chunk-WFCJ3D3G.js";
7
7
  import {
8
8
  __objRest,
@@ -147,13 +147,14 @@ var import_react_dom = require("react-dom");
147
147
  // src/theme/defaultTheme/defaultClasses.ts
148
148
  var import_react2 = require("@emotion/react");
149
149
  var cell = (0, import_react2.css)({
150
+ padding: `calc(var(--spacing) * 0.1) calc(2 * var(--spacing))`,
150
151
  display: "flex",
151
152
  alignItems: "center",
152
153
  borderBottom: "1px solid var(--table-border-light-color)",
153
154
  whiteSpace: "nowrap",
154
155
  overflow: "hidden",
155
- "&:not(:empty)": {
156
- padding: `calc(var(--spacing) * 0.1) calc(2 * var(--spacing))`
156
+ "&:empty": {
157
+ padding: 0
157
158
  }
158
159
  });
159
160
  var defaultClasses = {