@revolist/revogrid 4.9.37 → 4.9.40

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 (158) hide show
  1. package/dist/cjs/{column.drag.plugin-ffe1918f.js → column.drag.plugin-fcd892ec.js} +18 -18
  2. package/dist/cjs/column.drag.plugin-fcd892ec.js.map +1 -0
  3. package/dist/cjs/{index-947f3534.js → column.service-26c61ed6.js} +1256 -469
  4. package/dist/cjs/column.service-26c61ed6.js.map +1 -0
  5. package/dist/cjs/{edit.utils-68a4f1c4.js → edit.utils-179c0800.js} +2 -2
  6. package/dist/cjs/{edit.utils-68a4f1c4.js.map → edit.utils-179c0800.js.map} +1 -1
  7. package/dist/cjs/{header-cell-renderer-57fb8f18.js → header-cell-renderer-d879d95e.js} +2 -2
  8. package/dist/cjs/{header-cell-renderer-57fb8f18.js.map → header-cell-renderer-d879d95e.js.map} +1 -1
  9. package/dist/cjs/index-3ab26ab9.js +513 -0
  10. package/dist/cjs/index-3ab26ab9.js.map +1 -0
  11. package/dist/cjs/index.cjs.js +21 -20
  12. package/dist/cjs/index.cjs.js.map +1 -1
  13. package/dist/cjs/{key.utils-da2ead49.js → key.utils-f49d7bee.js} +2 -2
  14. package/dist/cjs/{key.utils-da2ead49.js.map → key.utils-f49d7bee.js.map} +1 -1
  15. package/dist/cjs/loader.cjs.js +1 -1
  16. package/dist/cjs/revo-grid.cjs.entry.js +87 -55
  17. package/dist/cjs/revo-grid.cjs.entry.js.map +1 -1
  18. package/dist/cjs/revo-grid.cjs.js +1 -1
  19. package/dist/cjs/revogr-attribution_7.cjs.entry.js +13 -13
  20. package/dist/cjs/revogr-attribution_7.cjs.entry.js.map +1 -1
  21. package/dist/cjs/revogr-clipboard_3.cjs.entry.js +21 -18
  22. package/dist/cjs/revogr-clipboard_3.cjs.entry.js.map +1 -1
  23. package/dist/cjs/revogr-data_4.cjs.entry.js +9 -9
  24. package/dist/cjs/revogr-data_4.cjs.entry.js.map +1 -1
  25. package/dist/cjs/{row-header-utils-fe2264e7.js → row-header-utils-c37f76e4.js} +6 -5
  26. package/dist/cjs/row-header-utils-c37f76e4.js.map +1 -0
  27. package/dist/cjs/{text-editor-55511a6a.js → text-editor-b756d6b3.js} +3 -3
  28. package/dist/cjs/{text-editor-55511a6a.js.map → text-editor-b756d6b3.js.map} +1 -1
  29. package/dist/cjs/{throttle-2ae258fb.js → throttle-a57f51f9.js} +2 -2
  30. package/dist/cjs/{throttle-2ae258fb.js.map → throttle-a57f51f9.js.map} +1 -1
  31. package/dist/collection/components/order/revogr-order-editor.js +99 -27
  32. package/dist/collection/components/order/revogr-order-editor.js.map +1 -1
  33. package/dist/collection/components/overlay/revogr-overlay-selection.js +2 -2
  34. package/dist/collection/components/overlay/revogr-overlay-selection.js.map +1 -1
  35. package/dist/collection/components/revoGrid/revo-grid.js +10 -0
  36. package/dist/collection/components/revoGrid/revo-grid.js.map +1 -1
  37. package/dist/collection/plugins/sorting/sorting.plugin.js +25 -27
  38. package/dist/collection/plugins/sorting/sorting.plugin.js.map +1 -1
  39. package/dist/collection/services/data.provider.js +12 -5
  40. package/dist/collection/services/data.provider.js.map +1 -1
  41. package/dist/collection/services/dimension.provider.js +22 -0
  42. package/dist/collection/services/dimension.provider.js.map +1 -1
  43. package/dist/collection/store/dataSource/data.proxy.js +19 -6
  44. package/dist/collection/store/dataSource/data.proxy.js.map +1 -1
  45. package/dist/collection/store/dataSource/data.store.js +3 -0
  46. package/dist/collection/store/dataSource/data.store.js.map +1 -1
  47. package/dist/collection/types/events.js +1 -0
  48. package/dist/collection/types/events.js.map +1 -1
  49. package/dist/esm/{column.drag.plugin-bbd79520.js → column.drag.plugin-3cc77986.js} +6 -6
  50. package/dist/esm/{column.drag.plugin-bbd79520.js.map → column.drag.plugin-3cc77986.js.map} +1 -1
  51. package/dist/esm/{index-8eeaa30d.js → column.service-751345b2.js} +1216 -427
  52. package/dist/esm/column.service-751345b2.js.map +1 -0
  53. package/dist/esm/{debounce-7b511afc.js → debounce-72878ced.js} +2 -2
  54. package/dist/esm/{debounce-7b511afc.js.map → debounce-72878ced.js.map} +1 -1
  55. package/dist/esm/{edit.utils-aeb2dc7c.js → edit.utils-6fc686b9.js} +2 -2
  56. package/dist/esm/{edit.utils-aeb2dc7c.js.map → edit.utils-6fc686b9.js.map} +1 -1
  57. package/dist/esm/{header-cell-renderer-1aec2328.js → header-cell-renderer-32d2ed96.js} +2 -2
  58. package/dist/esm/{header-cell-renderer-1aec2328.js.map → header-cell-renderer-32d2ed96.js.map} +1 -1
  59. package/dist/esm/index-1dcad6ef.js +476 -0
  60. package/dist/esm/index-1dcad6ef.js.map +1 -0
  61. package/dist/esm/index.js +9 -8
  62. package/dist/esm/index.js.map +1 -1
  63. package/dist/esm/{key.utils-9ee5fa40.js → key.utils-17273f42.js} +2 -2
  64. package/dist/esm/{key.utils-9ee5fa40.js.map → key.utils-17273f42.js.map} +1 -1
  65. package/dist/esm/loader.js +1 -1
  66. package/dist/esm/revo-grid.entry.js +67 -35
  67. package/dist/esm/revo-grid.entry.js.map +1 -1
  68. package/dist/esm/revo-grid.js +1 -1
  69. package/dist/esm/revogr-attribution_7.entry.js +9 -9
  70. package/dist/esm/revogr-attribution_7.entry.js.map +1 -1
  71. package/dist/esm/revogr-clipboard_3.entry.js +22 -19
  72. package/dist/esm/revogr-clipboard_3.entry.js.map +1 -1
  73. package/dist/esm/revogr-data_4.entry.js +5 -5
  74. package/dist/esm/revogr-filter-panel.entry.js +1 -1
  75. package/dist/esm/{row-header-utils-3220f80d.js → row-header-utils-3dfbb81f.js} +3 -2
  76. package/dist/esm/row-header-utils-3dfbb81f.js.map +1 -0
  77. package/dist/esm/{text-editor-d9dcf56d.js → text-editor-901c3eb8.js} +3 -3
  78. package/dist/esm/{text-editor-d9dcf56d.js.map → text-editor-901c3eb8.js.map} +1 -1
  79. package/dist/esm/{throttle-ce8e57c9.js → throttle-138d69c3.js} +3 -3
  80. package/dist/esm/{throttle-ce8e57c9.js.map → throttle-138d69c3.js.map} +1 -1
  81. package/dist/revo-grid/column.drag.plugin-3cc77986.js +5 -0
  82. package/dist/revo-grid/{column.drag.plugin-bbd79520.js.map → column.drag.plugin-3cc77986.js.map} +1 -1
  83. package/dist/revo-grid/column.service-751345b2.js +5 -0
  84. package/dist/revo-grid/column.service-751345b2.js.map +1 -0
  85. package/dist/revo-grid/{debounce-7b511afc.js → debounce-72878ced.js} +2 -2
  86. package/dist/revo-grid/{edit.utils-aeb2dc7c.js → edit.utils-6fc686b9.js} +2 -2
  87. package/dist/revo-grid/{header-cell-renderer-1aec2328.js → header-cell-renderer-32d2ed96.js} +2 -2
  88. package/dist/revo-grid/index-1dcad6ef.js +5 -0
  89. package/dist/revo-grid/index-1dcad6ef.js.map +1 -0
  90. package/dist/revo-grid/index.esm.js +1 -1
  91. package/dist/revo-grid/index.esm.js.map +1 -1
  92. package/dist/revo-grid/key.utils-17273f42.js +5 -0
  93. package/dist/revo-grid/{key.utils-9ee5fa40.js.map → key.utils-17273f42.js.map} +1 -1
  94. package/dist/revo-grid/revo-grid.entry.js +1 -1
  95. package/dist/revo-grid/revo-grid.entry.js.map +1 -1
  96. package/dist/revo-grid/revo-grid.esm.js +1 -1
  97. package/dist/revo-grid/revo-grid.esm.js.map +1 -1
  98. package/dist/revo-grid/revogr-attribution_7.entry.js +1 -1
  99. package/dist/revo-grid/revogr-attribution_7.entry.js.map +1 -1
  100. package/dist/revo-grid/revogr-clipboard_3.entry.js +1 -1
  101. package/dist/revo-grid/revogr-clipboard_3.entry.js.map +1 -1
  102. package/dist/revo-grid/revogr-data_4.entry.js +1 -1
  103. package/dist/revo-grid/revogr-data_4.entry.js.map +1 -1
  104. package/dist/revo-grid/revogr-filter-panel.entry.js +1 -1
  105. package/dist/revo-grid/row-header-utils-3dfbb81f.js +5 -0
  106. package/dist/revo-grid/{row-header-utils-3220f80d.js.map → row-header-utils-3dfbb81f.js.map} +1 -1
  107. package/dist/revo-grid/text-editor-901c3eb8.js +5 -0
  108. package/dist/revo-grid/{throttle-ce8e57c9.js → throttle-138d69c3.js} +2 -2
  109. package/dist/types/components/order/revogr-order-editor.d.ts +18 -4
  110. package/dist/types/components/overlay/revogr-overlay-selection.d.ts +2 -4
  111. package/dist/types/components/revoGrid/revo-grid.d.ts +1 -0
  112. package/dist/types/components.d.ts +25 -6
  113. package/dist/types/plugins/sorting/sorting.plugin.d.ts +4 -4
  114. package/dist/types/services/data.provider.d.ts +5 -0
  115. package/dist/types/services/dimension.provider.d.ts +1 -0
  116. package/dist/types/store/dataSource/data.proxy.d.ts +9 -3
  117. package/dist/types/store/dataSource/data.store.d.ts +1 -0
  118. package/dist/types/types/events.d.ts +1 -1
  119. package/hydrate/index.js +127 -75
  120. package/hydrate/index.mjs +127 -75
  121. package/package.json +1 -1
  122. package/standalone/column.service.js +1 -1
  123. package/standalone/data.store.js +28 -31
  124. package/standalone/data.store.js.map +1 -1
  125. package/standalone/dimension.helpers.js +1 -1
  126. package/standalone/identity.js +26 -0
  127. package/standalone/identity.js.map +1 -0
  128. package/standalone/index.js +2 -1
  129. package/standalone/index.js.map +1 -1
  130. package/standalone/revo-grid.js +64 -31
  131. package/standalone/revo-grid.js.map +1 -1
  132. package/standalone/revogr-header2.js +1 -1
  133. package/standalone/revogr-order-editor2.js +18 -15
  134. package/standalone/revogr-order-editor2.js.map +1 -1
  135. package/standalone/revogr-overlay-selection2.js +2 -2
  136. package/standalone/revogr-overlay-selection2.js.map +1 -1
  137. package/dist/cjs/column.drag.plugin-ffe1918f.js.map +0 -1
  138. package/dist/cjs/column.service-e9ab1aa3.js +0 -1286
  139. package/dist/cjs/column.service-e9ab1aa3.js.map +0 -1
  140. package/dist/cjs/index-947f3534.js.map +0 -1
  141. package/dist/cjs/row-header-utils-fe2264e7.js.map +0 -1
  142. package/dist/esm/column.service-397b7249.js +0 -1249
  143. package/dist/esm/column.service-397b7249.js.map +0 -1
  144. package/dist/esm/index-8eeaa30d.js.map +0 -1
  145. package/dist/esm/row-header-utils-3220f80d.js.map +0 -1
  146. package/dist/revo-grid/column.drag.plugin-bbd79520.js +0 -5
  147. package/dist/revo-grid/column.service-397b7249.js +0 -5
  148. package/dist/revo-grid/column.service-397b7249.js.map +0 -1
  149. package/dist/revo-grid/index-8eeaa30d.js +0 -5
  150. package/dist/revo-grid/index-8eeaa30d.js.map +0 -1
  151. package/dist/revo-grid/key.utils-9ee5fa40.js +0 -5
  152. package/dist/revo-grid/row-header-utils-3220f80d.js +0 -5
  153. package/dist/revo-grid/text-editor-d9dcf56d.js +0 -5
  154. /package/dist/revo-grid/{debounce-7b511afc.js.map → debounce-72878ced.js.map} +0 -0
  155. /package/dist/revo-grid/{edit.utils-aeb2dc7c.js.map → edit.utils-6fc686b9.js.map} +0 -0
  156. /package/dist/revo-grid/{header-cell-renderer-1aec2328.js.map → header-cell-renderer-32d2ed96.js.map} +0 -0
  157. /package/dist/revo-grid/{text-editor-d9dcf56d.js.map → text-editor-901c3eb8.js.map} +0 -0
  158. /package/dist/revo-grid/{throttle-ce8e57c9.js.map → throttle-138d69c3.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"names":["getUpdatedItemsByPosition","pos","items","realCount","virtualSize","dimension","activeItem","getItemByPosition","firstItem","getFirstItem","toUpdate","changedOffsetStart","itemIndex","recombineByOffset","Math","abs","Object","assign","positiveDirection","maxSizeVirtualSize","getMaxVirtualSize","realSize","extra","addMissingItems","length","updateMissingAndRange","getItems","firstItemStart","start","firstItemIndex","origSize","originItemSize","maxSize","maxCount","sizes","end","min","missing","range","splice","existingCollection","lastItem","getLastItem","opt","currentSize","index","size","newSize","getItemSize","push","offset","data","newItems","itemsCount","newRange","undefined","i","newIndex","newEnd","Error","_a","newStart","console","error","_b","isActiveRange","first","last","isActiveRangeOutsideLastItem","s","setItemSizes","vpItems","initialIndex","lastCoordinate","count","item","initialState","ViewportStore","this","lastKnownScroll","value","constructor","type","store","createStore","setViewPortCoordinate","position","force","viewportSize","get","frameOffset","singleOffsetInPx","outsize","maxCoordinate","allItems","setViewport","setOriginalSizes","setStore","LETTER_BLOCK_SIZE","calculateRowHeaderSize","itemsLength","rowHeaderColumn","minWidth","max","toString"],"sources":["src/store/vp/viewport.helpers.ts","src/store/vp/viewport.store.ts","src/utils/row-header-utils.ts"],"sourcesContent":["import {\n DimensionSettingsState,\n PositionItem,\n ViewSettingSizeProp,\n ViewportStateItems,\n VirtualPositionItem,\n Range,\n} from '@type';\n\nimport { getItemByPosition } from '../dimension/dimension.helpers';\n\nexport type DimensionDataViewport = Pick<\n DimensionSettingsState,\n | 'indexes'\n | 'positionIndexes'\n | 'positionIndexToItem'\n | 'sizes'\n | 'originItemSize'\n | 'realSize'\n>;\n\nexport type ItemsToUpdate = Pick<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: PositionItem = getItemByPosition(dimension, pos);\n const firstItem = getFirstItem(items);\n let toUpdate: ItemsToUpdate | undefined;\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(\n virtualSize,\n dimension.realSize,\n activeItem,\n );\n // if partial recombination add items if revo-viewport has some space left\n if (toUpdate) {\n const extra = addMissingItems(\n activeItem,\n realCount,\n maxSizeVirtualSize,\n toUpdate,\n dimension,\n );\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(\n virtualSize: number,\n realSize: number,\n activeItem: PositionItem,\n) {\n return Math.min(virtualSize + (activeItem.end - activeItem.start), realSize);\n}\n\nexport function updateMissingAndRange(\n items: VirtualPositionItem[],\n missing: VirtualPositionItem[],\n range: Range,\n) {\n items.splice(range.end + 1, 0, ...missing);\n // update range if start larger after recombination\n if (\n range.start >= range.end &&\n !(range.start === range.end && range.start === 0)\n ) {\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: PositionItem,\n realCount: number,\n virtualSize: number,\n existingCollection: T,\n dimension: Pick<DimensionSettingsState, 'sizes' | 'originItemSize'>,\n): VirtualPositionItem[] {\n const lastItem: 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?: ViewSettingSizeProp;\n },\n currentSize = 0,\n) {\n const items: 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<\n DimensionSettingsState,\n 'sizes' | 'realSize' | 'originItemSize'\n>;\ntype RecombineOffsetData = {\n positiveDirection: boolean;\n} & ItemsToUpdate &\n RecombindDimensionData;\nexport function recombineByOffset(\n offset: number,\n data: RecombineOffsetData,\n): ItemsToUpdate | undefined {\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 undefined;\n }\n\n // is direction of scroll positive\n if (data.positiveDirection) {\n // push item to the end\n let lastItem: VirtualPositionItem = getLastItem(data);\n\n let i = newRange.start;\n const length = i + offset;\n for (; i < length; i++) {\n const newIndex = lastItem.itemIndex + 1;\n const size = getItemSize(\n newIndex,\n data.sizes,\n data.originItemSize,\n );\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 = getFirstItem(data);\n\n const end = newRange.end;\n for (let i = 0; i < offset; i++) {\n const newIndex = (firstItem?.itemIndex ?? 0) - 1;\n const size = getItemSize(\n newIndex,\n data.sizes,\n data.originItemSize,\n );\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 console.error('incorrect index');\n break;\n }\n\n // do recombination\n const firstItemStart = firstItem?.start ?? 0;\n newItems[newStart] = firstItem = {\n start: firstItemStart - size,\n end: firstItemStart,\n itemIndex: newIndex,\n size: size,\n };\n // update range\n newRange.start = newStart;\n newRange.end--;\n }\n }\n const range = {\n start:\n (newRange.start < 0 ? itemsCount + newRange.start : newRange.start) %\n itemsCount,\n end:\n (newRange.end < 0 ? itemsCount + newRange.end : newRange.end) %\n itemsCount,\n };\n return {\n items: newItems,\n ...range,\n };\n}\n\nfunction getItemSize(\n index: number,\n sizes?: ViewSettingSizeProp,\n origSize = 0,\n): 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?: PositionItem,\n last?: 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 (\n (pos >= first.start && pos <= first.end) ||\n (pos > first.end && last.end === realSize)\n );\n}\n\nexport function isActiveRangeOutsideLastItem(\n pos: number,\n virtualSize: number,\n firstItem?: PositionItem,\n lastItem?: PositionItem,\n) {\n // if no first item, means no items in viewport\n if (!firstItem) {\n return false;\n }\n return virtualSize + pos > (lastItem?.end ?? 0);\n}\n\nexport function getFirstItem(\n s: ItemsToUpdate,\n) {\n return s.items[s.start];\n}\n\nexport function getLastItem(s: ItemsToUpdate): 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: 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","import {\n DimensionDataViewport,\n addMissingItems,\n getFirstItem,\n getLastItem,\n getUpdatedItemsByPosition,\n isActiveRange,\n setItemSizes,\n updateMissingAndRange,\n isActiveRangeOutsideLastItem,\n ItemsToUpdate,\n} from './viewport.helpers';\nimport { createStore } from '@stencil/store';\nimport { type Observable, setStore } from '../../utils/store.utils';\nimport type {\n VirtualPositionItem,\n ViewportState,\n MultiDimensionType,\n} from '@type';\n\n/**\n * Viewport store\n * Used for virtualization (process of rendering only visible part of data)\n * Redraws viewport based on position and dimension\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 class ViewportStore {\n readonly store: Observable<ViewportState>;\n\n // last coordinate for store position restore\n private lastKnownScroll = 0;\n\n get lastCoordinate() {\n return this.lastKnownScroll;\n }\n set lastCoordinate(value: number) {\n this.lastKnownScroll = value;\n }\n constructor(readonly type: MultiDimensionType) {\n this.store = createStore(initialState());\n }\n\n /**\n * Render viewport based on coordinate\n * It's the main method for draw\n * Use force if you want to re-render viewport\n */\n setViewPortCoordinate(\n position: number,\n dimension: DimensionDataViewport,\n force = false,\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 let allItems: ItemsToUpdate;\n // if force clear all items and start from 0\n if (force) {\n allItems = {\n items: [],\n start: 0,\n end: 0,\n };\n } else {\n allItems = this.getItems();\n }\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 const items = [...allItems.items];\n // check is any item missing for fulfill 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 * 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(): ItemsToUpdate {\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 // drop items on virtual size change, require a new item set\n // drop items on real size change, require a new item set\n if (typeof data.realCount === 'number' || typeof data.virtualSize === 'number') {\n data = { ...data, items: data.items || [] };\n }\n setStore(this.store, data);\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"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["getUpdatedItemsByPosition","pos","items","realCount","virtualSize","dimension","activeItem","getItemByPosition","firstItem","getFirstItem","toUpdate","changedOffsetStart","itemIndex","recombineByOffset","Math","abs","Object","assign","positiveDirection","maxSizeVirtualSize","getMaxVirtualSize","realSize","extra","addMissingItems","length","updateMissingAndRange","getItems","firstItemStart","start","firstItemIndex","origSize","originItemSize","maxSize","maxCount","sizes","end","min","missing","range","splice","existingCollection","lastItem","getLastItem","opt","currentSize","index","size","newSize","getItemSize","push","offset","data","newItems","itemsCount","newRange","undefined","i","newIndex","newEnd","Error","_a","newStart","console","error","_b","isActiveRange","first","last","isActiveRangeOutsideLastItem","s","setItemSizes","vpItems","initialIndex","lastCoordinate","count","item","initialState","ViewportStore","this","lastKnownScroll","value","constructor","type","store","createStore","setViewPortCoordinate","position","force","viewportSize","get","frameOffset","singleOffsetInPx","outsize","maxCoordinate","allItems","setViewport","setOriginalSizes","setStore","LETTER_BLOCK_SIZE","calculateRowHeaderSize","itemsLength","rowHeaderColumn","minWidth","max","toString"],"sources":["src/store/vp/viewport.helpers.ts","src/store/vp/viewport.store.ts","src/utils/row-header-utils.ts"],"sourcesContent":["import {\n DimensionSettingsState,\n PositionItem,\n ViewSettingSizeProp,\n ViewportStateItems,\n VirtualPositionItem,\n Range,\n} from '@type';\n\nimport { getItemByPosition } from '../dimension/dimension.helpers';\n\nexport type DimensionDataViewport = Pick<\n DimensionSettingsState,\n | 'indexes'\n | 'positionIndexes'\n | 'positionIndexToItem'\n | 'sizes'\n | 'originItemSize'\n | 'realSize'\n>;\n\nexport type ItemsToUpdate = Pick<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: PositionItem = getItemByPosition(dimension, pos);\n const firstItem = getFirstItem(items);\n let toUpdate: ItemsToUpdate | undefined;\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(\n virtualSize,\n dimension.realSize,\n activeItem,\n );\n // if partial recombination add items if revo-viewport has some space left\n if (toUpdate) {\n const extra = addMissingItems(\n activeItem,\n realCount,\n maxSizeVirtualSize,\n toUpdate,\n dimension,\n );\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(\n virtualSize: number,\n realSize: number,\n activeItem: PositionItem,\n) {\n return Math.min(virtualSize + (activeItem.end - activeItem.start), realSize);\n}\n\nexport function updateMissingAndRange(\n items: VirtualPositionItem[],\n missing: VirtualPositionItem[],\n range: Range,\n) {\n items.splice(range.end + 1, 0, ...missing);\n // update range if start larger after recombination\n if (\n range.start >= range.end &&\n !(range.start === range.end && range.start === 0)\n ) {\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: PositionItem,\n realCount: number,\n virtualSize: number,\n existingCollection: T,\n dimension: Pick<DimensionSettingsState, 'sizes' | 'originItemSize'>,\n): VirtualPositionItem[] {\n const lastItem: 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?: ViewSettingSizeProp;\n },\n currentSize = 0,\n) {\n const items: 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<\n DimensionSettingsState,\n 'sizes' | 'realSize' | 'originItemSize'\n>;\ntype RecombineOffsetData = {\n positiveDirection: boolean;\n} & ItemsToUpdate &\n RecombindDimensionData;\nexport function recombineByOffset(\n offset: number,\n data: RecombineOffsetData,\n): ItemsToUpdate | undefined {\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 undefined;\n }\n\n // is direction of scroll positive\n if (data.positiveDirection) {\n // push item to the end\n let lastItem: VirtualPositionItem = getLastItem(data);\n\n let i = newRange.start;\n const length = i + offset;\n for (; i < length; i++) {\n const newIndex = lastItem.itemIndex + 1;\n const size = getItemSize(\n newIndex,\n data.sizes,\n data.originItemSize,\n );\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 = getFirstItem(data);\n\n const end = newRange.end;\n for (let i = 0; i < offset; i++) {\n const newIndex = (firstItem?.itemIndex ?? 0) - 1;\n const size = getItemSize(\n newIndex,\n data.sizes,\n data.originItemSize,\n );\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 console.error('incorrect index');\n break;\n }\n\n // do recombination\n const firstItemStart = firstItem?.start ?? 0;\n newItems[newStart] = firstItem = {\n start: firstItemStart - size,\n end: firstItemStart,\n itemIndex: newIndex,\n size: size,\n };\n // update range\n newRange.start = newStart;\n newRange.end--;\n }\n }\n const range = {\n start:\n (newRange.start < 0 ? itemsCount + newRange.start : newRange.start) %\n itemsCount,\n end:\n (newRange.end < 0 ? itemsCount + newRange.end : newRange.end) %\n itemsCount,\n };\n return {\n items: newItems,\n ...range,\n };\n}\n\nfunction getItemSize(\n index: number,\n sizes?: ViewSettingSizeProp,\n origSize = 0,\n): 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?: PositionItem,\n last?: 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 (\n (pos >= first.start && pos <= first.end) ||\n (pos > first.end && last.end === realSize)\n );\n}\n\nexport function isActiveRangeOutsideLastItem(\n pos: number,\n virtualSize: number,\n firstItem?: PositionItem,\n lastItem?: PositionItem,\n) {\n // if no first item, means no items in viewport\n if (!firstItem) {\n return false;\n }\n return virtualSize + pos > (lastItem?.end ?? 0);\n}\n\nexport function getFirstItem(\n s: ItemsToUpdate,\n) {\n return s.items[s.start];\n}\n\nexport function getLastItem(s: ItemsToUpdate): 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: 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","import {\n DimensionDataViewport,\n addMissingItems,\n getFirstItem,\n getLastItem,\n getUpdatedItemsByPosition,\n isActiveRange,\n setItemSizes,\n updateMissingAndRange,\n isActiveRangeOutsideLastItem,\n ItemsToUpdate,\n} from './viewport.helpers';\nimport { createStore } from '@stencil/store';\nimport { type Observable, setStore } from '../../utils/store.utils';\nimport type {\n VirtualPositionItem,\n ViewportState,\n MultiDimensionType,\n} from '@type';\n\n/**\n * Viewport store\n * Used for virtualization (process of rendering only visible part of data)\n * Redraws viewport based on position and dimension\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 class ViewportStore {\n readonly store: Observable<ViewportState>;\n\n // last coordinate for store position restore\n private lastKnownScroll = 0;\n\n get lastCoordinate() {\n return this.lastKnownScroll;\n }\n set lastCoordinate(value: number) {\n this.lastKnownScroll = value;\n }\n constructor(readonly type: MultiDimensionType) {\n this.store = createStore(initialState());\n }\n\n /**\n * Render viewport based on coordinate\n * It's the main method for draw\n * Use force if you want to re-render viewport\n */\n setViewPortCoordinate(\n position: number,\n dimension: DimensionDataViewport,\n force = false,\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 let allItems: ItemsToUpdate;\n // if force clear all items and start from 0\n if (force) {\n allItems = {\n items: [],\n start: 0,\n end: 0,\n };\n } else {\n allItems = this.getItems();\n }\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 const items = [...allItems.items];\n // check is any item missing for fulfill 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 * 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(): ItemsToUpdate {\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 // drop items on virtual size change, require a new item set\n // drop items on real size change, require a new item set\n if (typeof data.realCount === 'number' || typeof data.virtualSize === 'number') {\n data = { ...data, items: data.items || [] };\n }\n setStore(this.store, data);\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"],"mappings":";;;yGA2BgBA,EACdC,EACAC,EACAC,EACAC,EACAC,GAEA,MAAMC,EAA2BC,EAAkBF,EAAWJ,GAC9D,MAAMO,EAAYC,EAAaP,GAC/B,IAAIQ,EAEJ,GAAIF,EAAW,CACb,IAAIG,EAAqBL,EAAWM,WAAaJ,EAAUI,WAAa,GAExE,GAAID,EAAoB,CAEtBD,EAAWG,EAAkBC,KAAKC,IAAIJ,GAAmBK,OAAAC,OAAAD,OAAAC,OAAA,CACvDC,kBAAmBP,GAAsB,GACtCN,GACAH,G,EAKT,MAAMiB,EAAqBC,EACzBhB,EACAC,EAAUgB,SACVf,GAGF,GAAII,EAAU,CACZ,MAAMY,EAAQC,EACZjB,EACAH,EACAgB,EACAT,EACAL,GAEF,GAAIiB,EAAME,OAAQ,CAChBC,EAAsBf,EAASR,MAAOoB,EAAOZ,E,EAKjD,IAAKA,EAAU,CACb,MAAMR,EAAQwB,EAAS,CACrBC,eAAgBrB,EAAWsB,MAC3BC,eAAgBvB,EAAWM,UAC3BkB,SAAUzB,EAAU0B,eACpBC,QAASb,EACTc,SAAU9B,EACV+B,MAAO7B,EAAU6B,QAInBxB,EAAW,CACTR,QACA0B,MAAO,EACPO,IAAKjC,EAAMsB,OAAS,E,CAGxB,OAAOd,CACT,CAKA,SAASU,EACPhB,EACAiB,EACAf,GAEA,OAAOQ,KAAKsB,IAAIhC,GAAeE,EAAW6B,IAAM7B,EAAWsB,OAAQP,EACrE,C,SAEgBI,EACdvB,EACAmC,EACAC,GAEApC,EAAMqC,OAAOD,EAAMH,IAAM,EAAG,KAAME,GAElC,GACEC,EAAMV,OAASU,EAAMH,OACnBG,EAAMV,QAAUU,EAAMH,KAAOG,EAAMV,QAAU,GAC/C,CACAU,EAAMV,OAASS,EAAQb,M,CAEzBc,EAAMH,KAAOE,EAAQb,MACvB,C,SAMgBD,EACdf,EACAL,EACAC,EACAoC,EACAnC,GAEA,MAAMoC,EAAgCC,EAAYF,GAClD,MAAMtC,EAAQwB,EAAS,CACrBQ,MAAO7B,EAAU6B,MACjBP,eAAgBc,EAASN,IACzBN,eAAgBY,EAAS7B,UAAY,EACrCkB,SAAUzB,EAAU0B,eACpBC,QAAS5B,GAAeqC,EAASN,IAAM3B,EAAUoB,OACjDK,SAAU9B,IAEZ,OAAOD,CACT,C,SAMgBwB,EACdiB,EAQAC,EAAc,GAEd,MAAM1C,EAA+B,GAErC,IAAI2C,EAAQF,EAAId,eAChB,IAAIiB,EAAOF,EAGX,MAAOE,GAAQH,EAAIX,SAAWa,EAAQF,EAAIV,SAAU,CAClD,MAAMc,EAAUC,EAAYH,EAAOF,EAAIT,MAAOS,EAAIb,UAClD5B,EAAM+C,KAAK,CACTrB,MAAOe,EAAIhB,eAAiBmB,EAC5BX,IAAKQ,EAAIhB,eAAiBmB,EAAOC,EACjCnC,UAAWiC,EACXC,KAAMC,IAERD,GAAQC,EACRF,G,CAEF,OAAO3C,CACT,C,SAcgBW,EACdqC,EACAC,G,QAEA,MAAMC,EAAW,IAAID,EAAKjD,OAC1B,MAAMmD,EAAaD,EAAS5B,OAC5B,IAAI8B,EAAW,CACb1B,MAAOuB,EAAKvB,MACZO,IAAKgB,EAAKhB,KAIZ,GAAIe,EAASG,EAAY,CACvB,OAAOE,S,CAIT,GAAIJ,EAAKjC,kBAAmB,CAE1B,IAAIuB,EAAgCC,EAAYS,GAEhD,IAAIK,EAAIF,EAAS1B,MACjB,MAAMJ,EAASgC,EAAIN,EACnB,KAAOM,EAAIhC,EAAQgC,IAAK,CACtB,MAAMC,EAAWhB,EAAS7B,UAAY,EACtC,MAAMkC,EAAOE,EACXS,EACAN,EAAKjB,MACLiB,EAAKpB,gBAIP,GAAIU,EAASN,IAAMW,EAAOK,EAAK9B,SAAU,CACvC,K,CAIF,IAAIqC,EAASF,EAAIH,EAGjB,IAAKD,EAASM,GAAS,CACrB,MAAM,IAAIC,MAAM,kB,CAIlBP,EAASM,GAAUjB,EAAW,CAC5Bb,MAAOa,EAASN,IAChBA,IAAKM,EAASN,IAAMW,EACpBlC,UAAW6C,EACXX,KAAMA,GAGRQ,EAAS1B,QACT0B,EAASnB,IAAMuB,C,MAIZ,CAEL,IAAIlD,EAAYC,EAAa0C,GAE7B,MAAMhB,EAAMmB,EAASnB,IACrB,IAAK,IAAIqB,EAAI,EAAGA,EAAIN,EAAQM,IAAK,CAC/B,MAAMC,IAAYG,EAAApD,IAAS,MAATA,SAAS,SAATA,EAAWI,aAAS,MAAAgD,SAAA,EAAAA,EAAI,GAAK,EAC/C,MAAMd,EAAOE,EACXS,EACAN,EAAKjB,MACLiB,EAAKpB,gBAIP,IAAI8B,EAAW1B,EAAMqB,EACrBK,GAAYA,EAAW,EAAIR,EAAaQ,EAAWA,GAAYR,EAG/D,IAAKD,EAASS,GAAW,CACvBC,QAAQC,MAAM,mBACd,K,CAIF,MAAMpC,GAAiBqC,EAAAxD,IAAS,MAATA,SAAS,SAATA,EAAWoB,SAAK,MAAAoC,SAAA,EAAAA,EAAI,EAC3CZ,EAASS,GAAYrD,EAAY,CAC/BoB,MAAOD,EAAiBmB,EACxBX,IAAKR,EACLf,UAAW6C,EACXX,KAAMA,GAGRQ,EAAS1B,MAAQiC,EACjBP,EAASnB,K,EAGb,MAAMG,EAAQ,CACZV,OACG0B,EAAS1B,MAAQ,EAAIyB,EAAaC,EAAS1B,MAAQ0B,EAAS1B,OAC7DyB,EACFlB,KACGmB,EAASnB,IAAM,EAAIkB,EAAaC,EAASnB,IAAMmB,EAASnB,KACzDkB,GAEJ,OAAArC,OAAAC,OAAA,CACEf,MAAOkD,GACJd,EAEP,CAEA,SAASU,EACPH,EACAX,EACAJ,EAAW,GAEX,GAAII,GAASA,EAAMW,GAAQ,CACzB,OAAOX,EAAMW,E,CAEf,OAAOf,CACT,C,SAKgBmC,EACdhE,EACAoB,EACA6C,EACAC,GAEA,IAAKD,IAAUC,EAAM,CACnB,OAAO,K,CAIT,OACGlE,GAAOiE,EAAMtC,OAAS3B,GAAOiE,EAAM/B,KACnClC,EAAMiE,EAAM/B,KAAOgC,EAAKhC,MAAQd,CAErC,C,SAEgB+C,EACdnE,EACAG,EACAI,EACAiC,G,MAGA,IAAKjC,EAAW,CACd,OAAO,K,CAET,OAAOJ,EAAcH,IAAO2D,EAAAnB,IAAQ,MAARA,SAAQ,SAARA,EAAUN,OAAG,MAAAyB,SAAA,EAAAA,EAAI,EAC/C,C,SAEgBnD,EACd4D,GAEA,OAAOA,EAAEnE,MAAMmE,EAAEzC,MACnB,C,SAEgBc,EAAY2B,GAC1B,OAAOA,EAAEnE,MAAMmE,EAAElC,IACnB,C,SAUgBmC,EACdC,EACAC,EACA1B,EACA2B,GAEA,MAAMvE,EAAQ,IAAIqE,GAClB,MAAMG,EAAQxE,EAAMsB,OAEpB,IAAIvB,EAAMwE,EACV,IAAIjB,EAAI,EACR,IAAI5B,EAAQ4C,EAGZ,IAAKE,EAAO,CACV,MAAO,E,CAGT,MAAOlB,EAAIkB,EAAO,CAChB,MAAMC,EAAOzE,EAAM0B,GACnB+C,EAAK/C,MAAQ3B,EACb0E,EAAK7B,KAAOA,EACZ6B,EAAKxC,IAAMwC,EAAK/C,MAAQkB,EACxB7C,EAAM0E,EAAKxC,IAEXP,IACA4B,IAGA,GAAI5B,IAAU8C,EAAO,CACnB9C,EAAQ,C,EAGZ,OAAO1B,CACT,CC9WA,SAAS0E,IACP,MAAO,CAEL1E,MAAO,GAEP0B,MAAO,EACPO,IAAK,EAGL/B,YAAa,EAGbD,UAAW,EAEf,C,MAKa0E,EAMX,kBAAIJ,GACF,OAAOK,KAAKC,e,CAEd,kBAAIN,CAAeO,GACjBF,KAAKC,gBAAkBC,C,CAEzB,WAAAC,CAAqBC,GAAAJ,KAAAI,OARbJ,KAAAC,gBAAkB,EASxBD,KAAKK,MAAQC,EAAYR,I,CAQ3B,qBAAAS,CACEC,EACAjF,EACAkF,EAAQ,OAER,MAAMC,EAAeV,KAAKK,MAAMM,IAAI,eAEpC,IAAKD,EAAc,CACjB,M,CAGF,MAAME,EAAc,EACpB,MAAMC,EAAmBtF,EAAU0B,eAAiB2D,EAEpD,MAAME,EAAUD,EAAmB,EAEnC,MAAMvF,EAAcoF,EAAeI,EAGnC,IAAIC,EAAgB,EAEpB,GAAIxF,EAAUgB,SAAWmE,EAAc,CAErCK,EAAgBxF,EAAUgB,SAAWmE,EAAeG,C,CAGtD,IAAI1F,EAAMqF,EAEV,GAAIrF,EAAM,EAAG,CACXA,EAAM,C,MACD,GAAIA,EAAM4F,EAAe,CAC9B5F,EAAM4F,C,CAIRf,KAAKL,eAAiBxE,EAGtBA,GAAO0F,EACP1F,EAAMA,EAAM,EAAI,EAAIA,EAAM4F,EAAgB5F,EAAM4F,EAEhD,IAAIC,EAEJ,GAAIP,EAAO,CACTO,EAAW,CACT5F,MAAO,GACP0B,MAAO,EACPO,IAAK,E,KAEF,CACL2D,EAAWhB,KAAKpD,U,CAGlB,MAAMlB,EAA6CC,EAAaqF,GAChE,MAAMrD,EAA4CC,EAAYoD,GAE9D,IAAIpF,EAAmC,GAIvC,IAAKuD,EAAchE,EAAKI,EAAUgB,SAAUb,EAAWiC,GAAW,CAChE/B,EAAQM,OAAAC,OAAAD,OAAAC,OAAA,GACHP,GACAV,EACDC,EACA6F,EACAhB,KAAKK,MAAMM,IAAI,aACfrF,EACAC,IAGJyE,KAAKiB,YAAW/E,OAAAC,OAAA,GAAMP,G,MAEjB,GACL0D,EAA6BnE,EAAKG,EAAaI,EAAWiC,GAC1D,CACA,MAAMvC,EAAQ,IAAI4F,EAAS5F,OAE3B,MAAMmC,EAAUd,EACdf,EACAsE,KAAKK,MAAMM,IAAI,aACfrF,EAAcH,EAAMO,EAAUoB,MAC9BkE,EACA,CACE5D,MAAO7B,EAAU6B,MACjBH,eAAgB1B,EAAU0B,iBAK9B,GAAIM,EAAQb,OAAQ,CAClB,MAAMc,EAAQ,CACZV,MAAOkD,KAAKK,MAAMM,IAAI,SACtBtD,IAAK2C,KAAKK,MAAMM,IAAI,QAEtBhE,EAAsBvB,EAAOmC,EAASC,GACtC5B,EAAQM,OAAAC,OAAAD,OAAAC,OAAAD,OAAAC,OAAA,GACHP,GAAQ,CACXR,MAAO,IAAIA,KACRoC,GAELwC,KAAKiB,YAAW/E,OAAAC,OAAA,GAAMP,G,GAQ5B,gBAAAsF,CAAiBlD,GACf,MAAM5C,EAAQ4E,KAAKK,MAAMM,IAAI,SAC7B,MAAMf,EAAQxE,EAAMsB,OAEpB,IAAKkD,EAAO,CACV,M,CAGFuB,EAASnB,KAAKK,MAAO,CACnBjF,MAAOoE,EACLpE,EACA4E,KAAKK,MAAMM,IAAI,SACf3C,EACAgC,KAAKL,iB,CAKX,QAAA/C,GACE,MAAO,CACLxB,MAAO4E,KAAKK,MAAMM,IAAI,SACtB7D,MAAOkD,KAAKK,MAAMM,IAAI,SACtBtD,IAAK2C,KAAKK,MAAMM,IAAI,O,CAIxB,WAAAM,CAAY5C,GAGV,UAAWA,EAAKhD,YAAc,iBAAmBgD,EAAK/C,cAAgB,SAAU,CAC9E+C,EAAInC,OAAAC,OAAAD,OAAAC,OAAA,GAAQkC,GAAI,CAAEjD,MAAOiD,EAAKjD,OAAS,I,CAEzC+F,EAASnB,KAAKK,MAAOhC,E,EC5MzB,MAAM+C,EAAoB,G,MACbC,EAAyB,CACpCC,EACAC,EACAC,EAAW,MAGTD,IAAe,MAAfA,SAAe,SAAfA,EAAiBvD,OACjBhC,KAAKyF,KAAKH,EAAYI,WAAWhF,OAAS,GAAK0E,EAAmBI,U","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ /*!
2
+ * Built by Revolist OU ❤️
3
+ */
4
+ import{f as t,d as i}from"./key.utils-17273f42.js";import{t as n}from"./index-1dcad6ef.js";class s{constructor(t,i){this.column=t;this.saveCallback=i;this.editInput=null;this.element=null;this.editCell=undefined}async componentDidRender(){var t;if(this.editInput){await n();(t=this.editInput)===null||t===void 0?void 0:t.focus()}}onKeyDown(n){const s=t(n.key);const e=i(n.key);if((e||s)&&n.target&&this.saveCallback&&!n.isComposing){this.beforeDisconnect();this.saveCallback(this.getValue(),e)}}beforeDisconnect(){var t;(t=this.editInput)===null||t===void 0?void 0:t.blur()}getValue(){var t;return(t=this.editInput)===null||t===void 0?void 0:t.value}render(t,i){var n,s;return t("input",{type:"text",enterKeyHint:"enter",value:(s=(n=this.editCell)===null||n===void 0?void 0:n.val)!==null&&s!==void 0?s:"",ref:t=>{this.editInput=t},onKeyDown:t=>this.onKeyDown(t)})}}export{s as T};
5
+ //# sourceMappingURL=text-editor-901c3eb8.js.map
@@ -1,5 +1,5 @@
1
1
  /*!
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
- import{q as t}from"./index-8eeaa30d.js";import{d as i,i as s}from"./debounce-7b511afc.js";const r={contentSize:0,clientSize:0,virtualSize:0,maxSize:0};const e=-1;function n(t,i,s=0){return t+(s?i-s:0)}class o{constructor(t){this.cfg=t;this.preventArtificialScroll={rgRow:null,rgCol:null};this.previousScroll={rgRow:e,rgCol:e};this.params={rgRow:Object.assign({},r),rgCol:Object.assign({},r)}}setParams(t,i){const s=n(t.contentSize,t.clientSize,t.virtualSize);this.params[i]=Object.assign(Object.assign({},t),{maxSize:s-t.clientSize,virtualContentSize:s})}async setScroll(t){this.cancelScroll(t.dimension);const i=new Promise(((i,s)=>{if(this.cfg.skipAnimationFrame){return i()}const r=window.requestAnimationFrame((()=>{i()}));this.preventArtificialScroll[t.dimension]=s.bind(null,r)}));try{await i;const s=this.getParams(t.dimension);t.coordinate=Math.ceil(t.coordinate);this.previousScroll[t.dimension]=this.wrapCoordinate(t.coordinate,s);this.preventArtificialScroll[t.dimension]=null;this.cfg.applyScroll(Object.assign(Object.assign({},t),{coordinate:s.virtualSize?this.convert(t.coordinate,s,false):t.coordinate}))}catch(t){window.cancelAnimationFrame(t)}}scroll(t,i,s=false,r,n=false){this.cancelScroll(i);if(!s&&this.previousScroll[i]===t){this.previousScroll[i]=e;return}const o=this.getParams(i);this.cfg.runScroll({dimension:i,coordinate:o.virtualSize?this.convert(t,o):t,delta:r,outside:n})}getParams(t){return this.params[t]}wrapCoordinate(t,i){if(t<0){return e}if(typeof i.maxSize==="number"&&t>i.maxSize){return i.maxSize}return t}cancelScroll(t){var i,s;(s=(i=this.preventArtificialScroll)[t])===null||s===void 0?void 0:s.call(i);this.preventArtificialScroll[t]=null}convert(i,s,r=true){var e;const n=s.clientSize;const o=[0,((e=s.virtualContentSize)!==null&&e!==void 0?e:n)-n];const a=[0,s.contentSize-s.virtualSize];if(r){return t(i,o,a)}return t(i,a,o)}}class a{constructor(t=10){this.scrollThrottling=t;this.mouseWheelScrollTimestamp={rgCol:0,rgRow:0};this.lastKnownScrollCoordinate={rgCol:0,rgRow:0}}setCoordinate(t){this.lastKnownScrollCoordinate[t.dimension]=t.coordinate}latestScrollUpdate(t){this.mouseWheelScrollTimestamp[t]=(new Date).getTime()}isReady(t,i){const s=(new Date).getTime()-this.mouseWheelScrollTimestamp[t];return s>this.scrollThrottling&&i!==this.lastKnownScrollCoordinate[t]}}var c="Expected a function";function l(t,r,e){var n=true,o=true;if(typeof t!="function"){throw new TypeError(c)}if(s(e)){n="leading"in e?!!e.leading:n;o="trailing"in e?!!e.trailing:o}return i(t,r,{leading:n,maxWait:r,trailing:o})}export{a as L,o as a,n as g,l as t};
5
- //# sourceMappingURL=throttle-ce8e57c9.js.map
4
+ import{s as t}from"./index-1dcad6ef.js";import{d as i,a as s}from"./debounce-72878ced.js";const r={contentSize:0,clientSize:0,virtualSize:0,maxSize:0};const e=-1;function n(t,i,s=0){return t+(s?i-s:0)}class o{constructor(t){this.cfg=t;this.preventArtificialScroll={rgRow:null,rgCol:null};this.previousScroll={rgRow:e,rgCol:e};this.params={rgRow:Object.assign({},r),rgCol:Object.assign({},r)}}setParams(t,i){const s=n(t.contentSize,t.clientSize,t.virtualSize);this.params[i]=Object.assign(Object.assign({},t),{maxSize:s-t.clientSize,virtualContentSize:s})}async setScroll(t){this.cancelScroll(t.dimension);const i=new Promise(((i,s)=>{if(this.cfg.skipAnimationFrame){return i()}const r=window.requestAnimationFrame((()=>{i()}));this.preventArtificialScroll[t.dimension]=s.bind(null,r)}));try{await i;const s=this.getParams(t.dimension);t.coordinate=Math.ceil(t.coordinate);this.previousScroll[t.dimension]=this.wrapCoordinate(t.coordinate,s);this.preventArtificialScroll[t.dimension]=null;this.cfg.applyScroll(Object.assign(Object.assign({},t),{coordinate:s.virtualSize?this.convert(t.coordinate,s,false):t.coordinate}))}catch(t){window.cancelAnimationFrame(t)}}scroll(t,i,s=false,r,n=false){this.cancelScroll(i);if(!s&&this.previousScroll[i]===t){this.previousScroll[i]=e;return}const o=this.getParams(i);this.cfg.runScroll({dimension:i,coordinate:o.virtualSize?this.convert(t,o):t,delta:r,outside:n})}getParams(t){return this.params[t]}wrapCoordinate(t,i){if(t<0){return e}if(typeof i.maxSize==="number"&&t>i.maxSize){return i.maxSize}return t}cancelScroll(t){var i,s;(s=(i=this.preventArtificialScroll)[t])===null||s===void 0?void 0:s.call(i);this.preventArtificialScroll[t]=null}convert(i,s,r=true){var e;const n=s.clientSize;const o=[0,((e=s.virtualContentSize)!==null&&e!==void 0?e:n)-n];const a=[0,s.contentSize-s.virtualSize];if(r){return t(i,o,a)}return t(i,a,o)}}class a{constructor(t=10){this.scrollThrottling=t;this.mouseWheelScrollTimestamp={rgCol:0,rgRow:0};this.lastKnownScrollCoordinate={rgCol:0,rgRow:0}}setCoordinate(t){this.lastKnownScrollCoordinate[t.dimension]=t.coordinate}latestScrollUpdate(t){this.mouseWheelScrollTimestamp[t]=(new Date).getTime()}isReady(t,i){const s=(new Date).getTime()-this.mouseWheelScrollTimestamp[t];return s>this.scrollThrottling&&i!==this.lastKnownScrollCoordinate[t]}}var c="Expected a function";function l(t,r,e){var n=true,o=true;if(typeof t!="function"){throw new TypeError(c)}if(s(e)){n="leading"in e?!!e.leading:n;o="trailing"in e?!!e.trailing:o}return i(t,r,{leading:n,maxWait:r,trailing:o})}export{a as L,o as a,n as g,l as t};
5
+ //# sourceMappingURL=throttle-138d69c3.js.map
@@ -14,23 +14,38 @@ export declare class OrderEditor {
14
14
  dimensionCol: Observable<DimensionSettingsState>;
15
15
  /** Static stores, not expected to change during component lifetime */
16
16
  dataStore: Observable<DSourceState<DataType, DimensionRows>>;
17
+ rowType: DimensionRows;
17
18
  /** Row drag started */
18
19
  rowDragStart: EventEmitter<{
19
20
  cell: Cell;
20
21
  text: string;
21
22
  pos: PositionItem;
22
23
  event: MouseEvent;
24
+ rowType: DimensionRows;
23
25
  }>;
24
26
  /** Row drag ended started */
25
- rowDragEnd: EventEmitter;
27
+ rowDragEnd: EventEmitter<{
28
+ rowType: DimensionRows;
29
+ }>;
26
30
  /** Row move started */
27
- rowDrag: EventEmitter<PositionItem>;
31
+ rowDrag: EventEmitter<PositionItem & {
32
+ rowType: DimensionRows;
33
+ }>;
28
34
  /** Row mouse move started */
29
- rowMouseMove: EventEmitter<Cell>;
35
+ rowMouseMove: EventEmitter<Cell & {
36
+ rowType: DimensionRows;
37
+ }>;
30
38
  /** Row dragged, new range ready to be applied */
31
39
  rowDropped: EventEmitter<{
32
40
  from: number;
33
41
  to: number;
42
+ rowType: DimensionRows;
43
+ }>;
44
+ /** Row drag ended finished. Time to apply data */
45
+ rowOrderChange: EventEmitter<{
46
+ from: number;
47
+ to: number;
48
+ rowType: DimensionRows;
34
49
  }>;
35
50
  private rowOrderService;
36
51
  private events;
@@ -43,6 +58,5 @@ export declare class OrderEditor {
43
58
  y: number;
44
59
  }): void;
45
60
  connectedCallback(): void;
46
- private onPositionChanged;
47
61
  private getData;
48
62
  }
