@economic/taco 2.53.0-virtualiser.0 → 2.53.0-virtualiser.2

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.
@@ -113,7 +113,8 @@ const DisplayRow = /*#__PURE__*/React__default.memo(function DisplayRow(props) {
113
113
  const ref = React__default.useRef(null);
114
114
  const expansionRef = React__default.useRef(null);
115
115
  const isExpanded = !!attributes['data-row-expanded'];
116
- useSetVirtualisedRowHeight(measureRow, ref.current, expansionRef.current, isExpanded);
116
+ // measure row and expanded rows
117
+ useSetVirtualisedRowHeight(measureRow, ref, expansionRef, isExpanded);
117
118
  const className = cn('group/row', otherAttributes.className, {
118
119
  'hover:cursor-grab': tableMeta.rowDrag.isEnabled && typeof attributes.onClick !== 'function',
119
120
  'hover:cursor-pointer': typeof attributes.onClick === 'function'
@@ -136,17 +137,17 @@ const DisplayRow = /*#__PURE__*/React__default.memo(function DisplayRow(props) {
136
137
  className: "col-span-full"
137
138
  }, expandedRow))) : null);
138
139
  });
139
- function useSetVirtualisedRowHeight(measureRow, rowEl, expansionEl, isExpanded) {
140
+ function useSetVirtualisedRowHeight(measureRow, rowRef, expansionRef, isExpanded) {
140
141
  React__default.useEffect(() => {
141
- if (rowEl) {
142
- const height = rowEl.getBoundingClientRect().height;
143
- if (isExpanded && expansionEl) {
144
- measureRow(height, expansionEl.getBoundingClientRect().height);
145
- } else {
146
- measureRow(height);
147
- }
142
+ if (rowRef.current) {
143
+ measureRow(rowRef.current.getBoundingClientRect().height);
144
+ }
145
+ }, []);
146
+ React__default.useEffect(() => {
147
+ if (rowRef.current && expansionRef.current) {
148
+ measureRow(rowRef.current.getBoundingClientRect().height, expansionRef.current.getBoundingClientRect().height);
148
149
  }
149
- }, [isExpanded, rowEl, expansionEl]);
150
+ }, [isExpanded]);
150
151
  }
151
152
 
152
153
  export { DisplayRow };
