@revolist/revogrid 4.5.0-next.1 → 4.5.0-next.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/custom-element/columnService.js +6 -2
  2. package/custom-element/columnService.js.map +1 -1
  3. package/dist/cjs/{events-49057f23.js → events-344baa2e.js} +2 -2
  4. package/dist/cjs/{events-49057f23.js.map → events-344baa2e.js.map} +1 -1
  5. package/dist/cjs/{filter.button-eec12821.js → filter.button-71d993fa.js} +2 -2
  6. package/dist/cjs/{filter.button-eec12821.js.map → filter.button-71d993fa.js.map} +1 -1
  7. package/dist/cjs/{index-449963b8.js → index-1474e4b4.js} +2 -2
  8. package/dist/cjs/{index-449963b8.js.map → index-1474e4b4.js.map} +1 -1
  9. package/dist/cjs/{index-7945f248.js → index-c8f9c4ef.js} +1 -4
  10. package/dist/cjs/index-c8f9c4ef.js.map +1 -0
  11. package/dist/cjs/{isString-fd150e1d.js → isString-eb25afcf.js} +2 -2
  12. package/dist/cjs/{isString-fd150e1d.js.map → isString-eb25afcf.js.map} +1 -1
  13. package/dist/cjs/{keyCodes.utils-833d34f9.js → keyCodes.utils-9dde598e.js} +3 -3
  14. package/dist/cjs/{keyCodes.utils-833d34f9.js.map → keyCodes.utils-9dde598e.js.map} +1 -1
  15. package/dist/cjs/loader.cjs.js +1 -1
  16. package/dist/cjs/{localScrollService-854a7b46.js → localScrollService-18aa9fc8.js} +9 -5
  17. package/dist/cjs/localScrollService-18aa9fc8.js.map +1 -0
  18. package/dist/cjs/revo-grid.cjs.entry.js +6 -6
  19. package/dist/cjs/revo-grid.cjs.js +1 -1
  20. package/dist/cjs/revogr-cell_4.cjs.entry.js +6 -6
  21. package/dist/cjs/revogr-cell_4.cjs.entry.js.map +1 -1
  22. package/dist/cjs/revogr-clipboard.cjs.entry.js +1 -1
  23. package/dist/cjs/revogr-edit_2.cjs.entry.js +4 -4
  24. package/dist/cjs/revogr-filter-panel.cjs.entry.js +2 -2
  25. package/dist/cjs/revogr-focus_5.cjs.entry.js +7 -7
  26. package/dist/cjs/{viewport.helpers-104f309a.js → viewport.helpers-90647546.js} +2 -2
  27. package/dist/cjs/{viewport.helpers-104f309a.js.map → viewport.helpers-90647546.js.map} +1 -1
  28. package/dist/collection/components/data/columnService.d.ts +3 -3
  29. package/dist/collection/components/data/columnService.js +6 -2
  30. package/dist/collection/components/data/columnService.js.map +1 -1
  31. package/dist/collection/interfaces.d.ts +3 -0
  32. package/dist/esm/{events-e25777d6.js → events-15fe3ad2.js} +2 -2
  33. package/dist/esm/{events-e25777d6.js.map → events-15fe3ad2.js.map} +1 -1
  34. package/dist/esm/{filter.button-bef0bd48.js → filter.button-0a17990a.js} +2 -2
  35. package/dist/esm/{filter.button-bef0bd48.js.map → filter.button-0a17990a.js.map} +1 -1
  36. package/dist/esm/{index-f46cd72a.js → index-2f956d3e.js} +2 -4
  37. package/dist/esm/index-2f956d3e.js.map +1 -0
  38. package/dist/esm/{index-08fe5be1.js → index-a12d35dc.js} +2 -2
  39. package/dist/esm/{index-08fe5be1.js.map → index-a12d35dc.js.map} +1 -1
  40. package/dist/esm/{isString-092257ea.js → isString-e9769c89.js} +2 -2
  41. package/dist/esm/{isString-092257ea.js.map → isString-e9769c89.js.map} +1 -1
  42. package/dist/esm/{keyCodes.utils-15a2ecc8.js → keyCodes.utils-540497f2.js} +3 -3
  43. package/dist/esm/{keyCodes.utils-15a2ecc8.js.map → keyCodes.utils-540497f2.js.map} +1 -1
  44. package/dist/esm/loader.js +2 -2
  45. package/dist/esm/{localScrollService-4b7bd4fd.js → localScrollService-9514f7d1.js} +9 -5
  46. package/dist/esm/localScrollService-9514f7d1.js.map +1 -0
  47. package/dist/esm/revo-grid.entry.js +6 -6
  48. package/dist/esm/revo-grid.js +2 -2
  49. package/dist/esm/revogr-cell_4.entry.js +6 -6
  50. package/dist/esm/revogr-cell_4.entry.js.map +1 -1
  51. package/dist/esm/revogr-clipboard.entry.js +1 -1
  52. package/dist/esm/revogr-edit_2.entry.js +4 -4
  53. package/dist/esm/revogr-filter-panel.entry.js +2 -2
  54. package/dist/esm/revogr-focus_5.entry.js +7 -7
  55. package/dist/esm/{viewport.helpers-056f2d28.js → viewport.helpers-ee3fb810.js} +2 -2
  56. package/dist/esm/{viewport.helpers-056f2d28.js.map → viewport.helpers-ee3fb810.js.map} +1 -1
  57. package/dist/revo-grid/{events-e25777d6.js → events-15fe3ad2.js} +2 -2
  58. package/dist/revo-grid/{filter.button-bef0bd48.js → filter.button-0a17990a.js} +2 -2
  59. package/dist/revo-grid/{index-f46cd72a.js → index-2f956d3e.js} +3 -3
  60. package/dist/revo-grid/index-2f956d3e.js.map +1 -0
  61. package/dist/revo-grid/{index-08fe5be1.js → index-a12d35dc.js} +2 -2
  62. package/dist/revo-grid/isString-e9769c89.js +5 -0
  63. package/dist/revo-grid/keyCodes.utils-540497f2.js +5 -0
  64. package/dist/revo-grid/{keyCodes.utils-15a2ecc8.js.map → keyCodes.utils-540497f2.js.map} +1 -1
  65. package/dist/revo-grid/localScrollService-9514f7d1.js +5 -0
  66. package/dist/revo-grid/localScrollService-9514f7d1.js.map +1 -0
  67. package/dist/revo-grid/revo-grid.entry.js +1 -1
  68. package/dist/revo-grid/revo-grid.esm.js +1 -1
  69. package/dist/revo-grid/revogr-cell_4.entry.js +1 -1
  70. package/dist/revo-grid/revogr-cell_4.entry.js.map +1 -1
  71. package/dist/revo-grid/revogr-clipboard.entry.js +1 -1
  72. package/dist/revo-grid/revogr-edit_2.entry.js +1 -1
  73. package/dist/revo-grid/revogr-filter-panel.entry.js +1 -1
  74. package/dist/revo-grid/revogr-focus_5.entry.js +1 -1
  75. package/dist/revo-grid/{viewport.helpers-056f2d28.js → viewport.helpers-ee3fb810.js} +2 -2
  76. package/dist/types/components/data/columnService.d.ts +3 -3
  77. package/dist/types/interfaces.d.ts +3 -0
  78. package/package.json +1 -1
  79. package/dist/cjs/index-7945f248.js.map +0 -1
  80. package/dist/cjs/localScrollService-854a7b46.js.map +0 -1
  81. package/dist/esm/index-f46cd72a.js.map +0 -1
  82. package/dist/esm/localScrollService-4b7bd4fd.js.map +0 -1
  83. package/dist/revo-grid/index-f46cd72a.js.map +0 -1
  84. package/dist/revo-grid/isString-092257ea.js +0 -5
  85. package/dist/revo-grid/keyCodes.utils-15a2ecc8.js +0 -5
  86. package/dist/revo-grid/localScrollService-4b7bd4fd.js +0 -5
  87. package/dist/revo-grid/localScrollService-4b7bd4fd.js.map +0 -1
  88. /package/dist/revo-grid/{events-e25777d6.js.map → events-15fe3ad2.js.map} +0 -0
  89. /package/dist/revo-grid/{filter.button-bef0bd48.js.map → filter.button-0a17990a.js.map} +0 -0
  90. /package/dist/revo-grid/{index-08fe5be1.js.map → index-a12d35dc.js.map} +0 -0
  91. /package/dist/revo-grid/{isString-092257ea.js.map → isString-e9769c89.js.map} +0 -0
  92. /package/dist/revo-grid/{viewport.helpers-056f2d28.js.map → viewport.helpers-ee3fb810.js.map} +0 -0
@@ -618,16 +618,20 @@ class ColumnService {
618
618
  }
619
619
  return editor;
620
620
  }
