@economic/taco 2.29.2 → 2.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. package/dist/esm/index.css +6 -2
  2. package/dist/esm/packages/taco/src/components/Table/hooks/useRowCreation.js +1 -1
  3. package/dist/esm/packages/taco/src/primitives/Table/Core/Table.js +1 -0
  4. package/dist/esm/packages/taco/src/primitives/Table/Core/Table.js.map +1 -1
  5. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Body/Body.js +13 -4
  6. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Body/Body.js.map +1 -1
  7. package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableRenderer.js +20 -27
  8. package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableRenderer.js.map +1 -1
  9. package/dist/esm/packages/taco/src/primitives/Table/Core/util/rows.js +1 -2
  10. package/dist/esm/packages/taco/src/primitives/Table/Core/util/rows.js.map +1 -1
  11. package/dist/esm/packages/taco/src/primitives/Table/types.js.map +1 -1
  12. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableRowActive.js +3 -3
  13. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableRowActive.js.map +1 -1
  14. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/setup.js +4 -5
  15. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/setup.js.map +1 -1
  16. package/dist/index.css +6 -2
  17. package/dist/primitives/Table/Core/components/Body/Body.d.ts +1 -0
  18. package/dist/primitives/Table/Core/util/rows.d.ts +0 -1
  19. package/dist/primitives/Table/types.d.ts +2 -2
  20. package/dist/taco.cjs.development.js +40 -40
  21. package/dist/taco.cjs.development.js.map +1 -1
  22. package/dist/taco.cjs.production.min.js +1 -1
  23. package/dist/taco.cjs.production.min.js.map +1 -1
  24. package/package.json +2 -2
@@ -596,13 +596,17 @@ table[data-taco^='table'] tfoot {
596
596
  @apply col-span-full grid grid-cols-[subgrid];
597
597
  }
598
598
 
599
+ table[data-taco^='table'] tfoot td {
600
+ @apply items-center;
601
+ }
602
+
599
603
  table[data-taco^='table'] tbody {
600
604
  /* z-indexes & layout */
601
605
  @apply isolate z-10;
602
606
  /* grid */
603
607
  @apply col-span-full grid auto-rows-min grid-cols-[subgrid];
604
608
  /* printing - override virtualiser bottom spacing */
605
- @apply print:!h-auto print:!pb-0;
609
+ @apply print:!h-auto;
606
610
  }
607
611
 