@@ -1 +1 @@
1
- {"version":3,"file":"DisplayRow.js","sources":["../../../../../../../../../../../src/primitives/Table/Core/components/Row/BuiltIns/DisplayRow.tsx"],"sourcesContent":["import React from 'react';\nimport { TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport cn from 'clsx';\nimport { Cell } from '../../Columns/Cell/Cell';\nimport { TableRowRendererProps } from '../../../types';\nimport { TableRowWithMetaData } from '../../../../types';\nimport { isElementInteractive } from '../../../../../../utils/dom';\nimport { useDropTarget } from '../../../../../../utils/hooks/useDropTarget';\n\nexport type DisplayRowProps<TType = unknown> = React.HTMLAttributes<HTMLTableRowElement> & TableRowRendererProps<TType>;\n\nexport const DisplayRow = React.memo(function DisplayRow<TType = unknown>(props: DisplayRowProps<TType>) {\n const { children, cellRenderer: CellRenderer, index, measureRow, row, table, ...otherAttributes } = props;\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n\n const attributes: any = {\n ...otherAttributes,\n 'data-row-id': row.id,\n 'data-row-index': index,\n tabIndex: -1,\n };\n\n const handleClick = React.useCallback(\n (event: React.MouseEvent<HTMLTableRowElement>) => {\n const clickedElement = event.target as HTMLElement;\n\n if (!event.currentTarget?.contains(event.target as HTMLElement) || isElementInteractive(clickedElement)) {\n return;\n }\n\n tableMeta.rowClick.handleClick(event, row.original);\n },\n [row.original]\n );\n const handleClickCapture = React.useCallback(() => {\n tableMeta.rowActive.setRowActiveIndex(index);\n }, [index]);\n\n // row active\n if (tableMeta.rowActive.isEnabled) {\n attributes['data-row-active'] = tableMeta.rowActive.rowActiveIndex === index ? true : undefined;\n // we use capture because it let's us picks up clicks on components inside the row, e.g. checkboxes\n attributes.onClickCapture = handleClickCapture;\n }\n\n // row click\n if (tableMeta.rowClick.isEnabled(row.original)) {\n attributes.onClick = handleClick;\n }\n\n // row drag\n if (tableMeta.rowDrag.isEnabled) {\n attributes['aria-grabbed'] = !!tableMeta.rowDrag.dragging[row.id];\n attributes.draggable = true;\n const GHOST_ELEMENT_ID = 'taco_table_dragging';\n\n attributes.onDragStart = (event: React.DragEvent): void => {\n let rows = [row];\n\n if (row.getCanSelect()) {\n rows = row.getIsSelected() ? table.getSelectedRowModel().rows : [row, ...table.getSelectedRowModel().rows];\n }\n\n const data = rows.map(row => row.original);\n\n tableMeta.rowDrag.setDragging?.(\n rows.reduce((dragging, rowBeingDragged) => ({ ...dragging, [rowBeingDragged.id]: true }), {})\n );\n\n // set a default data value so that the consumer doesn't have to\n event.dataTransfer.setData('text', JSON.stringify(data));\n\n const showPlaceholder = (text: string) => {\n const ghost = document.createElement('div');\n ghost.id = GHOST_ELEMENT_ID;\n ghost.className = 'wcag-blue rounded flex w-48 p-4 absolute -ml-[100vw]';\n ghost.innerText = text;\n document.body.appendChild(ghost);\n event.dataTransfer.setDragImage(ghost, 0, 0);\n };\n\n const setDataTransfer = (text: string) => event.dataTransfer.setData('text', text);\n\n tableMeta.rowDrag.handleRowDrag?.(data, showPlaceholder, setDataTransfer);\n };\n\n attributes.onDragEnd = (): void => {\n document.getElementById(GHOST_ELEMENT_ID)?.remove();\n tableMeta.rowDrag.setDragging?.({});\n };\n }\n\n // row drop\n const [isDraggedOver, dropTargetProps] = useDropTarget(event => tableMeta.rowDrop.handleDrop?.(event, row.original));\n\n if (tableMeta.rowDrop.isEnabled) {\n attributes.onDragEnter = dropTargetProps?.onDragEnter;\n attributes.onDragLeave = dropTargetProps?.onDragLeave;\n attributes.onDragOver = dropTargetProps?.onDragOver;\n attributes.onDrop = dropTargetProps?.onDrop;\n attributes['data-row-dragged-over'] = isDraggedOver;\n }\n\n // row grouping\n if (table.options.enableGrouping) {\n attributes['data-row-group'] = row.getIsGrouped() ? true : undefined;\n }\n\n // row selection\n if (row.getCanSelect()) {\n attributes['data-row-selected'] = row.getIsSelected() || row.getIsAllSubRowsSelected() ? true : undefined;\n }\n\n // row expansion\n let expandedRow;\n\n if (tableMeta.rowExpansion.isEnabled && row.getIsExpanded()) {\n attributes['data-row-expanded'] = true;\n expandedRow = tableMeta.rowExpansion.rowExpansionRenderer?.(row.original)?.();\n }\n\n const rowMeta = (row.original as TableRowWithMetaData<TType>)._meta;\n\n if (rowMeta) {\n if (rowMeta.layout) {\n attributes['data-row-meta-layout'] = rowMeta.layout;\n }\n }\n\n const ref = React.useRef<HTMLTableRowElement>(null);\n const expansionRef = React.useRef<HTMLTableRowElement>(null);\n const isExpanded = !!attributes['data-row-expanded'];\n\n useSetVirtualisedRowHeight(measureRow, ref.current, expansionRef.current, isExpanded);\n\n const className = cn('group/row', otherAttributes.className, {\n 'hover:cursor-grab': tableMeta.rowDrag.isEnabled && typeof attributes.onClick !== 'function',\n 'hover:cursor-pointer': typeof attributes.onClick === 'function',\n });\n\n const isGrouped = row.getIsGrouped();\n\n return (\n <>\n <tr {...attributes} className={className} ref={ref}>\n {children}\n {row\n .getVisibleCells()\n // Filter out the row actions cell from rendering in Grouped Row\n .filter(cell => !(isGrouped && cell.column.id === '__actions'))\n .map((cell, cellIndex) => (\n <Cell key={cell.id} cell={cell} index={cellIndex} renderer={CellRenderer} />\n ))}\n </tr>\n {expandedRow ? (\n <tr data-row-parent-id={row.id} ref={expansionRef}>\n <td className=\"col-span-full\">{expandedRow}</td>\n </tr>\n ) : null}\n </>\n );\n}) as <TType = unknown>(props: TableRowRendererProps<TType>) => JSX.Element;\n\nfunction useSetVirtualisedRowHeight(\n measureRow: (size: number, expansionHeight?: number) => void,\n rowEl: HTMLTableRowElement | null,\n expansionEl: HTMLTableRowElement | null,\n isExpanded: boolean\n) {\n React.useEffect(() => {\n if (rowEl) {\n const height = rowEl.getBoundingClientRect().height;\n\n if (isExpanded && expansionEl) {\n measureRow(height, expansionEl.getBoundingClientRect().height);\n } else {\n measureRow(height);\n }\n }\n }, [isExpanded, rowEl, expansionEl]);\n}\n"],"names":["DisplayRow","React","memo","props","children","cellRenderer","CellRenderer","index","measureRow","row","table","otherAttributes","tableMeta","options","meta","attributes","id","tabIndex","handleClick","useCallback","event","clickedElement","target","_event$currentTarget","currentTarget","contains","isElementInteractive","rowClick","original","handleClickCapture","rowActive","setRowActiveIndex","isEnabled","rowActiveIndex","undefined","onClickCapture","onClick","rowDrag","dragging","draggable","GHOST_ELEMENT_ID","onDragStart","rows","getCanSelect","getIsSelected","getSelectedRowModel","data","map","_tableMeta$rowDrag$se","_tableMeta$rowDrag","setDragging","call","reduce","rowBeingDragged","dataTransfer","setData","JSON","stringify","showPlaceholder","text","ghost","document","createElement","className","innerText","body","appendChild","setDragImage","setDataTransfer","_tableMeta$rowDrag$ha","_tableMeta$rowDrag2","handleRowDrag","onDragEnd","_document$getElementB","getElementById","remove","_tableMeta$rowDrag$se2","_tableMeta$rowDrag3","isDraggedOver","dropTargetProps","useDropTarget","_tableMeta$rowDrop$ha","_tableMeta$rowDrop","rowDrop","handleDrop","onDragEnter","onDragLeave","onDragOver","onDrop","enableGrouping","getIsGrouped","getIsAllSubRowsSelected","expandedRow","rowExpansion","getIsExpanded","_tableMeta$rowExpansi","_tableMeta$rowExpansi2","_tableMeta$rowExpansi3","rowExpansionRenderer","rowMeta","_meta","layout","ref","useRef","expansionRef","isExpanded","useSetVirtualisedRowHeight","current","cn","isGrouped","getVisibleCells","filter","cell","column","cellIndex","Cell","key","renderer","rowEl","expansionEl","useEffect","height","getBoundingClientRect"],"mappings":";;;;;;MAWaA,UAAU,gBAAGC,cAAK,CAACC,IAAI,CAAC,SAASF,UAAUA,CAAkBG,KAA6B;EACnG,MAAM;IAAEC,QAAQ;IAAEC,YAAY,EAAEC,YAAY;IAAEC,KAAK;IAAEC,UAAU;IAAEC,GAAG;IAAEC,KAAK;IAAE,GAAGC;GAAiB,GAAGR,KAAK;EACzG,MAAMS,SAAS,GAAGF,KAAK,CAACG,OAAO,CAACC,IAA6B;EAE7D,MAAMC,UAAU,GAAQ;IACpB,GAAGJ,eAAe;IAClB,aAAa,EAAEF,GAAG,CAACO,EAAE;IACrB,gBAAgB,EAAET,KAAK;IACvBU,QAAQ,EAAE,CAAC;GACd;EAED,MAAMC,WAAW,GAAGjB,cAAK,CAACkB,WAAW,CAChCC,KAA4C;;IACzC,MAAMC,cAAc,GAAGD,KAAK,CAACE,MAAqB;IAElD,IAAI,GAAAC,oBAAA,GAACH,KAAK,CAACI,aAAa,cAAAD,oBAAA,eAAnBA,oBAAA,CAAqBE,QAAQ,CAACL,KAAK,CAACE,MAAqB,CAAC,KAAII,oBAAoB,CAACL,cAAc,CAAC,EAAE;MACrG;;IAGJT,SAAS,CAACe,QAAQ,CAACT,WAAW,CAACE,KAAK,EAAEX,GAAG,CAACmB,QAAQ,CAAC;GACtD,EACD,CAACnB,GAAG,CAACmB,QAAQ,CAAC,CACjB;EACD,MAAMC,kBAAkB,GAAG5B,cAAK,CAACkB,WAAW,CAAC;IACzCP,SAAS,CAACkB,SAAS,CAACC,iBAAiB,CAACxB,KAAK,CAAC;GAC/C,EAAE,CAACA,KAAK,CAAC,CAAC;;EAGX,IAAIK,SAAS,CAACkB,SAAS,CAACE,SAAS,EAAE;IAC/BjB,UAAU,CAAC,iBAAiB,CAAC,GAAGH,SAAS,CAACkB,SAAS,CAACG,cAAc,KAAK1B,KAAK,GAAG,IAAI,GAAG2B,SAAS;;IAE/FnB,UAAU,CAACoB,cAAc,GAAGN,kBAAkB;;;EAIlD,IAAIjB,SAAS,CAACe,QAAQ,CAACK,SAAS,CAACvB,GAAG,CAACmB,QAAQ,CAAC,EAAE;IAC5Cb,UAAU,CAACqB,OAAO,GAAGlB,WAAW;;;EAIpC,IAAIN,SAAS,CAACyB,OAAO,CAACL,SAAS,EAAE;IAC7BjB,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,CAACH,SAAS,CAACyB,OAAO,CAACC,QAAQ,CAAC7B,GAAG,CAACO,EAAE,CAAC;IACjED,UAAU,CAACwB,SAAS,GAAG,IAAI;IAC3B,MAAMC,gBAAgB,GAAG,qBAAqB;IAE9CzB,UAAU,CAAC0B,WAAW,GAAIrB,KAAsB;;MAC5C,IAAIsB,IAAI,GAAG,CAACjC,GAAG,CAAC;MAEhB,IAAIA,GAAG,CAACkC,YAAY,EAAE,EAAE;QACpBD,IAAI,GAAGjC,GAAG,CAACmC,aAAa,EAAE,GAAGlC,KAAK,CAACmC,mBAAmB,EAAE,CAACH,IAAI,GAAG,CAACjC,GAAG,EAAE,GAAGC,KAAK,CAACmC,mBAAmB,EAAE,CAACH,IAAI,CAAC;;MAG9G,MAAMI,IAAI,GAAGJ,IAAI,CAACK,GAAG,CAACtC,GAAG,IAAIA,GAAG,CAACmB,QAAQ,CAAC;MAE1C,CAAAoB,qBAAA,IAAAC,kBAAA,GAAArC,SAAS,CAACyB,OAAO,EAACa,WAAW,cAAAF,qBAAA,uBAA7BA,qBAAA,CAAAG,IAAA,CAAAF,kBAAA,EACIP,IAAI,CAACU,MAAM,CAAC,CAACd,QAAQ,EAAEe,eAAe,MAAM;QAAE,GAAGf,QAAQ;QAAE,CAACe,eAAe,CAACrC,EAAE,GAAG;OAAM,CAAC,EAAE,EAAE,CAAC,CAChG;;MAGDI,KAAK,CAACkC,YAAY,CAACC,OAAO,CAAC,MAAM,EAAEC,IAAI,CAACC,SAAS,CAACX,IAAI,CAAC,CAAC;MAExD,MAAMY,eAAe,GAAIC,IAAY;QACjC,MAAMC,KAAK,GAAGC,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QAC3CF,KAAK,CAAC5C,EAAE,GAAGwB,gBAAgB;QAC3BoB,KAAK,CAACG,SAAS,GAAG,sDAAsD;QACxEH,KAAK,CAACI,SAAS,GAAGL,IAAI;QACtBE,QAAQ,CAACI,IAAI,CAACC,WAAW,CAACN,KAAK,CAAC;QAChCxC,KAAK,CAACkC,YAAY,CAACa,YAAY,CAACP,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;OAC/C;MAED,MAAMQ,eAAe,GAAIT,IAAY,IAAKvC,KAAK,CAACkC,YAAY,CAACC,OAAO,CAAC,MAAM,EAAEI,IAAI,CAAC;MAElF,CAAAU,qBAAA,IAAAC,mBAAA,GAAA1D,SAAS,CAACyB,OAAO,EAACkC,aAAa,cAAAF,qBAAA,uBAA/BA,qBAAA,CAAAlB,IAAA,CAAAmB,mBAAA,EAAkCxB,IAAI,EAAEY,eAAe,EAAEU,eAAe,CAAC;KAC5E;IAEDrD,UAAU,CAACyD,SAAS,GAAG;;MACnB,CAAAC,qBAAA,GAAAZ,QAAQ,CAACa,cAAc,CAAClC,gBAAgB,CAAC,cAAAiC,qBAAA,uBAAzCA,qBAAA,CAA2CE,MAAM,EAAE;MACnD,CAAAC,sBAAA,IAAAC,mBAAA,GAAAjE,SAAS,CAACyB,OAAO,EAACa,WAAW,cAAA0B,sBAAA,uBAA7BA,sBAAA,CAAAzB,IAAA,CAAA0B,mBAAA,EAAgC,EAAE,CAAC;KACtC;;;EAIL,MAAM,CAACC,aAAa,EAAEC,eAAe,CAAC,GAAGC,aAAa,CAAC5D,KAAK;IAAA,IAAA6D,qBAAA,EAAAC,kBAAA;IAAA,QAAAD,qBAAA,GAAI,CAAAC,kBAAA,GAAAtE,SAAS,CAACuE,OAAO,EAACC,UAAU,cAAAH,qBAAA,uBAA5BA,qBAAA,CAAA9B,IAAA,CAAA+B,kBAAA,EAA+B9D,KAAK,EAAEX,GAAG,CAACmB,QAAQ,CAAC;IAAC;EAEpH,IAAIhB,SAAS,CAACuE,OAAO,CAACnD,SAAS,EAAE;IAC7BjB,UAAU,CAACsE,WAAW,GAAGN,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAEM,WAAW;IACrDtE,UAAU,CAACuE,WAAW,GAAGP,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAEO,WAAW;IACrDvE,UAAU,CAACwE,UAAU,GAAGR,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAEQ,UAAU;IACnDxE,UAAU,CAACyE,MAAM,GAAGT,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAES,MAAM;IAC3CzE,UAAU,CAAC,uBAAuB,CAAC,GAAG+D,aAAa;;;EAIvD,IAAIpE,KAAK,CAACG,OAAO,CAAC4E,cAAc,EAAE;IAC9B1E,UAAU,CAAC,gBAAgB,CAAC,GAAGN,GAAG,CAACiF,YAAY,EAAE,GAAG,IAAI,GAAGxD,SAAS;;;EAIxE,IAAIzB,GAAG,CAACkC,YAAY,EAAE,EAAE;IACpB5B,UAAU,CAAC,mBAAmB,CAAC,GAAGN,GAAG,CAACmC,aAAa,EAAE,IAAInC,GAAG,CAACkF,uBAAuB,EAAE,GAAG,IAAI,GAAGzD,SAAS;;;EAI7G,IAAI0D,WAAW;EAEf,IAAIhF,SAAS,CAACiF,YAAY,CAAC7D,SAAS,IAAIvB,GAAG,CAACqF,aAAa,EAAE,EAAE;IAAA,IAAAC,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA;IACzDlF,UAAU,CAAC,mBAAmB,CAAC,GAAG,IAAI;IACtC6E,WAAW,IAAAG,qBAAA,GAAG,CAAAC,sBAAA,GAAApF,SAAS,CAACiF,YAAY,EAACK,oBAAoB,cAAAH,qBAAA,wBAAAE,sBAAA,GAA3CF,qBAAA,CAAA5C,IAAA,CAAA6C,sBAAA,EAA8CvF,GAAG,CAACmB,QAAQ,CAAC,cAAAqE,sBAAA,uBAA3DA,sBAAA,EAA+D;;EAGjF,MAAME,OAAO,GAAI1F,GAAG,CAACmB,QAAwC,CAACwE,KAAK;EAEnE,IAAID,OAAO,EAAE;IACT,IAAIA,OAAO,CAACE,MAAM,EAAE;MAChBtF,UAAU,CAAC,sBAAsB,CAAC,GAAGoF,OAAO,CAACE,MAAM;;;EAI3D,MAAMC,GAAG,GAAGrG,cAAK,CAACsG,MAAM,CAAsB,IAAI,CAAC;EACnD,MAAMC,YAAY,GAAGvG,cAAK,CAACsG,MAAM,CAAsB,IAAI,CAAC;EAC5D,MAAME,UAAU,GAAG,CAAC,CAAC1F,UAAU,CAAC,mBAAmB,CAAC;EAEpD2F,0BAA0B,CAAClG,UAAU,EAAE8F,GAAG,CAACK,OAAO,EAAEH,YAAY,CAACG,OAAO,EAAEF,UAAU,CAAC;EAErF,MAAM1C,SAAS,GAAG6C,EAAE,CAAC,WAAW,EAAEjG,eAAe,CAACoD,SAAS,EAAE;IACzD,mBAAmB,EAAEnD,SAAS,CAACyB,OAAO,CAACL,SAAS,IAAI,OAAOjB,UAAU,CAACqB,OAAO,KAAK,UAAU;IAC5F,sBAAsB,EAAE,OAAOrB,UAAU,CAACqB,OAAO,KAAK;GACzD,CAAC;EAEF,MAAMyE,SAAS,GAAGpG,GAAG,CAACiF,YAAY,EAAE;EAEpC,oBACIzF,yEACIA,qDAAQc,UAAU;IAAEgD,SAAS,EAAEA,SAAS;IAAEuC,GAAG,EAAEA;MAC1ClG,QAAQ,EACRK,GAAG,CACCqG,eAAe;;GAEfC,MAAM,CAACC,IAAI,IAAI,EAAEH,SAAS,IAAIG,IAAI,CAACC,MAAM,CAACjG,EAAE,KAAK,WAAW,CAAC,CAAC,CAC9D+B,GAAG,CAAC,CAACiE,IAAI,EAAEE,SAAS,mBACjBjH,6BAACkH,IAAI;IAACC,GAAG,EAAEJ,IAAI,CAAChG,EAAE;IAAEgG,IAAI,EAAEA,IAAI;IAAEzG,KAAK,EAAE2G,SAAS;IAAEG,QAAQ,EAAE/G;IAAgB,CAC/E,CAAC,CACL,EACJsF,WAAW,iBACR3F;0BAAwBQ,GAAG,CAACO,EAAE;IAAEsF,GAAG,EAAEE;kBACjCvG;IAAI8D,SAAS,EAAC;KAAiB6B,WAAW,CAAM,CAC/C,IACL,IAAI,CACT;AAEX,CAAC;AAED,SAASc,0BAA0BA,CAC/BlG,UAA4D,EAC5D8G,KAAiC,EACjCC,WAAuC,EACvCd,UAAmB;EAEnBxG,cAAK,CAACuH,SAAS,CAAC;IACZ,IAAIF,KAAK,EAAE;MACP,MAAMG,MAAM,GAAGH,KAAK,CAACI,qBAAqB,EAAE,CAACD,MAAM;MAEnD,IAAIhB,UAAU,IAAIc,WAAW,EAAE;QAC3B/G,UAAU,CAACiH,MAAM,EAAEF,WAAW,CAACG,qBAAqB,EAAE,CAACD,MAAM,CAAC;OACjE,MAAM;QACHjH,UAAU,CAACiH,MAAM,CAAC;;;GAG7B,EAAE,CAAChB,UAAU,EAAEa,KAAK,EAAEC,WAAW,CAAC,CAAC;AACxC;;;;"}
1
+ {"version":3,"file":"DisplayRow.js","sources":["../../../../../../../../../../../src/primitives/Table/Core/components/Row/BuiltIns/DisplayRow.tsx"],"sourcesContent":["import React from 'react';\nimport { TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport cn from 'clsx';\nimport { Cell } from '../../Columns/Cell/Cell';\nimport { TableRowRendererProps } from '../../../types';\nimport { TableRowWithMetaData } from '../../../../types';\nimport { isElementInteractive } from '../../../../../../utils/dom';\nimport { useDropTarget } from '../../../../../../utils/hooks/useDropTarget';\n\nexport type DisplayRowProps<TType = unknown> = React.HTMLAttributes<HTMLTableRowElement> & TableRowRendererProps<TType>;\n\nexport const DisplayRow = React.memo(function DisplayRow<TType = unknown>(props: DisplayRowProps<TType>) {\n const { children, cellRenderer: CellRenderer, index, measureRow, row, table, ...otherAttributes } = props;\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n\n const attributes: any = {\n ...otherAttributes,\n 'data-row-id': row.id,\n 'data-row-index': index,\n tabIndex: -1,\n };\n\n const handleClick = React.useCallback(\n (event: React.MouseEvent<HTMLTableRowElement>) => {\n const clickedElement = event.target as HTMLElement;\n\n if (!event.currentTarget?.contains(event.target as HTMLElement) || isElementInteractive(clickedElement)) {\n return;\n }\n\n tableMeta.rowClick.handleClick(event, row.original);\n },\n [row.original]\n );\n const handleClickCapture = React.useCallback(() => {\n tableMeta.rowActive.setRowActiveIndex(index);\n }, [index]);\n\n // row active\n if (tableMeta.rowActive.isEnabled) {\n attributes['data-row-active'] = tableMeta.rowActive.rowActiveIndex === index ? true : undefined;\n // we use capture because it let's us picks up clicks on components inside the row, e.g. checkboxes\n attributes.onClickCapture = handleClickCapture;\n }\n\n // row click\n if (tableMeta.rowClick.isEnabled(row.original)) {\n attributes.onClick = handleClick;\n }\n\n // row drag\n if (tableMeta.rowDrag.isEnabled) {\n attributes['aria-grabbed'] = !!tableMeta.rowDrag.dragging[row.id];\n attributes.draggable = true;\n const GHOST_ELEMENT_ID = 'taco_table_dragging';\n\n attributes.onDragStart = (event: React.DragEvent): void => {\n let rows = [row];\n\n if (row.getCanSelect()) {\n rows = row.getIsSelected() ? table.getSelectedRowModel().rows : [row, ...table.getSelectedRowModel().rows];\n }\n\n const data = rows.map(row => row.original);\n\n tableMeta.rowDrag.setDragging?.(\n rows.reduce((dragging, rowBeingDragged) => ({ ...dragging, [rowBeingDragged.id]: true }), {})\n );\n\n // set a default data value so that the consumer doesn't have to\n event.dataTransfer.setData('text', JSON.stringify(data));\n\n const showPlaceholder = (text: string) => {\n const ghost = document.createElement('div');\n ghost.id = GHOST_ELEMENT_ID;\n ghost.className = 'wcag-blue rounded flex w-48 p-4 absolute -ml-[100vw]';\n ghost.innerText = text;\n document.body.appendChild(ghost);\n event.dataTransfer.setDragImage(ghost, 0, 0);\n };\n\n const setDataTransfer = (text: string) => event.dataTransfer.setData('text', text);\n\n tableMeta.rowDrag.handleRowDrag?.(data, showPlaceholder, setDataTransfer);\n };\n\n attributes.onDragEnd = (): void => {\n document.getElementById(GHOST_ELEMENT_ID)?.remove();\n tableMeta.rowDrag.setDragging?.({});\n };\n }\n\n // row drop\n const [isDraggedOver, dropTargetProps] = useDropTarget(event => tableMeta.rowDrop.handleDrop?.(event, row.original));\n\n if (tableMeta.rowDrop.isEnabled) {\n attributes.onDragEnter = dropTargetProps?.onDragEnter;\n attributes.onDragLeave = dropTargetProps?.onDragLeave;\n attributes.onDragOver = dropTargetProps?.onDragOver;\n attributes.onDrop = dropTargetProps?.onDrop;\n attributes['data-row-dragged-over'] = isDraggedOver;\n }\n\n // row grouping\n if (table.options.enableGrouping) {\n attributes['data-row-group'] = row.getIsGrouped() ? true : undefined;\n }\n\n // row selection\n if (row.getCanSelect()) {\n attributes['data-row-selected'] = row.getIsSelected() || row.getIsAllSubRowsSelected() ? true : undefined;\n }\n\n // row expansion\n let expandedRow;\n\n if (tableMeta.rowExpansion.isEnabled && row.getIsExpanded()) {\n attributes['data-row-expanded'] = true;\n expandedRow = tableMeta.rowExpansion.rowExpansionRenderer?.(row.original)?.();\n }\n\n const rowMeta = (row.original as TableRowWithMetaData<TType>)._meta;\n\n if (rowMeta) {\n if (rowMeta.layout) {\n attributes['data-row-meta-layout'] = rowMeta.layout;\n }\n }\n\n const ref = React.useRef<HTMLTableRowElement>(null);\n const expansionRef = React.useRef<HTMLTableRowElement>(null);\n const isExpanded = !!attributes['data-row-expanded'];\n\n // measure row and expanded rows\n useSetVirtualisedRowHeight(measureRow, ref, expansionRef, isExpanded);\n\n const className = cn('group/row', otherAttributes.className, {\n 'hover:cursor-grab': tableMeta.rowDrag.isEnabled && typeof attributes.onClick !== 'function',\n 'hover:cursor-pointer': typeof attributes.onClick === 'function',\n });\n\n const isGrouped = row.getIsGrouped();\n\n return (\n <>\n <tr {...attributes} className={className} ref={ref}>\n {children}\n {row\n .getVisibleCells()\n // Filter out the row actions cell from rendering in Grouped Row\n .filter(cell => !(isGrouped && cell.column.id === '__actions'))\n .map((cell, cellIndex) => (\n <Cell key={cell.id} cell={cell} index={cellIndex} renderer={CellRenderer} />\n ))}\n </tr>\n {expandedRow ? (\n <tr data-row-parent-id={row.id} ref={expansionRef}>\n <td className=\"col-span-full\">{expandedRow}</td>\n </tr>\n ) : null}\n </>\n );\n}) as <TType = unknown>(props: TableRowRendererProps<TType>) => JSX.Element;\n\nfunction useSetVirtualisedRowHeight(\n measureRow: (size: number, expansionHeight?: number) => void,\n rowRef: React.RefObject<HTMLTableRowElement>,\n expansionRef: React.RefObject<HTMLTableRowElement>,\n isExpanded: boolean\n) {\n React.useEffect(() => {\n if (rowRef.current) {\n measureRow(rowRef.current.getBoundingClientRect().height);\n }\n }, []);\n\n React.useEffect(() => {\n if (rowRef.current && expansionRef.current) {\n measureRow(rowRef.current.getBoundingClientRect().height, expansionRef.current.getBoundingClientRect().height);\n }\n }, [isExpanded]);\n}\n"],"names":["DisplayRow","React","memo","props","children","cellRenderer","CellRenderer","index","measureRow","row","table","otherAttributes","tableMeta","options","meta","attributes","id","tabIndex","handleClick","useCallback","event","clickedElement","target","_event$currentTarget","currentTarget","contains","isElementInteractive","rowClick","original","handleClickCapture","rowActive","setRowActiveIndex","isEnabled","rowActiveIndex","undefined","onClickCapture","onClick","rowDrag","dragging","draggable","GHOST_ELEMENT_ID","onDragStart","rows","getCanSelect","getIsSelected","getSelectedRowModel","data","map","_tableMeta$rowDrag$se","_tableMeta$rowDrag","setDragging","call","reduce","rowBeingDragged","dataTransfer","setData","JSON","stringify","showPlaceholder","text","ghost","document","createElement","className","innerText","body","appendChild","setDragImage","setDataTransfer","_tableMeta$rowDrag$ha","_tableMeta$rowDrag2","handleRowDrag","onDragEnd","_document$getElementB","getElementById","remove","_tableMeta$rowDrag$se2","_tableMeta$rowDrag3","isDraggedOver","dropTargetProps","useDropTarget","_tableMeta$rowDrop$ha","_tableMeta$rowDrop","rowDrop","handleDrop","onDragEnter","onDragLeave","onDragOver","onDrop","enableGrouping","getIsGrouped","getIsAllSubRowsSelected","expandedRow","rowExpansion","getIsExpanded","_tableMeta$rowExpansi","_tableMeta$rowExpansi2","_tableMeta$rowExpansi3","rowExpansionRenderer","rowMeta","_meta","layout","ref","useRef","expansionRef","isExpanded","useSetVirtualisedRowHeight","cn","isGrouped","getVisibleCells","filter","cell","column","cellIndex","Cell","key","renderer","rowRef","useEffect","current","getBoundingClientRect","height"],"mappings":";;;;;;MAWaA,UAAU,gBAAGC,cAAK,CAACC,IAAI,CAAC,SAASF,UAAUA,CAAkBG,KAA6B;EACnG,MAAM;IAAEC,QAAQ;IAAEC,YAAY,EAAEC,YAAY;IAAEC,KAAK;IAAEC,UAAU;IAAEC,GAAG;IAAEC,KAAK;IAAE,GAAGC;GAAiB,GAAGR,KAAK;EACzG,MAAMS,SAAS,GAAGF,KAAK,CAACG,OAAO,CAACC,IAA6B;EAE7D,MAAMC,UAAU,GAAQ;IACpB,GAAGJ,eAAe;IAClB,aAAa,EAAEF,GAAG,CAACO,EAAE;IACrB,gBAAgB,EAAET,KAAK;IACvBU,QAAQ,EAAE,CAAC;GACd;EAED,MAAMC,WAAW,GAAGjB,cAAK,CAACkB,WAAW,CAChCC,KAA4C;;IACzC,MAAMC,cAAc,GAAGD,KAAK,CAACE,MAAqB;IAElD,IAAI,GAAAC,oBAAA,GAACH,KAAK,CAACI,aAAa,cAAAD,oBAAA,eAAnBA,oBAAA,CAAqBE,QAAQ,CAACL,KAAK,CAACE,MAAqB,CAAC,KAAII,oBAAoB,CAACL,cAAc,CAAC,EAAE;MACrG;;IAGJT,SAAS,CAACe,QAAQ,CAACT,WAAW,CAACE,KAAK,EAAEX,GAAG,CAACmB,QAAQ,CAAC;GACtD,EACD,CAACnB,GAAG,CAACmB,QAAQ,CAAC,CACjB;EACD,MAAMC,kBAAkB,GAAG5B,cAAK,CAACkB,WAAW,CAAC;IACzCP,SAAS,CAACkB,SAAS,CAACC,iBAAiB,CAACxB,KAAK,CAAC;GAC/C,EAAE,CAACA,KAAK,CAAC,CAAC;;EAGX,IAAIK,SAAS,CAACkB,SAAS,CAACE,SAAS,EAAE;IAC/BjB,UAAU,CAAC,iBAAiB,CAAC,GAAGH,SAAS,CAACkB,SAAS,CAACG,cAAc,KAAK1B,KAAK,GAAG,IAAI,GAAG2B,SAAS;;IAE/FnB,UAAU,CAACoB,cAAc,GAAGN,kBAAkB;;;EAIlD,IAAIjB,SAAS,CAACe,QAAQ,CAACK,SAAS,CAACvB,GAAG,CAACmB,QAAQ,CAAC,EAAE;IAC5Cb,UAAU,CAACqB,OAAO,GAAGlB,WAAW;;;EAIpC,IAAIN,SAAS,CAACyB,OAAO,CAACL,SAAS,EAAE;IAC7BjB,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,CAACH,SAAS,CAACyB,OAAO,CAACC,QAAQ,CAAC7B,GAAG,CAACO,EAAE,CAAC;IACjED,UAAU,CAACwB,SAAS,GAAG,IAAI;IAC3B,MAAMC,gBAAgB,GAAG,qBAAqB;IAE9CzB,UAAU,CAAC0B,WAAW,GAAIrB,KAAsB;;MAC5C,IAAIsB,IAAI,GAAG,CAACjC,GAAG,CAAC;MAEhB,IAAIA,GAAG,CAACkC,YAAY,EAAE,EAAE;QACpBD,IAAI,GAAGjC,GAAG,CAACmC,aAAa,EAAE,GAAGlC,KAAK,CAACmC,mBAAmB,EAAE,CAACH,IAAI,GAAG,CAACjC,GAAG,EAAE,GAAGC,KAAK,CAACmC,mBAAmB,EAAE,CAACH,IAAI,CAAC;;MAG9G,MAAMI,IAAI,GAAGJ,IAAI,CAACK,GAAG,CAACtC,GAAG,IAAIA,GAAG,CAACmB,QAAQ,CAAC;MAE1C,CAAAoB,qBAAA,IAAAC,kBAAA,GAAArC,SAAS,CAACyB,OAAO,EAACa,WAAW,cAAAF,qBAAA,uBAA7BA,qBAAA,CAAAG,IAAA,CAAAF,kBAAA,EACIP,IAAI,CAACU,MAAM,CAAC,CAACd,QAAQ,EAAEe,eAAe,MAAM;QAAE,GAAGf,QAAQ;QAAE,CAACe,eAAe,CAACrC,EAAE,GAAG;OAAM,CAAC,EAAE,EAAE,CAAC,CAChG;;MAGDI,KAAK,CAACkC,YAAY,CAACC,OAAO,CAAC,MAAM,EAAEC,IAAI,CAACC,SAAS,CAACX,IAAI,CAAC,CAAC;MAExD,MAAMY,eAAe,GAAIC,IAAY;QACjC,MAAMC,KAAK,GAAGC,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QAC3CF,KAAK,CAAC5C,EAAE,GAAGwB,gBAAgB;QAC3BoB,KAAK,CAACG,SAAS,GAAG,sDAAsD;QACxEH,KAAK,CAACI,SAAS,GAAGL,IAAI;QACtBE,QAAQ,CAACI,IAAI,CAACC,WAAW,CAACN,KAAK,CAAC;QAChCxC,KAAK,CAACkC,YAAY,CAACa,YAAY,CAACP,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;OAC/C;MAED,MAAMQ,eAAe,GAAIT,IAAY,IAAKvC,KAAK,CAACkC,YAAY,CAACC,OAAO,CAAC,MAAM,EAAEI,IAAI,CAAC;MAElF,CAAAU,qBAAA,IAAAC,mBAAA,GAAA1D,SAAS,CAACyB,OAAO,EAACkC,aAAa,cAAAF,qBAAA,uBAA/BA,qBAAA,CAAAlB,IAAA,CAAAmB,mBAAA,EAAkCxB,IAAI,EAAEY,eAAe,EAAEU,eAAe,CAAC;KAC5E;IAEDrD,UAAU,CAACyD,SAAS,GAAG;;MACnB,CAAAC,qBAAA,GAAAZ,QAAQ,CAACa,cAAc,CAAClC,gBAAgB,CAAC,cAAAiC,qBAAA,uBAAzCA,qBAAA,CAA2CE,MAAM,EAAE;MACnD,CAAAC,sBAAA,IAAAC,mBAAA,GAAAjE,SAAS,CAACyB,OAAO,EAACa,WAAW,cAAA0B,sBAAA,uBAA7BA,sBAAA,CAAAzB,IAAA,CAAA0B,mBAAA,EAAgC,EAAE,CAAC;KACtC;;;EAIL,MAAM,CAACC,aAAa,EAAEC,eAAe,CAAC,GAAGC,aAAa,CAAC5D,KAAK;IAAA,IAAA6D,qBAAA,EAAAC,kBAAA;IAAA,QAAAD,qBAAA,GAAI,CAAAC,kBAAA,GAAAtE,SAAS,CAACuE,OAAO,EAACC,UAAU,cAAAH,qBAAA,uBAA5BA,qBAAA,CAAA9B,IAAA,CAAA+B,kBAAA,EAA+B9D,KAAK,EAAEX,GAAG,CAACmB,QAAQ,CAAC;IAAC;EAEpH,IAAIhB,SAAS,CAACuE,OAAO,CAACnD,SAAS,EAAE;IAC7BjB,UAAU,CAACsE,WAAW,GAAGN,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAEM,WAAW;IACrDtE,UAAU,CAACuE,WAAW,GAAGP,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAEO,WAAW;IACrDvE,UAAU,CAACwE,UAAU,GAAGR,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAEQ,UAAU;IACnDxE,UAAU,CAACyE,MAAM,GAAGT,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAES,MAAM;IAC3CzE,UAAU,CAAC,uBAAuB,CAAC,GAAG+D,aAAa;;;EAIvD,IAAIpE,KAAK,CAACG,OAAO,CAAC4E,cAAc,EAAE;IAC9B1E,UAAU,CAAC,gBAAgB,CAAC,GAAGN,GAAG,CAACiF,YAAY,EAAE,GAAG,IAAI,GAAGxD,SAAS;;;EAIxE,IAAIzB,GAAG,CAACkC,YAAY,EAAE,EAAE;IACpB5B,UAAU,CAAC,mBAAmB,CAAC,GAAGN,GAAG,CAACmC,aAAa,EAAE,IAAInC,GAAG,CAACkF,uBAAuB,EAAE,GAAG,IAAI,GAAGzD,SAAS;;;EAI7G,IAAI0D,WAAW;EAEf,IAAIhF,SAAS,CAACiF,YAAY,CAAC7D,SAAS,IAAIvB,GAAG,CAACqF,aAAa,EAAE,EAAE;IAAA,IAAAC,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA;IACzDlF,UAAU,CAAC,mBAAmB,CAAC,GAAG,IAAI;IACtC6E,WAAW,IAAAG,qBAAA,GAAG,CAAAC,sBAAA,GAAApF,SAAS,CAACiF,YAAY,EAACK,oBAAoB,cAAAH,qBAAA,wBAAAE,sBAAA,GAA3CF,qBAAA,CAAA5C,IAAA,CAAA6C,sBAAA,EAA8CvF,GAAG,CAACmB,QAAQ,CAAC,cAAAqE,sBAAA,uBAA3DA,sBAAA,EAA+D;;EAGjF,MAAME,OAAO,GAAI1F,GAAG,CAACmB,QAAwC,CAACwE,KAAK;EAEnE,IAAID,OAAO,EAAE;IACT,IAAIA,OAAO,CAACE,MAAM,EAAE;MAChBtF,UAAU,CAAC,sBAAsB,CAAC,GAAGoF,OAAO,CAACE,MAAM;;;EAI3D,MAAMC,GAAG,GAAGrG,cAAK,CAACsG,MAAM,CAAsB,IAAI,CAAC;EACnD,MAAMC,YAAY,GAAGvG,cAAK,CAACsG,MAAM,CAAsB,IAAI,CAAC;EAC5D,MAAME,UAAU,GAAG,CAAC,CAAC1F,UAAU,CAAC,mBAAmB,CAAC;;EAGpD2F,0BAA0B,CAAClG,UAAU,EAAE8F,GAAG,EAAEE,YAAY,EAAEC,UAAU,CAAC;EAErE,MAAM1C,SAAS,GAAG4C,EAAE,CAAC,WAAW,EAAEhG,eAAe,CAACoD,SAAS,EAAE;IACzD,mBAAmB,EAAEnD,SAAS,CAACyB,OAAO,CAACL,SAAS,IAAI,OAAOjB,UAAU,CAACqB,OAAO,KAAK,UAAU;IAC5F,sBAAsB,EAAE,OAAOrB,UAAU,CAACqB,OAAO,KAAK;GACzD,CAAC;EAEF,MAAMwE,SAAS,GAAGnG,GAAG,CAACiF,YAAY,EAAE;EAEpC,oBACIzF,yEACIA,qDAAQc,UAAU;IAAEgD,SAAS,EAAEA,SAAS;IAAEuC,GAAG,EAAEA;MAC1ClG,QAAQ,EACRK,GAAG,CACCoG,eAAe;;GAEfC,MAAM,CAACC,IAAI,IAAI,EAAEH,SAAS,IAAIG,IAAI,CAACC,MAAM,CAAChG,EAAE,KAAK,WAAW,CAAC,CAAC,CAC9D+B,GAAG,CAAC,CAACgE,IAAI,EAAEE,SAAS,mBACjBhH,6BAACiH,IAAI;IAACC,GAAG,EAAEJ,IAAI,CAAC/F,EAAE;IAAE+F,IAAI,EAAEA,IAAI;IAAExG,KAAK,EAAE0G,SAAS;IAAEG,QAAQ,EAAE9G;IAAgB,CAC/E,CAAC,CACL,EACJsF,WAAW,iBACR3F;0BAAwBQ,GAAG,CAACO,EAAE;IAAEsF,GAAG,EAAEE;kBACjCvG;IAAI8D,SAAS,EAAC;KAAiB6B,WAAW,CAAM,CAC/C,IACL,IAAI,CACT;AAEX,CAAC;AAED,SAASc,0BAA0BA,CAC/BlG,UAA4D,EAC5D6G,MAA4C,EAC5Cb,YAAkD,EAClDC,UAAmB;EAEnBxG,cAAK,CAACqH,SAAS,CAAC;IACZ,IAAID,MAAM,CAACE,OAAO,EAAE;MAChB/G,UAAU,CAAC6G,MAAM,CAACE,OAAO,CAACC,qBAAqB,EAAE,CAACC,MAAM,CAAC;;GAEhE,EAAE,EAAE,CAAC;EAENxH,cAAK,CAACqH,SAAS,CAAC;IACZ,IAAID,MAAM,CAACE,OAAO,IAAIf,YAAY,CAACe,OAAO,EAAE;MACxC/G,UAAU,CAAC6G,MAAM,CAACE,OAAO,CAACC,qBAAqB,EAAE,CAACC,MAAM,EAAEjB,YAAY,CAACe,OAAO,CAACC,qBAAqB,EAAE,CAACC,MAAM,CAAC;;GAErH,EAAE,CAAChB,UAAU,CAAC,CAAC;AACpB;;;;"}
@@ -1,5 +1,4 @@
1
1
  import React__default from 'react';