@@ -1,11 +1,9 @@
1
1
  import { EventEmitter } from '../../stencil-public-runtime';
2
2
  import ColumnService from '../data/column.service';
3
- import { DSourceState } from "../../store/index";
3
+ import { type DSourceState } from "../../store/index";
4
4
  import { EventData } from './selection.utils';
5
5
  import { Observable, SelectionStoreState, DimensionSettingsState, DataType, DimensionRows, ColumnRegular, DimensionCols, Cell, DragStartEvent } from '../../components';
6
- import { MultiDimensionType, Nullable, RangeClipboardCopyEventProps, RangeClipboardPasteEvent } from "../../types/index";
7
- import { FocusRenderEvent, ApplyFocusEvent, AllDimensionType } from "../../types/index";
8
- import { Editors, BeforeSaveDataDetails, BeforeEdit, RangeArea, TempRange, ChangedRange, BeforeRangeSaveDataDetails, SaveDataDetails } from "../../types/index";
6
+ import type { MultiDimensionType, Nullable, RangeClipboardCopyEventProps, RangeClipboardPasteEvent, FocusRenderEvent, ApplyFocusEvent, AllDimensionType, Editors, BeforeSaveDataDetails, BeforeEdit, RangeArea, TempRange, ChangedRange, BeforeRangeSaveDataDetails, SaveDataDetails } from "../../types/index";
9
7
  /**
10
8
  * Component for overlaying the grid with the selection.
11
9
  */
