{"version":3,"file":"dx-grid-core.umd.cjs","sources":["../src/plugins/integrated-grouping/constants.ts","../src/plugins/grid-core/computeds.ts","../src/plugins/sorting-state/reducers.ts","../src/plugins/sorting-state/helpers.ts","../src/utils/merge-sort.ts","../src/utils/hierarchical-data.ts","../src/plugins/integrated-sorting/computeds.ts","../src/plugins/filtering-state/reducers.ts","../src/plugins/filtering-state/helpers.ts","../src/plugins/filtering-state/computeds.ts","../src/plugins/integrated-filtering/computeds.ts","../src/plugins/grouping-state/constants.ts","../src/plugins/grouping-state/reducers.ts","../src/plugins/grouping-state/helpers.ts","../src/plugins/integrated-grouping/helpers.ts","../src/plugins/integrated-grouping/computeds.ts","../src/plugins/custom-grouping/helpers.ts","../src/plugins/custom-grouping/computeds.ts","../src/plugins/grouping-panel/helpers.ts","../src/plugins/paging-state/reducers.ts","../src/plugins/integrated-paging/helpers.ts","../src/plugins/integrated-paging/computeds.ts","../src/plugins/paging-panel/helpers.ts","../src/utils/common-reducers.ts","../src/plugins/selection-state/reducers.ts","../src/plugins/integrated-selection/computeds.ts","../src/plugins/editing-state/reducers.ts","../src/plugins/editing-state/computeds.ts","../src/plugins/editing-state/helpers.ts","../src/plugins/table-column-reordering/constants.ts","../src/plugins/table-column-reordering/reducers.ts","../src/plugins/table/constants.ts","../src/plugins/table-column-reordering/computeds.ts","../src/plugins/table-column-resizing/helpers.ts","../src/plugins/table-column-resizing/computeds.ts","../src/plugins/table-column-resizing/reducers.ts","../src/plugins/table-edit-column/constants.ts","../src/plugins/table-edit-row/constants.ts","../src/plugins/table-header-row/constants.ts","../src/plugins/table-edit-column/helpers.ts","../src/plugins/table-edit-column/computeds.ts","../src/plugins/table-edit-row/helpers.ts","../src/plugins/table-edit-row/computeds.ts","../src/plugins/table-inline-cell-editing/computeds.ts","../src/plugins/table-filter-row/constants.ts","../src/plugins/table-filter-row/helpers.ts","../src/plugins/table-filter-row/computeds.ts","../src/plugins/table-group-row/constants.ts","../src/utils/virtual-table.ts","../src/plugins/table-group-row/helpers.ts","../src/plugins/table-group-row/computeds.ts","../src/plugins/table-header-row/helpers.ts","../src/plugins/table-header-row/computeds.ts","../src/plugins/table-band-header/constants.ts","../src/plugins/table-band-header/helpers.ts","../src/plugins/virtual-table-state/helpers.ts","../src/plugins/virtual-table-state/utils.ts","../src/plugins/table-band-header/computeds.ts","../src/plugins/row-detail-state/reducers.ts","../src/plugins/table-row-detail/constants.ts","../src/plugins/table-row-detail/helpers.ts","../src/plugins/table-row-detail/computeds.ts","../src/plugins/table-selection/constants.ts","../src/plugins/table-selection/helpers.ts","../src/plugins/table-selection/computeds.ts","../src/plugins/table/helpers.ts","../src/utils/column-extension.ts","../src/plugins/table/computeds.ts","../src/plugins/table-column-visibility/computeds.ts","../src/plugins/table-column-visibility/helpers.ts","../src/plugins/column-chooser/computeds.ts","../src/plugins/column-chooser/reducers.ts","../src/plugins/tree-data-state/reducers.ts","../src/plugins/custom-tree-data/constants.ts","../src/plugins/custom-tree-data/computeds.ts","../src/plugins/table-tree-column/helpers.ts","../src/plugins/search-state/reducers.ts","../src/plugins/search-state/computeds.ts","../src/plugins/data-type-provider/computeds.ts","../src/plugins/table-fixed-columns/constants.ts","../src/plugins/table-fixed-columns/helpers.ts","../src/plugins/table-fixed-columns/computeds.ts","../src/plugins/integrated-summary/computeds.ts","../src/plugins/table-summary-row/constants.ts","../src/plugins/table-summary-row/helpers.ts","../src/plugins/table-summary-row/computeds.ts","../src/plugins/summary-state/helpers.ts","../src/plugins/table-keyboard-navigation/helpers.ts","../src/plugins/table-keyboard-navigation/computeds.ts","../src/utils/column-geometries.ts","../src/utils/table.ts","../src/utils/group-panel.ts","../src/plugins/virtual-table/utils.ts","../src/plugins/virtual-table/constants.ts","../src/plugins/virtual-table/helpers.ts","../src/plugins/virtual-table-state/computeds.ts","../src/plugins/grid-exporter/constants.ts","../src/plugins/grid-exporter/helpers.ts","../src/plugins/grid-exporter/computeds.ts"],"sourcesContent":["export const GRID_GROUP_TYPE = Symbol('group');\nexport const GRID_GROUP_CHECK = Symbol(`${GRID_GROUP_TYPE.toString()}_check`);\nexport const GRID_GROUP_LEVEL_KEY = Symbol(`${GRID_GROUP_TYPE.toString()}_levelKey`);\nexport const GRID_GROUP_COLLAPSED_ROWS = Symbol(`${GRID_GROUP_TYPE.toString()}_collapsedRows`);\n","import { GRID_GROUP_CHECK } from '../integrated-grouping/constants';\nimport { GetRowIdFn, Row, RowId, GetCellValueFn, Column } from '../../types';\nimport { PureComputed } from '@devexpress/dx-core';\n\nconst warnIfRowIdUndefined: PureComputed<[GetRowIdFn]> = getRowId => (row) => {\n  const result = getRowId(row);\n  if (!row[GRID_GROUP_CHECK] && result === undefined) {\n    // tslint:disable-next-line: no-console\n    console.warn('The row id is undefined. Check the getRowId function. The row is', row);\n  }\n  return result;\n};\n\nexport const rowIdGetter: PureComputed<[GetRowIdFn, Row[]]> = (getRowId, rows) => {\n  if (!getRowId) {\n    const map = new Map(rows.map((row, rowIndex) => [row, rowIndex]) as [any, number]);\n    return (row: Row) => map.get(row) as RowId;\n  }\n  return warnIfRowIdUndefined(getRowId);\n};\n\nconst defaultGetCellValue: GetCellValueFn = (row, columnName) => row[columnName];\n\nexport const cellValueGetter: PureComputed<[GetCellValueFn, Column[]]> = (\n  getCellValue = defaultGetCellValue, columns,\n) => {\n  let useFastAccessor = true;\n  const map = columns.reduce((acc, column) => {\n    if (column.getCellValue) {\n      useFastAccessor = false;\n      acc[column.name] = column.getCellValue;\n    }\n    return acc;\n  }, {});\n\n  if (useFastAccessor) {\n    return getCellValue;\n  }\n\n  return (row, columnName) => (map[columnName]\n    ? map[columnName](row, columnName)\n    : getCellValue(row, columnName));\n};\n","import { ColumnSortingState, ChangeSortingPayload, Sorting } from '../../types';\nimport { PureReducer, slice } from '@devexpress/dx-core';\n\nexport const changeColumnSorting: PureReducer<ColumnSortingState, ChangeSortingPayload> = (\n  state, {\n  columnName, direction, keepOther, sortIndex,\n}) => {\n  const { sorting } = state;\n\n  let nextSorting: any[] = [];\n  if (keepOther === true) {\n    nextSorting = sorting as Sorting[];\n  }\n  if (Array.isArray(keepOther)) {\n    nextSorting = slice(sorting)\n      .filter(s =>\n        keepOther.indexOf(s.columnName) > -1);\n  }\n\n  const columnSortingIndex = sorting.findIndex(s => s.columnName === columnName);\n  const columnSorting = sorting[columnSortingIndex];\n  const newColumnSorting = {\n    columnName,\n    direction: direction\n      || (!columnSorting || columnSorting.direction === 'desc' ? 'asc' : 'desc'),\n  };\n\n  if (columnSortingIndex > -1) {\n    nextSorting = slice(nextSorting);\n    nextSorting.splice(columnSortingIndex, 1);\n  }\n\n  if (direction !== null) {\n    const newIndexFallback = columnSortingIndex > -1 ? columnSortingIndex : nextSorting.length;\n    const newIndex = sortIndex !== undefined ? sortIndex : newIndexFallback;\n    nextSorting = slice(nextSorting);\n    nextSorting.splice(newIndex, 0, newColumnSorting);\n  }\n\n  return {\n    sorting: nextSorting,\n  };\n};\n","import {\n  KeepOtherSorting, GetColumnSortingDirectionFn, GetPersistentSortedColumnsFn,\n  CalculateKeepOtherFn,\n} from '../../types';\n\nconst unique = (arr: any[]) => [...Array.from(new Set(arr))];\n\nexport const getColumnSortingDirection: GetColumnSortingDirectionFn = (\n  sorting, columnName,\n) => {\n  const columnSorting = sorting.filter(s => s.columnName === columnName)[0];\n  return columnSorting ? columnSorting.direction : null;\n};\n\nexport const getPersistentSortedColumns: GetPersistentSortedColumnsFn = (\n  sorting, columnExtensions = [],\n) => columnExtensions.reduce((acc, { columnName, sortingEnabled }) => {\n  if (!sortingEnabled) {\n    if (sorting.findIndex(sortItem => sortItem.columnName === columnName) > -1) {\n      acc.push(columnName);\n    }\n  }\n  return acc;\n}, [] as string[]);\n\nexport const calculateKeepOther: CalculateKeepOtherFn = (\n  sorting, keepOther, persistentSortedColumns = [],\n) => {\n  if (!persistentSortedColumns.length) return keepOther as KeepOtherSorting;\n  if (!keepOther) return persistentSortedColumns as KeepOtherSorting;\n\n  return Array.isArray(keepOther)\n    ? unique([...keepOther, ...persistentSortedColumns])\n    : unique([...sorting.map(item => item.columnName), ...persistentSortedColumns]);\n};\n","import { slice } from '@devexpress/dx-core';\nimport { MergeFn, SortArrayToAuxiliaryFn, CompareFn } from '../types';\n\n/* eslint-disable no-plusplus, no-param-reassign, no-use-before-define, no-constant-condition */\n/* tslint:disable no-increment-decrement */\n\nconst merge: MergeFn = (array, auxiliary, lo, mid, hi, compare) => {\n  let i = lo;\n  let j = mid + 1;\n  let k = lo;\n  while (true) {\n    const cmp = compare(array[i], array[j]);\n    if (cmp <= 0) {\n      auxiliary[k++] = array[i++];\n      if (i > mid) {\n        do {\n          auxiliary[k++] = array[j++];\n        } while (j <= hi);\n        break;\n      }\n    } else {\n      auxiliary[k++] = array[j++];\n      if (j > hi) {\n        do {\n          auxiliary[k++] = array[i++];\n        } while (i <= mid);\n        break;\n      }\n    }\n  }\n};\n\nconst sortArrayToAuxiliary: SortArrayToAuxiliaryFn = (array, auxiliary, lo, hi, compare) => {\n  if (hi < lo) return;\n  if (hi === lo) {\n    auxiliary[lo] = array[lo];\n    return;\n  }\n  const mid = Math.floor(lo + ((hi - lo) / 2));\n  sortAuxiliaryToArray(array, auxiliary, lo, mid, compare);\n  sortAuxiliaryToArray(array, auxiliary, mid + 1, hi, compare);\n  merge(array, auxiliary, lo, mid, hi, compare);\n};\n\nconst sortAuxiliaryToArray: SortArrayToAuxiliaryFn = (array, auxiliary, lo, hi, compare) => {\n  if (hi <= lo) return;\n  const mid = Math.floor(lo + ((hi - lo) / 2));\n  sortArrayToAuxiliary(array, auxiliary, lo, mid, compare);\n  sortArrayToAuxiliary(array, auxiliary, mid + 1, hi, compare);\n  merge(auxiliary, array, lo, mid, hi, compare);\n};\n\nexport default (\n  array: any[] | ReadonlyArray<any>,\n  compare: CompareFn = (a, b): number => {\n    if (a < b) return -1;\n    if (a > b) return 1;\n    return 0;\n  },\n) => {\n  const result = slice(array);\n  const auxiliary = slice(array);\n  sortAuxiliaryToArray(result, auxiliary, 0, result.length - 1, compare);\n  return result;\n};\n","import { RowsToTreeFn, TreeToRowsFn, TreeNode } from '../types';\n\nexport const NODE_CHECK = Symbol('node');\n\nexport const rowsToTree: RowsToTreeFn = (rows, getRowLevelKey) => {\n  if (!rows.length) return rows;\n\n  const levels: any[] = [{ children: [] }];\n\n  rows.forEach((row) => {\n    const levelKey = getRowLevelKey(row);\n    if (levelKey) {\n      const levelIndex = levels.slice(1)\n        .findIndex(level => getRowLevelKey(level.root) === levelKey) + 1;\n      if (levelIndex > 0) {\n        levels.splice(levelIndex, levels.length - levelIndex);\n      }\n      const node = { [NODE_CHECK]: true, root: row, children: [] };\n      levels[levels.length - 1].children.push(node);\n      levels.push(node);\n    } else {\n      levels[levels.length - 1].children.push(row);\n    }\n  });\n\n  return levels[0].children;\n};\n\nexport const treeToRows: TreeToRowsFn = (tree, rows = []) => {\n  if (!tree.length) return tree;\n  return tree.reduce(\n    (acc, node) => {\n      if (node[NODE_CHECK]) {\n        acc.push(node.root);\n        treeToRows(node.children, rows);\n      } else {\n        acc.push(node);\n      }\n      return acc;\n    },\n    rows as TreeNode[],\n  );\n};\n","import { PureComputed } from '@devexpress/dx-core';\nimport mergeSort from '../../utils/merge-sort';\nimport { NODE_CHECK, rowsToTree, treeToRows } from '../../utils/hierarchical-data';\nimport {\n  Row, GetRowLevelKeyFn, CompareFn, CreateCompareFn, SortedRowsFn, TreeNode,\n} from '../../types';\n\nconst defaultCompare = (a: any, b: any) => {\n  if (a === b) return 0;\n\n  if (a === null) {\n    return b === undefined ? -1 : 1;\n  }\n  if (a === undefined) {\n    return 1;\n  }\n  if (b === null || b === undefined) {\n    return -1;\n  }\n  return a < b ? -1 : 1;\n};\n\nconst createCompare: CreateCompareFn = (\n  sorting, getColumnCompare, getComparableValue,\n) => sorting.reduceRight((prevCompare, columnSorting) => {\n  const { columnName } = columnSorting;\n  const inverse = columnSorting.direction === 'desc';\n  const columnCompare = (getColumnCompare && getColumnCompare(columnName)) || defaultCompare;\n\n  return (aRow: Row, bRow: Row) => {\n    const a = getComparableValue(aRow, columnName);\n    const b = getComparableValue(bRow, columnName);\n    const result = columnCompare(a, b);\n\n    if (result !== 0) {\n      return inverse ? -result : result;\n    }\n    return prevCompare(aRow, bRow);\n  };\n}, (...args: any[]) => 0);\n\nconst sortTree: PureComputed<[TreeNode[], CompareFn]> = (tree, compare) => {\n  const sortedTree = tree.map((node) => {\n    if (node[NODE_CHECK]) {\n      return {\n        ...node,\n        children: sortTree(node.children, compare),\n      };\n    }\n    return node;\n  });\n\n  return mergeSort(\n    sortedTree, (a, b) => compare(a[NODE_CHECK] ? a.root : a, b[NODE_CHECK] ? b.root : b),\n  );\n};\n\nconst sortHierarchicalRows: PureComputed<[Row[], CompareFn, GetRowLevelKeyFn]> = (\n  rows, compare, getRowLevelKey,\n) => {\n  const tree = rowsToTree(rows, getRowLevelKey);\n\n  const sortedTree = sortTree(tree, compare);\n\n  return treeToRows(sortedTree);\n};\n\nexport const sortedRows: SortedRowsFn = (\n  rows, sorting, getCellValue, getColumnCompare, isGroupRow, getRowLevelKey,\n) => {\n  if (!sorting.length || !rows.length) return rows;\n\n  let compare;\n  if (!getRowLevelKey) {\n    compare = createCompare(sorting, getColumnCompare, getCellValue);\n    return mergeSort(rows.slice(), compare);\n  }\n\n  compare = createCompare(sorting, getColumnCompare, (row, columnName) => {\n    if (isGroupRow && isGroupRow(row)) {\n      if (row.groupedBy === columnName) {\n        return row.value;\n      }\n      return undefined;\n    }\n    return getCellValue(row, columnName);\n  });\n  return sortHierarchicalRows(\n    rows,\n    compare,\n    getRowLevelKey,\n  );\n};\n","import { Filter, ChangeFilterPayload } from '../../types';\nimport { PureReducer, slice } from '@devexpress/dx-core';\n\nexport const changeColumnFilter: PureReducer<Filter[], ChangeFilterPayload> = (\n  filters, { columnName, config },\n) => {\n  const filterIndex = filters.findIndex(f => f.columnName === columnName);\n  const nextState = slice(filters);\n\n  if (config) {\n    const filter = { columnName, ...config };\n    if (filterIndex > -1) {\n      nextState.splice(filterIndex, 1, filter);\n    } else {\n      nextState.push(filter);\n    }\n  } else if (filterIndex > -1) {\n    nextState.splice(filterIndex, 1);\n  }\n\n  return nextState;\n};\n","import { PureComputed } from '@devexpress/dx-core';\nimport { Filter } from '../../types';\n\nexport const getColumnFilterConfig: PureComputed<\n  [Filter[], string], Filter | null\n> = (filters, columnName) => (\n  filters.length && filters.filter(s => s.columnName === columnName)[0] || null\n);\n","import { FilterExpression, Filter } from '../../types';\nimport { PureComputed } from '@devexpress/dx-core';\n\nexport const filterExpression: PureComputed<\n  [Filter[], FilterExpression?], FilterExpression\n> = (filters, expression) => {\n  // tslint:disable-next-line: no-object-literal-type-assertion\n  const selfFilterExpr = { filters, operator: 'and' as 'and' } as FilterExpression;\n  if (!expression) {\n    return selfFilterExpr;\n  }\n  return {\n    operator: 'and' as 'and',\n    filters: [expression, selfFilterExpr] as FilterExpression[],\n  };\n};\n","import { NODE_CHECK, rowsToTree, treeToRows } from '../../utils/hierarchical-data';\nimport { PureComputed } from '@devexpress/dx-core';\nimport {\n  Row, Filter, FilterPredicate,\n  FilterExpression, GetCellValueFn, RowsWithCollapsedRowsMetaMap,\n  UnwrapRowsComputed, FilteredRowsFn, FilterHierarchicalRowsFn,\n  CompiledPredicate, GetColumnPredicateFn, FilteredCollapsedRowsGetterFn, TreeNode,\n} from '../../types';\n\nconst operators = {\n  or: (predicates: CompiledPredicate[]) => (row: Row) => (\n    predicates.reduce((acc, predicate) => acc || predicate(row), false)\n  ),\n  and: (predicates: CompiledPredicate[]) => (row: Row) => (\n    predicates.reduce((acc, predicate) => acc && predicate(row), true)\n  ),\n};\n\nconst toLowerCase = (value: any) => String(value).toLowerCase();\n\nconst operationPredicates: { [key: string]: FilterPredicate } = {\n  contains: (value, filter) => toLowerCase(value)\n    .indexOf(toLowerCase(filter.value)) > -1,\n\n  notContains: (value, filter) => toLowerCase(value)\n    .indexOf(toLowerCase(filter.value)) === -1,\n\n  startsWith: (value, filter) => toLowerCase(value)\n    .startsWith(toLowerCase(filter.value)),\n\n  endsWith: (value, filter) => toLowerCase(value)\n    .endsWith(toLowerCase(filter.value)),\n\n  equal: (value, filter) => String(value) === String(filter.value),\n  notEqual: (value, filter) => String(value) !== String(filter.value),\n\n  greaterThan: (value, filter) => value > filter.value!,\n  greaterThanOrEqual: (value, filter) => value >= filter.value!,\n  lessThan: (value, filter) => value < filter.value!,\n  lessThanOrEqual: (value, filter) => value <= filter.value!,\n};\n\nexport const defaultFilterPredicate: FilterPredicate = (value, filter) => {\n  const operation = filter.operation || 'contains';\n  return operationPredicates[operation](value, filter);\n};\n\nconst filterTree: PureComputed<[TreeNode[], CompiledPredicate]> = (tree, predicate) => tree.reduce(\n  (acc, node) => {\n    if (node[NODE_CHECK]) {\n      const filteredChildren = filterTree(node.children, predicate) as TreeNode[];\n      if (filteredChildren.length > 0) {\n        acc.push({\n          ...node,\n          children: filteredChildren,\n        });\n        return acc;\n      }\n      if (predicate(node.root, true)) {\n        acc.push(node.root);\n        return acc;\n      }\n      return acc;\n    }\n\n    if (predicate(node)) {\n      acc.push(node);\n      return acc;\n    }\n\n    return acc;\n  },\n  [] as TreeNode[],\n);\n\nconst filterHierarchicalRows: FilterHierarchicalRowsFn = (\n  rows, predicate, getRowLevelKey, getCollapsedRows,\n) => {\n  const tree = rowsToTree(rows, getRowLevelKey);\n  const collapsedRowsMeta: any[] = [];\n\n  const filteredTree = filterTree(tree, (row, isNode) => {\n    if (isNode) {\n      const collapsedRows = getCollapsedRows && getCollapsedRows(row);\n      if (collapsedRows && collapsedRows.length) {\n        const filteredCollapsedRows = collapsedRows.filter(predicate);\n        collapsedRowsMeta.push([row, filteredCollapsedRows]);\n        return !!filteredCollapsedRows.length || predicate(row);\n      }\n      if (predicate(row)) {\n        collapsedRowsMeta.push([row, []]);\n        return true;\n      }\n      return false;\n    }\n    return predicate(row);\n  });\n\n  return { rows: treeToRows(filteredTree), collapsedRowsMeta: new Map(collapsedRowsMeta) };\n};\n\nconst buildPredicate: PureComputed<\n  [FilterExpression, GetCellValueFn, GetColumnPredicateFn],\n  CompiledPredicate\n> = (\n  initialFilterExpression, getCellValue, getColumnPredicate,\n) => {\n  const getSimplePredicate = (filter: Filter) => {\n    const { columnName } = filter;\n    const customPredicate = getColumnPredicate && getColumnPredicate(columnName);\n    const predicate = customPredicate || defaultFilterPredicate;\n    return (row: Row) => predicate(getCellValue(row, columnName), filter, row);\n  };\n\n  const getOperatorPredicate: any = (filterExpression: FilterExpression) => {\n    const build = operators[toLowerCase(filterExpression.operator)];\n    return build && build(filterExpression.filters.map(getPredicate));\n  };\n\n  const getPredicate = (filterExpression: any) => (\n    getOperatorPredicate(filterExpression)\n    || getSimplePredicate(filterExpression)\n  );\n\n  return getPredicate(initialFilterExpression);\n};\n\nexport const filteredRows: FilteredRowsFn = (\n  rows, filterExpression, getCellValue, getColumnPredicate, getRowLevelKey, getCollapsedRows,\n) => {\n  if (!(filterExpression && Object.keys(filterExpression).length && rows.length)) {\n    // tslint:disable-next-line:no-object-literal-type-assertion\n    return { rows } as Partial<RowsWithCollapsedRowsMetaMap>;\n  }\n\n  const predicate = buildPredicate(\n    filterExpression,\n    getCellValue,\n    getColumnPredicate,\n  );\n\n  return getRowLevelKey\n    ? filterHierarchicalRows(rows, predicate, getRowLevelKey, getCollapsedRows)\n    : { rows: rows.filter(predicate) };\n};\n\nexport const filteredCollapsedRowsGetter: FilteredCollapsedRowsGetterFn = (\n  { collapsedRowsMeta },\n) => row => collapsedRowsMeta && collapsedRowsMeta.get(row);\n\nexport const unwrappedFilteredRows: UnwrapRowsComputed = ({ rows }) => rows;\n","export const GROUP_KEY_SEPARATOR = '|';\n","import { PureReducer, slice } from '@devexpress/dx-core';\nimport { Getters } from '@devexpress/dx-react-core';\nimport { GROUP_KEY_SEPARATOR } from './constants';\nimport {\n  Grouping, ColumnGroupingState, ChangeGroupingPayload, ToggleGroupPayload, DraftGroupingState,\n} from '../../types';\n\nconst applyColumnGrouping: PureReducer<Grouping[], ChangeGroupingPayload> = (\n  grouping, { columnName, groupIndex },\n) => {\n  let nextGrouping = grouping;\n  const groupingIndex = nextGrouping.findIndex(g => g.columnName === columnName);\n  let targetIndex = groupIndex;\n\n  if (groupingIndex > -1) {\n    nextGrouping = slice(grouping);\n    (nextGrouping as Grouping[]).splice(groupingIndex, 1);\n  } else if (groupIndex === undefined) {\n    targetIndex = nextGrouping.length;\n  }\n\n  if (targetIndex > -1) {\n    nextGrouping = slice(nextGrouping);\n    (nextGrouping as Grouping[]).splice(targetIndex, 0, {\n      columnName,\n    });\n  }\n\n  return nextGrouping;\n};\n\nexport const changeColumnGrouping: PureReducer<ColumnGroupingState, ChangeGroupingPayload> = (\n  { grouping, expandedGroups }, { columnName, groupIndex },\n) => {\n  const nextGrouping = applyColumnGrouping(grouping!, { columnName, groupIndex });\n\n  const ungroupedColumnIndex = grouping!.findIndex(\n    (group, index) => !nextGrouping[index] || group.columnName !== nextGrouping[index].columnName,\n  );\n  if (ungroupedColumnIndex === -1) {\n    return {\n      grouping: nextGrouping,\n    };\n  }\n\n  const filteredExpandedGroups = expandedGroups!.filter(\n    group => group.split(GROUP_KEY_SEPARATOR).length <= ungroupedColumnIndex,\n  );\n  if (filteredExpandedGroups.length === expandedGroups!.length) {\n    return {\n      grouping: nextGrouping,\n    };\n  }\n\n  return {\n    grouping: nextGrouping,\n    expandedGroups: filteredExpandedGroups,\n  };\n};\n\nexport const toggleExpandedGroups: PureReducer<ColumnGroupingState, ToggleGroupPayload> = (\n  state, { groupKey },\n) => {\n  const expandedGroups = slice(state.expandedGroups);\n  const groupKeyIndex = expandedGroups.indexOf(groupKey);\n\n  if (groupKeyIndex > -1) {\n    expandedGroups.splice(groupKeyIndex, 1);\n  } else {\n    expandedGroups.push(groupKey);\n  }\n\n  return {\n    expandedGroups,\n  };\n};\n\nexport const draftColumnGrouping: PureReducer<\n  Getters, ChangeGroupingPayload, DraftGroupingState\n> = (\n  { grouping, draftGrouping },\n  { columnName, groupIndex },\n) => ({\n  draftGrouping: applyColumnGrouping(draftGrouping || grouping, { columnName, groupIndex }),\n});\n\nexport const cancelColumnGroupingDraft = () => ({\n  draftGrouping: null,\n});\n","import { PureComputed } from '@devexpress/dx-core';\nimport { Grouping, Sorting, GroupIndex } from '../../types';\n\nexport const adjustSortIndex: PureComputed<[GroupIndex, Grouping[], Sorting[]]> = (\n  groupingIndex, grouping, sorting,\n) => Math.max(\n  grouping.slice(0, groupingIndex).reduce(\n    (acc, columnGrouping) => {\n      const columnSortingIndex = sorting.findIndex(\n        columnSorting => columnSorting.columnName === columnGrouping.columnName,\n      );\n      return (columnSortingIndex === -1 ? acc - 1 : acc);\n    },\n    groupingIndex,\n  ),\n  0,\n);\n","import { GetIntegratedGroupsFn, GetGroupRowsFn, Row } from '../../types';\nimport { GROUP_KEY_SEPARATOR } from '../grouping-state/constants';\nimport { GRID_GROUP_CHECK, GRID_GROUP_LEVEL_KEY, GRID_GROUP_TYPE } from './constants';\n\nconst defaultColumnCriteria = (value: any) => ({\n  value,\n  key: String(value),\n});\n\nexport const getGroupRows: GetGroupRowsFn = (\n  rows, grouping, groupsGetter,\n) => {\n  if (grouping.length === 0) {\n    return rows;\n  }\n\n  const keyPrefixes = [{ prefix: '', level: 0, rows }];\n  const resultRows = [] as Row[];\n  const compoundKeys = {};\n\n  while (keyPrefixes.length) {\n    const { prefix: keyPrefix, level, rows: currentRows } = keyPrefixes.pop()!;\n\n    const currentCompoundKey = keyPrefix.slice(0, keyPrefix.length - 1);\n    const groupIndex = compoundKeys[currentCompoundKey] ?? -1;\n\n    const groupRows: readonly Row[] = grouping[level] && currentRows.length\n      ? groupsGetter(currentRows, grouping[level], keyPrefix)\n          .map(({ childRows, ...params }: any, rowIndex) => {\n            const { compoundKey } = params;\n\n            compoundKeys[compoundKey] = groupIndex + rowIndex + 1;\n            keyPrefixes.push({\n              prefix: `${compoundKey}${GROUP_KEY_SEPARATOR}`,\n              level: level + 1,\n              rows: childRows || [],\n            });\n\n            return params;\n          })\n      : currentRows;\n\n    if (groupIndex > -1) {\n      resultRows.splice(groupIndex + 1, 0, ...groupRows);\n    } else {\n      groupRows.forEach(row => resultRows.push(row));\n    }\n  }\n\n  return resultRows;\n};\n\nexport const getIntegratedGroups: GetIntegratedGroupsFn = (\n  rows,\n  grouping,\n  keyPrefix,\n  getCellValue,\n  getColumnCriteria,\n) => {\n  const { columnName } = grouping;\n  const groupCriteria = (getColumnCriteria && getColumnCriteria(columnName))\n        || defaultColumnCriteria;\n\n  const groups = new Map();\n  rows.forEach((row) => {\n    const rawValue = getCellValue(row, columnName);\n    const { key, value } = groupCriteria(rawValue, row);\n    const sameKeyItems = groups.get(key);\n\n    if (!sameKeyItems) {\n      const groupingValue = value === rawValue ? value : value || key;\n      groups.set(key, [groupingValue, key, [row]]);\n    } else {\n      sameKeyItems[2].push(row);\n    }\n  });\n\n  const groupedBy = columnName;\n  return [...groups.values()]\n    .map(([value, key, childRows]) => ({\n      groupedBy,\n      compoundKey: `${keyPrefix}${key}`,\n      key,\n      value,\n      [GRID_GROUP_CHECK]: true,\n      [GRID_GROUP_LEVEL_KEY]: `${GRID_GROUP_TYPE.toString()}_${groupedBy}`,\n      childRows,\n    }));\n};\n","import { PureComputed } from '@devexpress/dx-core';\nimport {\n  GRID_GROUP_CHECK,\n  GRID_GROUP_LEVEL_KEY,\n  GRID_GROUP_COLLAPSED_ROWS,\n} from './constants';\nimport {\n  Grouping,\n  GroupKey,\n  Row,\n  GetCollapsedRowsFn,\n  IsSpecificRowFn,\n  GroupedRowsFn,\n  GroupsGetterFn,\n} from '../../types';\nimport { getGroupRows, getIntegratedGroups } from './helpers';\n\nexport const groupRowChecker: IsSpecificRowFn = row => row[GRID_GROUP_CHECK];\n\nexport const groupRowLevelKeyGetter = (row: Row) => (row ? row[GRID_GROUP_LEVEL_KEY] : undefined);\n\nexport const groupedRows: GroupedRowsFn = (\n  rows, grouping, getCellValue, getColumnCriteria,\n) => {\n  const groupsGetter: GroupsGetterFn = (currentRows, currentGrouping, prefix) =>\n    getIntegratedGroups(\n      currentRows,\n      currentGrouping,\n      prefix,\n      getCellValue,\n      getColumnCriteria,\n    );\n  return getGroupRows(rows, grouping, groupsGetter);\n};\n\nexport const expandedGroupRows: PureComputed<[Row[], Grouping[], GroupKey[], boolean]> = (\n  rows,\n  grouping,\n  expandedGroups,\n  isExporting,\n) => {\n  if (!grouping.length) return rows;\n\n  const groupingColumnNames = grouping.map(columnGrouping => columnGrouping.columnName);\n  const expandedGroupsSet = new Set(expandedGroups);\n  let currentGroupExpanded = true;\n  let currentGroupLevel = 0;\n\n  return rows.reduce((acc, row) => {\n    if (!row[GRID_GROUP_CHECK]) {\n      if (currentGroupExpanded) {\n        acc.push(row);\n      } else {\n        acc[acc.length - 1][GRID_GROUP_COLLAPSED_ROWS].push(row);\n      }\n      return acc;\n    }\n\n    const groupLevel = groupingColumnNames.indexOf(row.groupedBy);\n    if (groupLevel > currentGroupLevel && !currentGroupExpanded) {\n      return acc;\n    }\n\n    currentGroupExpanded = expandedGroupsSet.has(row.compoundKey) || isExporting;\n    currentGroupLevel = groupLevel;\n\n    if (currentGroupExpanded) {\n      acc.push(row);\n    } else {\n      acc.push({\n        ...row,\n        [GRID_GROUP_COLLAPSED_ROWS]: [],\n      });\n    }\n\n    return acc;\n  }, []);\n};\n\nexport const groupCollapsedRowsGetter: PureComputed<[GetCollapsedRowsFn]> =\n  getCollapsedRows => row => (\n  row[GRID_GROUP_COLLAPSED_ROWS] || (getCollapsedRows && getCollapsedRows(row))\n);\n","import { GetCustomGroupsFn } from '../../types';\nimport {\n  GRID_GROUP_CHECK,\n  GRID_GROUP_LEVEL_KEY,\n  GRID_GROUP_TYPE,\n} from '../integrated-grouping/constants';\n\nexport const getCustomGroups: GetCustomGroupsFn = (\n  rows,\n  grouping,\n  keyPrefix,\n  getChildGroups,\n  rootRows,\n) => {\n  const groupedBy = grouping.columnName;\n  return getChildGroups(rows as any[], grouping, rootRows as any[])\n    .map(({ key, value = key, childRows }) => ({\n      groupedBy,\n      compoundKey: `${keyPrefix}${key}`,\n      key,\n      value,\n      [GRID_GROUP_CHECK]: true,\n      [GRID_GROUP_LEVEL_KEY]: `${GRID_GROUP_TYPE.toString()}_${groupedBy}`,\n      childRows,\n    }));\n};\n","import { PureComputed } from '@devexpress/dx-core';\nimport { GRID_GROUP_CHECK } from '../integrated-grouping/constants';\nimport { GetRowIdFn, Row, RowId, CustomGroupedRowsFn, GroupsGetterFn } from '../../types';\nimport { getCustomGroups } from './helpers';\nimport { getGroupRows } from '../integrated-grouping/helpers';\n\nexport const customGroupedRows: CustomGroupedRowsFn = (\n  rows, grouping, getChildGroups, rootRows = rows,\n) => {\n  const groupsGetter: GroupsGetterFn = (currentRows, currentGrouping, prefix) =>\n    getCustomGroups(\n      currentRows,\n      currentGrouping,\n      prefix,\n      getChildGroups,\n      rootRows,\n    );\n  return getGroupRows(rows, grouping, groupsGetter);\n};\n\nexport const customGroupingRowIdGetter: PureComputed<[GetRowIdFn, Row[]]> = (getRowId, rows) => {\n  const firstRow = rows.find(row => !row[GRID_GROUP_CHECK]);\n  if (!firstRow || getRowId(firstRow) !== undefined) {\n    return getRowId;\n  }\n\n  const map = new Map<Row, RowId>(rows\n    .filter(row => !row[GRID_GROUP_CHECK])\n    .map((row, rowIndex) => [row, rowIndex]) as [Row, RowId]);\n\n  return row => map.get(row)!;\n};\n","import { GroupingPanelItemsFn } from '../../types/';\n\nexport const groupingPanelItems: GroupingPanelItemsFn = (\n  columns, grouping, draftGrouping,\n) => {\n  const items = draftGrouping.map(({ columnName }) => ({\n    column: columns.find(c => c.name === columnName)!,\n    draft: !grouping.some(columnGrouping => columnGrouping.columnName === columnName),\n  }));\n\n  grouping.forEach(({ columnName }, index) => {\n    if (draftGrouping.some(columnGrouping => columnGrouping.columnName === columnName)) return;\n    items.splice(index, 0, {\n      column: columns.find(c => c.name === columnName)!,\n      draft: true,\n    });\n  });\n\n  return items;\n};\n","export const setCurrentPage = (prevPage: number, page: number) => page;\nexport const setPageSize = (prevPageSize: number, size: number) => size;\n","import { PureComputed } from '@devexpress/dx-core';\n\nexport const clamp: PureComputed<[number, number]> = (value, max) => (\n  Math.max(Math.min(value, max), 0)\n);\n","import { clamp } from './helpers';\nimport { Row, GetRowLevelKeyFn, CurrentPageFn } from '../../types';\nimport { PureComputed } from '@devexpress/dx-core';\n\n// tslint:disable-next-line:max-line-length\nconst PAGE_HEADERS_OVERFLOW_ERROR = 'Max row level exceeds the page size. Consider increasing the page size.';\n\nexport const paginatedRows: PureComputed<[Row[], number, number]> = (rows, pageSize, page) => (\n  pageSize\n    ? rows.slice(pageSize * page, pageSize * (page + 1))\n    : rows as Row[]\n);\n\nexport const rowsWithPageHeaders: PureComputed<[Row[], number, GetRowLevelKeyFn]> = (\n  rows, pageSize, getRowLevelKey,\n) => {\n  if (!pageSize || !getRowLevelKey) return rows as Row[];\n\n  let result = rows.slice();\n\n  let headerRows: any[] = [];\n  let currentIndex = 0;\n  while (result.length > currentIndex) {\n    const row = result[currentIndex];\n    const levelKey = getRowLevelKey(row);\n    if (levelKey) {\n      const headerIndex = headerRows.findIndex(headerRow => getRowLevelKey(headerRow) === levelKey);\n      // tslint:disable-next-line:prefer-conditional-expression\n      if (headerIndex === -1) {\n        headerRows = [...headerRows, row];\n      } else {\n        headerRows = [...headerRows.slice(0, headerIndex), row];\n      }\n      if (headerRows.length >= pageSize) {\n        throw new Error(PAGE_HEADERS_OVERFLOW_ERROR);\n      }\n    }\n    const indexInPage = currentIndex % pageSize;\n    if (indexInPage < headerRows.length && row !== headerRows[indexInPage]) {\n      result = [\n        ...result.slice(0, currentIndex),\n        headerRows[indexInPage],\n        ...result.slice(currentIndex),\n      ];\n    }\n    currentIndex += 1;\n  }\n\n  return result;\n};\n\nexport const rowCount = (rows: Row[]) => rows.length;\n\nexport const pageCount: PureComputed<[number, number]> = (count, pageSize) => (\n  pageSize ? Math.ceil(count / pageSize) : 1\n);\n\nexport const currentPage: CurrentPageFn = (\n  page, totalCount, pageSize, setCurrentPage,\n) => {\n  const totalPages = pageCount(totalCount, pageSize);\n  const adjustedCurrentPage = clamp(page, totalPages - 1);\n  if (page !== adjustedCurrentPage) {\n    setTimeout(() => setCurrentPage(adjustedCurrentPage));\n  }\n  return adjustedCurrentPage;\n};\n","import { PureComputed } from '@devexpress/dx-core';\nimport { NthRowOnPageFn } from '../../types';\n\nexport const firstRowOnPage: NthRowOnPageFn = (currentPage, pageSize, totalCount) => {\n  if (totalCount === 0) {\n    return 0;\n  }\n  return pageSize ? (currentPage * pageSize) + 1 : 1;\n};\n\nexport const lastRowOnPage: NthRowOnPageFn = (currentPage, pageSize, totalRowCount) => {\n  let result = totalRowCount;\n  if (pageSize) {\n    const index = (currentPage + 1) * pageSize;\n    result = index > totalRowCount ? totalRowCount : index;\n  }\n\n  return result;\n};\n\nexport const calculateStartPage: PureComputed<[number, number, number]> = (\n  currentPage, maxButtonCount, totalPageCount,\n) => (\n  Math.max(\n    Math.min(\n    currentPage - Math.floor(maxButtonCount / 2),\n      (totalPageCount - maxButtonCount) + 1,\n    ),\n    1,\n  )\n);\n","import { PureComputed } from '@devexpress/dx-core';\nimport { RowId } from '../types';\n\nexport const toggle: PureComputed<[RowId[], RowId[], boolean?]> = (\n  source, items, state?,\n) => {\n  const itemsSet = new Set(items);\n\n  let sourceState: any = state;\n  if (sourceState === undefined) {\n    const availableSelection = source.filter(item => itemsSet.has(item));\n    sourceState = availableSelection.length !== itemsSet.size;\n  }\n\n  if (sourceState) {\n    const sourceSet = new Set(source);\n    return [\n      ...source,\n      ...items.filter(item => !sourceSet.has(item)),\n    ];\n  }\n\n  return source.filter(item => !itemsSet.has(item));\n};\n","import { toggle } from '../../utils/common-reducers';\nimport { ToggleRowsFieldReducer } from '../../types';\n\nexport const toggleSelection: ToggleRowsFieldReducer = (\n  selection, { rowIds, state },\n) => toggle(selection, rowIds, state);\n","import { PureComputed } from '@devexpress/dx-core';\nimport {\n  RowsWithSelection, UnwrapRowsComputed, RowId, RowsWithAvailableToSelectFn,\n} from '../../types';\n\ntype RowsSelectedFn = PureComputed<[RowsWithSelection, RowId[]], boolean>;\n\nexport const rowsWithAvailableToSelect: RowsWithAvailableToSelectFn = (\n  rows, getRowId, isGroupRow,\n) => {\n  let dataRows = rows;\n  if (isGroupRow) {\n    dataRows = dataRows.filter(row => !isGroupRow(row));\n  }\n  return { rows, availableToSelect: dataRows.map(row => getRowId(row)) };\n};\n\nexport const someSelected: RowsSelectedFn = ({ availableToSelect }, selection) => {\n  const selectionSet = new Set(selection);\n\n  return availableToSelect.length !== 0 && selectionSet.size !== 0\n    && availableToSelect.some(elem => selectionSet.has(elem))\n    && availableToSelect.some(elem => !selectionSet.has(elem));\n};\n\nexport const allSelected: RowsSelectedFn = ({ availableToSelect }, selection) => {\n  const selectionSet = new Set(selection);\n\n  return selectionSet.size !== 0 && availableToSelect.length !== 0\n    && !availableToSelect.some(elem => !selectionSet.has(elem));\n};\n\nexport const unwrapSelectedRows: UnwrapRowsComputed = ({ rows }) => rows;\n","import { PureReducer } from '@devexpress/dx-core';\nimport { RowId, Row, RowIdsPayload, RowPayload, RowChangePayload,\n  RowChanges, EditingCell, EditingCellsPayload,\n} from '../../types';\n\nexport const startEditRows: PureReducer<RowId[], RowIdsPayload> = (\n  prevEditingRowIds, { rowIds },\n) => [...prevEditingRowIds, ...rowIds];\n\nexport const stopEditRows: PureReducer<RowId[], RowIdsPayload> = (\n  prevEditingRowIds, { rowIds },\n) => {\n  const rowIdSet = new Set(rowIds);\n  return prevEditingRowIds.filter(id => !rowIdSet.has(id));\n};\n\nexport const startEditCells: PureReducer<EditingCell[], EditingCellsPayload> = (\n  prevEditingCells, { editingCells },\n) => [...prevEditingCells, ...editingCells];\n\nexport const stopEditCells: PureReducer<EditingCell[], EditingCellsPayload> = (\n  prevEditingCells, { editingCells },\n) => {\n  return prevEditingCells.filter(({ rowId, columnName }) => (\n    !editingCells.some(({ rowId: currentRowId, columnName: currentColumnName }) => (\n      currentRowId === rowId && currentColumnName === columnName\n    ))\n  ));\n};\n\nexport const addRow: PureReducer<Row[], RowPayload> = (\n  addedRows, { row } = { row: {} },\n) => [...addedRows, row];\n\nexport const changeAddedRow: PureReducer<Row[], RowChangePayload> = (\n  addedRows, { rowId, change },\n) => {\n  const result = addedRows.slice();\n  result[rowId] = { ...result[rowId], ...change };\n  return result;\n};\n\nexport const cancelAddedRows: PureReducer<Row[], RowIdsPayload> = (addedRows, { rowIds }) => {\n  const result: Row[] = [];\n  const indexSet = new Set(rowIds);\n  addedRows.forEach((row, index) => {\n    if (!indexSet.has(index)) {\n      result.push(row);\n    }\n  });\n  return result;\n};\n\nexport const changeRow: PureReducer<RowChanges, RowChangePayload> = (\n  prevRowChanges, { rowId, change },\n) => {\n  const prevChange = prevRowChanges[rowId] || {};\n  return {\n    ...prevRowChanges,\n    [rowId]: {\n      ...prevChange,\n      ...change,\n    },\n  };\n};\n\nexport const cancelChanges: PureReducer<RowChanges, RowIdsPayload> = (\n  prevRowChanges, { rowIds },\n) => {\n  const result = { ...prevRowChanges };\n  rowIds.forEach((rowId) => {\n    delete result[rowId];\n  });\n  return result;\n};\n\nexport const deleteRows: PureReducer<RowId[], RowIdsPayload> = (deletedRowIds, { rowIds }) => [\n  ...deletedRowIds, ...rowIds,\n];\n\nexport const cancelDeletedRows: PureReducer<RowId[], RowIdsPayload> = (\n  deletedRowIds, { rowIds },\n) => {\n  const rowIdSet = new Set(rowIds);\n  return deletedRowIds.filter(rowId => !rowIdSet.has(rowId));\n};\n","import { PureComputed } from '@devexpress/dx-core';\nimport {\n  EditingColumnExtension, CreateRowChangeFn, Row, RowId, RowChanges,\n} from '../../types';\n\nexport const changedRowsByIds: PureComputed<\n  [any, RowId[]], RowChanges\n> = (changes, rowIds) => {\n  const result = {};\n  rowIds.forEach((rowId) => {\n    result[rowId] = changes[rowId];\n  });\n  return result;\n};\n\nexport const addedRowsByIds: PureComputed<[Row[], RowId[]]> = (addedRows, rowIds) => {\n  const rowIdSet = new Set(rowIds);\n  const result: Row[] = [];\n  addedRows.forEach((row, index) => {\n    if (rowIdSet.has(index)) {\n      result.push(row);\n    }\n  });\n  return result;\n};\n\nconst defaultCreateRowChange: CreateRowChangeFn = (row, value, columnName) => (\n  { [columnName]: value }\n);\nexport const createRowChangeGetter: PureComputed<\n  [CreateRowChangeFn?, EditingColumnExtension[]?], CreateRowChangeFn\n> = (\n  createRowChange = defaultCreateRowChange,\n  columnExtensions = [],\n) => {\n  const map = columnExtensions.reduce((acc, columnExtension) => {\n    if (columnExtension.createRowChange) {\n      acc[columnExtension.columnName] = columnExtension.createRowChange;\n    }\n    return acc;\n  }, {});\n\n  return (row, value, columnName) => {\n    if (map[columnName]) {\n      return map[columnName](row, value, columnName);\n    }\n    return createRowChange(row, value, columnName);\n  };\n};\n","import { PureComputed } from '@devexpress/dx-core';\nimport { RowId, RowChanges } from '../../types';\n\nexport const getRowChange: PureComputed<[RowChanges, RowId], any> = (\n  rowChanges, rowId,\n) => rowChanges[rowId] || {};\n","export const TABLE_REORDERING_TYPE = Symbol('reordering');\n","import { PureReducer, slice } from '@devexpress/dx-core';\nimport { ColumnOrder, ChangeColumnOrderPayload } from '../../types';\n\nexport const changeColumnOrder: PureReducer<ColumnOrder, ChangeColumnOrderPayload> = (\n  order, { sourceColumnName, targetColumnName },\n) => {\n  const sourceColumnIndex = order.indexOf(sourceColumnName);\n  const targetColumnIndex = order.indexOf(targetColumnName);\n  const newOrder = slice(order);\n\n  newOrder.splice(sourceColumnIndex, 1);\n  newOrder.splice(targetColumnIndex, 0, sourceColumnName);\n  return newOrder;\n};\n","export const TABLE_DATA_TYPE = Symbol('data');\nexport const TABLE_NODATA_TYPE = Symbol('nodata');\nexport const TABLE_FLEX_TYPE = Symbol('flex');\n","import { PureComputed, slice } from '@devexpress/dx-core';\nimport mergeSort from '../../utils/merge-sort';\nimport { TABLE_DATA_TYPE } from '../table/constants';\nimport { TABLE_REORDERING_TYPE } from './constants';\nimport { OrderedColumnsComputed, DraftOrderComputed, TableRow } from '../../types';\n\nexport const orderedColumns: OrderedColumnsComputed = (\n  tableColumns = [], order,\n) => mergeSort(tableColumns, (a, b) => {\n  if (a.type !== TABLE_DATA_TYPE || b.type !== TABLE_DATA_TYPE) return 0;\n\n  const aPos = order.indexOf(a.column.name);\n  const bPos = order.indexOf(b.column.name);\n  return aPos - bPos;\n});\n\nexport const tableHeaderRowsWithReordering: PureComputed<[TableRow[]]> = tableHeaderRows => [\n  ...tableHeaderRows,\n  {\n    key: TABLE_REORDERING_TYPE.toString(),\n    type: TABLE_REORDERING_TYPE,\n    height: 0,\n  },\n];\n\nexport const draftOrder: DraftOrderComputed = (order, sourceColumnIndex, targetColumnIndex) => {\n  if (sourceColumnIndex === -1\n    || targetColumnIndex === -1\n    || sourceColumnIndex === targetColumnIndex) {\n    return order;\n  }\n\n  const result = slice(order);\n  const sourceColumn = order[sourceColumnIndex];\n  result.splice(sourceColumnIndex, 1);\n  result.splice(targetColumnIndex, 0, sourceColumn);\n\n  return result;\n};\n","import { ColumnSizesFn, ValidValueFn, ConvertWidthFn, ColumnWidthFn } from '../../types';\n\nconst getColumnWidth: ColumnWidthFn = (\n  columnWidths, name, {\n    columnName, cachedWidths, shift, minColumnWidth, maxColumnWidth, columnExtensions = [],\n}) => {\n  const change = name === columnName ? shift : -shift;\n  const column  = columnWidths.find(elem => elem.columnName === name)!;\n  const extension = columnExtensions.find(elem => elem.columnName === name);\n  const width = typeof column.width === 'number'\n    ? column.width\n    : cachedWidths[name];\n  const minWidth = extension && extension.minWidth! >= 0\n    ? extension.minWidth\n    : minColumnWidth;\n  const maxWidth = extension && extension.maxWidth! >= 0\n    ? extension.maxWidth\n    : maxColumnWidth;\n  const size = Math.max(\n    minWidth!,\n    Math.min(width + change, maxWidth!),\n  );\n\n  return ({ width, size });\n};\n\nexport const getColumnSizes: ColumnSizesFn = (\n  columnWidths, payload) => {\n  const { columnName, nextColumnName, resizingMode, shift } = payload;\n  const { width, size } = getColumnWidth(columnWidths, columnName, payload);\n\n  if (resizingMode === 'nextColumn') {\n    const { width: nextWidth, size: nextSize } = getColumnWidth(\n      columnWidths, nextColumnName, payload,\n    );\n\n    if (size + nextSize !== width + nextWidth) {\n      const moreThanLimit = size + nextSize > width + nextWidth;\n      const columnExpand = shift > 0;\n      if (moreThanLimit !== columnExpand) {\n        return { size, nextSize: width + nextWidth - size };\n      }\n      return { size: width + nextWidth - nextSize, nextSize };\n    }\n    return { size, nextSize };\n  }\n\n  return { size };\n};\n\nexport const isValidValue: ValidValueFn = (value, validUnits) => {\n  const numb = parseInt(value, 10);\n  const unit = numb ? value.substr(numb.toString().length) : value;\n  const sizeIsAuto = isNaN(numb) && unit === 'auto';\n  const sizeIsValid = numb >= 0 && validUnits.some(validUnit => validUnit === unit);\n  return sizeIsAuto || sizeIsValid;\n};\n\nexport const convertWidth: ConvertWidthFn = (value) => {\n  if (typeof value === 'string') {\n    const numb = parseInt(value, 10);\n    if (value.substr(numb.toString().length).length > 0) {\n      return value;\n    }\n    return numb;\n  }\n  return value;\n};\n","import { TABLE_DATA_TYPE } from '../table/constants';\nimport { TableColumn, SpecifyWidthsFn, TableColumnsWithWidthFn, ErrorFn } from '../../types';\nimport { isValidValue, convertWidth } from './helpers';\n\nconst VALID_UNITS = ['px', '%', 'em', 'rem', 'vm', 'vh', 'vmin', 'vmax', ''];\nconst NOT_FOR_WIDGET_UNITS = ['%'];\n/* tslint:disable max-line-length */\nconst COLUMN_RESIZING_ERROR = 'The columnWidths property of the TableColumnResizing plugin is given an invalid value.';\n\nconst specifyWidths: SpecifyWidthsFn = (tableColumns, widths, resizingMode, onError) => {\n  if (resizingMode !== 'widget' && resizingMode !== 'nextColumn') {\n    onError();\n  }\n  if (!widths.length) return tableColumns;\n  return tableColumns\n    .reduce((acc, tableColumn) => {\n      if (tableColumn.type === TABLE_DATA_TYPE) {\n        const columnName = tableColumn.column!.name;\n        const column = widths.find(el => el.columnName === columnName);\n        const width = column && column.width;\n        if (typeof width !== 'number') {\n          if (width === undefined) {\n            onError();\n          } else if (!isValidValue(width, VALID_UNITS)) {\n            onError();\n          } else if (resizingMode === 'widget' && isValidValue(width, NOT_FOR_WIDGET_UNITS)) {\n            onError();\n          }\n        } else if (width < 0) {\n          onError();\n        }\n        if (width === undefined) {\n          acc.push(tableColumn);\n        } else {\n          acc.push({ ...tableColumn, width: convertWidth(width) });\n        }\n      } else {\n        acc.push(tableColumn);\n      }\n      return acc;\n    }, [] as TableColumn[]);\n};\n\nexport const tableColumnsWithWidths: TableColumnsWithWidthFn = (\n  tableColumns, columnWidths, resizingMode,\n) => specifyWidths(tableColumns, columnWidths, resizingMode, throwError);\n\nexport const tableColumnsWithDraftWidths: TableColumnsWithWidthFn = (\n  tableColumns, draftColumnWidths, resizingMode,\n) => specifyWidths(tableColumns, draftColumnWidths, resizingMode, () => {});\n\nconst throwError: ErrorFn = () => {\n  throw new Error(COLUMN_RESIZING_ERROR);\n};\n","import { slice } from '@devexpress/dx-core';\nimport { ColumnWidthReducer } from '../../types';\nimport { getColumnSizes } from './helpers';\n\nexport const changeTableColumnWidth: ColumnWidthReducer = (state, payload) => {\n  const { columnWidths } = state;\n  const { columnName, nextColumnName, resizingMode } = payload;\n  const nextColumnWidth = slice(columnWidths);\n  const index = nextColumnWidth.findIndex(elem => elem.columnName === columnName);\n  const nextIndex = nextColumnWidth.findIndex(elem => elem.columnName === nextColumnName);\n  const { size, nextSize } = getColumnSizes(columnWidths, payload);\n\n  nextColumnWidth.splice(index, 1, { columnName, width: size });\n  if (resizingMode === 'nextColumn') {\n    nextColumnWidth.splice(nextIndex, 1, { columnName: nextColumnName, width: nextSize });\n  }\n  return {\n    columnWidths: nextColumnWidth,\n  };\n};\n\nexport const draftTableColumnWidth: ColumnWidthReducer = (state, payload) => {\n  const { columnWidths } = state;\n  const { columnName, nextColumnName, resizingMode } = payload;\n  const { size, nextSize } = getColumnSizes(columnWidths, payload);\n\n  if (resizingMode === 'nextColumn') {\n    return { draftColumnWidths: [\n      { columnName, width: size }, { columnName: nextColumnName, width: nextSize! },\n    ] };\n  }\n  return { draftColumnWidths: [{ columnName, width: size }] };\n};\n\nexport const cancelTableColumnWidthDraft = () => ({\n  draftColumnWidths: [],\n});\n","export const TABLE_EDIT_COMMAND_TYPE = Symbol('editCommand');\n","export const TABLE_ADDED_TYPE = Symbol('added');\nexport const TABLE_EDIT_TYPE = Symbol('edit');\n","export const TABLE_HEADING_TYPE = Symbol('heading');\n","import { TABLE_ADDED_TYPE, TABLE_EDIT_TYPE } from '../table-edit-row/constants';\nimport { TABLE_DATA_TYPE } from '../table/constants';\nimport { TABLE_HEADING_TYPE } from '../table-header-row/constants';\nimport { TABLE_EDIT_COMMAND_TYPE } from './constants';\nimport { IsSpecificCellFn } from '../../types';\n\nexport const isHeadingEditCommandsTableCell: IsSpecificCellFn = (\n  tableRow, tableColumn,\n) => tableRow.type === TABLE_HEADING_TYPE && tableColumn.type === TABLE_EDIT_COMMAND_TYPE;\nexport const isEditCommandsTableCell: IsSpecificCellFn = (\n  tableRow, tableColumn,\n) => (tableRow.type === TABLE_DATA_TYPE || tableRow.type === TABLE_ADDED_TYPE\n  || tableRow.type === TABLE_EDIT_TYPE) && tableColumn.type === TABLE_EDIT_COMMAND_TYPE;\n","import { PureComputed } from '@devexpress/dx-core';\nimport { TABLE_EDIT_COMMAND_TYPE } from './constants';\nimport { TableColumn } from '../../types';\nimport { convertWidth } from '../table-column-resizing/helpers';\n\nexport const tableColumnsWithEditing: PureComputed<[TableColumn[], number | string]> = (\n  tableColumns, width,\n) => [\n  { width: convertWidth(width),\n    key: TABLE_EDIT_COMMAND_TYPE.toString(), type: TABLE_EDIT_COMMAND_TYPE },\n  ...tableColumns];\n","import { TABLE_ADDED_TYPE, TABLE_EDIT_TYPE } from './constants';\nimport { TABLE_DATA_TYPE } from '../table/constants';\nimport { IsSpecificRowFn, IsSpecificCellFn } from '../../types';\n\nexport const isEditTableCell: IsSpecificCellFn = (\n  tableRow, tableColumn,\n) => (tableRow.type === TABLE_ADDED_TYPE || tableRow.type === TABLE_EDIT_TYPE)\n  && tableColumn.type === TABLE_DATA_TYPE;\nexport const isAddedTableRow: IsSpecificRowFn = tableRow => tableRow.type === TABLE_ADDED_TYPE;\nexport const isEditTableRow: IsSpecificRowFn = tableRow => tableRow.type === TABLE_EDIT_TYPE;\n","import { slice } from '@devexpress/dx-core';\nimport { TABLE_ADDED_TYPE, TABLE_EDIT_TYPE } from './constants';\nimport { TABLE_DATA_TYPE } from '../table/constants';\nimport { TableRowsWithEditingFn } from '../../types';\n\nexport const tableRowsWithEditing: TableRowsWithEditingFn = (\n  tableRows, editingRowIds, addedRows, rowHeight,\n) => {\n  const rowIds = new Set(editingRowIds);\n  const editedTableRows = tableRows\n    .map(tableRow => (\n      tableRow.type === TABLE_DATA_TYPE && rowIds.has(tableRow.rowId!)\n        ? {\n          ...tableRow,\n          type: TABLE_EDIT_TYPE,\n          height: rowHeight,\n        }\n        : tableRow\n    ));\n\n  const addedTableRows = addedRows\n    .map((row, rowIndex) => ({\n      row,\n      key: `${TABLE_ADDED_TYPE.toString()}_${rowIndex}`,\n      type: TABLE_ADDED_TYPE,\n      rowId: rowIndex,\n      height: rowHeight,\n    }));\n\n  return [\n    ...slice(addedTableRows).reverse(),\n    ...editedTableRows,\n  ];\n};\n","import { TableRowsWithEditingCellsFn, TableColumnsWithEditingCellsFn } from '../../types';\nimport { TABLE_DATA_TYPE } from '../table/constants';\n\nexport const rowsWithEditingCells: TableRowsWithEditingCellsFn = (\n  tableBodyRows, editingCells,\n) => tableBodyRows.map((row) => {\n  const { rowId, type } = row;\n  if (\n    rowId !== undefined &&\n    type === TABLE_DATA_TYPE &&\n    editingCells.some(elem => elem.rowId === rowId)\n  ) {\n    return {\n      ...row,\n      hasEditCell: true,\n    };\n  }\n  return row;\n});\n\nexport const columnsWithEditingCells: TableColumnsWithEditingCellsFn = (\n  tableColumns, editingCells,\n) => tableColumns.map((tableColumn) => {\n  const columnName = tableColumn.column ? tableColumn.column.name : undefined;\n  if (columnName !== undefined && editingCells.some(elem => elem.columnName === columnName)) {\n    return {\n      ...tableColumn,\n      hasEditCell: true,\n    };\n  }\n  return tableColumn;\n});\n","export const TABLE_FILTER_TYPE = Symbol('filter');\nexport const DEFAULT_FILTER_OPERATIONS = [\n  'contains',\n  'notContains',\n  'startsWith',\n  'endsWith',\n  'equal',\n  'notEqual',\n];\n","import { PureComputed } from '@devexpress/dx-core';\nimport { TABLE_FILTER_TYPE, DEFAULT_FILTER_OPERATIONS } from './constants';\nimport { TABLE_DATA_TYPE } from '../table/constants';\nimport {\n  IsSpecificCellFn, IsSpecificRowFn, FilterOperation, GetAvailableFilterOperationsFn,\n  GetSelectedFilterOperationFn,\n} from '../../types';\n\nexport const isFilterTableCell: IsSpecificCellFn = (\n  tableRow, tableColumn,\n) => tableRow.type === TABLE_FILTER_TYPE && tableColumn.type === TABLE_DATA_TYPE;\n\nexport const isFilterTableRow: IsSpecificRowFn = tableRow => tableRow.type === TABLE_FILTER_TYPE;\n\nexport const getColumnFilterOperations: PureComputed<\n  [GetAvailableFilterOperationsFn, string],\n  FilterOperation[]\n> = (\n  getAvailableFilterOperations, columnName,\n) => (getAvailableFilterOperations && getAvailableFilterOperations(columnName))\n  || DEFAULT_FILTER_OPERATIONS;\n\nexport const isFilterValueEmpty = (value: any) => value === undefined || !String(value).length;\n\nexport const getSelectedFilterOperation: GetSelectedFilterOperationFn = (\n  filterOperations, columnName, columnFilter, columnFilterOperations,\n) => {\n  if (columnFilter && columnFilter.operation) {\n    return columnFilter.operation;\n  }\n  if (filterOperations[columnName]) {\n    return filterOperations[columnName];\n  }\n  return columnFilterOperations[0];\n};\n","import { PureComputed } from '@devexpress/dx-core';\nimport { TABLE_FILTER_TYPE } from './constants';\nimport { TableRow } from '../../types';\n\nexport const tableHeaderRowsWithFilter: PureComputed<[TableRow[], number]> = (\n  headerRows, rowHeight,\n) => [\n  ...headerRows,\n  { key: TABLE_FILTER_TYPE.toString(), type: TABLE_FILTER_TYPE, height: rowHeight }];\n","export const TABLE_GROUP_TYPE = Symbol('group');\n","import { PureComputed } from '@devexpress/dx-core';\nimport {\n  GetVisibleBoundaryWithFixedFn, VisibleBoundary, GetVisibleBoundaryFn, GetSpanBoundaryFn,\n  CollapseBoundariesFn, GetItemSizeFn, GetCollapsedColumnsFn, CollapsedColumn,\n  GetCollapsedAndStubRowsFn, GetCollapsedCellsFn, GetCollapsedGridFn, GetColumnWidthFn,\n  CalculateRowHeightFn,\n  TableColumn,\n  CollapsedCell,\n  GetColumnWidthGetterFn,\n  GetCollapsedGridsFn,\n  CollapsedRow,\n  GetColSpanFn,\n  GetSpecificRenderBoundaryFn,\n  GetRenderBoundaryFn,\n  GetRowsVisibleBoundaryFn,\n  TableRow,\n} from '../types';\nimport { TABLE_FLEX_TYPE, intervalUtil } from '..';\n\nexport const TABLE_STUB_TYPE = Symbol('stub');\n\nexport const getVisibleBoundaryWithFixed: GetVisibleBoundaryWithFixedFn = (\n  visibleBoundary, items,\n) => items.reduce((acc, item, index) => {\n  if (item.fixed && (index < visibleBoundary[0] || index > visibleBoundary[1])) {\n    acc.push([index, index]);\n  }\n  return acc;\n}, [visibleBoundary] as [VisibleBoundary]);\n\nexport const getVisibleBoundary: GetVisibleBoundaryFn = (\n  items, viewportStart, viewportSize, getItemSize, skipItems, offset = 0,\n) => {\n  let start: number | undefined;\n  let end: number | undefined;\n  let index = items[0] && items[0].rowId >= skipItems[0] ? 0 : skipItems[0];\n  const itemSize = getItemSize();\n  let beforePosition = offset !== 0 ? (offset - skipItems[0]) * itemSize : 0;\n\n  const viewportEnd = viewportStart + viewportSize;\n\n  while (end === undefined && index < items.length) {\n    const item = items[index];\n    const afterPosition = beforePosition + getItemSize(item);\n    const isVisible = (beforePosition >= viewportStart && beforePosition < viewportEnd)\n      || (afterPosition > viewportStart && afterPosition <= viewportEnd)\n      || (beforePosition < viewportStart && afterPosition > viewportEnd);\n    if (isVisible && start === undefined) {\n      start = index;\n    }\n    if (!isVisible && start !== undefined) {\n      end = index - 1;\n      break;\n    }\n    index += 1;\n    beforePosition = afterPosition;\n  }\n  if (start !== undefined && end === undefined) {\n    end = index - 1;\n  }\n  end = end === undefined ? 0 : end;\n  start = start === undefined ? 0 : start;\n\n  return [start + offset, end + offset];\n};\n\nexport const getRenderBoundary: GetRenderBoundaryFn = (itemsCount, visibleBoundary, overscan) => {\n  let [start, end] = visibleBoundary;\n  start = Math.max(0, start - overscan);\n  end = Math.min(itemsCount - 1, end + overscan);\n\n  return [start, end];\n};\n\nexport const getColumnBoundaries: PureComputed<\n  [TableColumn[], number, number, GetColumnWidthFn], VisibleBoundary[]\n> = (columns, left, width, getColumnWidth) => (\n  getVisibleBoundaryWithFixed(\n    getColumnsRenderBoundary(\n      columns.length,\n      getVisibleBoundary(columns, left, width, getColumnWidth, [0, 0], 0),\n    ),\n    columns,\n  )\n);\nexport const getRowsVisibleBoundary: GetRowsVisibleBoundaryFn = (\n  rows, top, height, getRowHeight, skipItems, offset, isDataRemote,\n) => {\n  const rowHeight = getRowHeight();\n  const beforePosition = offset !== 0 ? (offset - skipItems[0]) * rowHeight : 0;\n  const noVisibleRowsLoaded = rowHeight > 0 &&\n    beforePosition + rows.length * rowHeight < top ||\n    top < beforePosition;\n\n  let boundaries;\n  if (isDataRemote && noVisibleRowsLoaded) {\n    const topIndex = Math.round(top / rowHeight) + skipItems[0];\n    boundaries = [topIndex, topIndex];\n  } else {\n    boundaries = getVisibleBoundary(rows, top, height, getRowHeight, skipItems, offset);\n  }\n\n  return boundaries;\n};\n\nexport const getColumnsRenderBoundary: GetSpecificRenderBoundaryFn = (\n  columnCount, visibleBoundary,\n) => getRenderBoundary(columnCount, visibleBoundary, 1);\n\nexport const getRowsRenderBoundary: GetSpecificRenderBoundaryFn = (\n  rowsCount, visibleBoundary,\n) => getRenderBoundary(rowsCount, visibleBoundary, 3);\n\nexport const getSpanBoundary: GetSpanBoundaryFn = (\n  items, visibleBoundaries, getItemSpan,\n) => visibleBoundaries\n  .map((visibleBoundary) => {\n    const endIndex = Math.min(visibleBoundary[1], items.length - 1);\n    let end = endIndex;\n    let start = visibleBoundary[0] <= end ? visibleBoundary[0] : 0;\n\n    for (let index = 0; index <= endIndex; index += 1) {\n      const span = getItemSpan(items[index]);\n      if (index < visibleBoundary[0] && index + span > visibleBoundary[0]) {\n        start = index;\n      }\n      if (index + (span - 1) > visibleBoundary[1]) {\n        end = index + (span - 1);\n      }\n    }\n    return [start, end] as VisibleBoundary;\n  });\n\nexport const collapseBoundaries: CollapseBoundariesFn = (\n  itemsCount, visibleBoundaries, spanBoundaries,\n) => {\n  const breakpoints = new Set([0, itemsCount]);\n  spanBoundaries.forEach(rowBoundaries => rowBoundaries\n    .forEach((boundary) => {\n      breakpoints.add(boundary[0]);\n      // next interval starts after span end point\n      breakpoints.add(Math.min(boundary[1] + 1, itemsCount));\n    }));\n\n  visibleBoundaries\n    .filter(boundary => boundary.every(bound => 0 <= bound && bound < itemsCount))\n    .forEach((boundary) => {\n      for (let point = boundary[0]; point <= boundary[1]; point += 1) {\n        breakpoints.add(point);\n      }\n      if (boundary[1] + 1 < itemsCount) {\n        // close last visible point\n        breakpoints.add(boundary[1] + 1);\n      }\n    });\n\n  const bp = [...breakpoints].sort((a, b) => a - b);\n  const bounds: any[] = [];\n  for (let i = 0; i < bp.length - 1; i += 1) {\n    bounds.push([\n      bp[i],\n      bp[i + 1] - 1,\n    ]);\n  }\n\n  return bounds;\n};\n\nconst getItemsSize: GetItemSizeFn = (items, startIndex, endIndex, getItemSize) => {\n  let size = 0;\n  for (let i = startIndex; i <= endIndex; i += 1) {\n    size += getItemSize(items[i]);\n  }\n  return size;\n};\n\nexport const getCollapsedColumns: GetCollapsedColumnsFn = (\n  columns, visibleBoundaries, boundaries, getColumnWidth,\n) => {\n  const collapsedColumns: CollapsedColumn[] = [];\n  boundaries.forEach((boundary) => {\n    const isVisible = visibleBoundaries.reduce((acc, visibleBoundary) => (\n      acc || (visibleBoundary[0] <= boundary[0] && boundary[1] <= visibleBoundary[1])\n    ), false);\n\n    if (isVisible) {\n      const column = columns[boundary[0]];\n      collapsedColumns.push({\n        ...column,\n        width: column.type === TABLE_FLEX_TYPE ? undefined : getColumnWidth(column),\n      });\n    } else {\n      collapsedColumns.push({\n        key: `${TABLE_STUB_TYPE.toString()}_${boundary[0]}_${boundary[1]}`,\n        type: TABLE_STUB_TYPE,\n        width: getItemsSize(columns, boundary[0], boundary[1], getColumnWidth),\n      });\n    }\n  });\n  return collapsedColumns;\n};\n\nexport const getCollapsedRows: GetCollapsedAndStubRowsFn = (\n  rows, visibleBoundary, boundaries, skipItems, getRowHeight, getCells, offset,\n) => {\n  const collapsedRows: any[] = [];\n  boundaries.forEach((boundary) => {\n    const isVisible = visibleBoundary[0] <= boundary[0] && boundary[1] <= visibleBoundary[1];\n    if (isVisible) {\n      const row = rows[boundary[0] - offset];\n      collapsedRows.push({\n        row,\n        cells: getCells(row),\n      });\n    } else {\n      const row = {} as any;\n      collapsedRows.push({\n        row: {\n          key: `${TABLE_STUB_TYPE.toString()}_${boundary[0]}_${boundary[1]}`,\n          type: TABLE_STUB_TYPE,\n          height: calculateRowHeight(rows, skipItems, getRowHeight, boundary[0], boundary[1]),\n        },\n        cells: getCells(row),\n      });\n    }\n  });\n  return collapsedRows;\n};\n\nconst calculateRowHeight: CalculateRowHeightFn = (\n  rows, skipItems, getRowHeight, bound1, bound2,\n) => {\n  if (bound1 === 0) {\n    let end = bound2;\n    if (rows.length && bound2 > rows[rows.length - 1].rowId!) {\n      end = bound2 - skipItems[1];\n    }\n    return getItemsSize(rows, skipItems[0], end, getRowHeight);\n  }\n  return getItemsSize(rows, bound1, bound2 - skipItems[1], getRowHeight);\n};\n\nexport const getCollapsedCells: GetCollapsedCellsFn = (\n  row, columns, spanBoundaries, boundaries, getColSpan,\n) => {\n  const collapsedCells: CollapsedCell[] = [];\n  let index = 0;\n  while (index < boundaries.length) {\n    const boundary = boundaries[index];\n    const isSpan = spanBoundaries.reduce((acc, spanBoundary) => (\n      acc || (spanBoundary[0] <= boundary[0] && boundary[1] <= spanBoundary[1])), false);\n    if (isSpan) {\n      const column = columns[boundary[0]];\n      const realColSpan = getColSpan(row, column);\n      if (realColSpan + index - 1 !== columns.length) {\n        const realColSpanEnd = (realColSpan + boundary[0]) - 1;\n        const colSpanEnd = boundaries.findIndex(\n          colSpanBoundary => colSpanBoundary[0]\n          <= realColSpanEnd && realColSpanEnd\n          <= colSpanBoundary[1],\n        );\n        collapsedCells.push({\n          column,\n          colSpan: (colSpanEnd - index) + 1,\n        });\n      } else {\n        collapsedCells.push({\n          column,\n          colSpan: realColSpan,\n        });\n      }\n      index += 1;\n    } else {\n      collapsedCells.push({\n        column: {\n          key: `${TABLE_STUB_TYPE.toString()}_${boundary[0]}_${boundary[1]}`,\n          type: TABLE_STUB_TYPE,\n        },\n        colSpan: 1,\n      });\n      index += 1;\n    }\n  }\n  return collapsedCells;\n};\n\nconst getVisibleColumnBoundaries: PureComputed<\n  [TableRow[], VisibleBoundary, TableColumn[], VisibleBoundary[], GetColSpanFn], VisibleBoundary[]\n> = (rows, boundaries, columns, columnsVisibleBoundary, getColSpan) => {\n  const rowSpanBoundaries = rows\n    .slice(boundaries[0], boundaries[1] + 1)\n    .map(row => getSpanBoundaryByRow(row, columns, columnsVisibleBoundary, getColSpan));\n  return collapseBoundaries(\n    columns.length,\n    columnsVisibleBoundary,\n    rowSpanBoundaries,\n  );\n};\n\nexport const getCollapsedGrid: GetCollapsedGridFn = ({\n  rows,\n  columns,\n  rowsVisibleBoundary,\n  columnsVisibleBoundary,\n  getColumnWidth,\n  getRowHeight,\n  getColSpan,\n  totalRowCount,\n  offset,\n}) => {\n  if (!columns.length) {\n    return {\n      columns: [],\n      rows: [],\n    };\n  }\n\n  const boundaries = rowsVisibleBoundary || [0, rows.length - 1 || 1];\n  const columnBoundaries = getVisibleColumnBoundaries(rows, boundaries, columns,\n    columnsVisibleBoundary, getColSpan);\n  const rowBoundaries = collapseBoundaries(totalRowCount!, [boundaries], []);\n\n  return {\n    columns: getCollapsedColumns(\n      columns,\n      columnsVisibleBoundary,\n      columnBoundaries,\n      getColumnWidth,\n    ),\n    rows: getCollapsedRows(\n      rows,\n      boundaries,\n      rowBoundaries,\n      [0, 0],\n      getRowHeight,\n      row => getCollapsedCells(\n        row,\n        columns,\n        getSpanBoundaryByRow(row, columns, columnsVisibleBoundary, getColSpan),\n        columnBoundaries,\n        getColSpan,\n      ),\n      offset,\n    ),\n  };\n};\n\nexport const getColumnWidthGetter: GetColumnWidthGetterFn = (\n  tableColumns, tableWidth, minColumnWidth,\n) => {\n  const colsHavingWidth = tableColumns.filter(col => typeof col.width === 'number');\n  const columnsWidth = colsHavingWidth.reduce((acc, col) => (acc + (col.width as number)!), 0);\n  const autoWidth = (tableWidth - columnsWidth) / (tableColumns.length - colsHavingWidth.length);\n  const autoColWidth = Math.max(autoWidth, minColumnWidth!);\n\n  return (column) => {\n    if (column) {\n      return column.type === TABLE_FLEX_TYPE ? 0 :\n        (typeof column.width === 'number' ? column.width : autoColWidth);\n    }\n    return autoColWidth;\n  };\n};\n\nconst getSpanBoundaryByRow: PureComputed<\n  [TableRow, TableColumn[], VisibleBoundary[], GetColSpanFn], VisibleBoundary[]\n> = (row, columns, visibleColumns, getColSpan) =>\n  getSpanBoundary(columns, visibleColumns, column => getColSpan(row, column));\n\nexport const getCollapsedGrids: GetCollapsedGridsFn = ({\n  headerRows,\n  bodyRows,\n  footerRows,\n  columns,\n  loadedRowsStart,\n  totalRowCount,\n  getCellColSpan,\n  viewport,\n  skipItems,\n  getRowHeight,\n  getColumnWidth,\n}) => {\n  if (!columns.length) {\n    return {\n      headerGrid: { columns: [], rows: [] },\n      bodyGrid: { columns: [], rows: [] },\n      footerGrid: { columns: [], rows: [] },\n    };\n  }\n  const getColSpan: GetColSpanFn =\n    (tableRow, tableColumn) => getCellColSpan!({ tableRow, tableColumn, tableColumns: columns });\n\n  const getCollapsedGridRows: PureComputed<\n    [TableRow[], number[], VisibleBoundary[], number?, number?], CollapsedRow[]\n  > = (rows, rowsBoundary, columnsBoundary, rowCount = rows.length, offset = 0) => {\n    return getCollapsedRows(rows, rowsBoundary,\n      collapseBoundaries(rowCount, [rowsBoundary], []),\n      skipItems,\n      getRowHeight,\n      row => getCollapsedCells(\n        row,\n        columns,\n        getSpanBoundaryByRow(row, columns, viewport.columns, getColSpan),\n        columnsBoundary,\n        getColSpan,\n      ),\n      offset,\n    );\n  };\n\n  const rowsVisibleBoundary = adjustedRenderRowBounds(viewport.rows, bodyRows.length,\n    loadedRowsStart);\n  const columnBoundaries = getVisibleColumnBoundaries(bodyRows, rowsVisibleBoundary,\n    columns, viewport.columns, getColSpan);\n  const commonColumns = getCollapsedColumns(\n    columns,\n    viewport.columns,\n    columnBoundaries,\n    getColumnWidth,\n  );\n\n  return {\n    headerGrid: {\n      columns: commonColumns,\n      rows: getCollapsedGridRows(\n        headerRows, getRowsRenderBoundary(headerRows.length, viewport.headerRows), columnBoundaries,\n      ),\n    },\n    bodyGrid: {\n      columns: commonColumns,\n      rows: getCollapsedGridRows(\n        bodyRows,\n        rowsVisibleBoundary,\n        columnBoundaries,\n        totalRowCount || 1,\n        loadedRowsStart,\n      ),\n    },\n    footerGrid: {\n      columns: commonColumns,\n      rows: getCollapsedGridRows(\n        footerRows, getRowsRenderBoundary(footerRows.length, viewport.footerRows), columnBoundaries,\n      ),\n    },\n  };\n};\n\nconst adjustedRenderRowBounds: PureComputed<[VisibleBoundary, number, number], number[]> = (\n  visibleBounds, rowCount, loadedRowsStart,\n) => {\n  const renderRowBoundaries = getRowsRenderBoundary(\n    loadedRowsStart + rowCount, visibleBounds,\n  );\n  const adjustedInterval = intervalUtil.intersect(\n    { start: renderRowBoundaries[0], end: renderRowBoundaries[1] },\n    { start: loadedRowsStart, end: loadedRowsStart + rowCount },\n  );\n  return [adjustedInterval.start, adjustedInterval.end];\n};\n","import { PureComputed } from '@devexpress/dx-core';\nimport { TABLE_GROUP_TYPE } from './constants';\nimport { TableRow, TableColumn, IsSpecificCellFn, Grouping, GroupSummaryItem } from '../../types';\nimport { TABLE_STUB_TYPE } from '../../utils/virtual-table';\nimport { TABLE_DATA_TYPE, TABLE_FLEX_TYPE } from '../table/constants';\n\ntype IsGroupIndentCellFn = PureComputed<[TableRow, TableColumn, Grouping[]], boolean>;\n\nconst getGroupIndexByColumn: PureComputed<[Grouping[], TableColumn], number> = (\n  grouping, tableColumn,\n) => grouping.findIndex(\n  columnGrouping => !!tableColumn.column && columnGrouping.columnName === tableColumn.column.name,\n);\n\nconst isIndentCell: IsGroupIndentCellFn = (\n    tableRow,\n    tableColumn,\n    grouping,\n  ) => {\n  if (tableColumn.column && tableRow.row.groupedBy === tableColumn.column.name) return false;\n  const rowGroupIndex = grouping.findIndex(\n    columnGrouping => columnGrouping.columnName === tableRow.row.groupedBy,\n  );\n  const columnGroupIndex = getGroupIndexByColumn(grouping, tableColumn);\n\n  return columnGroupIndex < rowGroupIndex;\n};\n\nexport const isGroupTableCell: IsSpecificCellFn = (\n  tableRow, tableColumn,\n) => !!(tableRow.type === TABLE_GROUP_TYPE && tableColumn.type === TABLE_GROUP_TYPE\n  && tableColumn.column\n  && tableColumn.column.name === tableRow.row.groupedBy);\n\nexport const isGroupIndentTableCell: IsGroupIndentCellFn = (\n  tableRow, tableColumn, grouping,\n) => (\n  tableRow.type === TABLE_GROUP_TYPE && tableColumn.type === TABLE_GROUP_TYPE &&\n  isIndentCell(tableRow, tableColumn, grouping)\n);\n\nexport const isGroupIndentStubTableCell: IsGroupIndentCellFn = (\n  tableRow, tableColumn, grouping,\n) => (\n  (tableRow.type === TABLE_GROUP_TYPE && tableColumn.type === TABLE_STUB_TYPE &&\n    isIndentCell(tableRow, tableColumn, grouping))\n);\n\nexport const isGroupTableRow = (tableRow: TableRow) => tableRow.type === TABLE_GROUP_TYPE;\n\nexport const isGroupRowOrdinaryCell: IsSpecificCellFn = (tableRow, tableColumn) => (\n  isGroupTableRow(tableRow) && !isGroupTableCell(tableRow, tableColumn)\n);\n\nconst columnHasGroupRowSummary: PureComputed<[TableColumn, GroupSummaryItem[]], boolean> = (\n  tableColumn, groupSummaryItems,\n) => (\n  !!(groupSummaryItems && groupSummaryItems\n    .some(item => (\n      (!item.showInGroupFooter && item.alignByColumn)\n        && item.columnName === (tableColumn.column && tableColumn.column.name)\n    )))\n);\n\nexport const isRowSummaryCell: PureComputed<\n  [TableRow, TableColumn, Grouping[], GroupSummaryItem[]], boolean\n> = (\n  tableRow, tableColumn, grouping, groupSummaryItems,\n) => (\n  columnHasGroupRowSummary(tableColumn, groupSummaryItems)\n  && !isGroupIndentTableCell(tableRow, tableColumn, grouping)\n);\n\nexport const isPreviousCellContainSummary: PureComputed<\n  [TableRow, TableColumn, TableColumn[], Grouping[], GroupSummaryItem[]], boolean\n> = (\n  tableRow, tableColumn, tableColumns, grouping, groupSummaryItems,\n) => {\n  const columnIndex = tableColumns.indexOf(tableColumn);\n  return columnIndex > 0 && isRowSummaryCell(\n    tableRow, tableColumns[columnIndex - 1], grouping, groupSummaryItems,\n  );\n};\n\nexport const calculateGroupCellIndent: PureComputed<[TableColumn, Grouping[], number], number> = (\n  tableColumn, grouping, indentWidth,\n) => (\n  indentWidth * getGroupIndexByColumn(grouping, tableColumn)\n);\n\nexport const sortAndSpliceColumns: PureComputed<[TableColumn[], number]> = (\n  tableColumns, firstVisibleColumnIndex,\n) => {\n  const groupColumns = tableColumns.filter(col => col.type === TABLE_GROUP_TYPE);\n  const dataColumns = tableColumns.filter(col => col.type === TABLE_DATA_TYPE);\n  const otherColumns = tableColumns.filter(\n    col =>\n      col.type !== TABLE_DATA_TYPE &&\n      col.type !== TABLE_GROUP_TYPE &&\n      col.type !== TABLE_FLEX_TYPE,\n  );\n\n  if (firstVisibleColumnIndex) {\n    const firstGroupIndex = tableColumns.indexOf(groupColumns[0]);\n    otherColumns.splice(0, Math.min(firstVisibleColumnIndex, firstGroupIndex));\n  }\n\n  return [...groupColumns, ...otherColumns, ...dataColumns];\n};\n","import { TABLE_DATA_TYPE } from '../table/constants';\nimport { TABLE_GROUP_TYPE } from './constants';\nimport { PureComputed } from '@devexpress/dx-core';\nimport {\n  TableColumn, TableRow, IsSpecificRowFn,\n  TableColumnsWithDraftGroupingFn,\n  TableColumnsWithGroupingFn,\n  GroupCellColSpanGetter,\n  GroupSummaryChainsFn,\n  SummaryItem,\n} from '../../types';\nimport { sortAndSpliceColumns } from './helpers';\n\nconst tableColumnsWithDraftGrouping: TableColumnsWithDraftGroupingFn = (\n  tableColumns, grouping, draftGrouping, showColumnWhenGrouped,\n) => tableColumns\n  .reduce((acc, tableColumn) => {\n    if (tableColumn.type !== TABLE_DATA_TYPE) {\n      acc.push(tableColumn);\n      return acc;\n    }\n\n    const columnName = tableColumn.column && tableColumn.column.name || '';\n    const columnGroupingExists = grouping\n      .some(columnGrouping => columnGrouping.columnName === columnName);\n    const columnDraftGroupingExists = draftGrouping\n      .some(columnGrouping => columnGrouping.columnName === columnName);\n\n    if ((!columnGroupingExists && !columnDraftGroupingExists)\n        || showColumnWhenGrouped(columnName)) {\n      acc.push(tableColumn);\n    } else if ((!columnGroupingExists && columnDraftGroupingExists)\n        || (columnGroupingExists && !columnDraftGroupingExists)) {\n      acc.push({\n        ...tableColumn,\n        draft: true,\n      });\n    }\n    return acc;\n  // tslint:disable-next-line: prefer-array-literal\n  }, [] as Array<TableColumn & { draft?: boolean }>);\n\nexport const tableColumnsWithGrouping: TableColumnsWithGroupingFn = (\n  columns, tableColumns, grouping, draftGrouping, indentColumnWidth, showColumnWhenGrouped,\n) => [\n  ...grouping.map((columnGrouping) => {\n    const groupedColumn = columns.find(column => column.name === columnGrouping.columnName);\n    return {\n      key: `${TABLE_GROUP_TYPE.toString()}_${groupedColumn!.name}`,\n      type: TABLE_GROUP_TYPE,\n      column: groupedColumn,\n      width: indentColumnWidth,\n    };\n  }),\n  ...tableColumnsWithDraftGrouping(tableColumns, grouping, draftGrouping, showColumnWhenGrouped),\n];\n\nexport const tableRowsWithGrouping: PureComputed<[TableRow[], IsSpecificRowFn]> = (\n  tableRows, isGroupRow,\n) => tableRows.map((tableRow) => {\n  if (tableRow.type !== TABLE_DATA_TYPE || !isGroupRow(tableRow.row)) {\n    return tableRow;\n  }\n  return {\n    ...tableRow,\n    key: `${TABLE_GROUP_TYPE.toString()}_${tableRow.row.compoundKey}`,\n    type: TABLE_GROUP_TYPE,\n  };\n});\n\nconst isRowLevelSummary: PureComputed<[SummaryItem[], string], boolean> = (\n  groupSummaryItems, colName,\n) => (\n  groupSummaryItems.some((item: any) => (\n    !item.showInGroupFooter && item.alignByColumn && item.columnName === colName),\n  )\n);\n\nconst groupSummaryChains: GroupSummaryChainsFn = (\n  tableRow,\n  tableColumns,\n  groupSummaryItems,\n  firstVisibleColumnIndex,\n) => {\n  let captionStarted = false;\n  return sortAndSpliceColumns(tableColumns, firstVisibleColumnIndex)\n    .reduce((acc, col) => {\n      const colName = (col.column && col.column.name) as string;\n      const colKey = col.key;\n      const isStartOfGroupCaption = col.type === TABLE_GROUP_TYPE\n        && tableRow.row.groupedBy === colName;\n      const isIndentColumn = col.type === TABLE_GROUP_TYPE\n        && tableRow.row.groupedBy !== colName && !captionStarted;\n\n      if (isStartOfGroupCaption) {\n        captionStarted = true;\n      }\n\n      if (isStartOfGroupCaption || isIndentColumn) {\n        acc.push([colKey]);\n      } else if (groupSummaryItems && isRowLevelSummary(groupSummaryItems, colName)) {\n        acc.push([colKey]);\n        acc.push([]);\n      } else {\n        acc[acc.length - 1].push(colKey);\n      }\n      return acc;\n    }, [[]] as string[][]);\n};\n\nexport const tableGroupCellColSpanGetter: GroupCellColSpanGetter = (\n  getTableCellColSpan, groupSummaryItems, firstVisibleColumnIndex,\n) => (params) => {\n  const { tableRow, tableColumns, tableColumn } = params;\n\n  if (tableRow.type === TABLE_GROUP_TYPE) {\n    const colKey = tableColumn.key;\n    const chains = groupSummaryChains(\n      tableRow, tableColumns, groupSummaryItems, firstVisibleColumnIndex,\n    );\n    const chain = chains.find(ch => ch[0] === colKey);\n\n    if (chain) {\n      return chain.length;\n    }\n  }\n  return getTableCellColSpan(params);\n};\n","import { TABLE_HEADING_TYPE } from './constants';\nimport { TABLE_DATA_TYPE } from '../table/constants';\nimport {\n  IsSpecificCellFn, IsSpecificRowFn, HeaderColumnChain,\n  SplitHeaderColumnChainsFn, FindChainByColumnIndexFn,\n  GenerateChainsFn,\n  NextColumnNameFn,\n  GetNextColumnNameFn,\n} from '../../types';\n\nexport const isHeadingTableCell: IsSpecificCellFn = (\n  tableRow, tableColumn,\n) => tableRow.type === TABLE_HEADING_TYPE && tableColumn.type === TABLE_DATA_TYPE;\n\nexport const isHeadingTableRow: IsSpecificRowFn = tableRow => (\n  tableRow.type === TABLE_HEADING_TYPE\n);\n\nexport const findChainByColumnIndex: FindChainByColumnIndexFn = (chains, columnIndex) => (\n  chains.find(chain => (\n    chain.start <= columnIndex && columnIndex < chain.start + chain.columns.length\n  ))!\n);\n\nexport const splitHeaderColumnChains: SplitHeaderColumnChainsFn = (\n  tableColumnChains, tableColumns, shouldSplitChain, extendChainProps,\n) => (\n  tableColumnChains.map((row, rowIndex) => row\n    .reduce((acc, chain) => {\n      let currentChain: any = null;\n      chain.columns.forEach((col) => {\n        const column = tableColumns.find(c => c.key === col.key);\n        const isNewGroup = shouldSplitChain(currentChain, column!, rowIndex);\n\n        if (isNewGroup) {\n          const start = currentChain\n            ? (currentChain.start + currentChain.columns.length)\n            : chain.start;\n\n          acc.push({\n            ...chain,\n            ...extendChainProps(column!),\n            start,\n            columns: [],\n          });\n          currentChain = acc[acc.length - 1];\n        }\n\n        currentChain.columns.push(column);\n      });\n\n      return acc;\n    }, [] as HeaderColumnChain[]))\n);\n\nexport const generateSimpleChains: GenerateChainsFn = (rows, columns) => (\n  rows.map(() => ([{\n    columns,\n    start: 0,\n  }]))\n);\n\nconst nextColumnName: NextColumnNameFn = (tableColumns , index) => {\n  const isNextColumnHasName = index < tableColumns.length - 1 && tableColumns[index + 1].column;\n  return isNextColumnHasName\n    ? tableColumns[index + 1].column!.name\n    : undefined;\n};\n\nexport const getNextColumnName: GetNextColumnNameFn = (tableColumns, columnName) => {\n  const index = tableColumns.findIndex(elem =>\n    elem.column && elem.column.name === columnName,\n  );\n  return index >= 0\n    ? nextColumnName(tableColumns, index)\n    : undefined;\n};\n","import { PureComputed } from '@devexpress/dx-core';\nimport { TABLE_HEADING_TYPE } from './constants';\nimport { TableRow } from '../../types';\n\nexport const tableRowsWithHeading: PureComputed<[TableRow[]]> = headerRows => [\n  { key: TABLE_HEADING_TYPE.toString(), type: TABLE_HEADING_TYPE },\n  ...headerRows];\n","export const TABLE_BAND_TYPE = Symbol('band');\nexport const BAND_GROUP_CELL = 'bandGroupCell';\nexport const BAND_HEADER_CELL = 'bandHeaderCell';\nexport const BAND_EMPTY_CELL = 'bandEmptyCell';\nexport const BAND_DUPLICATE_RENDER = 'bandDuplicateRender';\nexport const BAND_FILL_LEVEL_CELL = 'bandFillLevelCell';\n","import {\n  TABLE_BAND_TYPE, BAND_GROUP_CELL, BAND_HEADER_CELL, BAND_EMPTY_CELL,\n  BAND_DUPLICATE_RENDER, BAND_FILL_LEVEL_CELL,\n} from './constants';\nimport { TABLE_HEADING_TYPE } from '../table-header-row/constants';\nimport { TABLE_DATA_TYPE } from '../table/constants';\nimport { findChainByColumnIndex } from '../table-header-row/helpers';\nimport {\n  GetColumnBandMetaFn, GetBandComponentFn, CalculateBandFn, Row,\n} from '../../types';\nimport { TABLE_STUB_TYPE } from '../../utils/virtual-table';\n\nexport const isBandedTableRow = (tableRow: Row) => (tableRow.type === TABLE_BAND_TYPE);\nexport const isBandedOrHeaderRow = (tableRow: Row) => isBandedTableRow(tableRow)\n  || tableRow.type === TABLE_HEADING_TYPE;\nexport const isNoDataColumn = (columnType: symbol) => columnType !== TABLE_DATA_TYPE;\n\nexport const getColumnMeta: GetColumnBandMetaFn = (\n  columnName, bands, tableRowLevel, key = '',\n  level = 0, title = null, result = null,\n) => bands.reduce((acc, band) => {\n  if (band.columnName === columnName) {\n    return { ...acc, title, level, key };\n  }\n  if (band.children !== undefined) {\n    const rowLevelPassed = level > tableRowLevel;\n    const bandTitle = rowLevelPassed ? title : band.title;\n    const bandKey = rowLevelPassed ? key : `${key}_${bandTitle}`;\n\n    return getColumnMeta(\n      columnName,\n      band.children,\n      tableRowLevel,\n      bandKey,\n      level + 1,\n      bandTitle,\n      acc,\n    );\n  }\n  return acc;\n}, result || { level, title, key: title });\n\nexport const calculateBand: CalculateBandFn = (visibleBound, headerChain) => {\n  if (visibleBound) {\n    const bandStart = Math.max(visibleBound[0], headerChain.start);\n\n    const bandEnd = Math.min(\n      visibleBound[1] + 1,\n      headerChain.start + headerChain.columns.length,\n    );\n\n    return [bandStart, bandEnd];\n  }\n\n  return [headerChain.start, headerChain.start + headerChain.columns.length];\n};\n\nexport const getBandComponent: GetBandComponentFn = (\n  { tableColumn: currentTableColumn, tableRow, rowSpan },\n  tableHeaderRows, tableColumns, columnBands, tableHeaderColumnChains,\n  columnVisibleIntervals, bandLevelsVisibility,\n) => {\n  if (rowSpan) return { type: BAND_DUPLICATE_RENDER, payload: null };\n\n  const maxLevel = tableHeaderRows.filter(column => column.type === TABLE_BAND_TYPE).length + 1;\n  const { level } = tableRow;\n  const currentRowLevel = level === undefined\n    ? maxLevel - 1 : level;\n  const currentColumnMeta = currentTableColumn.type === TABLE_DATA_TYPE\n    ? getColumnMeta(currentTableColumn.column!.name, columnBands, currentRowLevel)\n    : { level: 0, title: '' };\n\n  const currentColumnIndex = tableColumns\n    .findIndex(column => column.key === currentTableColumn.key);\n\n  const levelsCount = bandLevelsVisibility.length;\n  const visibleLevelsCount = bandLevelsVisibility.filter(Boolean).length;\n\n  if (currentColumnMeta.level < currentRowLevel) {\n    const shouldFillLevel = currentRowLevel > 0 && visibleLevelsCount < levelsCount\n      && !bandLevelsVisibility[currentRowLevel] && currentTableColumn.type === TABLE_STUB_TYPE;\n\n    if (shouldFillLevel) {\n      return { type: BAND_FILL_LEVEL_CELL, payload: null };\n    }\n    return { type: BAND_EMPTY_CELL, payload: null };\n  }\n\n  const previousTableColumn = tableColumns[currentColumnIndex - 1];\n  let beforeBorder = false;\n  if (currentColumnIndex > 0 && currentTableColumn.type === TABLE_DATA_TYPE\n    && isNoDataColumn(previousTableColumn.type)) {\n    beforeBorder = true;\n  }\n\n  const isStubColumn = currentTableColumn.type === TABLE_STUB_TYPE;\n  const isColumnVisible = currentColumnIndex >= 0;\n\n  if (currentColumnMeta.level === currentRowLevel) {\n    if (isStubColumn) {\n      const cellRowSpan = visibleLevelsCount < levelsCount\n        ? visibleLevelsCount || 1\n        : maxLevel;\n\n      return {\n        type: BAND_FILL_LEVEL_CELL,\n        payload: {\n          rowSpan: cellRowSpan,\n        },\n      };\n    }\n\n    if (isColumnVisible) {\n      return {\n        type: BAND_HEADER_CELL,\n        payload: {\n          tableRow: tableHeaderRows.find(row => row.type === TABLE_HEADING_TYPE),\n          rowSpan: maxLevel - currentRowLevel,\n          ...beforeBorder && { beforeBorder },\n        },\n      };\n    }\n  }\n\n  if (!isColumnVisible) return { type: BAND_EMPTY_CELL, payload: null };\n\n  const currentColumnChain = findChainByColumnIndex(\n    tableHeaderColumnChains[currentRowLevel],\n    currentColumnIndex,\n  );\n  const columnVisibleBoundary = columnVisibleIntervals.find(([start, end]) => (\n    start <= currentColumnIndex && currentColumnIndex <= end\n  ));\n\n  const [bandStart, bandEnd] = calculateBand(columnVisibleBoundary, currentColumnChain);\n\n  if (bandStart < currentColumnIndex) {\n    return { type: null, payload: null };\n  }\n\n  return {\n    type: BAND_GROUP_CELL,\n    payload: {\n      colSpan: bandEnd - bandStart,\n      value: currentColumnMeta.title!,\n      column: currentColumnMeta,\n      ...beforeBorder && { beforeBorder },\n    },\n  };\n};\n","import { intervalUtil } from './utils';\nimport {\n  VirtualRows, Row, MergeRowsFn, CalculateRequestedRangeFn,\n  Interval, GridViewport, GetRequestMeta, CorrectRangeFn,\n} from '../../types';\nimport { PureComputed } from '@devexpress/dx-core';\n\nexport const emptyVirtualRows: VirtualRows = {\n  skip: Number.POSITIVE_INFINITY,\n  rows: [],\n};\n\nconst pluckSubarray: PureComputed<[Row[], ...number[]]> = (source, sourceStart, left, right) => (\n  source.slice(left - sourceStart, right - sourceStart)\n);\n\nexport const mergeRows: MergeRowsFn = (\n  rowsInterval, cacheInterval, rows, cacheRows, rowsStart, cacheStart,\n) => {\n  const breakpoints = [\n    rowsInterval.start, rowsInterval.end,\n    cacheInterval.start, cacheInterval.end,\n  ]\n    .filter(i => 0 <= i && i < Number.POSITIVE_INFINITY)\n    .sort((a, b) => a - b);\n\n  let result: Row[] = [];\n  if (breakpoints.length > 1) {\n    for (let i = 0; i < breakpoints.length - 1; i += 1) {\n      const left = breakpoints[i];\n      const right = breakpoints[i + 1];\n      const chunk = rowsInterval.start <= left && right <= rowsInterval.end\n        ? pluckSubarray(rows, rowsStart, left, right) // rows have higher priority\n        : pluckSubarray(cacheRows, cacheStart, left, right);\n\n      result = result.concat(chunk);\n    }\n  }\n\n  return {\n    skip: breakpoints[0],\n    rows: result,\n  };\n};\n\nconst correctRequestedRange: CorrectRangeFn = (calculatedRange, referenceIndex, pageSize) => {\n  const { start, end } = calculatedRange;\n\n  if (start - referenceIndex > pageSize / 2) {\n    return { start: start - pageSize, end: start };\n  }\n  return { start, end };\n};\n\nexport const calculateRequestedRange: CalculateRequestedRangeFn = (\n  virtualRows, newRange, pageSize, referenceIndex, isInfiniteScroll,\n) => {\n  const loadedInterval = intervalUtil.getRowsInterval(virtualRows);\n  const isAdjacentPage = Math.abs(loadedInterval.start - newRange.start) < 2 * pageSize;\n  if (isAdjacentPage) {\n    const calculatedRange = intervalUtil.difference(newRange, loadedInterval);\n    if (isInfiniteScroll && calculatedRange !== intervalUtil.empty) {\n      return correctRequestedRange(calculatedRange, referenceIndex, pageSize);\n    }\n    return calculatedRange;\n  }\n\n  // load 3 pages at once because a missing page will be loaded anyway\n  return newRange;\n};\n\nexport const rowToPageIndex: PureComputed<[number, number]> = (\n  rowIndex, pageSize,\n) => Math.floor(rowIndex / pageSize);\n\nexport const recalculateBounds: PureComputed<[number, number, number], Interval> = (\n  middleIndex, pageSize, totalCount,\n) => {\n  const currentPageIndex = rowToPageIndex(middleIndex, pageSize);\n\n  const prevPageIndex = currentPageIndex - 1;\n  const nextPageIndex = currentPageIndex + 2;\n  const start = Math.max(0, prevPageIndex * pageSize);\n  const end = Math.min(nextPageIndex * pageSize, totalCount);\n\n  return {\n    start,\n    end,\n  };\n};\n\nexport const trimRowsToInterval: PureComputed<[VirtualRows, Interval]> = (\n  virtualRows, targetInterval,\n) => {\n  const rowsInterval = intervalUtil.getRowsInterval(virtualRows);\n  const intersection = intervalUtil.intersect(rowsInterval, targetInterval);\n  if (intervalUtil.empty === intersection) {\n    return emptyVirtualRows;\n  }\n\n  const rows = pluckSubarray(\n    virtualRows.rows, virtualRows.skip, intersection.start, intersection.end,\n  );\n\n  return {\n    rows,\n    skip: intersection.start,\n  };\n};\n\nexport const getAvailableRowCount: PureComputed<[boolean, number, number, number], number> = (\n  isInfiniteScroll, newRowCount, lastRowCount, totalRowCount,\n) => {\n  return (isInfiniteScroll\n    ? Math.min(\n        Math.max(newRowCount, lastRowCount),\n        totalRowCount)\n    : totalRowCount\n  );\n};\n\nexport const getForceReloadInterval: PureComputed<[VirtualRows, number, number], Interval> = (\n  virtualRows, pageSize, totalRowCount,\n) => {\n  const { start, end: intervalEnd } = intervalUtil.getRowsInterval(virtualRows);\n  const end = Math.min(\n    Math.max(start + pageSize * 2, intervalEnd),\n    Math.max(start + pageSize * 2, totalRowCount),\n  );\n  return {\n    start,\n    end,\n  };\n};\n\nexport const getRequestMeta: GetRequestMeta = (\n  referenceIndex, virtualRows, pageSize, totalRowCount, forceReload, isInfiniteScroll,\n) => {\n  const actualBounds = forceReload\n    ? getForceReloadInterval(virtualRows, pageSize!, totalRowCount)\n    : recalculateBounds(referenceIndex, pageSize!, totalRowCount);\n  const requestedRange = forceReload\n    ? actualBounds\n    : calculateRequestedRange(\n        virtualRows, actualBounds, pageSize!, referenceIndex, isInfiniteScroll,\n      );\n\n  return { requestedRange, actualBounds };\n};\n\nexport const needFetchMorePages: PureComputed<[VirtualRows, number, number], boolean> = (\n  virtualRows, referenceIndex,  pageSize,\n) => {\n  const { start, end } = intervalUtil.getRowsInterval(virtualRows);\n  const loadCount = end - start;\n  const topTriggerIndex = start > 0 ? start + pageSize : 0;\n  const bottomTriggerIndex = Math.max(topTriggerIndex + pageSize, end - pageSize * 1.5);\n\n  if (loadCount <= 0) {\n    return false;\n  }\n\n  return (referenceIndex < topTriggerIndex || bottomTriggerIndex < referenceIndex);\n};\n\nexport const getReferenceIndex: PureComputed<[GridViewport], number> = (\n  { rows: [top, bottom] },\n) => (\n  (top + bottom) / 2\n);\n\nexport const shouldSendRequest: PureComputed<[Interval, number, number], boolean> = (\n  { start, end }, requestedPageIndex, requestedEndIndex,\n) => {\n  const loadCount = (end - start);\n  return (start !== requestedPageIndex || end !== requestedEndIndex) && loadCount > 0;\n};\n","import { PureComputed } from '@devexpress/dx-core';\nimport { emptyVirtualRows } from './helpers';\nimport { Interval, VirtualRows } from '../../types';\n\nconst empty: Interval = {\n  start: Number.POSITIVE_INFINITY,\n  end: Number.NEGATIVE_INFINITY,\n};\n\nconst getRowsInterval: PureComputed<[VirtualRows], Interval> = r => (\n  r === emptyVirtualRows\n    ? empty\n    : {\n      start: r.skip,\n      end: r.skip + r.rows.length,\n    }\n);\n\nconst getLength = (a: Interval) => a.end - a.start;\n\nconst intersect = (a: Interval, b: Interval) => {\n  if (a.end < b.start || b.end < a.start) {\n    return empty;\n  }\n\n  return {\n    start: Math.max(a.start, b.start),\n    end: Math.min(a.end, b.end),\n  };\n};\n\nconst difference = (a: Interval, b: Interval) => {\n  if (empty === intervalUtil.intersect(a, b)) {\n    return a;\n  }\n\n  if (b.end < a.end) {\n    return {\n      start: b.end,\n      end: a.end,\n    };\n  }\n  if (a.start < b.start) {\n    return {\n      start: a.start,\n      end: b.start,\n    };\n  }\n  return empty;\n};\n\nexport const intervalUtil = {\n  empty,\n\n  getRowsInterval,\n  getLength,\n\n  intersect,\n  difference,\n};\n","import { PureComputed } from '@devexpress/dx-core';\nimport { TABLE_BAND_TYPE } from './constants';\nimport { TABLE_DATA_TYPE } from '../table/constants';\nimport { TABLE_GROUP_TYPE } from '../table-group-row/constants';\nimport { getColumnMeta } from './helpers';\nimport { splitHeaderColumnChains, generateSimpleChains } from '../table-header-row/helpers';\nimport {\n  ColumnBands, GetHeaderColumnChainsFn, ShouldSplitChainFn,\n  GetMaxNestedLevelFn, TableRow, TableColumn, HeaderColumnChainRows,\n  BandLevels, BandColumnChainExtension, HeaderColumnChain, VisibleBoundary, GridViewport,\n} from '../../types';\nimport { intervalUtil } from '../virtual-table-state/utils';\n\nexport const tableRowsWithBands: PureComputed<\n  [TableRow[], ColumnBands[], TableColumn[]]\n> = (\n  tableHeaderRows, columnBands, tableColumns,\n) => {\n  const tableDataColumns = tableColumns.filter(column => column.type === TABLE_DATA_TYPE);\n  const getMaxNestedLevel: GetMaxNestedLevelFn = (bands, level = 0, result = null) => (\n    bands.reduce((acc, column) => {\n      if (column.children !== undefined) {\n        return getMaxNestedLevel(column.children, level + 1, acc);\n      }\n      const isDataColumn = tableDataColumns.findIndex(\n        dataColumn => !!dataColumn.column && dataColumn.column.name === column.columnName,\n      ) > -1;\n      if (level > acc.level && isDataColumn) {\n        return { ...acc, level };\n      }\n      return acc;\n    }, result || { level: 0 })\n  );\n\n  const tableBandHeaders = Array.from({\n    length: getMaxNestedLevel(columnBands as ColumnBands[], 0).level,\n  })\n    .map((row, index) => ({\n      key: `${TABLE_BAND_TYPE.toString()}_${index}`,\n      type: TABLE_BAND_TYPE,\n      level: index,\n    }));\n  return [...tableBandHeaders, ...tableHeaderRows];\n};\n\nexport const tableHeaderColumnChainsWithBands: GetHeaderColumnChainsFn<\n  TableRow[], TableColumn[], ColumnBands[]\n> = (\n  tableHeaderRows, tableColumns, bands,\n) => {\n  const chains = generateSimpleChains(tableHeaderRows, tableColumns);\n  const maxBandRowIndex = tableHeaderRows\n    .filter(row => row.type === TABLE_BAND_TYPE)\n    .length;\n  const rawBandChains = chains.slice(0, maxBandRowIndex);\n\n  let currentBand: any = null;\n  const shouldSplitChain: ShouldSplitChainFn = (chain, column, rowIndex) => {\n    if (rowIndex > maxBandRowIndex) return false;\n\n    const columnName = column.column && column.column.name || '';\n    currentBand = getColumnMeta(columnName, bands, rowIndex);\n    return !chain\n      || chain.key !== currentBand.key\n      || chain.columns[0].type === TABLE_GROUP_TYPE;\n  };\n  const extendChainProps = () => ({\n    bandTitle: currentBand?.title,\n    key: currentBand?.key,\n  });\n\n  const bandChains = splitHeaderColumnChains(\n    rawBandChains,\n    tableColumns,\n    shouldSplitChain,\n    extendChainProps,\n  );\n\n  return [...bandChains, ...chains.slice(maxBandRowIndex)];\n};\n\nconst getBandLevel: PureComputed<[ColumnBands[], string, number?], number> = (\n  bands, bandTitle, level = 0,\n) => {\n  for (const band of bands) {\n    if (band.title === bandTitle) {\n      return level;\n    }\n    if (band.children !== undefined) {\n      const result = getBandLevel(band.children, bandTitle, level + 1);\n      if (result >= 0) return result;\n    }\n  }\n  return -1;\n};\n\nconst getBandLevels = (columnsBands: readonly ColumnBands[], levels = {}, level = 0) => {\n  columnsBands.forEach((band) => {\n    if (band.title) {\n      levels[band.title] = level;\n    }\n    if (band.children) {\n      getBandLevels(band.children, levels, level + 1);\n    }\n  });\n  return levels;\n};\n\nexport const columnBandLevels: PureComputed<[ColumnBands[]], BandLevels> = columnsBands => (\n  getBandLevels(columnsBands)\n);\n\nexport const bandLevelsVisibility: PureComputed<\n  [VisibleBoundary[], HeaderColumnChainRows<BandColumnChainExtension>, BandLevels],\n  boolean[]\n> = (columnIntervals, tableHeaderColumnChains, bandLevels) => {\n  const rowsWithBands = tableHeaderColumnChains\n    .filter(r => r.filter(ch => !!ch.bandTitle).length);\n\n  const visibleIntervals = columnIntervals.map(([start, end]) => ({ start, end }));\n\n  const isBandChainVisible = (chain: HeaderColumnChain) => (\n    visibleIntervals.some(interval => (\n      intervalUtil.intersect(\n        interval,\n        { start: chain.start, end: chain.start + chain.columns.length - 1 },\n      ) !== intervalUtil.empty\n    ),\n  ));\n\n  const getVisibleBandsByLevel = (level: number) => (\n    // Note: a visible band level always matches with it's row\n    rowsWithBands[level]\n    ? rowsWithBands[level].filter(chain => (\n        bandLevels[chain.bandTitle] === level && isBandChainVisible(chain)\n      ))\n    : []\n  );\n\n  return rowsWithBands.reduce((acc, _, index) => {\n    const rowBands = getVisibleBandsByLevel(index);\n    return [...acc, !!rowBands.length];\n  }, [] as boolean[]);\n};\n\nexport const columnVisibleIntervals: PureComputed<\n  [GridViewport, TableColumn[]],\n  VisibleBoundary[]\n> = (\n  viewport, tableColumns,\n) => (\n  viewport ? viewport.columns : [[0, tableColumns.length]]\n);\n","import { toggle } from '../../utils/common-reducers';\nimport { ToggleRowFieldReducer } from '../../types';\n\nexport const toggleDetailRowExpanded: ToggleRowFieldReducer = (\n  prevExpanded, { rowId, state },\n) => toggle(prevExpanded, [rowId], state);\n","export const TABLE_DETAIL_TYPE = Symbol('detail');\n","import { PureComputed } from '@devexpress/dx-core';\nimport { TABLE_DETAIL_TYPE } from './constants';\nimport { TABLE_DATA_TYPE } from '../table/constants';\nimport { IsSpecificCellFn, IsSpecificRowFn, TableColumn, RowId } from '../../types';\n\nexport const isDetailRowExpanded: PureComputed<[RowId[], RowId], boolean> = (\n  expandedDetailRowIds, rowId,\n) => expandedDetailRowIds.indexOf(rowId) > -1;\n\nexport const isDetailToggleTableCell: IsSpecificCellFn = (\n  tableRow, tableColumn,\n) => tableColumn.type === TABLE_DETAIL_TYPE && tableRow.type === TABLE_DATA_TYPE;\n\nexport const isDetailTableRow: IsSpecificRowFn = tableRow => tableRow.type === TABLE_DETAIL_TYPE;\n\nexport const isDetailTableCell: PureComputed<[TableColumn, TableColumn[]], boolean> = (\n  tableColumn, tableColumns,\n) => tableColumns.indexOf(tableColumn) === 0;\n","import { PureComputed } from '@devexpress/dx-core';\nimport { TABLE_DETAIL_TYPE } from './constants';\nimport { TABLE_DATA_TYPE } from '../table/constants';\nimport { TableRow, TableColumn, CellColSpanGetter } from '../../types';\n\nexport const tableRowsWithExpandedDetail: PureComputed<[TableRow[], number[], number]> = (\n  tableRows, expandedDetailRowIds, rowHeight,\n) => {\n  let result = tableRows;\n  expandedDetailRowIds\n    .forEach((expandedRowId) => {\n      const rowIndex = result.findIndex(\n        tableRow => tableRow.type === TABLE_DATA_TYPE && tableRow.rowId === expandedRowId,\n      );\n      if (rowIndex === -1) return;\n      const insertIndex = rowIndex + 1;\n      const { row, rowId } = result[rowIndex];\n      result = [\n        ...result.slice(0, insertIndex),\n        {\n          rowId,\n          row,\n          key: `${TABLE_DETAIL_TYPE.toString()}_${rowId}`,\n          type: TABLE_DETAIL_TYPE,\n          height: rowHeight,\n        },\n        ...result.slice(insertIndex),\n      ];\n    });\n  return result;\n};\n\nexport const tableColumnsWithDetail: PureComputed<[TableColumn[], number]> = (\n  tableColumns, toggleColumnWidth,\n) => [\n  { key: TABLE_DETAIL_TYPE.toString(), type: TABLE_DETAIL_TYPE, width: toggleColumnWidth },\n  ...tableColumns,\n];\n\nexport const tableDetailCellColSpanGetter: CellColSpanGetter = getTableCellColSpan => (params) => {\n  const { tableRow, tableColumns, tableColumn } = params;\n  if (tableRow.type === TABLE_DETAIL_TYPE && tableColumns.indexOf(tableColumn) === 0) {\n    return tableColumns.length;\n  }\n  return getTableCellColSpan(params);\n};\n","export const TABLE_SELECT_TYPE = Symbol('select');\n","import { PureComputed } from '@devexpress/dx-core';\nimport { TABLE_SELECT_TYPE } from './constants';\nimport { TABLE_DATA_TYPE } from '../table/constants';\nimport { TABLE_HEADING_TYPE } from '../table-header-row/constants';\nimport { IsSpecificCellFn, TableRow } from '../../types';\n\nexport const isSelectTableCell: IsSpecificCellFn = (\n  tableRow, tableColumn,\n) => tableColumn.type === TABLE_SELECT_TYPE && tableRow.type === TABLE_DATA_TYPE;\nexport const isSelectAllTableCell: IsSpecificCellFn = (\n  tableRow, tableColumn,\n) => tableColumn.type === TABLE_SELECT_TYPE && tableRow.type === TABLE_HEADING_TYPE;\n\nexport const isRowHighlighted: PureComputed<[boolean, any[], TableRow, any[]?], boolean> = (\n  highlightRow, selection, tableRow, focused,\n) => {\n  const highlightion = selection ? selection.concat(focused || []) : focused;\n  return !!(highlightRow && highlightion && highlightion.includes(tableRow.rowId));\n};\n","import { PureComputed } from '@devexpress/dx-core';\nimport { TABLE_SELECT_TYPE } from './constants';\nimport { TableColumn } from '../../types';\n\nexport const tableColumnsWithSelection: PureComputed<[TableColumn[], number, boolean|undefined]> = (\n  tableColumns, selectionColumnWidth, showSelectionColumn,\n) => {\n  if (showSelectionColumn) {\n    return [\n      { key: TABLE_SELECT_TYPE.toString(), type: TABLE_SELECT_TYPE, width: selectionColumnWidth },\n      ...tableColumns,\n    ];\n  }\n  return tableColumns;\n};\n","import { TABLE_DATA_TYPE, TABLE_NODATA_TYPE } from './constants';\nimport {\n  IsSpecificCellFn, IsSpecificRowFn, TableRow, TableColumn, CheckColumnExtensionsFn,\n} from '../../types';\nimport { TABLE_STUB_TYPE } from '../../utils/virtual-table';\nimport { isValidValue } from '../table-column-resizing/helpers';\n\nconst VALID_UNITS = ['px', '%', 'em', 'rem', 'vm', 'vh', 'vmin', 'vmax', ''];\nconst TABLE_ERROR = 'The columnExtension property of the Table plugin is given an invalid value.';\n\nexport const isDataTableCell: IsSpecificCellFn = (\n  tableRow, tableColumn,\n) => tableRow.type === TABLE_DATA_TYPE && tableColumn.type === TABLE_DATA_TYPE;\nexport const isHeaderStubTableCell: IsSpecificCellFn<TableRow, TableRow[]> = (\n  tableRow, headerRows,\n) => headerRows.indexOf(tableRow) > -1;\nexport const isDataTableRow: IsSpecificRowFn = tableRow => tableRow.type === TABLE_DATA_TYPE;\nexport const isNoDataTableRow: IsSpecificRowFn = tableRow => tableRow.type === TABLE_NODATA_TYPE;\nexport const isNoDataTableCell: IsSpecificCellFn<TableColumn, TableColumn[]> = (\n  tableColumn, tableColumns,\n) => tableColumns.indexOf(tableColumn as any) === 0;\nexport const isStubTableCell: IsSpecificRowFn = tableRow => (\n  tableRow.type === TABLE_STUB_TYPE\n);\n\nexport const checkTableColumnExtensions: CheckColumnExtensionsFn = (columnExtensions) => {\n  if (columnExtensions) {\n    columnExtensions.map((column) => {\n      const { width } = column;\n      if (typeof width === 'string') {\n        if (!isValidValue(width, VALID_UNITS)) {\n          throw new Error(TABLE_ERROR);\n        }\n      }\n    });\n  }\n};\n","import { PureComputed } from '@devexpress/dx-core';\nimport {\n  GridColumnExtension, GetColumnExtensionValueGetterFn,\n} from '../types';\n\nexport const getColumnExtension: PureComputed<\n  [GridColumnExtension[] | undefined, string], GridColumnExtension\n> = (columnExtensions, columnName) => {\n  if (!columnExtensions) {\n    // tslint:disable-next-line:no-object-literal-type-assertion\n    return {} as GridColumnExtension;\n  }\n  const columnExtension = columnExtensions.find(extension => extension.columnName === columnName);\n  if (!columnExtension) {\n    // tslint:disable-next-line:no-object-literal-type-assertion\n    return {} as GridColumnExtension;\n  }\n  return columnExtension;\n};\n\nexport const getColumnExtensionValueGetter: GetColumnExtensionValueGetterFn = (\n  columnExtensions, extensionName, defaultValue,\n) => (columnName) => {\n  if (columnExtensions) {\n    const columnExtension = getColumnExtension(columnExtensions, columnName);\n    const extensionValue = columnExtension[extensionName];\n    return extensionValue !== undefined ? extensionValue : defaultValue;\n  }\n  return defaultValue;\n};\n","import { PureComputed } from '@devexpress/dx-core';\nimport { TABLE_DATA_TYPE, TABLE_NODATA_TYPE } from './constants';\nimport { getColumnExtension } from '../../utils/column-extension';\nimport { GridColumnExtension, GetCellColSpanFn } from './../../types/table.types';\nimport { Row, GetRowIdFn } from '../../types';\nimport { convertWidth } from '../table-column-resizing/helpers';\n\nexport const tableColumnsWithDataRows: PureComputed<[any[], GridColumnExtension[]]> = (\n  columns, columnExtensions,\n) => columns.map((column) => {\n  const { name } = column;\n  const columnExtension = getColumnExtension(columnExtensions as GridColumnExtension[], name);\n  const width = convertWidth(columnExtension.width!);\n  return {\n    column,\n    key: `${TABLE_DATA_TYPE.toString()}_${name}`,\n    type: TABLE_DATA_TYPE,\n    width,\n    align: columnExtension.align,\n    wordWrapEnabled: columnExtension.wordWrapEnabled,\n  };\n});\n\nexport const tableRowsWithDataRows: PureComputed<[Row[], GetRowIdFn, number]> = (\n  rows, getRowId, isRemoteRowsLoading,\n) => (\n  !rows.length && !isRemoteRowsLoading\n    ? [{ key: TABLE_NODATA_TYPE.toString(), type: TABLE_NODATA_TYPE }]\n    : rows.map((row, dataIndex) => {\n      const rowId = getRowId(row);\n      return {\n        row,\n        // dataIndex,\n        rowId,\n        type: TABLE_DATA_TYPE,\n        key: `${TABLE_DATA_TYPE.toString()}_${rowId}`,\n      };\n    }));\n\nexport const tableCellColSpanGetter: GetCellColSpanFn = (params) => {\n  const { tableRow, tableColumns, tableColumn } = params;\n  if (tableRow.type === TABLE_NODATA_TYPE && tableColumns.indexOf(tableColumn) === 0) {\n    return tableColumns.length;\n  }\n  return 1;\n};\n","import { PureComputed } from '@devexpress/dx-core';\nimport { TABLE_DATA_TYPE } from '../table/constants';\nimport { TableColumn } from '../../types';\n\nexport const visibleTableColumns: PureComputed<[TableColumn[], string[]]> = (\n  tableColumns = [], hiddenColumnNames,\n) => tableColumns.filter(tableColumn => tableColumn.type !== TABLE_DATA_TYPE\n    || hiddenColumnNames.indexOf(tableColumn.column!.name) === -1);\n","import { TABLE_DATA_TYPE } from '../table/constants';\nimport { TableColumn } from '../../types';\n\nexport const tableDataColumnsExist = (tableColumns: TableColumn[]) => tableColumns.some(\n  column => column.type === TABLE_DATA_TYPE,\n);\n","import { PureComputed } from '@devexpress/dx-core';\nimport { Column } from '../../types/grid-core.types';\nimport { ColumnChooserItem } from '../../types';\n\nexport const columnChooserItems: PureComputed<[Column[], string[]], ColumnChooserItem[]> = (\n  columns, hiddenColumnNames,\n) => columns.map(column => ({\n  column,\n  hidden: hiddenColumnNames.indexOf(column.name) !== -1,\n}));\n","import { PureReducer } from '@devexpress/dx-core';\n\nexport const toggleColumn: PureReducer<string[], string> = (\n  hiddenColumnNames, columnName,\n) => (\n  hiddenColumnNames.indexOf(columnName) === -1\n    ? [...hiddenColumnNames, columnName]\n    : hiddenColumnNames.filter(hiddenColumn => hiddenColumn !== columnName)\n);\n","import { toggle } from '../../utils/common-reducers';\nimport { ToggleRowFieldReducer } from '../../types';\n\nexport const toggleRowExpanded: ToggleRowFieldReducer = (\n  prevExpanded, { rowId, state },\n) => toggle(prevExpanded, [rowId], state);\n","export const GRID_TREE_NODE_TYPE = Symbol('treeNode');\n","import { PureComputed } from '@devexpress/dx-core';\nimport { GRID_TREE_NODE_TYPE } from './constants';\nimport {\n  RowsWithTreeMetaMap, RowsWithCollapsedRowsMetaMap, IsSpecificTreeRowGetter, GetRowIdFn,\n  GetRowLevelKeyFn, GetCollapsedRowsFn, CustomTreeRowsWithMetaComputed,\n  UnwrapRowsComputed, GetTreeRowLevelGetter, ExpandedTreeRowsFn, Row,\n} from '../../types';\n\nexport const customTreeRowsWithMeta: CustomTreeRowsWithMetaComputed = (\n  rows, getChildRows,\n) => {\n  const rowsToProcess = [{ row: null, level: -1 }] as Row[];\n  const treeRows = [] as { row: Row, level: number, leaf: boolean }[];\n\n  while (rowsToProcess?.length) {\n    const { row: currentRow, level } = rowsToProcess.shift()!;\n    const rowIndex = treeRows.findIndex(({ row }) => row === currentRow);\n    const nestedRows = getChildRows(currentRow, rows as Row[])?.map(\n      (childRow: Row) => ({\n        row: childRow,\n        level: level + 1,\n        leaf: !getChildRows(childRow, rows as Row[]),\n      }),\n    );\n\n    if (nestedRows) {\n      if (rowIndex > -1) {\n        treeRows.splice(rowIndex + 1, 0, ...nestedRows);\n      } else {\n        treeRows.push(...nestedRows);\n      }\n      rowsToProcess.push(...nestedRows);\n    }\n  }\n\n  const result = treeRows.reduce((acc, { row, level, leaf }) => {\n    acc.rows.push(row);\n    acc.treeMeta.push([row, { level, leaf }]);\n\n    return acc;\n  }, { rows: [] as Row[], treeMeta: [] as any[] });\n\n  return {\n    rows: result.rows,\n    treeMeta: new Map(result.treeMeta),\n  };\n};\n\nexport const customTreeRowIdGetter: PureComputed<[GetRowIdFn, RowsWithTreeMetaMap]> = (\n  getRowId, { rows, treeMeta },\n) => {\n  const firstNestedRowIndex = rows.findIndex(row => treeMeta.get(row)!.level > 0);\n  if (firstNestedRowIndex === -1 || getRowId(rows[firstNestedRowIndex]) !== undefined) {\n    return getRowId;\n  }\n  const map = new Map(rows\n    .map((row, rowIndex) => [row, rowIndex] as [any, any]));\n  return row => map.get(row);\n};\n\nexport const customTreeRowLevelKeyGetter: PureComputed<\n  [GetRowLevelKeyFn, RowsWithTreeMetaMap]\n> = (\n  getRowLevelKey, { treeMeta },\n) => (row) => {\n  const rowMeta = treeMeta.get(row);\n  if (rowMeta !== undefined) {\n    return `${GRID_TREE_NODE_TYPE.toString()}_${rowMeta.level}`;\n  }\n  return getRowLevelKey && getRowLevelKey();\n};\n\nexport const expandedTreeRows: ExpandedTreeRowsFn = (\n  { rows, treeMeta }, getRowId, expandedRowIds,\n) => {\n  const expandedRowIdsSet = new Set(expandedRowIds);\n\n  let currentExpanded = true;\n  let currentLevel = 0;\n\n  const collapsedRowsMeta = new Map();\n  const resultRows: object[] = [];\n\n  rows.forEach((row) => {\n    const rowMeta = treeMeta.get(row);\n    const level = rowMeta && rowMeta.level;\n    if (level === undefined && currentExpanded) {\n      resultRows.push(row);\n    } else if (!currentExpanded && (level === undefined || level > currentLevel)) {\n      const lastRow = resultRows[resultRows.length - 1];\n      let collapsedItems = collapsedRowsMeta.get(lastRow);\n      if (!collapsedItems) {\n        collapsedItems = [];\n        collapsedRowsMeta.set(lastRow, collapsedItems);\n      }\n      collapsedItems.push(row);\n    } else {\n      currentExpanded = expandedRowIdsSet.has(getRowId(row));\n      currentLevel = level!;\n\n      resultRows.push(row);\n    }\n  });\n\n  return {\n    treeMeta,\n    collapsedRowsMeta,\n    rows: resultRows,\n  };\n};\n\nexport const collapsedTreeRowsGetter: PureComputed<\n  [GetCollapsedRowsFn, RowsWithCollapsedRowsMetaMap]\n> = (\n  getCollapsedRows, { collapsedRowsMeta },\n) => row => collapsedRowsMeta.get(row) || (getCollapsedRows && getCollapsedRows(row));\n\nexport const isTreeRowLeafGetter: IsSpecificTreeRowGetter = ({ treeMeta }) => (row) => {\n  const rowMeta = treeMeta.get(row);\n  return rowMeta && rowMeta.leaf;\n};\n\nexport const getTreeRowLevelGetter: GetTreeRowLevelGetter = ({ treeMeta }) => (row) => {\n  const rowMeta = treeMeta.get(row);\n  return (rowMeta && rowMeta.level) as number;\n};\n\nexport const unwrappedCustomTreeRows: UnwrapRowsComputed = ({ rows }) => rows;\n","import { TABLE_DATA_TYPE } from '../table/constants';\nimport { IsSpecificCellFn, TableRow, TableColumn } from '../../types';\n\nexport const isTreeTableCell: IsSpecificCellFn<TableRow, TableColumn, string> = (\n  tableRow, tableColumn, forColumnName,\n) => tableRow.type === TABLE_DATA_TYPE && tableColumn.type === TABLE_DATA_TYPE\n  && tableColumn.column!.name === forColumnName;\n","export const changeSearchValue = (\n  prevSearchValue: string, searchValue: string,\n) => searchValue;\n","import { SearchFilterExpressionFn, FilterExpression } from '../../types';\n\nexport const searchFilterExpression: SearchFilterExpressionFn = (\n  searchValue, columns, filterExpression,\n) => {\n  const filters = columns.map(({ name }) => ({ columnName: name, value: searchValue }));\n  const selfFilterExpression: FilterExpression = { filters, operator: 'or' };\n  if (!filterExpression) {\n    return selfFilterExpression;\n  }\n  return {\n    operator: 'and',\n    filters: [filterExpression as FilterExpression, selfFilterExpression],\n  };\n};\n","import { PureComputed } from '@devexpress/dx-core';\nimport { GetAvailableFilterOperationsFn, FilterOperation } from '../../types';\n\nexport const getAvailableFilterOperationsGetter: PureComputed<\n  [GetAvailableFilterOperationsFn, FilterOperation[], string[]]\n> = (\n  getAvailableFilterOperations,\n  availableFilterOperations,\n  columnNames,\n) => columnName => (columnNames.indexOf(columnName) > -1 && availableFilterOperations)\n// tslint:disable-next-line: max-line-length\n    || (typeof getAvailableFilterOperations === 'function' && getAvailableFilterOperations(columnName))\n    || undefined;\n","export const FIXED_COLUMN_LEFT_SIDE = 'left';\nexport const FIXED_COLUMN_RIGHT_SIDE = 'right';\nexport const TABLE_FIXED_TYPE = Symbol('fixed');\n","import { slice } from '@devexpress/dx-core';\nimport { TABLE_DATA_TYPE } from '../table/constants';\nimport {\n  FIXED_COLUMN_LEFT_SIDE, TABLE_FIXED_TYPE,\n} from './constants';\nimport { findChainByColumnIndex } from '../table-header-row/helpers';\nimport {\n  GetFixedColumnKeysFn, IsSpecificRowFn, CalculatePositionFn, CalculateFixedColumnPropsFn,\n} from '../../types';\n\nexport const getFixedColumnKeys: GetFixedColumnKeysFn = (tableColumns, fixedNames) => tableColumns\n  .filter(tableColumn => (\n    (tableColumn.type === TABLE_DATA_TYPE && fixedNames.indexOf(tableColumn.column!.name) !== -1)\n    || fixedNames.indexOf(tableColumn.type) !== -1\n  ))\n  .map(({ key }) => key);\n\nexport const isFixedTableRow: IsSpecificRowFn = tableRow => tableRow.type === TABLE_FIXED_TYPE;\n\nconst calculatePosition: CalculatePositionFn = (array, index, tableColumnDimensions) => (\n  index === 0\n    ? 0\n    : array\n      .slice(0, index)\n      .reduce((acc, target) => acc + tableColumnDimensions[target] || 0, 0)\n);\n\nexport const calculateFixedColumnProps: CalculateFixedColumnPropsFn = (\n  { tableColumn },\n  { leftColumns, rightColumns },\n  tableColumns,\n  tableColumnDimensions,\n  tableHeaderColumnChains,\n) => {\n  const side = tableColumn.fixed!;\n  const targetArray = side === FIXED_COLUMN_LEFT_SIDE\n    ? getFixedColumnKeys(tableColumns, leftColumns)\n    : slice(getFixedColumnKeys(tableColumns, rightColumns)).reverse();\n\n  const index = tableColumns.findIndex(({ key }) => key === tableColumn.key);\n  const fixedIndex = targetArray.indexOf(tableColumn.key);\n  const columnChain = findChainByColumnIndex(tableHeaderColumnChains[0], index)!;\n\n  const showLeftDivider = columnChain.start === index && index !== 0;\n  const showRightDivider = columnChain.start + columnChain.columns.length - 1 === index\n    && index < tableColumns.length - 1;\n\n  const position = calculatePosition(targetArray, fixedIndex, tableColumnDimensions);\n\n  return {\n    showRightDivider,\n    showLeftDivider,\n    position,\n    side,\n  };\n};\n","import { PureComputed } from '@devexpress/dx-core';\nimport { TABLE_DATA_TYPE } from '../table/constants';\nimport { FIXED_COLUMN_LEFT_SIDE, FIXED_COLUMN_RIGHT_SIDE, TABLE_FIXED_TYPE } from './constants';\nimport { splitHeaderColumnChains, generateSimpleChains } from '../table-header-row/helpers';\nimport {\n  FixedColumnName, TableColumn, FixedColumnSide, TableRow, HeaderColumnChainRows,\n  ShouldSplitChainFn,\n} from '../../types';\n\nexport const tableColumnsWithFixed: PureComputed<\n  [TableColumn[], FixedColumnName[], FixedColumnName[]]\n> = (\n  tableColumns, leftColumns, rightColumns,\n) => tableColumns\n  .map((tableColumn) => {\n    let fixed!: FixedColumnSide;\n    if ((tableColumn.type === TABLE_DATA_TYPE\n      && leftColumns.indexOf(tableColumn.column!.name) !== -1)\n      || leftColumns.indexOf(tableColumn.type) !== -1) {\n      fixed = FIXED_COLUMN_LEFT_SIDE;\n    }\n    if ((tableColumn.type === TABLE_DATA_TYPE\n      && rightColumns.indexOf(tableColumn.column!.name) !== -1)\n      || rightColumns.indexOf(tableColumn.type) !== -1) {\n      fixed = FIXED_COLUMN_RIGHT_SIDE;\n    }\n    return fixed ? { ...tableColumn, fixed } : tableColumn;\n  });\n\nexport const tableHeaderRowsWithFixed: PureComputed<[TableRow[]]> = tableHeaderRows => [\n  ...tableHeaderRows,\n  { key: TABLE_FIXED_TYPE.toString(), type: TABLE_FIXED_TYPE, height: 0 },\n];\n\nexport const tableHeaderColumnChainsWithFixed: PureComputed<\n  [HeaderColumnChainRows, TableRow[], TableColumn[]]\n> = (\n  tableHeaderColumnChains, tableHeaderRows, tableColumns,\n) => {\n  const chains = tableHeaderColumnChains\n    || generateSimpleChains(tableHeaderRows, tableColumns);\n\n  const shouldSplitChain: ShouldSplitChainFn = (currentGroup, column) => (\n    !currentGroup || (currentGroup as any).fixed !== column.fixed\n  );\n  const extendChainProps = (column: TableColumn) => ({\n    fixed: column.fixed,\n  });\n  return splitHeaderColumnChains(\n    chains,\n    tableColumns,\n    shouldSplitChain,\n    extendChainProps,\n  );\n};\n","import {\n  SummaryValue, SummaryCalculator,\n  DefaultSummaryCalculators,\n  Row,\n  TotalSummaryValuesFn,\n  GroupSummaryValuesFn,\n  TreeSummaryValuesFn,\n  RowsSummaryValuesFn,\n  ExpandRowsFn,\n  TableRow,\n  GroupLevel,\n} from '../../types';\n\nconst defaultSummaryCalculators: DefaultSummaryCalculators = {\n  count: rows => rows.length,\n  sum: (rows, getValue) => rows.reduce((acc, row) => acc + getValue(row), 0),\n  max: (rows, getValue) => (rows.length\n    ? rows.reduce((acc, row) => Math.max(acc, getValue(row)), -Infinity)\n    : null),\n  min: (rows, getValue) => (rows.length\n    ? rows.reduce((acc, row) => Math.min(acc, getValue(row)), Infinity)\n    : null),\n  avg: (rows, getValue) => (rows.length\n    ? rows.reduce((acc, row) => acc + getValue(row), 0) / rows.length\n    : null),\n};\n\nexport const defaultSummaryCalculator: SummaryCalculator = (type, rows, getValue) => {\n  const summaryCalculator = defaultSummaryCalculators[type];\n  if (!summaryCalculator) {\n    throw new Error(`The summary type '${type}' is not defined`);\n  }\n  return summaryCalculator(rows, getValue);\n};\n\nconst rowsSummary: RowsSummaryValuesFn = (\n  rows, summaryItems, getCellValue, calculator,\n) => summaryItems\n  .reduce((acc, { type, columnName }) => {\n    const getValue = (row: Row) => getCellValue(row, columnName);\n    acc.push(calculator(type, rows as any[], getValue));\n    return acc;\n  }, [] as SummaryValue[]);\n\nconst expandRows: ExpandRowsFn = (\n  rows, getRowLevelKey, getCollapsedRows, isGroupRow, includeGroupRow = false,\n) => {\n  const shouldIncludeRow = includeGroupRow || !isGroupRow\n    ? () => true\n    : (row: TableRow) => !isGroupRow(row);\n\n  return rows\n    .reduce((acc, row) => {\n      if (getRowLevelKey && getRowLevelKey(row)) {\n        if (shouldIncludeRow(row)) {\n          acc.push(row);\n        }\n        const collapsedRows = getCollapsedRows && getCollapsedRows(row);\n        if (collapsedRows) {\n          acc.push(...collapsedRows);\n        }\n        return acc;\n      }\n      acc.push(row);\n      return acc;\n    }, [] as TableRow[]);\n};\n\nexport const totalSummaryValues: TotalSummaryValuesFn = (\n  rows,\n  summaryItems,\n  getCellValue,\n  getRowLevelKey,\n  isGroupRow,\n  getCollapsedRows,\n  calculator = defaultSummaryCalculator,\n) => {\n  const plainRows = expandRows(rows, getRowLevelKey, getCollapsedRows, isGroupRow);\n  return rowsSummary(plainRows, summaryItems, getCellValue, calculator);\n};\n\nexport const groupSummaryValues: GroupSummaryValuesFn = (\n  rows,\n  summaryItems,\n  getCellValue,\n  getRowLevelKey,\n  isGroupRow,\n  getCollapsedRows,\n  calculator = defaultSummaryCalculator,\n) => {\n  let levels: GroupLevel[] = [];\n  const getLevelIndex = (levelKey: string) => (\n    levels.findIndex(level => level.levelKey === levelKey)\n  );\n  const summaries = {};\n\n  const anyRowLevelSummaryExist = summaryItems.some(item => (\n    !(item as any).showInGroupFooter\n  ));\n  const expandedRows = anyRowLevelSummaryExist\n    ? expandRows(rows, getRowLevelKey, getCollapsedRows, isGroupRow, true)\n    : rows;\n\n  expandedRows.forEach((row) => {\n    const levelKey = getRowLevelKey(row);\n    const collapsedRows = getCollapsedRows && getCollapsedRows(row);\n    let levelIndex = getLevelIndex(levelKey);\n    if (levelIndex > -1) {\n      levels.forEach((level) => {\n        summaries[level.row.compoundKey] = rowsSummary(\n          level.rows, summaryItems, getCellValue, calculator,\n        );\n      });\n      levels = levels.slice(0, levelIndex);\n    }\n    if (isGroupRow!(row)) {\n      levels.push({\n        levelKey,\n        row,\n        rows: [],\n      });\n      levelIndex = getLevelIndex(levelKey);\n    }\n    // when row level summary exists, these rows had already been expanded earlier\n    const isCollapsedNestedGroupRow = collapsedRows && levelIndex > 0 && !anyRowLevelSummaryExist;\n    const rowsToAppend = !levelKey ? [row] : collapsedRows;\n    if (!levelKey || isCollapsedNestedGroupRow) {\n      levels.forEach((level) => {\n        level.rows.push(...rowsToAppend);\n      });\n    }\n  }, {});\n  levels.forEach((level) => {\n    summaries[level.row.compoundKey] = rowsSummary(\n      level.rows, summaryItems, getCellValue, calculator,\n    );\n  });\n  return summaries;\n};\n\nexport const treeSummaryValues: TreeSummaryValuesFn = (\n  rows,\n  summaryItems,\n  getCellValue,\n  getRowLevelKey,\n  isGroupRow,\n  getRowId,\n  calculator = defaultSummaryCalculator,\n) => {\n  let levels: any[] = [];\n  const summaries = {};\n  rows.forEach((row) => {\n    const levelKey = getRowLevelKey(row);\n    if (!levelKey) {\n      levels[levels.length - 1].rows.push(row);\n      return;\n    }\n    const levelIndex = levels.findIndex(level => level.levelKey === levelKey);\n    if (levelIndex > -1) {\n      levels.slice(levelIndex).forEach((level) => {\n        if (level.rows.length) {\n          summaries[getRowId(level.row)] = rowsSummary(\n            level.rows, summaryItems, getCellValue, calculator,\n          );\n        }\n      });\n      levels = levels.slice(0, levelIndex);\n    }\n    if (!isGroupRow || !isGroupRow(row)) {\n      if (levels.length) {\n        levels[levels.length - 1].rows.push(row);\n      }\n      levels.push({\n        levelKey,\n        row,\n        rows: [],\n      });\n    }\n  }, {});\n  levels.forEach((level) => {\n    if (level.rows.length) {\n      summaries[getRowId(level.row)] = rowsSummary(\n        level.rows, summaryItems, getCellValue, calculator,\n      );\n    }\n  });\n  return summaries;\n};\n","export const TABLE_TOTAL_SUMMARY_TYPE = Symbol('totalSummary');\nexport const TABLE_GROUP_SUMMARY_TYPE = Symbol('groupSummary');\nexport const TABLE_TREE_SUMMARY_TYPE = Symbol('treeSummary');\n\nexport const defaultFormatlessSummaries = ['count'];\n","import { PureComputed } from '@devexpress/dx-core';\nimport {\n  TABLE_TOTAL_SUMMARY_TYPE, TABLE_GROUP_SUMMARY_TYPE, TABLE_TREE_SUMMARY_TYPE,\n} from './constants';\nimport { TABLE_DATA_TYPE } from '../table/constants';\nimport {\n  GetColumnSummariesFn, IsSpecificCellFn, IsSpecificRowFn, SummaryItem,\n  GetGroupInlineSummariesFn, ColumnInlineSummaries, GroupSummaryItem,\n} from '../../types';\n\nexport const isTotalSummaryTableCell: IsSpecificCellFn = (\n  tableRow, tableColumn,\n) => tableRow.type === TABLE_TOTAL_SUMMARY_TYPE && tableColumn.type === TABLE_DATA_TYPE;\nexport const isGroupSummaryTableCell: IsSpecificCellFn = (\n  tableRow, tableColumn,\n) => tableRow.type === TABLE_GROUP_SUMMARY_TYPE && tableColumn.type === TABLE_DATA_TYPE;\nexport const isTreeSummaryTableCell: IsSpecificCellFn = (\n  tableRow, tableColumn,\n) => tableRow.type === TABLE_TREE_SUMMARY_TYPE && tableColumn.type === TABLE_DATA_TYPE;\nexport const isTotalSummaryTableRow: IsSpecificRowFn = tableRow => (\n  tableRow.type === TABLE_TOTAL_SUMMARY_TYPE\n);\nexport const isGroupSummaryTableRow: IsSpecificRowFn = tableRow => (\n  tableRow.type === TABLE_GROUP_SUMMARY_TYPE\n);\nexport const isTreeSummaryTableRow: IsSpecificRowFn = tableRow => (\n  tableRow.type === TABLE_TREE_SUMMARY_TYPE\n);\n\nexport const getColumnSummaries: GetColumnSummariesFn = (\n  summaryItems, columnName, summaryValues, predicate = () => true,\n) => summaryItems\n  .map((item, index) => [item, index] as [SummaryItem, number])\n  .filter(([item]) => item.columnName === columnName && predicate(item))\n  .map(([item, index]) => ({\n    type: item.type,\n    value: summaryValues[index],\n  }));\n\nexport const isFooterSummary: PureComputed<[SummaryItem], boolean> = summaryItem => (\n  (summaryItem as GroupSummaryItem).showInGroupFooter!\n);\nexport const isInlineGroupCaptionSummary: PureComputed<[SummaryItem], boolean> = summaryItem => (\n  !((summaryItem as GroupSummaryItem).showInGroupFooter ||\n  (summaryItem as GroupSummaryItem).alignByColumn)\n);\nexport const groupFooterSummaryExists: PureComputed<[GroupSummaryItem[]], boolean> =\n  groupSummaryItems => groupSummaryItems?.some(isFooterSummary);\n\nexport const getGroupInlineSummaries: GetGroupInlineSummariesFn = (\n  summaryItems, columns, summaryValues,\n) => {\n  if (!summaryItems.some(isInlineGroupCaptionSummary)) {\n    return [];\n  }\n\n  return columns.reduce((acc, column) => {\n    const colName = column.name;\n    const summaries = getColumnSummaries(\n      summaryItems, colName, summaryValues, isInlineGroupCaptionSummary,\n    );\n    if (summaries.length) {\n      acc.push({\n        column,\n        summaries,\n      });\n    }\n\n    return acc;\n  }, [] as ColumnInlineSummaries[]);\n};\n","import { PureComputed } from '@devexpress/dx-core';\nimport {\n  TABLE_TOTAL_SUMMARY_TYPE,\n  TABLE_GROUP_SUMMARY_TYPE,\n  TABLE_TREE_SUMMARY_TYPE,\n} from './constants';\nimport {\n  TableRow, RowLevel, TableRowsWithSummariesFn,\n} from '../../types';\nimport { groupFooterSummaryExists } from './helpers';\n\nexport const tableRowsWithTotalSummaries: PureComputed<[TableRow[]]> = footerRows => [\n  { key: TABLE_TOTAL_SUMMARY_TYPE.toString(), type: TABLE_TOTAL_SUMMARY_TYPE },\n  ...footerRows,\n];\n\nexport const tableRowsWithSummaries: TableRowsWithSummariesFn = (\n  tableRows, groupSummaryItems, treeSummaryItems, getRowLevelKey, isGroupRow, getRowId,\n) => {\n  const hasGroupFooterSummary = groupFooterSummaryExists(groupSummaryItems);\n  if (!getRowLevelKey || !(hasGroupFooterSummary || treeSummaryItems.length)) return tableRows;\n\n  const result: TableRow[] = [];\n  const closeLevel = (level: RowLevel) => {\n    if (!level.opened) return;\n    if (hasGroupFooterSummary && isGroupRow && isGroupRow(level.row)) {\n      const { compoundKey } = level.row;\n      result.push({\n        key: `${TABLE_GROUP_SUMMARY_TYPE.toString()}_${compoundKey}`,\n        type: TABLE_GROUP_SUMMARY_TYPE,\n        row: level.row,\n      });\n    } else if (treeSummaryItems.length) {\n      const rowId = getRowId(level.row);\n      result.push({\n        key: `${TABLE_TREE_SUMMARY_TYPE.toString()}_${rowId}`,\n        type: TABLE_TREE_SUMMARY_TYPE,\n        row: level.row,\n      });\n    }\n  };\n\n  let levels: RowLevel[] = [];\n  tableRows.forEach((tableRow) => {\n    const { row } = tableRow;\n    const levelKey = getRowLevelKey(row);\n    if (levelKey) {\n      const levelIndex = levels.findIndex(level => level.levelKey === levelKey);\n      if (levelIndex > -1) {\n        levels.slice(levelIndex).reverse().forEach(closeLevel);\n        levels = levels.slice(0, levelIndex);\n      }\n      if (!isGroupRow || !isGroupRow(row)) {\n        levels = levels.map(level => ({\n          ...level,\n          opened: true,\n        }));\n      }\n      levels.push({\n        levelKey,\n        row,\n        opened: false,\n      });\n    } else {\n      levels = levels.map(level => ({\n        ...level,\n        opened: true,\n      }));\n    }\n    result.push(tableRow);\n  });\n  levels.slice().reverse().forEach(closeLevel);\n\n  return result;\n};\n","import { GroupSummaryItem } from '../../types';\n\nexport const prepareGroupSummaryItems = (items: GroupSummaryItem[]) => (\n  !!items\n    ? items.map(item => ({\n      ...item,\n      showInGroupFooter: (\n        item.showInGroupFooter === undefined && !item.alignByColumn\n      )\n        ? true\n        : item.showInGroupFooter,\n    }))\n    : items\n);\n","import { ReadonlyObject, PureComputed } from '@devexpress/dx-core';\nimport {\n  TABLE_FILTER_TYPE, TABLE_HEADING_TYPE, TABLE_DATA_TYPE, TABLE_BAND_TYPE,\n  TABLE_TOTAL_SUMMARY_TYPE, TABLE_STUB_TYPE,\n  TABLE_GROUP_TYPE,\n} from '@devexpress/dx-grid-core';\nimport {\n    GetNextFocusedElementFn, FocusedElement, TableColumn, TableRow,\n    GetElementFn, GetElementPrevNextPartFn, Elements, RowId, GetInnerElementsFn,\n    OnFocusedCellChangeFn, ScrollToColumnFn, GetNextPrevPartFn,\n    GetNextPrevCellFromBodyFn, GetPrevCellFromHeadingFn, GetNextCellFromHeadingFn,\n    GetCellNextPrevPartFn, FocusedElementWScrolling, InlineEditing,\n} from '../../types';\n\nconst HEADING_TYPE = TABLE_HEADING_TYPE.toString();\nconst FILTER_TYPE = TABLE_FILTER_TYPE.toString();\nconst DATA_TYPE = TABLE_DATA_TYPE.toString();\nconst BAND_TYPE = TABLE_BAND_TYPE.toString();\nconst TOTAL_SUMMARY_TYPE = TABLE_TOTAL_SUMMARY_TYPE.toString();\nconst STUB_TYPE = TABLE_STUB_TYPE.toString();\nconst GROUP_TYPE = TABLE_GROUP_TYPE.toString();\n\nconst tableParts = [HEADING_TYPE, FILTER_TYPE, DATA_TYPE, TOTAL_SUMMARY_TYPE];\n\nconst getIndex: PureComputed<[TableColumn[] | TableRow [], string], number> = (arr, key) => {\n  return arr.findIndex((el: TableColumn | TableRow) => {\n    return el.key === key;\n  });\n};\n\nconst isSpanInput: PureComputed<[any[]], boolean> = (innerElements) => {\n  return innerElements[0].tagName === 'SPAN' ||\n  innerElements[0].tagName === 'INPUT' && innerElements[0].type === 'text';\n};\n\nconst isDefined = (value: any): value is boolean => {\n  return value !== undefined;\n};\n\nconst hasInsideElements: PureComputed<[any[], number?], boolean> = (\n  innerElements, focusedElementIndex,\n) => {\n  if ((innerElements.length && focusedElementIndex === undefined) ||\n  (isDefined(focusedElementIndex) && focusedElementIndex < innerElements.length - 1)) {\n    if (innerElements.length === 1 && focusedElementIndex === undefined) {\n      return !isSpanInput(innerElements);\n    }\n    return true;\n  }\n  return false;\n};\n\nconst getIndexInnerElement: PureComputed<[\n  Elements, string, string, number,\n], number | undefined> = (\n  elements, rowKey, columnKey, direction,\n) => {\n  const innerElements = getInnerElements(elements, rowKey, columnKey);\n  const index = direction > 0 ? 0 : innerElements.length - 1;\n\n  return cellEmptyOrHasSpanAndInput(elements, rowKey, columnKey) ? undefined : index;\n};\n\nconst getNextPrevClosestColumnKey: PureComputed<\n  [TableColumn[], number, string, Elements, number], string | undefined\n> = (tableColumns, columnIndex, rowKey, elements, direction) => {\n  let columnKey;\n  if (direction > 0) {\n    for (let i = columnIndex; i <= tableColumns.length - 1; i += 1) {\n      if (elements[rowKey][tableColumns[i].key]) {\n        columnKey = tableColumns[i].key;\n        break;\n      }\n    }\n  } else {\n    for (let i = columnIndex; i >= 0; i -= 1) {\n      if (elements[rowKey][tableColumns[i].key]) {\n        columnKey = tableColumns[i].key;\n        break;\n      }\n    }\n  }\n  return columnKey;\n};\n\nconst shouldBeScrolled = (\n  elements: ReadonlyObject<Elements>, key1: string, key2: string,\n  scrollToColumn?: ScrollToColumnFn,\n): scrollToColumn is ScrollToColumnFn => {\n  if (scrollToColumn && !elements[key1][key2]) {\n    return Object.keys(elements[key1]).some((column) => {\n      return column.includes(STUB_TYPE);\n    });\n  }\n  return false;\n};\n\nconst convertPart: PureComputed<\n  [string, Elements, TableRow[]], string | void\n> = (part, elements, tableBodyRows) => {\n  if (part === DATA_TYPE && elements[tableBodyRows[0].key]) {\n    return DATA_TYPE;\n  }\n  if (elements[part]) {\n    return part;\n  }\n  return;\n};\n\nconst getLastPart: PureComputed<\n  [Elements, TableRow[], number?], string | void\n> = (elements, tableBodyRows, partIndex) => {\n  let index = partIndex || tableParts.length;\n  let part;\n\n  do {\n    index = index - 1;\n    part = convertPart(tableParts[index], elements, tableBodyRows);\n  } while (index > 0 && !part);\n\n  return part;\n};\n\nconst getRowKey: PureComputed<[string, string, string?]> = (part, key, headerRowKey) => {\n  if (headerRowKey && part === HEADING_TYPE) {\n    return headerRowKey;\n  }\n  return part === DATA_TYPE ? key : part;\n};\n\nconst getPrevPart: GetNextPrevPartFn = (\n  focusedElement, elements, tableBodyRows,\n) => {\n  const index = tableParts.findIndex((p) => {\n    return p === focusedElement.part;\n  });\n  if (index === 0) {\n    return;\n  }\n  return getLastPart(elements, tableBodyRows, index);\n};\n\nconst getNextPart: GetNextPrevPartFn = (\n  focusedElement, elements, tableBodyRows,\n) => {\n  const index = tableParts.findIndex((p) => {\n    return p === focusedElement.part;\n  });\n  if (index === tableParts.length - 1) {\n    return;\n  }\n  const part = tableParts.find((p, i) => {\n    if (i > index) {\n      return convertPart(p, elements, tableBodyRows);\n    }\n    return false;\n  });\n  return part;\n};\n\nconst getCellNextPart: GetElementPrevNextPartFn = (\n  focusedElement, elements, tableBodyRows, tableColumns, scrollToColumn,\n) => {\n  const part = getNextPart(focusedElement, elements, tableBodyRows);\n  if (!part) {\n    return {};\n  }\n\n  const rowKey = getRowKey(part, tableBodyRows[0].key);\n  const columnKey = tableColumns[0].key;\n  if (shouldBeScrolled(elements, rowKey, columnKey, scrollToColumn)) {\n    return {\n      element: {\n        rowKey,\n        columnKey,\n        part,\n      },\n      scrolling: 'left',\n    };\n  }\n  return {\n    element: {\n      rowKey,\n      columnKey,\n      index: getIndexInnerElement(elements, rowKey, columnKey, 1),\n      part,\n    },\n  };\n};\n\nconst getCellPrevPart: GetElementPrevNextPartFn = (\n  focusedElement, elements, tableBodyRows, tableColumns, scrollToColumn,\n) => {\n  const part = getPrevPart(focusedElement, elements, tableBodyRows);\n  if (!part) {\n    return {};\n  }\n\n  const rowKey = getRowKey(part, tableBodyRows[tableBodyRows.length - 1].key);\n  const columnKeyIndex = tableColumns.length - 1;\n  const columnKey = tableColumns[columnKeyIndex].key;\n  if (shouldBeScrolled(elements, rowKey, columnKey, scrollToColumn)) {\n    return {\n      element: {\n        rowKey,\n        columnKey,\n        part,\n      },\n      scrolling: 'right',\n    };\n  }\n  const nextColumnKey = getNextPrevClosestColumnKey(tableColumns, columnKeyIndex,\n    rowKey, elements, -1);\n  return {\n    element: nextColumnKey ? {\n      rowKey,\n      columnKey: nextColumnKey,\n      index: getIndexInnerElement(elements, rowKey, nextColumnKey, -1),\n      part,\n    } : undefined,\n  };\n};\n\nconst getPrevCellFromBody: GetNextPrevCellFromBodyFn = (\n  columnIndex, rowIndex, tableColumns, tableBodyRows, focusedElement, elements,\n  scrollToColumn,\n) => {\n  let prevRowKey = focusedElement.rowKey;\n  let prevColumnKey;\n  if (columnIndex === 0 && rowIndex === 0) {\n    return getCellPrevPart(focusedElement, elements, tableBodyRows, tableColumns, scrollToColumn);\n  }\n  if (columnIndex === 0) {\n    prevRowKey = tableBodyRows[rowIndex - 1].key;\n    if (prevRowKey.includes(GROUP_TYPE)) {\n      prevColumnKey = getNextPrevClosestColumnKey(\n        tableColumns, tableColumns.length - 1, prevRowKey, elements, -1,\n      );\n    } else {\n      prevColumnKey = tableColumns[tableColumns.length - 1].key;\n    }\n    if (prevColumnKey && shouldBeScrolled(elements, prevRowKey, prevColumnKey, scrollToColumn)) {\n      return {\n        element: {\n          rowKey: prevRowKey,\n          columnKey: prevColumnKey,\n          part: focusedElement.part,\n        },\n        scrolling: 'right',\n      };\n    }\n  } else {\n    prevColumnKey = getNextPrevClosestColumnKey(\n      tableColumns, columnIndex - 1, prevRowKey, elements, -1,\n    );\n  }\n\n  return {\n    element: prevColumnKey ? {\n      rowKey: prevRowKey,\n      columnKey: prevColumnKey,\n      index: getIndexInnerElement(elements, prevRowKey, prevColumnKey, -1),\n      part: focusedElement.part,\n    } : undefined,\n  };\n};\n\nconst getPrevCellFromHeading: GetPrevCellFromHeadingFn = (\n  tableHeaderRows, tableColumns, columnIndex,\n  { rowKey, part }, elements,\n) => {\n  let prevColumnKey;\n  let prevRowKey;\n  const headIndex = getIndex(tableHeaderRows, rowKey);\n  prevColumnKey = getNextPrevClosestColumnKey(tableColumns, columnIndex - 1, rowKey, elements, -1);\n  if (prevColumnKey) {\n    return {\n      element: {\n        columnKey: prevColumnKey,\n        rowKey,\n        part,\n        index: getIndexInnerElement(elements, rowKey, prevColumnKey, -1),\n      },\n    };\n  }\n  if (headIndex > 0) {\n    let abort = false;\n    for (let i = headIndex - 1; i >= 0 && !abort; i -= 1) {\n      for (let j = tableColumns.length - 1; j >= 0; j -= 1) {\n        if (elements[tableHeaderRows[i].key][tableColumns[j].key]) {\n          prevColumnKey = tableColumns[j].key;\n          prevRowKey = tableHeaderRows[i].key;\n          abort = true;\n          break;\n        }\n      }\n    }\n    if (prevColumnKey && prevRowKey) {\n      return {\n        element: {\n          columnKey: prevColumnKey,\n          rowKey: prevRowKey,\n          part,\n          index: getIndexInnerElement(elements, prevRowKey, prevColumnKey, -1),\n        },\n      };\n    }\n  }\n\n  return {};\n};\n\nconst getPrevElement: GetElementFn = (\n  focusedElement, tableBodyRows, tableColumns, tableHeaderRows, elements, scrollToColumn,\n) => {\n  const columnIndex = getIndex(tableColumns, focusedElement.columnKey);\n  const rowIndex = getIndex(tableBodyRows, focusedElement.rowKey);\n\n  if (isDefined(focusedElement.index) && focusedElement.index > 0) {\n    return { element: { ...focusedElement, index: focusedElement.index - 1 } };\n  }\n\n  if (focusedElement.part === DATA_TYPE) {\n    return getPrevCellFromBody(columnIndex, rowIndex, tableColumns,\n      tableBodyRows, focusedElement, elements, scrollToColumn);\n  }\n\n  if (focusedElement.part === HEADING_TYPE) {\n    const cell = getPrevCellFromHeading(tableHeaderRows, tableColumns, columnIndex,\n      focusedElement, elements);\n    if (cell.element) {\n      return {\n        element: {\n          ...cell.element,\n          index: getIndexInnerElement(elements, cell.element.rowKey, cell.element.columnKey, -1),\n        },\n      };\n    }\n    return { element: cell.element };\n  }\n\n  if (columnIndex === 0) {\n    return getCellPrevPart(focusedElement, elements, tableBodyRows, tableColumns, scrollToColumn);\n  }\n  const rowKey = focusedElement.part;\n  const columnKey = tableColumns[columnIndex - 1].key;\n  return {\n    element: {\n      rowKey,\n      columnKey,\n      index: getIndexInnerElement(elements, rowKey, columnKey, -1),\n      part: focusedElement.part,\n    },\n  };\n};\n\nconst getNextCellFromBody: GetNextPrevCellFromBodyFn = (\n  columnIndex, rowIndex, tableColumns,\n  tableBodyRows, focusedElement, elements, scrollToColumn,\n) => {\n  let nextRowKey = focusedElement.rowKey;\n  let nextColumnKey;\n\n  if (columnIndex === tableColumns.length - 1 && rowIndex === tableBodyRows.length - 1) {\n    return getCellNextPart(focusedElement, elements, tableBodyRows, tableColumns, scrollToColumn);\n  }\n  if (columnIndex === tableColumns.length - 1) {\n    nextRowKey = tableBodyRows[rowIndex + 1].key;\n    nextColumnKey = tableColumns[0].key;\n    if (shouldBeScrolled(elements, nextRowKey, nextColumnKey, scrollToColumn)) {\n      return {\n        element: {\n          rowKey: nextRowKey,\n          columnKey: nextColumnKey,\n          part: focusedElement.part,\n        },\n        scrolling: 'left',\n      };\n    }\n  } else {\n    nextColumnKey = getNextPrevClosestColumnKey(\n      tableColumns, columnIndex + 1, nextRowKey, elements, 1,\n    );\n    if (!nextColumnKey) {\n      if (rowIndex === tableBodyRows.length - 1) {\n        return getCellNextPart(\n          focusedElement, elements, tableBodyRows, tableColumns, scrollToColumn,\n        );\n      }\n      nextRowKey = tableBodyRows[rowIndex + 1].key;\n      nextColumnKey = tableColumns[0].key;\n    }\n  }\n\n  return {\n    element: {\n      rowKey: nextRowKey,\n      columnKey: nextColumnKey,\n      index: getIndexInnerElement(elements, nextRowKey, nextColumnKey, 1),\n      part: focusedElement.part,\n    },\n  };\n};\n\nconst getNextCellFromHeading: GetNextCellFromHeadingFn = (\n  tableHeaderRows, tableBodyRows, tableColumns,\n  columnIndex, focusedElement, elements,\n  scrollToColumn,\n) => {\n  const headIndex = getIndex(tableHeaderRows, focusedElement.rowKey);\n  let nextRowKey;\n  let nextColumnKey = getNextPrevClosestColumnKey(\n    tableColumns, columnIndex + 1, focusedElement.rowKey, elements, 1,\n  );\n  if (nextColumnKey) {\n    return {\n      element: {\n        columnKey: nextColumnKey,\n        rowKey: focusedElement.rowKey,\n        part: focusedElement.part,\n        index: getIndexInnerElement(elements, focusedElement.rowKey, nextColumnKey, 1),\n      },\n    };\n  }\n  if (headIndex !== tableHeaderRows.length - 1) {\n    let abort = false;\n    for (let i = headIndex + 1; i <= tableHeaderRows.length - 1 && !abort; i += 1) {\n      for (let j = 0; j <= tableColumns.length - 1; j += 1) {\n        if (elements[tableHeaderRows[i].key][tableColumns[j].key]) {\n          nextColumnKey = tableColumns[j].key;\n          nextRowKey = tableHeaderRows[i].key;\n          abort = true;\n          break;\n        }\n      }\n    }\n    if (nextColumnKey && nextRowKey) {\n      return {\n        element: {\n          columnKey: nextColumnKey,\n          rowKey: nextRowKey,\n          part: focusedElement.part,\n          index: getIndexInnerElement(elements, nextRowKey, nextColumnKey, 1),\n        },\n      };\n    }\n  }\n\n  return getCellNextPart(focusedElement, elements, tableBodyRows, tableColumns, scrollToColumn);\n};\n\nconst getNextElement: GetElementFn = (\n  focusedElement, tableBodyRows, tableColumns, tableHeaderRows, elements, scrollToColumn,\n) => {\n  const innerElements = getInnerElements(elements, focusedElement.rowKey, focusedElement.columnKey);\n  const columnIndex = getIndex(tableColumns, focusedElement.columnKey);\n  const rowIndex = getIndex(tableBodyRows, focusedElement.rowKey);\n\n  if (hasInsideElements(innerElements, focusedElement.index)) {\n    return {\n      element: {\n        ...focusedElement,\n        index: !isDefined(focusedElement.index) ? 0 : focusedElement.index + 1,\n      },\n    };\n  }\n\n  if (focusedElement.part === DATA_TYPE) {\n    return getNextCellFromBody(columnIndex, rowIndex, tableColumns,\n      tableBodyRows, focusedElement, elements, scrollToColumn);\n  }\n\n  if (focusedElement.part === HEADING_TYPE) {\n    return getNextCellFromHeading(tableHeaderRows, tableBodyRows, tableColumns, columnIndex,\n      focusedElement, elements, scrollToColumn);\n  }\n\n  if (columnIndex === tableColumns.length - 1) {\n    return getCellNextPart(focusedElement, elements, tableBodyRows, tableColumns, scrollToColumn);\n  }\n\n  const rowKey = focusedElement.rowKey;\n  const columnKey = tableColumns[columnIndex + 1].key;\n  return {\n    element: {\n      rowKey,\n      columnKey,\n      part: focusedElement.part,\n      index: getIndexInnerElement(elements, rowKey, columnKey, 1),\n    },\n  };\n};\n\nconst hasCellInput: PureComputed<[any], boolean> = (innerElements) => {\n  return innerElements.length ? innerElements[0].tagName === 'INPUT' : false;\n};\n\nconst cellEmptyOrHasSpanAndInput: PureComputed<[\n  Elements, string, string\n], boolean> = (elements, key1, key2) => {\n  const innerElements = getInnerElements(elements, key1, key2);\n  if (innerElements.length) {\n    return isSpanInput(innerElements);\n  }\n  return true;\n};\n\nconst getCellRightLeft: PureComputed<[number, FocusedElement, TableColumn[], Elements],\nFocusedElement | undefined> = (\n  direction, focusedElement, tableColumns, elements,\n) => {\n  if (focusedElement.part !== DATA_TYPE) {\n    return;\n  }\n  const columnIndex = getIndex(tableColumns, focusedElement.columnKey);\n  if (tableColumns[columnIndex + direction]) {\n    const columnKey = getNextPrevClosestColumnKey(\n      tableColumns, columnIndex + direction, focusedElement.rowKey, elements, direction,\n    );\n    if (columnKey) {\n      return {\n        rowKey: focusedElement.rowKey,\n        columnKey,\n        part: focusedElement.part,\n      };\n    }\n  }\n  return;\n};\n\nconst getFirstCell: PureComputed<\n  [Elements, TableRow[], TableColumn[], TableRow[], ScrollToColumnFn?, boolean?],\n  FocusedElementWScrolling\n> = (\n  elements, tableBodyRows, tableColumns, tableHeaderRows, scrollToColumn, withInnerElements,\n) => {\n  const part = tableParts.find((p) => {\n    return convertPart(p, elements, tableBodyRows);\n  });\n  if (!part) {\n    return {};\n  }\n  const rowKey = getRowKey(part, tableBodyRows[0].key, tableHeaderRows[0].key);\n  const columnKey = tableColumns[0].key;\n  if (shouldBeScrolled(elements, rowKey, columnKey, scrollToColumn)) {\n    return {\n      element: {\n        rowKey,\n        columnKey,\n        part,\n      },\n      scrolling: 'left',\n    };\n  }\n\n  return {\n    element: {\n      rowKey,\n      columnKey,\n      index: withInnerElements ? getIndexInnerElement(elements, rowKey, columnKey, 1) : undefined,\n      part,\n    },\n  };\n};\n\nconst getLastCell: PureComputed<[Elements, TableRow[], TableColumn[]], FocusedElementWScrolling> = (\n  elements, tableBodyRows, tableColumns,\n) => {\n  const part = getLastPart(elements, tableBodyRows);\n  if (!part) {\n    return {};\n  }\n\n  const rowKey = getRowKey(part, tableBodyRows[tableBodyRows.length - 1].key);\n  const columnKey = getNextPrevClosestColumnKey(\n    tableColumns, tableColumns.length - 1, rowKey, elements, -1,\n  );\n\n  return {\n    element: columnKey ? {\n      rowKey,\n      columnKey,\n      index: getIndexInnerElement(elements, rowKey, columnKey, 1),\n      part,\n    } : undefined,\n  };\n};\n\nconst getToolbarPagingElements: PureComputed<[Elements]> = (elements) => {\n  return {\n    toolbarElements: elements.toolbar && getInnerElements(elements, 'toolbar', 'none'),\n    pagingElements: elements.paging && getInnerElements(elements, 'paging', 'none')\n    .filter((el: any) => {\n      return !el.hasAttribute('disabled') && el.getAttribute('tabindex') !== '-1';\n    }),\n  };\n};\n\nconst getFirstCellInLastPart: PureComputed<[\n  Elements, TableRow[], TableColumn[], ScrollToColumnFn?, boolean?\n], FocusedElementWScrolling> = (\n  elements, tableBodyRows, tableColumns, scrollToColumn, withInnerElements,\n) => {\n  const lastPart = getLastPart(elements, tableBodyRows);\n  if (lastPart) {\n    const columnKey = tableColumns[0].key;\n    const rowKey = getRowKey(lastPart, tableBodyRows[0].key);\n    if (shouldBeScrolled(elements, rowKey, columnKey, scrollToColumn)) {\n      return {\n        element: {\n          rowKey,\n          columnKey,\n          part: lastPart,\n        },\n        scrolling: 'left',\n      };\n    }\n    return {\n      element: {\n        columnKey,\n        rowKey,\n        index: withInnerElements ? getIndexInnerElement(elements, rowKey, columnKey, 1) : undefined,\n        part: lastPart,\n      },\n    };\n  }\n  return {};\n};\n\nconst applyEnterAction: PureComputed<[\n  Elements, InlineEditing, TableColumn[], TableRow[], FocusedElement?\n], FocusedElement | undefined> = (\n  elements, { commitChangedRows, stopEditCells, startEditCells },\n  tableColumns, tableBodyRows, focusedElement,\n) => {\n  if (!focusedElement) {\n    return;\n  }\n  const innerElements = getInnerElements(elements, focusedElement.rowKey, focusedElement.columnKey);\n  const columnIndex = getIndex(tableColumns, focusedElement.columnKey);\n  const rowIndex = getIndex(tableBodyRows, focusedElement.rowKey);\n\n  if (focusedElement.part === DATA_TYPE && commitChangedRows) {\n    if (focusedElement.index === 0) {\n      commitChangedRows({ rowIds: [tableBodyRows[rowIndex].rowId] });\n      stopEditCells!({\n        editingCells: [{\n          rowId: tableBodyRows[rowIndex].rowId,\n          columnName: tableColumns[columnIndex].column!.name,\n        }],\n      });\n      return {\n        part: focusedElement.part,\n        columnKey: focusedElement.columnKey,\n        rowKey: focusedElement.rowKey,\n      };\n    }\n    startEditCells!({\n      editingCells: [{\n        rowId: tableBodyRows[rowIndex].rowId,\n        columnName: tableColumns[columnIndex].column!.name,\n      }],\n    });\n    return {\n      part: focusedElement.part,\n      columnKey: focusedElement.columnKey,\n      rowKey: focusedElement.rowKey,\n      index: 0,\n    };\n\n  }\n  if (!isDefined(focusedElement.index) && innerElements.length && isSpanInput(innerElements)) {\n    if (innerElements[0].tagName === 'SPAN') {\n      innerElements[0].click();\n    }\n    return {\n      part: focusedElement.part,\n      columnKey: focusedElement.columnKey,\n      rowKey: focusedElement.rowKey,\n      index: 0,\n    };\n  }\n\n  if (focusedElement.index === 0 && hasCellInput(innerElements)) {\n    return {\n      part: focusedElement.part,\n      columnKey: focusedElement.columnKey,\n      rowKey: focusedElement.rowKey,\n    };\n  }\n\n  return;\n};\n\nconst applyEscapeAction: PureComputed<[\n  Elements, InlineEditing, TableColumn[], TableRow[], FocusedElement?\n], FocusedElement | undefined> = (\n  elements, { cancelChangedRows, stopEditCells }, tableColumns, tableBodyRows, focusedElement,\n) => {\n  if (!focusedElement) {\n    return;\n  }\n  const innerElements = getInnerElements(elements, focusedElement.rowKey, focusedElement.columnKey);\n  const columnIndex = getIndex(tableColumns, focusedElement.columnKey);\n  const rowIndex = getIndex(tableBodyRows, focusedElement.rowKey);\n\n  if (focusedElement.index === 0 && hasCellInput(innerElements)) {\n    if (focusedElement.part === DATA_TYPE && cancelChangedRows) {\n      cancelChangedRows({\n        rowIds: [tableBodyRows[rowIndex].rowId],\n      });\n      stopEditCells!({\n        editingCells: [{\n          rowId: tableBodyRows[rowIndex].rowId,\n          columnName: tableColumns[columnIndex].column!.name,\n        }],\n      });\n    }\n    return {\n      part: focusedElement.part,\n      columnKey: focusedElement.columnKey,\n      rowKey: focusedElement.rowKey,\n    };\n  }\n  return;\n};\n\nconst actionOnCheckbox: PureComputed<[Elements, FocusedElement?], void> = (\n  elements, focusedElement,\n) => {\n  if (!focusedElement || isDefined(focusedElement.index)) {\n    return;\n  }\n\n  const el = getInnerElements(elements, focusedElement.rowKey, focusedElement.columnKey, 'input')\n  .filter((element: any) => {\n    return element.type === 'checkbox';\n  });\n  if (el[0]) {\n    el[0].click();\n  }\n};\n\nconst actionOnTreeMode: PureComputed<[Elements, RowId[], number, FocusedElement], void> = (\n  elements, expandedRowIds, direction, focusedElement,\n) => {\n  if (!focusedElement || isDefined(focusedElement.index) || !expandedRowIds) {\n    return;\n  }\n  const el = getInnerElements(\n    elements, focusedElement.rowKey, focusedElement.columnKey, 'button, i',\n  );\n  const index = getIndexFromKey(focusedElement.rowKey);\n  if (direction > 0 && expandedRowIds.indexOf(index) === -1 ||\n  direction < 0 && expandedRowIds.indexOf(index) > -1) {\n    if (el[0]) {\n      el[0].click();\n    }\n  }\n};\n\nexport const getInnerElements: GetInnerElementsFn = (\n  elements, key1, key2, query = '[tabIndex], input, button, a',\n) => {\n  return Array.from(elements[key1][key2][0].current.querySelectorAll(query)).filter((el: any) => {\n    return !el.hasAttribute('disabled') && el.getAttribute('tabindex') !== '-1';\n  });\n};\n\nconst getCellTopBottom: PureComputed<[number, FocusedElement, TableRow[], TableColumn[], Elements],\nFocusedElement | undefined> = (\n  direction, focusedElement, tableBodyRows, tableColumns, elements,\n) => {\n  if (focusedElement.part !== DATA_TYPE) {\n    return;\n  }\n  const columnIndex = getIndex(tableColumns, focusedElement.columnKey);\n  const rowIndex = getIndex(tableBodyRows, focusedElement.rowKey);\n  if (tableBodyRows[rowIndex + direction]) {\n    const columnKey = getNextPrevClosestColumnKey(\n      tableColumns, columnIndex, tableBodyRows[rowIndex + direction].key, elements, -1,\n    );\n    if (columnKey) {\n      return {\n        rowKey: tableBodyRows[rowIndex + direction].key,\n        columnKey,\n        part: focusedElement.part,\n      };\n    }\n  }\n  return;\n};\n\nconst isCtrlMetaKey = (event: any) => {\n  return event.ctrlKey || event.metaKey;\n};\n\nconst getIndexFromKey = (key: string) => {\n  const array = key.split('_');\n  return Number(array[array.length - 1]);\n};\n\nconst getCellNextPrevPart: GetCellNextPrevPartFn = (focusedElement, elements,\n  tableBodyRows, tableColumns, direction,\n  scrollToColumn) => {\n  const part = direction > 0 ? getNextPart(focusedElement, elements, tableBodyRows) :\n  getPrevPart(focusedElement, elements, tableBodyRows);\n  if (part) {\n    const rowKey = getRowKey(part, tableBodyRows[0].key);\n    const columnKey = tableColumns[0].key;\n    return {\n      element: {\n        part,\n        rowKey,\n        columnKey,\n      },\n      scrolling: shouldBeScrolled(elements, rowKey, columnKey, scrollToColumn) ? 'left' : undefined,\n    };\n  }\n\n  return {};\n};\n\nconst applyFocusOnToolbarPaging: PureComputed<\n  [Elements, number], void\n> = (elements, direction) => {\n  if (direction > 0 && elements.paging) {\n    getInnerElements(elements, 'paging', 'none')[0].focus();\n  }\n  if (direction < 0 && elements.toolbar) {\n    getInnerElements(elements, 'toolbar', 'none')[0].focus();\n  }\n};\n\nexport const getClosestCellByRow: PureComputed<\n  [TableRow[], FocusedElement, Elements], FocusedElement\n> = (\n  tableBodyRows, focusedElement, elements,\n) => {\n  const currentIndex = getIndexFromKey(focusedElement.rowKey);\n  const bodyRow = tableBodyRows.find((row) => {\n    return getIndexFromKey(row.key) > currentIndex;\n  });\n  const rowKey = bodyRow ? bodyRow.key : tableBodyRows[tableBodyRows.length - 1].key;\n  const columnKey = focusedElement.columnKey;\n  return {\n    rowKey,\n    columnKey,\n    part: focusedElement.part,\n    index: getIndexInnerElement(elements, rowKey, columnKey, 1),\n  };\n};\n\nexport const getNextFocusedCell: GetNextFocusedElementFn = (\n  tableColumns, tableBodyRows, tableHeaderRows,\n  expandedRowIds, elements, event, inlineEditing, focusedElement,\n  scrollToColumn,\n) => {\n  if (!focusedElement) {\n    const { toolbarElements, pagingElements } = getToolbarPagingElements(elements);\n    const hasFocus = (innerElements: readonly any[]) => {\n      return innerElements.some((el: any) => {\n        return event.target === el;\n      });\n    };\n    if (isCtrlMetaKey(event)) {\n      if (event.key === 'ArrowDown' &&\n      (toolbarElements && hasFocus(toolbarElements) || !toolbarElements)) {\n        return getFirstCell(elements, tableBodyRows, tableColumns,\n          tableHeaderRows, scrollToColumn);\n      }\n      if (event.key === 'ArrowUp' &&\n      (pagingElements && hasFocus(pagingElements) || !pagingElements)) {\n        return getFirstCellInLastPart(elements, tableBodyRows, tableColumns, scrollToColumn);\n      }\n    } else if (event.key === 'Tab') {\n      if (toolbarElements && event.target === toolbarElements[toolbarElements.length - 1] &&\n         !event.shiftKey) {\n        return getFirstCell(elements, tableBodyRows, tableColumns,\n          tableHeaderRows, scrollToColumn, true);\n      }\n      if (pagingElements && event.target === pagingElements[0] && event.shiftKey) {\n        if (scrollToColumn) {\n          return getFirstCellInLastPart(elements, tableBodyRows,\n            tableColumns, scrollToColumn, true);\n        }\n        return getLastCell(elements, tableBodyRows, tableColumns);\n      }\n      const { element } = !event.shiftKey ? getFirstCell(elements, tableBodyRows, tableColumns,\n        tableHeaderRows, undefined, true) :\n        getLastCell(elements, tableBodyRows, tableColumns);\n\n      if (element &&\n        event.target === elements[element.rowKey][element.columnKey][0].current) {\n        return { element };\n      }\n    }\n    return {};\n  }\n  let cell;\n  switch (event.key) {\n    case 'Enter':\n      cell = {\n        element: applyEnterAction(elements, inlineEditing, tableColumns,\n          tableBodyRows, focusedElement),\n      };\n      break;\n    case 'Escape':\n      cell = {\n        element: applyEscapeAction(elements, inlineEditing, tableColumns,\n          tableBodyRows, focusedElement),\n      };\n      break;\n    case ' ':\n      actionOnCheckbox(elements, focusedElement);\n      break;\n    case 'Tab':\n      if (event.shiftKey) {\n        cell = getPrevElement(focusedElement, tableBodyRows, tableColumns,\n          tableHeaderRows, elements, scrollToColumn);\n      } else {\n        cell = getNextElement(focusedElement, tableBodyRows, tableColumns,\n          tableHeaderRows, elements, scrollToColumn);\n      }\n      break;\n    case 'ArrowUp':\n      if (isCtrlMetaKey(event)) {\n        cell = getCellNextPrevPart(focusedElement, elements, tableBodyRows,\n          tableColumns, -1, scrollToColumn);\n        if (!cell.element) {\n          applyFocusOnToolbarPaging(elements, -1);\n        }\n      } else {\n        cell = {\n          element: getCellTopBottom(-1, focusedElement, tableBodyRows, tableColumns, elements),\n        };\n      }\n      break;\n    case 'ArrowDown':\n      if (isCtrlMetaKey(event)) {\n        cell = getCellNextPrevPart(focusedElement, elements, tableBodyRows,\n          tableColumns, 1, scrollToColumn);\n        if (!cell.element) {\n          applyFocusOnToolbarPaging(elements, 1);\n        }\n      } else {\n        cell = {\n          element: getCellTopBottom(1, focusedElement, tableBodyRows, tableColumns, elements),\n        };\n      }\n      break;\n    case 'ArrowLeft':\n      if (isCtrlMetaKey(event)) {\n        actionOnTreeMode(elements, expandedRowIds, -1, focusedElement);\n      } else {\n        cell = { element: getCellRightLeft(-1, focusedElement, tableColumns, elements) };\n      }\n      break;\n    case 'ArrowRight':\n      if (isCtrlMetaKey(event)) {\n        actionOnTreeMode(elements, expandedRowIds, 1, focusedElement);\n      } else {\n        cell = { element: getCellRightLeft(1, focusedElement, tableColumns, elements) };\n      }\n      break;\n  }\n  return cell || {};\n};\n\nexport const getPart = (key: string): string => {\n  if (tableParts.find(t => t === key)) {\n    return key;\n  }\n  if (key.includes(BAND_TYPE)) {\n    return HEADING_TYPE;\n  }\n  return DATA_TYPE;\n};\n\nexport const getIndexToFocus: PureComputed<[\n  string, string, Elements, any, InlineEditing, string,\n], number | undefined> = (\n  key1, key2, elements, event, { startEditCells }, part,\n) => {\n  if (startEditCells && part === DATA_TYPE) {\n    return 0;\n  }\n  const innerElements = getInnerElements(elements, key1, key2);\n  const index = innerElements.findIndex((el) => {\n    return event.target === el;\n  });\n  return index !== -1 ? index : undefined;\n};\n\nexport const filterHeaderRows = (tableHeaderRows: TableRow[]) => {\n  return tableHeaderRows.filter(row =>\n    row.key.includes(BAND_TYPE) || row.key.includes(HEADING_TYPE));\n};\n\nexport const isRowFocused: PureComputed<[TableRow, string?], boolean> = (\n  tableRow, focusedRowKey,\n) => {\n  if (focusedRowKey) {\n    return tableRow.key === focusedRowKey;\n  }\n  return false;\n};\n\nexport const isCellExist: PureComputed<[Elements, FocusedElement], boolean> = (\n  elements, focusedElement,\n) => {\n  return !!(elements[focusedElement.rowKey] &&\n    elements[focusedElement.rowKey][focusedElement.columnKey]);\n};\n\nexport const isTabArrowUpDown = (event: any): boolean => {\n  return event.key === 'Tab' || isCtrlMetaKey(event) && (event.key === 'ArrowDown' || event.key === 'ArrowUp');\n};\n\nexport const focus: PureComputed<\n  [Elements, FocusedElement?,\n  FocusedElement?, OnFocusedCellChangeFn?], void\n> = (\n  elements, focusedElement, prevFocusedElement, onFocusedCellChange,\n) => {\n  if (!focusedElement || !elements[focusedElement.rowKey] ||\n      !elements[focusedElement.rowKey][focusedElement.columnKey]) {\n    return;\n  }\n  const el = focusedElement.index === undefined ?\n  elements[focusedElement.rowKey][focusedElement.columnKey][0] :\n  getInnerElements(elements, focusedElement.rowKey, focusedElement.columnKey)[focusedElement.index];\n\n  if (el) {\n    el.focus ? el.focus() : el.current.focus();\n    if (onFocusedCellChange &&\n        (prevFocusedElement?.rowKey !== focusedElement.rowKey ||\n          prevFocusedElement?.columnKey !== focusedElement.columnKey)) {\n      onFocusedCellChange({\n        rowKey: focusedElement.rowKey, columnKey: focusedElement.columnKey,\n      });\n    }\n  }\n};\n\nexport const isCellFocused: PureComputed<[\n  TableRow, TableColumn, FocusedElement?\n], boolean> = (row, column, focusedElement) => {\n  if (!focusedElement || isDefined(focusedElement.index)) {\n    return false;\n  }\n  return focusedElement.rowKey === row.key && focusedElement.columnKey === column.key;\n};\n","import {\n    FocusedElement, TableRow,\n} from '../../types';\n\nexport const getFocusing = (tableBodyRows: TableRow[], focusedElement?: FocusedElement) => {\n  if (!focusedElement) {\n    return [];\n  }\n  const focusedRow = tableBodyRows.find((row) => {\n    return row.key === focusedElement.rowKey;\n  });\n  return focusedRow ? [focusedRow.rowId] : [];\n};\n","import { GetTargetColumnGeometriesFn, GetNodeGeometriesFn } from '../types';\n\nexport const getTargetColumnGeometries: GetTargetColumnGeometriesFn = (\n  columnGeometries, sourceIndex,\n) => {\n  const sourceWidth = columnGeometries[sourceIndex].right - columnGeometries[sourceIndex].left;\n  const getWidthDifference = (index: number) => columnGeometries[index].right\n                                      - columnGeometries[index].left\n                                      - sourceWidth;\n\n  return columnGeometries\n    .map(({\n      top, right, bottom, left,\n    }, targetIndex) => {\n      let leftBorder = left;\n      if (targetIndex > 0 && targetIndex <= sourceIndex) {\n        leftBorder = Math.min(leftBorder, leftBorder - getWidthDifference(targetIndex - 1));\n      }\n      if (targetIndex > sourceIndex) {\n        leftBorder = Math.max(leftBorder, leftBorder + getWidthDifference(targetIndex));\n      }\n      let rightBorder = right;\n      if (targetIndex < columnGeometries.length - 1 && targetIndex >= sourceIndex) {\n        rightBorder = Math.max(rightBorder, rightBorder + getWidthDifference(targetIndex + 1));\n      }\n      if (targetIndex < sourceIndex) {\n        rightBorder = Math.min(rightBorder, rightBorder - getWidthDifference(targetIndex));\n      }\n\n      return {\n        top,\n        bottom,\n        right: rightBorder,\n        left: leftBorder,\n      };\n    });\n};\n\nexport const getCellGeometries: GetNodeGeometriesFn = (node) => {\n  const { left, right, width } = node.getBoundingClientRect();\n  const styleLeft = parseInt(node.style.left?.toString().replace('px', ''), 10);\n  const styleRight = parseInt(node.style.right?.toString().replace('px', ''), 10);\n\n  if (!isNaN(styleLeft)) {\n    const calculatedLeft = Math.max(styleLeft, left);\n    return {\n      left: calculatedLeft,\n      right: calculatedLeft + width,\n      isFixed: true,\n    };\n  }\n\n  if (!isNaN(styleRight)) {\n    // NOTE: get tableContainer (parent of first DIV element) to calculate 'right' value\n    let tableContainer = node as HTMLElement | null;\n    while (tableContainer && tableContainer.nodeName !== 'DIV') {\n      tableContainer = tableContainer.parentNode as HTMLElement;\n    }\n    tableContainer = tableContainer?.parentNode as HTMLElement;\n\n    if (tableContainer) {\n      const { width: tableWidth } = tableContainer.getBoundingClientRect();\n      const calculatedRight = Math.min(tableWidth - styleRight, right);\n      return {\n        left: calculatedRight - width,\n        right: calculatedRight,\n        isFixed: true,\n      };\n    }\n  }\n\n  return { left, right };\n};\n","import { easeOutCubic } from '@devexpress/dx-core';\nimport {\n  GetTableColumnGeometriesFn, GetTableTargetColumnIndexFn, ColumnAnimation,\n  GetColumnAnimationsFn, ColumnGeometry, FilterActiveAnimationsFn, EvalAnimationsFn,\n} from '../types';\n\nexport const getTableColumnGeometries: GetTableColumnGeometriesFn = (columns, tableWidth) => {\n  const columnWidths = columns\n    .map(column => column.width);\n\n  const freeSpace = tableWidth;\n  const restrictedSpace = columnWidths\n    .reduce(\n      (accum, width) => (accum as number)! + (typeof width === 'number' ? width : 0), 0) as number;\n  const freeSpacePortions = columnWidths\n    .reduce(\n      (accum, width) => (accum as number)! + (typeof width !== 'number' ? 1 : 0), 0) as number;\n  const freeSpacePortion = (freeSpace - restrictedSpace!) / freeSpacePortions!;\n\n  let lastRightPosition = 0;\n  return columnWidths\n    .map(width => (typeof width !== 'number' ? freeSpacePortion : width))\n    .map((width) => {\n      lastRightPosition += width;\n      return {\n        left: lastRightPosition - width,\n        right: lastRightPosition,\n      };\n    });\n};\n\nexport const getTableTargetColumnIndex: GetTableTargetColumnIndexFn = (\n  columnGeometries, offset,\n) => {\n  const indexes = columnGeometries.reduce((acc, { left, right }, index) => {\n    if (offset >= left && offset < right) {\n      acc.push(index);\n    }\n    return acc;\n  }, [] as number[]);\n\n  if (columnGeometries.some(({ left, right }) => left <= 0 && right <= 0)) {\n    if (indexes.some(index => columnGeometries[index].isFixed ||\n      columnGeometries[index].left <= 0 && columnGeometries[index].right <= 0)) {\n      return -1;\n    }\n  }\n\n  if (indexes.length === 2) {\n    return indexes.find(index => columnGeometries[index].isFixed)!;\n  }\n  if (indexes.length === 1) {\n    return indexes[0];\n  }\n  return -1;\n};\n\nconst ANIMATION_DURATION = 200;\n\nconst getAnimationProgress = (animation: ColumnAnimation) => (\n  new Date().getTime() - animation.startTime) / ANIMATION_DURATION;\n\nexport const getAnimations: GetColumnAnimationsFn = (\n  prevColumns,\n  nextColumns,\n  tableWidth,\n  prevAnimations,\n) => {\n  const resizing = prevColumns.map(column => column.key).join()\n    === nextColumns.map(column => column.key).join();\n\n  const prevColumnGeometries = new Map<string, ColumnGeometry>(\n    getTableColumnGeometries(prevColumns, tableWidth)\n      .map((geometry, index) => [prevColumns[index].key, geometry] as [string, ColumnGeometry])\n      .map(([key, geometry]) => {\n        const animation = prevAnimations.get(key);\n        if (!animation) return [key, geometry];\n        const progress = easeOutCubic(getAnimationProgress(animation));\n        const { to, from } = animation.left!;\n        const left = ((to - from) * progress) + from;\n        return [key, {\n          left,\n          right: geometry.right - (geometry.left - left),\n        }];\n      // tslint:disable-next-line:array-type\n      }) as [string, ColumnGeometry][],\n    );\n\n  const nextColumnGeometries = new Map(\n    getTableColumnGeometries(nextColumns, tableWidth)\n      // tslint:disable-next-line:array-type\n      .map((geometry, index) => [nextColumns[index].key, geometry]) as [string, ColumnGeometry][],\n  );\n\n  return new Map([...nextColumnGeometries.keys()]\n    .map((key) => {\n      const prev: any = prevColumnGeometries.get(key);\n      const next: any = nextColumnGeometries.get(key);\n\n      const result: ColumnAnimation = { startTime: new Date().getTime(), style: {} };\n      const takePrevColumnIntoAccount = !!prevAnimations.get(key) || (prev && !resizing);\n      if (Math.abs((takePrevColumnIntoAccount ? prev!.left : next!.left) - next!.left) > 1) {\n        result.left = { from: prev.left, to: next.left };\n      }\n      return [key, result] as [string, ColumnAnimation];\n    })\n    .filter((animation: [string, ColumnAnimation]) => animation[1].left));\n};\n\nexport const filterActiveAnimations: FilterActiveAnimationsFn = animations => new Map(\n  [...animations.entries()]\n    .filter(([, animation]) => getAnimationProgress(animation) < 1),\n);\n\nexport const evalAnimations: EvalAnimationsFn = animations => new Map([...animations.entries()]\n  .map(([key, animation]): [string, object] => {\n    const progress = easeOutCubic(getAnimationProgress(animation));\n    const result = { ...animation.style };\n    if (animation.left) {\n      const offset = (animation.left.to - animation.left.from) * (progress - 1);\n      (result as any).transform = `translateX(${offset}px)`;\n    }\n    return [key, result];\n  }));\n","import { getTargetColumnGeometries } from './column-geometries';\nimport { TargetColumnGeometry, GetGroupCellTargetIndexFn } from '../types';\nimport { PureComputed } from '@devexpress/dx-core';\n\nconst isOnTheSameLine: PureComputed<[TargetColumnGeometry, number], boolean> = (geometry, y) => (\n  y >= geometry.top && y <= geometry.bottom\n);\n\nconst rectToObject = ({\n  top, right, bottom, left,\n}: TargetColumnGeometry) => ({\n  top, right, bottom, left,\n});\n\nconst collapseGapsBetweenItems: PureComputed<[TargetColumnGeometry[]]> = geometries => (\n  geometries.map((geometry, index) => {\n    if (index !== geometries.length - 1 && geometry.top === geometries[index + 1].top) {\n      return {\n        ...geometry,\n        right: geometries[index + 1].left,\n      };\n    }\n    return geometry;\n  }));\n\nexport const getGroupCellTargetIndex: GetGroupCellTargetIndexFn = (\n  geometries, sourceIndex, { x, y },\n) => {\n  if (geometries.length === 0) return 0;\n\n  const targetGeometries = sourceIndex !== -1\n    ? getTargetColumnGeometries(geometries, sourceIndex)\n    : geometries.map(rectToObject);\n\n  const targetIndex = collapseGapsBetweenItems(targetGeometries)\n    .findIndex((geometry, index) => {\n      const inVerticalBounds = isOnTheSameLine(geometry, y);\n      const inHorizontalBounds = x >= geometry.left && x <= geometry.right;\n      const shouldGoFirst = index === 0 && x < geometry.left;\n      const shouldGoOnLineBreak = !inVerticalBounds\n        && !!geometries[index - 1]\n        && isOnTheSameLine(geometries[index - 1], y);\n\n      return (inVerticalBounds && inHorizontalBounds)\n        || shouldGoFirst\n        || shouldGoOnLineBreak;\n    });\n\n  return targetIndex === -1 ? geometries.length : targetIndex;\n};\n","import { PureComputed } from '@devexpress/dx-core';\n\ntype CompareFn = (...args: [any, any]) => boolean;\n/** @internal */\nexport const arraysEqual: PureComputed<[any[], any[], CompareFn?], boolean> = (\n  arrA, arrB, comparator = (a, b) => a === b,\n) => {\n  if (arrA.length !== arrB.length) {\n    return false;\n  }\n  for (let i = 0; i < arrA.length; i += 1) {\n    if (!comparator(arrA[i], arrB[i])) {\n      return false;\n    }\n  }\n  return true;\n};\n","import { GridViewport } from '../../types';\n\n/** @internal */\nexport const emptyViewport: GridViewport = {\n  columns: [[0, 0]],\n  rows: [0, 0],\n  headerRows: [0, 0],\n  footerRows: [0, 0],\n  top: 0,\n  left: 0,\n  width: 800,\n  height: 600,\n};\n\nexport const TOP_POSITION = Symbol('top');\nexport const BOTTOM_POSITION = Symbol('bottom');\nexport const LEFT_POSITION = Symbol('left');\nexport const RIGHT_POSITION = Symbol('right');\n","import {\n  getRowsVisibleBoundary, getColumnBoundaries,\n} from '../../utils/virtual-table';\nimport {\n  GetViewportFn,\n  CheckTableColumnWidths,\n  TableColumn,\n  GetScrollHeightByIndex,\n  GetScrollPosition,\n  GetTopRowId,\n  GetScrollLeft,\n  IsColumnsWidthDifferent,\n} from '../../types';\nimport { arraysEqual } from './utils';\nimport { TOP_POSITION, BOTTOM_POSITION, LEFT_POSITION } from './constants';\n\nconst VALID_UNITS = ['px', ''];\n/* tslint:disable max-line-length */\nconst VIRTUAL_TABLE_ERROR = 'The columnExtension property of the VirtualTable plugin is given an invalid value.';\n\nexport const getViewport: GetViewportFn = (\n  state, getters, getRowHeight, getColumnWidth,\n) => {\n  const {\n    viewportTop, skipItems, viewportLeft, containerWidth, containerHeight,\n  } = state;\n  const {\n    loadedRowsStart,\n    bodyRows: tableBodyRows,\n    columns: tableColumns,\n    headerRows: tableHeaderRows = [],\n    footerRows: tableFooterRows = [],\n    isDataRemote,\n    viewport,\n  } = getters;\n\n  const rows = getRowsVisibleBoundary(\n    tableBodyRows, viewportTop, containerHeight,\n    getRowHeight, skipItems, loadedRowsStart, isDataRemote,\n  );\n  const headerRows = [0, tableHeaderRows.length ? tableHeaderRows.length - 1 : 0];\n  const footerRows = [0, tableFooterRows.length ? tableFooterRows.length - 1 : 0];\n  const columns = getColumnBoundaries(\n    tableColumns, viewportLeft, containerWidth, getColumnWidth,\n  );\n\n  // NOTE: prevent unnecessary updates\n  // e.g. when rows changed but bounds remain the same.\n  let result = viewport;\n  if (viewportTop !== viewport.top) {\n    result = { ...result, top: viewportTop };\n  }\n  if (viewportLeft !== viewport.left) {\n    result = { ...result, left: viewportLeft };\n  }\n  if (containerWidth !== viewport.width) {\n    result = { ...result, width: containerWidth };\n  }\n  if (containerHeight !== viewport.height) {\n    result = { ...result, height: containerHeight };\n  }\n  if (!arraysEqual(rows, viewport.rows)) {\n    result = { ...result, rows };\n  }\n  if (!arraysEqual(headerRows, viewport.headerRows)) {\n    result = { ...result, headerRows };\n  }\n  if (!arraysEqual(footerRows, viewport.footerRows)) {\n    result = { ...result, footerRows };\n  }\n  if (!arraysEqual(columns, viewport.columns, arraysEqual)) {\n    result = { ...result, columns };\n  }\n\n  return result;\n};\n\nexport const checkColumnWidths: CheckTableColumnWidths = (tableColumns) => {\n  return tableColumns.reduce((acc, tableColumn) => {\n    const { width } = tableColumn;\n    if (typeof width === 'string') {\n      const numb = parseInt(width, 10);\n      const unit = numb ? width.substr(numb.toString().length) : width;\n      const isValidUnit = VALID_UNITS.some(validUnit => validUnit === unit);\n      if (!isValidUnit) {\n        throw new Error(VIRTUAL_TABLE_ERROR);\n      }\n      acc.push({ ...tableColumn, width: numb });\n    } else {\n      acc.push(tableColumn);\n    }\n    return acc;\n  }, []  as TableColumn[]);\n};\n\nexport const calculateScrollHeight: GetScrollHeightByIndex = (rowHeight, index) =>\n  index > -1 ? rowHeight * index : undefined;\n\nexport const getScrollTop: GetScrollPosition = (rows, rowsCount, rowId, rowHeight, isDataRemote) => {\n  if (rowId === TOP_POSITION) {\n    return 0;\n  }\n  if (rowId === BOTTOM_POSITION) {\n    return rowsCount * rowHeight;\n  }\n\n  const searchIndexRequired = !isDataRemote && rowId !== undefined;\n  const indexById = searchIndexRequired\n    ? rows.findIndex(row => row.rowId === rowId)\n    : undefined;\n\n  return calculateScrollHeight(\n    rowHeight,\n    indexById!,\n  );\n};\n\nexport const getScrollLeft: GetScrollLeft = (columnCount, columnWidth, columnId) => {\n  if (!columnId) {\n    return;\n  }\n  if (columnId === LEFT_POSITION) {\n    return 0;\n  }\n  return columnCount * columnWidth;\n};\n\nexport const getTopRowId: GetTopRowId = (viewport, tableBodyRows, isDataRemote) => {\n  const hasViewportRows = viewport && viewport.rows;\n  const hasBodyRows = tableBodyRows && tableBodyRows.length;\n  if (hasViewportRows && hasBodyRows && !isDataRemote) {\n    const index = viewport.rows[0];\n\n    return index < tableBodyRows.length ? tableBodyRows[index].rowId : undefined;\n  }\n\n  return undefined;\n};\n\nexport const isColumnsWidthDifferent: IsColumnsWidthDifferent = (prevColumns, columns) => {\n  return prevColumns.some((column) => {\n    const currentColumn = columns.find(c => c.key === column.key);\n    return currentColumn ? currentColumn.width !== column.width : true;\n  });\n};\n","import { mergeRows } from './helpers';\nimport { intervalUtil } from './utils';\nimport { VirtualRowsWithCacheFn, PlainRowsFn, LoadedRowsStartFn } from '../../types';\n\nexport const virtualRowsWithCache: VirtualRowsWithCacheFn = (skip, rows, cache) => {\n  const rowsInterval = intervalUtil.getRowsInterval({ skip, rows });\n  const cacheInterval = intervalUtil.getRowsInterval(cache);\n\n  return mergeRows(rowsInterval, cacheInterval, rows, cache.rows, skip, cache.skip);\n};\n\nexport const plainRows: PlainRowsFn = (virtualRows, availableRowCount) => {\n  return virtualRows.rows.length > availableRowCount\n    ? virtualRows.rows.slice(0, availableRowCount)\n    : virtualRows.rows;\n};\n\nexport const loadedRowsStart: LoadedRowsStartFn = virtualRows => virtualRows.skip;\n","export const ROOT_GROUP = '__root__';\nexport const DEFAULT_COLUMN_WIDTH = 150;\n","// tslint:disable-next-line: no-submodule-imports\nimport * as Excel from 'exceljs';\nimport { PureComputed } from '@devexpress/dx-core';\nimport {\n  TableColumn, FindRangesFn, ExportRowsFn,\n  CloseSheetFn,\n  ExportSummaryItemsFn,\n  RemoveEmptyGroupsFn,\n} from '../../types';\nimport { ROOT_GROUP, DEFAULT_COLUMN_WIDTH } from './constants';\n\nexport const exportHeader = (worksheet: Excel.Worksheet, columns: TableColumn[]) => {\n  const cols = columns\n    .map(({ column, width }) => ({\n      width: (width as number || DEFAULT_COLUMN_WIDTH) / 8,\n      key: column?.name,\n    }));\n  worksheet.columns = cols;\n\n  const headerRow = columns.reduce((acc, { column: { name, title } = {} }) => ({\n    ...acc,\n    [name!]: title,\n  }), {});\n  worksheet.addRow(headerRow);\n\n  worksheet.views.push({\n    state: 'frozen', ySplit: worksheet.lastRow!.number,\n  });\n};\n\nexport const findRanges: FindRangesFn = (groupTree, compoundKey, level, maxLevel, result = []) => {\n  if (level !== maxLevel) {\n    const ranges = (groupTree[compoundKey] as string[]).reduce((acc, groupKey) => (\n      [...acc, ...findRanges(groupTree, groupKey, level + 1, maxLevel, result)]\n    ), [] as Array<number[]>);\n    return [...result, ...ranges];\n  }\n  return [...result, groupTree[compoundKey] as number[]];\n};\n\nexport const exportRows: ExportRowsFn = (\n  worksheet, allRows, dataColumns, columns, isGroupRow, outlineLevels,\n  rowsOffset, getCellValue, getCloseGroup, customizeCell,\n) => {\n  let currentLevel = 0;\n  let openGroups: any[] = [];\n  const closeGroup = getCloseGroup(rowsOffset);\n\n  allRows.forEach((row) => {\n    let excelRow;\n\n    if (isGroupRow && isGroupRow(row)) {\n      currentLevel = outlineLevels[row.groupedBy];\n\n      // close nested groups first\n      openGroups.slice(currentLevel).reverse().forEach(closeGroup);\n\n      openGroups = openGroups.slice(0, currentLevel);\n      openGroups[currentLevel] = { groupedBy: row.groupedBy, compoundKey: row.compoundKey };\n\n      // add group row\n      const title = dataColumns.find(({ name }) => name === row.groupedBy)?.title;\n      excelRow = { [columns[0].column!.name]: `${title}: ${row.value}` };\n\n      worksheet.addRow(excelRow);\n      const lastIndex = worksheet.lastRow!.number;\n\n      // merge into single cell\n      worksheet.mergeCells(lastIndex, 1, lastIndex, columns.length);\n      worksheet.lastRow!.getCell(1).font = { bold: true };\n\n      if (currentLevel > 0) {\n        worksheet.lastRow!.outlineLevel = currentLevel;\n      }\n      currentLevel += 1;\n    } else {\n      excelRow = columns.reduce((acc, { column }) => ({\n        ...acc,\n        ...(column ? { [column.name]: getCellValue(row, column.name) } : null),\n      }), {});\n      worksheet.addRow(excelRow);\n      worksheet.lastRow!.outlineLevel = currentLevel;\n    }\n\n    worksheet.lastRow!.eachCell((cell, colNumber) => {\n      customizeCell(cell, row, columns[colNumber - 1].column!);\n    });\n  });\n\n  openGroups.reverse().forEach(closeGroup);\n};\n\nexport const closeSheet: CloseSheetFn = (\n  worksheet, groupTree, maxGroupLevel, rowsOffset, totalSummaryItems, exportSummary,\n) => {\n  exportSummaryItems(\n    worksheet, groupTree, totalSummaryItems, ROOT_GROUP, -1,\n    rowsOffset, maxGroupLevel, exportSummary,\n  );\n};\n\nexport const normalizeRanges: PureComputed<[number[][], number]> = (ranges, offset) => (\n  ranges.map(range => range.map(index => + index + offset))\n);\n\nexport const exportSummaryItems: ExportSummaryItemsFn = (\n  worksheet, groupTree, summaryItems, groupKey, groupLevel,\n  rowsOffset, maxGroupLevel, exportSummary,\n) => {\n  if (!summaryItems) return;\n\n  worksheet.addRow({});\n\n  const ranges = normalizeRanges(\n    findRanges(groupTree, groupKey, groupLevel, maxGroupLevel),\n    rowsOffset,\n  );\n\n  summaryItems.forEach((s) => {\n    exportSummary(s, ranges);\n  });\n};\n\nexport const removeEmptyGroups: RemoveEmptyGroupsFn = (rows, grouping, isGroupRow) => {\n  if (!grouping) return rows;\n\n  const groupingColumns = grouping.map(({ columnName }) => columnName);\n  const result: any[] = [];\n  let groupChain: any[] = [];\n\n  rows.forEach((row) => {\n    if (isGroupRow(row)) {\n      const level = groupingColumns.indexOf(row.groupedBy);\n      if (level === groupChain.length) {\n        groupChain.push(row);\n      } else {\n        groupChain = [...groupChain.slice(0, level), row];\n      }\n    } else {\n      if (groupChain.length > 0) {\n        result.push(...groupChain);\n        groupChain = Array.from({ length: groupChain.length });\n      }\n      result.push(row);\n    }\n  });\n\n  return result.filter(row => !!row);\n};\n","import {\n  OutlineLevelsFn, FilterSelectedRowsFn, GetRowsToExportFn, Row, BuildGroupTreeFn,\n  GetExportSummaryFn, GetCloseGroupFn, Grouping, RowId,\n} from '../../types';\nimport { PureComputed } from '@devexpress/dx-core';\nimport { ROOT_GROUP } from './constants';\nimport { exportSummaryItems, removeEmptyGroups } from './helpers';\nimport { TABLE_DATA_TYPE } from '../table/constants';\n\nexport const groupOutlineLevels: OutlineLevelsFn = grouping => (\n  grouping?.reduce((acc, { columnName }, index) => ({\n    ...acc,\n    [columnName]: index,\n  }), {}) || {}\n);\n\nconst filterSelectedRows: FilterSelectedRowsFn = (rows, selection, getRowId, isGroupRow) => {\n  const selectionSet = new Set<RowId>(selection);\n  return rows.filter(row => (\n    isGroupRow && isGroupRow(row)) || selectionSet.has(getRowId(row)),\n  );\n};\n\nexport const rowsToExport: GetRowsToExportFn = (\n  rows, selection, grouping, getCollapsedRows, getRowId, isGroupRow,\n) => {\n  const expandRows: PureComputed<[Row[]]> = collapsedRows => (\n    collapsedRows.reduce((acc, row) => (\n      [...acc, row, ...(expandRows(getCollapsedRows!(row) || []))]\n    ), [])\n  );\n\n  const expandedRows = getCollapsedRows ? expandRows(rows) : rows;\n\n  if (!selection) {\n    return expandedRows;\n  }\n\n  const filteredRows = filterSelectedRows(expandedRows, selection, getRowId, isGroupRow);\n  return removeEmptyGroups(filteredRows, grouping, isGroupRow);\n};\n\nexport const buildGroupTree: BuildGroupTreeFn = (\n  rows, outlineLevels, grouping, isGroupRow, groupSummaryItems,\n) => {\n  const groupTree = { [ROOT_GROUP]: [] as any[] };\n\n  if (!grouping?.length) {\n    groupTree[ROOT_GROUP] = [0, rows.length - 1];\n    return groupTree;\n  }\n\n  const maxLevel = Object.keys(outlineLevels).length - 1;\n  const groupSummaryExists = !!groupSummaryItems;\n  const parentChain = { '-1': ROOT_GROUP };\n  let lastDataIndex = 0;\n  let openGroup = '';\n  let index = 0;\n  let level = 0;\n  let prevLevel = 0;\n\n  rows.forEach((row) => {\n    const { groupedBy, compoundKey } = row;\n    if (isGroupRow(row)) {\n      level = outlineLevels[groupedBy];\n      groupTree[compoundKey] = [];\n      parentChain[level] = compoundKey;\n      if (level <= maxLevel) {\n        groupTree[parentChain[level - 1]].push(compoundKey);\n      }\n      if (level === maxLevel) {\n        if (openGroup) {\n          // close previous group\n          groupTree[openGroup].push(lastDataIndex);\n        }\n        openGroup = compoundKey;\n        if (groupSummaryExists && lastDataIndex > 0) {\n          index += 1;\n        }\n        groupTree[compoundKey].push(index + 1); // first row index\n      } else if (groupSummaryExists && level < prevLevel) {\n        // jump over summary rows\n        index += maxLevel - level;\n      }\n      prevLevel = level;\n    } else {\n      lastDataIndex = index;\n    }\n    index += 1;\n  });\n\n  if (openGroup) {\n    groupTree[openGroup].push(lastDataIndex);\n  }\n\n  return groupTree;\n};\n\nconst operations = {\n  count: 'COUNTA',\n};\nexport const exportSummaryGetter: GetExportSummaryFn = (\n  worksheet, tableColumns, customizeSummaryCell, defaultSummaryMessages,\n) => (\n  { columnName, type }, ranges,\n) => {\n  const { column } = tableColumns.find(({ column: dataColumn, type: columnType }) => (\n    columnType === TABLE_DATA_TYPE && dataColumn && dataColumn.name === columnName\n  )) || {};\n  // NOTE: column is hidden or the grid grouped by this column\n  if (!column) {\n    return;\n  }\n\n  const row = worksheet.lastRow!;\n  const letter = worksheet.getColumn(columnName).letter;\n  const operation = operations[type] || type.toUpperCase();\n  const rangesStr = ranges.map(range => (\n    range\n      .map(r => `${letter}${r}`)\n      .filter((val, index, arr) => arr.indexOf(val) === index)\n      .join(':')\n  )).join(',');\n\n  const cell = row.getCell(columnName);\n  cell.value = {\n    formula: `${operation}(${rangesStr})`,\n    date1904: false,\n  };\n  cell.numFmt = `\"${defaultSummaryMessages[type]}:\" 0`;\n\n  const summary = {\n    type,\n    ranges,\n  };\n  customizeSummaryCell(cell, column!, summary);\n};\n\nexport const closeGroupGetter: GetCloseGroupFn = (\n  worksheet, groupTree, outlineLevels, maxGroupLevel, groupSummaryItems, exportSummary,\n) => rowsOffset => (group) => {\n  const { groupedBy, compoundKey } = group;\n\n  exportSummaryItems(\n    worksheet, groupTree, groupSummaryItems, compoundKey, outlineLevels[groupedBy],\n    rowsOffset, maxGroupLevel, exportSummary,\n  );\n};\n\nexport const maximumGroupLevel: PureComputed<[Grouping[]], number> = grouping => (\n  (grouping || []).length - 1\n);\n"],"names":["slice","VALID_UNITS","easeOutCubic"],"mappings":"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"}