2
- import { useLazyEffect } from '../../../../hooks/useLazyEffect.js';
3
2
  import { useVirtualizer, defaultRangeExtractor } from '@tanstack/react-virtual';
4
3
  import { ROW_HEIGHT_ESTIMATES } from '../util/rows.js';
5
4
  import { Row } from '../components/Row/Row.js';
@@ -55,7 +54,7 @@ function useTableRenderer(renderers, table, tableRef, length, defaultRowActiveIn
55
54
  scrollPaddingEnd: getScrollPaddingEndOffset(table),
56
55
  paddingEnd: getPaddingEndOffset(table, options)
57
56
  });
58
- useLazyEffect(() => {
57
+ React__default.useEffect(() => {
59
58
  virtualiser.measure();
60
59
  }, [table.getState().expanded]);
61
60
  const totalSize = virtualiser.getTotalSize();
@@ -168,14 +167,14 @@ function useRowHeightVirtualisation(table) {
168
167
  return values.length ? values.reduce((a, b) => a + b, 0) / values.length : 0;
169
168
  }, [expandedRowHeightsCache]);
170
169
  // row heights
171
- const estimateSize = React__default.useCallback(index => {
170
+ const estimateSize = index => {
172
171
  var _rows$index, _rows$index$getIsExpa;
173
172
  const rowHeight = tableMeta.rowHeight.height ? ROW_HEIGHT_ESTIMATES[tableMeta.rowHeight.height] : ROW_HEIGHT_ESTIMATES.medium;
174
173
  if (expandedState === true || (_rows$index = rows[index]) !== null && _rows$index !== void 0 && (_rows$index$getIsExpa = _rows$index.getIsExpanded) !== null && _rows$index$getIsExpa !== void 0 && _rows$index$getIsExpa.call(_rows$index)) {
175
174
  return rowHeight + averageExpandedRowHeight;
176
175
  }
177
176
  return rowHeight;
178
- }, [tableMeta.rowHeight.height, averageExpandedRowHeight, expandedState]);
177
+ };
179
178
  const createRowMeasurer = React__default.useCallback((resizeItem, virtualRow) => (rowHeight, expansionHeight) => {
180
179
  // register the expansion height so that it can be used to determine an average
181
180
  if (expansionHeight) {
@@ -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, Row as ReactTableRow } 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, useTableRenderOptions } from '../types';\nimport { TableRef } from '../../types';\nimport { SkeletonRow } from '../components/Row/BuiltIns/SkeletonRow';\nimport { useLazyEffect } from '../../../../hooks/useLazyEffect';\n\n// scroll padding end is designed to always show half of the next row\nfunction getScrollPaddingEndOffset<TType = unknown>(table: ReactTable<TType>) {\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n let offset = 2;\n\n if (tableMeta.footer.isEnabled) {\n offset += 1;\n }\n\n if (table.getHeaderGroups().length > 1) {\n offset += table.getHeaderGroups().length - 1;\n }\n\n let height = ROW_HEIGHT_ESTIMATES.medium * offset;\n\n const bottomRows = table.getBottomRows();\n\n if (bottomRows.length) {\n // 1.4 offsets for half rows and also accounts for increased row heights (which is likely in pinned rows)\n height += ROW_HEIGHT_ESTIMATES[tableMeta.rowHeight.height] * 1.4 * bottomRows.length;\n }\n\n return height;\n}\n\n// scroll padding end is designed to always show half of the next row\nfunction getPaddingEndOffset<TType = unknown>(table: ReactTable<TType>, options?: useTableRenderOptions) {\n const bottomRows = table.getBottomRows() ?? [];\n return ROW_HEIGHT_ESTIMATES.medium * (options?.virtualiserPaddingEndOffset ?? 1) * bottomRows.length;\n}\n\nexport function useTableRenderer<TType = unknown>(\n renderers: useTableRenderers<TType>,\n table: ReactTable<TType>,\n tableRef: React.RefObject<TableRef>,\n length: number,\n defaultRowActiveIndex?: number | undefined,\n options?: useTableRenderOptions\n) {\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const isTableRowGrouped = !!table.getState().grouping?.length;\n const rows = table.getCenterRows() ?? [];\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 - both are always medium row height\n const scrollPaddingStart = ROW_HEIGHT_ESTIMATES.medium;\n\n const count = tableMeta.server.isEnabled && tableMeta.server._experimentalDataLoader2 ? length : rows.length;\n\n const virtualiser = useVirtualizer({\n count,\n estimateSize,\n getScrollElement: () => tableRef.current,\n overscan: tableMeta.printing.isPrinting ? count : undefined,\n rangeExtractor,\n // correctly sets the scroll padding offset, e.g. when keyboard navigating rows in the list\n scrollPaddingStart,\n scrollPaddingEnd: getScrollPaddingEndOffset(table),\n paddingEnd: getPaddingEndOffset(table, options),\n });\n\n useLazyEffect(() => {\n virtualiser.measure();\n }, [table.getState().expanded]);\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 === count - 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, count]\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 && count > 1 ? 1 : 0;\n\n const startValue = isTableRowGrouped\n ? virtualItems[paddingStartIndex]?.start - virtualItems[paddingStartIndex]?.size\n : virtualItems[paddingStartIndex]?.start;\n\n // styling for offsetting rows - this \"is\" the virtualisation\n const [paddingTop, paddingBottom] =\n virtualItems.length > 0\n ? [Math.max(0, startValue ?? 0), Math.max(0, totalSize - (virtualItems[virtualItems.length - 1]?.end ?? 0))]\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 // bottom rows aren't virtualised (they're sticky) but we need to set the height\n if (count || table.getBottomRows().length) {\n style = {\n height: totalSize,\n paddingBottom: isNaN(paddingBottom) ? 0 : paddingBottom,\n paddingTop: isNaN(paddingTop) ? 0 : paddingTop,\n };\n }\n\n // only render non sticky rows\n if (count) {\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 let row: ReactTableRow<TType> | undefined;\n\n if (tableMeta.server.isEnabled && tableMeta.server._experimentalDataLoader2) {\n const currentPageIndex =\n (Math.floor(virtualRow.index / tableMeta.server.pageSize) * tableMeta.server.pageSize) /\n tableMeta.server.pageSize;\n const pagePosition = tableMeta.server.pages?.indexOf(currentPageIndex) ?? -1;\n\n if (pagePosition > -1) {\n // \"flatten\" row indexes down into the dataloader2 dataset size\n // for example, with a page size of 100...\n // row index 14267 is actually one of index 67, 167, 267 etc within the dataset (depending on number of pages stored)\n const fakeIndex = pagePosition * tableMeta.server.pageSize + (virtualRow.index % tableMeta.server.pageSize);\n row = rows[fakeIndex];\n }\n } else {\n row = rows[virtualRow.index];\n }\n\n if (!row?.original) {\n return (\n <SkeletonRow\n key={virtualRow.index}\n index={virtualRow.index}\n scrollDirection={virtualiser.scrollDirection ?? undefined}\n table={table}\n />\n );\n }\n\n const measureRow = createRowMeasurer(virtualiser.resizeItem, virtualRow);\n return (\n <Row\n key={row.id}\n row={row}\n index={virtualRow.index}\n scrollDirection={virtualiser.scrollDirection ?? undefined}\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":["getScrollPaddingEndOffset","table","tableMeta","options","meta","offset","footer","isEnabled","getHeaderGroups","length","height","ROW_HEIGHT_ESTIMATES","medium","bottomRows","getBottomRows","rowHeight","getPaddingEndOffset","_table$getBottomRows","_options$virtualiserP","virtualiserPaddingEndOffset","useTableRenderer","renderers","tableRef","defaultRowActiveIndex","isTableRowGrouped","_table$getState$group","getState","grouping","rows","_table$getCenterRows","getCenterRows","createRowMeasurer","estimateSize","useRowHeightVirtualisation","rangeExtractor","useRowGroupVirtualisation","scrollPaddingStart","count","server","_experimentalDataLoader2","virtualiser","useVirtualizer","getScrollElement","current","overscan","printing","isPrinting","undefined","scrollPaddingEnd","paddingEnd","useLazyEffect","measure","expanded","totalSize","getTotalSize","virtualItems","getVirtualItems","scrollToIndex","React","useCallback","index","align","behavior","notSmooth","scrollToOffset","scrollTop","scrollHeight","paddingStartIndex","startValue","_virtualItems$padding","start","_virtualItems$padding2","size","_virtualItems$padding3","paddingTop","paddingBottom","Math","max","_virtualItems$end","_virtualItems","end","useEffect","style","content","isNaN","map","virtualRow","row","_tableMeta$server$pag","_tableMeta$server$pag2","currentPageIndex","floor","pageSize","pagePosition","pages","indexOf","fakeIndex","_row","original","_virtualiser$scrollDi","SkeletonRow","key","scrollDirection","measureRow","resizeItem","Row","id","_virtualiser$scrollDi2","renderer","cellRenderer","cell","getRowModel","expandedState","expandedRowHeightsCache","setExpandedRowHeightsCache","useState","averageExpandedRowHeight","useMemo","values","Object","reduce","a","b","_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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"}
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, Row as ReactTableRow } 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, useTableRenderOptions } from '../types';\nimport { TableRef } from '../../types';\nimport { SkeletonRow } from '../components/Row/BuiltIns/SkeletonRow';\n\n// scroll padding end is designed to always show half of the next row\nfunction getScrollPaddingEndOffset<TType = unknown>(table: ReactTable<TType>) {\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n let offset = 2;\n\n if (tableMeta.footer.isEnabled) {\n offset += 1;\n }\n\n if (table.getHeaderGroups().length > 1) {\n offset += table.getHeaderGroups().length - 1;\n }\n\n let height = ROW_HEIGHT_ESTIMATES.medium * offset;\n\n const bottomRows = table.getBottomRows();\n\n if (bottomRows.length) {\n // 1.4 offsets for half rows and also accounts for increased row heights (which is likely in pinned rows)\n height += ROW_HEIGHT_ESTIMATES[tableMeta.rowHeight.height] * 1.4 * bottomRows.length;\n }\n\n return height;\n}\n\n// scroll padding end is designed to always show half of the next row\nfunction getPaddingEndOffset<TType = unknown>(table: ReactTable<TType>, options?: useTableRenderOptions) {\n const bottomRows = table.getBottomRows() ?? [];\n return ROW_HEIGHT_ESTIMATES.medium * (options?.virtualiserPaddingEndOffset ?? 1) * bottomRows.length;\n}\n\nexport function useTableRenderer<TType = unknown>(\n renderers: useTableRenderers<TType>,\n table: ReactTable<TType>,\n tableRef: React.RefObject<TableRef>,\n length: number,\n defaultRowActiveIndex?: number | undefined,\n options?: useTableRenderOptions\n) {\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const isTableRowGrouped = !!table.getState().grouping?.length;\n const rows = table.getCenterRows() ?? [];\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 - both are always medium row height\n const scrollPaddingStart = ROW_HEIGHT_ESTIMATES.medium;\n\n const count = tableMeta.server.isEnabled && tableMeta.server._experimentalDataLoader2 ? length : rows.length;\n\n const virtualiser = useVirtualizer({\n count,\n estimateSize,\n getScrollElement: () => tableRef.current,\n overscan: tableMeta.printing.isPrinting ? count : undefined,\n rangeExtractor,\n // correctly sets the scroll padding offset, e.g. when keyboard navigating rows in the list\n scrollPaddingStart,\n scrollPaddingEnd: getScrollPaddingEndOffset(table),\n paddingEnd: getPaddingEndOffset(table, options),\n });\n\n React.useEffect(() => {\n virtualiser.measure();\n }, [table.getState().expanded]);\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 === count - 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, count]\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 && count > 1 ? 1 : 0;\n\n const startValue = isTableRowGrouped\n ? virtualItems[paddingStartIndex]?.start - virtualItems[paddingStartIndex]?.size\n : virtualItems[paddingStartIndex]?.start;\n\n // styling for offsetting rows - this \"is\" the virtualisation\n const [paddingTop, paddingBottom] =\n virtualItems.length > 0\n ? [Math.max(0, startValue ?? 0), Math.max(0, totalSize - (virtualItems[virtualItems.length - 1]?.end ?? 0))]\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 // bottom rows aren't virtualised (they're sticky) but we need to set the height\n if (count || table.getBottomRows().length) {\n style = {\n height: totalSize,\n paddingBottom: isNaN(paddingBottom) ? 0 : paddingBottom,\n paddingTop: isNaN(paddingTop) ? 0 : paddingTop,\n };\n }\n\n // only render non sticky rows\n if (count) {\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 let row: ReactTableRow<TType> | undefined;\n\n if (tableMeta.server.isEnabled && tableMeta.server._experimentalDataLoader2) {\n const currentPageIndex =\n (Math.floor(virtualRow.index / tableMeta.server.pageSize) * tableMeta.server.pageSize) /\n tableMeta.server.pageSize;\n const pagePosition = tableMeta.server.pages?.indexOf(currentPageIndex) ?? -1;\n\n if (pagePosition > -1) {\n // \"flatten\" row indexes down into the dataloader2 dataset size\n // for example, with a page size of 100...\n // row index 14267 is actually one of index 67, 167, 267 etc within the dataset (depending on number of pages stored)\n const fakeIndex = pagePosition * tableMeta.server.pageSize + (virtualRow.index % tableMeta.server.pageSize);\n row = rows[fakeIndex];\n }\n } else {\n row = rows[virtualRow.index];\n }\n\n if (!row?.original) {\n return (\n <SkeletonRow\n key={virtualRow.index}\n index={virtualRow.index}\n scrollDirection={virtualiser.scrollDirection ?? undefined}\n table={table}\n />\n );\n }\n\n const measureRow = createRowMeasurer(virtualiser.resizeItem, virtualRow);\n return (\n <Row\n key={row.id}\n row={row}\n index={virtualRow.index}\n scrollDirection={virtualiser.scrollDirection ?? undefined}\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 = (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\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":["getScrollPaddingEndOffset","table","tableMeta","options","meta","offset","footer","isEnabled","getHeaderGroups","length","height","ROW_HEIGHT_ESTIMATES","medium","bottomRows","getBottomRows","rowHeight","getPaddingEndOffset","_table$getBottomRows","_options$virtualiserP","virtualiserPaddingEndOffset","useTableRenderer","renderers","tableRef","defaultRowActiveIndex","isTableRowGrouped","_table$getState$group","getState","grouping","rows","_table$getCenterRows","getCenterRows","createRowMeasurer","estimateSize","useRowHeightVirtualisation","rangeExtractor","useRowGroupVirtualisation","scrollPaddingStart","count","server","_experimentalDataLoader2","virtualiser","useVirtualizer","getScrollElement","current","overscan","printing","isPrinting","undefined","scrollPaddingEnd","paddingEnd","React","useEffect","measure","expanded","totalSize","getTotalSize","virtualItems","getVirtualItems","scrollToIndex","useCallback","index","align","behavior","notSmooth","scrollToOffset","scrollTop","scrollHeight","paddingStartIndex","startValue","_virtualItems$padding","start","_virtualItems$padding2","size","_virtualItems$padding3","paddingTop","paddingBottom","Math","max","_virtualItems$end","_virtualItems","end","style","content","isNaN","map","virtualRow","row","_tableMeta$server$pag","_tableMeta$server$pag2","currentPageIndex","floor","pageSize","pagePosition","pages","indexOf","fakeIndex","_row","original","_virtualiser$scrollDi","SkeletonRow","key","scrollDirection","measureRow","resizeItem","Row","id","_virtualiser$scrollDi2","renderer","cellRenderer","cell","getRowModel","expandedState","expandedRowHeightsCache","setExpandedRowHeightsCache","useState","averageExpandedRowHeight","useMemo","values","Object","reduce","a","b","_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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"}
@@ -12470,7 +12470,7 @@ function useTableRenderer(renderers, table, tableRef, length, defaultRowActiveIn
12470
12470
  scrollPaddingEnd: getScrollPaddingEndOffset(table),
12471
12471
  paddingEnd: getPaddingEndOffset(table, options)
12472
12472
  });