@@ -530,6 +530,7 @@ export declare class RevoGridComponent {
530
530
  event: MouseEvent;
531
531
  }>): void;
532
532
  onRowDragEnd(): void;
533
+ onRowOrderChange(e: CustomEvent<HTMLRevogrOrderEditorElementEventMap['roworderchange']>): void;
533
534
  onRowDrag({ detail }: CustomEvent<PositionItem>): void;
534
535
  onRowMouseMove(e: CustomEvent<Cell>): void;
535
536
  onCellEdit(e: CustomEvent<BeforeSaveDataDetails>): Promise<void>;
@@ -529,6 +529,7 @@ export namespace Components {
529
529
  * Parent element
530
530
  */
531
531
  "parent": HTMLElement;
532
+ "rowType": DimensionRows;
532
533
  }
533
534
  /**
534
535
  * Component for overlaying the grid with the selection.
@@ -1030,13 +1031,20 @@ declare global {
1030
1031
  text: string;
1031
1032
  pos: PositionItem;
1032
1033
  event: MouseEvent;
1034
+ rowType: DimensionRows;
1033
1035
  };
1034
- "rowdragendinit": any;
1035
- "rowdragmoveinit": PositionItem;
1036
- "rowdragmousemove": Cell;
1036
+ "rowdragendinit": { rowType: DimensionRows };
1037
+ "rowdragmoveinit": PositionItem & { rowType: DimensionRows };
1038
+ "rowdragmousemove": Cell & { rowType: DimensionRows };
1037
1039
  "rowdropinit": {
1038
1040
  from: number;
1039
1041
  to: number;
1042
+ rowType: DimensionRows;
1043
+ };
1044
+ "roworderchange": {
1045
+ from: number;
1046
+ to: number;
1047
+ rowType: DimensionRows;
1040
1048
  };
1041
1049
  }
1042
1050
  /**
@@ -1892,15 +1900,15 @@ declare namespace LocalJSX {
1892
1900
  /**
1893
1901
  * Row drag ended started
1894
1902
  */
