UNPKG

@justjarethb/table-core

Version:

Fork of @tanstack/table-core with support for event listeners in different windows

1,184 lines (1,150 loc) 147 kB
/** * table-core * * Copyright (c) TanStack * * This source code is licensed under the MIT license found in the * LICENSE.md file in the root directory of this source tree. * * @license MIT */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.TableCore = {})); })(this, (function (exports) { 'use strict'; // Is this type a tuple? // If this type is a tuple, what indices are allowed? /// function functionalUpdate(updater, input) { return typeof updater === 'function' ? updater(input) : updater; } function noop() { // } function makeStateUpdater(key, instance) { return updater => { instance.setState(old => { return { ...old, [key]: functionalUpdate(updater, old[key]) }; }); }; } function isFunction(d) { return d instanceof Function; } function isNumberArray(d) { return Array.isArray(d) && d.every(val => typeof val === 'number'); } function flattenBy(arr, getChildren) { const flat = []; const recurse = subArr => { subArr.forEach(item => { flat.push(item); const children = getChildren(item); if (children != null && children.length) { recurse(children); } }); }; recurse(arr); return flat; } function memo(getDeps, fn, opts) { let deps = []; let result; return () => { let depTime; if (opts.key && opts.debug) depTime = Date.now(); const newDeps = getDeps(); const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep); if (!depsChanged) { return result; } deps = newDeps; let resultTime; if (opts.key && opts.debug) resultTime = Date.now(); result = fn(...newDeps); opts == null ? void 0 : opts.onChange == null ? void 0 : opts.onChange(result); if (opts.key && opts.debug) { if (opts != null && opts.debug()) { const depEndTime = Math.round((Date.now() - depTime) * 100) / 100; const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100; const resultFpsPercentage = resultEndTime / 16; const pad = (str, num) => { str = String(str); while (str.length < num) { str = ' ' + str; } return str; }; console.info(`%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`, ` font-size: .6rem; font-weight: bold; color: hsl(${Math.max(0, Math.min(120 - 120 * resultFpsPercentage, 120))}deg 100% 31%);`, opts == null ? void 0 : opts.key); } } return result; }; } function createColumn(table, columnDef, depth, parent) { var _ref, _resolvedColumnDef$id; const defaultColumn = table._getDefaultColumnDef(); const resolvedColumnDef = { ...defaultColumn, ...columnDef }; const accessorKey = resolvedColumnDef.accessorKey; let id = (_ref = (_resolvedColumnDef$id = resolvedColumnDef.id) != null ? _resolvedColumnDef$id : accessorKey ? accessorKey.replace('.', '_') : undefined) != null ? _ref : typeof resolvedColumnDef.header === 'string' ? resolvedColumnDef.header : undefined; let accessorFn; if (resolvedColumnDef.accessorFn) { accessorFn = resolvedColumnDef.accessorFn; } else if (accessorKey) { // Support deep accessor keys if (accessorKey.includes('.')) { accessorFn = originalRow => { let result = originalRow; for (const key of accessorKey.split('.')) { var _result; result = (_result = result) == null ? void 0 : _result[key]; if (result === undefined) { console.warn(`"${key}" in deeply nested key "${accessorKey}" returned undefined.`); } } return result; }; } else { accessorFn = originalRow => originalRow[resolvedColumnDef.accessorKey]; } } if (!id) { { throw new Error(resolvedColumnDef.accessorFn ? `Columns require an id when using an accessorFn` : `Columns require an id when using a non-string header`); } } let column = { id: `${String(id)}`, accessorFn, parent: parent, depth, columnDef: resolvedColumnDef, columns: [], getFlatColumns: memo(() => [true], () => { var _column$columns; return [column, ...((_column$columns = column.columns) == null ? void 0 : _column$columns.flatMap(d => d.getFlatColumns()))]; }, { key: "development" === 'production' , debug: () => { var _table$options$debugA; return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugColumns; } }), getLeafColumns: memo(() => [table._getOrderColumnsFn()], orderColumns => { var _column$columns2; if ((_column$columns2 = column.columns) != null && _column$columns2.length) { let leafColumns = column.columns.flatMap(column => column.getLeafColumns()); return orderColumns(leafColumns); } return [column]; }, { key: "development" === 'production' , debug: () => { var _table$options$debugA2; return (_table$options$debugA2 = table.options.debugAll) != null ? _table$options$debugA2 : table.options.debugColumns; } }) }; column = table._features.reduce((obj, feature) => { return Object.assign(obj, feature.createColumn == null ? void 0 : feature.createColumn(column, table)); }, column); // Yes, we have to convert table to uknown, because we know more than the compiler here. return column; } // function createHeader(table, column, options) { var _options$id; const id = (_options$id = options.id) != null ? _options$id : column.id; let header = { id, column, index: options.index, isPlaceholder: !!options.isPlaceholder, placeholderId: options.placeholderId, depth: options.depth, subHeaders: [], colSpan: 0, rowSpan: 0, headerGroup: null, getLeafHeaders: () => { const leafHeaders = []; const recurseHeader = h => { if (h.subHeaders && h.subHeaders.length) { h.subHeaders.map(recurseHeader); } leafHeaders.push(h); }; recurseHeader(header); return leafHeaders; }, getContext: () => ({ table, header: header, column }) }; table._features.forEach(feature => { Object.assign(header, feature.createHeader == null ? void 0 : feature.createHeader(header, table)); }); return header; } const Headers = { createTable: table => { return { // Header Groups getHeaderGroups: memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, leafColumns, left, right) => { var _left$map$filter, _right$map$filter; const leftColumns = (_left$map$filter = left == null ? void 0 : left.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _left$map$filter : []; const rightColumns = (_right$map$filter = right == null ? void 0 : right.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _right$map$filter : []; const centerColumns = leafColumns.filter(column => !(left != null && left.includes(column.id)) && !(right != null && right.includes(column.id))); const headerGroups = buildHeaderGroups(allColumns, [...leftColumns, ...centerColumns, ...rightColumns], table); return headerGroups; }, { key: 'getHeaderGroups', debug: () => { var _table$options$debugA; return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugHeaders; } }), getCenterHeaderGroups: memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, leafColumns, left, right) => { leafColumns = leafColumns.filter(column => !(left != null && left.includes(column.id)) && !(right != null && right.includes(column.id))); return buildHeaderGroups(allColumns, leafColumns, table, 'center'); }, { key: 'getCenterHeaderGroups', debug: () => { var _table$options$debugA2; return (_table$options$debugA2 = table.options.debugAll) != null ? _table$options$debugA2 : table.options.debugHeaders; } }), getLeftHeaderGroups: memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left], (allColumns, leafColumns, left) => { var _left$map$filter2; const orderedLeafColumns = (_left$map$filter2 = left == null ? void 0 : left.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _left$map$filter2 : []; return buildHeaderGroups(allColumns, orderedLeafColumns, table, 'left'); }, { key: 'getLeftHeaderGroups', debug: () => { var _table$options$debugA3; return (_table$options$debugA3 = table.options.debugAll) != null ? _table$options$debugA3 : table.options.debugHeaders; } }), getRightHeaderGroups: memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.right], (allColumns, leafColumns, right) => { var _right$map$filter2; const orderedLeafColumns = (_right$map$filter2 = right == null ? void 0 : right.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _right$map$filter2 : []; return buildHeaderGroups(allColumns, orderedLeafColumns, table, 'right'); }, { key: 'getRightHeaderGroups', debug: () => { var _table$options$debugA4; return (_table$options$debugA4 = table.options.debugAll) != null ? _table$options$debugA4 : table.options.debugHeaders; } }), // Footer Groups getFooterGroups: memo(() => [table.getHeaderGroups()], headerGroups => { return [...headerGroups].reverse(); }, { key: 'getFooterGroups', debug: () => { var _table$options$debugA5; return (_table$options$debugA5 = table.options.debugAll) != null ? _table$options$debugA5 : table.options.debugHeaders; } }), getLeftFooterGroups: memo(() => [table.getLeftHeaderGroups()], headerGroups => { return [...headerGroups].reverse(); }, { key: 'getLeftFooterGroups', debug: () => { var _table$options$debugA6; return (_table$options$debugA6 = table.options.debugAll) != null ? _table$options$debugA6 : table.options.debugHeaders; } }), getCenterFooterGroups: memo(() => [table.getCenterHeaderGroups()], headerGroups => { return [...headerGroups].reverse(); }, { key: 'getCenterFooterGroups', debug: () => { var _table$options$debugA7; return (_table$options$debugA7 = table.options.debugAll) != null ? _table$options$debugA7 : table.options.debugHeaders; } }), getRightFooterGroups: memo(() => [table.getRightHeaderGroups()], headerGroups => { return [...headerGroups].reverse(); }, { key: 'getRightFooterGroups', debug: () => { var _table$options$debugA8; return (_table$options$debugA8 = table.options.debugAll) != null ? _table$options$debugA8 : table.options.debugHeaders; } }), // Flat Headers getFlatHeaders: memo(() => [table.getHeaderGroups()], headerGroups => { return headerGroups.map(headerGroup => { return headerGroup.headers; }).flat(); }, { key: 'getFlatHeaders', debug: () => { var _table$options$debugA9; return (_table$options$debugA9 = table.options.debugAll) != null ? _table$options$debugA9 : table.options.debugHeaders; } }), getLeftFlatHeaders: memo(() => [table.getLeftHeaderGroups()], left => { return left.map(headerGroup => { return headerGroup.headers; }).flat(); }, { key: 'getLeftFlatHeaders', debug: () => { var _table$options$debugA10; return (_table$options$debugA10 = table.options.debugAll) != null ? _table$options$debugA10 : table.options.debugHeaders; } }), getCenterFlatHeaders: memo(() => [table.getCenterHeaderGroups()], left => { return left.map(headerGroup => { return headerGroup.headers; }).flat(); }, { key: 'getCenterFlatHeaders', debug: () => { var _table$options$debugA11; return (_table$options$debugA11 = table.options.debugAll) != null ? _table$options$debugA11 : table.options.debugHeaders; } }), getRightFlatHeaders: memo(() => [table.getRightHeaderGroups()], left => { return left.map(headerGroup => { return headerGroup.headers; }).flat(); }, { key: 'getRightFlatHeaders', debug: () => { var _table$options$debugA12; return (_table$options$debugA12 = table.options.debugAll) != null ? _table$options$debugA12 : table.options.debugHeaders; } }), // Leaf Headers getCenterLeafHeaders: memo(() => [table.getCenterFlatHeaders()], flatHeaders => { return flatHeaders.filter(header => { var _header$subHeaders; return !((_header$subHeaders = header.subHeaders) != null && _header$subHeaders.length); }); }, { key: 'getCenterLeafHeaders', debug: () => { var _table$options$debugA13; return (_table$options$debugA13 = table.options.debugAll) != null ? _table$options$debugA13 : table.options.debugHeaders; } }), getLeftLeafHeaders: memo(() => [table.getLeftFlatHeaders()], flatHeaders => { return flatHeaders.filter(header => { var _header$subHeaders2; return !((_header$subHeaders2 = header.subHeaders) != null && _header$subHeaders2.length); }); }, { key: 'getLeftLeafHeaders', debug: () => { var _table$options$debugA14; return (_table$options$debugA14 = table.options.debugAll) != null ? _table$options$debugA14 : table.options.debugHeaders; } }), getRightLeafHeaders: memo(() => [table.getRightFlatHeaders()], flatHeaders => { return flatHeaders.filter(header => { var _header$subHeaders3; return !((_header$subHeaders3 = header.subHeaders) != null && _header$subHeaders3.length); }); }, { key: 'getRightLeafHeaders', debug: () => { var _table$options$debugA15; return (_table$options$debugA15 = table.options.debugAll) != null ? _table$options$debugA15 : table.options.debugHeaders; } }), getLeafHeaders: memo(() => [table.getLeftHeaderGroups(), table.getCenterHeaderGroups(), table.getRightHeaderGroups()], (left, center, right) => { var _left$0$headers, _left$, _center$0$headers, _center$, _right$0$headers, _right$; return [...((_left$0$headers = (_left$ = left[0]) == null ? void 0 : _left$.headers) != null ? _left$0$headers : []), ...((_center$0$headers = (_center$ = center[0]) == null ? void 0 : _center$.headers) != null ? _center$0$headers : []), ...((_right$0$headers = (_right$ = right[0]) == null ? void 0 : _right$.headers) != null ? _right$0$headers : [])].map(header => { return header.getLeafHeaders(); }).flat(); }, { key: 'getLeafHeaders', debug: () => { var _table$options$debugA16; return (_table$options$debugA16 = table.options.debugAll) != null ? _table$options$debugA16 : table.options.debugHeaders; } }) }; } }; function buildHeaderGroups(allColumns, columnsToGroup, table, headerFamily) { var _headerGroups$0$heade, _headerGroups$; // Find the max depth of the columns: // build the leaf column row // build each buffer row going up // placeholder for non-existent level // real column for existing level let maxDepth = 0; const findMaxDepth = function (columns, depth) { if (depth === void 0) { depth = 1; } maxDepth = Math.max(maxDepth, depth); columns.filter(column => column.getIsVisible()).forEach(column => { var _column$columns; if ((_column$columns = column.columns) != null && _column$columns.length) { findMaxDepth(column.columns, depth + 1); } }, 0); }; findMaxDepth(allColumns); let headerGroups = []; const createHeaderGroup = (headersToGroup, depth) => { // The header group we are creating const headerGroup = { depth, id: [headerFamily, `${depth}`].filter(Boolean).join('_'), headers: [] }; // The parent columns we're going to scan next const pendingParentHeaders = []; // Scan each column for parents headersToGroup.forEach(headerToGroup => { // What is the latest (last) parent column? const latestPendingParentHeader = [...pendingParentHeaders].reverse()[0]; const isLeafHeader = headerToGroup.column.depth === headerGroup.depth; let column; let isPlaceholder = false; if (isLeafHeader && headerToGroup.column.parent) { // The parent header is new column = headerToGroup.column.parent; } else { // The parent header is repeated column = headerToGroup.column; isPlaceholder = true; } if (latestPendingParentHeader && (latestPendingParentHeader == null ? void 0 : latestPendingParentHeader.column) === column) { // This column is repeated. Add it as a sub header to the next batch latestPendingParentHeader.subHeaders.push(headerToGroup); } else { // This is a new header. Let's create it const header = createHeader(table, column, { id: [headerFamily, depth, column.id, headerToGroup == null ? void 0 : headerToGroup.id].filter(Boolean).join('_'), isPlaceholder, placeholderId: isPlaceholder ? `${pendingParentHeaders.filter(d => d.column === column).length}` : undefined, depth, index: pendingParentHeaders.length }); // Add the headerToGroup as a subHeader of the new header header.subHeaders.push(headerToGroup); // Add the new header to the pendingParentHeaders to get grouped // in the next batch pendingParentHeaders.push(header); } headerGroup.headers.push(headerToGroup); headerToGroup.headerGroup = headerGroup; }); headerGroups.push(headerGroup); if (depth > 0) { createHeaderGroup(pendingParentHeaders, depth - 1); } }; const bottomHeaders = columnsToGroup.map((column, index) => createHeader(table, column, { depth: maxDepth, index })); createHeaderGroup(bottomHeaders, maxDepth - 1); headerGroups.reverse(); // headerGroups = headerGroups.filter(headerGroup => { // return !headerGroup.headers.every(header => header.isPlaceholder) // }) const recurseHeadersForSpans = headers => { const filteredHeaders = headers.filter(header => header.column.getIsVisible()); return filteredHeaders.map(header => { let colSpan = 0; let rowSpan = 0; let childRowSpans = [0]; if (header.subHeaders && header.subHeaders.length) { childRowSpans = []; recurseHeadersForSpans(header.subHeaders).forEach(_ref => { let { colSpan: childColSpan, rowSpan: childRowSpan } = _ref; colSpan += childColSpan; childRowSpans.push(childRowSpan); }); } else { colSpan = 1; } const minChildRowSpan = Math.min(...childRowSpans); rowSpan = rowSpan + minChildRowSpan; header.colSpan = colSpan; header.rowSpan = rowSpan; return { colSpan, rowSpan }; }); }; recurseHeadersForSpans((_headerGroups$0$heade = (_headerGroups$ = headerGroups[0]) == null ? void 0 : _headerGroups$.headers) != null ? _headerGroups$0$heade : []); return headerGroups; } // const defaultColumnSizing = { size: 150, minSize: 20, maxSize: Number.MAX_SAFE_INTEGER }; const getDefaultColumnSizingInfoState = () => ({ startOffset: null, startSize: null, deltaOffset: null, deltaPercentage: null, isResizingColumn: false, columnSizingStart: [] }); const ColumnSizing = { getDefaultColumnDef: () => { return defaultColumnSizing; }, getInitialState: state => { return { columnSizing: {}, columnSizingInfo: getDefaultColumnSizingInfoState(), ...state }; }, getDefaultOptions: table => { return { columnResizeMode: 'onEnd', onColumnSizingChange: makeStateUpdater('columnSizing', table), onColumnSizingInfoChange: makeStateUpdater('columnSizingInfo', table) }; }, createColumn: (column, table) => { return { getSize: () => { var _column$columnDef$min, _ref, _column$columnDef$max; const columnSize = table.getState().columnSizing[column.id]; return Math.min(Math.max((_column$columnDef$min = column.columnDef.minSize) != null ? _column$columnDef$min : defaultColumnSizing.minSize, (_ref = columnSize != null ? columnSize : column.columnDef.size) != null ? _ref : defaultColumnSizing.size), (_column$columnDef$max = column.columnDef.maxSize) != null ? _column$columnDef$max : defaultColumnSizing.maxSize); }, getStart: position => { const columns = !position ? table.getVisibleLeafColumns() : position === 'left' ? table.getLeftVisibleLeafColumns() : table.getRightVisibleLeafColumns(); const index = columns.findIndex(d => d.id === column.id); if (index > 0) { const prevSiblingColumn = columns[index - 1]; return prevSiblingColumn.getStart(position) + prevSiblingColumn.getSize(); } return 0; }, resetSize: () => { table.setColumnSizing(_ref2 => { let { [column.id]: _, ...rest } = _ref2; return rest; }); }, getCanResize: () => { var _column$columnDef$ena, _table$options$enable; return ((_column$columnDef$ena = column.columnDef.enableResizing) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableColumnResizing) != null ? _table$options$enable : true); }, getIsResizing: () => { return table.getState().columnSizingInfo.isResizingColumn === column.id; } }; }, createHeader: (header, table) => { return { getSize: () => { let sum = 0; const recurse = header => { if (header.subHeaders.length) { header.subHeaders.forEach(recurse); } else { var _header$column$getSiz; sum += (_header$column$getSiz = header.column.getSize()) != null ? _header$column$getSiz : 0; } }; recurse(header); return sum; }, getStart: () => { if (header.index > 0) { const prevSiblingHeader = header.headerGroup.headers[header.index - 1]; return prevSiblingHeader.getStart() + prevSiblingHeader.getSize(); } return 0; }, getResizeHandler: function (contextDocument) { if (contextDocument === void 0) { contextDocument = document; } const column = table.getColumn(header.column.id); const canResize = column == null ? void 0 : column.getCanResize(); return e => { if (!column || !canResize) { return; } e.persist == null ? void 0 : e.persist(); if (isTouchStartEvent(e)) { // lets not respond to multiple touches (e.g. 2 or 3 fingers) if (e.touches && e.touches.length > 1) { return; } } const startSize = header.getSize(); const columnSizingStart = header ? header.getLeafHeaders().map(d => [d.column.id, d.column.getSize()]) : [[column.id, column.getSize()]]; const clientX = isTouchStartEvent(e) ? Math.round(e.touches[0].clientX) : e.clientX; const newColumnSizing = {}; const updateOffset = (eventType, clientXPos) => { if (typeof clientXPos !== 'number') { return; } table.setColumnSizingInfo(old => { var _old$startOffset, _old$startSize; const deltaOffset = clientXPos - ((_old$startOffset = old == null ? void 0 : old.startOffset) != null ? _old$startOffset : 0); const deltaPercentage = Math.max(deltaOffset / ((_old$startSize = old == null ? void 0 : old.startSize) != null ? _old$startSize : 0), -0.999999); old.columnSizingStart.forEach(_ref3 => { let [columnId, headerSize] = _ref3; newColumnSizing[columnId] = Math.round(Math.max(headerSize + headerSize * deltaPercentage, 0) * 100) / 100; }); return { ...old, deltaOffset, deltaPercentage }; }); if (table.options.columnResizeMode === 'onChange' || eventType === 'end') { table.setColumnSizing(old => ({ ...old, ...newColumnSizing })); } }; const onMove = clientXPos => updateOffset('move', clientXPos); const onEnd = clientXPos => { updateOffset('end', clientXPos); table.setColumnSizingInfo(old => ({ ...old, isResizingColumn: false, startOffset: null, startSize: null, deltaOffset: null, deltaPercentage: null, columnSizingStart: [] })); }; const mouseEvents = { moveHandler: e => onMove(e.clientX), upHandler: e => { contextDocument.removeEventListener('mousemove', mouseEvents.moveHandler); contextDocument.removeEventListener('mouseup', mouseEvents.upHandler); onEnd(e.clientX); } }; const touchEvents = { moveHandler: e => { if (e.cancelable) { e.preventDefault(); e.stopPropagation(); } onMove(e.touches[0].clientX); return false; }, upHandler: e => { var _e$touches$; contextDocument.removeEventListener('touchmove', touchEvents.moveHandler); contextDocument.removeEventListener('touchend', touchEvents.upHandler); if (e.cancelable) { e.preventDefault(); e.stopPropagation(); } onEnd((_e$touches$ = e.touches[0]) == null ? void 0 : _e$touches$.clientX); } }; const passiveIfSupported = passiveEventSupported() ? { passive: false } : false; if (isTouchStartEvent(e)) { contextDocument.addEventListener('touchmove', touchEvents.moveHandler, passiveIfSupported); contextDocument.addEventListener('touchend', touchEvents.upHandler, passiveIfSupported); } else { contextDocument.addEventListener('mousemove', mouseEvents.moveHandler, passiveIfSupported); contextDocument.addEventListener('mouseup', mouseEvents.upHandler, passiveIfSupported); } table.setColumnSizingInfo(old => ({ ...old, startOffset: clientX, startSize, deltaOffset: 0, deltaPercentage: 0, columnSizingStart, isResizingColumn: column.id })); }; } }; }, createTable: table => { return { setColumnSizing: updater => table.options.onColumnSizingChange == null ? void 0 : table.options.onColumnSizingChange(updater), setColumnSizingInfo: updater => table.options.onColumnSizingInfoChange == null ? void 0 : table.options.onColumnSizingInfoChange(updater), resetColumnSizing: defaultState => { var _table$initialState$c; table.setColumnSizing(defaultState ? {} : (_table$initialState$c = table.initialState.columnSizing) != null ? _table$initialState$c : {}); }, resetHeaderSizeInfo: defaultState => { var _table$initialState$c2; table.setColumnSizingInfo(defaultState ? getDefaultColumnSizingInfoState() : (_table$initialState$c2 = table.initialState.columnSizingInfo) != null ? _table$initialState$c2 : getDefaultColumnSizingInfoState()); }, getTotalSize: () => { var _table$getHeaderGroup, _table$getHeaderGroup2; return (_table$getHeaderGroup = (_table$getHeaderGroup2 = table.getHeaderGroups()[0]) == null ? void 0 : _table$getHeaderGroup2.headers.reduce((sum, header) => { return sum + header.getSize(); }, 0)) != null ? _table$getHeaderGroup : 0; }, getLeftTotalSize: () => { var _table$getLeftHeaderG, _table$getLeftHeaderG2; return (_table$getLeftHeaderG = (_table$getLeftHeaderG2 = table.getLeftHeaderGroups()[0]) == null ? void 0 : _table$getLeftHeaderG2.headers.reduce((sum, header) => { return sum + header.getSize(); }, 0)) != null ? _table$getLeftHeaderG : 0; }, getCenterTotalSize: () => { var _table$getCenterHeade, _table$getCenterHeade2; return (_table$getCenterHeade = (_table$getCenterHeade2 = table.getCenterHeaderGroups()[0]) == null ? void 0 : _table$getCenterHeade2.headers.reduce((sum, header) => { return sum + header.getSize(); }, 0)) != null ? _table$getCenterHeade : 0; }, getRightTotalSize: () => { var _table$getRightHeader, _table$getRightHeader2; return (_table$getRightHeader = (_table$getRightHeader2 = table.getRightHeaderGroups()[0]) == null ? void 0 : _table$getRightHeader2.headers.reduce((sum, header) => { return sum + header.getSize(); }, 0)) != null ? _table$getRightHeader : 0; } }; } }; let passiveSupported = null; function passiveEventSupported() { if (typeof passiveSupported === 'boolean') return passiveSupported; let supported = false; try { const options = { get passive() { supported = true; return false; } }; const noop = () => {}; window.addEventListener('test', noop, options); window.removeEventListener('test', noop); } catch (err) { supported = false; } passiveSupported = supported; return passiveSupported; } function isTouchStartEvent(e) { return e.type === 'touchstart'; } // const Expanding = { getInitialState: state => { return { expanded: {}, ...state }; }, getDefaultOptions: table => { return { onExpandedChange: makeStateUpdater('expanded', table), paginateExpandedRows: true }; }, createTable: table => { let registered = false; let queued = false; return { _autoResetExpanded: () => { var _ref, _table$options$autoRe; if (!registered) { table._queue(() => { registered = true; }); return; } if ((_ref = (_table$options$autoRe = table.options.autoResetAll) != null ? _table$options$autoRe : table.options.autoResetExpanded) != null ? _ref : !table.options.manualExpanding) { if (queued) return; queued = true; table._queue(() => { table.resetExpanded(); queued = false; }); } }, setExpanded: updater => table.options.onExpandedChange == null ? void 0 : table.options.onExpandedChange(updater), toggleAllRowsExpanded: expanded => { if (expanded != null ? expanded : !table.getIsAllRowsExpanded()) { table.setExpanded(true); } else { table.setExpanded({}); } }, resetExpanded: defaultState => { var _table$initialState$e, _table$initialState; table.setExpanded(defaultState ? {} : (_table$initialState$e = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.expanded) != null ? _table$initialState$e : {}); }, getCanSomeRowsExpand: () => { return table.getPrePaginationRowModel().flatRows.some(row => row.getCanExpand()); }, getToggleAllRowsExpandedHandler: () => { return e => { e.persist == null ? void 0 : e.persist(); table.toggleAllRowsExpanded(); }; }, getIsSomeRowsExpanded: () => { const expanded = table.getState().expanded; return expanded === true || Object.values(expanded).some(Boolean); }, getIsAllRowsExpanded: () => { const expanded = table.getState().expanded; // If expanded is true, save some cycles and return true if (typeof expanded === 'boolean') { return expanded === true; } if (!Object.keys(expanded).length) { return false; } // If any row is not expanded, return false if (table.getRowModel().flatRows.some(row => !row.getIsExpanded())) { return false; } // They must all be expanded :shrug: return true; }, getExpandedDepth: () => { let maxDepth = 0; const rowIds = table.getState().expanded === true ? Object.keys(table.getRowModel().rowsById) : Object.keys(table.getState().expanded); rowIds.forEach(id => { const splitId = id.split('.'); maxDepth = Math.max(maxDepth, splitId.length); }); return maxDepth; }, getPreExpandedRowModel: () => table.getSortedRowModel(), getExpandedRowModel: () => { if (!table._getExpandedRowModel && table.options.getExpandedRowModel) { table._getExpandedRowModel = table.options.getExpandedRowModel(table); } if (table.options.manualExpanding || !table._getExpandedRowModel) { return table.getPreExpandedRowModel(); } return table._getExpandedRowModel(); } }; }, createRow: (row, table) => { return { toggleExpanded: expanded => { table.setExpanded(old => { var _expanded; const exists = old === true ? true : !!(old != null && old[row.id]); let oldExpanded = {}; if (old === true) { Object.keys(table.getRowModel().rowsById).forEach(rowId => { oldExpanded[rowId] = true; }); } else { oldExpanded = old; } expanded = (_expanded = expanded) != null ? _expanded : !exists; if (!exists && expanded) { return { ...oldExpanded, [row.id]: true }; } if (exists && !expanded) { const { [row.id]: _, ...rest } = oldExpanded; return rest; } return old; }); }, getIsExpanded: () => { var _table$options$getIsR; const expanded = table.getState().expanded; return !!((_table$options$getIsR = table.options.getIsRowExpanded == null ? void 0 : table.options.getIsRowExpanded(row)) != null ? _table$options$getIsR : expanded === true || (expanded == null ? void 0 : expanded[row.id])); }, getCanExpand: () => { var _table$options$getRow, _table$options$enable, _row$subRows; return (_table$options$getRow = table.options.getRowCanExpand == null ? void 0 : table.options.getRowCanExpand(row)) != null ? _table$options$getRow : ((_table$options$enable = table.options.enableExpanding) != null ? _table$options$enable : true) && !!((_row$subRows = row.subRows) != null && _row$subRows.length); }, getToggleExpandedHandler: () => { const canExpand = row.getCanExpand(); return () => { if (!canExpand) return; row.toggleExpanded(); }; } }; } }; const includesString = (row, columnId, filterValue) => { var _row$getValue, _row$getValue$toStrin, _row$getValue$toStrin2; const search = filterValue.toLowerCase(); return Boolean((_row$getValue = row.getValue(columnId)) == null ? void 0 : (_row$getValue$toStrin = _row$getValue.toString()) == null ? void 0 : (_row$getValue$toStrin2 = _row$getValue$toStrin.toLowerCase()) == null ? void 0 : _row$getValue$toStrin2.includes(search)); }; includesString.autoRemove = val => testFalsey(val); const includesStringSensitive = (row, columnId, filterValue) => { var _row$getValue2, _row$getValue2$toStri; return Boolean((_row$getValue2 = row.getValue(columnId)) == null ? void 0 : (_row$getValue2$toStri = _row$getValue2.toString()) == null ? void 0 : _row$getValue2$toStri.includes(filterValue)); }; includesStringSensitive.autoRemove = val => testFalsey(val); const equalsString = (row, columnId, filterValue) => { var _row$getValue3, _row$getValue3$toStri; return ((_row$getValue3 = row.getValue(columnId)) == null ? void 0 : (_row$getValue3$toStri = _row$getValue3.toString()) == null ? void 0 : _row$getValue3$toStri.toLowerCase()) === (filterValue == null ? void 0 : filterValue.toLowerCase()); }; equalsString.autoRemove = val => testFalsey(val); const arrIncludes = (row, columnId, filterValue) => { var _row$getValue4; return (_row$getValue4 = row.getValue(columnId)) == null ? void 0 : _row$getValue4.includes(filterValue); }; arrIncludes.autoRemove = val => testFalsey(val) || !(val != null && val.length); const arrIncludesAll = (row, columnId, filterValue) => { return !filterValue.some(val => { var _row$getValue5; return !((_row$getValue5 = row.getValue(columnId)) != null && _row$getValue5.includes(val)); }); }; arrIncludesAll.autoRemove = val => testFalsey(val) || !(val != null && val.length); const arrIncludesSome = (row, columnId, filterValue) => { return filterValue.some(val => { var _row$getValue6; return (_row$getValue6 = row.getValue(columnId)) == null ? void 0 : _row$getValue6.includes(val); }); }; arrIncludesSome.autoRemove = val => testFalsey(val) || !(val != null && val.length); const equals = (row, columnId, filterValue) => { return row.getValue(columnId) === filterValue; }; equals.autoRemove = val => testFalsey(val); const weakEquals = (row, columnId, filterValue) => { return row.getValue(columnId) == filterValue; }; weakEquals.autoRemove = val => testFalsey(val); const inNumberRange = (row, columnId, filterValue) => { let [min, max] = filterValue; const rowValue = row.getValue(columnId); return rowValue >= min && rowValue <= max; }; inNumberRange.resolveFilterValue = val => { let [unsafeMin, unsafeMax] = val; let parsedMin = typeof unsafeMin !== 'number' ? parseFloat(unsafeMin) : unsafeMin; let parsedMax = typeof unsafeMax !== 'number' ? parseFloat(unsafeMax) : unsafeMax; let min = unsafeMin === null || Number.isNaN(parsedMin) ? -Infinity : parsedMin; let max = unsafeMax === null || Number.isNaN(parsedMax) ? Infinity : parsedMax; if (min > max) { const temp = min; min = max; max = temp; } return [min, max]; }; inNumberRange.autoRemove = val => testFalsey(val) || testFalsey(val[0]) && testFalsey(val[1]); // Export const filterFns = { includesString, includesStringSensitive, equalsString, arrIncludes, arrIncludesAll, arrIncludesSome, equals, weakEquals, inNumberRange }; // Utils function testFalsey(val) { return val === undefined || val === null || val === ''; } // const Filters = { getDefaultColumnDef: () => { return { filterFn: 'auto' }; }, getInitialState: state => { return { columnFilters: [], globalFilter: undefined, // filtersProgress: 1, // facetProgress: {}, ...state }; }, getDefaultOptions: table => { return { onColumnFiltersChange: makeStateUpdater('columnFilters', table), onGlobalFilterChange: makeStateUpdater('globalFilter', table), filterFromLeafRows: false, maxLeafRowFilterDepth: 100, globalFilterFn: 'auto', getColumnCanGlobalFilter: column => { var _table$getCoreRowMode, _table$getCoreRowMode2; const value = (_table$getCoreRowMode = table.getCoreRowModel().flatRows[0]) == null ? void 0 : (_table$getCoreRowMode2 = _table$getCoreRowMode._getAllCellsByColumnId()[column.id]) == null ? void 0 : _table$getCoreRowMode2.getValue(); return typeof value === 'string' || typeof value === 'number'; } }; }, createColumn: (column, table) => { return { getAutoFilterFn: () => { const firstRow = table.getCoreRowModel().flatRows[0]; const value = firstRow == null ? void 0 : firstRow.getValue(column.id); if (typeof value === 'string') { return filterFns.includesString; } if (typeof value === 'number') { return filterFns.inNumberRange; } if (typeof value === 'boolean') { return filterFns.equals; } if (value !== null && typeof value === 'object') { return filterFns.equals; } if (Array.isArray(value)) { return filterFns.arrIncludes; } return filterFns.weakEquals; }, getFilterFn: () => { var _table$options$filter, _table$options$filter2; return isFunction(column.columnDef.filterFn) ? column.columnDef.filterFn : column.columnDef.filterFn === 'auto' ? column.getAutoFilterFn() // @ts-ignore : (_table$options$filter = (_table$options$filter2 = table.options.filterFns) == null ? void 0 : _table$options$filter2[column.columnDef.filterFn]) != null ? _table$options$filter : filterFns[column.columnDef.filterFn]; }, getCanFilter: () => { var _column$columnDef$ena, _table$options$enable, _table$options$enable2; return ((_column$columnDef$ena = column.columnDef.enableColumnFilter) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableColumnFilters) != null ? _table$options$enable : true) && ((_table$options$enable2 = table.options.enableFilters) != null ? _table$options$enable2 : true) && !!column.accessorFn; }, getCanGlobalFilter: () => { var _column$columnDef$ena2, _table$options$enable3, _table$options$enable4, _table$options$getCol; return ((_column$columnDef$ena2 = column.columnDef.enableGlobalFilter) != null ? _column$columnDef$ena2 : true) && ((_table$options$enable3 = table.options.enableGlobalFilter) != null ? _table$options$enable3 : true) && ((_table$options$enable4 = table.options.enableFilters) != null ? _table$options$enable4 : true) && ((_table$options$getCol = table.options.getColumnCanGlobalFilter == null ? void 0 : table.options.getColumnCanGlobalFilter(column)) != null ? _table$options$getCol : true) && !!column.accessorFn; }, getIsFiltered: () => column.getFilterIndex() > -1, getFilterValue: () => { var _table$getState$colum, _table$getState$colum2; return (_table$getState$colum = table.getState().columnFilters) == null ? void 0 : (_table$getState$colum2 = _table$getState$colum.find(d => d.id === column.id)) == null ? void 0 : _table$getState$colum2.value; }, getFilterIndex: () => { var _table$getState$colum3, _table$getState$colum4; return (_table$getState$colum3 = (_table$getState$colum4 = table.getState().columnFilters) == null ? void 0 : _table$getState$colum4.findIndex(d => d.id === column.id)) != null ? _table$getState$colum3 : -1; }, setFilterValue: value => { table.setColumnFilters(old => { const filterFn = column.getFilterFn(); const previousfilter = old == null ? void 0 : old.find(d => d.id === column.id); const newFilter = functionalUpdate(value, previousfilter ? previousfilter.value : undefined); // if (shouldAutoRemoveFilter(filterFn, newFilter, column)) { var _old$filter; return (_old$filter = old == null ? void 0 : old.filter(d => d.id !== column.id)) != null ? _old$filter : []; } const newFilterObj = { id: column.id, value: newFilter }; if (previousfilter) { var _old$map; return (_old$map = old == null ? void 0 : old.map(d => { if (d.id === column.id) { return newFilterObj; } return d; })) != null ? _old$map : []; } if (old != null && old.length) { return [...old, newFilterObj]; } return [newFilterObj]; }); }, _getFacetedRowModel: table.options.getFacetedRowModel && table.options.getFacetedRowModel(table, column.id), getFacetedRowModel: () => { if (!column._getFacetedRowModel) { return table.getPreFilteredRowModel(); } return column._getFacetedRowModel(); }, _getFacetedUniqueValues: table.options.getFacetedUniqueValues && table.options.getFacetedUniqueValues(table, column.id), getFacetedUniqueValues: () => { if (!column._getFacetedUniqueValues) { return new Map(); } return column._getFacetedUniqueValues(); }, _getFacetedMinMaxValues: table.options.getFacetedMinMaxValues && table.options.getFacetedMinMaxValues(table, column.id), getFacetedMinMaxValues: () => { if (!column._getFacetedMinMaxValues) { return undefined; } return column._getFacetedMinMaxValues(); } // () => [column.getFacetedRowModel()], // facetedRowModel => getRowModelMinMaxValues(facetedRowModel, column.id), }; }, createRow: (row, table) => { return { columnFilters: {}, columnFiltersMeta: {} }; }, createTable: table => { return { getGlobalAutoFilterFn: () => { return filterFns.includesString; }, getGlobalFilterFn: () => { var _table$options$filter3, _table$options$filter4; const { globalFilterFn: globalFilterFn } = table.options; return isFunction(globalFilterFn) ? globalFilterFn : globalFilterFn === 'auto' ? table.getGlobalAutoFilterFn() // @ts-ignore : (_table$options$filter3 = (_table$options$filter4 = table.options.filterFns) == null ? void 0 : _table$options$filter4[globalFilterFn]) != null ? _table$options$filter3 : filterFns[globalFilterFn]; }, setColumnFilters: updater => { const leafColumns = table.getAllLeafColumns(); const updateFn = old => { var _functionalUpdate; return (_functionalUpdate = functionalUpdate(updater, old)) == null ? void 0 : _functionalUpdate.filter(filter => { const column = leafColumns.find(d => d.id === filter.id); if (column) { const filterFn = column.getFilterFn(); if (shouldAutoRemoveFilter(filterFn, filter.value, column)) { return false; } } return true; }); }; table.options.onColumnFiltersChange == null ? void 0 : table.options.onColumnFiltersChange(updateFn); }, se