608
612
  table[data-taco^='table'] tr {
@@ -621,7 +625,7 @@ table[data-taco^='table'] tr:last-child th:before {
621
625
  /* row groups */
622
626
 
623
627
  table[data-taco^='table'] tr[data-row-group] {
624
- @apply bg-grey-100 sticky top-[calc(var(--table-header-group-depth)_*_42px)] z-30 mt-10 print:mt-0;
628
+ @apply bg-grey-100 sticky top-[calc((var(--table-header-group-depth)_-_1)_*_40px_+_42px)] z-30 mt-10 print:mt-0;
625
629
  }
626
630
 
627
631
  table[data-taco^='table'] tr[data-row-group]:first-child {
@@ -1,9 +1,9 @@
1
1
  import React__default from 'react';
2
2
  import { v4 } from 'uuid';
3
+ import get from 'lodash-es/get';
3
4
  import set from 'lodash-es/set';
4
5
  import { convertRowIndexPathToNumberArray, getByRowIndexPath, getParentRowIndexPath } from '../util/rowIndexPath.js';
5
6
  import unset from 'lodash-es/unset';
6
- import get from 'lodash-es/get';
7
7
  import compact from 'lodash-es/compact';
8
8
  import pullAt from 'lodash-es/pullAt';
9
9
 
@@ -44,6 +44,7 @@ function TableGrid(props) {
44
44
  }))))))), table.instance.getRowModel().rows.length ? ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Body, {
45
45
  enableHorizontalArrowKeyNavigation: enableHorizontalArrowKeyNavigation,
46
46
  table: table.instance,
47
+ scrollToIndex: table.renderer.scrollToIndex,
47
48
  style: table.renderer.style
48
49
  }, table.renderer.rows), table.meta.footer.isEnabled ? /*#__PURE__*/React__default.createElement(Foot, {
49
50
  table: table.instance
@@ -1 +1 @@
1
- {"version":3,"file":"Table.js","sources":["../../../../../../../../src/primitives/Table/Core/Table.tsx"],"sourcesContent":["import React from 'react';\nimport { FocusScope } from '@react-aria/focus';\nimport { Header } from './components/Header/Header';\nimport { Body } from './components/Body/Body';\nimport { Foot } from './components/Footer/Footer';\nimport { EmptyStateBody } from './components/Body/EmptyStateBody';\nimport { useTableReturnValue } from './useTable';\nimport { TableToolbar } from './components/Toolbar/Toolbar';\nimport './style.css';\n\ntype TableProps = {\n children: JSX.Element | Array<JSX.Element | null>;\n};\n\nexport function Table(props: TableProps) {\n return <>{props.children}</>;\n}\nTable.Toolbar = TableToolbar;\nTable.Grid = TableGrid;\n\nexport type TableGridProps<TType = unknown> = React.TableHTMLAttributes<HTMLTableElement> & {\n 'data-taco': string;\n enableHorizontalArrowKeyNavigation?: boolean;\n table: useTableReturnValue<TType>;\n};\n\nexport function TableGrid<TType = unknown>(props: TableGridProps<TType>) {\n const { enableHorizontalArrowKeyNavigation, table, ...attributes } = props;\n const handleFocus =\n table.meta.rowActive.rowActiveIndex === undefined\n ? (event: React.FocusEvent) => {\n table.meta.rowActive.handleFocus(event, table.meta.length, table.renderer.scrollToIndex);\n }\n : undefined;\n\n return (\n <>\n <style>{table.stylesheet}</style>\n <FocusScope>\n <table\n {...attributes}\n id={table.id}\n data-table-font-size={table.meta.fontSize.size}\n data-table-grouped={!!table.state.grouping?.length}\n data-table-horizontally-scrolled={table.meta.columnFreezing.isHorizontallyScrolled ? true : undefined}\n data-table-status={table.meta.server.isEnabled ? (table.meta.server.isReady ? 'ready' : undefined) : 'ready'}\n data-table-pause-hover={table.meta.rowActive.isHoverStatePaused ? true : undefined}\n data-table-resizing={table.state.columnSizingInfo.isResizingColumn ? true : undefined}\n data-table-row-height={table.meta.rowHeight.height}\n onFocus={handleFocus}\n onScroll={table.meta.columnFreezing.handleScroll}\n ref={table.ref}\n style={table.style}\n tabIndex={-1}>\n <thead>\n {table.instance.getHeaderGroups().map(headerGroup => (\n <tr key={headerGroup.id}>\n {headerGroup.headers.map(props => (\n <Header key={props.id} header={props} scrollToIndex={table.renderer.scrollToIndex} />\n ))}\n </tr>\n ))}\n </thead>\n {table.instance.getRowModel().rows.length ? (\n <>\n <Body\n enableHorizontalArrowKeyNavigation={enableHorizontalArrowKeyNavigation}\n table={table.instance}\n style={table.renderer.style}>\n {table.renderer.rows}\n </Body>\n {table.meta.footer.isEnabled ? <Foot table={table.instance} /> : null}\n </>\n ) : (\n <EmptyStateBody emptyState={table.props.emptyState} />\n )}\n </table>\n </FocusScope>\n </>\n );\n}\n"],"names":["Table","props","React","children","Toolbar","TableToolbar","Grid","TableGrid","enableHorizontalArrowKeyNavigation","table","attributes","handleFocus","meta","rowActive","rowActiveIndex","undefined","event","length","renderer","scrollToIndex","stylesheet","FocusScope","id","fontSize","size","_table$state$grouping","state","grouping","columnFreezing","isHorizontallyScrolled","server","isEnabled","isReady","isHoverStatePaused","columnSizingInfo","isResizingColumn","rowHeight","height","onFocus","onScroll","handleScroll","ref","style","tabIndex","instance","getHeaderGroups","map","headerGroup","key","headers","Header","header","getRowModel","rows","Body","footer","Foot","EmptyStateBody","emptyState"],"mappings":"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"}
1
+ {"version":3,"file":"Table.js","sources":["../../../../../../../../src/primitives/Table/Core/Table.tsx"],"sourcesContent":["import React from 'react';\nimport { FocusScope } from '@react-aria/focus';\nimport { Header } from './components/Header/Header';\nimport { Body } from './components/Body/Body';\nimport { Foot } from './components/Footer/Footer';\nimport { EmptyStateBody } from './components/Body/EmptyStateBody';\nimport { useTableReturnValue } from './useTable';\nimport { TableToolbar } from './components/Toolbar/Toolbar';\nimport './style.css';\n\ntype TableProps = {\n children: JSX.Element | Array<JSX.Element | null>;\n};\n\nexport function Table(props: TableProps) {\n return <>{props.children}</>;\n}\nTable.Toolbar = TableToolbar;\nTable.Grid = TableGrid;\n\nexport type TableGridProps<TType = unknown> = React.TableHTMLAttributes<HTMLTableElement> & {\n 'data-taco': string;\n enableHorizontalArrowKeyNavigation?: boolean;\n table: useTableReturnValue<TType>;\n};\n\nexport function TableGrid<TType = unknown>(props: TableGridProps<TType>) {\n const { enableHorizontalArrowKeyNavigation, table, ...attributes } = props;\n const handleFocus =\n table.meta.rowActive.rowActiveIndex === undefined\n ? (event: React.FocusEvent) => {\n table.meta.rowActive.handleFocus(event, table.meta.length, table.renderer.scrollToIndex);\n }\n : undefined;\n\n return (\n <>\n <style>{table.stylesheet}</style>\n <FocusScope>\n <table\n {...attributes}\n id={table.id}\n data-table-font-size={table.meta.fontSize.size}\n data-table-grouped={!!table.state.grouping?.length}\n data-table-horizontally-scrolled={table.meta.columnFreezing.isHorizontallyScrolled ? true : undefined}\n data-table-status={table.meta.server.isEnabled ? (table.meta.server.isReady ? 'ready' : undefined) : 'ready'}\n data-table-pause-hover={table.meta.rowActive.isHoverStatePaused ? true : undefined}\n data-table-resizing={table.state.columnSizingInfo.isResizingColumn ? true : undefined}\n data-table-row-height={table.meta.rowHeight.height}\n onFocus={handleFocus}\n onScroll={table.meta.columnFreezing.handleScroll}\n ref={table.ref}\n style={table.style}\n tabIndex={-1}>\n <thead>\n {table.instance.getHeaderGroups().map(headerGroup => (\n <tr key={headerGroup.id}>\n {headerGroup.headers.map(props => (\n <Header key={props.id} header={props} scrollToIndex={table.renderer.scrollToIndex} />\n ))}\n </tr>\n ))}\n </thead>\n {table.instance.getRowModel().rows.length ? (\n <>\n <Body\n enableHorizontalArrowKeyNavigation={enableHorizontalArrowKeyNavigation}\n table={table.instance}\n scrollToIndex={table.renderer.scrollToIndex}\n style={table.renderer.style}>\n {table.renderer.rows}\n </Body>\n {table.meta.footer.isEnabled ? <Foot table={table.instance} /> : null}\n </>\n ) : (\n <EmptyStateBody emptyState={table.props.emptyState} />\n )}\n </table>\n </FocusScope>\n </>\n );\n}\n"],"names":["Table","props","React","children","Toolbar","TableToolbar","Grid","TableGrid","enableHorizontalArrowKeyNavigation","table","attributes","handleFocus","meta","rowActive","rowActiveIndex","undefined","event","length","renderer","scrollToIndex","stylesheet","FocusScope","id","fontSize","size","_table$state$grouping","state","grouping","columnFreezing","isHorizontallyScrolled","server","isEnabled","isReady","isHoverStatePaused","columnSizingInfo","isResizingColumn","rowHeight","height","onFocus","onScroll","handleScroll","ref","style","tabIndex","instance","getHeaderGroups","map","headerGroup","key","headers","Header","header","getRowModel","rows","Body","footer","Foot","EmptyStateBody","emptyState"],"mappings":"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"}
@@ -5,6 +5,7 @@ import { useAugmentedFocusManager } from './util.js';
5
5
  function Body(props) {
6
6
  const {
7
7
  enableHorizontalArrowKeyNavigation = false,
8
+ scrollToIndex,
8
9
  table,
9
10
  ...attributes
10
11
  } = props;
@@ -34,16 +35,24 @@ function Body(props) {
34
35
  // there are no previous elements to focus, go up a row or go outside the table
35
36
  // but only if there are actually any focusable elements in the row
36
37
  event.preventDefault();
37
- tableMeta.rowActive.setRowActiveIndex(tableMeta.rowActive.rowActiveIndex - 1);
38
- requestAnimationFrame(() => focusManager.focusLast());
38
+ const prevIndex = tableMeta.rowActive.rowActiveIndex - 1;
39
+ tableMeta.rowActive.setRowActiveIndex(prevIndex);
40
+ requestAnimationFrame(() => {
41
+ focusManager.focusLast();
42
+ scrollToIndex(prevIndex);
43
+ });
39
44
  }
40
45
  } else {
41
46
  if (!isLastRow) {
42
47
  // there are no next elements to focus, go down a row or go outside the table
43
48
  // but only if there are actually any focusable elements in the row
44
49
  event.preventDefault();
45
- tableMeta.rowActive.setRowActiveIndex(tableMeta.rowActive.rowActiveIndex + 1);
46
- requestAnimationFrame(() => focusManager.focusFirst());
50
+ const nextIndex = tableMeta.rowActive.rowActiveIndex + 1;
51
+ tableMeta.rowActive.setRowActiveIndex(nextIndex);
52
+ requestAnimationFrame(() => {
53
+ focusManager.focusFirst();
54
+ scrollToIndex(nextIndex);
55
+ });
47
56
  }
48
57
  }
49
58
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Body.js","sources":["../../../../../../../../../../src/primitives/Table/Core/components/Body/Body.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport { useAugmentedFocusManager } from './util';\nimport { hasFocusableElement } from '../../../../../utils/dom';\n\ntype BodyProps<TType = unknown> = React.HTMLAttributes<HTMLTableSectionElement> & {\n enableHorizontalArrowKeyNavigation?: boolean;\n table: ReactTable<TType>;\n};\n\nexport function Body<TType = unknown>(props: BodyProps<TType>) {\n const { enableHorizontalArrowKeyNavigation = false, table, ...attributes } = props;\n const ref = React.useRef<HTMLTableSectionElement>(null);\n const focusManager = useAugmentedFocusManager();\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.isDefaultPrevented() || event.isPropagationStopped()) {\n return;\n }\n\n if (tableMeta.rowActive.rowActiveIndex !== undefined) {\n const isFirstRow = tableMeta.rowActive.rowActiveIndex === 0;\n const isLastRow = tableMeta.rowActive.rowActiveIndex === tableMeta.length - 1;\n if (\n event.key === 'Tab' ||\n (enableHorizontalArrowKeyNavigation && (event.key === 'ArrowLeft' || event.key === 'ArrowRight'))\n ) {\n if (event.key === 'Tab' && !hasFocusableElement((event.target as HTMLElement).closest('tr[data-row-id]'))) {\n return;\n }\n\n tableMeta.rowActive.setHoverStatePaused(true);\n\n const focusedElement =\n event.shiftKey || event.key === 'ArrowLeft' ? focusManager.focusPrevious() : focusManager.focusNext();\n\n if (focusedElement) {\n // override default behaviour, since we're handling focus internally now\n event.preventDefault();\n return;\n }\n\n if (event.shiftKey || event.key === 'ArrowLeft') {\n if (!isFirstRow) {\n // there are no previous elements to focus, go up a row or go outside the table\n // but only if there are actually any focusable elements in the row\n event.preventDefault();\n tableMeta.rowActive.setRowActiveIndex(tableMeta.rowActive.rowActiveIndex - 1);\n requestAnimationFrame(() => focusManager.focusLast());\n }\n } else {\n if (!isLastRow) {\n // there are no next elements to focus, go down a row or go outside the table\n // but only if there are actually any focusable elements in the row\n event.preventDefault();\n tableMeta.rowActive.setRowActiveIndex(tableMeta.rowActive.rowActiveIndex + 1);\n requestAnimationFrame(() => focusManager.focusFirst());\n }\n }\n }\n }\n };\n const handleMouseMove = React.useCallback((event: React.MouseEvent<HTMLTableSectionElement>) => {\n const index = (event.target as HTMLElement)?.closest('tr')?.getAttribute('data-row-index');\n\n if (index) {\n tableMeta.rowActive.setRowHoverIndex(Number.parseInt(index));\n }\n }, []);\n\n // Sometimes this event does not trigger if the mouse leaves the window without leaving boundary of the table\n // this is a browser level bug and there's not much to be done about it\n const handleMouseLeave = React.useCallback(() => tableMeta.rowActive.setRowHoverIndex(undefined), []);\n\n return (\n <tbody\n {...attributes}\n onKeyDown={handleKeyDown}\n onMouseLeave={handleMouseLeave}\n onMouseMove={handleMouseMove}\n ref={ref}\n />\n );\n}\n"],"names":["Body","props","enableHorizontalArrowKeyNavigation","table","attributes","ref","React","useRef","focusManager","useAugmentedFocusManager","tableMeta","options","meta","handleKeyDown","event","isDefaultPrevented","isPropagationStopped","rowActive","rowActiveIndex","undefined","isFirstRow","isLastRow","length","key","hasFocusableElement","target","closest","setHoverStatePaused","focusedElement","shiftKey","focusPrevious","focusNext","preventDefault","setRowActiveIndex","requestAnimationFrame","focusLast","focusFirst","handleMouseMove","useCallback","index","_event$target","_event$target$closest","getAttribute","setRowHoverIndex","Number","parseInt","handleMouseLeave","onKeyDown","onMouseLeave","onMouseMove"],"mappings":"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"}
1
+ {"version":3,"file":"Body.js","sources":["../../../../../../../../../../src/primitives/Table/Core/components/Body/Body.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport { useAugmentedFocusManager } from './util';\nimport { hasFocusableElement } from '../../../../../utils/dom';\n\ntype BodyProps<TType = unknown> = React.HTMLAttributes<HTMLTableSectionElement> & {\n enableHorizontalArrowKeyNavigation?: boolean;\n scrollToIndex: (index: number) => void;\n table: ReactTable<TType>;\n};\n\nexport function Body<TType = unknown>(props: BodyProps<TType>) {\n const { enableHorizontalArrowKeyNavigation = false, scrollToIndex, table, ...attributes } = props;\n const ref = React.useRef<HTMLTableSectionElement>(null);\n const focusManager = useAugmentedFocusManager();\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.isDefaultPrevented() || event.isPropagationStopped()) {\n return;\n }\n\n if (tableMeta.rowActive.rowActiveIndex !== undefined) {\n const isFirstRow = tableMeta.rowActive.rowActiveIndex === 0;\n const isLastRow = tableMeta.rowActive.rowActiveIndex === tableMeta.length - 1;\n if (\n event.key === 'Tab' ||\n (enableHorizontalArrowKeyNavigation && (event.key === 'ArrowLeft' || event.key === 'ArrowRight'))\n ) {\n if (event.key === 'Tab' && !hasFocusableElement((event.target as HTMLElement).closest('tr[data-row-id]'))) {\n return;\n }\n\n tableMeta.rowActive.setHoverStatePaused(true);\n\n const focusedElement =\n event.shiftKey || event.key === 'ArrowLeft' ? focusManager.focusPrevious() : focusManager.focusNext();\n\n if (focusedElement) {\n // override default behaviour, since we're handling focus internally now\n event.preventDefault();\n return;\n }\n\n if (event.shiftKey || event.key === 'ArrowLeft') {\n if (!isFirstRow) {\n // there are no previous elements to focus, go up a row or go outside the table\n // but only if there are actually any focusable elements in the row\n event.preventDefault();\n const prevIndex = tableMeta.rowActive.rowActiveIndex - 1;\n tableMeta.rowActive.setRowActiveIndex(prevIndex);\n requestAnimationFrame(() => {\n focusManager.focusLast();\n scrollToIndex(prevIndex);\n });\n }\n } else {\n if (!isLastRow) {\n // there are no next elements to focus, go down a row or go outside the table\n // but only if there are actually any focusable elements in the row\n event.preventDefault();\n const nextIndex = tableMeta.rowActive.rowActiveIndex + 1;\n tableMeta.rowActive.setRowActiveIndex(nextIndex);\n requestAnimationFrame(() => {\n focusManager.focusFirst();\n scrollToIndex(nextIndex);\n });\n }\n }\n }\n }\n };\n const handleMouseMove = React.useCallback((event: React.MouseEvent<HTMLTableSectionElement>) => {\n const index = (event.target as HTMLElement)?.closest('tr')?.getAttribute('data-row-index');\n\n if (index) {\n tableMeta.rowActive.setRowHoverIndex(Number.parseInt(index));\n }\n }, []);\n\n // Sometimes this event does not trigger if the mouse leaves the window without leaving boundary of the table\n // this is a browser level bug and there's not much to be done about it\n const handleMouseLeave = React.useCallback(() => tableMeta.rowActive.setRowHoverIndex(undefined), []);\n\n return (\n <tbody\n {...attributes}\n onKeyDown={handleKeyDown}\n onMouseLeave={handleMouseLeave}\n onMouseMove={handleMouseMove}\n ref={ref}\n />\n );\n}\n"],"names":["Body","props","enableHorizontalArrowKeyNavigation","scrollToIndex","table","attributes","ref","React","useRef","focusManager","useAugmentedFocusManager","tableMeta","options","meta","handleKeyDown","event","isDefaultPrevented","isPropagationStopped","rowActive","rowActiveIndex","undefined","isFirstRow","isLastRow","length","key","hasFocusableElement","target","closest","setHoverStatePaused","focusedElement","shiftKey","focusPrevious","focusNext","preventDefault","prevIndex","setRowActiveIndex","requestAnimationFrame","focusLast","nextIndex","focusFirst","handleMouseMove","useCallback","index","_event$target","_event$target$closest","getAttribute","setRowHoverIndex","Number","parseInt","handleMouseLeave","onKeyDown","onMouseLeave","onMouseMove"],"mappings":"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"}
@@ -1,17 +1,13 @@
1
1
  import React__default from 'react';
2
2
  import { useVirtualizer, defaultRangeExtractor } from '@tanstack/react-virtual';
3
- import { HEADER_FOOTER_ROW_HEIGHT_ESTIMATE, ROW_HEIGHT_ESTIMATES } from '../util/rows.js';
3
+ import { ROW_HEIGHT_ESTIMATES } from '../util/rows.js';
4
4
  import { Row } from '../components/Row/Row.js';
5
5
 
6
- const TABLE_SCROLL_PADDING_BOTTOM = 36;
7
- const TABLE_PADDING_BOTTOM = 0;
8
6
  function useTableRenderer(renderers, table, tableRef, defaultRowActiveIndex) {
9
7
  var _table$getState$group, _ref, _virtualItems$padding, _virtualItems$padding2, _ref2, _virtualItems;
10
8
  const tableMeta = table.options.meta;
11
9
  const rows = table.getRowModel().rows;
12
- const HEADER_OFFSET_TOTAL = HEADER_FOOTER_ROW_HEIGHT_ESTIMATE * table.getHeaderGroups().length;
13
- const isTableGrouped = !!((_table$getState$group = table.getState().grouping) !== null && _table$getState$group !== void 0 && _table$getState$group.length);
14
- const FOOTER_OFFSET_TOTAL = tableMeta.footer.isEnabled ? HEADER_FOOTER_ROW_HEIGHT_ESTIMATE : 0;
10
+ const isTableRowGrouped = !!((_table$getState$group = table.getState().grouping) !== null && _table$getState$group !== void 0 && _table$getState$group.length);
15
11
  // expanded rows
16
12
  const {
17
13
  createRowMeasurer,
@@ -19,16 +15,24 @@ function useTableRenderer(renderers, table, tableRef, defaultRowActiveIndex) {
19
15
  } = useRowHeightVirtualisation(table);
20
16
  // row groups
21
17
  const rangeExtractor = useRowGroupVirtualisation(table);
18
+ // account for thead and tfoot in the scroll area
19
+ const scrollPaddingStart = ROW_HEIGHT_ESTIMATES.medium;
20
+ // column groups offset the bottom padding :shrug:, multiplying by 1.5 ensures the bottom padding remains
21
+ // consistent when there are groups and when there aren't. 1.5 is relatively arbitrary, but it gives alignment
22
+ const scrollPaddingEnd = ROW_HEIGHT_ESTIMATES.medium * (table.getHeaderGroups().length > 1 ? 1.5 : 1);
22
23
  const virtualiser = useVirtualizer({
23
24
  count: rows.length,
24
25
  estimateSize,
25
26
  getScrollElement: () => tableRef.current,
26
27
  overscan: tableMeta.printing.isPrinting ? rows.length : undefined,
27
28
  rangeExtractor,
28
- scrollPaddingStart: isTableGrouped ? HEADER_FOOTER_ROW_HEIGHT_ESTIMATE : undefined,
29
- scrollPaddingEnd: HEADER_OFFSET_TOTAL + TABLE_SCROLL_PADDING_BOTTOM,
30
- paddingEnd: TABLE_PADDING_BOTTOM
29
+ // correctly sets top and bottom spacing for the scroll container - very sensitive, don't change
30
+ scrollMargin: isTableRowGrouped ? 0 : scrollPaddingStart,
31
+ // correctly sets the scroll padding offset, e.g. when keyboard navigating rows in the list
32
+ scrollPaddingStart,
33
+ scrollPaddingEnd: tableMeta.footer.isEnabled ? scrollPaddingEnd * 2 : scrollPaddingEnd
31
34
  });
35
+ const totalSize = virtualiser.getTotalSize();
32
36
  const virtualItems = virtualiser.getVirtualItems();
33
37
  const scrollToIndex = React__default.useCallback((index, options = {
34
38
  align: 'auto',
@@ -41,29 +45,18 @@ function useTableRenderer(renderers, table, tableRef, defaultRowActiveIndex) {
41
45
  if (tableRef.current) {
42
46
  if (index === 0) {
43
47
  virtualiser.scrollToOffset(0, notSmooth);
44
- } else if (index >= virtualItems.length - 1) {
45
- // scrolling to the last row isn't easy when rows have dynamic height
46
- // because you don't know all the heights until they render...
47
- // so when you skip to the last you don't know if "the end" is actually the end
48
- virtualiser.scrollToIndex(index, notSmooth);
49
- // https://github.com/TanStack/virtual/issues/216
50
- setTimeout(() => {
51
- virtualiser.scrollToIndex(index, notSmooth);
52
- setTimeout(() => {
53
- virtualiser.scrollToIndex(index, notSmooth);
54
- }, 150);
55
- }, 150);
48
+ } else if (index === rows.length - 1) {
49
+ // sometimes the last row doesn't fully show, so we just force scroll to the bottom
50
+ tableRef.current.scrollTop = tableRef.current.scrollHeight;
56
51
  } else {
57
52
  virtualiser.scrollToIndex(index, options);
58
53
  }
59
54
  }
60
- }, [virtualItems.length, tableRef.current]);
55
+ }, [virtualItems.length, tableRef.current, totalSize, rows.length]);
61
56
  // use row 1 not 0, because 0 might be sticky in grouped tables and it's start value will always be 0
62
- const paddingStartIndex = isTableGrouped && rows.length > 1 ? 1 : 0;
57
+ const paddingStartIndex = isTableRowGrouped && rows.length > 1 ? 1 : 0;
63
58
  // styling for offsetting rows - this "is" the virtualisation
64
- const [paddingTop, paddingBottom] = virtualItems.length > 0 ? [
65
- // use row 1 not 0, because 0 might be sticky in grouped tables and it's start value will always be 0
66
- Math.max(0, (_ref = ((_virtualItems$padding = virtualItems[paddingStartIndex]) === null || _virtualItems$padding === void 0 ? void 0 : _virtualItems$padding.start) - virtualiser.options.scrollMargin - ((_virtualItems$padding2 = virtualItems[paddingStartIndex]) === null || _virtualItems$padding2 === void 0 ? void 0 : _virtualItems$padding2.size)) !== null && _ref !== void 0 ? _ref : 0), Math.max(0, (_ref2 = virtualiser.getTotalSize() - ((_virtualItems = virtualItems[virtualItems.length - 1]) === null || _virtualItems === void 0 ? void 0 : _virtualItems.end)) !== null && _ref2 !== void 0 ? _ref2 : 0)] : [0, 0];
59
+ const [paddingTop, paddingBottom] = virtualItems.length > 0 ? [Math.max(0, (_ref = ((_virtualItems$padding = virtualItems[paddingStartIndex]) === null || _virtualItems$padding === void 0 ? void 0 : _virtualItems$padding.start) - ((_virtualItems$padding2 = virtualItems[paddingStartIndex]) === null || _virtualItems$padding2 === void 0 ? void 0 : _virtualItems$padding2.size)) !== null && _ref !== void 0 ? _ref : 0), Math.max(0, (_ref2 = totalSize - ((_virtualItems = virtualItems[virtualItems.length - 1]) === null || _virtualItems === void 0 ? void 0 : _virtualItems.end)) !== null && _ref2 !== void 0 ? _ref2 : 0)] : [0, 0];
67
60
  // ensure default active rows are scrolled to
68
61
  React__default.useEffect(() => {
69
62
  if (defaultRowActiveIndex) {
@@ -78,7 +71,7 @@ function useTableRenderer(renderers, table, tableRef, defaultRowActiveIndex) {
78
71
  let content = null;
79
72
  if (rows.length) {
80
73
  style = {
81
- height: `${virtualiser.getTotalSize() - HEADER_OFFSET_TOTAL + FOOTER_OFFSET_TOTAL}px`,
74
+ height: `${totalSize}px`,
82
75
  paddingBottom,
83
76
  paddingTop
84
77
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useTableRenderer.js","sources":["../../../../../../../../../src/primitives/Table/Core/features/useTableRenderer.tsx"],"sourcesContent":["import React, { CSSProperties } from 'react';\nimport { Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport {\n useVirtualizer,\n defaultRangeExtractor,\n ScrollToOptions as ReactVirtualScrollToOptions,\n VirtualItem,\n} from '@tanstack/react-virtual';\nimport { HEADER_FOOTER_ROW_HEIGHT_ESTIMATE, ROW_HEIGHT_ESTIMATES } from '../util/rows';\nimport { Row } from '../components/Row/Row';\nimport { useTableRenderers } from '../types';\nimport { TableRef } from '../../types';\n\nconst TABLE_SCROLL_PADDING_BOTTOM = 36;\nconst TABLE_PADDING_BOTTOM = 0;\n\nexport function useTableRenderer<TType = unknown>(\n renderers: useTableRenderers<TType>,\n table: ReactTable<TType>,\n tableRef: React.RefObject<TableRef>,\n defaultRowActiveIndex?: number | undefined\n) {\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const rows = table.getRowModel().rows;\n const HEADER_OFFSET_TOTAL = HEADER_FOOTER_ROW_HEIGHT_ESTIMATE * table.getHeaderGroups().length;\n const isTableGrouped = !!table.getState().grouping?.length;\n const FOOTER_OFFSET_TOTAL = tableMeta.footer.isEnabled ? HEADER_FOOTER_ROW_HEIGHT_ESTIMATE : 0;\n\n // expanded rows\n const { createRowMeasurer, estimateSize } = useRowHeightVirtualisation<TType>(table);\n\n // row groups\n const rangeExtractor = useRowGroupVirtualisation<TType>(table);\n\n const virtualiser = useVirtualizer({\n count: rows.length,\n estimateSize,\n getScrollElement: () => tableRef.current,\n overscan: tableMeta.printing.isPrinting ? rows.length : undefined,\n rangeExtractor,\n scrollPaddingStart: isTableGrouped ? HEADER_FOOTER_ROW_HEIGHT_ESTIMATE : undefined,\n scrollPaddingEnd: HEADER_OFFSET_TOTAL + TABLE_SCROLL_PADDING_BOTTOM,\n paddingEnd: TABLE_PADDING_BOTTOM,\n });\n\n const virtualItems = virtualiser.getVirtualItems();\n\n const scrollToIndex = React.useCallback(\n (index: number, options: ReactVirtualScrollToOptions = { align: 'auto', behavior: 'smooth' }) => {\n const notSmooth: ReactVirtualScrollToOptions = { ...options, behavior: 'auto' };\n\n if (tableRef.current) {\n if (index === 0) {\n virtualiser.scrollToOffset(0, notSmooth);\n } else if (index >= virtualItems.length - 1) {\n // scrolling to the last row isn't easy when rows have dynamic height\n // because you don't know all the heights until they render...\n // so when you skip to the last you don't know if \"the end\" is actually the end\n virtualiser.scrollToIndex(index, notSmooth);\n\n // https://github.com/TanStack/virtual/issues/216\n setTimeout(() => {\n virtualiser.scrollToIndex(index, notSmooth);\n\n setTimeout(() => {\n virtualiser.scrollToIndex(index, notSmooth);\n }, 150);\n }, 150);\n } else {\n virtualiser.scrollToIndex(index, options);\n }\n }\n },\n [virtualItems.length, tableRef.current]\n );\n\n // use row 1 not 0, because 0 might be sticky in grouped tables and it's start value will always be 0\n const paddingStartIndex = isTableGrouped && rows.length > 1 ? 1 : 0;\n\n // styling for offsetting rows - this \"is\" the virtualisation\n const [paddingTop, paddingBottom] =\n virtualItems.length > 0\n ? [\n // use row 1 not 0, because 0 might be sticky in grouped tables and it's start value will always be 0\n Math.max(\n 0,\n virtualItems[paddingStartIndex]?.start -\n virtualiser.options.scrollMargin -\n virtualItems[paddingStartIndex]?.size ?? 0\n ),\n Math.max(0, virtualiser.getTotalSize() - virtualItems[virtualItems.length - 1]?.end ?? 0),\n ]\n : [0, 0];\n\n // ensure default active rows are scrolled to\n React.useEffect(() => {\n if (defaultRowActiveIndex) {\n scrollToIndex(defaultRowActiveIndex, { align: 'center', behavior: 'auto' });\n }\n }, []);\n\n // rendered output\n let style: CSSProperties = {};\n let content: (JSX.Element | null)[] | null = null;\n\n if (rows.length) {\n style = {\n height: `${virtualiser.getTotalSize() - HEADER_OFFSET_TOTAL + FOOTER_OFFSET_TOTAL}px`,\n paddingBottom,\n paddingTop,\n };\n content = virtualItems.map(virtualRow => {\n // there appears to be a react-virtual bug where it inserts a single `undefined` item at the end of the row, which crashes here\n if (!virtualRow) {\n return null;\n }\n\n const row = rows[virtualRow.index];\n const measureRow = createRowMeasurer(virtualiser.resizeItem, virtualRow);\n return (\n <Row\n key={row.id}\n row={row}\n index={virtualRow.index}\n table={table}\n measureRow={measureRow}\n renderer={renderers.row}\n cellRenderer={renderers.cell}\n />\n );\n });\n }\n\n return {\n rows: content,\n style,\n scrollToIndex,\n };\n}\n\n// support varying row heights - variable row heights, row expansion\nfunction useRowHeightVirtualisation<TType = unknown>(table: ReactTable<TType>) {\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const rows = table.getRowModel().rows;\n const expandedState = table.getState().expanded;\n\n const [expandedRowHeightsCache, setExpandedRowHeightsCache] = React.useState<Record<number, number>>({});\n\n // look at all registered expanded row heights and use them to form a more accurate average size\n // it might be worth considering if taking the max, or an upper bound, would be better\n const averageExpandedRowHeight = React.useMemo(() => {\n const values: number[] = Object.values(expandedRowHeightsCache);\n return values.length ? values.reduce((a, b) => a + b, 0) / values.length : 0;\n }, [expandedRowHeightsCache]);\n\n // row heights\n const estimateSize = React.useCallback(\n (index: number) => {\n const rowHeight = tableMeta.rowHeight.height\n ? ROW_HEIGHT_ESTIMATES[tableMeta.rowHeight.height]\n : ROW_HEIGHT_ESTIMATES.medium;\n\n if (expandedState === true || rows[index]?.getIsExpanded?.()) {\n return rowHeight + averageExpandedRowHeight;\n }\n\n return rowHeight;\n },\n [tableMeta.rowHeight.height, averageExpandedRowHeight, expandedState]\n );\n\n const createRowMeasurer = React.useCallback(\n (resizeItem: (item: VirtualItem, size: number) => void, virtualRow: VirtualItem) =>\n (rowHeight: number, expansionHeight?: number) => {\n // register the expansion height so that it can be used to determine an average\n if (expansionHeight) {\n setExpandedRowHeightsCache(cache => ({ ...cache, [virtualRow.index]: expansionHeight }));\n }\n\n // update the whole row's size to include the expanded height\n resizeItem(virtualRow, rowHeight + (expansionHeight ?? 0));\n },\n []\n );\n\n return { estimateSize, createRowMeasurer };\n}\n\n// support virtualised row groups (where the row group headers are sticky)\nfunction useRowGroupVirtualisation<TType = unknown>(table: ReactTable<TType>) {\n const rows = table.getRowModel().rows;\n const isTableGrouped = !!table.getState().grouping.length;\n\n const rowGroupIndexes = React.useMemo(() => {\n const indexes: number[] = [];\n\n if (isTableGrouped) {\n rows.forEach((row, index) => {\n if (row.getIsGrouped()) {\n indexes.push(index);\n }\n });\n }\n\n return indexes;\n }, [rows]);\n\n // this is taken from the react-virtual docs/examples\n const rangeExtractor = React.useCallback(\n range => {\n const activeRowGroupIndex =\n [...rowGroupIndexes].reverse().find(index => range.startIndex >= index) ?? rowGroupIndexes[0];\n\n const next = new Set([activeRowGroupIndex, ...defaultRangeExtractor(range)]);\n return [...next].sort((a, b) => a - b);\n },\n [rowGroupIndexes]\n );\n\n return isTableGrouped ? rangeExtractor : undefined;\n}\n"],"names":["TABLE_SCROLL_PADDING_BOTTOM","TABLE_PADDING_BOTTOM","useTableRenderer","renderers","table","tableRef","defaultRowActiveIndex","tableMeta","options","meta","rows","getRowModel","HEADER_OFFSET_TOTAL","HEADER_FOOTER_ROW_HEIGHT_ESTIMATE","getHeaderGroups","length","isTableGrouped","_table$getState$group","getState","grouping","FOOTER_OFFSET_TOTAL","footer","isEnabled","createRowMeasurer","estimateSize","useRowHeightVirtualisation","rangeExtractor","useRowGroupVirtualisation","virtualiser","useVirtualizer","count","getScrollElement","current","overscan","printing","isPrinting","undefined","scrollPaddingStart","scrollPaddingEnd","paddingEnd","virtualItems","getVirtualItems","scrollToIndex","React","useCallback","index","align","behavior","notSmooth","scrollToOffset","setTimeout","paddingStartIndex","paddingTop","paddingBottom","Math","max","_ref","_virtualItems$padding","start","scrollMargin","_virtualItems$padding2","size","_ref2","getTotalSize","_virtualItems","end","useEffect","style","content","height","map","virtualRow","row","measureRow","resizeItem","Row","key","id","renderer","cellRenderer","cell","expandedState","expanded","expandedRowHeightsCache","setExpandedRowHeightsCache","useState","averageExpandedRowHeight","useMemo","values","Object","reduce","a","b","rowHeight","ROW_HEIGHT_ESTIMATES","medium","_rows$index","_rows$index$getIsExpa","getIsExpanded","call","expansionHeight","cache","rowGroupIndexes","indexes","forEach","getIsGrouped","push","range","activeRowGroupIndex","_reverse$find","reverse","find","startIndex","next","Set","defaultRangeExtractor","sort"],"mappings":"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"}
1
+ {"version":3,"file":"useTableRenderer.js","sources":["../../../../../../../../../src/primitives/Table/Core/features/useTableRenderer.tsx"],"sourcesContent":["import React, { CSSProperties } from 'react';\nimport { Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport {\n useVirtualizer,\n defaultRangeExtractor,\n ScrollToOptions as ReactVirtualScrollToOptions,\n VirtualItem,\n} from '@tanstack/react-virtual';\nimport { ROW_HEIGHT_ESTIMATES } from '../util/rows';\nimport { Row } from '../components/Row/Row';\nimport { useTableRenderers } from '../types';\nimport { TableRef } from '../../types';\n\nexport function useTableRenderer<TType = unknown>(\n renderers: useTableRenderers<TType>,\n table: ReactTable<TType>,\n tableRef: React.RefObject<TableRef>,\n defaultRowActiveIndex?: number | undefined\n) {\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const rows = table.getRowModel().rows;\n const isTableRowGrouped = !!table.getState().grouping?.length;\n\n // expanded rows\n const { createRowMeasurer, estimateSize } = useRowHeightVirtualisation<TType>(table);\n\n // row groups\n const rangeExtractor = useRowGroupVirtualisation<TType>(table);\n\n // account for thead and tfoot in the scroll area\n const scrollPaddingStart = ROW_HEIGHT_ESTIMATES.medium;\n // column groups offset the bottom padding :shrug:, multiplying by 1.5 ensures the bottom padding remains\n // consistent when there are groups and when there aren't. 1.5 is relatively arbitrary, but it gives alignment\n const scrollPaddingEnd = ROW_HEIGHT_ESTIMATES.medium * (table.getHeaderGroups().length > 1 ? 1.5 : 1);\n\n const virtualiser = useVirtualizer({\n count: rows.length,\n estimateSize,\n getScrollElement: () => tableRef.current,\n overscan: tableMeta.printing.isPrinting ? rows.length : undefined,\n rangeExtractor,\n // correctly sets top and bottom spacing for the scroll container - very sensitive, don't change\n scrollMargin: isTableRowGrouped ? 0 : scrollPaddingStart,\n // correctly sets the scroll padding offset, e.g. when keyboard navigating rows in the list\n scrollPaddingStart,\n scrollPaddingEnd: tableMeta.footer.isEnabled ? scrollPaddingEnd * 2 : scrollPaddingEnd,\n });\n\n const totalSize = virtualiser.getTotalSize();\n const virtualItems = virtualiser.getVirtualItems();\n\n const scrollToIndex = React.useCallback(\n (index: number, options: ReactVirtualScrollToOptions = { align: 'auto', behavior: 'smooth' }) => {\n const notSmooth: ReactVirtualScrollToOptions = { ...options, behavior: 'auto' };\n\n if (tableRef.current) {\n if (index === 0) {\n virtualiser.scrollToOffset(0, notSmooth);\n } else if (index === rows.length - 1) {\n // sometimes the last row doesn't fully show, so we just force scroll to the bottom\n tableRef.current.scrollTop = tableRef.current.scrollHeight;\n } else {\n virtualiser.scrollToIndex(index, options);\n }\n }\n },\n [virtualItems.length, tableRef.current, totalSize, rows.length]\n );\n\n // use row 1 not 0, because 0 might be sticky in grouped tables and it's start value will always be 0\n const paddingStartIndex = isTableRowGrouped && rows.length > 1 ? 1 : 0;\n\n // styling for offsetting rows - this \"is\" the virtualisation\n const [paddingTop, paddingBottom] =\n virtualItems.length > 0\n ? [\n Math.max(0, virtualItems[paddingStartIndex]?.start - virtualItems[paddingStartIndex]?.size ?? 0),\n Math.max(0, totalSize - virtualItems[virtualItems.length - 1]?.end ?? 0),\n ]\n : [0, 0];\n\n // ensure default active rows are scrolled to\n React.useEffect(() => {\n if (defaultRowActiveIndex) {\n scrollToIndex(defaultRowActiveIndex, { align: 'center', behavior: 'auto' });\n }\n }, []);\n\n // rendered output\n let style: CSSProperties = {};\n let content: (JSX.Element | null)[] | null = null;\n\n if (rows.length) {\n style = {\n height: `${totalSize}px`,\n paddingBottom,\n paddingTop,\n };\n content = virtualItems.map(virtualRow => {\n // there appears to be a react-virtual bug where it inserts a single `undefined` item at the end of the row, which crashes here\n if (!virtualRow) {\n return null;\n }\n\n const row = rows[virtualRow.index];\n const measureRow = createRowMeasurer(virtualiser.resizeItem, virtualRow);\n return (\n <Row\n key={row.id}\n row={row}\n index={virtualRow.index}\n table={table}\n measureRow={measureRow}\n renderer={renderers.row}\n cellRenderer={renderers.cell}\n />\n );\n });\n }\n\n return {\n rows: content,\n style,\n scrollToIndex,\n };\n}\n\n// support varying row heights - variable row heights, row expansion\nfunction useRowHeightVirtualisation<TType = unknown>(table: ReactTable<TType>) {\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const rows = table.getRowModel().rows;\n const expandedState = table.getState().expanded;\n\n const [expandedRowHeightsCache, setExpandedRowHeightsCache] = React.useState<Record<number, number>>({});\n\n // look at all registered expanded row heights and use them to form a more accurate average size\n // it might be worth considering if taking the max, or an upper bound, would be better\n const averageExpandedRowHeight = React.useMemo(() => {\n const values: number[] = Object.values(expandedRowHeightsCache);\n return values.length ? values.reduce((a, b) => a + b, 0) / values.length : 0;\n }, [expandedRowHeightsCache]);\n\n // row heights\n const estimateSize = React.useCallback(\n (index: number) => {\n const rowHeight = tableMeta.rowHeight.height\n ? ROW_HEIGHT_ESTIMATES[tableMeta.rowHeight.height]\n : ROW_HEIGHT_ESTIMATES.medium;\n\n if (expandedState === true || rows[index]?.getIsExpanded?.()) {\n return rowHeight + averageExpandedRowHeight;\n }\n\n return rowHeight;\n },\n [tableMeta.rowHeight.height, averageExpandedRowHeight, expandedState]\n );\n\n const createRowMeasurer = React.useCallback(\n (resizeItem: (item: VirtualItem, size: number) => void, virtualRow: VirtualItem) =>\n (rowHeight: number, expansionHeight?: number) => {\n // register the expansion height so that it can be used to determine an average\n if (expansionHeight) {\n setExpandedRowHeightsCache(cache => ({ ...cache, [virtualRow.index]: expansionHeight }));\n }\n\n // update the whole row's size to include the expanded height\n resizeItem(virtualRow, rowHeight + (expansionHeight ?? 0));\n },\n []\n );\n\n return { estimateSize, createRowMeasurer };\n}\n\n// support virtualised row groups (where the row group headers are sticky)\nfunction useRowGroupVirtualisation<TType = unknown>(table: ReactTable<TType>) {\n const rows = table.getRowModel().rows;\n const isTableGrouped = !!table.getState().grouping.length;\n\n const rowGroupIndexes = React.useMemo(() => {\n const indexes: number[] = [];\n\n if (isTableGrouped) {\n rows.forEach((row, index) => {\n if (row.getIsGrouped()) {\n indexes.push(index);\n }\n });\n }\n\n return indexes;\n }, [rows]);\n\n // this is taken from the react-virtual docs/examples\n const rangeExtractor = React.useCallback(\n range => {\n const activeRowGroupIndex =\n [...rowGroupIndexes].reverse().find(index => range.startIndex >= index) ?? rowGroupIndexes[0];\n\n const next = new Set([activeRowGroupIndex, ...defaultRangeExtractor(range)]);\n return [...next].sort((a, b) => a - b);\n },\n [rowGroupIndexes]\n );\n\n return isTableGrouped ? rangeExtractor : undefined;\n}\n"],"names":["useTableRenderer","renderers","table","tableRef","defaultRowActiveIndex","tableMeta","options","meta","rows","getRowModel","isTableRowGrouped","_table$getState$group","getState","grouping","length","createRowMeasurer","estimateSize","useRowHeightVirtualisation","rangeExtractor","useRowGroupVirtualisation","scrollPaddingStart","ROW_HEIGHT_ESTIMATES","medium","scrollPaddingEnd","getHeaderGroups","virtualiser","useVirtualizer","count","getScrollElement","current","overscan","printing","isPrinting","undefined","scrollMargin","footer","isEnabled","totalSize","getTotalSize","virtualItems","getVirtualItems","scrollToIndex","React","useCallback","index","align","behavior","notSmooth","scrollToOffset","scrollTop","scrollHeight","paddingStartIndex","paddingTop","paddingBottom","Math","max","_ref","_virtualItems$padding","start","_virtualItems$padding2","size","_ref2","_virtualItems","end","useEffect","style","content","height","map","virtualRow","row","measureRow","resizeItem","Row","key","id","renderer","cellRenderer","cell","expandedState","expanded","expandedRowHeightsCache","setExpandedRowHeightsCache","useState","averageExpandedRowHeight","useMemo","values","Object","reduce","a","b","rowHeight","_rows$index","_rows$index$getIsExpa","getIsExpanded","call","expansionHeight","cache","isTableGrouped","rowGroupIndexes","indexes","forEach","getIsGrouped","push","range","activeRowGroupIndex","_reverse$find","reverse","find","startIndex","next","Set","defaultRangeExtractor","sort"],"mappings":"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"}
@@ -4,7 +4,6 @@ const ROW_HEIGHT_ESTIMATES = {
4
4
  tall: 49,
5
5
  'extra-tall': 57
6
6
  };
7
- const HEADER_FOOTER_ROW_HEIGHT_ESTIMATE = ROW_HEIGHT_ESTIMATES.medium + 2; // header includes 2px border
8
7
 
9
- export { HEADER_FOOTER_ROW_HEIGHT_ESTIMATE, ROW_HEIGHT_ESTIMATES };
8
+ export { ROW_HEIGHT_ESTIMATES };
10
9
  //# sourceMappingURL=rows.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rows.js","sources":["../../../../../../../../../src/primitives/Table/Core/util/rows.ts"],"sourcesContent":["export const ROW_HEIGHT_ESTIMATES = {\n short: 33,\n medium: 41,\n tall: 49,\n 'extra-tall': 57,\n};\n\nexport const HEADER_FOOTER_ROW_HEIGHT_ESTIMATE = ROW_HEIGHT_ESTIMATES.medium + 2; // header includes 2px border\n"],"names":["ROW_HEIGHT_ESTIMATES","short","medium","tall","HEADER_FOOTER_ROW_HEIGHT_ESTIMATE"],"mappings":"MAAaA,oBAAoB,GAAG;EAChCC,KAAK,EAAE,EAAE;EACTC,MAAM,EAAE,EAAE;EACVC,IAAI,EAAE,EAAE;EACR,YAAY,EAAE;;MAGLC,iCAAiC,GAAGJ,oBAAoB,CAACE,MAAM,GAAG,EAAE;;;;"}
1
+ {"version":3,"file":"rows.js","sources":["../../../../../../../../../src/primitives/Table/Core/util/rows.ts"],"sourcesContent":["export const ROW_HEIGHT_ESTIMATES = {\n short: 33,\n medium: 41,\n tall: 49,\n 'extra-tall': 57,\n};\n"],"names":["ROW_HEIGHT_ESTIMATES","short","medium","tall"],"mappings":"MAAaA,oBAAoB,GAAG;EAChCC,KAAK,EAAE,EAAE;EACTC,MAAM,EAAE,EAAE;EACVC,IAAI,EAAE,EAAE;EACR,YAAY,EAAE;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["../../../../../../../src/primitives/Table/types.ts"],"sourcesContent":["import {\n ColumnFilter as ReactTableColumnFilter,\n ColumnFiltersState as ReactTableColumnFilterState,\n ColumnOrderState as ReactTableColumnOrderState,\n ColumnPinningState as ReactTableColumnPinningState,\n ColumnSort as ReactTableColumnSort,\n ColumnSizingState as ReactTableColumnSizingState,\n VisibilityState as ReactTableColumnVisibilityState,\n SortingState as ReactTableSortingState,\n BuiltInAggregationFn as ReactTableBuiltInAggregationFn,\n BuiltInSortingFn as ReactTableBuiltInSortingFn,\n} from '@tanstack/react-table';\nimport { FontSize, FontSizes, ValueOf } from '../../types';\nimport { MenuProps } from '../../components/Menu/Menu';\nimport { MenuItemProps } from '../../components/Menu/components/Item';\n\ntype TODO = any;\n\nexport type TableRef = HTMLTableElement & {\n instance: {\n resetFiltering: () => void;\n resetRowExpansion: () => void;\n resetRowSelection: () => void;\n resetSorting: () => void;\n };\n};\n\n// filtering\nexport enum TableFilterComparator {\n Contains,\n DoesNotContain,\n IsEqualTo,\n IsNotEqualTo,\n IsGreaterThan,\n IsLessThan,\n IsBetween,\n IsEmpty,\n IsNotEmpty,\n IsLessThanOrEqualTo,\n IsGreaterThanOrEqualTo,\n HasAnyOf,\n HasAllOf,\n HasNoneOf,\n}\nexport type TableFilterValue = {\n comparator: TableFilterComparator;\n value: any;\n};\nexport type TableFilter = {\n id: string;\n value: TableFilterValue;\n};\n\n// columns\nexport type TableColumnAlignment = 'left' | 'center' | 'right';\nexport type TableColumnClassNameHandler<TType = unknown> = string | ((row: TType) => string | undefined);\nexport type TableColumnDataType = 'auto' | 'number' | 'alphanumeric' | 'alphanumericCaseSensitive' | 'datetime' | 'boolean';\nexport type TableColumnFilter = ReactTableColumnFilter;\nexport type TableColumnMenu = (props: Partial<MenuProps>) => JSX.Element;\nexport type TableColumnRenderer<TType, TValue> = (value: TValue, row: TType) => JSX.Element | string | number | null;\nexport type TableColumnRendererAggregate<TType, TValue> = (value: TValue, row: TType) => JSX.Element | string | number | null;\nexport type TableColumnRendererControl<TType = unknown> =\n | ((props: TableColumnRendererControlProps, row?: TType) => JSX.Element)\n | 'datepicker'\n | 'input'\n | 'switch'\n | 'textarea';\nexport type TableColumnRendererControlProps = {\n className?: string;\n disabled?: boolean;\n fontSize?: FontSize;\n invalid?: boolean;\n onBlur?: (value: any) => void;\n onFocus?: React.FocusEventHandler;\n readOnly?: boolean;\n ref: React.RefObject<HTMLElement> | ((instance: HTMLElement | null | undefined) => void);\n setValue: (value: any) => void;\n value: any;\n};\nexport type TableColumnRendererHeader = string;\nexport type TableColumnRendererFooter<TValue> = (values: TValue[]) => JSX.Element | string | number | null;\nexport type TableColumnSort = ReactTableColumnSort;\nexport type TableColumnSortDirection = 'asc' | 'desc';\nexport type TableColumnSortFn<TType = unknown> =\n | ((rowA: TType, rowB: TType, columnId: string) => -1 | 0 | 1)\n | ReactTableBuiltInSortingFn\n | 'auto';\nexport type TableColumnWidth = number | 'grow';\n\n// rows\nexport type TableRowActionRenderer<TType = unknown> = (row: TType, internalRowId: string) => JSX.Element | null;\nexport type TableRowActionGroupRenderer<TType = unknown> = (rows: TType[]) => JSX.Element | null;\nexport type TableRowClickHandler<TType = unknown> = (row: TType) => void;\nexport type TableRowDragHandler<TType = unknown> = (\n rows: TType[],\n showPlaceholder: (string) => void,\n setDataTransfer: (data: string) => void\n) => void;\nexport type TableRowDropHandler<TType = unknown> = (event: React.DragEvent, row: TType) => void;\nexport type TableRowGotoHandler = (\n column: string,\n query: string,\n sorting: TableColumnSort[],\n filters: TableColumnFilter[],\n search: string | undefined\n) => Promise<number>;\nexport type TableRowHeight = 'short' | 'medium' | 'tall' | 'extra-tall';\nexport type TableRowSelectHandler<TType = unknown> = (rows: TType[]) => void;\nexport type TableRowWithMetaData<TType = unknown> = TType & {\n _meta?: {\n layout?: 'heading' | 'summary' | 'item';\n };\n};\n\n// shortcuts\nexport type TableShortcutHandlerFn<TType = unknown> = (row: TType) => void;\nexport type TableShortcutHandlerObject<TType = unknown> = {\n handler: TableShortcutHandlerFn<TType>;\n meta?: boolean;\n shift?: boolean;\n};\n\n// table\nexport type TableFilterHandler = (filters: TableColumnFilter[]) => void;\nexport type TableFontSize = keyof typeof FontSizes;\nexport type TablePreset = 'complex' | 'list' | 'simple';\nexport type TableRowExpansionRenderer<TType = unknown> = (row: TType) => (() => JSX.Element) | null;\nexport type TableScrollToIndexHandler = (index: number, options?: { align: 'start' | 'center' | 'end' | 'auto' }) => void;\nexport type TableServerLoadPageHandler = (\n pageIndex: number,\n sorting: TableColumnSort[],\n filters: TableColumnFilter[],\n search: string | undefined\n) => Promise<void>;\nexport type TableServerLoadAllHandler = (\n sorting: TableColumnSort[],\n filters: TableColumnFilter[],\n search: string | undefined\n) => Promise<void>;\nexport enum TableServerLoadAllState {\n Incomplete,\n Loading,\n Completed,\n}\nexport type TableSettingsHandler = (settings: TableSettings) => void | Promise<void>;\nexport type TableShortcuts<TType = unknown> = Record<string, TableShortcutHandlerFn<TType> | TableShortcutHandlerObject<TType>>;\nexport type TableSortHandler = (sorting: TableColumnSort[]) => void;\nexport type TableCustomSettingsRenderer = (props: TableSettings) => React.ReactElement<MenuItemProps>[];\nexport type TableEmptyStateRenderer = () => JSX.Element | null;\n\n// settings\nexport type TableSettings = {\n columnFilters?: ReactTableColumnFilterState;\n columnOrder?: ReactTableColumnOrderState;\n columnPinning?: ReactTableColumnPinningState;\n columnSizing?: ReactTableColumnSizingState;\n columnVisibility?: ReactTableColumnVisibilityState;\n excludeUnmatchedRecordsInSearch?: boolean;\n fontSize?: TableFontSize;\n rowHeight?: TableRowHeight;\n searchQuery?: string;\n sorting?: ReactTableSortingState;\n};\nexport type TableEnableSettingsOptions = {\n columnOrder: boolean;\n columnPinning: boolean;\n columnSizing: boolean;\n columnVisibility: boolean;\n excludeUnmatchedRecordsInSearch: boolean;\n fontSize: boolean;\n grouping: boolean;\n rowHeight: boolean;\n sorting: boolean;\n};\n\n// props\nexport type TableFeatureProps = {\n // react-table built-in\n enableFiltering?: boolean;\n enableSearch?: boolean;\n enableSorting?: boolean;\n enableColumnFreezing?: boolean;\n enableColumnHiding?: boolean;\n enableColumnResizing?: boolean;\n enableRowExpansion?: boolean;\n enableRowSelection?: boolean;\n enableRowSelectionSingle?: boolean;\n\n // custom -- common between all table types\n enableColumnOrdering?: boolean;\n enableFontSize?: boolean;\n enableFooter?: boolean;\n enablePrinting?: boolean;\n enableRowActions?: boolean;\n enableRowActive?: boolean;\n enableRowClick?: boolean;\n enableRowDrag?: boolean;\n enableRowDrop?: boolean;\n enableRowGoto?: boolean;\n enableRowHeight?: boolean;\n enableSaveSettings?: boolean | Partial<TableEnableSettingsOptions>;\n};\n\nexport type TableCommonProps<TType = unknown> = TableFeatureProps & {\n children: (JSX.Element | boolean | null | undefined)[];\n data: TType[];\n id: string;\n\n // misc\n customSettings?: TableCustomSettingsRenderer;\n defaultColumnFreezingIndex?: number;\n defaultRowActiveIndex?: number;\n defaultRowGroupColumnId?: keyof TType;\n defaultSettings?: TableSettings;\n emptyState?: TableEmptyStateRenderer;\n preset?: TablePreset;\n rowActions?: TableRowActionRenderer<TType>[];\n rowActionsForGroup?: TableRowActionGroupRenderer<TType>[];\n rowActionsLength?: number;\n rowExpansionRenderer?: TableRowExpansionRenderer<TType>;\n rowIdentityColumnId?: string;\n shortcuts?: TableShortcuts<TType>;\n toolbarLeft?: JSX.Element;\n toolbarRight?: JSX.Element;\n toolbarPanel?: JSX.Element;\n\n // handlers\n onRowClick?: TableRowClickHandler<TType>;\n onRowDrag?: TableRowDragHandler<TType>;\n onRowDrop?: TableRowDropHandler<TType>;\n onRowGoto?: TableRowGotoHandler;\n onRowSelect?: TableRowSelectHandler<TType>;\n\n // state change handlers\n onChangeFilter?: TableFilterHandler;\n onChangeSearch?: TODO; // not currently supported\n onChangeSettings?: TableSettingsHandler;\n onChangeSort?: TableSortHandler;\n};\n\nexport interface TableClientProps<TType = unknown> extends TableCommonProps<TType> {\n length?: never;\n loadAll?: never;\n loadPage?: never;\n pageSize?: never;\n}\n\nexport interface TableServerProps<TType = unknown> extends TableCommonProps<TType> {\n length: number | undefined;\n loadAll: TableServerLoadAllHandler;\n loadPage: TableServerLoadPageHandler;\n pageSize?: number;\n}\n\nexport type TableProps<TType = unknown> = TableClientProps<TType> | TableServerProps<TType>;\n\nexport type TableColumnProps<TType = unknown> = ValueOf<{\n [Key in keyof TType]: {\n accessor?: Key;\n id: string;\n // renderers\n renderer?: TableColumnRenderer<TType, TType[Key]>;\n /** Renderer to use if the cell is an aggregate cell and part of a grouped row */\n aggregate?: TableColumnRendererAggregate<TType, TType[Key]>;\n control?: TableColumnRendererControl<TType>;\n footer?: TableColumnRendererFooter<TType[Key]>;\n header: TableColumnRendererHeader;\n // options\n /** Aggregation function to be used when the column is part of a grouped row */\n aggregationFn?: 'auto' | ReactTableBuiltInAggregationFn;\n align?: TableColumnAlignment;\n className?: TableColumnClassNameHandler<TType>;\n dataType?: TableColumnDataType;\n defaultHidden?: boolean;\n defaultWidth?: TableColumnWidth;\n enableFiltering?: boolean;\n enableGrouping?: boolean;\n enableHiding?: boolean;\n enableOrdering?: boolean;\n enablePrinting?: boolean;\n enableResizing?: boolean;\n enableSearch?: boolean;\n enableSorting?: boolean;\n enableTruncate?: boolean;\n filters?: TableFilterComparator[];\n headerClassName?: string;\n menu?: TableColumnMenu;\n minWidth?: number;\n sort?: TableColumnSortDirection;\n sortFn?: TableColumnSortFn<TType>;\n tooltip?: string;\n };\n}>;\n\nexport type TableGroupProps = {\n children: (JSX.Element | boolean | null | undefined)[];\n header: string;\n id: string;\n};\n\nexport type TableTexts = {\n columns: {\n actions: {\n tooltip: string;\n };\n drag: {\n tooltip: string;\n };\n expansion: {\n collapse: string;\n collapseAll: string;\n expand: string;\n expandAll: string;\n };\n menu: {\n editFilter: string;\n filter: string;\n freezeFirstColumn: string;\n freezeUptoColumn: string;\n gotoRow: string;\n hideColumn: string;\n unfreezeColumns: string;\n sorting: string;\n sortingOrder: {\n ascending: string;\n descending: string;\n unsorted: string;\n };\n };\n resize: {\n tooltip: string;\n };\n select: {\n deselect: string;\n deselectAll: string;\n select: string;\n selectAll: string;\n };\n };\n columnSettings: {\n button: string;\n noResults: string;\n search: string;\n tooltip: string;\n };\n filters: {\n button: string;\n buttons: {\n addFilter: string;\n clearFilters: string;\n };\n comparators: {\n contains: string;\n doesNotContain: string;\n isEqualTo: string;\n isNotEqualTo: string;\n isGreaterThan: string;\n isLessThan: string;\n isBetween: string;\n isEmpty: string;\n isNotEmpty: string;\n isBefore: string;\n isAfter: string;\n isLessThanOrEqualTo: string;\n isGreaterThanOrEqualTo: string;\n isOnOrBefore: string;\n isOnOrAfter: string;\n hasAnyOf: string;\n hasAllOf: string;\n hasNoneOf: string;\n };\n conditions: {\n and: string;\n where: string;\n };\n emptyFilter: {\n condition: string;\n value: string;\n };\n hiddenColumn: string;\n hiddenGroupedColumn: string;\n tooltip: string;\n total: string;\n };\n fontSize: {\n tooltip: string;\n sizes: {\n small: string;\n medium: string;\n large: string;\n };\n };\n footer: {\n summary: {\n count: string;\n records: string;\n selected: string;\n };\n };\n print: {\n error: string;\n loading: string;\n tooltip: string;\n warningDialog: {\n title: string;\n description: string;\n checkboxVisibilityLabel: string;\n cancelButtonText: string;\n printButtonText: string;\n };\n settingsDialog: {\n title: string;\n size: string;\n sizeA5: string;\n sizeA4: string;\n sizeA3: string;\n sizeLetter: string;\n sizeLegal: string;\n orientation: string;\n orientationLandscape: string;\n orientationPortrait: string;\n rows: string;\n rowsAll: string;\n rowsSelected: string;\n layout: string;\n layoutSplitGroups: string;\n };\n };\n rowHeight: {\n tooltip: string;\n sizes: {\n short: string;\n medium: string;\n tall: string;\n extraTall: string;\n };\n };\n search: {\n excludeUnmatchedResults: string;\n placeholder: string;\n };\n otherOptions: {\n tooltip: string;\n };\n};\n"],"names":["TableFilterComparator","TableServerLoadAllState"],"mappings":"AA2BA;IACYA;AAAZ,WAAYA,qBAAqB;EAC7BA,yEAAQ;EACRA,qFAAc;EACdA,2EAAS;EACTA,iFAAY;EACZA,mFAAa;EACbA,6EAAU;EACVA,2EAAS;EACTA,uEAAO;EACPA,6EAAU;EACVA,+FAAmB;EACnBA,sGAAsB;EACtBA,0EAAQ;EACRA,0EAAQ;EACRA,4EAAS;AACb,CAAC,EAfWA,qBAAqB,KAArBA,qBAAqB;IA+GrBC;AAAZ,WAAYA,uBAAuB;EAC/BA,iFAAU;EACVA,2EAAO;EACPA,+EAAS;AACb,CAAC,EAJWA,uBAAuB,KAAvBA,uBAAuB;;;;"}
1
+ {"version":3,"file":"types.js","sources":["../../../../../../../src/primitives/Table/types.ts"],"sourcesContent":["import {\n ColumnFilter as ReactTableColumnFilter,\n ColumnFiltersState as ReactTableColumnFilterState,\n ColumnOrderState as ReactTableColumnOrderState,\n ColumnPinningState as ReactTableColumnPinningState,\n ColumnSort as ReactTableColumnSort,\n ColumnSizingState as ReactTableColumnSizingState,\n VisibilityState as ReactTableColumnVisibilityState,\n SortingState as ReactTableSortingState,\n BuiltInAggregationFn as ReactTableBuiltInAggregationFn,\n BuiltInSortingFn as ReactTableBuiltInSortingFn,\n} from '@tanstack/react-table';\nimport { FontSize, FontSizes, ValueOf } from '../../types';\nimport { MenuProps } from '../../components/Menu/Menu';\nimport { MenuItemProps } from '../../components/Menu/components/Item';\n\ntype TODO = any;\n\nexport type TableRef = HTMLTableElement & {\n instance: {\n resetFiltering: () => void;\n resetRowExpansion: () => void;\n resetRowSelection: () => void;\n resetSorting: () => void;\n };\n};\n\n// filtering\nexport enum TableFilterComparator {\n Contains,\n DoesNotContain,\n IsEqualTo,\n IsNotEqualTo,\n IsGreaterThan,\n IsLessThan,\n IsBetween,\n IsEmpty,\n IsNotEmpty,\n IsLessThanOrEqualTo,\n IsGreaterThanOrEqualTo,\n HasAnyOf,\n HasAllOf,\n HasNoneOf,\n}\nexport type TableFilterValue = {\n comparator: TableFilterComparator;\n value: any;\n};\nexport type TableFilter = {\n id: string;\n value: TableFilterValue;\n};\n\n// columns\nexport type TableColumnAlignment = 'left' | 'center' | 'right';\nexport type TableColumnClassNameHandler<TType = unknown> = string | ((row: TType) => string | undefined);\nexport type TableColumnDataType = 'auto' | 'number' | 'alphanumeric' | 'alphanumericCaseSensitive' | 'datetime' | 'boolean';\nexport type TableColumnFilter = ReactTableColumnFilter;\nexport type TableColumnMenu = (props: Partial<MenuProps>) => JSX.Element;\nexport type TableColumnRenderer<TType, TValue> = (value: TValue, row: TType) => JSX.Element | string | number | null;\nexport type TableColumnRendererAggregate<TType, TValue> = (value: TValue, row: TType) => JSX.Element | string | number | null;\nexport type TableColumnRendererControl<TType = unknown> =\n | ((props: TableColumnRendererControlProps, row?: TType) => JSX.Element)\n | 'datepicker'\n | 'input'\n | 'switch'\n | 'textarea';\nexport type TableColumnRendererControlProps = {\n className?: string;\n disabled?: boolean;\n fontSize?: FontSize;\n invalid?: boolean;\n onBlur?: (value: any) => void;\n onFocus?: React.FocusEventHandler;\n readOnly?: boolean;\n ref: React.RefObject<HTMLElement> | ((instance: HTMLElement | null | undefined) => void);\n setValue: (value: any) => void;\n value: any;\n};\nexport type TableColumnRendererHeader = string;\nexport type TableColumnRendererFooter<TType> = (rows: TType[]) => JSX.Element | string | number | null;\nexport type TableColumnSort = ReactTableColumnSort;\nexport type TableColumnSortDirection = 'asc' | 'desc';\nexport type TableColumnSortFn<TType = unknown> =\n | ((rowA: TType, rowB: TType, columnId: string) => -1 | 0 | 1)\n | ReactTableBuiltInSortingFn\n | 'auto';\nexport type TableColumnWidth = number | 'grow';\n\n// rows\nexport type TableRowActionRenderer<TType = unknown> = (row: TType, internalRowId: string) => JSX.Element | null;\nexport type TableRowActionGroupRenderer<TType = unknown> = (rows: TType[]) => JSX.Element | null;\nexport type TableRowClickHandler<TType = unknown> = (row: TType) => void;\nexport type TableRowDragHandler<TType = unknown> = (\n rows: TType[],\n showPlaceholder: (string) => void,\n setDataTransfer: (data: string) => void\n) => void;\nexport type TableRowDropHandler<TType = unknown> = (event: React.DragEvent, row: TType) => void;\nexport type TableRowGotoHandler = (\n column: string,\n query: string,\n sorting: TableColumnSort[],\n filters: TableColumnFilter[],\n search: string | undefined\n) => Promise<number>;\nexport type TableRowHeight = 'short' | 'medium' | 'tall' | 'extra-tall';\nexport type TableRowSelectHandler<TType = unknown> = (rows: TType[]) => void;\nexport type TableRowWithMetaData<TType = unknown> = TType & {\n _meta?: {\n layout?: 'heading' | 'summary' | 'item';\n };\n};\n\n// shortcuts\nexport type TableShortcutHandlerFn<TType = unknown> = (row: TType) => void;\nexport type TableShortcutHandlerObject<TType = unknown> = {\n handler: TableShortcutHandlerFn<TType>;\n meta?: boolean;\n shift?: boolean;\n};\n\n// table\nexport type TableFilterHandler = (filters: TableColumnFilter[]) => void;\nexport type TableFontSize = keyof typeof FontSizes;\nexport type TablePreset = 'complex' | 'list' | 'simple';\nexport type TableRowExpansionRenderer<TType = unknown> = (row: TType) => (() => JSX.Element) | null;\nexport type TableScrollToIndexHandler = (index: number, options?: { align: 'start' | 'center' | 'end' | 'auto' }) => void;\nexport type TableServerLoadPageHandler = (\n pageIndex: number,\n sorting: TableColumnSort[],\n filters: TableColumnFilter[],\n search: string | undefined\n) => Promise<void>;\nexport type TableServerLoadAllHandler = (\n sorting: TableColumnSort[],\n filters: TableColumnFilter[],\n search: string | undefined\n) => Promise<void>;\nexport enum TableServerLoadAllState {\n Incomplete,\n Loading,\n Completed,\n}\nexport type TableSettingsHandler = (settings: TableSettings) => void | Promise<void>;\nexport type TableShortcuts<TType = unknown> = Record<string, TableShortcutHandlerFn<TType> | TableShortcutHandlerObject<TType>>;\nexport type TableSortHandler = (sorting: TableColumnSort[]) => void;\nexport type TableCustomSettingsRenderer = (props: TableSettings) => React.ReactElement<MenuItemProps>[];\nexport type TableEmptyStateRenderer = () => JSX.Element | null;\n\n// settings\nexport type TableSettings = {\n columnFilters?: ReactTableColumnFilterState;\n columnOrder?: ReactTableColumnOrderState;\n columnPinning?: ReactTableColumnPinningState;\n columnSizing?: ReactTableColumnSizingState;\n columnVisibility?: ReactTableColumnVisibilityState;\n excludeUnmatchedRecordsInSearch?: boolean;\n fontSize?: TableFontSize;\n rowHeight?: TableRowHeight;\n searchQuery?: string;\n sorting?: ReactTableSortingState;\n};\nexport type TableEnableSettingsOptions = {\n columnOrder: boolean;\n columnPinning: boolean;\n columnSizing: boolean;\n columnVisibility: boolean;\n excludeUnmatchedRecordsInSearch: boolean;\n fontSize: boolean;\n grouping: boolean;\n rowHeight: boolean;\n sorting: boolean;\n};\n\n// props\nexport type TableFeatureProps = {\n // react-table built-in\n enableFiltering?: boolean;\n enableSearch?: boolean;\n enableSorting?: boolean;\n enableColumnFreezing?: boolean;\n enableColumnHiding?: boolean;\n enableColumnResizing?: boolean;\n enableRowExpansion?: boolean;\n enableRowSelection?: boolean;\n enableRowSelectionSingle?: boolean;\n\n // custom -- common between all table types\n enableColumnOrdering?: boolean;\n enableFontSize?: boolean;\n enableFooter?: boolean;\n enablePrinting?: boolean;\n enableRowActions?: boolean;\n enableRowActive?: boolean;\n enableRowClick?: boolean;\n enableRowDrag?: boolean;\n enableRowDrop?: boolean;\n enableRowGoto?: boolean;\n enableRowHeight?: boolean;\n enableSaveSettings?: boolean | Partial<TableEnableSettingsOptions>;\n};\n\nexport type TableCommonProps<TType = unknown> = TableFeatureProps & {\n children: (JSX.Element | boolean | null | undefined)[];\n data: TType[];\n id: string;\n\n // misc\n customSettings?: TableCustomSettingsRenderer;\n defaultColumnFreezingIndex?: number;\n defaultRowActiveIndex?: number;\n defaultRowGroupColumnId?: keyof TType;\n defaultSettings?: TableSettings;\n emptyState?: TableEmptyStateRenderer;\n preset?: TablePreset;\n rowActions?: TableRowActionRenderer<TType>[];\n rowActionsForGroup?: TableRowActionGroupRenderer<TType>[];\n rowActionsLength?: number;\n rowExpansionRenderer?: TableRowExpansionRenderer<TType>;\n rowIdentityColumnId?: string;\n shortcuts?: TableShortcuts<TType>;\n toolbarLeft?: JSX.Element;\n toolbarRight?: JSX.Element;\n toolbarPanel?: JSX.Element;\n\n // handlers\n onRowClick?: TableRowClickHandler<TType>;\n onRowDrag?: TableRowDragHandler<TType>;\n onRowDrop?: TableRowDropHandler<TType>;\n onRowGoto?: TableRowGotoHandler;\n onRowSelect?: TableRowSelectHandler<TType>;\n\n // state change handlers\n onChangeFilter?: TableFilterHandler;\n onChangeSearch?: TODO; // not currently supported\n onChangeSettings?: TableSettingsHandler;\n onChangeSort?: TableSortHandler;\n};\n\nexport interface TableClientProps<TType = unknown> extends TableCommonProps<TType> {\n length?: never;\n loadAll?: never;\n loadPage?: never;\n pageSize?: never;\n}\n\nexport interface TableServerProps<TType = unknown> extends TableCommonProps<TType> {\n length: number | undefined;\n loadAll: TableServerLoadAllHandler;\n loadPage: TableServerLoadPageHandler;\n pageSize?: number;\n}\n\nexport type TableProps<TType = unknown> = TableClientProps<TType> | TableServerProps<TType>;\n\nexport type TableColumnProps<TType = unknown> = ValueOf<{\n [Key in keyof TType]: {\n accessor?: Key;\n id: string;\n // renderers\n renderer?: TableColumnRenderer<TType, TType[Key]>;\n /** Renderer to use if the cell is an aggregate cell and part of a grouped row */\n aggregate?: TableColumnRendererAggregate<TType, TType[Key]>;\n control?: TableColumnRendererControl<TType>;\n footer?: TableColumnRendererFooter<TType>;\n header: TableColumnRendererHeader;\n // options\n /** Aggregation function to be used when the column is part of a grouped row */\n aggregationFn?: 'auto' | ReactTableBuiltInAggregationFn;\n align?: TableColumnAlignment;\n className?: TableColumnClassNameHandler<TType>;\n dataType?: TableColumnDataType;\n defaultHidden?: boolean;\n defaultWidth?: TableColumnWidth;\n enableFiltering?: boolean;\n enableGrouping?: boolean;\n enableHiding?: boolean;\n enableOrdering?: boolean;\n enablePrinting?: boolean;\n enableResizing?: boolean;\n enableSearch?: boolean;\n enableSorting?: boolean;\n enableTruncate?: boolean;\n filters?: TableFilterComparator[];\n headerClassName?: string;\n menu?: TableColumnMenu;\n minWidth?: number;\n sort?: TableColumnSortDirection;\n sortFn?: TableColumnSortFn<TType>;\n tooltip?: string;\n };\n}>;\n\nexport type TableGroupProps = {\n children: (JSX.Element | boolean | null | undefined)[];\n header: string;\n id: string;\n};\n\nexport type TableTexts = {\n columns: {\n actions: {\n tooltip: string;\n };\n drag: {\n tooltip: string;\n };\n expansion: {\n collapse: string;\n collapseAll: string;\n expand: string;\n expandAll: string;\n };\n menu: {\n editFilter: string;\n filter: string;\n freezeFirstColumn: string;\n freezeUptoColumn: string;\n gotoRow: string;\n hideColumn: string;\n unfreezeColumns: string;\n sorting: string;\n sortingOrder: {\n ascending: string;\n descending: string;\n unsorted: string;\n };\n };\n resize: {\n tooltip: string;\n };\n select: {\n deselect: string;\n deselectAll: string;\n select: string;\n selectAll: string;\n };\n };\n columnSettings: {\n button: string;\n noResults: string;\n search: string;\n tooltip: string;\n };\n filters: {\n button: string;\n buttons: {\n addFilter: string;\n clearFilters: string;\n };\n comparators: {\n contains: string;\n doesNotContain: string;\n isEqualTo: string;\n isNotEqualTo: string;\n isGreaterThan: string;\n isLessThan: string;\n isBetween: string;\n isEmpty: string;\n isNotEmpty: string;\n isBefore: string;\n isAfter: string;\n isLessThanOrEqualTo: string;\n isGreaterThanOrEqualTo: string;\n isOnOrBefore: string;\n isOnOrAfter: string;\n hasAnyOf: string;\n hasAllOf: string;\n hasNoneOf: string;\n };\n conditions: {\n and: string;\n where: string;\n };\n emptyFilter: {\n condition: string;\n value: string;\n };\n hiddenColumn: string;\n hiddenGroupedColumn: string;\n tooltip: string;\n total: string;\n };\n fontSize: {\n tooltip: string;\n sizes: {\n small: string;\n medium: string;\n large: string;\n };\n };\n footer: {\n summary: {\n count: string;\n records: string;\n selected: string;\n };\n };\n print: {\n error: string;\n loading: string;\n tooltip: string;\n warningDialog: {\n title: string;\n description: string;\n checkboxVisibilityLabel: string;\n cancelButtonText: string;\n printButtonText: string;\n };\n settingsDialog: {\n title: string;\n size: string;\n sizeA5: string;\n sizeA4: string;\n sizeA3: string;\n sizeLetter: string;\n sizeLegal: string;\n orientation: string;\n orientationLandscape: string;\n orientationPortrait: string;\n rows: string;\n rowsAll: string;\n rowsSelected: string;\n layout: string;\n layoutSplitGroups: string;\n };\n };\n rowHeight: {\n tooltip: string;\n sizes: {\n short: string;\n medium: string;\n tall: string;\n extraTall: string;\n };\n };\n search: {\n excludeUnmatchedResults: string;\n placeholder: string;\n };\n otherOptions: {\n tooltip: string;\n };\n};\n"],"names":["TableFilterComparator","TableServerLoadAllState"],"mappings":"AA2BA;IACYA;AAAZ,WAAYA,qBAAqB;EAC7BA,yEAAQ;EACRA,qFAAc;EACdA,2EAAS;EACTA,iFAAY;EACZA,mFAAa;EACbA,6EAAU;EACVA,2EAAS;EACTA,uEAAO;EACPA,6EAAU;EACVA,+FAAmB;EACnBA,sGAAsB;EACtBA,0EAAQ;EACRA,0EAAQ;EACRA,4EAAS;AACb,CAAC,EAfWA,qBAAqB,KAArBA,qBAAqB;IA+GrBC;AAAZ,WAAYA,uBAAuB;EAC/BA,iFAAU;EACVA,2EAAO;EACPA,+EAAS;AACb,CAAC,EAJWA,uBAAuB,KAAvBA,uBAAuB;;;;"}
@@ -22,8 +22,8 @@ function useTableRowActive(isEnabled = false, initialRowActiveIndex) {
22
22
  event.preventDefault();
23
23
  if (event.ctrlKey || event.metaKey) {
24
24
  const newIndex = 0;
25
- setRowActiveIndex(newIndex);
26
25
  scrollToIndex(newIndex);
26
+ setRowActiveIndex(newIndex);
27
27
  } else {
28
28
  move(-1, length, scrollToIndex);
29
29
  }
@@ -32,14 +32,14 @@ function useTableRowActive(isEnabled = false, initialRowActiveIndex) {
32
32
  event.preventDefault();
33
33
  if (event.ctrlKey || event.metaKey) {
34
34
  const newIndex = length - 1;
35
- setRowActiveIndex(newIndex);
36
35
  scrollToIndex(newIndex);
36
+ setRowActiveIndex(newIndex);
37
37
  } else {
38
38
  move(+1, length, scrollToIndex);
39
39
  }
40
40
  return;
41
41
  }
42
- }, [isEnabled]);
42
+ }, [isEnabled, rowActiveIndex]);
43
43
  const onFocus = React__default.useCallback((event, length, scrollToIndex) => {
44
44
  if (!isEnabled || event.isDefaultPrevented()) {
45
45
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"useTableRowActive.js","sources":["../../../../../../../../../src/primitives/Table/useTableManager/features/useTableRowActive.ts"],"sourcesContent":["import React from 'react';\nimport { TableScrollToIndexHandler } from '../../types';\nimport { useIsHoverStatePaused } from '../../../../hooks/useIsHoverStatePaused';\nimport { isElementInsideOrTriggeredFromContainer } from '../../../../utils/dom';\n\nexport function useTableRowActive(isEnabled = false, initialRowActiveIndex?: number) {\n const [rowActiveIndex, setRowActiveIndex] = React.useState<number | undefined>(initialRowActiveIndex);\n const [rowHoverIndex, setRowHoverIndex] = React.useState<number | undefined>(undefined);\n const [isHoverStatePaused, setHoverStatePaused] = useIsHoverStatePaused();\n\n const move = (direction: -1 | 1, length: number, scrollToIndex: TableScrollToIndexHandler) =>\n setRowActiveIndex(currentIndex => {\n const nextIndex = currentIndex !== undefined ? getNextIndex(direction, currentIndex, length) : 0;\n setTimeout(() => scrollToIndex(nextIndex), 1);\n return nextIndex;\n });\n\n const onKeyDown = React.useCallback(\n (event: KeyboardEvent, length: number, scrollToIndex: TableScrollToIndexHandler) => {\n if (!isEnabled || event.defaultPrevented) {\n return;\n }\n\n if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n setHoverStatePaused(true);\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n\n if (event.ctrlKey || event.metaKey) {\n const newIndex = 0;\n setRowActiveIndex(newIndex);\n scrollToIndex(newIndex);\n } else {\n move(-1, length, scrollToIndex);\n }\n\n return;\n } else if (event.key === 'ArrowDown') {\n event.preventDefault();\n\n if (event.ctrlKey || event.metaKey) {\n const newIndex = length - 1;\n setRowActiveIndex(newIndex);\n scrollToIndex(newIndex);\n } else {\n move(+1, length, scrollToIndex);\n }\n return;\n }\n },\n [isEnabled]\n );\n\n const onFocus = React.useCallback(\n (event: React.FocusEvent, length: number, scrollToIndex: TableScrollToIndexHandler) => {\n if (!isEnabled || event.isDefaultPrevented()) {\n return;\n }\n\n if (event.target.closest('tbody') || isElementInsideOrTriggeredFromContainer(event.target, event.currentTarget)) {\n return;\n }\n\n if (rowActiveIndex === undefined && length > 0) {\n setRowActiveIndex(index => {\n if (index === undefined) {\n scrollToIndex(0);\n return 0;\n }\n return index;\n });\n }\n },\n [rowActiveIndex, length, isEnabled]\n );\n\n return {\n isEnabled,\n rowActiveIndex,\n setRowActiveIndex: isEnabled ? setRowActiveIndex : () => undefined,\n rowHoverIndex,\n setRowHoverIndex,\n isHoverStatePaused,\n setHoverStatePaused: isEnabled ? setHoverStatePaused : () => undefined,\n handleFocus: isEnabled ? onFocus : () => undefined,\n handleKeyDown: isEnabled ? onKeyDown : () => undefined,\n };\n}\n\nfunction getNextIndex(direction: -1 | 1, currentIndex: number, length: number) {\n if (direction === -1) {\n return currentIndex - 1 > 0 ? currentIndex - 1 : 0;\n }\n\n return currentIndex + 1 < length ? currentIndex + 1 : currentIndex;\n}\n"],"names":["useTableRowActive","isEnabled","initialRowActiveIndex","rowActiveIndex","setRowActiveIndex","React","useState","rowHoverIndex","setRowHoverIndex","undefined","isHoverStatePaused","setHoverStatePaused","useIsHoverStatePaused","move","direction","length","scrollToIndex","currentIndex","nextIndex","getNextIndex","setTimeout","onKeyDown","useCallback","event","defaultPrevented","key","preventDefault","ctrlKey","metaKey","newIndex","onFocus","isDefaultPrevented","target","closest","isElementInsideOrTriggeredFromContainer","currentTarget","index","handleFocus","handleKeyDown"],"mappings":"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"}
1
+ {"version":3,"file":"useTableRowActive.js","sources":["../../../../../../../../../src/primitives/Table/useTableManager/features/useTableRowActive.ts"],"sourcesContent":["import React from 'react';\nimport { TableScrollToIndexHandler } from '../../types';\nimport { useIsHoverStatePaused } from '../../../../hooks/useIsHoverStatePaused';\nimport { isElementInsideOrTriggeredFromContainer } from '../../../../utils/dom';\n\nexport function useTableRowActive(isEnabled = false, initialRowActiveIndex?: number) {\n const [rowActiveIndex, setRowActiveIndex] = React.useState<number | undefined>(initialRowActiveIndex);\n const [rowHoverIndex, setRowHoverIndex] = React.useState<number | undefined>(undefined);\n const [isHoverStatePaused, setHoverStatePaused] = useIsHoverStatePaused();\n\n const move = (direction: -1 | 1, length: number, scrollToIndex: TableScrollToIndexHandler) =>\n setRowActiveIndex(currentIndex => {\n const nextIndex = currentIndex !== undefined ? getNextIndex(direction, currentIndex, length) : 0;\n setTimeout(() => scrollToIndex(nextIndex), 1);\n return nextIndex;\n });\n\n const onKeyDown = React.useCallback(\n (event: KeyboardEvent, length: number, scrollToIndex: TableScrollToIndexHandler) => {\n if (!isEnabled || event.defaultPrevented) {\n return;\n }\n\n if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n setHoverStatePaused(true);\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n\n if (event.ctrlKey || event.metaKey) {\n const newIndex = 0;\n scrollToIndex(newIndex);\n setRowActiveIndex(newIndex);\n } else {\n move(-1, length, scrollToIndex);\n }\n\n return;\n } else if (event.key === 'ArrowDown') {\n event.preventDefault();\n\n if (event.ctrlKey || event.metaKey) {\n const newIndex = length - 1;\n scrollToIndex(newIndex);\n setRowActiveIndex(newIndex);\n } else {\n move(+1, length, scrollToIndex);\n }\n return;\n }\n },\n [isEnabled, rowActiveIndex]\n );\n\n const onFocus = React.useCallback(\n (event: React.FocusEvent, length: number, scrollToIndex: TableScrollToIndexHandler) => {\n if (!isEnabled || event.isDefaultPrevented()) {\n return;\n }\n\n if (event.target.closest('tbody') || isElementInsideOrTriggeredFromContainer(event.target, event.currentTarget)) {\n return;\n }\n\n if (rowActiveIndex === undefined && length > 0) {\n setRowActiveIndex(index => {\n if (index === undefined) {\n scrollToIndex(0);\n return 0;\n }\n return index;\n });\n }\n },\n [rowActiveIndex, length, isEnabled]\n );\n\n return {\n isEnabled,\n rowActiveIndex,\n setRowActiveIndex: isEnabled ? setRowActiveIndex : () => undefined,\n rowHoverIndex,\n setRowHoverIndex,\n isHoverStatePaused,\n setHoverStatePaused: isEnabled ? setHoverStatePaused : () => undefined,\n handleFocus: isEnabled ? onFocus : () => undefined,\n handleKeyDown: isEnabled ? onKeyDown : () => undefined,\n };\n}\n\nfunction getNextIndex(direction: -1 | 1, currentIndex: number, length: number) {\n if (direction === -1) {\n return currentIndex - 1 > 0 ? currentIndex - 1 : 0;\n }\n\n return currentIndex + 1 < length ? currentIndex + 1 : currentIndex;\n}\n"],"names":["useTableRowActive","isEnabled","initialRowActiveIndex","rowActiveIndex","setRowActiveIndex","React","useState","rowHoverIndex","setRowHoverIndex","undefined","isHoverStatePaused","setHoverStatePaused","useIsHoverStatePaused","move","direction","length","scrollToIndex","currentIndex","nextIndex","getNextIndex","setTimeout","onKeyDown","useCallback","event","defaultPrevented","key","preventDefault","ctrlKey","metaKey","newIndex","onFocus","isDefaultPrevented","target","closest","isElementInsideOrTriggeredFromContainer","currentTarget","index","handleFocus","handleKeyDown"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import React__default from 'react';
2
2
  import { getExpandedRowModel, getGroupedRowModel, getFilteredRowModel, getSortedRowModel, createColumnHelper } from '@tanstack/react-table';
3
+ import get from 'lodash-es/get';
3
4
  import { getSortingFn } from './sorting.js';
4
5
  import { ensureOrdering, freezeUptoExternalColumn, unfreezeAllExternalColumns, getCellMinWidth } from './columns.js';
5
6
  import { columnFilterFn, globalFilterFn } from './filtering.js';
@@ -65,7 +66,8 @@ function processChildren(child, columns, defaultSizing, defaultSorting, defaultV
65
66
  id,
66
67
  accessorKey,
67
68
  // To avoid errors caused by undefined row data values, we pass accessorFn as a preventive measure
68
- accessorFn: row => row === null || row === void 0 ? void 0 : row[accessorKey],
69
+ // accessorKey can be dot notated strings, so we use lodash.get to access deeply nested children
70
+ accessorFn: row => get(row, accessorKey),
69
71
  header: header,
70
72
  // features
71
73
  enableColumnFilter,
@@ -92,10 +94,7 @@ function processChildren(child, columns, defaultSizing, defaultSorting, defaultV
92
94
  column.cell = info => renderer(info.getValue(), info.row.original);
93
95
  }
94
96
  if (typeof footer === 'function') {
95
- column.footer = info => footer(info.table.getRowModel().rows.flatMap(row => {
96
- var _row$original;
97
- return ((_row$original = row.original) === null || _row$original === void 0 ? void 0 : _row$original[id]) !== undefined ? [row.original[id]] : [];
98
- }));
97
+ column.footer = info => footer(info.table.getRowModel().rows.flatMap(row => row.original !== undefined ? row.original : []));
99
98
  }
100
99
  // config - filtering
101
100
  if (enableColumnFilter) {