1895
- "onRowdragendinit"?: (event: RevogrOrderEditorCustomEvent<any>) => void;
1903
+ "onRowdragendinit"?: (event: RevogrOrderEditorCustomEvent<{ rowType: DimensionRows }>) => void;
1896
1904
  /**
1897
1905
  * Row mouse move started
1898
1906
  */
1899
- "onRowdragmousemove"?: (event: RevogrOrderEditorCustomEvent<Cell>) => void;
1907
+ "onRowdragmousemove"?: (event: RevogrOrderEditorCustomEvent<Cell & { rowType: DimensionRows }>) => void;
1900
1908
  /**
1901
1909
  * Row move started
1902
1910
  */
1903
- "onRowdragmoveinit"?: (event: RevogrOrderEditorCustomEvent<PositionItem>) => void;
1911
+ "onRowdragmoveinit"?: (event: RevogrOrderEditorCustomEvent<PositionItem & { rowType: DimensionRows }>) => void;
1904
1912
  /**
1905
1913
  * Row drag started
1906
1914
  */
@@ -1909,6 +1917,7 @@ declare namespace LocalJSX {
1909
1917
  text: string;
1910
1918
  pos: PositionItem;
1911
1919
  event: MouseEvent;
1920
+ rowType: DimensionRows;
1912
1921
  }>) => void;