12473
- useLazyEffect(() => {
12473
+ React__default.useEffect(() => {
12474
12474
  virtualiser.measure();
12475
12475
  }, [table.getState().expanded]);
12476
12476
  const totalSize = virtualiser.getTotalSize();
@@ -12583,14 +12583,14 @@ function useRowHeightVirtualisation(table) {
12583
12583
  return values.length ? values.reduce((a, b) => a + b, 0) / values.length : 0;
12584
12584
  }, [expandedRowHeightsCache]);
12585
12585
  // row heights
12586
- const estimateSize = React__default.useCallback(index => {
12586
+ const estimateSize = index => {
12587
12587
  var _rows$index, _rows$index$getIsExpa;
12588
12588
  const rowHeight = tableMeta.rowHeight.height ? ROW_HEIGHT_ESTIMATES[tableMeta.rowHeight.height] : ROW_HEIGHT_ESTIMATES.medium;
12589
12589
  if (expandedState === true || (_rows$index = rows[index]) !== null && _rows$index !== void 0 && (_rows$index$getIsExpa = _rows$index.getIsExpanded) !== null && _rows$index$getIsExpa !== void 0 && _rows$index$getIsExpa.call(_rows$index)) {
12590
12590
  return rowHeight + averageExpandedRowHeight;
12591
12591
  }
12592
12592
  return rowHeight;
12593
- }, [tableMeta.rowHeight.height, averageExpandedRowHeight, expandedState]);
12593
+ };
12594
12594
  const createRowMeasurer = React__default.useCallback((resizeItem, virtualRow) => (rowHeight, expansionHeight) => {
12595
12595
  // register the expansion height so that it can be used to determine an average
12596
12596
  if (expansionHeight) {
@@ -13294,7 +13294,8 @@ const DisplayRow = /*#__PURE__*/React__default.memo(function DisplayRow(props) {
13294
13294
  const ref = React__default.useRef(null);
13295
13295
  const expansionRef = React__default.useRef(null);
13296
13296
  const isExpanded = !!attributes['data-row-expanded'];
13297
- useSetVirtualisedRowHeight(measureRow, ref.current, expansionRef.current, isExpanded);
13297
+ // measure row and expanded rows
13298
+ useSetVirtualisedRowHeight(measureRow, ref, expansionRef, isExpanded);
13298
13299
  const className = cn('group/row', otherAttributes.className, {
13299
13300
  'hover:cursor-grab': tableMeta.rowDrag.isEnabled && typeof attributes.onClick !== 'function',
13300
13301
  'hover:cursor-pointer': typeof attributes.onClick === 'function'
@@ -13317,17 +13318,17 @@ const DisplayRow = /*#__PURE__*/React__default.memo(function DisplayRow(props) {
13317
13318
  className: "col-span-full"
13318
13319
  }, expandedRow))) : null);
13319
13320
  });
13320
- function useSetVirtualisedRowHeight(measureRow, rowEl, expansionEl, isExpanded) {
13321
+ function useSetVirtualisedRowHeight(measureRow, rowRef, expansionRef, isExpanded) {
13321
13322
  React__default.useEffect(() => {
13322
- if (rowEl) {
13323
- const height = rowEl.getBoundingClientRect().height;
13324
- if (isExpanded && expansionEl) {
13325
- measureRow(height, expansionEl.getBoundingClientRect().height);
13326
- } else {
13327
- measureRow(height);
13328
- }
13323
+ if (rowRef.current) {
13324
+ measureRow(rowRef.current.getBoundingClientRect().height);
13325
+ }
13326
+ }, []);
13327
+ React__default.useEffect(() => {
13328
+ if (rowRef.current && expansionRef.current) {
13329
+ measureRow(rowRef.current.getBoundingClientRect().height, expansionRef.current.getBoundingClientRect().height);
13329
13330
  }
13330
- }, [isExpanded, rowEl, expansionEl]);
13331
+ }, [isExpanded]);
13331
13332
  }
13332
13333
 
13333
13334
  function DisplayCell(props) {