schummar-table 0.3.2 → 0.5.0-beta-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.
Files changed (156) hide show
  1. package/dist/assets/tableTheme.0eb513b0.js +215 -0
  2. package/dist/assets/tableTheme.0eb513b0.js.map +1 -0
  3. package/dist/assets/tableTheme.65fea986.js +214 -0
  4. package/dist/assets/tableTheme.65fea986.js.map +1 -0
  5. package/dist/assets/vendor.a5ec605d.js +2475 -0
  6. package/dist/assets/vendor.a5ec605d.js.map +1 -0
  7. package/dist/assets/vendor.c9c3328b.js +2464 -0
  8. package/dist/assets/vendor.c9c3328b.js.map +1 -0
  9. package/dist/cjs/mui4Theme.js +7 -0
  10. package/dist/cjs/mui4Theme.js.map +1 -0
  11. package/dist/cjs/mui5Theme.js +7 -0
  12. package/dist/cjs/mui5Theme.js.map +1 -0
  13. package/dist/cjs/schummar-table.js +1042 -0
  14. package/dist/cjs/schummar-table.js.map +1 -0
  15. package/dist/esm/mui4Theme.js +6 -0
  16. package/dist/esm/mui4Theme.js.map +1 -0
  17. package/dist/esm/mui5Theme.js +6 -0
  18. package/dist/esm/mui5Theme.js.map +1 -0
  19. package/dist/esm/schummar-table.js +1041 -0
  20. package/dist/esm/schummar-table.js.map +1 -0
  21. package/dist/{cjs → types}/components/cell.d.ts +1 -1
  22. package/dist/types/components/columnHeader.d.ts +7 -0
  23. package/dist/{cjs → types}/components/columnSelection.d.ts +0 -0
  24. package/dist/types/components/dateFilter.d.ts +8 -0
  25. package/dist/types/components/datePicker.d.ts +16 -0
  26. package/dist/types/components/expandControl.d.ts +6 -0
  27. package/dist/{cjs → types}/components/export.d.ts +0 -0
  28. package/dist/types/components/filterControl.d.ts +2 -0
  29. package/dist/types/components/formControlLabel.d.ts +5 -0
  30. package/dist/types/components/resizeHandle.d.ts +1 -0
  31. package/dist/{cjs → types}/components/row.d.ts +1 -1
  32. package/dist/{cjs → types}/components/selectComponent.d.ts +0 -0
  33. package/dist/types/components/selectFilter.d.ts +8 -0
  34. package/dist/{cjs → types}/components/sortComponent.d.ts +0 -0
  35. package/dist/types/components/spinnner.d.ts +3 -0
  36. package/dist/{cjs → types/components}/table.d.ts +1 -1
  37. package/dist/types/components/textFilter.d.ts +5 -0
  38. package/dist/{cjs → types}/components/virtualized.d.ts +0 -0
  39. package/dist/types/hooks/useFilter.d.ts +5 -0
  40. package/dist/types/hooks/useTheme.d.ts +1 -0
  41. package/dist/types/index.d.ts +10 -0
  42. package/dist/{cjs → types}/internalState/calcItems.d.ts +0 -0
  43. package/dist/{cjs → types}/internalState/calcProps.d.ts +0 -0
  44. package/dist/{cjs → types}/internalState/cleanupState.d.ts +0 -0
  45. package/dist/{cjs → types}/internalState/filterColumns.d.ts +0 -0
  46. package/dist/{cjs → types}/internalState/syncSelections.d.ts +0 -0
  47. package/dist/types/internalState/tableStateStorage.d.ts +11 -0
  48. package/dist/{cjs → types}/internalState/useTableState.d.ts +0 -0
  49. package/dist/{cjs → types}/misc/csvExport.d.ts +0 -0
  50. package/dist/types/misc/debounce.d.ts +4 -0
  51. package/dist/types/misc/deepPartial.d.ts +3 -0
  52. package/dist/{cjs → types}/misc/helpers.d.ts +2 -1
  53. package/dist/types/misc/queue.d.ts +6 -0
  54. package/dist/{cjs → types}/misc/textMatch.d.ts +0 -0
  55. package/dist/types/misc/throttle.d.ts +4 -0
  56. package/dist/types/theme/defaultClasses.d.ts +15 -0
  57. package/dist/types/theme/defaultColors.d.ts +2 -0
  58. package/dist/types/theme/defaultIcons.d.ts +2 -0
  59. package/dist/types/theme/defaultTexts.d.ts +2 -0
  60. package/dist/types/theme/defaultTheme/badge.d.ts +2 -0
  61. package/dist/types/theme/defaultTheme/button.d.ts +2 -0
  62. package/dist/types/theme/defaultTheme/checkbox.d.ts +2 -0
  63. package/dist/types/theme/defaultTheme/iconButton.d.ts +2 -0
  64. package/dist/types/theme/defaultTheme/index.d.ts +2 -0
  65. package/dist/types/theme/defaultTheme/popover.d.ts +4 -0
  66. package/dist/types/theme/defaultTheme/textField.d.ts +2 -0
  67. package/dist/types/theme/mui4Theme/index.d.ts +8 -0
  68. package/dist/types/theme/mui5Theme/index.d.ts +8 -0
  69. package/dist/types/theme/tableTheme.d.ts +11 -0
  70. package/dist/types/theme/useCssVariables.d.ts +9 -0
  71. package/dist/types/types.d.ts +285 -0
  72. package/package.json +78 -38
  73. package/dist/cjs/components/cell.js +0 -31
  74. package/dist/cjs/components/columnSelection.js +0 -37
  75. package/dist/cjs/components/defaultFilterComponent.d.ts +0 -22
  76. package/dist/cjs/components/defaultFilterComponent.js +0 -91
  77. package/dist/cjs/components/expandComponent.d.ts +0 -5
  78. package/dist/cjs/components/expandComponent.js +0 -38
  79. package/dist/cjs/components/export.js +0 -48
  80. package/dist/cjs/components/filterComponent.d.ts +0 -5
  81. package/dist/cjs/components/filterComponent.js +0 -25
  82. package/dist/cjs/components/row.js +0 -48
  83. package/dist/cjs/components/selectComponent.js +0 -61
  84. package/dist/cjs/components/sortComponent.js +0 -52
  85. package/dist/cjs/components/textFilterComponent.d.ts +0 -11
  86. package/dist/cjs/components/textFilterComponent.js +0 -70
  87. package/dist/cjs/components/useCommonClasses.d.ts +0 -1
  88. package/dist/cjs/components/useCommonClasses.js +0 -49
  89. package/dist/cjs/components/virtualized.js +0 -98
  90. package/dist/cjs/index.d.ts +0 -6
  91. package/dist/cjs/index.js +0 -18
  92. package/dist/cjs/internalState/calcItems.js +0 -85
  93. package/dist/cjs/internalState/calcProps.js +0 -89
  94. package/dist/cjs/internalState/cleanupState.js +0 -43
  95. package/dist/cjs/internalState/filterColumns.js +0 -10
  96. package/dist/cjs/internalState/syncSelections.js +0 -22
  97. package/dist/cjs/internalState/useTableState.js +0 -62
  98. package/dist/cjs/misc/csvExport.js +0 -15
  99. package/dist/cjs/misc/helpers.js +0 -91
  100. package/dist/cjs/misc/textMatch.js +0 -23
  101. package/dist/cjs/misc/throttle.d.ts +0 -1
  102. package/dist/cjs/misc/throttle.js +0 -30
  103. package/dist/cjs/package.json +0 -1
  104. package/dist/cjs/table.js +0 -69
  105. package/dist/cjs/types.d.ts +0 -134
  106. package/dist/cjs/types.js +0 -2
  107. package/dist/esm/components/cell.d.ts +0 -6
  108. package/dist/esm/components/cell.js +0 -28
  109. package/dist/esm/components/columnSelection.d.ts +0 -2
  110. package/dist/esm/components/columnSelection.js +0 -33
  111. package/dist/esm/components/defaultFilterComponent.d.ts +0 -22
  112. package/dist/esm/components/defaultFilterComponent.js +0 -86
  113. package/dist/esm/components/expandComponent.d.ts +0 -5
  114. package/dist/esm/components/expandComponent.js +0 -34
  115. package/dist/esm/components/export.d.ts +0 -2
  116. package/dist/esm/components/export.js +0 -44
  117. package/dist/esm/components/filterComponent.d.ts +0 -5
  118. package/dist/esm/components/filterComponent.js +0 -21
  119. package/dist/esm/components/row.d.ts +0 -7
  120. package/dist/esm/components/row.js +0 -44
  121. package/dist/esm/components/selectComponent.d.ts +0 -5
  122. package/dist/esm/components/selectComponent.js +0 -57
  123. package/dist/esm/components/sortComponent.d.ts +0 -4
  124. package/dist/esm/components/sortComponent.js +0 -48
  125. package/dist/esm/components/textFilterComponent.d.ts +0 -11
  126. package/dist/esm/components/textFilterComponent.js +0 -65
  127. package/dist/esm/components/useCommonClasses.d.ts +0 -1
  128. package/dist/esm/components/useCommonClasses.js +0 -46
  129. package/dist/esm/components/virtualized.d.ts +0 -6
  130. package/dist/esm/components/virtualized.js +0 -94
  131. package/dist/esm/index.d.ts +0 -6
  132. package/dist/esm/index.js +0 -4
  133. package/dist/esm/internalState/calcItems.d.ts +0 -3
  134. package/dist/esm/internalState/calcItems.js +0 -81
  135. package/dist/esm/internalState/calcProps.d.ts +0 -2
  136. package/dist/esm/internalState/calcProps.js +0 -85
  137. package/dist/esm/internalState/cleanupState.d.ts +0 -3
  138. package/dist/esm/internalState/cleanupState.js +0 -39
  139. package/dist/esm/internalState/filterColumns.d.ts +0 -3
  140. package/dist/esm/internalState/filterColumns.js +0 -6
  141. package/dist/esm/internalState/syncSelections.d.ts +0 -3
  142. package/dist/esm/internalState/syncSelections.js +0 -18
  143. package/dist/esm/internalState/useTableState.d.ts +0 -3
  144. package/dist/esm/internalState/useTableState.js +0 -58
  145. package/dist/esm/misc/csvExport.d.ts +0 -7
  146. package/dist/esm/misc/csvExport.js +0 -11
  147. package/dist/esm/misc/helpers.d.ts +0 -14
  148. package/dist/esm/misc/helpers.js +0 -77
  149. package/dist/esm/misc/textMatch.d.ts +0 -2
  150. package/dist/esm/misc/textMatch.js +0 -18
  151. package/dist/esm/misc/throttle.d.ts +0 -1
  152. package/dist/esm/misc/throttle.js +0 -26
  153. package/dist/esm/table.d.ts +0 -8
  154. package/dist/esm/table.js +0 -63
  155. package/dist/esm/types.d.ts +0 -134
  156. package/dist/esm/types.js +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schummar-table.js","sources":["../../src/theme/useCssVariables.ts","../../src/misc/helpers.ts","../../src/components/formControlLabel.tsx","../../src/components/columnHeader.tsx","../../src/components/columnSelection.tsx","../../src/misc/csvExport.ts","../../src/components/export.tsx","../../src/hooks/useTheme.ts","../../src/components/filterControl.tsx","../../src/components/resizeHandle.tsx","../../src/components/cell.tsx","../../src/components/expandControl.tsx","../../src/components/selectComponent.tsx","../../src/components/row.tsx","../../src/components/sortComponent.tsx","../../src/misc/throttle.ts","../../src/components/virtualized.tsx","../../src/components/table.tsx"],"sourcesContent":["import { useTableContext } from '..';\n\nexport function useCssVariables() {\n const table = useTableContext();\n return table.useState((state) => ({\n '--spacing': state.theme.spacing,\n '--primaryMain': state.theme.colors.primary.main,\n '--primaryLight': state.theme.colors.primary.light,\n '--primaryContrastText': state.theme.colors.primary.contrastText,\n '--secondaryMain': state.theme.colors.secondary.main,\n '--secondaryLight': state.theme.colors.secondary.light,\n '--secondaryContrastText': state.theme.colors.secondary.contrastText,\n }));\n}\n","import { Id, TableItem } from '../types';\n\nexport const flatMap = <T, S>(arr: Iterable<T>, flatMap: (t: T) => S[]): S[] => {\n return [...arr].reduce<S[]>((out, cur) => out.concat(flatMap(cur)), []);\n};\n\nexport const orderBy = <T>(arr: T[], selectors: ((t: T) => any)[] = [], direction: ('desc' | 'asc')[] = []): T[] => {\n if (selectors.length === 0) selectors = [(t) => t];\n\n return [...arr].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 dir = direction[i] === 'desc' ? -1 : 1;\n if (_a > _b) return dir;\n if (_a < _b) return -dir;\n }\n return 0;\n });\n};\n\nexport const uniq = <T>(arr: T[]): T[] => {\n const set = new Set<T>();\n for (const t of arr) set.add(t);\n return [...set.values()];\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>(activeItemsById: Map<Id, TableItem<T>>, ...items: TableItem<T>[]): Set<Id> => {\n const result = new Set<Id>();\n\n const find = ({ parentId }: TableItem<T>): void => {\n const parent = parentId ? activeItemsById.get(parentId) : undefined;\n if (parent && !result.has(parent.id)) {\n result.add(parent.id);\n find(parent);\n }\n };\n items.forEach(find);\n return result;\n};\n\nexport const getDescendants = <T>(...items: TableItem<T>[]): Set<Id> => {\n const result = new Set<Id>();\n\n const find = (item: TableItem<T>): void => {\n for (const child of item.children) {\n if (!result.has(child.id)) {\n result.add(child.id);\n find(child);\n }\n }\n };\n items.forEach(find);\n return result;\n};\n\nexport const identity = (x: unknown): any => x;\n\nexport const asString = (x: unknown): string => {\n if (x instanceof Array) return x.map(asString).join(', ');\n if (x instanceof Object) return JSON.stringify(x);\n return String(x ?? '');\n};\n\nexport const asStringOrArray = (x: unknown): string | string[] => {\n if (x instanceof Array) return x.map(asString);\n return asString(x);\n};\n\nexport const defaultEquals = (a: unknown, b: unknown): boolean => a === b;\n\nexport const subStringMatch = (a: string, b: string): boolean => a.toLowerCase().includes(b.toLowerCase());\n\nexport const castArray = <T>(a: T | T[]) => (a instanceof Array ? a : [a]);\n","import { ReactNode } from 'react';\n\nexport function FormControlLabel({ control, label }: { control: ReactNode; label: ReactNode }) {\n return (\n <label\n css={{\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n userSelect: 'none',\n\n '& > *': {\n cursor: 'pointer',\n },\n }}\n >\n {control}\n <span css={{ marginLeft: 'var(--spacing)' }}>{label}</span>\n </label>\n );\n}\n","import { castDraft } from 'immer';\nimport React, { HTMLProps, useEffect, useRef } from 'react';\nimport { StoreScope } from 'schummar-state/react';\nimport { Id, useColumnContext, useTableContext } from '..';\n\nexport const ColumnHeaderContext = new StoreScope({\n items: new Map<Id, HTMLDivElement>(),\n});\n\nexport function ColumnHeader(props: HTMLProps<HTMLDivElement>) {\n const ref = useRef<HTMLDivElement>(null);\n const columnId = useColumnContext();\n const table = useTableContext();\n const enabled = table.useState('props.enableColumnReorder');\n\n const store = ColumnHeaderContext.useStore();\n const draggingStart = useRef<{ mouseX: number; bounds: DOMRect }>();\n const clone = useRef<HTMLDivElement>();\n\n // Track each headers div in a store\n useEffect(() => {\n const div = ref.current;\n if (!div) return;\n\n store.update((state) => {\n state.items.set(columnId, castDraft(div));\n });\n\n return () => {\n store.update((state) => {\n state.items.delete(columnId);\n });\n };\n }, [ref.current, store, columnId]);\n\n // Calculate which index the current header would get, given the current offset\n function calcTargetIndex(offsetLeft: number) {\n const cols = table.getState().columnOrder.map((id) => ({ id, div: store.getState().items.get(id) }));\n\n const otherCols = cols.filter((col) => col.id !== columnId);\n\n const firstOffsetleft = cols.find((col) => col.div)?.div?.offsetLeft ?? 0;\n\n let sum = 0;\n const targetIndex = otherCols.findIndex((col) => {\n const width = col.div?.offsetWidth ?? 0;\n if (sum + width / 2 > offsetLeft - firstOffsetleft) return true;\n sum += width;\n return false;\n });\n\n return targetIndex === -1 ? otherCols.length : targetIndex;\n }\n\n // When starting clicking: Record initial mouse and div's bounds\n function onPointerDown(e: React.PointerEvent) {\n const div = ref.current;\n if (!div) return;\n draggingStart.current = { mouseX: e.clientX, bounds: div.getBoundingClientRect() };\n }\n\n // When mouse moves while clicked: Calculate transforms\n function onPointerMove(e: React.PointerEvent) {\n table.update((state) => {\n const div = ref.current;\n if (!div || draggingStart.current === undefined || Math.abs(e.clientX - draggingStart.current.mouseX) < 5) return;\n\n e.stopPropagation();\n div.setPointerCapture(e.pointerId);\n\n // Create clone of header div to move around with mouse\n if (!clone.current) {\n clone.current = div.cloneNode(true) as HTMLDivElement;\n document.body.append(clone.current);\n\n for (const [key, value] of Object.entries(getComputedStyle(div))) {\n try {\n clone.current.style[key as any] = value;\n } catch {\n // ignore\n }\n }\n\n Object.assign(clone.current.style, {\n pointerEvents: 'none',\n position: 'fixed',\n boxShadow: '0px 5px 5px -3px rgb(0 0 0 / 20%), 0px 8px 10px 1px rgb(0 0 0 / 14%), 0px 3px 14px 2px rgb(0 0 0 / 12%)',\n left: `${draggingStart.current.bounds.left}px`,\n top: `${draggingStart.current.bounds.top}px`,\n });\n\n div.style.color = 'rgba(0, 0, 0, 0.2)';\n }\n\n // Update clone's position each time\n clone.current.style.left = `${draggingStart.current.bounds.left + e.clientX - draggingStart.current.mouseX}px`;\n\n // Calculate target index\n const index = state.columnOrder.indexOf(columnId);\n const targetIndex = calcTargetIndex(div.offsetLeft + e.clientX - draggingStart.current.mouseX);\n\n // Apply transforms to each column\n const columns = table\n .getState()\n .columnOrder.map((id, index) => ({ id, index, width: store.getState().items.get(id)?.offsetWidth ?? 0 }));\n\n state.columnOrder.forEach((id, i) => {\n let offset = 0;\n if (i === index) {\n // Current column: Move to target pos\n if (targetIndex > index) {\n offset = columns.slice(index + 1, targetIndex + 1).reduce((sum, col) => sum + col.width, 0);\n } else if (targetIndex < index) {\n offset = -columns.slice(targetIndex, index).reduce((sum, col) => sum + col.width, 0);\n }\n } else if (i >= targetIndex && i < index) {\n // Left columns: Move right to make room if needed\n offset = div.offsetWidth;\n } else if (i > index && i <= targetIndex) {\n // Right columns: Move left to make room if needed\n offset = -div.offsetWidth;\n }\n\n state.columnStyleOverride.set(id, {\n transition: 'transform 500ms',\n transform: `translate3d(${offset}px, 0, 0)`,\n zIndex: i === index ? 1 : undefined,\n });\n });\n });\n }\n\n // When releasing mouse: Reset draggin state and apply column move\n function onPointerUp(e: React.PointerEvent) {\n table.update((state) => {\n const div = ref.current;\n if (!div || draggingStart.current === undefined) return;\n\n // Apply column move\n const index = state.columnOrder.indexOf(columnId);\n const targetIndex = calcTargetIndex(div.offsetLeft + e.clientX - draggingStart.current.mouseX);\n\n state.columnOrder.splice(index, 1);\n state.columnOrder.splice(targetIndex, 0, columnId);\n\n // Cleanup\n clone.current?.remove();\n div.style.color = '';\n state.columnStyleOverride.clear();\n draggingStart.current = undefined;\n clone.current = undefined;\n });\n }\n\n return (\n <div\n {...props}\n css={{\n position: 'relative',\n userSelect: 'none',\n }}\n ref={ref}\n onPointerDown={enabled ? onPointerDown : undefined}\n onPointerMove={enabled ? onPointerMove : undefined}\n onPointerUp={enabled ? onPointerUp : undefined}\n >\n {props.children}\n </div>\n );\n}\n","import React, { useState } from 'react';\nimport { useTheme } from '..';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport { InternalColumn } from '../types';\nimport { FormControlLabel } from './formControlLabel';\nimport { useTableContext } from './table';\n\nexport function ColumnSelection<T>(): JSX.Element {\n const {\n components: { IconButton, Popover, Checkbox },\n icons: { Settings },\n text,\n } = useTheme();\n const cssVariables = useCssVariables();\n\n const table = useTableContext<T>();\n const columns = table.useState('props.columns');\n const hiddenColumns = table.useState('hiddenColumns');\n\n const [anchorEl, setAnchorEl] = useState<Element | null>(null);\n\n const toggle = (column: InternalColumn<T, unknown>) => {\n const {\n props: { hiddenColumns: controlledHiddenColumns, onHiddenColumnsChange },\n } = table.getState();\n\n const newValue = new Set(hiddenColumns);\n if (hiddenColumns.has(column.id)) newValue.delete(column.id);\n else newValue.add(column.id);\n\n if (!controlledHiddenColumns) {\n table.update((state) => {\n state.hiddenColumns = newValue;\n });\n }\n\n onHiddenColumnsChange?.(newValue);\n };\n\n return (\n <>\n <IconButton onClick={(e) => setAnchorEl(anchorEl ? null : e.currentTarget)}>\n <Settings />\n </IconButton>\n\n <Popover anchorEl={anchorEl} open={!!anchorEl} onClose={() => setAnchorEl(null)} css={cssVariables}>\n <div css={{ padding: `calc(var(--spacing) * 2)`, display: 'grid' }}>\n <div css={{ marginBottom: 'var(--spacing)' }}>{text.selectColumns}</div>\n\n {columns.map((column) => (\n <FormControlLabel\n key={column.id}\n control={<Checkbox checked={!hiddenColumns.has(column.id)} onChange={() => toggle(column)} disabled={column.cannotHide} />}\n label={column.header}\n ></FormControlLabel>\n ))}\n </div>\n </Popover>\n </>\n );\n}\n","export type CsvExportOptions = { sepPrefix?: boolean; separator?: string; quote?: string; eol?: string };\n\nexport function csvExport(\n data: (string | number)[][],\n { sepPrefix, separator = ',', quote = '\"', eol = '\\n' }: CsvExportOptions = {},\n): string {\n const cells = data.map((line) =>\n line.map((value) => {\n if (typeof value === 'number') return String(value);\n if (![separator, quote, eol].some((c) => value.includes(c))) return value;\n\n const clean = value.replace(new RegExp(quote, 'g'), `${quote}${quote}`);\n return `${quote}${clean}${quote}`;\n }),\n );\n\n return (sepPrefix ? `SEP=${separator}\\n` : '') + cells.map((line) => line.join(separator)).join(eol);\n}\n","import React, { useState } from 'react';\nimport { useTheme } from '..';\nimport { csvExport, CsvExportOptions } from '../misc/csvExport';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport { useTableContext } from './table';\n\nexport function Export<T>(): JSX.Element {\n const table = useTableContext<T>();\n const {\n components: { Button, IconButton, Popover },\n icons: { Export, Clipboard },\n text,\n } = useTheme();\n const cssVariables = useCssVariables();\n\n const [anchor, setAnchor] = useState<Element | null>(null);\n\n const generate = (options?: CsvExportOptions) => {\n const { activeColumns, activeItems } = table.getState();\n\n const data = [\n activeColumns.map((column) => String(column.id)),\n ...activeItems.map((item) => activeColumns.map((column) => column.exportCell(column.value(item), item))),\n ];\n return csvExport(data, options);\n };\n\n const copy = () => {\n navigator.clipboard.writeText(generate(table.getState().props.enableExport.copy));\n };\n\n const download = () => {\n const a = document.createElement('a');\n a.href = 'data:text/csv;charset=utf-8,' + encodeURIComponent(generate(table.getState().props.enableExport.download));\n a.download = 'export.csv';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n };\n\n return (\n <>\n <IconButton onClick={(e) => setAnchor(anchor ? null : e.currentTarget)}>\n <Export />\n </IconButton>\n\n <Popover open={!!anchor} onClose={() => setAnchor(null)} anchorEl={anchor} css={cssVariables}>\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)' }}>{text.exportTitle}</div>\n <Button startIcon={<Clipboard />} onClick={copy}>\n {text.exportCopy}\n </Button>\n <Button startIcon={<Export />} onClick={download}>\n {text.exportDownload}\n </Button>\n </div>\n </Popover>\n </>\n );\n}\n","import { useTableContext } from '..';\n\nexport function useTheme() {\n const table = useTableContext();\n return table.useState('theme');\n}\n","import React, { useState } from 'react';\nimport { useTheme } from '../hooks/useTheme';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport { useColumnContext, useTableContext } from './table';\n\nexport function FilterControl<T>(): JSX.Element | null {\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n const {\n components: { IconButton, Popover },\n icons: { FilterList, ArrowDropDown },\n } = useTheme();\n const cssVariables = useCssVariables();\n\n const [anchor, setAnchor] = useState<Element | null>(null);\n const isActive = table.useState((state) => {\n const filter = state.filters.get(columnId);\n const filterValue = state.filterValues.get(columnId);\n return filter !== undefined && filterValue !== undefined && filter.isActive(filterValue);\n });\n const filter = table.useState((state) => state.activeColumns.find((column) => column.id === columnId)?.filter);\n\n if (!filter) return null;\n\n return (\n <>\n <IconButton\n onClick={(e) => setAnchor(e.currentTarget)}\n css={[isActive && { color: 'white !important', backgroundColor: 'var(--primaryMain) !important' }]}\n >\n {isActive ? <FilterList /> : <ArrowDropDown />}\n </IconButton>\n\n <div\n onPointerDown={(e) => {\n e.stopPropagation();\n }}\n onPointerMove={(e) => {\n e.stopPropagation();\n }}\n >\n <Popover open hidden={!anchor} onClose={() => setAnchor(null)} anchorEl={anchor ?? document.body} css={cssVariables}>\n {filter}\n </Popover>\n </div>\n </>\n );\n}\n","import React from 'react';\nimport { useColumnContext, useTableContext } from '..';\n\nexport function ResizeHandle() {\n const table = useTableContext();\n const columnId = useColumnContext();\n const enabled = table.useState('props.enableColumnResize');\n\n function onPointerDown(e: React.PointerEvent) {\n e.stopPropagation();\n\n const div = e.target as HTMLDivElement;\n div.setPointerCapture(e.pointerId);\n }\n\n function onPointerMove(e: React.PointerEvent) {\n e.stopPropagation();\n\n const div = e.target as HTMLDivElement;\n if (!div.hasPointerCapture(e.pointerId)) return;\n\n const parent = div.parentElement as HTMLDivElement;\n const width = Math.max(e.clientX - parent.getBoundingClientRect().left + 5, 50);\n\n table.update((state) => {\n state.columnWidths.set(columnId, `${width}px`);\n });\n }\n\n function onPointerUp(e: React.PointerEvent) {\n e.stopPropagation();\n\n const div = e.target as HTMLDivElement;\n div.releasePointerCapture(e.pointerId);\n }\n\n function onDoubleClick(e: React.MouseEvent) {\n table.update((state) => {\n if (e.getModifierState('Control')) {\n state.columnWidths.delete(columnId);\n } else {\n state.columnWidths.set(columnId, 'max-content');\n }\n });\n }\n\n return (\n <div\n css={{\n alignSelf: 'stretch',\n padding: '0 5px',\n cursor: enabled ? 'col-resize' : 'initial',\n display: 'flex',\n alignItems: 'center',\n\n '&:after': {\n content: '\"\"',\n width: 1,\n height: '1.2em',\n background: 'currentColor',\n transition: 'transform 300ms',\n },\n }}\n onPointerDown={enabled ? onPointerDown : undefined}\n onPointerMove={enabled ? onPointerMove : undefined}\n onPointerUp={enabled ? onPointerUp : undefined}\n onDoubleClick={enabled ? onDoubleClick : undefined}\n />\n );\n}\n","import React, { memo } from 'react';\nimport { Id, useColumnContext, useTableContext, useTheme } from '..';\nimport { defaultClasses } from '../theme/defaultClasses';\nimport { calcClassNames } from './row';\n\nexport const Cell = memo(function Cell<T>({ itemId, rowIndex }: { itemId: Id; rowIndex: number }) {\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n const { css } = useTheme();\n\n const column = table.useState((state) => state.activeColumns.find((column) => column.id === columnId));\n const item = table.useState((state) => state.activeItemsById.get(itemId));\n const columnStyleOverride = table.useState((state) => state.columnStyleOverride.get(columnId), { throttle: 16 });\n\n if (!column || !item) return null;\n table.getState().props.debugRender?.('render cell', itemId, columnId);\n\n const classNames = [...calcClassNames(css, item, rowIndex), ...calcClassNames(column?.css, item, rowIndex)];\n const content = column.renderCell(column.value(item), item);\n\n return (\n <div css={[defaultClasses.cell, classNames, columnStyleOverride]}>\n {typeof content === 'string' ? <span css={defaultClasses.text}>{content}</span> : content}\n </div>\n );\n});\n","import React from 'react';\nimport { useTheme } from '..';\nimport { getAncestors } from '../misc/helpers';\nimport { Id } from '../types';\nimport { useTableContext } from './table';\n\nexport function ExpandControl<T>({ itemId, hasDeferredChildren }: { itemId: Id; hasDeferredChildren?: boolean }): JSX.Element {\n const {\n components: { IconButton, Spinner },\n icons: { ChevronRight },\n } = useTheme();\n\n const table = useTableContext<T>();\n const isExpanded = table.useState((state) => state.expanded.has(itemId));\n const hasChildren = table.useState((state) => !!state.activeItemsById.get(itemId)?.children.length);\n\n function toggle() {\n const {\n props: { expanded: controlledExpanded, expandOnlyOne, onExpandedChange },\n expanded,\n activeItemsById,\n } = table.getState();\n\n const newExpanded = new Set(expanded);\n if (expandOnlyOne) newExpanded.clear();\n if (isExpanded) newExpanded.delete(itemId);\n else {\n newExpanded.add(itemId);\n\n const item = activeItemsById.get(itemId);\n for (const ancestor of item ? getAncestors(activeItemsById, item) : []) {\n newExpanded.add(ancestor);\n }\n }\n\n onExpandedChange?.(newExpanded);\n\n if (!controlledExpanded) {\n table.update((state) => {\n state.expanded = newExpanded;\n });\n }\n }\n\n if (isExpanded && hasDeferredChildren && !hasChildren) {\n return <Spinner css={{ margin: '0 var(--spacing)' }} />;\n }\n\n return (\n <IconButton onClick={toggle}>\n <span\n css={{\n display: 'inline-flex',\n transition: 'all 300ms',\n transform: isExpanded ? 'rotate3d(0, 0, 1, 90deg)' : 'rotate3d(0, 0, 1, 0deg)',\n }}\n >\n <ChevronRight />\n </span>\n </IconButton>\n );\n}\n","import React from 'react';\nimport { useTheme } from '..';\nimport { getAncestors, getDescendants } from '../misc/helpers';\nimport { Id } from '../types';\nimport { useTableContext } from './table';\n\nexport function SelectComponent<T>({ itemId }: { itemId?: Id }): JSX.Element {\n const table = useTableContext<T>();\n const {\n components: { Checkbox },\n } = useTheme();\n\n const isSelected = table.useState((state) => {\n const itemIds = itemId ? [itemId] : [...state.activeItemsById.keys()];\n return state.activeItemsById.size > 0 && itemIds.every((itemId) => state.selection.has(itemId));\n });\n\n function toggle(e: React.ChangeEvent) {\n const mouseEvent = e.nativeEvent as MouseEvent;\n\n const {\n activeItems,\n activeItemsById,\n lastSelectedId,\n selection,\n props: { selectSyncChildren, selection: controlledSelection, onSelectionChange },\n } = table.getState();\n\n let range;\n if (mouseEvent.shiftKey && itemId) {\n const a = lastSelectedId ? activeItems.findIndex((i) => lastSelectedId === i.id) : 0;\n const b = activeItems.findIndex((item) => item.id === itemId);\n range = activeItems.slice(Math.min(a, b), Math.max(a, b) + 1);\n } else {\n const item = itemId ? activeItemsById.get(itemId) : undefined;\n range = item ? [item] : activeItems;\n }\n\n const newSelection = new Set(selection);\n for (const item of range) {\n if (isSelected) newSelection.delete(item.id);\n else newSelection.add(item.id);\n }\n\n if (selectSyncChildren && isSelected) {\n for (const ancestor of getAncestors(activeItemsById, ...range)) {\n newSelection.delete(ancestor);\n }\n for (const descendant of getDescendants(...range)) {\n newSelection.delete(descendant);\n }\n }\n\n onSelectionChange?.(newSelection);\n\n if (!controlledSelection) {\n table.update((state) => {\n state.selection = newSelection;\n });\n }\n\n table.update((state) => {\n state.lastSelectedId = itemId;\n });\n }\n\n return (\n <Checkbox\n css={{\n justifySelf: 'start',\n color: 'inherit',\n }}\n checked={isSelected}\n onChange={toggle}\n />\n );\n}\n","import React, { memo, useEffect, useRef } from 'react';\nimport { getAncestors } from '../misc/helpers';\nimport { defaultClasses } from '../theme/defaultClasses';\nimport { Id, InternalColumn } from '../types';\nimport { Cell } from './cell';\nimport { ExpandControl } from './expandControl';\nimport { SelectComponent } from './selectComponent';\nimport { ColumnContext, useTableContext } from './table';\n\nexport function calcClassNames<T>(css: InternalColumn<any, any>['css'] | undefined, item: T, index: number) {\n return [\n css?.cell instanceof Function ? css.cell(item, index) : css?.cell,\n index % 2 === 0 && css?.evenCell,\n index % 2 === 1 && css?.oddCell,\n ];\n}\n\nexport const Row = memo(function Row<T>({ itemId, rowIndex }: { itemId: Id; rowIndex: number }): JSX.Element | null {\n const table = useTableContext<T>();\n const divRef = useRef<HTMLDivElement>(null);\n\n const { className, indent, hasChildren, hasDeferredChildren, columnIds, enableSelection, rowAction } = table.useState((state) => {\n const item = state.activeItemsById.get(itemId);\n const index = !item ? -1 : state.activeItems.indexOf(item);\n\n return {\n className: calcClassNames(state.props.css, item, index),\n indent: item ? getAncestors(state.activeItemsById, item).size : 0,\n hasChildren: !!item?.children.length,\n hasDeferredChildren: item && state.props.hasDeferredChildren?.(item),\n columnIds: state.activeColumns.map((column) => column.id),\n enableSelection: state.props.enableSelection,\n rowAction: state.props.rowAction instanceof Function ? (item ? state.props.rowAction(item, index) : null) : state.props.rowAction,\n };\n });\n\n useEffect(() => {\n const div = divRef.current;\n if (!div) return;\n\n const o = new ResizeObserver(() => {\n if (!document.contains(div)) return;\n table.update((state) => {\n state.rowHeights.set(itemId, div.offsetHeight);\n });\n });\n o.observe(div);\n\n return () => o.disconnect();\n }, [divRef.current]);\n\n table.getState().props.debugRender?.('render row', itemId);\n\n return (\n <>\n <div css={[defaultClasses.cellFill, className]} ref={divRef} />\n\n <div css={[defaultClasses.cell, defaultClasses.firstCell, className]}>\n <div css={{ width: indent * 20 }} />\n\n {enableSelection && <SelectComponent itemId={itemId} />}\n\n {(hasChildren || hasDeferredChildren) && <ExpandControl itemId={itemId} hasDeferredChildren={hasDeferredChildren} />}\n\n {rowAction}\n </div>\n\n {columnIds.map((columnId) => (\n <ColumnContext.Provider key={columnId} value={columnId}>\n <Cell itemId={itemId} rowIndex={rowIndex} />\n </ColumnContext.Provider>\n ))}\n\n <div css={[defaultClasses.cellFill, className]} />\n </>\n );\n});\n","import React, { ReactNode } from 'react';\nimport { useTheme } from '..';\nimport { useColumnContext, useTableContext } from './table';\n\nexport function SortComponent<T>({ children }: { children: ReactNode }): JSX.Element {\n const table = useTableContext<T>();\n const columnId = useColumnContext();\n const {\n components: { Badge },\n icons: { ArrowUpward },\n } = useTheme();\n\n const { direction, index } = table.useState((state) => {\n const index = state.sort.findIndex((s) => s.columnId === columnId) ?? -1;\n return {\n direction: state.sort[index]?.direction,\n index: index >= 0 && state.sort.length > 1 ? index + 1 : undefined,\n };\n });\n\n function toggle(e: React.MouseEvent) {\n const {\n props: { sort: controlledSort, onSortChange },\n } = table.getState();\n\n const newDirection = direction === 'asc' ? 'desc' : 'asc';\n const newSort = (e.getModifierState('Control') ? table.getState().sort.filter((s) => s.columnId !== columnId) : []).concat({\n columnId,\n direction: newDirection,\n });\n\n onSortChange?.(newSort);\n\n if (!controlledSort) {\n table.update((state) => {\n state.sort = newSort;\n });\n }\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={toggle}\n >\n <div>{children}</div>\n\n <Badge badgeContent={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 </div>\n );\n}\n","export function throttle<Args extends any[]>(fn: (...args: Args) => void, ms: number): { (...args: Args): void; flush(): void } {\n let last = 0;\n let lastArgs: Args | undefined;\n let timeout: NodeJS.Timeout | 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 Object.assign(\n function (...args: Args) {\n const now = Date.now();\n lastArgs = args;\n\n if (timeout) {\n // do nothing\n } else if (now < last + ms) {\n timeout = setTimeout(run, last + ms - now);\n } else {\n run();\n }\n },\n {\n flush() {\n if (lastArgs) {\n run();\n }\n },\n },\n );\n}\n","import React, { HTMLProps, ReactNode, useEffect, useMemo, useRef, useState } from 'react';\nimport { throttle } from '../misc/throttle';\nimport { useTableContext } from './table';\nimport { Id } from '../types';\n\nconst onAncestorScroll = (x: HTMLElement, onScroll: () => void): (() => void) => {\n const find = (x: HTMLElement): Node[] => (x.parentElement ? [x.parentElement, ...find(x.parentElement)] : [document]);\n const ancestors = find(x);\n for (const ancestor of ancestors) {\n ancestor.addEventListener('scroll', onScroll);\n }\n\n return () => {\n for (const ancestor of ancestors) {\n ancestor.removeEventListener('scroll', onScroll);\n }\n };\n};\n\nconst findScrollRoot = (x: HTMLElement): HTMLElement => {\n const parent = x.parentElement;\n if (!parent) return document.documentElement;\n if (parent.scrollHeight > parent.clientHeight) return parent;\n return findScrollRoot(parent);\n};\n\nconst relativeOffset = (x: HTMLElement, y: HTMLElement): number => {\n if (x.offsetParent === y.offsetParent || !x.offsetParent) return x.offsetTop - y.offsetTop;\n if (x.offsetParent instanceof HTMLElement) return relativeOffset(x.offsetParent, y) + x.offsetTop;\n return 0;\n};\n\nexport function Virtualized<T>({\n header,\n children,\n ...props\n}: { header: ReactNode; children: (itemIds: Id[], startIndex: number) => ReactNode } & HTMLProps<HTMLDivElement>): JSX.Element {\n const table = useTableContext<T>();\n const virtual = table.useState('props.virtual');\n const probeRef = useRef<HTMLDivElement>(null);\n const [, setCounter] = useState(0);\n\n const {\n itemIds = [],\n from = 0,\n to,\n before = 0,\n after = 0,\n } = table.useState((state) => {\n const itemIds = state.activeItems.map((item) => item.id);\n const root = probeRef.current && findScrollRoot(probeRef.current);\n if (!state.props.virtual) return { itemIds };\n if (!probeRef.current || !root || !document.contains(root)) return {};\n\n const {\n rowHeight,\n initalRowHeight,\n overscan = 200,\n overscanTop,\n overscanBottom,\n } = (state.props.virtual instanceof Object ? state.props.virtual : undefined) ?? {};\n\n let totalHeight = 0;\n const rowHeights = itemIds.map((itemId, index) => {\n const h = rowHeight ?? state.rowHeights.get(itemId) ?? initalRowHeight ?? (index === 0 ? 100 : totalHeight / index);\n totalHeight += h;\n return h;\n });\n\n const probeOffset = relativeOffset(probeRef.current, root);\n const headerHeight = probeRef.current.offsetTop;\n const topOfTable = root.scrollTop - probeOffset + headerHeight;\n const bottomOfTable = topOfTable + root.clientHeight - headerHeight;\n\n let from = 0,\n to = itemIds.length,\n before = 0,\n after = 0;\n for (const h of rowHeights) {\n if (before + h > topOfTable - (overscanTop ?? overscan)) break;\n from++;\n before += h;\n }\n\n for (const h of rowHeights.reverse()) {\n if (after + h > totalHeight - bottomOfTable - (overscanBottom ?? overscan)) break;\n to--;\n after += h;\n }\n\n return { itemIds: itemIds.slice(from, to), from, to, before, after };\n });\n\n const throttleScroll = (typeof virtual === 'boolean' ? undefined : virtual)?.throttleScroll ?? 500;\n const incCounter = useMemo(() => throttle(() => setCounter((c) => c + 1), throttleScroll), [throttleScroll]);\n\n useEffect(() => {\n if (!virtual || !probeRef.current) return;\n return onAncestorScroll(probeRef.current, incCounter);\n }, [probeRef.current, incCounter]);\n\n table.getState().props.debugRender?.(`Virtualalized render ${from} to ${to}`);\n\n return (\n <div {...props}>\n {header}\n\n {virtual && <div style={{ gridColumn: '1 / -1', height: before }} ref={probeRef} />}\n\n {children(itemIds, from)}\n\n {virtual && <div style={{ gridColumn: '1 / -1', height: after }} />}\n </div>\n );\n}\n","import React, { createContext, memo, useContext, useEffect, useState } from 'react';\nimport { Store } from 'schummar-state/react';\nimport { useTheme } from '..';\nimport { useTableStateStorage } from '../internalState/tableStateStorage';\nimport { useTableState } from '../internalState/useTableState';\nimport { defaultClasses } from '../theme/defaultClasses';\nimport { useCssVariables } from '../theme/useCssVariables';\nimport { Id, InternalTableState, TableProps } from '../types';\nimport { ColumnHeader, ColumnHeaderContext } from './columnHeader';\nimport { ColumnSelection } from './columnSelection';\nimport { Export } from './export';\nimport { FilterControl } from './filterControl';\nimport { ResizeHandle } from './resizeHandle';\nimport { Row } from './row';\nimport { SelectComponent } from './selectComponent';\nimport { SortComponent } from './sortComponent';\nimport { Virtualized } from './virtualized';\n\nexport const TableContext = createContext<Store<InternalTableState<any>> | null>(null);\nexport const ColumnContext = createContext<Id | null>(null);\nexport function useTableContext<T>(): Store<InternalTableState<T>> {\n const value = useContext(TableContext);\n if (!value) throw Error('No table context available');\n return value as Store<InternalTableState<T>>;\n}\nexport function useColumnContext(): Id {\n const value = useContext(ColumnContext);\n if (value === null) throw Error('No column context available');\n return value;\n}\n\nexport function Table<T>(props: TableProps<T>): JSX.Element {\n const table = useTableState(props);\n\n table.getState().props.debugRender?.('render table');\n\n return (\n <TableContext.Provider value={table}>\n <TableLoadingState />\n </TableContext.Provider>\n );\n}\n\nfunction TableLoadingState() {\n const { text } = useTheme();\n const isHydrated = useTableStateStorage();\n const [showLoading, setShowLoading] = useState(false);\n\n useEffect(() => {\n const handle = setTimeout(() => setShowLoading(true), 500);\n return () => clearTimeout(handle);\n });\n\n return (\n <>\n {!isHydrated && showLoading && <div>{text.loading}</div>}\n <TableInner hidden={!isHydrated} />\n </>\n );\n}\n\nconst TableInner = memo(function TableInner<T>({ hidden }: { hidden: boolean }) {\n const table = useTableContext<T>();\n const fullWidth = table.useState('props.fullWidth');\n const activeColumns = table.useState((state) =>\n state.activeColumns.map((column) => ({\n id: column.id,\n width: column.width,\n css: column.css,\n header: column.header,\n })),\n );\n const columnWidths = table.useState('columnWidths', { throttle: 16 });\n const columnStyleOverride = table.useState('columnStyleOverride', { throttle: 16 });\n const defaultWidth = table.useState('props.defaultWidth');\n const css = table.useState('props.css');\n const stickyHeader = table.useState('props.stickyHeader');\n const enableSelection = table.useState('props.enableSelection');\n const enableColumnSelection = table.useState('props.enableColumnSelection');\n const enableExport = table.useState((state) => !!state.props.enableExport.copy || !!state.props.enableExport.download);\n const cssVariables = useCssVariables();\n\n table.getState().props.debugRender?.('render table inner');\n\n return (\n <Virtualized\n css={[\n cssVariables,\n defaultClasses.table,\n css?.table,\n {\n gridTemplateColumns: [\n //\n fullWidth === 'right' || fullWidth === true ? 'auto' : '0',\n 'max-content',\n ...activeColumns.map((column) => columnWidths.get(column.id) ?? column.width ?? defaultWidth ?? 'max-content'),\n fullWidth === 'left' || fullWidth === true ? 'auto' : '0',\n ].join(' '),\n },\n hidden && { visibility: 'hidden' },\n ]}\n header={\n <>\n <div css={[defaultClasses.headerFill, stickyHeader && defaultClasses.sticky, css?.headerCell]} />\n\n <div css={[defaultClasses.headerCell, stickyHeader && defaultClasses.sticky, css?.headerCell]}>\n {enableSelection && <SelectComponent />}\n\n {enableColumnSelection && <ColumnSelection />}\n\n {enableExport && <Export />}\n </div>\n\n <ColumnHeaderContext.Provider>\n {activeColumns.map((column) => (\n <ColumnContext.Provider key={column.id} value={column.id}>\n <ColumnHeader\n css={[\n defaultClasses.headerCell,\n css?.headerCell,\n column.css?.headerCell,\n columnStyleOverride.get(column.id),\n stickyHeader && defaultClasses.sticky,\n ]}\n key={column.id}\n >\n <FilterControl />\n <SortComponent>{column.header}</SortComponent>\n <div css={{ flex: 1 }} />\n <ResizeHandle />\n </ColumnHeader>\n </ColumnContext.Provider>\n ))}\n </ColumnHeaderContext.Provider>\n\n <div css={[defaultClasses.headerFill, stickyHeader && defaultClasses.sticky, css?.headerCell]} />\n </>\n }\n >\n {(itemIds, startIndex) => itemIds.map((itemId, index) => <Row key={itemId} itemId={itemId} rowIndex={startIndex + index} />)}\n </Virtualized>\n );\n});\n"],"names":["control","label","_jsxs","display","alignItems","cursor","userSelect","_jsx","marginLeft","ColumnHeaderContext","StoreScope","items","Map","props","ref","useRef","columnId","useColumnContext","table","useTableContext","enabled","useState","store","useStore","draggingStart","clone","div","current","update","state","set","castDraft","delete","offsetLeft","cols","getState","columnOrder","map","id","get","otherCols","filter","col","firstOffsetleft","find","sum","targetIndex","findIndex","width","offsetWidth","length","e","mouseX","clientX","bounds","getBoundingClientRect","undefined","Math","abs","stopPropagation","setPointerCapture","pointerId","cloneNode","body","append","key","value","Object","entries","getComputedStyle","style","assign","pointerEvents","position","boxShadow","left","top","color","index","indexOf","calcTargetIndex","columns","forEach","i","offset","slice","reduce","columnStyleOverride","transition","transform","zIndex","splice","remove","clear","onPointerDown","onPointerMove","onPointerUp","children","components","IconButton","Popover","Checkbox","icons","Settings","text","useTheme","cssVariables","useCssVariables","hiddenColumns","anchorEl","setAnchorEl","toggle","column","controlledHiddenColumns","onHiddenColumnsChange","newValue","Set","has","add","currentTarget","padding","marginBottom","selectColumns","cannotHide","header","Button","Export","Clipboard","anchor","setAnchor","generate","options","activeColumns","activeItems","data","String","item","exportCell","csvExport","copy","clipboard","writeText","enableExport","download","a","document","createElement","href","encodeURIComponent","appendChild","click","removeChild","justifyItems","gap","justifyContent","exportTitle","exportCopy","exportDownload","FilterList","ArrowDropDown","isActive","filters","filterValue","filterValues","backgroundColor","target","hasPointerCapture","parent","parentElement","max","columnWidths","releasePointerCapture","getModifierState","alignSelf","content","height","background","onDoubleClick","Cell","memo","itemId","rowIndex","css","activeItemsById","throttle","debugRender","classNames","calcClassNames","renderCell","defaultClasses","cell","hasDeferredChildren","Spinner","ChevronRight","isExpanded","expanded","hasChildren","controlledExpanded","expandOnlyOne","onExpandedChange","newExpanded","ancestor","getAncestors","margin","isSelected","itemIds","keys","size","every","selection","mouseEvent","nativeEvent","lastSelectedId","selectSyncChildren","controlledSelection","onSelectionChange","range","shiftKey","b","min","newSelection","descendant","getDescendants","justifySelf","Function","evenCell","oddCell","Row","divRef","className","indent","columnIds","enableSelection","rowAction","o","ResizeObserver","contains","rowHeights","offsetHeight","observe","disconnect","cellFill","firstCell","Badge","ArrowUpward","direction","sort","s","controlledSort","onSortChange","newDirection","newSort","concat","gridTemplateColumns","overflow","textOverflow","fontSize","opacity","onAncestorScroll","x","onScroll","ancestors","addEventListener","removeEventListener","findScrollRoot","documentElement","scrollHeight","clientHeight","relativeOffset","y","offsetParent","offsetTop","HTMLElement","virtual","probeRef","setCounter","from","to","before","after","root","rowHeight","initalRowHeight","overscan","overscanTop","overscanBottom","totalHeight","h","probeOffset","headerHeight","topOfTable","scrollTop","bottomOfTable","reverse","throttleScroll","incCounter","useMemo","c","gridColumn","TableContext","createContext","ColumnContext","useContext","Error","hidden","fullWidth","defaultWidth","stickyHeader","enableColumnSelection","join","visibility","headerFill","sticky","headerCell","flex","startIndex"],"mappings":"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"}
@@ -3,4 +3,4 @@ import { Id } from '..';
3
3
  export declare const Cell: React.MemoExoticComponent<(<T>({ itemId, rowIndex }: {
4
4
  itemId: Id;
5
5
  rowIndex: number;
6
- }) => JSX.Element | null)>;
6
+ }) => import("@emotion/react/jsx-runtime").JSX.Element | null)>;
@@ -0,0 +1,7 @@
1
+ import { HTMLProps } from 'react';
2
+ import { StoreScope } from 'schummar-state/react';
3
+ import { Id } from '..';
4
+ export declare const ColumnHeaderContext: StoreScope<{
5
+ items: Map<Id, HTMLDivElement>;
6
+ }>;
7
+ export declare function ColumnHeader(props: HTMLProps<HTMLDivElement>): import("@emotion/react/jsx-runtime").JSX.Element;
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ import { CommonFilterProps } from '../types';
3
+ import { DatePickerProps, DateRange } from './datePicker';
4
+ export declare function DateFilter<T, V>({ locale, firstDayOfWeek, singleSelect, filterBy, ...props }: {
5
+ locale?: string;
6
+ firstDayOfWeek?: DatePickerProps['firstDayOfWeek'];
7
+ singleSelect?: boolean;
8
+ } & CommonFilterProps<T, V, Date | DateRange | null, Date | DateRange | null>): JSX.Element;
@@ -0,0 +1,16 @@
1
+ export declare type DateRange = {
2
+ min: Date;
3
+ max: Date;
4
+ };
5
+ export declare type DatePickerProps = {
6
+ value: Date | DateRange | null;
7
+ onChange: (value: Date | DateRange | null) => void;
8
+ rangeSelect?: boolean;
9
+ locale?: string;
10
+ firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
11
+ };
12
+ export declare const startOfDay: (d: Date) => Date;
13
+ export declare const endOfDay: (d: Date) => Date;
14
+ export declare const today: () => DateRange;
15
+ export declare function dateIntersect(a: Date | null | DateRange, b: Date | null | DateRange): boolean;
16
+ export declare function DatePicker({ value, onChange, rangeSelect, locale, firstDayOfWeek }: DatePickerProps): import("@emotion/react/jsx-runtime").JSX.Element;
@@ -0,0 +1,6 @@
1
+ /// <reference types="react" />
2
+ import { Id } from '../types';
3
+ export declare function ExpandControl<T>({ itemId, hasDeferredChildren }: {
4
+ itemId: Id;
5
+ hasDeferredChildren?: boolean;
6
+ }): JSX.Element;
File without changes
@@ -0,0 +1,2 @@
1
+ /// <reference types="react" />
2
+ export declare function FilterControl<T>(): JSX.Element | null;
@@ -0,0 +1,5 @@
1
+ import { ReactNode } from 'react';
2
+ export declare function FormControlLabel({ control, label }: {
3
+ control: ReactNode;
4
+ label: ReactNode;
5
+ }): import("@emotion/react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare function ResizeHandle(): import("@emotion/react/jsx-runtime").JSX.Element;
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { Id, InternalColumn } from '../types';
3
- export declare const calcClassName: (classes: InternalColumn<any, any>['classes'] | undefined, index: number) => string;
3
+ export declare function calcClassNames<T>(css: InternalColumn<any, any>['css'] | undefined, item: T, index: number): import("@emotion/serialize").CSSInterpolation[];
4
4
  export declare const Row: React.MemoExoticComponent<(<T>({ itemId, rowIndex }: {
5
5
  itemId: Id;
6
6
  rowIndex: number;
@@ -0,0 +1,8 @@
1
+ import { ReactNode } from 'react';
2
+ import { CommonFilterProps, SerializableValue } from '../types';
3
+ export declare function SelectFilter<T, V, F extends SerializableValue>({ options: providedOptions, stringValue, render, singleSelect, ...props }: {
4
+ options?: F[];
5
+ stringValue?: (value: F) => string;
6
+ render?: (value: F) => ReactNode;
7
+ singleSelect?: boolean;
8
+ } & CommonFilterProps<T, V, F, Set<F>>): JSX.Element;
@@ -0,0 +1,3 @@
1
+ export declare function Spinner({ className }: {
2
+ className?: string;
3
+ }): import("@emotion/react/jsx-runtime").JSX.Element;
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { Store } from 'schummar-state/react';
3
- import { Id, InternalTableState, TableProps } from './types';
3
+ import { Id, InternalTableState, TableProps } from '../types';
4
4
  export declare const TableContext: React.Context<Store<InternalTableState<any>> | null>;
5
5
  export declare const ColumnContext: React.Context<Id | null>;
6
6
  export declare function useTableContext<T>(): Store<InternalTableState<T>>;
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ import { CommonFilterProps } from '../types';
3
+ export declare function TextFilter<T, V>({ compare, filterBy, ...props }: {
4
+ compare?: (a: string, b: string) => boolean;
5
+ } & CommonFilterProps<T, V, string, string>): JSX.Element;
File without changes
@@ -0,0 +1,5 @@
1
+ import { FilterImplementation, SerializableValue } from '../types';
2
+ export declare function useFilter<T, V, F, S extends SerializableValue>(impl: FilterImplementation<T, V, F, S>): {
3
+ value: S | undefined;
4
+ onChange: (value?: S | undefined) => void;
5
+ };
@@ -0,0 +1 @@
1
+ export declare function useTheme(): import("../types").TableTheme<unknown>;
@@ -0,0 +1,10 @@
1
+ export { DateFilter } from './components/dateFilter';
2
+ export { SelectFilter } from './components/selectFilter';
3
+ export { ColumnContext, Table, TableContext, useColumnContext, useTableContext } from './components/table';
4
+ export { TextFilter } from './components/textFilter';
5
+ export { useFilter } from './hooks/useFilter';
6
+ export { useTheme } from './hooks/useTheme';
7
+ export type { TableStateStorage } from './internalState/tableStateStorage';
8
+ export { termMatch, textMatch } from './misc/textMatch';
9
+ export { configureTableTheme, TableThemeContext } from './theme/tableTheme';
10
+ export type { Column, Id, InternalColumn, Rows, Sort, SortDirection, TableProps } from './types';
File without changes
File without changes
@@ -0,0 +1,11 @@
1
+ export declare type TableStateStorage = {
2
+ getItem: (key: string) => string | null | Promise<string | null>;
3
+ setItem: (key: string, value: string) => unknown | Promise<unknown>;
4
+ removeItem: (key: string) => unknown | Promise<unknown>;
5
+ } & ({
6
+ keys: () => string[] | Promise<string[]>;
7
+ } | {
8
+ length: number | (() => number | Promise<number>);
9
+ key: (keyIndex: number) => string | null | Promise<string | null>;
10
+ });
11
+ export declare function useTableStateStorage(): boolean;
File without changes
@@ -0,0 +1,4 @@
1
+ export declare function debounce<Args extends any[]>(fn: (...args: Args) => void, ms: number): {
2
+ (...args: Args): void;
3
+ flush(): void;
4
+ };
@@ -0,0 +1,3 @@
1
+ export declare type DeepPartial<T> = {
2
+ [K in keyof T]?: T[K] extends Record<any, any> ? DeepPartial<T[K]> : T[K];
3
+ };
@@ -7,8 +7,9 @@ export declare const intersect: <T>(a: Iterable<T>, b: {
7
7
  }) => Set<T>;
8
8
  export declare const getAncestors: <T>(activeItemsById: Map<Id, TableItem<T>>, ...items: TableItem<T>[]) => Set<Id>;
9
9
  export declare const getDescendants: <T>(...items: TableItem<T>[]) => Set<Id>;
10
- export declare const c: (...classNames: (string | Record<string, boolean> | undefined)[]) => string;
11
10
  export declare const identity: (x: unknown) => any;
12
11
  export declare const asString: (x: unknown) => string;
12
+ export declare const asStringOrArray: (x: unknown) => string | string[];
13
13
  export declare const defaultEquals: (a: unknown, b: unknown) => boolean;
14
14
  export declare const subStringMatch: (a: string, b: string) => boolean;
15
+ export declare const castArray: <T>(a: T | T[]) => T[];
@@ -0,0 +1,6 @@
1
+ export declare class Queue {
2
+ private q;
3
+ private isRunning;
4
+ run<T>(job: () => Promise<T>, replace?: boolean): Promise<T>;
5
+ private start;
6
+ }
File without changes
@@ -0,0 +1,4 @@
1
+ export declare function throttle<Args extends any[]>(fn: (...args: Args) => void, ms: number): {
2
+ (...args: Args): void;
3
+ flush(): void;
4
+ };
@@ -0,0 +1,15 @@
1
+ export declare const white = "#ffffff";
2
+ export declare const lightGray = "#eeeeee";
3
+ export declare const gray = "#bdbdbd";
4
+ export declare const darkGray = "#777";
5
+ export declare const defaultClasses: {
6
+ table: import("@emotion/utils").SerializedStyles;
7
+ cell: import("@emotion/utils").SerializedStyles;
8
+ cellFill: import("@emotion/utils").SerializedStyles;
9
+ headerCell: import("@emotion/utils").SerializedStyles;
10
+ firstCell: import("@emotion/utils").SerializedStyles;
11
+ sticky: import("@emotion/utils").SerializedStyles;
12
+ headerFill: import("@emotion/utils").SerializedStyles;
13
+ text: import("@emotion/utils").SerializedStyles;
14
+ card: import("@emotion/utils").SerializedStyles;
15
+ };
@@ -0,0 +1,2 @@
1
+ import { TableTheme } from '../types';
2
+ export declare const defaultColors: TableTheme['colors'];
@@ -0,0 +1,2 @@
1
+ import { TableTheme } from '../types';
2
+ export declare const defaultIcons: TableTheme['icons'];
@@ -0,0 +1,2 @@
1
+ import { TableTheme } from '../types';
2
+ export declare const defaultTexts: TableTheme['text'];
@@ -0,0 +1,2 @@
1
+ import { TableTheme } from '../../types';
2
+ export declare const Badge: TableTheme['components']['Badge'];
@@ -0,0 +1,2 @@
1
+ import { TableTheme } from '../../types';
2
+ export declare const Button: TableTheme['components']['Button'];
@@ -0,0 +1,2 @@
1
+ import { TableTheme } from '../../types';
2
+ export declare const Checkbox: TableTheme['components']['Checkbox'];
@@ -0,0 +1,2 @@
1
+ import { TableTheme } from '../../types';
2
+ export declare const IconButton: TableTheme['components']['IconButton'];
@@ -0,0 +1,2 @@
1
+ import { TableTheme } from '../../types';
2
+ export declare const defaultComponents: TableTheme['components'];
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { TableTheme } from '../../types';
3
+ export declare const PopoverContext: React.Context<number>;
4
+ export declare const Popover: TableTheme['components']['Popover'];
@@ -0,0 +1,2 @@
1
+ import { TableTheme } from '../../types';
2
+ export declare const TextField: TableTheme['components']['TextField'];
@@ -0,0 +1,8 @@
1
+ import { ReactNode } from 'react';
2
+ import { DeepPartial } from '../../misc/deepPartial';
3
+ import { TableTheme } from '../../types';
4
+ export declare const mui4Theme: Partial<TableTheme>;
5
+ export declare function Mui4TableThemeProvider({ theme, children }: {
6
+ theme?: DeepPartial<TableTheme>;
7
+ children: ReactNode;
8
+ }): import("@emotion/react/jsx-runtime").JSX.Element;
@@ -0,0 +1,8 @@
1
+ import { ReactNode } from 'react';
2
+ import { DeepPartial } from '../../misc/deepPartial';
3
+ import { TableTheme } from '../../types';
4
+ export declare const mui5Theme: Partial<TableTheme>;
5
+ export declare function Mui5TableThemeProvider({ theme, children }: {
6
+ theme?: DeepPartial<TableTheme>;
7
+ children: ReactNode;
8
+ }): import("@emotion/react/jsx-runtime").JSX.Element;
@@ -0,0 +1,11 @@
1
+ import { ReactNode } from 'react';
2
+ import { DeepPartial } from '../misc/deepPartial';
3
+ import { InternalTableProps, TableTheme } from '../types';
4
+ export declare function configureTableTheme(tableTheme: DeepPartial<TableTheme>): void;
5
+ export declare const TableThemeContext: import("react").Context<DeepPartial<TableTheme<unknown>>>;
6
+ export declare function TableThemeProvider({ theme, children }: {
7
+ theme: DeepPartial<TableTheme>;
8
+ children: ReactNode;
9
+ }): import("@emotion/react/jsx-runtime").JSX.Element;
10
+ export declare function mergeThemes<T>(...themes: DeepPartial<TableTheme<T>>[]): DeepPartial<TableTheme<T>>;
11
+ export declare function useTableTheme<T>(props: InternalTableProps<T>): TableTheme<T>;
@@ -0,0 +1,9 @@
1
+ export declare function useCssVariables(): {
2
+ '--spacing': string | number;
3
+ '--primaryMain': string;
4
+ '--primaryLight': string;
5
+ '--primaryContrastText': string;
6
+ '--secondaryMain': string;
7
+ '--secondaryLight': string;
8
+ '--secondaryContrastText': string;
9
+ };