1913
1922
  /**
1914
1923
  * Row dragged, new range ready to be applied
@@ -1916,11 +1925,21 @@ declare namespace LocalJSX {
1916
1925
  "onRowdropinit"?: (event: RevogrOrderEditorCustomEvent<{
1917
1926
  from: number;
1918
1927
  to: number;
1928
+ rowType: DimensionRows;
1929
+ }>) => void;
1930
+ /**
1931
+ * Row drag ended finished. Time to apply data
1932
+ */
1933
+ "onRoworderchange"?: (event: RevogrOrderEditorCustomEvent<{
1934
+ from: number;
1935
+ to: number;
1936
+ rowType: DimensionRows;
1919
1937
  }>) => void;
1920
1938
  /**
1921
1939
  * Parent element
1922
1940
  */
1923
1941
  "parent"?: HTMLElement;
1942
+ "rowType"?: DimensionRows;
1924
1943
  }
1925
1944
  /**
1926
1945
  * Component for overlaying the grid with the selection.
@@ -16,8 +16,8 @@ export default class SortingPlugin extends BasePlugin {
16
16
  sorting?: SortingOrder;
17
17
  sortingFunc?: SortingOrderFunction;
18
18
  sortingPromise: (() => void) | null;
19
- postponeSort: import("lodash").DebouncedFunc<(order?: SortingOrder, comparison?: SortingOrderFunction) => Promise<void>>;
20
- runSorting(order?: SortingOrder, comparison?: SortingOrderFunction): Promise<void>;
19
+ postponeSort: import("lodash").DebouncedFunc<(order?: SortingOrder, comparison?: SortingOrderFunction) => void>;
20
+ runSorting(order?: SortingOrder, comparison?: SortingOrderFunction): void;
21
21
  constructor(revogrid: HTMLRevoGridElement, providers: PluginProviders);
22
22
  startSorting(order?: SortingOrder, sortingFunc?: SortingOrderFunction): void;
23
23
  getComparer(column: ColumnRegular | undefined, order: Order): CellCompareFunc | undefined;
@@ -25,7 +25,7 @@ export default class SortingPlugin extends BasePlugin {
25
25
  * Apply sorting to data on header click
26
26
  * If additive - add to existing sorting, multiple columns can be sorted
27
27
  */
