@revolist/revogrid 4.0.10 → 4.0.12

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 (125) hide show
  1. package/dist/cjs/{column.service-e83d9809.js → column.service-bc269420.js} +23 -9
  2. package/dist/cjs/column.service-bc269420.js.map +1 -0
  3. package/dist/cjs/{events-7ccd6894.js → events-f8893bba.js} +15 -5
  4. package/dist/cjs/events-f8893bba.js.map +1 -0
  5. package/dist/cjs/{header-cell-renderer-8ba9b56d.js → header-cell-renderer-57acd2f7.js} +2 -2
  6. package/dist/cjs/{header-cell-renderer-8ba9b56d.js.map → header-cell-renderer-57acd2f7.js.map} +1 -1
  7. package/dist/cjs/{key.utils-dc4ac217.js → key.utils-59b9b528.js} +13 -1
  8. package/dist/cjs/key.utils-59b9b528.js.map +1 -0
  9. package/dist/cjs/revo-grid.cjs.entry.js +29 -13
  10. package/dist/cjs/revo-grid.cjs.entry.js.map +1 -1
  11. package/dist/cjs/revogr-attribution_6.cjs.entry.js +176 -131
  12. package/dist/cjs/revogr-attribution_6.cjs.entry.js.map +1 -1
  13. package/dist/cjs/revogr-clipboard_3.cjs.entry.js +28 -11
  14. package/dist/cjs/revogr-clipboard_3.cjs.entry.js.map +1 -1
  15. package/dist/cjs/revogr-data_4.cjs.entry.js +2 -2
  16. package/dist/collection/components/data/column.service.js.map +1 -1
  17. package/dist/collection/components/data/revogr-data.js +1 -1
  18. package/dist/collection/components/editors/edit.utils.js +4 -0
  19. package/dist/collection/components/editors/edit.utils.js.map +1 -1
  20. package/dist/collection/components/editors/revogr-edit.js +30 -12
  21. package/dist/collection/components/editors/revogr-edit.js.map +1 -1
  22. package/dist/collection/components/order/revogr-order-editor.js +4 -1
  23. package/dist/collection/components/order/revogr-order-editor.js.map +1 -1
  24. package/dist/collection/components/overlay/autofill.service.js +36 -24
  25. package/dist/collection/components/overlay/autofill.service.js.map +1 -1
  26. package/dist/collection/components/overlay/keyboard.service.js +7 -7
  27. package/dist/collection/components/overlay/keyboard.service.js.map +1 -1
  28. package/dist/collection/components/overlay/revogr-overlay-selection.js +107 -59
  29. package/dist/collection/components/overlay/revogr-overlay-selection.js.map +1 -1
  30. package/dist/collection/components/overlay/selection.utils.js +37 -9
  31. package/dist/collection/components/overlay/selection.utils.js.map +1 -1
  32. package/dist/collection/components/revoGrid/revo-grid-style.css +8 -3
  33. package/dist/collection/components/revoGrid/revo-grid.js +26 -11
  34. package/dist/collection/components/revoGrid/revo-grid.js.map +1 -1
  35. package/dist/collection/components/revoGrid/viewport.helpers.js +22 -8
  36. package/dist/collection/components/revoGrid/viewport.helpers.js.map +1 -1
  37. package/dist/collection/components/revoGrid/viewport.service.js +1 -0
  38. package/dist/collection/components/revoGrid/viewport.service.js.map +1 -1
  39. package/dist/collection/serve/controller.js +86 -18
  40. package/dist/collection/store/selection/index.js +0 -1
  41. package/dist/collection/store/selection/index.js.map +1 -1
  42. package/dist/collection/types/interfaces.js +4 -0
  43. package/dist/collection/types/interfaces.js.map +1 -1
  44. package/dist/collection/types/selection.js.map +1 -1
  45. package/dist/collection/utils/events.js +11 -1
  46. package/dist/collection/utils/events.js.map +1 -1
  47. package/dist/collection/utils/row-header-utils.js +2 -2
  48. package/dist/collection/utils/row-header-utils.js.map +1 -1
  49. package/dist/esm/{column.service-f4922a8d.js → column.service-195345ab.js} +23 -9
  50. package/dist/esm/column.service-195345ab.js.map +1 -0
  51. package/dist/esm/{events-3dd8ee7c.js → events-3e39de50.js} +15 -5
  52. package/dist/esm/events-3e39de50.js.map +1 -0
  53. package/dist/esm/{header-cell-renderer-ac962570.js → header-cell-renderer-7c76465d.js} +2 -2
  54. package/dist/esm/{header-cell-renderer-ac962570.js.map → header-cell-renderer-7c76465d.js.map} +1 -1
  55. package/dist/esm/{key.utils-4586a3d6.js → key.utils-2836e8ae.js} +12 -2
  56. package/dist/esm/key.utils-2836e8ae.js.map +1 -0
  57. package/dist/esm/revo-grid.entry.js +29 -13
  58. package/dist/esm/revo-grid.entry.js.map +1 -1
  59. package/dist/esm/revogr-attribution_6.entry.js +177 -132
  60. package/dist/esm/revogr-attribution_6.entry.js.map +1 -1
  61. package/dist/esm/revogr-clipboard_3.entry.js +28 -11
  62. package/dist/esm/revogr-clipboard_3.entry.js.map +1 -1
  63. package/dist/esm/revogr-data_4.entry.js +2 -2
  64. package/dist/revo-grid/column.service-195345ab.js +5 -0
  65. package/dist/revo-grid/column.service-195345ab.js.map +1 -0
  66. package/dist/revo-grid/{events-3dd8ee7c.js → events-3e39de50.js} +2 -2
  67. package/dist/revo-grid/events-3e39de50.js.map +1 -0
  68. package/dist/revo-grid/{header-cell-renderer-ac962570.js → header-cell-renderer-7c76465d.js} +2 -2
  69. package/dist/revo-grid/key.utils-2836e8ae.js +5 -0
  70. package/dist/revo-grid/key.utils-2836e8ae.js.map +1 -0
  71. package/dist/revo-grid/revo-grid.entry.js +1 -1
  72. package/dist/revo-grid/revo-grid.entry.js.map +1 -1
  73. package/dist/revo-grid/revogr-attribution_6.entry.js +1 -1
  74. package/dist/revo-grid/revogr-attribution_6.entry.js.map +1 -1
  75. package/dist/revo-grid/revogr-clipboard_3.entry.js +1 -1
  76. package/dist/revo-grid/revogr-clipboard_3.entry.js.map +1 -1
  77. package/dist/revo-grid/revogr-data_4.entry.js +1 -1
  78. package/dist/types/components/data/column.service.d.ts +2 -2
  79. package/dist/types/components/editors/edit.utils.d.ts +2 -0
  80. package/dist/types/components/order/revogr-order-editor.d.ts +3 -0
  81. package/dist/types/components/overlay/autofill.service.d.ts +9 -6
  82. package/dist/types/components/overlay/keyboard.service.d.ts +2 -3
  83. package/dist/types/components/overlay/revogr-overlay-selection.d.ts +38 -15
  84. package/dist/types/components/overlay/selection.utils.d.ts +12 -4
  85. package/dist/types/components/revoGrid/revo-grid.d.ts +4 -1
  86. package/dist/types/components/revoGrid/viewport.helpers.d.ts +11 -2
  87. package/dist/types/components.d.ts +26 -2
  88. package/dist/types/store/selection/index.d.ts +0 -1
  89. package/dist/types/types/interfaces.d.ts +444 -23
  90. package/dist/types/types/selection.d.ts +1 -1
  91. package/dist/types/utils/events.d.ts +4 -1
  92. package/dist/types/utils/row-header-utils.d.ts +1 -1
  93. package/hydrate/index.js +296 -179
  94. package/package.json +5 -6
  95. package/standalone/column.service.js.map +1 -1
  96. package/standalone/revo-grid.js +28 -11
  97. package/standalone/revo-grid.js.map +1 -1
  98. package/standalone/revogr-edit2.js +37 -11
  99. package/standalone/revogr-edit2.js.map +1 -1
  100. package/standalone/revogr-focus2.js +1 -1
  101. package/standalone/revogr-order-editor2.js.map +1 -1
  102. package/standalone/revogr-overlay-selection2.js +142 -150
  103. package/standalone/revogr-overlay-selection2.js.map +1 -1
  104. package/standalone/revogr-row-headers2.js +2 -2
  105. package/standalone/revogr-row-headers2.js.map +1 -1
  106. package/standalone/revogr-temp-range2.js +1 -1
  107. package/standalone/revogr-viewport-scroll2.js +22 -8
  108. package/standalone/revogr-viewport-scroll2.js.map +1 -1
  109. package/standalone/selection.utils.js +72 -9
  110. package/standalone/selection.utils.js.map +1 -1
  111. package/dist/cjs/column.service-e83d9809.js.map +0 -1
  112. package/dist/cjs/events-7ccd6894.js.map +0 -1
  113. package/dist/cjs/key.utils-dc4ac217.js.map +0 -1
  114. package/dist/collection/store/selection/selection.store.service.js +0 -39
  115. package/dist/collection/store/selection/selection.store.service.js.map +0 -1
  116. package/dist/esm/column.service-f4922a8d.js.map +0 -1
  117. package/dist/esm/events-3dd8ee7c.js.map +0 -1
  118. package/dist/esm/key.utils-4586a3d6.js.map +0 -1
  119. package/dist/revo-grid/column.service-f4922a8d.js +0 -5
  120. package/dist/revo-grid/column.service-f4922a8d.js.map +0 -1
  121. package/dist/revo-grid/events-3dd8ee7c.js.map +0 -1
  122. package/dist/revo-grid/key.utils-4586a3d6.js +0 -5
  123. package/dist/revo-grid/key.utils-4586a3d6.js.map +0 -1
  124. package/dist/types/store/selection/selection.store.service.d.ts +0 -17
  125. /package/dist/revo-grid/{header-cell-renderer-ac962570.js.map → header-cell-renderer-7c76465d.js.map} +0 -0
@@ -1,44 +1,84 @@
1
1
  import { generateFakeDataObject } from './data.js';
2
2
 