621
- rowDataModel(rowIndex, c) {
622
- const column = this.columns[c];
621
+ rowDataModel(rowIndex, colIndex) {
622
+ const column = this.columns[colIndex];
623
623
  const prop = column === null || column === void 0 ? void 0 : column.prop;
624
624
  const model = getSourceItem(this.dataStore, rowIndex) || {};
625
+ const type = this.dataStore.get('type');
625
626
  return {
626
627
  prop,
627
628
  model,
628
629
  data: this.dataStore.get('source'),
629
630
  column,
630
631
  rowIndex,
632
+ colIndex,
633
+ colType: this.type,
634
+ type,
631
635
  };
632
636
  }
633
637
  getRangeData(d, columns) {
@@ -1 +1 @@
1
- {"file":"columnService.js","mappings":"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","names":["slice"],"sources":["./src/plugins/groupingRow/grouping.const.ts","./src/plugins/groupingRow/grouping.service.ts","./src/store/selection/selection.helpers.ts","./src/store/selection/selection.store.ts","./src/services/selection.store.connector.ts","./src/components/data/columnService.ts"],"sourcesContent":["import { GRID_INTERNALS } from '../../utils/consts';\n\nexport const GROUP_DEPTH = `${GRID_INTERNALS}-depth`;\nexport const PSEUDO_GROUP_ITEM = `${GRID_INTERNALS}-name`;\nexport const PSEUDO_GROUP_ITEM_ID = `${GRID_INTERNALS}-id`;\nexport const PSEUDO_GROUP_ITEM_VALUE = `${GRID_INTERNALS}-value`;\nexport const PSEUDO_GROUP_COLUMN = `${GRID_INTERNALS}-column`;\nexport const GROUP_EXPANDED = `${GRID_INTERNALS}-expanded`;\nexport const GROUP_ORIGINAL_INDEX = `${GRID_INTERNALS}-original-index`;\nexport const GROUP_EXPAND_BTN = `group-expand`;\nexport const GROUP_EXPAND_EVENT = `groupExpandClick`;\nexport const GROUPING_ROW_TYPE = 'rgRow';\n","import { RevoGrid } from '../../interfaces';\nimport {\n GROUP_DEPTH,\n GROUP_EXPANDED,\n PSEUDO_GROUP_COLUMN,\n PSEUDO_GROUP_ITEM,\n PSEUDO_GROUP_ITEM_ID,\n PSEUDO_GROUP_ITEM_VALUE,\n GROUP_ORIGINAL_INDEX,\n } from './grouping.const';\nimport { GroupLabelTemplateFunc } from './grouping.row.types';\n\nexport type ExpandedOptions = {\n prevExpanded?: Record<string, boolean>;\n expandedAll?: boolean; // skip trim\n groupLabelTemplate?: GroupLabelTemplateFunc;\n};\n\ntype GroupedData = Map<string, GroupedData | RevoGrid.DataType[]>\n\n\n/**\n * Gather data for grouping\n * @param array - flat data array\n * @param groupIds - ids of groups\n * @param expanded - potentially expanded items if present\n */\nexport function gatherGrouping(array: RevoGrid.DataType[], groupIds: RevoGrid.ColumnProp[], { prevExpanded, expandedAll }: ExpandedOptions) {\n const groupedItems: GroupedData = new Map();\n array.forEach((item, originalIndex) => {\n const groupLevelValues = groupIds.map((groupId) => item[groupId] || null);\n const lastLevelValue = groupLevelValues.pop();\n let currentGroupLevel = groupedItems;\n groupLevelValues.forEach((value) => {\n if (!currentGroupLevel.has(value)) {\n currentGroupLevel.set(value, new Map());\n }\n currentGroupLevel = currentGroupLevel.get(value) as GroupedData;\n })\n if (!currentGroupLevel.has(lastLevelValue)) {\n currentGroupLevel.set(lastLevelValue, []);\n }\n item[GROUP_ORIGINAL_INDEX] = originalIndex;\n const lastLevelItems = currentGroupLevel.get(lastLevelValue) as RevoGrid.DataType[];\n lastLevelItems.push(item);\n });\n\n let itemIndex = -1;\n const groupingDepth = groupIds.length;\n // collapse all groups in the beginning\n const trimmed: Record<number, boolean> = {};\n // index mapping\n const oldNewIndexMap: Record<number, number> = {};\n // check if group header exists\n const pseudoGroupTest: Record<string, number[]> = {};\n const sourceWithGroups: RevoGrid.DataType[] = [];\n function flattenGroupMaps(groupedValues: GroupedData, parentIds: string[], isExpanded: boolean) {\n const depth = parentIds.length;\n groupedValues.forEach((innerGroupedValues, groupId) => {\n const levelIds = [...parentIds, groupId];\n const mergedIds = levelIds.join(',');\n const isGroupExpanded = isExpanded && (!!expandedAll || !!prevExpanded?.[mergedIds]);\n sourceWithGroups.push({\n [PSEUDO_GROUP_ITEM]: groupId,\n [GROUP_DEPTH]: depth,\n [PSEUDO_GROUP_ITEM_ID]: JSON.stringify(levelIds),\n [PSEUDO_GROUP_ITEM_VALUE]: mergedIds,\n [GROUP_EXPANDED]: isGroupExpanded,\n });\n itemIndex += 1;\n if (!isGroupExpanded && depth) {\n trimmed[itemIndex] = true;\n }\n if (Array.isArray(innerGroupedValues)) {\n innerGroupedValues.forEach((value) => {\n itemIndex += 1;\n if (!isGroupExpanded) {\n trimmed[itemIndex] = true;\n }\n oldNewIndexMap[value[GROUP_ORIGINAL_INDEX]] = itemIndex;\n const pseudoGroupTestIds = levelIds.map((_value, index) => levelIds.slice(0, index + 1).join(','));\n pseudoGroupTestIds.forEach((pseudoGroupTestId) => {\n if (!pseudoGroupTest[pseudoGroupTestId]) {\n pseudoGroupTest[pseudoGroupTestId] = [];\n }\n pseudoGroupTest[pseudoGroupTestId].push(itemIndex);\n });\n });\n sourceWithGroups.push(...innerGroupedValues);\n } else {\n flattenGroupMaps(innerGroupedValues, levelIds, isGroupExpanded);\n }\n });\n }\n flattenGroupMaps(groupedItems, [], true);\n\n return {\n sourceWithGroups, // updates source mirror\n depth: groupingDepth, // largest depth for grouping\n trimmed, // used for expand/collapse grouping values\n oldNewIndexMap, // used for mapping old values to new\n childrenByGroup: pseudoGroupTest, // used to get child items in group\n };\n}\n\nexport function getGroupingName(rgRow?: RevoGrid.DataType) {\n return rgRow && rgRow[PSEUDO_GROUP_ITEM];\n}\n\nexport function isGrouping(rgRow?: RevoGrid.DataType) {\n return rgRow && typeof rgRow[PSEUDO_GROUP_ITEM] !== 'undefined';\n}\n\nexport function isGroupingColumn(column?: RevoGrid.ColumnRegular) {\n return column && typeof column[PSEUDO_GROUP_COLUMN] !== 'undefined';\n}\n\nexport function measureEqualDepth<T>(groupA: T[], groupB: T[]) {\n const ln = groupA.length;\n let i = 0;\n for (; i < ln; i++) {\n if (groupA[i] !== groupB[i]) {\n return i;\n }\n }\n return i;\n}\n\nexport function getParsedGroup(id: string): any[] {\n const parseGroup = JSON.parse(id);\n // extra precaution and type safe guard\n if (!Array.isArray(parseGroup)) {\n return null;\n }\n return parseGroup;\n}\n\n// check if items is child of current clicked group\nexport function isSameGroup(currentGroup: any[], currentModel: RevoGrid.DataType, nextModel: RevoGrid.DataType) {\n const nextGroup = getParsedGroup(nextModel[PSEUDO_GROUP_ITEM_ID]);\n if (!nextGroup) {\n return false;\n }\n\n const depth = measureEqualDepth(currentGroup, nextGroup);\n return currentModel[GROUP_DEPTH] < depth;\n}\n","import { Selection } from '../../interfaces';\nimport { EMPTY_INDEX } from '../../services/selection.store.connector';\nimport Cell = Selection.Cell;\nimport RangeArea = Selection.RangeArea;\n\nexport function isHiddenStore(pos: number) {\n return pos === EMPTY_INDEX;\n}\n\nexport function nextCell(cell: Cell, lastCell: Cell): Partial<Cell> | null {\n const nextItem: Partial<Cell> = {};\n let types: (keyof Cell)[] = ['x', 'y'];\n\n // previous item check\n for (let t of types) {\n if (cell[t] < 0) {\n nextItem[t] = cell[t];\n return nextItem;\n }\n }\n // next item check\n for (let t of types) {\n if (cell[t] >= lastCell[t]) {\n nextItem[t] = cell[t] - lastCell[t];\n return nextItem;\n }\n }\n return null;\n}\n\nexport function cropCellToMax(cell: Cell, lastCell: Cell): Cell {\n const newCell: Cell = { ...cell };\n let types: (keyof Cell)[] = ['x', 'y'];\n // previous item check\n for (let t of types) {\n if (cell[t] < 0) {\n newCell[t] = 0;\n }\n }\n // next item check\n for (let t of types) {\n if (cell[t] >= lastCell[t]) {\n newCell[t] = lastCell[t] - 1;\n }\n }\n return newCell;\n}\n\nexport function getRange(start?: Cell, end?: Cell): RangeArea | null {\n return start && end\n ? {\n x: Math.min(start.x, end.x),\n y: Math.min(start.y, end.y),\n x1: Math.max(start.x, end.x),\n y1: Math.max(start.y, end.y),\n }\n : null;\n}\n\nexport function isRangeSingleCell(a: RangeArea): boolean {\n return a.x === a.x1 && a.y === a.y1;\n}\n","import { createStore } from '@stencil/store';\nimport { Observable, Selection } from '../../interfaces';\nimport { setStore } from '../../utils/store.utils';\nimport { getRange } from './selection.helpers';\n\ntype StoreState = Selection.SelectionStoreState;\n\nfunction defaultState(): StoreState {\n return {\n range: null,\n tempRange: null,\n tempRangeType: null,\n focus: null,\n edit: null,\n lastCell: null,\n };\n}\n\nexport class SelectionStore {\n readonly store: Observable<Selection.SelectionStoreState>;\n private unsubscribe: { (): void }[] = [];\n constructor() {\n this.store = createStore(defaultState());\n this.store.on('set', (key, newVal) => {\n if (key === 'tempRange' && !newVal) {\n this.store.set('tempRangeType', null);\n }\n });\n }\n\n onChange<Key extends keyof StoreState>(propName: Key, cb: (newValue: StoreState[Key]) => void) {\n this.unsubscribe.push(this.store.onChange(propName, cb));\n }\n\n clearFocus() {\n setStore(this.store, { focus: null, range: null, edit: null, tempRange: null });\n }\n\n setFocus(focus: Selection.Cell, end?: Selection.Cell) {\n if (!end) {\n setStore(this.store, { focus });\n } else {\n setStore(this.store, {\n focus,\n range: getRange(focus, end),\n edit: null,\n tempRange: null,\n });\n }\n }\n\n setTempArea(range: Selection.TempRange | null) {\n setStore(this.store, { tempRange: range?.area, tempRangeType: range?.type, edit: null });\n }\n\n clearTemp() {\n setStore(this.store, { tempRange: null });\n }\n\n /** Can be applied from selection change or from simple keyboard change clicks */\n setRangeArea(range: Selection.RangeArea) {\n setStore(this.store, { range, edit: null, tempRange: null });\n }\n setRange(start: Selection.Cell, end: Selection.Cell) {\n this.setRangeArea(getRange(start, end));\n }\n\n setLastCell(lastCell: Selection.Cell) {\n setStore(this.store, { lastCell });\n }\n\n setEdit(val: string | boolean) {\n const focus = this.store.get('focus');\n if (focus && typeof val === 'string') {\n setStore(this.store, {\n edit: { x: focus.x, y: focus.y, val },\n });\n return;\n }\n setStore(this.store, { edit: null });\n }\n\n dispose() {\n this.unsubscribe.forEach(f => f());\n this.store.dispose();\n }\n}\n","import { Edition, Selection, RevoGrid } from '../interfaces';\nimport { cropCellToMax, isHiddenStore, nextCell } from '../store/selection/selection.helpers';\nimport { SelectionStore } from '../store/selection/selection.store';\n\nimport Cell = Selection.Cell;\nimport EditCellStore = Edition.EditCellStore;\n\ntype StoreByDimension = Record<number, SelectionStore>;\ntype FocusedStore = {\n entity: SelectionStore;\n cell: Selection.Cell;\n position: Selection.Cell;\n};\n\ntype StoresMapping<T> = { [xOrY: number]: Partial<T> };\n\nexport const EMPTY_INDEX = -1;\n\nexport default class SelectionStoreConnector {\n // dirty flag required to cleanup whole store in case visibility of panels changed\n private dirty = false;\n readonly stores: { [y: number]: { [x: number]: SelectionStore } } = {};\n\n readonly columnStores: StoreByDimension = {};\n readonly rowStores: { [y: number]: SelectionStore } = {};\n\n /**\n * Helpers for data conversion\n */\n readonly storesByType: Partial<Record<RevoGrid.MultiDimensionType, number>> = {};\n readonly storesXToType: StoresMapping<RevoGrid.DimensionCols> = {};\n readonly storesYToType: StoresMapping<RevoGrid.DimensionRows> = {};\n\n get focusedStore(): FocusedStore | null {\n for (let y in this.stores) {\n for (let x in this.stores[y]) {\n const focused = this.stores[y][x]?.store.get('focus');\n if (focused) {\n return {\n entity: this.stores[y][x],\n cell: focused,\n position: {\n x: parseInt(x, 10),\n y: parseInt(y, 10),\n },\n };\n }\n }\n }\n return null;\n }\n\n get edit(): EditCellStore | undefined {\n return this.focusedStore?.entity.store.get('edit');\n }\n\n get focused(): Cell | undefined {\n return this.focusedStore?.entity.store.get('focus');\n }\n\n get selectedRange(): Selection.RangeArea | undefined {\n return this.focusedStore?.entity.store.get('range');\n }\n\n private readonly sections: Element[] = [];\n\n registerSection(e?: Element) {\n if (!e) {\n this.sections.length = 0;\n // some elements removed, rebuild stores\n this.dirty = true;\n return;\n }\n if (this.sections.indexOf(e) === -1) {\n this.sections.push(e);\n }\n }\n\n // check if require to cleanup all stores\n beforeUpdate() {\n if (this.dirty) {\n for (let y in this.stores) {\n for (let x in this.stores[y]) {\n this.stores[y][x].dispose();\n }\n }\n this.dirty = false;\n }\n }\n\n registerColumn(x: number, type: RevoGrid.DimensionCols): SelectionStore {\n\n // if hidden just create store but no operations needed\n if (isHiddenStore(x)) {\n return new SelectionStore();\n }\n if (this.columnStores[x]) {\n return this.columnStores[x];\n }\n this.columnStores[x] = new SelectionStore();\n // build cross linking type to position\n this.storesByType[type] = x;\n this.storesXToType[x] = type;\n return this.columnStores[x];\n }\n\n registerRow(y: number, type: RevoGrid.DimensionRows): SelectionStore {\n // if hidden just create store\n if (isHiddenStore(y)) {\n return new SelectionStore();\n }\n if (this.rowStores[y]) {\n return this.rowStores[y];\n }\n this.rowStores[y] = new SelectionStore();\n // build cross linking type to position\n this.storesByType[type] = y;\n this.storesYToType[y] = type;\n return this.rowStores[y];\n }\n\n /**\n * Cross store proxy, based on multiple dimensions\n */\n register({ x, y }: Selection.Cell): SelectionStore {\n // if hidden just create store\n if (isHiddenStore(x) || isHiddenStore(y)) {\n return new SelectionStore();\n }\n if (!this.stores[y]) {\n this.stores[y] = {};\n }\n if (this.stores[y][x]) {\n // Store already registered. Do not register twice\n return this.stores[y][x];\n }\n this.stores[y][x] = new SelectionStore();\n // proxy update, column store trigger only range area\n this.stores[y][x]?.onChange('range', c => {\n this.columnStores[x].setRangeArea(c);\n this.rowStores[y].setRangeArea(c);\n });\n // clean up on remove\n this.stores[y][x]?.store.on('dispose', () => this.destroy(x, y));\n return this.stores[y][x];\n }\n\n private destroy(x: number, y: number) {\n this.columnStores[x]?.dispose();\n this.rowStores[y]?.dispose();\n\n delete this.rowStores[y];\n delete this.columnStores[x];\n // clear x cross link\n if (this.storesXToType[x]) {\n const type = this.storesXToType[x];\n delete this.storesXToType[x];\n delete this.storesByType[type];\n }\n // clear y cross link\n if (this.storesYToType[y]) {\n const type = this.storesYToType[y];\n delete this.storesYToType[y];\n delete this.storesByType[type];\n }\n if (this.stores[y]) {\n delete this.stores[y][x];\n }\n // clear empty rows\n if (!Object.keys(this.stores[y] || {}).length) {\n delete this.stores[y];\n }\n }\n\n setEditByCell<T extends Selection.Cell>(storePos: T, editCell: T) {\n this.focusByCell(storePos, editCell, editCell);\n this.setEdit('');\n }\n\n focusByCell<T extends Selection.Cell>(storePos: T, start: T, end: T) {\n const store = this.stores[storePos.y][storePos.x];\n this.focus(store, { focus: start, end });\n }\n\n focus(store: SelectionStore, { focus, end }: { focus: Cell; end: Cell }) {\n let currentStorePointer: Selection.Cell;\n // clear all stores focus leave only active one\n for (let y in this.stores) {\n for (let x in this.stores[y]) {\n const s = this.stores[y][x];\n // clear other stores, only one area can be selected\n if (s !== store) {\n s.clearFocus();\n } else {\n currentStorePointer = { x: parseInt(x, 10), y: parseInt(y, 10) };\n }\n }\n }\n if (!currentStorePointer) {\n return null;\n }\n\n // check is focus in next store\n const lastCell = store.store.get('lastCell');\n // item in new store\n const nextItem: Partial<Cell> | null = nextCell(focus, lastCell);\n\n let nextStore;\n if (nextItem) {\n for (let i in nextItem) {\n let type: keyof Cell = i as keyof Cell;\n let stores;\n switch (type) {\n case 'x':\n stores = this.getXStores(currentStorePointer.y);\n break;\n case 'y':\n stores = this.getYStores(currentStorePointer.x);\n break;\n }\n if (nextItem[type] >= 0) {\n nextStore = stores[++currentStorePointer[type]];\n } else {\n nextStore = stores[--currentStorePointer[type]];\n const nextLastCell = nextStore?.store.get('lastCell');\n if (nextLastCell) {\n nextItem[type] = nextLastCell[type] + nextItem[type];\n }\n }\n }\n }\n // if next store present - update\n if (nextStore) {\n let item = { ...focus, ...nextItem };\n this.focus(nextStore, { focus: item, end: item });\n return null;\n }\n\n focus = cropCellToMax(focus, lastCell);\n end = cropCellToMax(end, lastCell);\n\n store.setFocus(focus, end);\n return focus;\n }\n\n clearAll(): void {\n for (let y in this.stores) {\n for (let x in this.stores[y]) {\n this.stores[y][x]?.clearFocus();\n }\n }\n }\n\n setEdit(val: string | boolean) {\n if (!this.focusedStore) {\n return;\n }\n this.focusedStore.entity.setEdit(val);\n }\n\n /**\n * Select all cells across all stores\n */\n selectAll() {\n for (let y in this.stores) {\n for (let x in this.stores[y]) {\n const store = this.stores[y][x];\n if (!store) {\n continue;\n }\n const lastCell = store.store.get('lastCell');\n store.setRange({ x: 0, y: 0 }, { x: lastCell.x - 1, y: lastCell.y - 1 });\n }\n }\n }\n\n private getXStores(y: number) {\n return this.stores[y];\n }\n\n private getYStores(x: number) {\n const stores: { [p: number]: SelectionStore } = {};\n for (let i in this.stores) {\n stores[i] = this.stores[i][x];\n }\n return stores;\n }\n}\n","import { DataSourceState, getSourceItem, getVisibleSourceItem, setSourceByVirtualIndex } from '../../store/dataSource/data.store';\nimport { CELL_CLASS, DISABLED_CLASS } from '../../utils/consts';\nimport { Edition, Observable, RevoGrid, Selection } from '../../interfaces';\nimport { getRange } from '../../store/selection/selection.helpers';\n\nimport { isGroupingColumn } from '../../plugins/groupingRow/grouping.service';\nimport { slice } from 'lodash';\n\nexport type ColumnSource = Observable<DataSourceState<RevoGrid.ColumnRegular, RevoGrid.DimensionCols>>;\nexport type RowSource = Observable<DataSourceState<RevoGrid.DataType, RevoGrid.DimensionRows>>;\n\nexport type ColumnStores = {\n [T in RevoGrid.DimensionCols]: ColumnSource;\n};\nexport type RowStores = {\n [T in RevoGrid.DimensionRows]: RowSource;\n};\n\nexport default class ColumnService {\n private unsubscribe: { (): void }[] = [];\n get columns(): RevoGrid.ColumnRegular[] {\n return getVisibleSourceItem(this.source);\n }\n\n hasGrouping = false;\n type: RevoGrid.DimensionCols;\n\n constructor(private dataStore: RowSource, private source: ColumnSource) {\n this.unsubscribe.push(source.onChange('source', s => this.checkGrouping(s)));\n this.checkGrouping(source.get('source'));\n this.type = source.get('type');\n }\n\n private checkGrouping(cols: RevoGrid.ColumnRegular[]) {\n for (let rgCol of cols) {\n if (isGroupingColumn(rgCol)) {\n this.hasGrouping = true;\n return;\n }\n this.hasGrouping = false;\n }\n }\n\n isReadOnly(r: number, c: number): boolean {\n const readOnly: RevoGrid.ReadOnlyFormat = this.columns[c]?.readonly;\n if (typeof readOnly === 'function') {\n const data = this.rowDataModel(r, c);\n return readOnly(data);\n }\n return readOnly;\n }\n\n static doMerge(existing: RevoGrid.CellProps, extra: RevoGrid.CellProps) {\n let props: RevoGrid.CellProps = { ...extra, ...existing };\n // extend existing props\n if (extra.class) {\n if (typeof extra.class === 'object' && typeof props.class === 'object') {\n props.class = { ...extra.class, ...props.class };\n } else if (typeof extra.class === 'string' && typeof props.class === 'object') {\n props.class[extra.class] = true;\n } else if (typeof props.class === 'string') {\n props.class += ' ' + extra.class;\n }\n }\n if (extra.style) {\n props.style = { ...extra.style, ...props.style };\n }\n return props;\n }\n\n mergeProperties(r: number, c: number, defaultProps: RevoGrid.CellProps): RevoGrid.CellProps {\n const cellClass: { [key: string]: boolean } = {\n [CELL_CLASS]: true,\n [DISABLED_CLASS]: this.isReadOnly(r, c),\n };\n let props: RevoGrid.CellProps = {\n ...defaultProps,\n class: cellClass,\n };\n const extraPropsFunc = this.columns[c]?.cellProperties;\n if (extraPropsFunc) {\n const data = this.rowDataModel(r, c);\n const extra = extraPropsFunc(data);\n if (!extra) {\n return props;\n }\n return ColumnService.doMerge(props, extra);\n }\n return props;\n }\n\n getRowClass(r: number, prop: string): string {\n const model = getSourceItem(this.dataStore, r) || {};\n return model[prop] || '';\n }\n\n getCellData(r: number, c: number): string {\n const data = this.rowDataModel(r, c);\n return ColumnService.getData(data.model[data.prop as number]);\n }\n\n getSaveData(rowIndex: number, colIndex: number, val?: string): Edition.BeforeSaveDataDetails {\n if (typeof val === 'undefined') {\n val = this.getCellData(rowIndex, colIndex);\n }\n const data = this.rowDataModel(rowIndex, colIndex);\n return {\n prop: data.prop,\n rowIndex,\n colIndex,\n val,\n model: data.model,\n colType: this.type,\n type: this.dataStore.get('type'),\n };\n }\n\n getCellEditor(_r: number, c: number, editors: Edition.Editors): Edition.EditorCtr | undefined {\n const editor = this.columns[c]?.editor;\n if (!editor) {\n return undefined;\n }\n // reference\n if (typeof editor === 'string') {\n return editors[editor];\n }\n return editor;\n }\n\n rowDataModel(rowIndex: number, c: number): RevoGrid.ColumnDataSchemaModel {\n const column = this.columns[c];\n const prop: RevoGrid.ColumnProp | undefined = column?.prop;\n const model = getSourceItem(this.dataStore, rowIndex) || {};\n return {\n prop,\n model,\n data: this.dataStore.get('source'),\n column,\n rowIndex,\n };\n }\n\n getRangeData(d: Selection.ChangedRange, columns: RevoGrid.ColumnRegular[]): {\n changed: RevoGrid.DataLookup,\n mapping: Selection.OldNewRangeMapping,\n } {\n const changed: RevoGrid.DataLookup = {};\n\n // get original length sizes\n const copyColLength = d.oldRange.x1 - d.oldRange.x + 1;\n const copyRowLength = d.oldRange.y1 - d.oldRange.y + 1;\n const mapping: Selection.OldNewRangeMapping = {};\n\n // rows\n for (let rowIndex = d.newRange.y, i = 0; rowIndex < d.newRange.y1 + 1; rowIndex++, i++) {\n // copy original data link\n const oldRowIndex = d.oldRange.y + i % copyRowLength;\n const copyRow = getSourceItem(this.dataStore, oldRowIndex) || {};\n\n // columns\n for (let colIndex = d.newRange.x, j = 0; colIndex < d.newRange.x1 + 1; colIndex++, j++) {\n // check if old range area\n if (rowIndex >= d.oldRange.y && rowIndex <= d.oldRange.y1 && colIndex >= d.oldRange.x && colIndex <= d.oldRange.x1) {\n continue;\n }\n\n // requested column beyond range\n if (!this.columns[colIndex]) {\n continue;\n }\n const prop = this.columns[colIndex]?.prop;\n const copyColIndex = d.oldRange.x + j % copyColLength;\n const copyColumnProp = columns[copyColIndex].prop;\n\n /** if can write */\n if (!this.isReadOnly(rowIndex, colIndex)) {\n /** to show before save */\n if (!changed[rowIndex]) {\n changed[rowIndex] = {};\n }\n changed[rowIndex][prop] = copyRow[copyColumnProp];\n /** Generate mapping object */\n if (!mapping[rowIndex]) {\n mapping[rowIndex] = {};\n }\n mapping[rowIndex][prop] = {\n colProp: copyColumnProp,\n rowIndex: oldRowIndex\n };\n }\n }\n }\n return {\n changed,\n mapping,\n };\n }\n\n getTransformedDataToApply(\n start: Selection.Cell,\n data: RevoGrid.DataFormat[][],\n ): {\n changed: RevoGrid.DataLookup;\n range: Selection.RangeArea;\n } {\n const changed: RevoGrid.DataLookup = {};\n const copyRowLength = data.length;\n const colLength = this.columns.length;\n const rowLength = this.dataStore.get('items').length;\n // rows\n let rowIndex = start.y;\n let maxCol = 0;\n for (let i = 0; rowIndex < rowLength && i < copyRowLength; rowIndex++, i++) {\n // copy original data link\n const copyRow = data[i % copyRowLength];\n const copyColLength = copyRow?.length || 0;\n // columns\n let colIndex = start.x;\n for (let j = 0; colIndex < colLength && j < copyColLength; colIndex++, j++) {\n const p = this.columns[colIndex].prop;\n const currentCol = j % colLength;\n\n /** if can write */\n if (!this.isReadOnly(rowIndex, colIndex)) {\n /** to show before save */\n if (!changed[rowIndex]) {\n changed[rowIndex] = {};\n }\n changed[rowIndex][p] = copyRow[currentCol];\n }\n }\n maxCol = Math.max(maxCol, colIndex - 1);\n }\n const range = getRange(start, {\n y: rowIndex - 1,\n x: maxCol,\n });\n return {\n changed,\n range,\n };\n }\n\n applyRangeData(data: RevoGrid.DataLookup) {\n const items: Record<number, RevoGrid.DataType> = {};\n for (let rowIndex in data) {\n const oldModel = (items[rowIndex] = getSourceItem(this.dataStore, parseInt(rowIndex, 10)));\n if (!oldModel) {\n continue;\n }\n for (let prop in data[rowIndex]) {\n oldModel[prop] = data[rowIndex][prop];\n }\n }\n setSourceByVirtualIndex(this.dataStore, items);\n }\n\n getRangeStaticData(d: Selection.RangeArea, value: RevoGrid.DataFormat): RevoGrid.DataLookup {\n const changed: RevoGrid.DataLookup = {};\n\n // rows\n for (let rowIndex = d.y, i = 0; rowIndex < d.y1 + 1; rowIndex++, i++) {\n // columns\n for (let colIndex = d.x, j = 0; colIndex < d.x1 + 1; colIndex++, j++) {\n // requested column beyond range\n if (!this.columns[colIndex]) {\n continue;\n }\n const p = this.columns[colIndex].prop;\n\n /** if can write */\n if (!this.isReadOnly(rowIndex, colIndex)) {\n /** to show before save */\n if (!changed[rowIndex]) {\n changed[rowIndex] = {};\n }\n changed[rowIndex][p] = value;\n }\n }\n }\n return changed;\n }\n\n getRangeTransformedToProps(\n d: Selection.RangeArea,\n store: Observable<DataSourceState<RevoGrid.DataType, RevoGrid.DimensionRows>>,\n ) {\n const area: {\n prop: RevoGrid.ColumnProp,\n rowIndex: number,\n colIndex: number,\n model: RevoGrid.DataSource,\n colType: RevoGrid.MultiDimensionType,\n type: RevoGrid.MultiDimensionType,\n }[] = [];\n\n const type = this.dataStore.get('type');\n // rows\n for (let rowIndex = d.y, i = 0; rowIndex < d.y1 + 1; rowIndex++, i++) {\n // columns\n for (let colIndex = d.x, j = 0; colIndex < d.x1 + 1; colIndex++, j++) {\n const prop = this.columns[colIndex]?.prop;\n area.push({\n prop,\n rowIndex,\n colIndex,\n model: getSourceItem(store, rowIndex),\n type,\n colType: this.type,\n });\n }\n }\n return area;\n }\n\n copyRangeArray(\n range: Selection.RangeArea,\n store: Observable<DataSourceState<RevoGrid.DataType, RevoGrid.DimensionRows>>,\n ) {\n const cols = [...this.columns];\n const props = slice(cols, range.x, range.x1 + 1).map(v => v.prop);\n const toCopy: RevoGrid.DataFormat[][] = [];\n const mapping: { [rowIndex: number]: { [colProp: RevoGrid.ColumnProp]: any } } = {};\n\n // rows indexes\n for (let i = range.y; i <= range.y1; i++) {\n const rgRow: RevoGrid.DataFormat[] = [];\n mapping[i] = {};\n\n // columns indexes\n for (let prop of props) {\n const item = getSourceItem(store, i);\n\n // if no item - skip\n if (!item) {\n continue;\n }\n const val = item[prop];\n rgRow.push(val);\n mapping[i][prop] = val;\n }\n\n toCopy.push(rgRow);\n }\n return {\n data: toCopy,\n mapping\n };\n }\n\n static getData(val?: any) {\n if (typeof val === 'undefined' || val === null) {\n return '';\n }\n return val;\n }\n\n destroy() {\n this.unsubscribe.forEach(f => f());\n }\n}\n"],"version":3}
1
+ {"file":"columnService.js","mappings":"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","names":["slice"],"sources":["./src/plugins/groupingRow/grouping.const.ts","./src/plugins/groupingRow/grouping.service.ts","./src/store/selection/selection.helpers.ts","./src/store/selection/selection.store.ts","./src/services/selection.store.connector.ts","./src/components/data/columnService.ts"],"sourcesContent":["import { GRID_INTERNALS } from '../../utils/consts';\n\nexport const GROUP_DEPTH = `${GRID_INTERNALS}-depth`;\nexport const PSEUDO_GROUP_ITEM = `${GRID_INTERNALS}-name`;\nexport const PSEUDO_GROUP_ITEM_ID = `${GRID_INTERNALS}-id`;\nexport const PSEUDO_GROUP_ITEM_VALUE = `${GRID_INTERNALS}-value`;\nexport const PSEUDO_GROUP_COLUMN = `${GRID_INTERNALS}-column`;\nexport const GROUP_EXPANDED = `${GRID_INTERNALS}-expanded`;\nexport const GROUP_ORIGINAL_INDEX = `${GRID_INTERNALS}-original-index`;\nexport const GROUP_EXPAND_BTN = `group-expand`;\nexport const GROUP_EXPAND_EVENT = `groupExpandClick`;\nexport const GROUPING_ROW_TYPE = 'rgRow';\n","import { RevoGrid } from '../../interfaces';\nimport {\n GROUP_DEPTH,\n GROUP_EXPANDED,\n PSEUDO_GROUP_COLUMN,\n PSEUDO_GROUP_ITEM,\n PSEUDO_GROUP_ITEM_ID,\n PSEUDO_GROUP_ITEM_VALUE,\n GROUP_ORIGINAL_INDEX,\n } from './grouping.const';\nimport { GroupLabelTemplateFunc } from './grouping.row.types';\n\nexport type ExpandedOptions = {\n prevExpanded?: Record<string, boolean>;\n expandedAll?: boolean; // skip trim\n groupLabelTemplate?: GroupLabelTemplateFunc;\n};\n\ntype GroupedData = Map<string, GroupedData | RevoGrid.DataType[]>\n\n\n/**\n * Gather data for grouping\n * @param array - flat data array\n * @param groupIds - ids of groups\n * @param expanded - potentially expanded items if present\n */\nexport function gatherGrouping(array: RevoGrid.DataType[], groupIds: RevoGrid.ColumnProp[], { prevExpanded, expandedAll }: ExpandedOptions) {\n const groupedItems: GroupedData = new Map();\n array.forEach((item, originalIndex) => {\n const groupLevelValues = groupIds.map((groupId) => item[groupId] || null);\n const lastLevelValue = groupLevelValues.pop();\n let currentGroupLevel = groupedItems;\n groupLevelValues.forEach((value) => {\n if (!currentGroupLevel.has(value)) {\n currentGroupLevel.set(value, new Map());\n }\n currentGroupLevel = currentGroupLevel.get(value) as GroupedData;\n })\n if (!currentGroupLevel.has(lastLevelValue)) {\n currentGroupLevel.set(lastLevelValue, []);\n }\n item[GROUP_ORIGINAL_INDEX] = originalIndex;\n const lastLevelItems = currentGroupLevel.get(lastLevelValue) as RevoGrid.DataType[];\n lastLevelItems.push(item);\n });\n\n let itemIndex = -1;\n const groupingDepth = groupIds.length;\n // collapse all groups in the beginning\n const trimmed: Record<number, boolean> = {};\n // index mapping\n const oldNewIndexMap: Record<number, number> = {};\n // check if group header exists\n const pseudoGroupTest: Record<string, number[]> = {};\n const sourceWithGroups: RevoGrid.DataType[] = [];\n function flattenGroupMaps(groupedValues: GroupedData, parentIds: string[], isExpanded: boolean) {\n const depth = parentIds.length;\n groupedValues.forEach((innerGroupedValues, groupId) => {\n const levelIds = [...parentIds, groupId];\n const mergedIds = levelIds.join(',');\n const isGroupExpanded = isExpanded && (!!expandedAll || !!prevExpanded?.[mergedIds]);\n sourceWithGroups.push({\n [PSEUDO_GROUP_ITEM]: groupId,\n [GROUP_DEPTH]: depth,\n [PSEUDO_GROUP_ITEM_ID]: JSON.stringify(levelIds),\n [PSEUDO_GROUP_ITEM_VALUE]: mergedIds,\n [GROUP_EXPANDED]: isGroupExpanded,\n });\n itemIndex += 1;\n if (!isGroupExpanded && depth) {\n trimmed[itemIndex] = true;\n }\n if (Array.isArray(innerGroupedValues)) {\n innerGroupedValues.forEach((value) => {\n itemIndex += 1;\n if (!isGroupExpanded) {\n trimmed[itemIndex] = true;\n }\n oldNewIndexMap[value[GROUP_ORIGINAL_INDEX]] = itemIndex;\n const pseudoGroupTestIds = levelIds.map((_value, index) => levelIds.slice(0, index + 1).join(','));\n pseudoGroupTestIds.forEach((pseudoGroupTestId) => {\n if (!pseudoGroupTest[pseudoGroupTestId]) {\n pseudoGroupTest[pseudoGroupTestId] = [];\n }\n pseudoGroupTest[pseudoGroupTestId].push(itemIndex);\n });\n });\n sourceWithGroups.push(...innerGroupedValues);\n } else {\n flattenGroupMaps(innerGroupedValues, levelIds, isGroupExpanded);\n }\n });\n }\n flattenGroupMaps(groupedItems, [], true);\n\n return {\n sourceWithGroups, // updates source mirror\n depth: groupingDepth, // largest depth for grouping\n trimmed, // used for expand/collapse grouping values\n oldNewIndexMap, // used for mapping old values to new\n childrenByGroup: pseudoGroupTest, // used to get child items in group\n };\n}\n\nexport function getGroupingName(rgRow?: RevoGrid.DataType) {\n return rgRow && rgRow[PSEUDO_GROUP_ITEM];\n}\n\nexport function isGrouping(rgRow?: RevoGrid.DataType) {\n return rgRow && typeof rgRow[PSEUDO_GROUP_ITEM] !== 'undefined';\n}\n\nexport function isGroupingColumn(column?: RevoGrid.ColumnRegular) {\n return column && typeof column[PSEUDO_GROUP_COLUMN] !== 'undefined';\n}\n\nexport function measureEqualDepth<T>(groupA: T[], groupB: T[]) {\n const ln = groupA.length;\n let i = 0;\n for (; i < ln; i++) {\n if (groupA[i] !== groupB[i]) {\n return i;\n }\n }\n return i;\n}\n\nexport function getParsedGroup(id: string): any[] {\n const parseGroup = JSON.parse(id);\n // extra precaution and type safe guard\n if (!Array.isArray(parseGroup)) {\n return null;\n }\n return parseGroup;\n}\n\n// check if items is child of current clicked group\nexport function isSameGroup(currentGroup: any[], currentModel: RevoGrid.DataType, nextModel: RevoGrid.DataType) {\n const nextGroup = getParsedGroup(nextModel[PSEUDO_GROUP_ITEM_ID]);\n if (!nextGroup) {\n return false;\n }\n\n const depth = measureEqualDepth(currentGroup, nextGroup);\n return currentModel[GROUP_DEPTH] < depth;\n}\n","import { Selection } from '../../interfaces';\nimport { EMPTY_INDEX } from '../../services/selection.store.connector';\nimport Cell = Selection.Cell;\nimport RangeArea = Selection.RangeArea;\n\nexport function isHiddenStore(pos: number) {\n return pos === EMPTY_INDEX;\n}\n\nexport function nextCell(cell: Cell, lastCell: Cell): Partial<Cell> | null {\n const nextItem: Partial<Cell> = {};\n let types: (keyof Cell)[] = ['x', 'y'];\n\n // previous item check\n for (let t of types) {\n if (cell[t] < 0) {\n nextItem[t] = cell[t];\n return nextItem;\n }\n }\n // next item check\n for (let t of types) {\n if (cell[t] >= lastCell[t]) {\n nextItem[t] = cell[t] - lastCell[t];\n return nextItem;\n }\n }\n return null;\n}\n\nexport function cropCellToMax(cell: Cell, lastCell: Cell): Cell {\n const newCell: Cell = { ...cell };\n let types: (keyof Cell)[] = ['x', 'y'];\n // previous item check\n for (let t of types) {\n if (cell[t] < 0) {\n newCell[t] = 0;\n }\n }\n // next item check\n for (let t of types) {\n if (cell[t] >= lastCell[t]) {\n newCell[t] = lastCell[t] - 1;\n }\n }\n return newCell;\n}\n\nexport function getRange(start?: Cell, end?: Cell): RangeArea | null {\n return start && end\n ? {\n x: Math.min(start.x, end.x),\n y: Math.min(start.y, end.y),\n x1: Math.max(start.x, end.x),\n y1: Math.max(start.y, end.y),\n }\n : null;\n}\n\nexport function isRangeSingleCell(a: RangeArea): boolean {\n return a.x === a.x1 && a.y === a.y1;\n}\n","import { createStore } from '@stencil/store';\nimport { Observable, Selection } from '../../interfaces';\nimport { setStore } from '../../utils/store.utils';\nimport { getRange } from './selection.helpers';\n\ntype StoreState = Selection.SelectionStoreState;\n\nfunction defaultState(): StoreState {\n return {\n range: null,\n tempRange: null,\n tempRangeType: null,\n focus: null,\n edit: null,\n lastCell: null,\n };\n}\n\nexport class SelectionStore {\n readonly store: Observable<Selection.SelectionStoreState>;\n private unsubscribe: { (): void }[] = [];\n constructor() {\n this.store = createStore(defaultState());\n this.store.on('set', (key, newVal) => {\n if (key === 'tempRange' && !newVal) {\n this.store.set('tempRangeType', null);\n }\n });\n }\n\n onChange<Key extends keyof StoreState>(propName: Key, cb: (newValue: StoreState[Key]) => void) {\n this.unsubscribe.push(this.store.onChange(propName, cb));\n }\n\n clearFocus() {\n setStore(this.store, { focus: null, range: null, edit: null, tempRange: null });\n }\n\n setFocus(focus: Selection.Cell, end?: Selection.Cell) {\n if (!end) {\n setStore(this.store, { focus });\n } else {\n setStore(this.store, {\n focus,\n range: getRange(focus, end),\n edit: null,\n tempRange: null,\n });\n }\n }\n\n setTempArea(range: Selection.TempRange | null) {\n setStore(this.store, { tempRange: range?.area, tempRangeType: range?.type, edit: null });\n }\n\n clearTemp() {\n setStore(this.store, { tempRange: null });\n }\n\n /** Can be applied from selection change or from simple keyboard change clicks */\n setRangeArea(range: Selection.RangeArea) {\n setStore(this.store, { range, edit: null, tempRange: null });\n }\n setRange(start: Selection.Cell, end: Selection.Cell) {\n this.setRangeArea(getRange(start, end));\n }\n\n setLastCell(lastCell: Selection.Cell) {\n setStore(this.store, { lastCell });\n }\n\n setEdit(val: string | boolean) {\n const focus = this.store.get('focus');\n if (focus && typeof val === 'string') {\n setStore(this.store, {\n edit: { x: focus.x, y: focus.y, val },\n });\n return;\n }\n setStore(this.store, { edit: null });\n }\n\n dispose() {\n this.unsubscribe.forEach(f => f());\n this.store.dispose();\n }\n}\n","import { Edition, Selection, RevoGrid } from '../interfaces';\nimport { cropCellToMax, isHiddenStore, nextCell } from '../store/selection/selection.helpers';\nimport { SelectionStore } from '../store/selection/selection.store';\n\nimport Cell = Selection.Cell;\nimport EditCellStore = Edition.EditCellStore;\n\ntype StoreByDimension = Record<number, SelectionStore>;\ntype FocusedStore = {\n entity: SelectionStore;\n cell: Selection.Cell;\n position: Selection.Cell;\n};\n\ntype StoresMapping<T> = { [xOrY: number]: Partial<T> };\n\nexport const EMPTY_INDEX = -1;\n\nexport default class SelectionStoreConnector {\n // dirty flag required to cleanup whole store in case visibility of panels changed\n private dirty = false;\n readonly stores: { [y: number]: { [x: number]: SelectionStore } } = {};\n\n readonly columnStores: StoreByDimension = {};\n readonly rowStores: { [y: number]: SelectionStore } = {};\n\n /**\n * Helpers for data conversion\n */\n readonly storesByType: Partial<Record<RevoGrid.MultiDimensionType, number>> = {};\n readonly storesXToType: StoresMapping<RevoGrid.DimensionCols> = {};\n readonly storesYToType: StoresMapping<RevoGrid.DimensionRows> = {};\n\n get focusedStore(): FocusedStore | null {\n for (let y in this.stores) {\n for (let x in this.stores[y]) {\n const focused = this.stores[y][x]?.store.get('focus');\n if (focused) {\n return {\n entity: this.stores[y][x],\n cell: focused,\n position: {\n x: parseInt(x, 10),\n y: parseInt(y, 10),\n },\n };\n }\n }\n }\n return null;\n }\n\n get edit(): EditCellStore | undefined {\n return this.focusedStore?.entity.store.get('edit');\n }\n\n get focused(): Cell | undefined {\n return this.focusedStore?.entity.store.get('focus');\n }\n\n get selectedRange(): Selection.RangeArea | undefined {\n return this.focusedStore?.entity.store.get('range');\n }\n\n private readonly sections: Element[] = [];\n\n registerSection(e?: Element) {\n if (!e) {\n this.sections.length = 0;\n // some elements removed, rebuild stores\n this.dirty = true;\n return;\n }\n if (this.sections.indexOf(e) === -1) {\n this.sections.push(e);\n }\n }\n\n // check if require to cleanup all stores\n beforeUpdate() {\n if (this.dirty) {\n for (let y in this.stores) {\n for (let x in this.stores[y]) {\n this.stores[y][x].dispose();\n }\n }\n this.dirty = false;\n }\n }\n\n registerColumn(x: number, type: RevoGrid.DimensionCols): SelectionStore {\n\n // if hidden just create store but no operations needed\n if (isHiddenStore(x)) {\n return new SelectionStore();\n }\n if (this.columnStores[x]) {\n return this.columnStores[x];\n }\n this.columnStores[x] = new SelectionStore();\n // build cross linking type to position\n this.storesByType[type] = x;\n this.storesXToType[x] = type;\n return this.columnStores[x];\n }\n\n registerRow(y: number, type: RevoGrid.DimensionRows): SelectionStore {\n // if hidden just create store\n if (isHiddenStore(y)) {\n return new SelectionStore();\n }\n if (this.rowStores[y]) {\n return this.rowStores[y];\n }\n this.rowStores[y] = new SelectionStore();\n // build cross linking type to position\n this.storesByType[type] = y;\n this.storesYToType[y] = type;\n return this.rowStores[y];\n }\n\n /**\n * Cross store proxy, based on multiple dimensions\n */\n register({ x, y }: Selection.Cell): SelectionStore {\n // if hidden just create store\n if (isHiddenStore(x) || isHiddenStore(y)) {\n return new SelectionStore();\n }\n if (!this.stores[y]) {\n this.stores[y] = {};\n }\n if (this.stores[y][x]) {\n // Store already registered. Do not register twice\n return this.stores[y][x];\n }\n this.stores[y][x] = new SelectionStore();\n // proxy update, column store trigger only range area\n this.stores[y][x]?.onChange('range', c => {\n this.columnStores[x].setRangeArea(c);\n this.rowStores[y].setRangeArea(c);\n });\n // clean up on remove\n this.stores[y][x]?.store.on('dispose', () => this.destroy(x, y));\n return this.stores[y][x];\n }\n\n private destroy(x: number, y: number) {\n this.columnStores[x]?.dispose();\n this.rowStores[y]?.dispose();\n\n delete this.rowStores[y];\n delete this.columnStores[x];\n // clear x cross link\n if (this.storesXToType[x]) {\n const type = this.storesXToType[x];\n delete this.storesXToType[x];\n delete this.storesByType[type];\n }\n // clear y cross link\n if (this.storesYToType[y]) {\n const type = this.storesYToType[y];\n delete this.storesYToType[y];\n delete this.storesByType[type];\n }\n if (this.stores[y]) {\n delete this.stores[y][x];\n }\n // clear empty rows\n if (!Object.keys(this.stores[y] || {}).length) {\n delete this.stores[y];\n }\n }\n\n setEditByCell<T extends Selection.Cell>(storePos: T, editCell: T) {\n this.focusByCell(storePos, editCell, editCell);\n this.setEdit('');\n }\n\n focusByCell<T extends Selection.Cell>(storePos: T, start: T, end: T) {\n const store = this.stores[storePos.y][storePos.x];\n this.focus(store, { focus: start, end });\n }\n\n focus(store: SelectionStore, { focus, end }: { focus: Cell; end: Cell }) {\n let currentStorePointer: Selection.Cell;\n // clear all stores focus leave only active one\n for (let y in this.stores) {\n for (let x in this.stores[y]) {\n const s = this.stores[y][x];\n // clear other stores, only one area can be selected\n if (s !== store) {\n s.clearFocus();\n } else {\n currentStorePointer = { x: parseInt(x, 10), y: parseInt(y, 10) };\n }\n }\n }\n if (!currentStorePointer) {\n return null;\n }\n\n // check is focus in next store\n const lastCell = store.store.get('lastCell');\n // item in new store\n const nextItem: Partial<Cell> | null = nextCell(focus, lastCell);\n\n let nextStore;\n if (nextItem) {\n for (let i in nextItem) {\n let type: keyof Cell = i as keyof Cell;\n let stores;\n switch (type) {\n case 'x':\n stores = this.getXStores(currentStorePointer.y);\n break;\n case 'y':\n stores = this.getYStores(currentStorePointer.x);\n break;\n }\n if (nextItem[type] >= 0) {\n nextStore = stores[++currentStorePointer[type]];\n } else {\n nextStore = stores[--currentStorePointer[type]];\n const nextLastCell = nextStore?.store.get('lastCell');\n if (nextLastCell) {\n nextItem[type] = nextLastCell[type] + nextItem[type];\n }\n }\n }\n }\n // if next store present - update\n if (nextStore) {\n let item = { ...focus, ...nextItem };\n this.focus(nextStore, { focus: item, end: item });\n return null;\n }\n\n focus = cropCellToMax(focus, lastCell);\n end = cropCellToMax(end, lastCell);\n\n store.setFocus(focus, end);\n return focus;\n }\n\n clearAll(): void {\n for (let y in this.stores) {\n for (let x in this.stores[y]) {\n this.stores[y][x]?.clearFocus();\n }\n }\n }\n\n setEdit(val: string | boolean) {\n if (!this.focusedStore) {\n return;\n }\n this.focusedStore.entity.setEdit(val);\n }\n\n /**\n * Select all cells across all stores\n */\n selectAll() {\n for (let y in this.stores) {\n for (let x in this.stores[y]) {\n const store = this.stores[y][x];\n if (!store) {\n continue;\n }\n const lastCell = store.store.get('lastCell');\n store.setRange({ x: 0, y: 0 }, { x: lastCell.x - 1, y: lastCell.y - 1 });\n }\n }\n }\n\n private getXStores(y: number) {\n return this.stores[y];\n }\n\n private getYStores(x: number) {\n const stores: { [p: number]: SelectionStore } = {};\n for (let i in this.stores) {\n stores[i] = this.stores[i][x];\n }\n return stores;\n }\n}\n","import { DataSourceState, getSourceItem, getVisibleSourceItem, setSourceByVirtualIndex } from '../../store/dataSource/data.store';\nimport { CELL_CLASS, DISABLED_CLASS } from '../../utils/consts';\nimport { Edition, Observable, RevoGrid, Selection } from '../../interfaces';\nimport { getRange } from '../../store/selection/selection.helpers';\n\nimport { isGroupingColumn } from '../../plugins/groupingRow/grouping.service';\nimport { slice } from 'lodash';\n\nexport type ColumnSource = Observable<DataSourceState<RevoGrid.ColumnRegular, RevoGrid.DimensionCols>>;\nexport type RowSource = Observable<DataSourceState<RevoGrid.DataType, RevoGrid.DimensionRows>>;\n\nexport type ColumnStores = {\n [T in RevoGrid.DimensionCols]: ColumnSource;\n};\nexport type RowStores = {\n [T in RevoGrid.DimensionRows]: RowSource;\n};\n\nexport default class ColumnService {\n private unsubscribe: { (): void }[] = [];\n get columns(): RevoGrid.ColumnRegular[] {\n return getVisibleSourceItem(this.source);\n }\n\n hasGrouping = false;\n type: RevoGrid.DimensionCols;\n\n constructor(private dataStore: RowSource, private source: ColumnSource) {\n this.unsubscribe.push(source.onChange('source', s => this.checkGrouping(s)));\n this.checkGrouping(source.get('source'));\n this.type = source.get('type');\n }\n\n private checkGrouping(cols: RevoGrid.ColumnRegular[]) {\n for (let rgCol of cols) {\n if (isGroupingColumn(rgCol)) {\n this.hasGrouping = true;\n return;\n }\n this.hasGrouping = false;\n }\n }\n\n isReadOnly(r: number, c: number): boolean {\n const readOnly: RevoGrid.ReadOnlyFormat = this.columns[c]?.readonly;\n if (typeof readOnly === 'function') {\n const data = this.rowDataModel(r, c);\n return readOnly(data);\n }\n return readOnly;\n }\n\n static doMerge(existing: RevoGrid.CellProps, extra: RevoGrid.CellProps) {\n let props: RevoGrid.CellProps = { ...extra, ...existing };\n // extend existing props\n if (extra.class) {\n if (typeof extra.class === 'object' && typeof props.class === 'object') {\n props.class = { ...extra.class, ...props.class };\n } else if (typeof extra.class === 'string' && typeof props.class === 'object') {\n props.class[extra.class] = true;\n } else if (typeof props.class === 'string') {\n props.class += ' ' + extra.class;\n }\n }\n if (extra.style) {\n props.style = { ...extra.style, ...props.style };\n }\n return props;\n }\n\n mergeProperties(r: number, c: number, defaultProps: RevoGrid.CellProps): RevoGrid.CellProps {\n const cellClass: { [key: string]: boolean } = {\n [CELL_CLASS]: true,\n [DISABLED_CLASS]: this.isReadOnly(r, c),\n };\n let props: RevoGrid.CellProps = {\n ...defaultProps,\n class: cellClass,\n };\n const extraPropsFunc = this.columns[c]?.cellProperties;\n if (extraPropsFunc) {\n const data = this.rowDataModel(r, c);\n const extra = extraPropsFunc(data);\n if (!extra) {\n return props;\n }\n return ColumnService.doMerge(props, extra);\n }\n return props;\n }\n\n getRowClass(r: number, prop: string): string {\n const model = getSourceItem(this.dataStore, r) || {};\n return model[prop] || '';\n }\n\n getCellData(r: number, c: number): string {\n const data = this.rowDataModel(r, c);\n return ColumnService.getData(data.model[data.prop as number]);\n }\n\n getSaveData(rowIndex: number, colIndex: number, val?: string): Edition.BeforeSaveDataDetails {\n if (typeof val === 'undefined') {\n val = this.getCellData(rowIndex, colIndex);\n }\n const data = this.rowDataModel(rowIndex, colIndex);\n return {\n prop: data.prop,\n rowIndex,\n colIndex,\n val,\n model: data.model,\n colType: this.type,\n type: this.dataStore.get('type'),\n };\n }\n\n getCellEditor(_r: number, c: number, editors: Edition.Editors): Edition.EditorCtr | undefined {\n const editor = this.columns[c]?.editor;\n if (!editor) {\n return undefined;\n }\n // reference\n if (typeof editor === 'string') {\n return editors[editor];\n }\n return editor;\n }\n\n rowDataModel(rowIndex: number, colIndex: number): RevoGrid.ColumnDataSchemaModel {\n const column = this.columns[colIndex];\n const prop: RevoGrid.ColumnProp | undefined = column?.prop;\n const model = getSourceItem(this.dataStore, rowIndex) || {};\n const type = this.dataStore.get('type');\n return {\n prop,\n model,\n data: this.dataStore.get('source'),\n column,\n rowIndex,\n colIndex,\n colType: this.type,\n type,\n };\n }\n\n getRangeData(d: Selection.ChangedRange, columns: RevoGrid.ColumnRegular[]): {\n changed: RevoGrid.DataLookup,\n mapping: Selection.OldNewRangeMapping,\n } {\n const changed: RevoGrid.DataLookup = {};\n\n // get original length sizes\n const copyColLength = d.oldRange.x1 - d.oldRange.x + 1;\n const copyRowLength = d.oldRange.y1 - d.oldRange.y + 1;\n const mapping: Selection.OldNewRangeMapping = {};\n\n // rows\n for (let rowIndex = d.newRange.y, i = 0; rowIndex < d.newRange.y1 + 1; rowIndex++, i++) {\n // copy original data link\n const oldRowIndex = d.oldRange.y + i % copyRowLength;\n const copyRow = getSourceItem(this.dataStore, oldRowIndex) || {};\n\n // columns\n for (let colIndex = d.newRange.x, j = 0; colIndex < d.newRange.x1 + 1; colIndex++, j++) {\n // check if old range area\n if (rowIndex >= d.oldRange.y && rowIndex <= d.oldRange.y1 && colIndex >= d.oldRange.x && colIndex <= d.oldRange.x1) {\n continue;\n }\n\n // requested column beyond range\n if (!this.columns[colIndex]) {\n continue;\n }\n const prop = this.columns[colIndex]?.prop;\n const copyColIndex = d.oldRange.x + j % copyColLength;\n const copyColumnProp = columns[copyColIndex].prop;\n\n /** if can write */\n if (!this.isReadOnly(rowIndex, colIndex)) {\n /** to show before save */\n if (!changed[rowIndex]) {\n changed[rowIndex] = {};\n }\n changed[rowIndex][prop] = copyRow[copyColumnProp];\n /** Generate mapping object */\n if (!mapping[rowIndex]) {\n mapping[rowIndex] = {};\n }\n mapping[rowIndex][prop] = {\n colProp: copyColumnProp,\n rowIndex: oldRowIndex\n };\n }\n }\n }\n return {\n changed,\n mapping,\n };\n }\n\n getTransformedDataToApply(\n start: Selection.Cell,\n data: RevoGrid.DataFormat[][],\n ): {\n changed: RevoGrid.DataLookup;\n range: Selection.RangeArea;\n } {\n const changed: RevoGrid.DataLookup = {};\n const copyRowLength = data.length;\n const colLength = this.columns.length;\n const rowLength = this.dataStore.get('items').length;\n // rows\n let rowIndex = start.y;\n let maxCol = 0;\n for (let i = 0; rowIndex < rowLength && i < copyRowLength; rowIndex++, i++) {\n // copy original data link\n const copyRow = data[i % copyRowLength];\n const copyColLength = copyRow?.length || 0;\n // columns\n let colIndex = start.x;\n for (let j = 0; colIndex < colLength && j < copyColLength; colIndex++, j++) {\n const p = this.columns[colIndex].prop;\n const currentCol = j % colLength;\n\n /** if can write */\n if (!this.isReadOnly(rowIndex, colIndex)) {\n /** to show before save */\n if (!changed[rowIndex]) {\n changed[rowIndex] = {};\n }\n changed[rowIndex][p] = copyRow[currentCol];\n }\n }\n maxCol = Math.max(maxCol, colIndex - 1);\n }\n const range = getRange(start, {\n y: rowIndex - 1,\n x: maxCol,\n });\n return {\n changed,\n range,\n };\n }\n\n applyRangeData(data: RevoGrid.DataLookup) {\n const items: Record<number, RevoGrid.DataType> = {};\n for (let rowIndex in data) {\n const oldModel = (items[rowIndex] = getSourceItem(this.dataStore, parseInt(rowIndex, 10)));\n if (!oldModel) {\n continue;\n }\n for (let prop in data[rowIndex]) {\n oldModel[prop] = data[rowIndex][prop];\n }\n }\n setSourceByVirtualIndex(this.dataStore, items);\n }\n\n getRangeStaticData(d: Selection.RangeArea, value: RevoGrid.DataFormat): RevoGrid.DataLookup {\n const changed: RevoGrid.DataLookup = {};\n\n // rows\n for (let rowIndex = d.y, i = 0; rowIndex < d.y1 + 1; rowIndex++, i++) {\n // columns\n for (let colIndex = d.x, j = 0; colIndex < d.x1 + 1; colIndex++, j++) {\n // requested column beyond range\n if (!this.columns[colIndex]) {\n continue;\n }\n const p = this.columns[colIndex].prop;\n\n /** if can write */\n if (!this.isReadOnly(rowIndex, colIndex)) {\n /** to show before save */\n if (!changed[rowIndex]) {\n changed[rowIndex] = {};\n }\n changed[rowIndex][p] = value;\n }\n }\n }\n return changed;\n }\n\n getRangeTransformedToProps(\n d: Selection.RangeArea,\n store: Observable<DataSourceState<RevoGrid.DataType, RevoGrid.DimensionRows>>,\n ) {\n const area: {\n prop: RevoGrid.ColumnProp,\n rowIndex: number,\n colIndex: number,\n model: RevoGrid.DataSource,\n colType: RevoGrid.DimensionCols,\n type: RevoGrid.DimensionRows,\n }[] = [];\n\n const type = this.dataStore.get('type');\n // rows\n for (let rowIndex = d.y, i = 0; rowIndex < d.y1 + 1; rowIndex++, i++) {\n // columns\n for (let colIndex = d.x, j = 0; colIndex < d.x1 + 1; colIndex++, j++) {\n const prop = this.columns[colIndex]?.prop;\n area.push({\n prop,\n rowIndex,\n colIndex,\n model: getSourceItem(store, rowIndex),\n type,\n colType: this.type,\n });\n }\n }\n return area;\n }\n\n copyRangeArray(\n range: Selection.RangeArea,\n store: Observable<DataSourceState<RevoGrid.DataType, RevoGrid.DimensionRows>>,\n ) {\n const cols = [...this.columns];\n const props = slice(cols, range.x, range.x1 + 1).map(v => v.prop);\n const toCopy: RevoGrid.DataFormat[][] = [];\n const mapping: { [rowIndex: number]: { [colProp: RevoGrid.ColumnProp]: any } } = {};\n\n // rows indexes\n for (let i = range.y; i <= range.y1; i++) {\n const rgRow: RevoGrid.DataFormat[] = [];\n mapping[i] = {};\n\n // columns indexes\n for (let prop of props) {\n const item = getSourceItem(store, i);\n\n // if no item - skip\n if (!item) {\n continue;\n }\n const val = item[prop];\n rgRow.push(val);\n mapping[i][prop] = val;\n }\n\n toCopy.push(rgRow);\n }\n return {\n data: toCopy,\n mapping\n };\n }\n\n static getData(val?: any) {\n if (typeof val === 'undefined' || val === null) {\n return '';\n }\n return val;\n }\n\n destroy() {\n this.unsubscribe.forEach(f => f());\n }\n}\n"],"version":3}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- const index = require('./index-449963b8.js');
6
+ const index = require('./index-1474e4b4.js');
7
7
 
8
8
  /**
9
9
  * Update items based on new scroll position
@@ -458,4 +458,4 @@ exports.calculateRowHeaderSize = calculateRowHeaderSize;
458
458
  exports.getFromEvent = getFromEvent;
459
459
  exports.verifyTouchTarget = verifyTouchTarget;
460
460
 
461
- //# sourceMappingURL=events-49057f23.js.map
461
+ //# sourceMappingURL=events-344baa2e.js.map
@@ -1 +1 @@
1
- {"file":"events-49057f23.js","mappings":"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","names":["getItemByPosition","createStore","setStore"],"sources":["./src/store/viewPort/viewport.helpers.ts","./src/store/viewPort/viewport.store.ts","./src/utils/row-header-utils.ts","./src/utils/events.ts"],"sourcesContent":["import { getItemByPosition } from '../dimension/dimension.helpers';\nimport { RevoGrid } from '../../interfaces';\n\nexport type DimensionDataViewport = Pick<\n RevoGrid.DimensionSettingsState,\n 'indexes' | 'positionIndexes' | 'positionIndexToItem' | 'sizes' | 'originItemSize' | 'realSize'\n>;\n\ntype ItemsToUpdate = Pick<RevoGrid.ViewportStateItems, 'items' | 'start' | 'end'>;\n/**\n * Update items based on new scroll position\n * If viewport wasn't changed fully simple recombination of positions\n * Otherwise rebuild viewport items\n */\nexport function getUpdatedItemsByPosition<T extends ItemsToUpdate>(\n pos: number, // coordinate\n items: T,\n realCount: number,\n virtualSize: number,\n dimension: DimensionDataViewport\n): ItemsToUpdate {\n const activeItem: RevoGrid.PositionItem = getItemByPosition(dimension, pos);\n const firstItem: RevoGrid.PositionItem = getFirstItem(items);\n let toUpdate: ItemsToUpdate;\n // do simple position recombination if items already present in viewport\n if (firstItem) {\n let changedOffsetStart = activeItem.itemIndex - (firstItem.itemIndex || 0);\n // if item changed\n if (changedOffsetStart) {\n // simple recombination\n toUpdate = recombineByOffset(Math.abs(changedOffsetStart), {\n positiveDirection: changedOffsetStart > -1,\n ...dimension,\n ...items,\n });\n }\n }\n\n const maxSizeVirtualSize = getMaxVirtualSize(virtualSize, dimension.realSize, activeItem);\n // if partial recombination add items if revo-viewport has some space left\n if (toUpdate) {\n const extra = addMissingItems(activeItem, realCount, maxSizeVirtualSize, toUpdate, dimension);\n if (extra.length) {\n updateMissingAndRange(toUpdate.items, extra, toUpdate);\n }\n }\n\n // new collection if no items after replacement full replacement\n if (!toUpdate) {\n const items = getItems({\n firstItemStart: activeItem.start,\n firstItemIndex: activeItem.itemIndex,\n origSize: dimension.originItemSize,\n maxSize: maxSizeVirtualSize,\n maxCount: realCount,\n sizes: dimension.sizes,\n });\n\n // range now comes from 0 to length - 1\n toUpdate = {\n items,\n start: 0,\n end: items.length - 1,\n };\n }\n return toUpdate;\n}\n\n// virtual size can differ based on scroll position if some big items are present\n// scroll can be in the middle of item and virtual size will be larger\n// so we need to exclude this part from virtual size hence it's already passed\nfunction getMaxVirtualSize(virtualSize: number, realSize: number, activeItem: RevoGrid.PositionItem) {\n return Math.min(virtualSize + (activeItem.end - activeItem.start), realSize)\n}\n\nexport function updateMissingAndRange(\n items: RevoGrid.VirtualPositionItem[],\n missing: RevoGrid.VirtualPositionItem[],\n range: RevoGrid.Range\n) {\n items.splice(range.end + 1, 0, ...missing);\n // update range if start larger after recombination\n if (range.start >= range.end && !(range.start === range.end && range.start === 0)) {\n range.start += missing.length;\n }\n range.end += missing.length;\n}\n\n/**\n * If partial replacement\n * this function adds items if viewport has some space left\n */\nexport function addMissingItems<T extends ItemsToUpdate>(\n firstItem: RevoGrid.PositionItem,\n realCount: number,\n virtualSize: number,\n existingCollection: T,\n dimension: Pick<RevoGrid.DimensionSettingsState, 'sizes' | 'originItemSize'>,\n): RevoGrid.VirtualPositionItem[] {\n const lastItem: RevoGrid.VirtualPositionItem = getLastItem(existingCollection);\n const items = getItems({\n sizes: dimension.sizes,\n firstItemStart: lastItem.end,\n firstItemIndex: lastItem.itemIndex + 1,\n origSize: dimension.originItemSize,\n maxSize: virtualSize - (lastItem.end - firstItem.start),\n maxCount: realCount,\n });\n return items;\n}\n\n/**\n * Get wiewport items parameters\n * caching position and calculating items count in viewport\n */\nexport function getItems(\n opt: {\n firstItemIndex: number;\n firstItemStart: number;\n origSize: number;\n maxSize: number; // virtual size\n maxCount: number; // real item count, where the last item\n sizes?: RevoGrid.ViewSettingSizeProp;\n },\n currentSize = 0,\n) {\n const items: RevoGrid.VirtualPositionItem[] = [];\n\n let index = opt.firstItemIndex;\n let size = currentSize;\n\n // max size or max count\n while (size <= opt.maxSize && index < opt.maxCount) {\n const newSize = getItemSize(index, opt.sizes, opt.origSize);\n items.push({\n start: opt.firstItemStart + size,\n end: opt.firstItemStart + size + newSize,\n itemIndex: index,\n size: newSize,\n });\n size += newSize;\n index++;\n }\n return items;\n}\n\n/**\n * Do batch items recombination\n * If items not overlapped with existing viewport returns null\n */\ntype RecombindDimensionData = Pick<RevoGrid.DimensionSettingsState, 'sizes' | 'realSize' | 'originItemSize'>;\ntype RecombineOffsetData = {\n positiveDirection: boolean;\n} & ItemsToUpdate & RecombindDimensionData;\nexport function recombineByOffset(\n offset: number,\n data: RecombineOffsetData\n): ItemsToUpdate | null {\n const newItems = [...data.items];\n const itemsCount = newItems.length;\n let newRange = {\n start: data.start,\n end: data.end,\n };\n\n // if offset out of revo-viewport, makes sense whole redraw\n if (offset > itemsCount) {\n return null;\n }\n\n // is direction of scroll positive\n if (data.positiveDirection) {\n // push item to the end\n let lastItem: RevoGrid.VirtualPositionItem = getLastItem(data);\n\n let i: number = newRange.start;\n const length = i + offset;\n for (; i < length; i++) {\n const newIndex: number = lastItem.itemIndex + 1;\n const size: number = getItemSize(newIndex, data.sizes, data.originItemSize);\n\n // if item overlapped limit break a loop\n if (lastItem.end + size > data.realSize) {\n break;\n }\n\n // new item index to recombine\n let newEnd = i % itemsCount;\n\n // item should always present, we do not create new item, we recombine them\n if (!newItems[newEnd]) {\n throw new Error('incorrect index');\n }\n\n // do recombination\n newItems[newEnd] = lastItem = {\n start: lastItem.end,\n end: lastItem.end + size,\n itemIndex: newIndex,\n size: size,\n };\n // update range\n newRange.start++;\n newRange.end = newEnd;\n }\n\n // direction is negative\n } else {\n // push item to the start\n let firstItem: RevoGrid.VirtualPositionItem = getFirstItem(data);\n\n const end = newRange.end;\n for (let i = 0; i < offset; i++) {\n const newIndex: number = firstItem.itemIndex - 1;\n const size: number = getItemSize(newIndex, data.sizes, data.originItemSize);\n\n // new item index to recombine\n let newStart = end - i;\n newStart = (newStart < 0 ? itemsCount + newStart : newStart) % itemsCount;\n\n // item should always present, we do not create new item, we recombine them\n if (!newItems[newStart]) {\n throw new Error('incorrect index');\n }\n\n // do recombination\n newItems[newStart] = firstItem = {\n start: firstItem.start - size,\n end: firstItem.start,\n itemIndex: newIndex,\n size: size,\n };\n // update range\n newRange.start = newStart;\n newRange.end--;\n }\n }\n const range = {\n start: (newRange.start < 0 ? itemsCount + newRange.start : newRange.start) % itemsCount,\n end: (newRange.end < 0 ? itemsCount + newRange.end : newRange.end) % itemsCount,\n };\n return {\n items: newItems,\n ...range,\n };\n}\n\nfunction getItemSize(index: number, sizes?: RevoGrid.ViewSettingSizeProp, origSize: number = 0): number {\n if (sizes && sizes[index]) {\n return sizes[index];\n }\n return origSize;\n}\n\n/**\n * Verify if position is in range of the PositionItem, start and end are included\n */\nexport function isActiveRange(\n pos: number,\n realSize: number,\n first?: RevoGrid.PositionItem,\n last?: RevoGrid.PositionItem\n): boolean {\n if (!first || !last) {\n return false;\n }\n // if position is in range of first item\n // or position is after first item and last item is the last item in real size\n return pos >= first.start && pos <= first.end ||\n pos > first.end && last.end === realSize;\n}\n\nexport function isActiveRangeOutsideLastItem(pos: number, virtualSize: number, firstItem?: RevoGrid.PositionItem, lastItem?: RevoGrid.PositionItem) {\n // if no first item, means no items in viewport\n if (!firstItem) {\n return false;\n }\n return virtualSize + pos > lastItem?.end\n}\n\nexport function getFirstItem(s: ItemsToUpdate): RevoGrid.VirtualPositionItem | undefined {\n return s.items[s.start];\n}\n\nexport function getLastItem(s: ItemsToUpdate): RevoGrid.VirtualPositionItem {\n return s.items[s.end];\n}\n\n/**\n * Set items sizes from start index to end\n * @param vpItems \n * @param start \n * @param size \n * @param lastCoordinate \n * @returns \n */\nexport function setItemSizes(\n vpItems: RevoGrid.VirtualPositionItem[],\n initialIndex: number,\n size: number,\n lastCoordinate: number\n) {\n const items = [...vpItems];\n const count = items.length;\n\n let pos = lastCoordinate;\n let i = 0;\n let start = initialIndex;\n\n // viewport not inited\n if (!count) {\n return [];\n }\n // loop through array from initial item after recombination\n while (i < count) {\n const item = items[start];\n item.start = pos;\n item.size = size;\n item.end = item.start + size;\n pos = item.end;\n // loop by start index\n start++;\n i++;\n\n // if start index out of array, reset it\n if (start === count) {\n start = 0;\n }\n }\n return items;\n}\n","/**\n * Store is responsible for visible\n * Viewport information for each dimension\n * Redraw items during scrolling\n */\n\nimport { createStore } from '@stencil/store';\n\nimport {\n addMissingItems,\n DimensionDataViewport,\n getFirstItem,\n getLastItem,\n getUpdatedItemsByPosition,\n isActiveRange,\n setItemSizes,\n updateMissingAndRange,\n isActiveRangeOutsideLastItem,\n} from './viewport.helpers';\n\nimport { setStore } from '../../utils/store.utils';\nimport { Observable, RevoGrid } from '../../interfaces';\n\nfunction initialState(): RevoGrid.ViewportState {\n return {\n // virtual item information per rendered item\n items: [],\n // virtual dom item order to render\n start: 0,\n\n end: 0,\n\n // size of viewport in px\n virtualSize: 0,\n\n // total number of items\n realCount: 0,\n };\n}\n\nexport default class ViewportStore {\n readonly store: Observable<RevoGrid.ViewportState>;\n // last coordinate for store position restore\n private lastKnownScroll = 0;\n get lastCoordinate() {\n return this.lastKnownScroll;\n }\n private set lastCoordinate(value: number) {\n this.lastKnownScroll = value;\n }\n constructor(readonly type: RevoGrid.MultiDimensionType) {\n this.store = createStore(initialState());\n this.store.onChange('realCount', () => this.clearItems());\n // drop items on virtual size change, require a new item set\n this.store.onChange('virtualSize', () => this.setViewport({ items: [] }));\n }\n\n /**\n * Render viewport based on coordinate\n * It's the main method for draw\n */\n setViewPortCoordinate(position: number, dimension: DimensionDataViewport) {\n const viewportSize = this.store.get('virtualSize');\n // no visible data to calculate\n if (!viewportSize) {\n return;\n }\n\n const frameOffset = 1;\n const singleOffsetInPx = dimension.originItemSize * frameOffset;\n // add offset to virtual size from both sides\n const outsize = singleOffsetInPx * 2;\n // math virtual size is based on visible area + 2 items outside of visible area\n const virtualSize = viewportSize + outsize;\n\n // expected no scroll if real size less than virtual size, position is 0\n let maxCoordinate = 0;\n // if there is nodes outside of viewport, max coordinate has to be adjusted\n if (dimension.realSize > viewportSize) {\n // max coordinate is real size minus virtual/rendered space\n maxCoordinate = dimension.realSize - viewportSize - singleOffsetInPx;\n }\n\n let pos = position;\n // limit position to max and min coordinates\n if (pos < 0) {\n pos = 0;\n } else if (pos > maxCoordinate) {\n pos = maxCoordinate;\n }\n\n // store last coordinate for further restore on redraw\n this.lastCoordinate = pos;\n\n // actual position is less than first item start based on offset\n pos -= singleOffsetInPx;\n pos = pos < 0 ? 0 : pos < maxCoordinate ? pos : maxCoordinate;\n\n const allItems = this.getItems();\n const firstItem: RevoGrid.VirtualPositionItem | undefined = getFirstItem(allItems);\n const lastItem: RevoGrid.VirtualPositionItem | undefined = getLastItem(allItems);\n\n\n let toUpdate: Partial<RevoGrid.ViewportState> = {};\n // left position changed\n // verify if new position is in range of previously rendered first item\n if (!isActiveRange(pos, dimension.realSize, firstItem, lastItem)) {\n toUpdate = {\n ...toUpdate,\n ...getUpdatedItemsByPosition(pos, allItems, this.store.get('realCount'), virtualSize, dimension),\n };\n this.setViewport({ ...toUpdate });\n // verify is render area is outside of last item\n } else if (isActiveRangeOutsideLastItem(pos, virtualSize, firstItem, lastItem)) {\n // check is any item missing for full fill content\n const missing = addMissingItems(firstItem, this.store.get('realCount'), virtualSize + pos - firstItem.start, allItems, dimension);\n\n // update missing items\n if (missing.length) {\n const items = [...this.store.get('items')];\n const range = {\n start: this.store.get('start'),\n end: this.store.get('end'),\n };\n updateMissingAndRange(items, missing, range);\n toUpdate = {\n ...toUpdate,\n items: [...items],\n ...range,\n };\n this.setViewport({ ...toUpdate });\n }\n }\n }\n\n /**\n * Update viewport sizes for existing items\n * This method is generating new item positions based on custom sizes and original sizes\n * @param sizes - custom sizes for each item\n * @param dropToOriginalSize - drop to original size if requested\n */\n setViewPortDimensionSizes(sizes: RevoGrid.ViewSettingSizeProp, dropToOriginalSize?: number) {\n let items = [...this.store.get('items')];\n const count = items.length;\n // viewport not inited\n if (!count) {\n return;\n }\n\n let changedCoordinate = 0;\n let i = 0;\n let start = this.store.get('start');\n\n // drop to original size if requested\n if (dropToOriginalSize) {\n const allItems = this.getItems();\n const firstItem: RevoGrid.VirtualPositionItem | undefined = getFirstItem(allItems);\n items = setItemSizes(items, start, dropToOriginalSize, firstItem.start);\n }\n\n // loop through array from initial item after recombination\n // if size change present, change position for all items after\n while (i < count) {\n const item = items[start];\n // change pos if size change present before\n if (changedCoordinate) {\n item.start += changedCoordinate;\n item.end += changedCoordinate;\n }\n // check if size change present\n const size: number | undefined = sizes[item.itemIndex];\n // size found\n if (size) {\n const changedSize = size - item.size;\n changedCoordinate += changedSize;\n item.size = size;\n item.end = item.start + size;\n // size lost\n }\n\n // loop by start index\n start++;\n i++;\n // if start index out of array, reset it\n if (start === count) {\n start = 0;\n }\n }\n\n this.setViewport({ items: [...items] });\n }\n\n /**\n * Set sizes for existing items\n */\n setOriginalSizes(size: number) {\n const items = this.store.get('items');\n const count = items.length;\n // viewport not inited\n if (!count) {\n return;\n }\n\n setStore(this.store, {\n items: setItemSizes(items, this.store.get('start'), size, this.lastCoordinate),\n });\n }\n\n getItems(): Pick<RevoGrid.ViewportStateItems, 'items' | 'start' | 'end'> {\n return {\n items: this.store.get('items'),\n start: this.store.get('start'),\n end: this.store.get('end'),\n };\n }\n\n setViewport(data: Partial<RevoGrid.ViewportState>) {\n setStore(this.store, data);\n }\n\n clearItems() {\n this.store.set('items', []);\n }\n}\n","import { RevoGrid } from '../interfaces';\n\nconst LETTER_BLOCK_SIZE = 10;\nexport const calculateRowHeaderSize = (itemsLength: number, rowHeaderColumn?: RevoGrid.RowHeaders) => {\n return rowHeaderColumn?.size || (itemsLength.toString().length + 1) * LETTER_BLOCK_SIZE;\n};\n","function isTouch(e: MouseEvent | TouchEvent): e is TouchEvent {\n return !!(e as TouchEvent).touches;\n}\n\nexport function verifyTouchTarget(touchEvent?: Touch, focusClass?: string) {\n if (focusClass && touchEvent) {\n if (!(touchEvent.target instanceof Element && touchEvent.target.classList.contains(focusClass))) { \n return false;\n }\n }\n return true;\n}\n\n\nexport function getFromEvent(\n e: MouseEvent | TouchEvent,\n prop: keyof Pick<Touch, 'clientX' | 'clientY' | 'screenX' | 'screenY'>,\n focusClass?: string // for touch events\n): number | null {\n if (isTouch(e)) {\n if (e.touches.length > 0) {\n const touchEvent = e.touches[0];\n if (!verifyTouchTarget(touchEvent, focusClass)) {\n return null;\n }\n return (touchEvent[prop] as number) || 0;\n }\n return null;\n }\n return e[prop] || 0;\n}\n"],"version":3}
1
+ {"file":"events-344baa2e.js","mappings":"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","names":["getItemByPosition","createStore","setStore"],"sources":["./src/store/viewPort/viewport.helpers.ts","./src/store/viewPort/viewport.store.ts","./src/utils/row-header-utils.ts","./src/utils/events.ts"],"sourcesContent":["import { getItemByPosition } from '../dimension/dimension.helpers';\nimport { RevoGrid } from '../../interfaces';\n\nexport type DimensionDataViewport = Pick<\n RevoGrid.DimensionSettingsState,\n 'indexes' | 'positionIndexes' | 'positionIndexToItem' | 'sizes' | 'originItemSize' | 'realSize'\n>;\n\ntype ItemsToUpdate = Pick<RevoGrid.ViewportStateItems, 'items' | 'start' | 'end'>;\n/**\n * Update items based on new scroll position\n * If viewport wasn't changed fully simple recombination of positions\n * Otherwise rebuild viewport items\n */\nexport function getUpdatedItemsByPosition<T extends ItemsToUpdate>(\n pos: number, // coordinate\n items: T,\n realCount: number,\n virtualSize: number,\n dimension: DimensionDataViewport\n): ItemsToUpdate {\n const activeItem: RevoGrid.PositionItem = getItemByPosition(dimension, pos);\n const firstItem: RevoGrid.PositionItem = getFirstItem(items);\n let toUpdate: ItemsToUpdate;\n // do simple position recombination if items already present in viewport\n if (firstItem) {\n let changedOffsetStart = activeItem.itemIndex - (firstItem.itemIndex || 0);\n // if item changed\n if (changedOffsetStart) {\n // simple recombination\n toUpdate = recombineByOffset(Math.abs(changedOffsetStart), {\n positiveDirection: changedOffsetStart > -1,\n ...dimension,\n ...items,\n });\n }\n }\n\n const maxSizeVirtualSize = getMaxVirtualSize(virtualSize, dimension.realSize, activeItem);\n // if partial recombination add items if revo-viewport has some space left\n if (toUpdate) {\n const extra = addMissingItems(activeItem, realCount, maxSizeVirtualSize, toUpdate, dimension);\n if (extra.length) {\n updateMissingAndRange(toUpdate.items, extra, toUpdate);\n }\n }\n\n // new collection if no items after replacement full replacement\n if (!toUpdate) {\n const items = getItems({\n firstItemStart: activeItem.start,\n firstItemIndex: activeItem.itemIndex,\n origSize: dimension.originItemSize,\n maxSize: maxSizeVirtualSize,\n maxCount: realCount,\n sizes: dimension.sizes,\n });\n\n // range now comes from 0 to length - 1\n toUpdate = {\n items,\n start: 0,\n end: items.length - 1,\n };\n }\n return toUpdate;\n}\n\n// virtual size can differ based on scroll position if some big items are present\n// scroll can be in the middle of item and virtual size will be larger\n// so we need to exclude this part from virtual size hence it's already passed\nfunction getMaxVirtualSize(virtualSize: number, realSize: number, activeItem: RevoGrid.PositionItem) {\n return Math.min(virtualSize + (activeItem.end - activeItem.start), realSize)\n}\n\nexport function updateMissingAndRange(\n items: RevoGrid.VirtualPositionItem[],\n missing: RevoGrid.VirtualPositionItem[],\n range: RevoGrid.Range\n) {\n items.splice(range.end + 1, 0, ...missing);\n // update range if start larger after recombination\n if (range.start >= range.end && !(range.start === range.end && range.start === 0)) {\n range.start += missing.length;\n }\n range.end += missing.length;\n}\n\n/**\n * If partial replacement\n * this function adds items if viewport has some space left\n */\nexport function addMissingItems<T extends ItemsToUpdate>(\n firstItem: RevoGrid.PositionItem,\n realCount: number,\n virtualSize: number,\n existingCollection: T,\n dimension: Pick<RevoGrid.DimensionSettingsState, 'sizes' | 'originItemSize'>,\n): RevoGrid.VirtualPositionItem[] {\n const lastItem: RevoGrid.VirtualPositionItem = getLastItem(existingCollection);\n const items = getItems({\n sizes: dimension.sizes,\n firstItemStart: lastItem.end,\n firstItemIndex: lastItem.itemIndex + 1,\n origSize: dimension.originItemSize,\n maxSize: virtualSize - (lastItem.end - firstItem.start),\n maxCount: realCount,\n });\n return items;\n}\n\n/**\n * Get wiewport items parameters\n * caching position and calculating items count in viewport\n */\nexport function getItems(\n opt: {\n firstItemIndex: number;\n firstItemStart: number;\n origSize: number;\n maxSize: number; // virtual size\n maxCount: number; // real item count, where the last item\n sizes?: RevoGrid.ViewSettingSizeProp;\n },\n currentSize = 0,\n) {\n const items: RevoGrid.VirtualPositionItem[] = [];\n\n let index = opt.firstItemIndex;\n let size = currentSize;\n\n // max size or max count\n while (size <= opt.maxSize && index < opt.maxCount) {\n const newSize = getItemSize(index, opt.sizes, opt.origSize);\n items.push({\n start: opt.firstItemStart + size,\n end: opt.firstItemStart + size + newSize,\n itemIndex: index,\n size: newSize,\n });\n size += newSize;\n index++;\n }\n return items;\n}\n\n/**\n * Do batch items recombination\n * If items not overlapped with existing viewport returns null\n */\ntype RecombindDimensionData = Pick<RevoGrid.DimensionSettingsState, 'sizes' | 'realSize' | 'originItemSize'>;\ntype RecombineOffsetData = {\n positiveDirection: boolean;\n} & ItemsToUpdate & RecombindDimensionData;\nexport function recombineByOffset(\n offset: number,\n data: RecombineOffsetData\n): ItemsToUpdate | null {\n const newItems = [...data.items];\n const itemsCount = newItems.length;\n let newRange = {\n start: data.start,\n end: data.end,\n };\n\n // if offset out of revo-viewport, makes sense whole redraw\n if (offset > itemsCount) {\n return null;\n }\n\n // is direction of scroll positive\n if (data.positiveDirection) {\n // push item to the end\n let lastItem: RevoGrid.VirtualPositionItem = getLastItem(data);\n\n let i: number = newRange.start;\n const length = i + offset;\n for (; i < length; i++) {\n const newIndex: number = lastItem.itemIndex + 1;\n const size: number = getItemSize(newIndex, data.sizes, data.originItemSize);\n\n // if item overlapped limit break a loop\n if (lastItem.end + size > data.realSize) {\n break;\n }\n\n // new item index to recombine\n let newEnd = i % itemsCount;\n\n // item should always present, we do not create new item, we recombine them\n if (!newItems[newEnd]) {\n throw new Error('incorrect index');\n }\n\n // do recombination\n newItems[newEnd] = lastItem = {\n start: lastItem.end,\n end: lastItem.end + size,\n itemIndex: newIndex,\n size: size,\n };\n // update range\n newRange.start++;\n newRange.end = newEnd;\n }\n\n // direction is negative\n } else {\n // push item to the start\n let firstItem: RevoGrid.VirtualPositionItem = getFirstItem(data);\n\n const end = newRange.end;\n for (let i = 0; i < offset; i++) {\n const newIndex: number = firstItem.itemIndex - 1;\n const size: number = getItemSize(newIndex, data.sizes, data.originItemSize);\n\n // new item index to recombine\n let newStart = end - i;\n newStart = (newStart < 0 ? itemsCount + newStart : newStart) % itemsCount;\n\n // item should always present, we do not create new item, we recombine them\n if (!newItems[newStart]) {\n throw new Error('incorrect index');\n }\n\n // do recombination\n newItems[newStart] = firstItem = {\n start: firstItem.start - size,\n end: firstItem.start,\n itemIndex: newIndex,\n size: size,\n };\n // update range\n newRange.start = newStart;\n newRange.end--;\n }\n }\n const range = {\n start: (newRange.start < 0 ? itemsCount + newRange.start : newRange.start) % itemsCount,\n end: (newRange.end < 0 ? itemsCount + newRange.end : newRange.end) % itemsCount,\n };\n return {\n items: newItems,\n ...range,\n };\n}\n\nfunction getItemSize(index: number, sizes?: RevoGrid.ViewSettingSizeProp, origSize: number = 0): number {\n if (sizes && sizes[index]) {\n return sizes[index];\n }\n return origSize;\n}\n\n/**\n * Verify if position is in range of the PositionItem, start and end are included\n */\nexport function isActiveRange(\n pos: number,\n realSize: number,\n first?: RevoGrid.PositionItem,\n last?: RevoGrid.PositionItem\n): boolean {\n if (!first || !last) {\n return false;\n }\n // if position is in range of first item\n // or position is after first item and last item is the last item in real size\n return pos >= first.start && pos <= first.end ||\n pos > first.end && last.end === realSize;\n}\n\nexport function isActiveRangeOutsideLastItem(pos: number, virtualSize: number, firstItem?: RevoGrid.PositionItem, lastItem?: RevoGrid.PositionItem) {\n // if no first item, means no items in viewport\n if (!firstItem) {\n return false;\n }\n return virtualSize + pos > lastItem?.end\n}\n\nexport function getFirstItem(s: ItemsToUpdate): RevoGrid.VirtualPositionItem | undefined {\n return s.items[s.start];\n}\n\nexport function getLastItem(s: ItemsToUpdate): RevoGrid.VirtualPositionItem {\n return s.items[s.end];\n}\n\n/**\n * Set items sizes from start index to end\n * @param vpItems \n * @param start \n * @param size \n * @param lastCoordinate \n * @returns \n */\nexport function setItemSizes(\n vpItems: RevoGrid.VirtualPositionItem[],\n initialIndex: number,\n size: number,\n lastCoordinate: number\n) {\n const items = [...vpItems];\n const count = items.length;\n\n let pos = lastCoordinate;\n let i = 0;\n let start = initialIndex;\n\n // viewport not inited\n if (!count) {\n return [];\n }\n // loop through array from initial item after recombination\n while (i < count) {\n const item = items[start];\n item.start = pos;\n item.size = size;\n item.end = item.start + size;\n pos = item.end;\n // loop by start index\n start++;\n i++;\n\n // if start index out of array, reset it\n if (start === count) {\n start = 0;\n }\n }\n return items;\n}\n","/**\n * Store is responsible for visible\n * Viewport information for each dimension\n * Redraw items during scrolling\n */\n\nimport { createStore } from '@stencil/store';\n\nimport {\n addMissingItems,\n DimensionDataViewport,\n getFirstItem,\n getLastItem,\n getUpdatedItemsByPosition,\n isActiveRange,\n setItemSizes,\n updateMissingAndRange,\n isActiveRangeOutsideLastItem,\n} from './viewport.helpers';\n\nimport { setStore } from '../../utils/store.utils';\nimport { Observable, RevoGrid } from '../../interfaces';\n\nfunction initialState(): RevoGrid.ViewportState {\n return {\n // virtual item information per rendered item\n items: [],\n // virtual dom item order to render\n start: 0,\n\n end: 0,\n\n // size of viewport in px\n virtualSize: 0,\n\n // total number of items\n realCount: 0,\n };\n}\n\nexport default class ViewportStore {\n readonly store: Observable<RevoGrid.ViewportState>;\n // last coordinate for store position restore\n private lastKnownScroll = 0;\n get lastCoordinate() {\n return this.lastKnownScroll;\n }\n private set lastCoordinate(value: number) {\n this.lastKnownScroll = value;\n }\n constructor(readonly type: RevoGrid.MultiDimensionType) {\n this.store = createStore(initialState());\n this.store.onChange('realCount', () => this.clearItems());\n // drop items on virtual size change, require a new item set\n this.store.onChange('virtualSize', () => this.setViewport({ items: [] }));\n }\n\n /**\n * Render viewport based on coordinate\n * It's the main method for draw\n */\n setViewPortCoordinate(position: number, dimension: DimensionDataViewport) {\n const viewportSize = this.store.get('virtualSize');\n // no visible data to calculate\n if (!viewportSize) {\n return;\n }\n\n const frameOffset = 1;\n const singleOffsetInPx = dimension.originItemSize * frameOffset;\n // add offset to virtual size from both sides\n const outsize = singleOffsetInPx * 2;\n // math virtual size is based on visible area + 2 items outside of visible area\n const virtualSize = viewportSize + outsize;\n\n // expected no scroll if real size less than virtual size, position is 0\n let maxCoordinate = 0;\n // if there is nodes outside of viewport, max coordinate has to be adjusted\n if (dimension.realSize > viewportSize) {\n // max coordinate is real size minus virtual/rendered space\n maxCoordinate = dimension.realSize - viewportSize - singleOffsetInPx;\n }\n\n let pos = position;\n // limit position to max and min coordinates\n if (pos < 0) {\n pos = 0;\n } else if (pos > maxCoordinate) {\n pos = maxCoordinate;\n }\n\n // store last coordinate for further restore on redraw\n this.lastCoordinate = pos;\n\n // actual position is less than first item start based on offset\n pos -= singleOffsetInPx;\n pos = pos < 0 ? 0 : pos < maxCoordinate ? pos : maxCoordinate;\n\n const allItems = this.getItems();\n const firstItem: RevoGrid.VirtualPositionItem | undefined = getFirstItem(allItems);\n const lastItem: RevoGrid.VirtualPositionItem | undefined = getLastItem(allItems);\n\n\n let toUpdate: Partial<RevoGrid.ViewportState> = {};\n // left position changed\n // verify if new position is in range of previously rendered first item\n if (!isActiveRange(pos, dimension.realSize, firstItem, lastItem)) {\n toUpdate = {\n ...toUpdate,\n ...getUpdatedItemsByPosition(pos, allItems, this.store.get('realCount'), virtualSize, dimension),\n };\n this.setViewport({ ...toUpdate });\n // verify is render area is outside of last item\n } else if (isActiveRangeOutsideLastItem(pos, virtualSize, firstItem, lastItem)) {\n // check is any item missing for full fill content\n const missing = addMissingItems(firstItem, this.store.get('realCount'), virtualSize + pos - firstItem.start, allItems, dimension);\n\n // update missing items\n if (missing.length) {\n const items = [...this.store.get('items')];\n const range = {\n start: this.store.get('start'),\n end: this.store.get('end'),\n };\n updateMissingAndRange(items, missing, range);\n toUpdate = {\n ...toUpdate,\n items: [...items],\n ...range,\n };\n this.setViewport({ ...toUpdate });\n }\n }\n }\n\n /**\n * Update viewport sizes for existing items\n * This method is generating new item positions based on custom sizes and original sizes\n * @param sizes - custom sizes for each item\n * @param dropToOriginalSize - drop to original size if requested\n */\n setViewPortDimensionSizes(sizes: RevoGrid.ViewSettingSizeProp, dropToOriginalSize?: number) {\n let items = [...this.store.get('items')];\n const count = items.length;\n // viewport not inited\n if (!count) {\n return;\n }\n\n let changedCoordinate = 0;\n let i = 0;\n let start = this.store.get('start');\n\n // drop to original size if requested\n if (dropToOriginalSize) {\n const allItems = this.getItems();\n const firstItem: RevoGrid.VirtualPositionItem | undefined = getFirstItem(allItems);\n items = setItemSizes(items, start, dropToOriginalSize, firstItem.start);\n }\n\n // loop through array from initial item after recombination\n // if size change present, change position for all items after\n while (i < count) {\n const item = items[start];\n // change pos if size change present before\n if (changedCoordinate) {\n item.start += changedCoordinate;\n item.end += changedCoordinate;\n }\n // check if size change present\n const size: number | undefined = sizes[item.itemIndex];\n // size found\n if (size) {\n const changedSize = size - item.size;\n changedCoordinate += changedSize;\n item.size = size;\n item.end = item.start + size;\n // size lost\n }\n\n // loop by start index\n start++;\n i++;\n // if start index out of array, reset it\n if (start === count) {\n start = 0;\n }\n }\n\n this.setViewport({ items: [...items] });\n }\n\n /**\n * Set sizes for existing items\n */\n setOriginalSizes(size: number) {\n const items = this.store.get('items');\n const count = items.length;\n // viewport not inited\n if (!count) {\n return;\n }\n\n setStore(this.store, {\n items: setItemSizes(items, this.store.get('start'), size, this.lastCoordinate),\n });\n }\n\n getItems(): Pick<RevoGrid.ViewportStateItems, 'items' | 'start' | 'end'> {\n return {\n items: this.store.get('items'),\n start: this.store.get('start'),\n end: this.store.get('end'),\n };\n }\n\n setViewport(data: Partial<RevoGrid.ViewportState>) {\n setStore(this.store, data);\n }\n\n clearItems() {\n this.store.set('items', []);\n }\n}\n","import { RevoGrid } from '../interfaces';\n\nconst LETTER_BLOCK_SIZE = 10;\nexport const calculateRowHeaderSize = (itemsLength: number, rowHeaderColumn?: RevoGrid.RowHeaders) => {\n return rowHeaderColumn?.size || (itemsLength.toString().length + 1) * LETTER_BLOCK_SIZE;\n};\n","function isTouch(e: MouseEvent | TouchEvent): e is TouchEvent {\n return !!(e as TouchEvent).touches;\n}\n\nexport function verifyTouchTarget(touchEvent?: Touch, focusClass?: string) {\n if (focusClass && touchEvent) {\n if (!(touchEvent.target instanceof Element && touchEvent.target.classList.contains(focusClass))) { \n return false;\n }\n }\n return true;\n}\n\n\nexport function getFromEvent(\n e: MouseEvent | TouchEvent,\n prop: keyof Pick<Touch, 'clientX' | 'clientY' | 'screenX' | 'screenY'>,\n focusClass?: string // for touch events\n): number | null {\n if (isTouch(e)) {\n if (e.touches.length > 0) {\n const touchEvent = e.touches[0];\n if (!verifyTouchTarget(touchEvent, focusClass)) {\n return null;\n }\n return (touchEvent[prop] as number) || 0;\n }\n return null;\n }\n return e[prop] || 0;\n}\n"],"version":3}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- const index = require('./index-7945f248.js');
6
+ const index = require('./index-c8f9c4ef.js');
7
7
 
8
8
  const FILTER_BUTTON_CLASS = 'rv-filter';
9
9
  const FILTER_BUTTON_ACTIVE = 'active';
@@ -41,4 +41,4 @@ exports.FilterButton = FilterButton;
41
41
  exports.TrashButton = TrashButton;
42
42
  exports.isFilterBtn = isFilterBtn;
43
43
 
44
- //# sourceMappingURL=filter.button-eec12821.js.map
44
+ //# sourceMappingURL=filter.button-71d993fa.js.map
@@ -1 +1 @@
1
- {"file":"filter.button-eec12821.js","mappings":";;;;;;;AAGO,MAAM,mBAAmB,GAAG,WAAW,CAAC;AACxC,MAAM,oBAAoB,GAAG,QAAQ,CAAC;MAChC,WAAW,GAAG,YAAY;AAChC,MAAM,aAAa,GAAG,eAAe,CAAC;AACtC,MAAM,YAAY,GAAG,cAAc,CAAC;MAK9B,YAAY,GAAG,CAAC,EAAE,MAAM,EAAS;EAC5C,QACEA;IACEA,oBACE,KAAK,EAAE;QACL,CAAC,mBAAmB,GAAG,IAAI;QAC3B,CAAC,oBAAoB,GAAG,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;OACxD;MAEDA,iBAAK,KAAK,EAAC,YAAY,EAAC,OAAO,EAAC,WAAW;QACzCA,eAAG,MAAM,EAAC,MAAM,kBAAc,GAAG,EAAC,IAAI,EAAC,MAAM,eAAW,SAAS;UAC/DA,kBAAM,CAAC,EAAC,2GAA2G,EAAC,IAAI,EAAC,cAAc,GAAQ,CAC7I,CACA,CACC,CACJ,EACP;AACJ,EAAE;MAEW,WAAW,GAAG;EACzB,QACEA,iBAAK,KAAK,EAAE,EAAE,CAAC,YAAY,GAAG,IAAI,EAAE;IAClCA,iBAAK,KAAK,EAAC,WAAW,EAAC,OAAO,EAAC,WAAW;MACxCA,kBAAM,IAAI,EAAC,cAAc,EAAC,CAAC,EAAC,8GAA8G,GAAG,CACzI,CACF,EACN;AACJ,EAAE;MACW,WAAW,GAAG,CAAC,EAAE,KAAK,EAAO;EACxC,OAAOA,oBAAQ,KAAK,EAAE,EAAE,CAAC,aAAa,GAAG,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,IAAG,KAAK,GAAG,KAAK,GAAG,IAAI,CAAU,CAAC;AAC9G,EAAE;SAEc,WAAW,CAAC,CAAc;EACxC,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE;IAC7C,OAAO,IAAI,CAAC;GACb;EACD,OAAO,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,OAAO,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC;AAC/C;;;;;;;;","names":["h"],"sources":["./src/plugins/filter/filter.button.tsx"],"sourcesContent":["import { h } from '@stencil/core';\nimport { RevoGrid } from '../../interfaces';\n\nexport const FILTER_BUTTON_CLASS = 'rv-filter';\nexport const FILTER_BUTTON_ACTIVE = 'active';\nexport const FILTER_PROP = 'hasFilter';\nexport const AND_OR_BUTTON = 'and-or-button';\nexport const TRASH_BUTTON = 'trash-button';\n\ntype Props = {\n column: RevoGrid.ColumnRegular;\n};\nexport const FilterButton = ({ column }: Props) => {\n return (\n <span>\n <button\n class={{\n [FILTER_BUTTON_CLASS]: true,\n [FILTER_BUTTON_ACTIVE]: column && !!column[FILTER_PROP],\n }}\n >\n <svg class=\"filter-img\" viewBox=\"0 0 64 64\">\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <path d=\"M43,48 L43,56 L21,56 L21,48 L43,48 Z M53,28 L53,36 L12,36 L12,28 L53,28 Z M64,8 L64,16 L0,16 L0,8 L64,8 Z\" fill=\"currentColor\"></path>\n </g>\n </svg>\n </button>\n </span>\n );\n};\n\nexport const TrashButton = () => {\n return (\n <div class={{ [TRASH_BUTTON]: true }}>\n <svg class=\"trash-img\" viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M9,3V4H4V6H5V19A2,2 0 0,0 7,21H17A2,2 0 0,0 19,19V6H20V4H15V3H9M7,6H17V19H7V6M9,8V17H11V8H9M13,8V17H15V8H13Z\" />\n </svg>\n </div>\n );\n};\nexport const AndOrButton = ({ isAnd }: any) => {\n return <button class={{ [AND_OR_BUTTON]: true, 'light revo-button': true }}>{isAnd ? 'and' : 'or'}</button>;\n};\n\nexport function isFilterBtn(e: HTMLElement) {\n if (e.classList.contains(FILTER_BUTTON_CLASS)) {\n return true;\n }\n return e?.closest(`.${FILTER_BUTTON_CLASS}`);\n}\n"],"version":3}
1
+ {"file":"filter.button-71d993fa.js","mappings":";;;;;;;AAGO,MAAM,mBAAmB,GAAG,WAAW,CAAC;AACxC,MAAM,oBAAoB,GAAG,QAAQ,CAAC;MAChC,WAAW,GAAG,YAAY;AAChC,MAAM,aAAa,GAAG,eAAe,CAAC;AACtC,MAAM,YAAY,GAAG,cAAc,CAAC;MAK9B,YAAY,GAAG,CAAC,EAAE,MAAM,EAAS;EAC5C,QACEA;IACEA,oBACE,KAAK,EAAE;QACL,CAAC,mBAAmB,GAAG,IAAI;QAC3B,CAAC,oBAAoB,GAAG,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;OACxD;MAEDA,iBAAK,KAAK,EAAC,YAAY,EAAC,OAAO,EAAC,WAAW;QACzCA,eAAG,MAAM,EAAC,MAAM,kBAAc,GAAG,EAAC,IAAI,EAAC,MAAM,eAAW,SAAS;UAC/DA,kBAAM,CAAC,EAAC,2GAA2G,EAAC,IAAI,EAAC,cAAc,GAAQ,CAC7I,CACA,CACC,CACJ,EACP;AACJ,EAAE;MAEW,WAAW,GAAG;EACzB,QACEA,iBAAK,KAAK,EAAE,EAAE,CAAC,YAAY,GAAG,IAAI,EAAE;IAClCA,iBAAK,KAAK,EAAC,WAAW,EAAC,OAAO,EAAC,WAAW;MACxCA,kBAAM,IAAI,EAAC,cAAc,EAAC,CAAC,EAAC,8GAA8G,GAAG,CACzI,CACF,EACN;AACJ,EAAE;MACW,WAAW,GAAG,CAAC,EAAE,KAAK,EAAO;EACxC,OAAOA,oBAAQ,KAAK,EAAE,EAAE,CAAC,aAAa,GAAG,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,IAAG,KAAK,GAAG,KAAK,GAAG,IAAI,CAAU,CAAC;AAC9G,EAAE;SAEc,WAAW,CAAC,CAAc;EACxC,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE;IAC7C,OAAO,IAAI,CAAC;GACb;EACD,OAAO,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,OAAO,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC;AAC/C;;;;;;;;","names":["h"],"sources":["./src/plugins/filter/filter.button.tsx"],"sourcesContent":["import { h } from '@stencil/core';\nimport { RevoGrid } from '../../interfaces';\n\nexport const FILTER_BUTTON_CLASS = 'rv-filter';\nexport const FILTER_BUTTON_ACTIVE = 'active';\nexport const FILTER_PROP = 'hasFilter';\nexport const AND_OR_BUTTON = 'and-or-button';\nexport const TRASH_BUTTON = 'trash-button';\n\ntype Props = {\n column: RevoGrid.ColumnRegular;\n};\nexport const FilterButton = ({ column }: Props) => {\n return (\n <span>\n <button\n class={{\n [FILTER_BUTTON_CLASS]: true,\n [FILTER_BUTTON_ACTIVE]: column && !!column[FILTER_PROP],\n }}\n >\n <svg class=\"filter-img\" viewBox=\"0 0 64 64\">\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <path d=\"M43,48 L43,56 L21,56 L21,48 L43,48 Z M53,28 L53,36 L12,36 L12,28 L53,28 Z M64,8 L64,16 L0,16 L0,8 L64,8 Z\" fill=\"currentColor\"></path>\n </g>\n </svg>\n </button>\n </span>\n );\n};\n\nexport const TrashButton = () => {\n return (\n <div class={{ [TRASH_BUTTON]: true }}>\n <svg class=\"trash-img\" viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M9,3V4H4V6H5V19A2,2 0 0,0 7,21H17A2,2 0 0,0 19,19V6H20V4H15V3H9M7,6H17V19H7V6M9,8V17H11V8H9M13,8V17H15V8H13Z\" />\n </svg>\n </div>\n );\n};\nexport const AndOrButton = ({ isAnd }: any) => {\n return <button class={{ [AND_OR_BUTTON]: true, 'light revo-button': true }}>{isAnd ? 'and' : 'or'}</button>;\n};\n\nexport function isFilterBtn(e: HTMLElement) {\n if (e.classList.contains(FILTER_BUTTON_CLASS)) {\n return true;\n }\n return e?.closest(`.${FILTER_BUTTON_CLASS}`);\n}\n"],"version":3}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- const index = require('./index-7945f248.js');
6
+ const index = require('./index-c8f9c4ef.js');
7
7
  const debounce$1 = require('./debounce-f50730b6.js');
8
8
 
9
9
  /**
@@ -3943,4 +3943,4 @@ exports.setStore = setStore;
3943
3943
  exports.timeout = timeout;
3944
3944
  exports.toInteger_1 = toInteger_1;
3945
3945
 
3946
- //# sourceMappingURL=index-449963b8.js.map
3946
+ //# sourceMappingURL=index-1474e4b4.js.map