28
- headerclick(column: ColumnRegular, index: number, additive: boolean): Promise<void>;
28
+ headerclick(column: ColumnRegular, index: number, additive: boolean): void;
29
29
  /**
30
30
  * Sort items by sorting function
31
31
  * @requires proxyItems applied to row store
@@ -34,7 +34,7 @@ export default class SortingPlugin extends BasePlugin {
34
34
  * @param sorting - per column sorting
35
35
  * @param data - this.stores['rgRow'].store.get('source')
36
36
  */
37
- sort(sorting?: SortingOrder, sortingFunc?: SortingOrderFunction, types?: DimensionRows[]): Promise<void>;
37
+ sort(sorting?: SortingOrder, sortingFunc?: SortingOrderFunction, types?: DimensionRows[]): void;
38
38
  defaultCellCompare(prop: ColumnProp, a: DataType, b: DataType): 0 | 1 | -1;
39
39
  descCellCompare(cmp: CellCompareFunc): (prop: ColumnProp, a: DataType, b: DataType) => number;
40
40
  sortIndexByItems(indexes: number[], source: DataType[], sortingFunc?: SortingOrderFunction): number[];
@@ -18,6 +18,11 @@ export declare class DataProvider {
18
18
  customRenderer?: GroupLabelTemplateFunc;
19
19
  }, silent?: boolean): DataType[];