3
+ /**
4
+ * Map of prevented events
5
+ */
3
6
  window.eventsPrevented = {};
7
+
8
+ /**
9
+ * Toggle row headers visibility
10
+ * @param {boolean} isShow - Show row headers if true, hide otherwise
11
+ */
4
12
  window.showRowHeaders = function (isShow) {
5
13
  const grid = document.querySelector('revo-grid');
6
14
  grid.rowHeaders = isShow;
7
15
  };
16
+
17
+ /**
18
+ * Toggle column grouping visibility
19
+ * @param {boolean} isShow - Show column grouping if true, hide otherwise
20
+ */
8
21
  window.showColGrouping = function (isShow) {
9
22
  setData({
10
23
  groupedHeader: isShow,
11
24
  });
12
25
  };
26
+
27
+ /**
28
+ * Set row size
29
+ * @param {number} s - Row size
30
+ */
13
31
  window.setRowSize = function (s) {
14
32
  const grid = document.querySelector('revo-grid');
15
33
  grid.rowSize = s;
16
34
  };
35
+
36
+ /**
37
+ * Start editing cell
38
+ * @param {number} rgRow - Row index
39
+ * @param {string} prop - Column property
40
+ */
17
41
  window.setEdit = function (rgRow, prop) {
18
42
  const grid = document.querySelector('revo-grid');
19
43
  grid.setCellEdit(rgRow, prop);
20
44
  };
45
+
46
+ /**
47
+ * Scroll to column
48
+ * @param {number} [x=30] - Column index
49
+ */
21
50
  window.scrollToCol = function (x = 30) {
22
51
  const grid = document.querySelector('revo-grid');
23
52
  grid.scrollToColumnProp(x);
24
53
  };
54
+
55
+ /**
56
+ * Clear grouping
57
+ */
25
58
  window.clearGrouping = function () {
26
59
  const grid = document.querySelector('revo-grid');
27
60
  grid.grouping = {};
28
61
  };
29
62
 