20
20
  getModel(virtualIndex: number, type?: DimensionRows): DataType;
21
+ changeOrder({ rowType, from, to }: {
22
+ rowType: DimensionRows;
23
+ from: number;
24
+ to: number;
25
+ }): void;
21
26
  setCellData({ type, rowIndex, prop, val }: BeforeSaveDataDetails, mutate?: boolean): void;
22
27
  setRangeData(data: DataLookup, type: DimensionRows): void;
23
28
  refresh(type?: DimensionRows | 'all'): void;
@@ -57,4 +57,5 @@ export default class DimensionProvider {
57
57
  }): void;
58
58
  getViewPortPos(e: ViewPortScrollEvent): number;
59
59
  setSettings(data: Partial<DimensionSettingsState>, dimensionType: DimensionType): void;
60
+ updateSizesPositionByNewDataIndexes(type: MultiDimensionType, newItemsOrder: number[], prevItemsOrder?: number[]): void;
60
61
  }
@@ -2,9 +2,15 @@ import { DSourceState } from "../index";
2
2
  import { Observable, PluginSubscribe } from '../../utils/store.utils';
3
3
  type State = DSourceState<any, any>;
4
4
  /**
5
- * All items
6
- * Used as proxy for sorting
7
- * Keep order but do not modify final source
5
+ * Proxy plugin for data source.
6
+ * This plugin is used to sort the data source.
7
+ * It keeps the order of the items but does not modify the final source.
8
+ * It is also used to filter the items in the data source.
9
+ * The `set` method takes a key and a new value as arguments.
10
+ * If the key is 'proxyItems' it will filter the items in the data source according to the new value.
11
+ * The new value should be an array of numbers representing the indexes of the items that should be visible.
12
+ * The method will return a new array of numbers with the indexes of the items that should be visible.
13
+ * The method will also update the 'items' property of the store with the new array.
8
14
  */
9
15
  export declare const proxyPlugin: (store: Observable<State>) => PluginSubscribe<State>;
10
16
  export {};
@@ -33,6 +33,7 @@ export declare class DataStore<T extends GDataType, ST extends GDimension> {
33
33
  customRenderer?: GroupLabelTemplateFunc;
34
34
  }, silent?: boolean): void;
35
35
  addTrimmed(some: Partial<Trimmed>): void;
36
+ setSourceData(items: Record<number, any>, mutate?: boolean): void;
36
37
  setData(input: Partial<DSourceState<T, ST>>): void;
37
38
  refresh(): void;
38
39
  }
@@ -1,2 +1,2 @@
1
- export type RevogridEvents = 'contentsizechanged' | 'beforeedit' | 'beforerangeedit' | 'afteredit' | 'beforeautofill' | 'beforerange' | 'afterfocus' | 'roworderchanged' | 'beforesortingapply' | 'beforesorting' | 'rowdragstart' | 'headerclick' | 'beforecellfocus' | 'beforefocuslost' | 'beforesourceset' | 'beforeanysource' | 'aftersourceset' | 'afteranysource' | 'beforecolumnsset' | 'beforecolumnapplied' | 'aftercolumnsset' | 'beforefilterapply' | 'beforefiltertrimmed' | 'beforetrimmed' | 'aftertrimmed' | 'viewportscroll' | 'beforeexport' | 'beforeeditstart' | 'aftercolumnresize' | 'beforerowdefinition' | 'filterconfigchanged' | 'rowheaderschanged' | 'beforegridrender' | 'aftergridrender' | 'aftergridinit' | 'additionaldatachanged' | 'afterthemechanged' | 'beforepaste' | 'beforepasteapply' | 'pasteregion' | 'afterpasteapply' | 'beforecut' | 'clearregion' | 'beforecopy' | 'beforecopyapply' | 'copyregion' | 'beforerowrender' | 'afterrender' | 'beforecellrender' | 'dragstartcell' | 'celledit' | 'closeedit' | 'filterChange' | 'resetChange' | 'beforefocusrender' | 'beforescrollintoview' | 'afterfocus' | 'beforeheaderclick' | 'headerresize' | 'beforeheaderresize' | 'headerdblclick' | 'beforeheaderrender' | 'afterheaderrender' | 'rowdragstartinit' | 'rowdragendinit' | 'rowdragmoveinit' | 'rowdragmousemove' | 'rowdropinit' | 'beforecopyregion' | 'beforepasteregion' | 'celleditapply' | 'beforecellfocusinit' | 'beforenextvpfocus' | 'setedit' | 'beforeapplyrange' | 'beforesetrange' | 'beforeeditrender' | 'setrange' | 'selectall' | 'canceledit' | 'settemprange' | 'beforesettemprange' | 'applyfocus' | 'focuscell' | 'beforerangedataapply' | 'selectionchangeinit' | 'beforerangecopyapply' | 'rangeeditapply' | 'clipboardrangecopy' | 'clipboardrangepaste' | 'beforekeydown' | 'beforekeyup' | 'beforecellsave' | 'scrollview' | 'ref' | 'scrollvirtual' | 'scrollviewport' | 'resizeviewport' | 'scrollchange' | 'scrollviewportsilent' | 'html';
1
+ export type RevogridEvents = 'contentsizechanged' | 'beforeedit' | 'beforerangeedit' | 'afteredit' | 'beforeautofill' | 'beforerange' | 'afterfocus' | 'roworderchanged' | 'beforesortingapply' | 'beforesorting' | 'rowdragstart' | 'headerclick' | 'beforecellfocus' | 'beforefocuslost' | 'beforesourceset' | 'beforeanysource' | 'aftersourceset' | 'afteranysource' | 'beforecolumnsset' | 'beforecolumnapplied' | 'aftercolumnsset' | 'beforefilterapply' | 'beforefiltertrimmed' | 'beforetrimmed' | 'aftertrimmed' | 'viewportscroll' | 'beforeexport' | 'beforeeditstart' | 'aftercolumnresize' | 'beforerowdefinition' | 'filterconfigchanged' | 'rowheaderschanged' | 'beforegridrender' | 'aftergridrender' | 'aftergridinit' | 'additionaldatachanged' | 'afterthemechanged' | 'beforepaste' | 'beforepasteapply' | 'pasteregion' | 'afterpasteapply' | 'beforecut' | 'clearregion' | 'beforecopy' | 'beforecopyapply' | 'copyregion' | 'beforerowrender' | 'afterrender' | 'beforecellrender' | 'dragstartcell' | 'celledit' | 'closeedit' | 'filterChange' | 'resetChange' | 'beforefocusrender' | 'beforescrollintoview' | 'afterfocus' | 'beforeheaderclick' | 'headerresize' | 'beforeheaderresize' | 'headerdblclick' | 'beforeheaderrender' | 'afterheaderrender' | 'rowdragstartinit' | 'rowdragendinit' | 'rowdragmoveinit' | 'rowdragmousemove' | 'rowdropinit' | 'roworderchange' | 'beforecopyregion' | 'beforepasteregion' | 'celleditapply' | 'beforecellfocusinit' | 'beforenextvpfocus' | 'setedit' | 'beforeapplyrange' | 'beforesetrange' | 'beforeeditrender' | 'setrange' | 'selectall' | 'canceledit' | 'settemprange' | 'beforesettemprange' | 'applyfocus' | 'focuscell' | 'beforerangedataapply' | 'selectionchangeinit' | 'beforerangecopyapply' | 'rangeeditapply' | 'clipboardrangecopy' | 'clipboardrangepaste' | 'beforekeydown' | 'beforekeyup' | 'beforecellsave' | 'scrollview' | 'ref' | 'scrollvirtual' | 'scrollviewport' | 'resizeviewport' | 'scrollchange' | 'scrollviewportsilent' | 'html';
2
2
  export declare const REVOGRID_EVENTS: Map<RevogridEvents, RevogridEvents>;