30
- // Row group
31
- window.setGrouping = function (
32
- props = [],
33
- expandedAll = false,
34
- ) {
63
+ /**
64
+ * Set row grouping
65
+ * @param {Array} props - Array of properties to group by
66
+ * @param {boolean} expandedAll - Expand all groups if true, collapse otherwise
67
+ */
68
+ window.setGrouping = function (props = [], expandedAll = false) {
35
69
  const grid = document.querySelector('revo-grid');
36
70
  grid.grouping = {
37
71
  props,
38
72
  expandedAll,
39
- groupLabelTemplate: (createElement, { name, depth }) => createElement('span', null, ` ${props[depth]}: ${name}`),
73
+ groupLabelTemplate: (createElement, { name, depth }) =>
74
+ createElement('span', null, ` ${props[depth]}: ${name}`),
40
75
  };
41
76
  };
77
+
78
+ /**
79
+ * Set trimmed rows
80
+ * @param {Array} rows - Array of row indexes to trim
81
+ */
42
82
  window.setTrimmed = function (rows = []) {
43
83
  const grid = document.querySelector('revo-grid');
44
84
  grid.trimmedRows = rows.reduce((r, v) => {
@@ -47,6 +87,10 @@ window.setTrimmed = function (rows = []) {
47
87
  }, {});
48
88
  };
49
89
 
90
+ /**
91
+ * Export grid
92
+ * @param {string} [filename='new file'] - File name
93
+ */
50
94
  window.exportGrid = function (filename = 'new file') {
51
95
  const grid = document.querySelector('revo-grid');
52
96
  grid.getPlugins().then(plugins => {
@@ -66,9 +110,12 @@ let defaultData = {
66
110
  bottomPinned: [],
67
111
  colPinEnd: [],
68
112
  colPinStart: [],
69
- // groupedHeader: true,
70
- // order: 5
71
113
  };
114
+
115
+ /**
116
+ * Set data
117
+ * @param {Object} [config={}] - Data configuration
118
+ */
72
119
  window.setData = function (config = {}) {
73
120
  defaultData = { ...defaultData, ...config };
74
121
  const $loader = document.querySelector('.loader');
@@ -85,6 +132,12 @@ window.setData = function (config = {}) {
85
132
  $loader.style.display = 'none';
86
133
  }, 0);
87
134
  };
135
+
136
+ /**
137
+ * Set pinned rows/columns
138
+ * @param {string} type - Type of pinned rows/columns
139
+ * @param {boolean} checked - True if rows/columns are pinned, false otherwise
140
+ */
88
141
  window.setPinned = function (type, checked) {
89
142
  const val = [];
90
143
  if (checked) {
@@ -108,12 +161,22 @@ window.setPinned = function (type, checked) {
108
161
  });
109
162
  };
110
163
 
111
- // prevent event debug
164
+ /**
165
+ * Prevent event debug
166
+ * @param {string} name - Event name
167
+ * @param {boolean} checked - True if event should be prevented, false otherwise
168
+ */
112
169
  window.preventEvent = function (name, checked) {
113
170
  eventsPrevented[name] = checked;
114
171
  };
172
+
115
173
  let keys = 2;
116
174
  let attrs = {};
175
+
176
+ /**
177
+ * Toggle visibility of grid
178
+ * @param {boolean} checked - True if grid is visible, false otherwise
179
+ */
117
180
  window.toggleVisibility = function (checked) {
118
181
  if (!checked) {
119
182
  const grid = document.querySelector('revo-grid');
@@ -141,6 +204,12 @@ window.toggleVisibility = function (checked) {
141
204
  };
142
205
 
143
206
  let timerUpdateInterval;
207
+
208
+ /**
209
+ * Toggle timer update
210
+ * @param {boolean} checked - True if timer should be updated, false otherwise
211
+ * @param {number} [inteval=3] - Update interval in seconds
212
+ */
144
213
  window.timerUpdate = function (checked, inteval = 3) {
145
214
  clearInterval(timerUpdateInterval);
146
215
  if (checked) {
@@ -151,6 +220,10 @@ window.timerUpdate = function (checked, inteval = 3) {
151
220
  }
152
221
  };
153
222
 
223
+ /**
224
+ * Set theme
225
+ * @param {string} theme - Theme name
226
+ */
154
227
  window.theme = function (theme) {
155
228
  const grid = document.querySelector('revo-grid');
156
229
  if (theme && theme.indexOf('dark') > -1) {
@@ -163,6 +236,9 @@ window.theme = function (theme) {
163
236
 
164
237
  window.onload = onLoad;
165
238
 
239
+ /**
240
+ * On load function
241
+ */
166
242
  function onLoad() {
167
243
  const grid = document.querySelector('revo-grid');
168
244
 
@@ -199,21 +275,13 @@ function onLoad() {
199
275
  grid.filter = true;
200
276
  grid.exporting = true;
201
277
  grid.rowHeaders = true;
202
- grid.rowDefinitions = [
203
- {
204
- type: 'rgRow',
205
- index: 1,
206
- size: 100,
207
- },
208
- ];
209
- grid.rowClass = 'row-style';
210
278
  // grid.stretch = true;
211
279
  /*
212
280
  grid.autoSizeColumn = {
213
281
  mode: 'autoSizeAll',
214
282
  };*/
215
283
  // default
216
- setData({ rows: 1000, cols: 1000 });
284
+ setData({ rows: 100, cols: 2 });
217
285
 
218
286
  // events testing
219
287
  // 'beforerange', 'setRange', 'beforefocuslost', 'beforecellfocus', 'afterfocus', 'beforeedit', 'aftercolumnresize'
@@ -3,5 +3,4 @@
3
3
  */
4
4
  export * from './selection.store';
5
5
  export * from './selection.helpers';
6
- export * from './selection.store.service';
7
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/store/selection/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC","sourcesContent":["export * from './selection.store';\nexport * from './selection.helpers';\nexport * from './selection.store.service';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/store/selection/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC","sourcesContent":["export * from './selection.store';\nexport * from './selection.helpers';\n\n"]}
@@ -1,2 +1,6 @@
1
+ /*!
2
+ * Built by Revolist OU ❤️
3
+ */
4
+ ;
1
5
  export {};
2
6
  //# sourceMappingURL=interfaces.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/types/interfaces.ts"],"names":[],"mappings":"","sourcesContent":["/* eslint-disable */\n/* tslint:disable */\n// @ts-ignore\nimport { VNode } from '@stencil/core';\n// @ts-ignore\nimport { ObservableMap, Subscription } from '@stencil/store';\n\nimport {\n DimensionCols,\n DimensionRows,\n DimensionColPin,\n DimensionType,\n MultiDimensionType,\n} from './dimension';\nimport {\n Cell,\n EditorCtr,\n FocusedCells,\n RangeArea,\n SelectionStoreState,\n} from './selection';\n\nexport type Observable<T> = ObservableMap<T>;\nexport type PluginSubscribe<T> = Subscription<T>;\n\nexport type ColumnDataSchemaModel = {\n // Column prop used for mapping value to cell from data source model/row\n prop: ColumnProp;\n // Row data object\n model: DataType;\n // Column data object\n column: ColumnRegular;\n rowIndex: number;\n colIndex: number;\n // Column type based on viewport\n colType: DimensionCols;\n // Row type based on viewport\n type: DimensionRows;\n // Row models based on viewport\n data: DataSource;\n // Current cell data\n value: any;\n};\nexport type CellTemplateProp = {\n providers: Providers;\n} & ColumnDataSchemaModel;\nexport type ReadOnlyFormat =\n | boolean\n | ((params: ColumnDataSchemaModel) => boolean);\nexport type RowDrag =\n | boolean\n | {\n (params: ColumnDataSchemaModel): boolean;\n };\nexport interface ColumnGrouping {\n children: ColumnDataSchema[];\n name: DataFormat;\n}\nexport interface ColumnProperties {\n /** column inner template */\n columnTemplate?: ColumnTemplateFunc;\n /** cell properties */\n columnProperties?: ColPropertiesFunc;\n}\nexport type ColumnTypes = {\n [name: string]: ColumnType;\n};\nexport interface CellTemplate {\n // TODO: Add Promise support for template and all custom function so user will be able to use async render on the light speed\n (\n createElement: HyperFunc<VNode>,\n props: CellTemplateProp,\n additionalData?: any,\n ): any;\n}\nexport interface ColumnType extends ColumnProperties {\n /** is column or cell readonly */\n readonly?: ReadOnlyFormat;\n /** default column size */\n size?: number;\n /**\n * minimal column size\n * this property can not be less than cell padding\n * in order to keep performance on top and minimize dom elements number\n */\n minSize?: number;\n /** max column size */\n maxSize?: number;\n /** represents custom editor defined in @editors property */\n editor?: string | EditorCtr;\n /** cell properties */\n cellProperties?: PropertiesFunc;\n /** cell inner template, now template is async */\n cellTemplate?: CellTemplate;\n /** cell compare function */\n cellCompare?: CellCompareFunc;\n}\nexport type Order = 'asc' | 'desc' | undefined;\nexport interface ColumnRegular extends ColumnType {\n // mapping to data, it's object keys/props, @required used for indexing\n prop: ColumnProp;\n // column pin 'colPinStart'|'colPinEnd'\n pin?: DimensionColPin;\n // column header\n name?: DataFormat;\n // column size would be changed based on content size\n autoSize?: boolean;\n // filter\n filter?: boolean | string | string[];\n // is column can be sorted, check @cellCompare function for custom sorting\n sortable?: boolean;\n // sort order\n order?: Order;\n // is cell in column or individual can be dragged\n rowDrag?: RowDrag;\n // represents type defined in @columnTypes property\n columnType?: string;\n // called before column applied to the store\n beforeSetup?(rgCol: ColumnRegular): void;\n // other keys\n [key: string]: any;\n}\nexport type ColumnDataSchema = ColumnGrouping | ColumnRegular;\nexport type ColumnData = ColumnDataSchema[];\nexport type ColumnTemplateProp = ColumnRegular & {\n providers: Providers<DimensionCols | 'rowHeaders'>;\n index: number;\n};\nexport type ColumnPropProp = ColumnGrouping | ColumnTemplateProp;\n// Regularly all column are indexed by prop\nexport type ColumnProp = string | number;\nexport type DataFormat = any;\nexport type CellProp = string | number | object | boolean | undefined;\nexport type CellProps = {\n style?: {\n [key: string]: string | undefined;\n };\n class?:\n | {\n [key: string]: boolean;\n }\n | string;\n [attr: string]: CellProp;\n};\n/**\n * Providers for grid which are going to be injected into each cell template\n */\nexport type Providers<T = DimensionRows> = {\n // dimension type\n type: T;\n // is grid in readonly mode\n readonly: boolean;\n // data source store\n data: Observable<DataSourceState<any, any>> | ColumnRegular[];\n // viewport store\n viewport: Observable<ViewportState>;\n // dimension store\n dimension: Observable<DimensionSettingsState>;\n // selection store\n selection: Observable<SelectionStoreState>;\n};\nexport interface HyperFunc<T> {\n (tag: any): T;\n}\nexport interface HyperFunc<T> {\n (tag: any, data: any): T;\n}\nexport interface HyperFunc<T> {\n (tag: any, text: string): T;\n}\nexport interface HyperFunc<T> {\n (sel: any, children: Array<T | undefined | null>): T;\n}\nexport interface HyperFunc<T> {\n (sel: any, data: any, text: string): T;\n}\nexport interface HyperFunc<T> {\n (sel: any, data: any, children: Array<T | undefined | null>): T;\n}\nexport interface HyperFunc<T> {\n (sel: any, data: any, children: T): T;\n}\nexport type FocusTemplateFunc = (\n createElement: HyperFunc<VNode>,\n detail: FocusRenderEvent,\n) => any;\nexport type CellCompareFunc = (\n prop: ColumnProp,\n a: DataType,\n b: DataType,\n) => number;\nexport type ColumnTemplateFunc = (\n createElement: HyperFunc<VNode>,\n props: ColumnTemplateProp,\n additionalData?: any,\n) => any;\nexport type PropertiesFunc = (\n props: ColumnDataSchemaModel,\n) => CellProps | void | undefined;\nexport type ColPropertiesFunc = (\n props: ColumnPropProp,\n) => CellProps | void | undefined;\nexport type DataType = {\n [T in ColumnProp]: DataFormat;\n};\nexport type DataSource = DataType[];\nexport type DataLookup = {\n [rowIndex: number]: DataType;\n};\nexport type RowDefinition = {\n type: DimensionRows;\n size: number;\n index: number;\n};\nexport interface RowHeaders extends ColumnRegular {}\nexport type ViewPortResizeEvent = {\n dimension: DimensionType;\n size: number;\n rowHeader?: boolean;\n};\nexport type ViewPortScrollEvent = {\n dimension: DimensionType;\n coordinate: number;\n delta?: number;\n outside?: boolean;\n};\nexport type InitialHeaderClick = {\n index: number;\n originalEvent: MouseEvent;\n column: ColumnRegular;\n};\nexport type Range = {\n start: number;\n end: number;\n};\nexport type ViewportStateItems = {\n items: VirtualPositionItem[];\n} & Range;\nexport interface ViewportState extends ViewportStateItems {\n realCount: number;\n virtualSize: number;\n}\nexport type ViewSettingSizeProp = Record<string, number>;\nexport interface VirtualPositionItem extends PositionItem {\n size: number;\n}\nexport type DataSourceState<\n T extends DataType | ColumnRegular,\n ST extends DimensionRows | DimensionCols,\n> = {\n // items - index based array for mapping to source tree\n items: number[];\n // all items, used as proxy for sorting, trimming and others manipulations\n proxyItems: number[];\n // original data source\n source: T[];\n // grouping\n groupingDepth: number;\n groups: Record<any, any>;\n // data source type\n type: ST;\n // trim data, to hide entities from visible data source\n trimmed: Record<any, any>;\n};\nexport interface PositionItem {\n itemIndex: number;\n start: number;\n end: number;\n}\nexport interface DimensionCalc {\n indexes: number[];\n count: number;\n positionIndexes: number[];\n positionIndexToItem: {\n [position: number]: PositionItem;\n };\n indexToItem: {\n [index: number]: PositionItem;\n };\n trimmed: Record<any, any>;\n sizes: ViewSettingSizeProp;\n}\nexport interface DimensionSettingsState extends DimensionCalc {\n realSize: number;\n originItemSize: number;\n}\n\nexport type DimensionStores = {\n [T in MultiDimensionType]: Observable<DimensionSettingsState>;\n};\n\nexport type ViewportStores = {\n [T in MultiDimensionType]: Observable<ViewportState>;\n};\n\nexport type DragStartEvent = {\n originalEvent: MouseEvent;\n model: ColumnDataSchemaModel;\n};\n\nexport interface BeforeCellRenderEvent<T = any> extends AllDimensionType {\n column: VirtualPositionItem;\n row: VirtualPositionItem;\n model: T;\n}\n\nexport interface BeforeRowRenderEvent<T = any> extends AllDimensionType {\n dataItem: T;\n item: VirtualPositionItem;\n node: VNode;\n}\n\nexport type AfterRendererEvent = {\n type: DimensionType;\n};\n\nexport interface AllDimensionType {\n rowType: DimensionRows;\n colType: DimensionCols;\n}\n\nexport type ApplyFocusEvent = AllDimensionType & FocusedCells;\nexport interface FocusRenderEvent extends AllDimensionType {\n range: RangeArea;\n next?: Partial<Cell>;\n}\nexport type ScrollCoordinateEvent = {\n type: DimensionType;\n coordinate: number;\n};\n"]}
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/types/interfaces.ts"],"names":[],"mappings":"AA2PC,CAAC","sourcesContent":["/* eslint-disable */\n/* tslint:disable */\n// @ts-ignore\nimport { VNode } from '@stencil/core';\n// @ts-ignore\nimport { ObservableMap, Subscription } from '@stencil/store';\n\nimport {\n DimensionCols,\n DimensionRows,\n DimensionColPin,\n DimensionType,\n MultiDimensionType,\n} from './dimension';\nimport {\n Cell,\n EditorCtr,\n FocusedCells,\n RangeArea,\n SelectionStoreState,\n} from './selection';\n\nexport type Observable<T> = ObservableMap<T>;\nexport type PluginSubscribe<T> = Subscription<T>;\n\nexport type ColumnDataSchemaModel = {\n /**\n * Column prop used for mapping value to cell from data source model/row\n */\n prop: ColumnProp;\n /**\n * Row data object\n */\n model: DataType;\n /**\n * Column data object\n */\n column: ColumnRegular;\n /**\n * Index of the row in the viewport\n */\n rowIndex: number;\n /**\n * Index of the column in the viewport\n */\n colIndex: number;\n /**\n * Column type based on viewport\n */\n colType: DimensionCols;\n /**\n * Row type based on viewport\n */\n type: DimensionRows;\n /**\n * Row models based on viewport\n */\n data: DataType[];\n /**\n * Current cell data\n */\n value: any;\n};\n/**\n * Template property for each cell, extends the column data schema model.\n * Additionally, it provides access to the providers injected into the template.\n */\nexport interface CellTemplateProp extends ColumnDataSchemaModel {\n /**\n * Providers injected into the template\n */\n providers: Providers;\n}\n/**\n * The ReadOnlyFormat type is a boolean value or a function that takes ColumnDataSchemaModel\n * as a parameter and returns a boolean value.\n *\n * If it is a boolean value, it represents whether the cell in question is read-only.\n * If it is a function, it returns whether the cell in question is read-only based on the provided\n * ColumnDataSchemaModel.\n */\nexport type ReadOnlyFormat =\n | boolean\n | ((params: ColumnDataSchemaModel) => boolean);\nexport type RowDrag =\n | boolean\n | {\n (params: ColumnDataSchemaModel): boolean;\n };\n/**\n * `ColumnGrouping` type is used to define a grouping in a column.\n */\nexport type ColumnGrouping = {\n /**\n * An array of `ColumnDataSchema` objects that represent the children of the grouping.\n */\n children: ColumnDataSchema[];\n /**\n * A `DataFormat` object that represents the name of the grouping.\n */\n name: DataFormat;\n};\n/**\n * Configuration for header inner template properties\n */\nexport interface ColumnProperties {\n /**\n * Header inner template\n * Function/component to render custom header content\n */\n columnTemplate?: ColumnTemplateFunc;\n /**\n * Header Cell properties\n * Custom function/component to render header properties\n */\n columnProperties?: ColPropertiesFunc;\n}\n/**\n * Type that represents a collection of column types.\n * The keys are the names of the column types and the values are the corresponding column type objects.\n */\nexport type ColumnTypes = {\n /**\n * The name of the column type.\n */\n [name: string]: ColumnType;\n};\nexport interface CellTemplate {\n // TODO: Add Promise support for template and all custom function so user will be able to use async render on the light speed\n (\n createElement: HyperFunc<VNode>,\n props: CellTemplateProp,\n additionalData?: any,\n ): any;\n}\n/**\n * Interface for regular column definition.\n * Regular column can be any column that is not a grouping column.\n */\nexport interface ColumnType extends ColumnProperties {\n /**\n * Represents whether the column or cell is read-only.\n * Can be a boolean or a function that returns a boolean.\n * The function receives column data as a parameter.\n */\n readonly?: ReadOnlyFormat;\n /**\n * Represents the default column size.\n */\n size?: number;\n /**\n * Represents the minimal column size.\n * This property cannot be less than cell padding\n * in order to keep performance on top and minimize DOM elements number.\n */\n minSize?: number;\n /**\n * Represents the maximum column size.\n */\n maxSize?: number;\n /**\n * Represents a custom editor defined in @editors property.\n * Can be a string or an editor constructor function.\n */\n editor?: string | EditorCtr;\n /**\n * Represents cell properties for custom styling, classes, and events.\n */\n cellProperties?: PropertiesFunc;\n /**\n * Represents the cell template for custom rendering.\n */\n cellTemplate?: CellTemplate;\n /**\n * Represents the cell compare function for custom sorting.\n */\n cellCompare?: CellCompareFunc;\n}\nexport type Order = 'asc' | 'desc' | undefined;\n/**\n * Interface for regular column definition.\n * Regular column can be any column that is not a grouping column.\n * \n */\n/**\n * ColumnRegular interface represents regular column definition.\n * Regular column can be any column that is not a grouping column.\n */\nexport interface ColumnRegular extends ColumnType {\n /**\n * Column prop used for mapping value to cell from data source model/row, used for indexing.\n */\n prop: ColumnProp;\n /**\n * Column pin 'colPinStart'|'colPinEnd'.\n */\n pin?: DimensionColPin;\n /**\n * Column header text.\n */\n name?: DataFormat;\n /**\n * Column size would be changed based on space left.\n */\n autoSize?: boolean;\n /**\n * Filter. Require filter plugin to be installed and activated through grid config @filter.\n */\n filter?: boolean | string | string[];\n /**\n * Is column can be sorted, check @cellCompare function for custom sorting.\n */\n sortable?: boolean;\n /**\n * Sort order.\n */\n order?: Order;\n /**\n * Is cell in column or individual can be dragged.\n */\n rowDrag?: RowDrag;\n /**\n * Represents type defined in @columnTypes property through grid config.\n */\n columnType?: string;\n /**\n * Function called before column applied to the store.\n */\n beforeSetup?(rgCol: ColumnRegular): void;\n /**\n * Additional properties can be added to the column definition.\n */\n [key: string]: any;\n}\n\nexport type ColumnDataSchema = ColumnGrouping | ColumnRegular;\n\nexport type ColumnData = ColumnDataSchema[];\n/**\n * Column template property.\n * Contains extended properties for column.\n */\nexport interface ColumnTemplateProp extends ColumnRegular {\n /**\n * Providers injected into the template.\n */\n providers: Providers<DimensionCols | 'rowHeaders'>;\n /**\n * Index of the column, used for mapping value to cell from data source model/row.\n */\n index: number;\n};\n\nexport type ColumnPropProp = ColumnGrouping | ColumnTemplateProp;\n// Column prop used for mapping value to cell from data source model/row, used for indexing.\nexport type ColumnProp = string | number;\n\nexport type DataFormat = any;\n\nexport type CellProp = string | number | object | boolean | undefined;\n\n/**\n * Additional properties applied to the cell.\n * Contains style object where key is CSS property and value is CSS property value.\n * Contains class object where key is CSS class and value is boolean flag indicating if class should be applied.\n * Contains additional properties for custom cell rendering.\n */\nexport type CellProps = {\n // CSS styles applied to the cell\n style?: {\n [key: string]: string | undefined;\n };\n // CSS classes applied to the cell\n class?:\n | {\n // CSS class name\n [key: string]: boolean;\n }\n | string;\n // Additional properties for custom cell rendering\n [attr: string]: CellProp;\n};\n\n/**\n * Providers for grid which are going to be injected into each cell template\n */\nexport type Providers<T = DimensionRows> = {\n /**\n * Dimension type (e.g. row or column)\n */\n type: T;\n /**\n * Flag indicating if grid is in readonly mode\n */\n readonly: boolean;\n /**\n * Data source store\n */\n data: Observable<DataSourceState<any, any>> | ColumnRegular[];\n /**\n * Viewport store\n */\n viewport: Observable<ViewportState>;\n /**\n * Dimension store\n */\n dimension: Observable<DimensionSettingsState>;\n /**\n * Selection store\n */\n selection: Observable<SelectionStoreState>;\n};\n/**\n * `HyperFunc` is a function that takes an HTML tag or component, and returns a\n * JSX element. This function is used to create JSX elements in a context where\n * JSX is not valid.\n */\nexport interface HyperFunc<T> {\n // (tag: any): T;\n (tag: any): T;\n}\n/**\n * `HyperFunc` is a function that takes an HTML tag or component, and returns a\n * JSX element. This function is used to create JSX elements in a context where\n * JSX is not valid.\n */\nexport interface HyperFunc<T> {\n (tag: any, data: any): T;\n}\n/**\n * `HyperFunc` is a function that takes an HTML tag or component, and returns a\n * JSX element. This function is used to create JSX elements in a context where\n * JSX is not valid.\n */\nexport interface HyperFunc<T> {\n (tag: any, text: string): T;\n}\n\n/**\n * `HyperFunc` is a function that takes an HTML tag or component, and returns a\n * JSX element. This function is used to create JSX elements in a context where\n * JSX is not valid.\n */\nexport interface HyperFunc<T> {\n (sel: any, children: Array<T | undefined | null>): T;\n}\n\n/**\n * `HyperFunc` is a function that takes an HTML tag or component, and returns a\n * JSX element. This function is used to create JSX elements in a context where\n * JSX is not valid.\n */\nexport interface HyperFunc<T> {\n (sel: any, data: any, text: string): T;\n}\n\n/**\n * `HyperFunc` is a function that takes an HTML tag or component, and returns a\n * JSX element. This function is used to create JSX elements in a context where\n * JSX is not valid.\n */\nexport interface HyperFunc<T> {\n (sel: any, data: any, children: Array<T | undefined | null>): T;\n}\n\n/**\n * `HyperFunc` is a function that takes an HTML tag or component, and returns a\n * JSX element. This function is used to create JSX elements in a context where\n * JSX is not valid.\n */\nexport interface HyperFunc<T> {\n (sel: any, data: any, children: T): T;\n}\n/**\n * `FocusTemplateFunc` is a function that takes an HTML tag or component, and\n * returns a JSX element. This function is used to create JSX elements in a\n * context where JSX is not valid.\n */\nexport type FocusTemplateFunc = (\n createElement: HyperFunc<VNode>,\n detail: FocusRenderEvent,\n) => any;\n\n\n/**\n * `CellCompareFunc` is a function that takes the column property to compare,\n * the data of the first cell, and the data of the second cell. It returns a\n * number indicating the relative order of the two cells.\n */\nexport type CellCompareFunc = (\n // The column property to compare.\n prop: ColumnProp,\n // The data of the first cell.\n a: DataType,\n // The data of the second cell.\n b: DataType,\n) => number;\nexport type ColumnTemplateFunc = (\n createElement: HyperFunc<VNode>,\n props: ColumnTemplateProp,\n additionalData?: any,\n) => any;\nexport type PropertiesFunc = (\n props: ColumnDataSchemaModel,\n) => CellProps | void | undefined;\nexport type ColPropertiesFunc = (\n props: ColumnPropProp,\n) => CellProps | void | undefined;\nexport type DataType = {\n [T in ColumnProp]: DataFormat;\n};\n\nexport type DataLookup = {\n [rowIndex: number]: DataType;\n};\n/**\n * `RowDefinition` is a type that represents a row definition in the\n * viewport.\n */\nexport type RowDefinition = {\n /**\n * The type of the row.\n */\n type: DimensionRows;\n /**\n * The size of the row.\n */\n size: number;\n /**\n * The index of the row.\n */\n index: number;\n};\nexport interface RowHeaders extends ColumnRegular {}\n/**\n * `ViewPortResizeEvent` is an object that contains information about a resize\n * event in the viewport.\n */\nexport type ViewPortResizeEvent = {\n /* The dimension of the viewport being resized. */\n dimension: DimensionType;\n /* The new size of the viewport. */\n size: number;\n /* Indicates whether the resize event is for a row header. */\n rowHeader?: boolean;\n};\n\n/**\n * `ViewPortScrollEvent` is an object that contains information about a scroll\n * event in the viewport.\n */\nexport type ViewPortScrollEvent = {\n /**\n * The dimension of the viewport being scrolled.\n */\n dimension: DimensionType;\n /**\n * The coordinate of the scroll event.\n */\n coordinate: number;\n /**\n * The change in coordinate between scroll events.\n */\n delta?: number;\n /**\n * Indicates whether the scroll event occurred outside the viewport.\n */\n outside?: boolean;\n};\n\n/**\n * `InitialHeaderClick` represents the information needed to handle a click\n * event on the initial column header.\n */\nexport type InitialHeaderClick = {\n /**\n * The index of the column header that was clicked.\n */\n index: number;\n /**\n * The original mouse event that triggered the click.\n */\n originalEvent: MouseEvent;\n /**\n * The column that was clicked.\n */\n column: ColumnRegular;\n};\n\n/**\n * `Range` is an object that represents a range of values.\n */\nexport type Range = {\n /**\n * The start of the range.\n */\n start: number;\n /**\n * The end of the range.\n */\n end: number;\n};\n\n/**\n * `ViewportStateItems` is an object that represents the items in a viewport\n * along with their corresponding range.\n */\nexport type ViewportStateItems = {\n /**\n * The items in the viewport.\n */\n items: VirtualPositionItem[];\n} & Range;\n\n/**\n * `ViewportState` is an object that represents the state of a viewport.\n */\nexport interface ViewportState extends ViewportStateItems {\n /**\n * The number of real items in the viewport.\n */\n realCount: number;\n /**\n * The virtual size of the viewport.\n */\n virtualSize: number;\n}\n\n/**\n * `ViewSettingSizeProp` is a record that maps column or row indexes to their\n * corresponding sizes.\n */\nexport type ViewSettingSizeProp = Record<string, number>;\n\n/**\n * `VirtualPositionItem` is an object that represents a virtual position item\n * in the viewport.\n */\nexport interface VirtualPositionItem extends PositionItem {\n /**\n * The size of the virtual position item.\n */\n size: number;\n}\nexport type DataSourceState<\n T extends DataType | ColumnRegular,\n ST extends DimensionRows | DimensionCols,\n> = {\n // items - index based array for mapping to source tree\n items: number[];\n // all items, used as proxy for sorting, trimming and others manipulations\n proxyItems: number[];\n // original data source\n source: T[];\n // grouping\n groupingDepth: number;\n groups: Record<any, any>;\n // data source type\n type: ST;\n // trim data, to hide entities from visible data source\n trimmed: Record<any, any>;\n};\nexport interface PositionItem {\n itemIndex: number;\n start: number;\n end: number;\n}\n/**\n * Object containing information about calculated dimensions.\n * Used for both columns and rows.\n */\nexport interface DimensionCalc {\n /**\n * Array of indexes of visible items.\n */\n indexes: number[];\n\n /**\n * Count of visible items.\n */\n count: number;\n\n /**\n * Array of indexes of visible items.\n * Used for mapping items to their position in DOM.\n */\n positionIndexes: number[];\n\n /**\n * Mapping of position to item.\n * Used for mapping position in DOM to item.\n */\n positionIndexToItem: {\n /**\n * Position in DOM.\n */\n [position: number]: PositionItem;\n };\n\n /**\n * Mapping of index to item.\n * Used for mapping index in data source to item.\n */\n indexToItem: {\n /**\n * Index in data source.\n */\n [index: number]: PositionItem;\n };\n\n /**\n * Object containing information about trimmed data.\n * Used for hiding entities from visible data source.\n */\n trimmed: Record<any, any>;\n\n /**\n * Object containing size for each visible item.\n */\n sizes: ViewSettingSizeProp;\n}\n/**\n * Represents the settings state of a dimension.\n * It extends the calculation properties of a dimension.\n * It also includes the real size and origin item size of the dimension.\n */\nexport interface DimensionSettingsState extends DimensionCalc {\n /**\n * Represents the real size of the dimension.\n */\n realSize: number;\n\n /**\n * Represents the origin item size of the dimension.\n */\n originItemSize: number;\n}\n\n/**\n * Represents the mapping of dimension types to their corresponding observable stores.\n */\nexport type DimensionStores = {\n [T in MultiDimensionType]: Observable<DimensionSettingsState>;\n};\n\n/**\n * Represents the mapping of dimension types to their corresponding observable stores for the viewport.\n */\nexport type ViewportStores = {\n [T in MultiDimensionType]: Observable<ViewportState>;\n};\n\n/**\n * Represents the event object that is emitted when the drag operation starts.\n */\nexport interface DragStartEvent {\n /**\n * Represents the original mouse event that triggered the drag operation.\n */\n originalEvent: MouseEvent;\n\n /**\n * Represents the model of the column being dragged.\n */\n model: ColumnDataSchemaModel;\n}\n\n/**\n * Represents the event object that is emitted before cell rendering.\n * It includes information about the dimension type, column, row, and model.\n */\nexport interface BeforeCellRenderEvent<T = any> extends AllDimensionType {\n /**\n * Represents the column being rendered.\n */\n column: VirtualPositionItem;\n\n /**\n * Represents the row being rendered.\n */\n row: VirtualPositionItem;\n\n /**\n * Represents the model being rendered.\n */\n model: T;\n}\n\n/**\n * Represents the event object that is emitted before row rendering.\n * It includes information about the dimension type, data item, item, and node.\n */\nexport interface BeforeRowRenderEvent<T = any> extends AllDimensionType {\n /**\n * Represents the data item being rendered.\n */\n dataItem: T;\n\n /**\n * Represents the item being rendered.\n */\n item: VirtualPositionItem;\n\n /**\n * Represents the node being rendered.\n */\n node: VNode;\n}\n\n/**\n * Represents the event object that is emitted after rendering.\n * It includes information about the dimension type.\n */\nexport type AfterRendererEvent = {\n /**\n * Represents the type of dimension being rendered.\n */\n type: DimensionType;\n};\n\n/**\n * Represents the mapping of dimension types to their corresponding dimension types.\n */\nexport interface AllDimensionType {\n /**\n * Represents the dimension type for rows.\n */\n rowType: DimensionRows;\n\n /**\n * Represents the dimension type for columns.\n */\n colType: DimensionCols;\n}\n\n/**\n * Represents the event object that is emitted when applying focus.\n * It includes information about the dimension type and focused cells.\n */\nexport interface ApplyFocusEvent extends AllDimensionType, FocusedCells {}\n\n/**\n * Represents the event object that is emitted before focus rendering.\n * It includes information about the dimension type and range area.\n */\nexport interface FocusRenderEvent extends AllDimensionType {\n /**\n * Represents the range area of the focus.\n */\n range: RangeArea;\n\n /**\n * Represents the next cell to focus.\n */\n next?: Partial<Cell>;\n}\n/**\n * Represents the event object that is emitted when scrolling occurs.\n * The `type` property indicates the type of dimension (row or column) being scrolled.\n * The `coordinate` property represents the current scroll position in that dimension.\n */\nexport type ScrollCoordinateEvent = {\n /**\n * Represents the type of dimension being scrolled.\n * Possible values are 'rgRow' and 'rgCol'.\n */\n type: DimensionType;\n\n /**\n * Represents the current scroll position in the specified dimension.\n * The value is a number representing the coordinate in pixels.\n */\n coordinate: number;\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"selection.js","sourceRoot":"","sources":["../../src/types/selection.ts"],"names":[],"mappings":"","sourcesContent":["import { VNode } from '@stencil/core';\nimport { DimensionRows, DimensionCols } from './dimension';\nimport {\n ColumnProp,\n DataType,\n DataLookup,\n HyperFunc,\n ColumnDataSchemaModel,\n} from './interfaces';\n\nexport type RowIndex = number;\nexport type ColIndex = number;\nexport type SelectionStoreState = {\n range: RangeArea | null;\n tempRange: RangeArea | null;\n tempRangeType: string | null;\n focus: Cell | null;\n edit: EditCellStore | null;\n lastCell: Cell | null;\n};\nexport type RangeArea = {\n x: ColIndex;\n y: RowIndex;\n x1: ColIndex;\n y1: RowIndex;\n};\nexport type TempRange = {\n type: string;\n area: RangeArea;\n};\nexport type OldNewRangeMapping = {\n [rowIndex: number]: {\n [T in ColumnProp]: {\n rowIndex: number;\n colIndex: number;\n colProp: ColumnProp;\n };\n };\n};\nexport type ChangedRange = {\n type: DimensionRows;\n colType: DimensionCols;\n newRange: RangeArea;\n oldRange: RangeArea;\n mapping: OldNewRangeMapping;\n newData: {\n [key: number]: DataType;\n };\n};\nexport interface Cell {\n x: ColIndex;\n y: RowIndex;\n}\nexport type FocusedCells = {\n focus: Cell;\n end: Cell;\n};\nexport type RangeAreaCss = {\n left: string;\n top: string;\n width: string;\n height: string;\n};\n\nexport type SaveData = string;\nexport type SaveDataDetails = {\n rgRow: RowIndex;\n rgCol: ColIndex;\n type: DimensionRows;\n prop: ColumnProp;\n val: any;\n preventFocus?: boolean;\n};\n\nexport type BeforeEdit = BeforeSaveDataDetails;\n\nexport type BeforeSaveDataDetails = {\n prop: ColumnProp;\n model: DataType;\n val?: SaveData;\n rowIndex: number;\n colIndex: number;\n colType: DimensionCols;\n type: DimensionRows;\n};\nexport type BeforeRangeSaveDataDetails = {\n data: DataLookup;\n models: {\n [rowIndex: number]: DataType;\n };\n type: DimensionRows;\n};\n\nexport type AfterEditEvent = BeforeRangeSaveDataDetails | BeforeSaveDataDetails;\n\nexport interface EditCellStore extends Cell {\n val?: SaveData;\n}\nexport type EditCell = EditCellStore & BeforeSaveDataDetails;\nexport type Editors = {\n [name: string]: EditorCtr;\n};\nexport type EditorCtr = EditorCtrCallable & EditorCtrConstructible;\n\nexport interface EditorCtrCallable {\n (\n column: ColumnDataSchemaModel,\n save: (value: SaveData, preventFocus?: boolean) => void,\n close: (focusNext?: boolean) => void,\n ): EditorBase;\n}\n\nexport interface EditorCtrConstructible {\n new (\n column: ColumnDataSchemaModel,\n save: (value: SaveData, preventFocus?: boolean) => void,\n close: (focusNext?: boolean) => void,\n ): EditorBase;\n}\n\nexport interface EditorBase {\n element?: Element | null;\n editCell?: EditCell;\n /**\n * Autosave usage when you want to return value for models.\n */\n getValue?(): any;\n /**\n * For Editor plugin internal usage.\n * Prevents Editor save. Manual save usage required.\n */\n beforeAutoSave?(val?: any): boolean;\n beforeUpdate?(): void;\n /**\n * Before editor got disconnected.\n * Can be triggered multiple times before actual disconnect.\n */\n beforeDisconnect?(): void;\n componentDidRender?(): void;\n disconnectedCallback?(): void;\n render(\n createElement?: HyperFunc<VNode>,\n additionalData?: any,\n ): VNode | VNode[] | string | void;\n}\n"]}
1
+ {"version":3,"file":"selection.js","sourceRoot":"","sources":["../../src/types/selection.ts"],"names":[],"mappings":"","sourcesContent":["import { VNode } from '@stencil/core';\nimport { DimensionRows, DimensionCols } from './dimension';\nimport {\n ColumnProp,\n DataType,\n DataLookup,\n HyperFunc,\n ColumnDataSchemaModel,\n} from './interfaces';\n\nexport type RowIndex = number;\nexport type ColIndex = number;\nexport type SelectionStoreState = {\n range: RangeArea | null;\n tempRange: RangeArea | null;\n tempRangeType: string | null;\n focus: Cell | null;\n edit: EditCellStore | null;\n lastCell: Cell | null;\n};\nexport type RangeArea = {\n x: ColIndex;\n y: RowIndex;\n x1: ColIndex;\n y1: RowIndex;\n};\nexport type TempRange = {\n type: string;\n area: RangeArea;\n};\nexport type OldNewRangeMapping = {\n [rowIndex: number]: {\n [T in ColumnProp]: {\n rowIndex: number;\n colIndex: number;\n colProp: ColumnProp;\n };\n };\n};\nexport type ChangedRange = {\n type: DimensionRows;\n colType: DimensionCols;\n newRange: RangeArea;\n oldRange: RangeArea;\n mapping: OldNewRangeMapping;\n newData: {\n [key: number]: DataType;\n };\n};\nexport interface Cell {\n x: ColIndex;\n y: RowIndex;\n}\nexport type FocusedCells = {\n focus: Cell;\n end: Cell;\n};\nexport type RangeAreaCss = {\n left: string;\n top: string;\n width: string;\n height: string;\n};\n\nexport type SaveData = string;\nexport type SaveDataDetails = {\n rgRow: RowIndex;\n rgCol: ColIndex;\n type: DimensionRows;\n prop: ColumnProp;\n val: any;\n preventFocus?: boolean;\n};\n\nexport type BeforeEdit = BeforeSaveDataDetails;\n\nexport type BeforeSaveDataDetails = {\n prop: ColumnProp;\n model: DataType;\n val?: SaveData;\n rowIndex: number;\n colIndex: number;\n colType: DimensionCols;\n type: DimensionRows;\n};\nexport type BeforeRangeSaveDataDetails = {\n data: DataLookup;\n models: {\n [rowIndex: number]: DataType;\n };\n type: DimensionRows;\n};\n\nexport type AfterEditEvent = BeforeRangeSaveDataDetails | BeforeSaveDataDetails;\n\nexport interface EditCellStore extends Cell {\n val?: SaveData;\n}\nexport type EditCell = EditCellStore & BeforeSaveDataDetails;\nexport type Editors = {\n [name: string]: EditorCtr;\n};\nexport type EditorCtr = EditorCtrCallable | EditorCtrConstructible;\n\nexport interface EditorCtrCallable {\n (\n column: ColumnDataSchemaModel,\n save: (value: SaveData, preventFocus?: boolean) => void,\n close: (focusNext?: boolean) => void,\n ): EditorBase;\n}\n\nexport interface EditorCtrConstructible {\n new (\n column: ColumnDataSchemaModel,\n save: (value: SaveData, preventFocus?: boolean) => void,\n close: (focusNext?: boolean) => void,\n ): EditorBase;\n}\n\nexport interface EditorBase {\n element?: Element | null;\n editCell?: EditCell;\n /**\n * Autosave usage when you want to return value for models.\n */\n getValue?(): any;\n /**\n * For Editor plugin internal usage.\n * Prevents Editor save. Manual save usage required.\n */\n beforeAutoSave?(val?: any): boolean;\n beforeUpdate?(): void;\n /**\n * Before editor got disconnected.\n * Can be triggered multiple times before actual disconnect.\n */\n beforeDisconnect?(): void;\n componentDidRender?(): void;\n disconnectedCallback?(): void;\n render(\n createElement?: HyperFunc<VNode>,\n additionalData?: any,\n ): VNode | VNode[] | string | void;\n}\n"]}
@@ -12,18 +12,28 @@ export function verifyTouchTarget(touchEvent, focusClass) {
12
12
  }
13
13
  return true;
14
14
  }
15
- export function getFromEvent(e, prop, focusClass // for touch events
15
+ /**
16
+ * Function to get the value of a specific property from a MouseEvent or TouchEvent object.
17
+ */
18
+ export function getPropertyFromEvent(e, prop, focusClass // for touch events
16
19
  ) {
20
+ // Check if the event is a touch event
17
21
  if (isTouch(e)) {
22
+ // If the event has touches, get the first touch
18
23
  if (e.touches.length > 0) {
19
24
  const touchEvent = e.touches[0];
25
+ // Check if the target of the touch event is the specified element
20
26
  if (!verifyTouchTarget(touchEvent, focusClass)) {
27
+ // If not, return null
21
28
  return null;
22
29
  }
30
+ // Get the value of the specified property from the touch event and return it
23
31
  return touchEvent[prop] || 0;
24
32
  }
33
+ // If there are no touches, return null
25
34
  return null;
26
35
  }
36
+ // If the event is not a touch event, get the value of the specified property from the event and return it
27
37
  return e[prop] || 0;
28
38
  }
29
39
  //# sourceMappingURL=events.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/utils/events.ts"],"names":[],"mappings":"AAAA,SAAS,OAAO,CAAC,CAA0B;IACzC,OAAO,CAAC,CAAE,CAAgB,CAAC,OAAO,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,UAAkB,EAAE,UAAmB;IACvE,IAAI,UAAU,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,YAAY,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;YAChG,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAGD,MAAM,UAAU,YAAY,CAC1B,CAA0B,EAC1B,IAAsE,EACtE,UAAmB,CAAC,mBAAmB;;IAEvC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC;gBAC/C,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAQ,UAAU,CAAC,IAAI,CAAY,IAAI,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC","sourcesContent":["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"]}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/utils/events.ts"],"names":[],"mappings":"AAAA,SAAS,OAAO,CAAC,CAA0B;IACzC,OAAO,CAAC,CAAE,CAAgB,CAAC,OAAO,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,UAAkB,EAAE,UAAmB;IACvE,IAAI,UAAU,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,YAAY,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;YAChG,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAGD;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,CAA0B,EAC1B,IAAsE,EACtE,UAAmB,CAAC,mBAAmB;;IAEvC,sCAAsC;IACtC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACf,gDAAgD;QAChD,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAChC,kEAAkE;YAClE,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC;gBAC/C,sBAAsB;gBACtB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,6EAA6E;YAC7E,OAAQ,UAAU,CAAC,IAAI,CAAY,IAAI,CAAC,CAAC;QAC3C,CAAC;QACD,uCAAuC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,0GAA0G;IAC1G,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC","sourcesContent":["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\n/**\n * Function to get the value of a specific property from a MouseEvent or TouchEvent object.\n */\nexport function getPropertyFromEvent(\n e: MouseEvent | TouchEvent,\n prop: keyof Pick<Touch, 'clientX' | 'clientY' | 'screenX' | 'screenY'>,\n focusClass?: string // for touch events\n): number | null {\n // Check if the event is a touch event\n if (isTouch(e)) {\n // If the event has touches, get the first touch\n if (e.touches.length > 0) {\n const touchEvent = e.touches[0];\n // Check if the target of the touch event is the specified element\n if (!verifyTouchTarget(touchEvent, focusClass)) {\n // If not, return null\n return null;\n }\n // Get the value of the specified property from the touch event and return it\n return (touchEvent[prop] as number) || 0;\n }\n // If there are no touches, return null\n return null;\n }\n // If the event is not a touch event, get the value of the specified property from the event and return it\n return e[prop] || 0;\n}\n"]}
@@ -2,8 +2,8 @@
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
4
  const LETTER_BLOCK_SIZE = 10;
5
- export const calculateRowHeaderSize = (itemsLength, rowHeaderColumn) => {
5
+ export const calculateRowHeaderSize = (itemsLength, rowHeaderColumn, minWidth = 50) => {
6
6
  return ((rowHeaderColumn === null || rowHeaderColumn === void 0 ? void 0 : rowHeaderColumn.size) ||
7
- (itemsLength.toString().length + 1) * LETTER_BLOCK_SIZE);
7
+ Math.max((itemsLength.toString().length + 1) * LETTER_BLOCK_SIZE, minWidth));
8
8
  };
9
9
  //# sourceMappingURL=row-header-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"row-header-utils.js","sourceRoot":"","sources":["../../src/utils/row-header-utils.ts"],"names":[],"mappings":"AAEA,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAC7B,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,WAAmB,EACnB,eAA4B,EAC5B,EAAE;IACF,OAAO,CACL,CAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,IAAI;QACrB,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,iBAAiB,CACxD,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { RowHeaders } from '..';\n\nconst LETTER_BLOCK_SIZE = 10;\nexport const calculateRowHeaderSize = (\n itemsLength: number,\n rowHeaderColumn?: RowHeaders,\n) => {\n return (\n rowHeaderColumn?.size ||\n (itemsLength.toString().length + 1) * LETTER_BLOCK_SIZE\n );\n};\n"]}
1
+ {"version":3,"file":"row-header-utils.js","sourceRoot":"","sources":["../../src/utils/row-header-utils.ts"],"names":[],"mappings":"AAEA,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAC7B,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,WAAmB,EACnB,eAA4B,EAC5B,QAAQ,GAAG,EAAE,EACb,EAAE;IACF,OAAO,CACL,CAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,IAAI;QACrB,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,iBAAiB,EAAE,QAAQ,CAAC,CAC5E,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { RowHeaders } from '..';\n\nconst LETTER_BLOCK_SIZE = 10;\nexport const calculateRowHeaderSize = (\n itemsLength: number,\n rowHeaderColumn?: RowHeaders,\n minWidth = 50,\n) => {\n return (\n rowHeaderColumn?.size ||\n Math.max((itemsLength.toString().length + 1) * LETTER_BLOCK_SIZE, minWidth)\n );\n};\n"]}
@@ -137,16 +137,30 @@ function isSameGroup(currentGroup, currentModel, nextModel) {
137
137
  return currentModel[GROUP_DEPTH] < depth;
138
138
  }
139
139
 
140
- /** Collect data for pinned columns in required @ViewportProps format */
141
- const HEADER_SLOT = 'header';
142
- const FOOTER_SLOT = 'footer';
143
- const CONTENT_SLOT = 'content';
144
- const DATA_SLOT = 'data';
145
- /** Receive last visible in viewport by required type */
140
+ /**
141
+ * Collects data for pinned columns in the required @ViewportProps format.
142
+ */
143
+ /**
144
+ * Represents the slot names for the viewport slots.
145
+ */
146
+ const HEADER_SLOT = 'header'; // Slot name for the header slot
147
+ const FOOTER_SLOT = 'footer'; // Slot name for the footer slot
148
+ const CONTENT_SLOT = 'content'; // Slot name for the content slot
149
+ const DATA_SLOT = 'data'; // Slot name for the data slot
150
+ /**
151
+ * Returns the last visible cell in the viewport for a given row type.
152
+ * Coordinates are not zero-based and are relative to the viewport.
153
+ * If needed to be zero-based they can be adjusted by subtracting 1.
154
+ */
146
155
  function getLastCell(data, rowType) {
156
+ // Get the last visible column count from the viewport column data.
157
+ const lastVisibleColumnCount = data.viewports[data.colType].store.get('realCount');
158
+ // Get the last visible row count for the given row type from the viewport column data.
159
+ const lastVisibleRowCount = data.viewports[rowType].store.get('realCount');
160
+ // Return the last visible cell with the last visible column count and row count.
147
161
  return {
148
- x: data.viewports[data.colType].store.get('realCount'),
149
- y: data.viewports[rowType].store.get('realCount'),
162
+ x: lastVisibleColumnCount,
163
+ y: lastVisibleRowCount,
150
164
  };
151
165
  }
152
166
 
@@ -523,4 +537,4 @@ function doPropMerge(existing, extra) {
523
537
 
524
538
  export { CONTENT_SLOT as C, DATA_SLOT as D, FOOTER_SLOT as F, GROUP_EXPANDED as G, HEADER_SLOT as H, PSEUDO_GROUP_ITEM_VALUE as P, getParsedGroup as a, isSameGroup as b, GROUP_DEPTH as c, PSEUDO_GROUP_ITEM_ID as d, GROUPING_ROW_TYPE as e, PSEUDO_GROUP_COLUMN as f, getGroupingName as g, GROUP_EXPAND_EVENT as h, isGrouping as i, gatherGrouping as j, isGroupingColumn as k, getLastCell as l, doPropMerge as m, ColumnService as n, GROUP_EXPAND_BTN as o, PSEUDO_GROUP_ITEM as p, isRowDragService as q, getCellData as r };
525
539
 
526
- //# sourceMappingURL=column.service-f4922a8d.js.map
540
+ //# sourceMappingURL=column.service-195345ab.js.map
@@ -0,0 +1 @@
1
+ {"file":"column.service-195345ab.js","mappings":"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","names":["baseSlice","require$$0","require$$1","require$$2","slice"],"sources":["src/plugins/groupingRow/grouping.const.ts","src/plugins/groupingRow/grouping.service.ts","src/components/revoGrid/viewport.helpers.ts","node_modules/lodash/_baseSlice.js","node_modules/lodash/slice.js","src/components/data/column.service.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 { DataType, ColumnProp, ColumnRegular } from '../..';\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\n getGroupValue?(item: DataType, prop: string | number): any;\n groupLabelTemplate?: GroupLabelTemplateFunc;\n};\n\ntype GroupedData = Map<string, GroupedData | DataType[]>;\n\nfunction getGroupValueDefault(item: DataType, prop: string | number) {\n return item[prop] || null;\n}\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(\n array: DataType[],\n groupIds: ColumnProp[],\n { prevExpanded, expandedAll, getGroupValue = getGroupValueDefault }: ExpandedOptions,\n) {\n const groupedItems: GroupedData = new Map();\n array.forEach((item, originalIndex) => {\n const groupLevelValues = groupIds.map(groupId => getGroupValue(item, groupId));\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 const lastLevelItems = currentGroupLevel.get(\n lastLevelValue,\n ) as DataType[];\n lastLevelItems.push({\n ...item,\n [GROUP_ORIGINAL_INDEX]: originalIndex,\n });\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: DataType[] = [];\n function flattenGroupMaps(\n groupedValues: GroupedData,\n parentIds: string[],\n isExpanded: boolean,\n ) {\n const depth = parentIds.length;\n groupedValues.forEach((innerGroupedValues, groupId) => {\n const levelIds = [...parentIds, groupId];\n const mergedIds = levelIds.join(',');\n const isGroupExpanded =\n 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) =>\n levelIds.slice(0, index + 1).join(','),\n );\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?: DataType) {\n return rgRow && rgRow[PSEUDO_GROUP_ITEM];\n}\n\nexport function isGrouping(rgRow?: DataType) {\n return rgRow && typeof rgRow[PSEUDO_GROUP_ITEM] !== 'undefined';\n}\n\nexport function isGroupingColumn(column?: 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(\n currentGroup: any[],\n currentModel: DataType,\n nextModel: DataType,\n) {\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","/**\n * Collects data for pinned columns in the required @ViewportProps format.\n */\n\nimport { MultiDimensionType } from '../..';\nimport { Cell } from '../..';\nimport { ViewportColumn } from '../../types/viewport.interfaces';\n\n/**\n * Represents the slot names for the viewport slots.\n */\nexport const HEADER_SLOT = 'header'; // Slot name for the header slot\nexport const FOOTER_SLOT = 'footer'; // Slot name for the footer slot\nexport const CONTENT_SLOT = 'content'; // Slot name for the content slot\nexport const DATA_SLOT = 'data'; // Slot name for the data slot\n\n/**\n * Returns the last visible cell in the viewport for a given row type.\n * Coordinates are not zero-based and are relative to the viewport.\n * If needed to be zero-based they can be adjusted by subtracting 1.\n */\nexport function getLastCell(\n data: ViewportColumn,\n rowType: MultiDimensionType,\n): Cell {\n // Get the last visible column count from the viewport column data.\n const lastVisibleColumnCount = data.viewports[data.colType].store.get('realCount');\n\n // Get the last visible row count for the given row type from the viewport column data.\n const lastVisibleRowCount = data.viewports[rowType].store.get('realCount');\n\n // Return the last visible cell with the last visible column count and row count.\n return {\n x: lastVisibleColumnCount,\n y: lastVisibleRowCount,\n };\n}\n\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nmodule.exports = baseSlice;\n","var baseSlice = require('./_baseSlice'),\n isIterateeCall = require('./_isIterateeCall'),\n toInteger = require('./toInteger');\n\n/**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n}\n\nmodule.exports = slice;\n","import {\n DSourceState,\n getSourceItem,\n getVisibleSourceItem,\n} from '../../store/dataSource/data.store';\nimport { CELL_CLASS, DISABLED_CLASS } from '../../utils/consts';\nimport { getRange } from '../../store/selection/selection.helpers';\n\nimport { isGroupingColumn } from '../../plugins/groupingRow/grouping.service';\nimport slice from 'lodash/slice';\nimport { DimensionCols, DimensionRows, RowDrag } from '../..';\nimport {\n ColumnRegular,\n Observable,\n DataType,\n ReadOnlyFormat,\n CellProps,\n ColumnDataSchemaModel,\n ColumnProp,\n DataLookup,\n DataFormat,\n} from '../..';\nimport {\n ChangedRange,\n OldNewRangeMapping,\n Cell,\n RangeArea,\n BeforeSaveDataDetails,\n EditorCtr,\n Editors,\n} from '../..';\n\nexport type ColumnStores = {\n [T in DimensionCols]: Observable<DSourceState<ColumnRegular, DimensionCols>>;\n};\nexport type RowStores = {\n [T in DimensionRows]: Observable<DSourceState<DataType, DimensionRows>>;\n};\n\nexport default class ColumnService {\n private unsubscribe: { (): void }[] = [];\n get columns(): ColumnRegular[] {\n return getVisibleSourceItem(this.source);\n }\n\n hasGrouping = false;\n type: DimensionCols;\n\n constructor(\n private dataStore: Observable<DSourceState<DataType, DimensionRows>>,\n private source: Observable<DSourceState<ColumnRegular, DimensionCols>>,\n ) {\n this.unsubscribe.push(\n source.onChange('source', s => this.checkGrouping(s)),\n );\n this.checkGrouping(source.get('source'));\n this.type = source.get('type');\n }\n\n private checkGrouping(cols: 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: 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 mergeProperties(\n r: number,\n c: number,\n defaultProps: CellProps,\n model: ColumnDataSchemaModel,\n extraPropsFunc: ColumnRegular['cellProperties'],\n ): CellProps {\n const cellClass: { [key: string]: boolean } = {\n [CELL_CLASS]: true,\n [DISABLED_CLASS]: this.isReadOnly(r, c),\n };\n let props: CellProps = {\n ...defaultProps,\n class: cellClass,\n };\n const extra = extraPropsFunc?.(model);\n if (!extra) {\n return props;\n }\n return doPropMerge(props, extra);\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 getCellData(data.model[data.prop as number]);\n }\n\n getSaveData(\n rowIndex: number,\n colIndex: number,\n val?: string,\n ): 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(\n _r: number,\n c: number,\n editors: Editors,\n ): 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 /**\n * Get cell data model for given rowIndex and colIndex\n * Used to pass data to editor/renderer\n */\n rowDataModel(rowIndex: number, colIndex: number): ColumnDataSchemaModel {\n const column = this.columns[colIndex];\n const prop: ColumnProp | undefined = column?.prop;\n const model = getSourceItem(this.dataStore, rowIndex) || {};\n const value = model[prop];\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 value,\n };\n }\n\n getRangeData(\n d: ChangedRange,\n columns: ColumnRegular[],\n ): {\n changed: DataLookup;\n mapping: OldNewRangeMapping;\n } {\n const changed: 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: OldNewRangeMapping = {};\n\n // rows\n for (\n let rowIndex = d.newRange.y, i = 0;\n rowIndex < d.newRange.y1 + 1;\n rowIndex++, i++\n ) {\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 (\n let colIndex = d.newRange.x, j = 0;\n colIndex < d.newRange.x1 + 1;\n colIndex++, j++\n ) {\n // check if old range area\n if (\n rowIndex >= d.oldRange.y &&\n rowIndex <= d.oldRange.y1 &&\n colIndex >= d.oldRange.x &&\n colIndex <= d.oldRange.x1\n ) {\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 colIndex: copyColIndex,\n colProp: copyColumnProp,\n rowIndex: oldRowIndex,\n };\n }\n }\n }\n return {\n changed,\n mapping,\n };\n }\n\n getTransformedDataToApply(\n start: Cell,\n data: DataFormat[][],\n ): {\n changed: DataLookup;\n range: RangeArea;\n } {\n const changed: 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 (\n let i = 0;\n rowIndex < rowLength && i < copyRowLength;\n rowIndex++, i++\n ) {\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 (\n let j = 0;\n colIndex < colLength && j < copyColLength;\n colIndex++, j++\n ) {\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 getRangeStaticData(d: RangeArea, value: DataFormat): DataLookup {\n const changed: 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: RangeArea,\n store: Observable<DSourceState<DataType, DimensionRows>>,\n ) {\n const area: {\n prop: ColumnProp;\n rowIndex: number;\n colIndex: number;\n model: DataType;\n colType: DimensionCols;\n type: 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: RangeArea,\n store: Observable<DSourceState<DataType, DimensionRows>>,\n ) {\n const cols = [...this.columns];\n const props = slice(cols, range.x, range.x1 + 1).map(v => v.prop);\n const toCopy: DataFormat[][] = [];\n const mapping: { [rowIndex: number]: { [colProp: ColumnProp]: any } } = {};\n\n // rows indexes\n for (let i = range.y; i <= range.y1; i++) {\n const rgRow: 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 destroy() {\n this.unsubscribe.forEach(f => f());\n }\n}\n\nexport function getCellData(val?: any) {\n if (typeof val === 'undefined' || val === null) {\n return '';\n }\n return val;\n}\n\n/**\n * Checks if the given rowDrag is a service for dragging rows.\n */\nexport function isRowDragService(\n rowDrag: RowDrag,\n model: ColumnDataSchemaModel,\n): boolean {\n if (typeof rowDrag === 'function') {\n return rowDrag(model);\n }\n return !!rowDrag;\n}\nexport function doPropMerge(existing: CellProps, extra: CellProps) {\n let props: 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 (\n typeof extra.class === 'string' &&\n typeof props.class === 'object'\n ) {\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"],"version":3}
@@ -192,9 +192,9 @@ class ViewportStore {
192
192
  }
193
193
 
194
194
  const LETTER_BLOCK_SIZE = 10;
195
- const calculateRowHeaderSize = (itemsLength, rowHeaderColumn) => {
195
+ const calculateRowHeaderSize = (itemsLength, rowHeaderColumn, minWidth = 50) => {
196
196
  return ((rowHeaderColumn === null || rowHeaderColumn === void 0 ? void 0 : rowHeaderColumn.size) ||
197
- (itemsLength.toString().length + 1) * LETTER_BLOCK_SIZE);
197
+ Math.max((itemsLength.toString().length + 1) * LETTER_BLOCK_SIZE, minWidth));
198
198
  };
199
199
 
200
200
  function isTouch(e) {
@@ -208,21 +208,31 @@ function verifyTouchTarget(touchEvent, focusClass) {
208
208
  }
209
209
  return true;
210
210
  }
211
- function getFromEvent(e, prop, focusClass // for touch events
211
+ /**
212
+ * Function to get the value of a specific property from a MouseEvent or TouchEvent object.
213
+ */
214
+ function getPropertyFromEvent(e, prop, focusClass // for touch events
212
215
  ) {
216
+ // Check if the event is a touch event
213
217
  if (isTouch(e)) {
218
+ // If the event has touches, get the first touch
214
219
  if (e.touches.length > 0) {
215
220
  const touchEvent = e.touches[0];
221
+ // Check if the target of the touch event is the specified element
216
222
  if (!verifyTouchTarget(touchEvent, focusClass)) {
223
+ // If not, return null
217
224
  return null;
218
225
  }
226
+ // Get the value of the specified property from the touch event and return it
219
227
  return touchEvent[prop] || 0;
220
228
  }
229
+ // If there are no touches, return null
221
230
  return null;
222
231
  }
232
+ // If the event is not a touch event, get the value of the specified property from the event and return it
223
233
  return e[prop] || 0;
224
234
  }
225
235
 
226
- export { ViewportStore as V, calculateRowHeaderSize as c, getFromEvent as g, verifyTouchTarget as v };
236
+ export { ViewportStore as V, calculateRowHeaderSize as c, getPropertyFromEvent as g, verifyTouchTarget as v };
227
237
 
228
- //# sourceMappingURL=events-3dd8ee7c.js.map
238
+ //# sourceMappingURL=events-3e39de50.js.map
@@ -0,0 +1 @@
1
+ {"file":"events-3e39de50.js","mappings":"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","names":[],"sources":["src/store/viewport/viewport.store.ts","src/utils/row-header-utils.ts","src/utils/events.ts"],"sourcesContent":["/**\n * Viewport store\n * Used for virtualization (process of rendering only visible part of data)\n * Redraws viewport based on position and dimension\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 {\n VirtualPositionItem,\n ViewportStateItems,\n ViewportState,\n Observable,\n ViewSettingSizeProp,\n} from '../..';\nimport { MultiDimensionType } from '../..';\n\nexport type ViewportStoreCollection = {\n [T in MultiDimensionType]: ViewportStore;\n};\n\n/**\n * Initial state for viewport store\n */\nfunction initialState(): ViewportState {\n return {\n // virtual item information per rendered item\n items: [],\n // virtual dom item order to render\n start: 0,\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\n/**\n * Viewport store class\n */\nexport default class ViewportStore {\n readonly store: Observable<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: MultiDimensionType) {\n this.store = createStore(initialState());\n // drop items on real size change, require a new item set\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.clearItems());\n }\n\n /**\n * Render viewport based on coordinate\n * It's the main method for draw\n */\n setViewPortCoordinate(\n position: number,\n dimension: DimensionDataViewport,\n ) {\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 items = [...allItems.items];\n\n const firstItem: VirtualPositionItem | undefined = getFirstItem(allItems);\n const lastItem: VirtualPositionItem | undefined = getLastItem(allItems);\n\n let toUpdate: Partial<ViewportState> = {};\n\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(\n pos,\n allItems,\n this.store.get('realCount'),\n virtualSize,\n dimension,\n ),\n };\n this.setViewport({ ...toUpdate });\n // verify is render area is outside of last item\n } else if (\n isActiveRangeOutsideLastItem(pos, virtualSize, firstItem, lastItem)\n ) {\n // check is any item missing for full fill content\n const missing = addMissingItems(\n firstItem,\n this.store.get('realCount'),\n virtualSize + pos - firstItem.start,\n allItems,\n {\n sizes: dimension.sizes,\n originItemSize: dimension.originItemSize,\n },\n );\n\n // update missing items\n if (missing.length) {\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(\n sizes: ViewSettingSizeProp,\n dropToOriginalSize?: number,\n ) {\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: 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(\n items,\n this.store.get('start'),\n size,\n this.lastCoordinate,\n ),\n });\n }\n\n getItems(): Pick<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<ViewportState>) {\n setStore(this.store, data);\n }\n\n clearItems() {\n this.store.set('items', []);\n }\n}\n","import { RowHeaders } from '..';\n\nconst LETTER_BLOCK_SIZE = 10;\nexport const calculateRowHeaderSize = (\n itemsLength: number,\n rowHeaderColumn?: RowHeaders,\n minWidth = 50,\n) => {\n return (\n rowHeaderColumn?.size ||\n Math.max((itemsLength.toString().length + 1) * LETTER_BLOCK_SIZE, minWidth)\n );\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\n/**\n * Function to get the value of a specific property from a MouseEvent or TouchEvent object.\n */\nexport function getPropertyFromEvent(\n e: MouseEvent | TouchEvent,\n prop: keyof Pick<Touch, 'clientX' | 'clientY' | 'screenX' | 'screenY'>,\n focusClass?: string // for touch events\n): number | null {\n // Check if the event is a touch event\n if (isTouch(e)) {\n // If the event has touches, get the first touch\n if (e.touches.length > 0) {\n const touchEvent = e.touches[0];\n // Check if the target of the touch event is the specified element\n if (!verifyTouchTarget(touchEvent, focusClass)) {\n // If not, return null\n return null;\n }\n // Get the value of the specified property from the touch event and return it\n return (touchEvent[prop] as number) || 0;\n }\n // If there are no touches, return null\n return null;\n }\n // If the event is not a touch event, get the value of the specified property from the event and return it\n return e[prop] || 0;\n}\n"],"version":3}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { h } from './index-21436631.js';
5
5
  import { d as dispatch } from './dispatcher-8ea9187d.js';
6
- import { m as doPropMerge } from './column.service-f4922a8d.js';
6
+ import { m as doPropMerge } from './column.service-195345ab.js';
7
7
 
8
8
  var ResizeEvents;
9
9
  (function (ResizeEvents) {
@@ -298,4 +298,4 @@ const HeaderCellRenderer = ({ data, props, additionalData }, children) => {
298
298
 
299
299
  export { HeaderCellRenderer as H, ON_COLUMN_CLICK as O };
300
300
 
301
- //# sourceMappingURL=header-cell-renderer-ac962570.js.map
301
+ //# sourceMappingURL=header-cell-renderer-7c76465d.js.map