@revolist/revogrid 4.9.5 → 4.9.6
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.
- package/dist/cjs/{column.service-08df359f.js → column.service-0615a373.js} +11 -12
- package/dist/cjs/column.service-0615a373.js.map +1 -0
- package/dist/cjs/{column.utils-0f0f4dc4.js → column.utils-694677fa.js} +13 -13
- package/dist/cjs/column.utils-694677fa.js.map +1 -0
- package/dist/cjs/edit.utils-2e1f4278.js +20 -0
- package/dist/cjs/edit.utils-2e1f4278.js.map +1 -0
- package/dist/cjs/{events-b28cc194.js → events-af8f6914.js} +1 -8
- package/dist/cjs/events-af8f6914.js.map +1 -0
- package/dist/cjs/{header-cell-renderer-fb2f9a2d.js → header-cell-renderer-360528aa.js} +2 -2
- package/dist/cjs/{header-cell-renderer-fb2f9a2d.js.map → header-cell-renderer-360528aa.js.map} +1 -1
- package/dist/cjs/{dimension.helpers-85294778.js → index-2991afbb.js} +262 -3
- package/dist/cjs/index-2991afbb.js.map +1 -0
- package/dist/cjs/index.cjs.js +86 -30
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/cjs/key.utils-b84b0eba.js +111 -0
- package/dist/cjs/key.utils-b84b0eba.js.map +1 -0
- package/dist/cjs/revo-grid.cjs.entry.js +72 -73
- package/dist/cjs/revo-grid.cjs.entry.js.map +1 -1
- package/dist/cjs/revogr-attribution_6.cjs.entry.js +37 -37
- package/dist/cjs/revogr-attribution_6.cjs.entry.js.map +1 -1
- package/dist/cjs/revogr-clipboard_3.cjs.entry.js +8 -8
- package/dist/cjs/revogr-clipboard_3.cjs.entry.js.map +1 -1
- package/dist/cjs/revogr-data_4.cjs.entry.js +13 -14
- package/dist/cjs/revogr-data_4.cjs.entry.js.map +1 -1
- package/dist/cjs/{viewport.store-300977e4.js → row-header-utils-b5266b12.js} +13 -6
- package/dist/cjs/row-header-utils-b5266b12.js.map +1 -0
- package/dist/cjs/{selection.helpers-371a38aa.js → selection.helpers-4374518f.js} +13 -13
- package/dist/cjs/selection.helpers-4374518f.js.map +1 -0
- package/dist/cjs/{throttle-52be9e67.js → throttle-8885fd65.js} +2 -2
- package/dist/cjs/{throttle-52be9e67.js.map → throttle-8885fd65.js.map} +1 -1
- package/dist/collection/components/header/revogr-header.js +1 -1
- package/dist/collection/index.js +1 -2
- package/dist/collection/index.js.map +1 -1
- package/dist/collection/plugins/column.auto-size.plugin.js +1 -1
- package/dist/collection/plugins/column.auto-size.plugin.js.map +1 -1
- package/dist/collection/utils/index.js +7 -0
- package/dist/collection/utils/index.js.map +1 -1
- package/dist/esm/{column.service-cfc1149b.js → column.service-af0694c5.js} +3 -4
- package/dist/esm/column.service-af0694c5.js.map +1 -0
- package/dist/esm/{column.utils-f6300fb5.js → column.utils-78dd3ef2.js} +2 -2
- package/dist/esm/{column.utils-f6300fb5.js.map → column.utils-78dd3ef2.js.map} +1 -1
- package/dist/esm/edit.utils-ca303802.js +17 -0
- package/dist/esm/edit.utils-ca303802.js.map +1 -0
- package/dist/esm/{events-77b43b40.js → events-cf0893a3.js} +2 -8
- package/dist/esm/events-cf0893a3.js.map +1 -0
- package/dist/esm/{header-cell-renderer-6f8eb067.js → header-cell-renderer-261317c3.js} +2 -2
- package/dist/esm/{header-cell-renderer-6f8eb067.js.map → header-cell-renderer-261317c3.js.map} +1 -1
- package/dist/esm/{dimension.helpers-938ea850.js → index-f65def08.js} +231 -4
- package/dist/esm/index-f65def08.js.map +1 -0
- package/dist/esm/index.js +5 -4
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/key.utils-4b0093d5.js +98 -0
- package/dist/esm/key.utils-4b0093d5.js.map +1 -0
- package/dist/esm/revo-grid.entry.js +7 -8
- package/dist/esm/revo-grid.entry.js.map +1 -1
- package/dist/esm/revogr-attribution_6.entry.js +8 -8
- package/dist/esm/revogr-clipboard_3.entry.js +3 -3
- package/dist/esm/revogr-data_4.entry.js +5 -6
- package/dist/esm/revogr-data_4.entry.js.map +1 -1
- package/dist/esm/{viewport.store-a690096b.js → row-header-utils-6081260c.js} +9 -3
- package/dist/esm/row-header-utils-6081260c.js.map +1 -0
- package/dist/esm/{selection.helpers-a49a3d09.js → selection.helpers-d92697e1.js} +2 -2
- package/dist/esm/{selection.helpers-a49a3d09.js.map → selection.helpers-d92697e1.js.map} +1 -1
- package/dist/esm/{throttle-7283692c.js → throttle-041ded8e.js} +2 -2
- package/dist/esm/{throttle-7283692c.js.map → throttle-041ded8e.js.map} +1 -1
- package/dist/revo-grid/column.service-af0694c5.js +5 -0
- package/dist/revo-grid/{column.service-cfc1149b.js.map → column.service-af0694c5.js.map} +1 -1
- package/dist/revo-grid/column.utils-78dd3ef2.js +5 -0
- package/dist/revo-grid/{column.utils-f6300fb5.js.map → column.utils-78dd3ef2.js.map} +1 -1
- package/dist/revo-grid/edit.utils-ca303802.js +5 -0
- package/dist/revo-grid/edit.utils-ca303802.js.map +1 -0
- package/dist/revo-grid/events-cf0893a3.js +5 -0
- package/dist/revo-grid/events-cf0893a3.js.map +1 -0
- package/dist/revo-grid/{header-cell-renderer-6f8eb067.js → header-cell-renderer-261317c3.js} +2 -2
- package/dist/revo-grid/index-f65def08.js +5 -0
- package/dist/revo-grid/index-f65def08.js.map +1 -0
- package/dist/revo-grid/index.esm.js +1 -1
- package/dist/revo-grid/key.utils-4b0093d5.js +5 -0
- package/dist/revo-grid/key.utils-4b0093d5.js.map +1 -0
- package/dist/revo-grid/revo-grid.entry.js +1 -1
- package/dist/revo-grid/revo-grid.entry.js.map +1 -1
- package/dist/revo-grid/revogr-attribution_6.entry.js +1 -1
- package/dist/revo-grid/revogr-clipboard_3.entry.js +1 -1
- package/dist/revo-grid/revogr-clipboard_3.entry.js.map +1 -1
- package/dist/revo-grid/revogr-data_4.entry.js +1 -1
- package/dist/revo-grid/revogr-data_4.entry.js.map +1 -1
- package/dist/revo-grid/row-header-utils-6081260c.js +5 -0
- package/dist/revo-grid/row-header-utils-6081260c.js.map +1 -0
- package/dist/revo-grid/selection.helpers-d92697e1.js +5 -0
- package/dist/revo-grid/{selection.helpers-a49a3d09.js.map → selection.helpers-d92697e1.js.map} +1 -1
- package/dist/revo-grid/{throttle-7283692c.js → throttle-041ded8e.js} +2 -2
- package/dist/types/index.d.ts +1 -2
- package/dist/types/plugins/column.auto-size.plugin.d.ts +1 -2
- package/dist/types/utils/index.d.ts +7 -0
- package/hydrate/index.js +147 -149
- package/hydrate/index.mjs +147 -149
- package/package.json +2 -2
- package/standalone/_stringToPath.js +1389 -0
- package/standalone/_stringToPath.js.map +1 -0
- package/standalone/column.service.js +4 -3
- package/standalone/column.service.js.map +1 -1
- package/standalone/consts.js +1 -1
- package/standalone/data.store.js +31 -1410
- package/standalone/data.store.js.map +1 -1
- package/standalone/debounce.js +2 -1
- package/standalone/debounce.js.map +1 -1
- package/standalone/dimension.helpers.js +2 -2
- package/standalone/index.js +5 -2
- package/standalone/index.js.map +1 -1
- package/standalone/index2.js +160 -1
- package/standalone/index2.js.map +1 -1
- package/standalone/isObjectLike.js +195 -0
- package/standalone/isObjectLike.js.map +1 -0
- package/standalone/revo-grid.js +4 -3
- package/standalone/revo-grid.js.map +1 -1
- package/standalone/revogr-data2.js +3 -2
- package/standalone/revogr-data2.js.map +1 -1
- package/standalone/revogr-edit.js +1 -1
- package/standalone/revogr-edit2.js +57 -83
- package/standalone/revogr-edit2.js.map +1 -1
- package/standalone/revogr-focus2.js +2 -1
- package/standalone/revogr-focus2.js.map +1 -1
- package/standalone/revogr-header2.js +4 -3
- package/standalone/revogr-header2.js.map +1 -1
- package/standalone/revogr-order-editor2.js +3 -2
- package/standalone/revogr-order-editor2.js.map +1 -1
- package/standalone/revogr-overlay-selection2.js +5 -5
- package/standalone/revogr-row-headers2.js +3 -2
- package/standalone/revogr-row-headers2.js.map +1 -1
- package/standalone/selection.utils.js +2 -1
- package/standalone/selection.utils.js.map +1 -1
- package/standalone/throttle.js +1 -1
- package/standalone/toNumber.js +2 -189
- package/standalone/toNumber.js.map +1 -1
- package/dist/cjs/column.service-08df359f.js.map +0 -1
- package/dist/cjs/column.utils-0f0f4dc4.js.map +0 -1
- package/dist/cjs/dimension.helpers-85294778.js.map +0 -1
- package/dist/cjs/events-b28cc194.js.map +0 -1
- package/dist/cjs/index-2410bbd9.js +0 -103
- package/dist/cjs/index-2410bbd9.js.map +0 -1
- package/dist/cjs/key.utils-1e48ab8f.js +0 -144
- package/dist/cjs/key.utils-1e48ab8f.js.map +0 -1
- package/dist/cjs/selection.helpers-371a38aa.js.map +0 -1
- package/dist/cjs/viewport.store-300977e4.js.map +0 -1
- package/dist/esm/column.service-cfc1149b.js.map +0 -1
- package/dist/esm/dimension.helpers-938ea850.js.map +0 -1
- package/dist/esm/events-77b43b40.js.map +0 -1
- package/dist/esm/index-4e881436.js +0 -77
- package/dist/esm/index-4e881436.js.map +0 -1
- package/dist/esm/key.utils-425c987d.js +0 -133
- package/dist/esm/key.utils-425c987d.js.map +0 -1
- package/dist/esm/viewport.store-a690096b.js.map +0 -1
- package/dist/revo-grid/column.service-cfc1149b.js +0 -5
- package/dist/revo-grid/column.utils-f6300fb5.js +0 -5
- package/dist/revo-grid/dimension.helpers-938ea850.js +0 -5
- package/dist/revo-grid/dimension.helpers-938ea850.js.map +0 -1
- package/dist/revo-grid/events-77b43b40.js +0 -5
- package/dist/revo-grid/events-77b43b40.js.map +0 -1
- package/dist/revo-grid/index-4e881436.js +0 -5
- package/dist/revo-grid/index-4e881436.js.map +0 -1
- package/dist/revo-grid/key.utils-425c987d.js +0 -5
- package/dist/revo-grid/key.utils-425c987d.js.map +0 -1
- package/dist/revo-grid/selection.helpers-a49a3d09.js +0 -5
- package/dist/revo-grid/viewport.store-a690096b.js +0 -5
- package/dist/revo-grid/viewport.store-a690096b.js.map +0 -1
- /package/dist/revo-grid/{header-cell-renderer-6f8eb067.js.map → header-cell-renderer-261317c3.js.map} +0 -0
- /package/dist/revo-grid/{throttle-7283692c.js.map → throttle-041ded8e.js.map} +0 -0
package/dist/revo-grid/{selection.helpers-a49a3d09.js.map → selection.helpers-d92697e1.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["defaultState","range","tempRange","tempRangeType","focus","edit","lastCell","nextFocus","SelectionStore","constructor","this","unsubscribe","store","createStore","on","key","newVal","set","onChange","propName","cb","push","clearFocus","setStore","setFocus","end","getRange","setNextFocus","setTempArea","area","type","clearTemp","setRangeArea","setRange","start","setLastCell","setEdit","val","get","x","y","dispose","forEach","f","EMPTY_INDEX","SelectionStoreConnector","dirty","stores","columnStores","rowStores","storesByType","storesXToType","storesYToType","sections","focusedStore","focused","_a","entity","cell","position","parseInt","selectedRange","registerSection","e","length","indexOf","beforeUpdate","registerColumn","isHiddenStore","registerRow","register","c","_b","destroy","Object","keys","setEditByCell","storePos","editCell","focusByCell","beforeNextFocusCell","next","getNextStore","assign","item","currentStorePointer","getCurrentStorePointer","cropCellToMax","s","nextItem","nextCell","nextStore","entries","nextItemCoord","getXStores","getYStores","nextLastCell","clearAll","selectAll","i","pos","types","t","croppedCell","cellCoordinates","coordinate","Math","min","x1","max","y1","isRangeSingleCell","a"],"sources":["src/store/selection/selection.store.ts","src/services/selection.store.connector.ts","src/store/selection/selection.helpers.ts"],"sourcesContent":["/**\n * Selection store\n */\n\nimport { setStore, Observable } from '../../utils/store.utils';\nimport { getRange } from '@store';\nimport { SelectionStoreState, Cell, TempRange, RangeArea, Nullable } from '@type';\nimport { createStore } from '@stencil/store';\n\nfunction defaultState(): SelectionStoreState {\n return {\n range: null,\n tempRange: null,\n tempRangeType: null,\n focus: null,\n edit: null,\n lastCell: null,\n nextFocus: null,\n };\n}\n\nexport class SelectionStore {\n readonly store: Observable<SelectionStoreState>;\n private unsubscribe: { (): void }[] = [];\n constructor() {\n this.store = createStore(defaultState());\n this.store.on('set', (key, newVal) => {\n if (key === 'tempRange' && !newVal) {\n this.store.set('tempRangeType', null);\n }\n });\n }\n\n onChange<Key extends keyof SelectionStoreState>(propName: Key, cb: (newValue: SelectionStoreState[Key]) => void) {\n this.unsubscribe.push(this.store.onChange(propName, cb));\n }\n\n clearFocus() {\n setStore(this.store, { focus: null, range: null, edit: null, tempRange: null });\n }\n\n setFocus(focus: Cell, end?: Cell) {\n if (!end) {\n setStore(this.store, { focus });\n } else {\n setStore(this.store, {\n focus,\n range: getRange(focus, end),\n edit: null,\n tempRange: null,\n });\n }\n }\n\n setNextFocus(focus: Cell) {\n setStore(this.store, { nextFocus: focus });\n }\n\n setTempArea(range: Nullable<TempRange> | null) {\n setStore(this.store, { tempRange: range?.area, tempRangeType: range?.type, edit: null });\n }\n\n clearTemp() {\n setStore(this.store, { tempRange: null });\n }\n\n /** Can be applied from selection change or from simple keyboard change clicks */\n setRangeArea(range: RangeArea | null) {\n setStore(this.store, { range, edit: null, tempRange: null });\n }\n setRange(start: Cell, end: Cell) {\n const range = getRange(start, end);\n this.setRangeArea(range);\n }\n\n setLastCell(lastCell: Cell) {\n setStore(this.store, { lastCell });\n }\n\n setEdit(val?: string | boolean) {\n const focus = this.store.get('focus');\n if (focus && typeof val === 'string') {\n setStore(this.store, {\n edit: { x: focus.x, y: focus.y, val },\n });\n return;\n }\n setStore(this.store, { edit: null });\n }\n\n dispose() {\n this.unsubscribe.forEach(f => f());\n this.store.dispose();\n }\n}\n","import { cropCellToMax, isHiddenStore, nextCell, SelectionStore } from '@store';\nimport type {\n MultiDimensionType,\n DimensionCols,\n DimensionRows,\n Cell,\n} from '@type';\n\ntype StoreByDimension = Record<number, SelectionStore>;\ntype FocusedStore = {\n entity: SelectionStore;\n cell: Cell;\n position: Cell;\n};\n\ntype StoresMapping<T> = { [xOrY: number]: Partial<T> };\n\nexport const EMPTY_INDEX = -1;\n\nexport default class SelectionStoreConnector {\n // dirty flag required to cleanup whole store in case visibility of panels changed\n private dirty = false;\n readonly stores: { [y: number]: { [x: number]: SelectionStore } } = {};\n\n readonly columnStores: StoreByDimension = {};\n readonly rowStores: { [y: number]: SelectionStore } = {};\n\n /**\n * Helpers for data conversion\n */\n readonly storesByType: Partial<Record<MultiDimensionType, number>> = {};\n readonly storesXToType: StoresMapping<DimensionCols> = {};\n readonly storesYToType: StoresMapping<DimensionRows> = {};\n\n get focusedStore(): FocusedStore | null {\n for (let y in this.stores) {\n for (let x in this.stores[y]) {\n const focused = this.stores[y][x]?.store.get('focus');\n if (focused) {\n return {\n entity: this.stores[y][x],\n cell: focused,\n position: {\n x: parseInt(x, 10),\n y: parseInt(y, 10),\n },\n };\n }\n }\n }\n return null;\n }\n\n get edit() {\n return this.focusedStore?.entity.store.get('edit');\n }\n\n get focused() {\n return this.focusedStore?.entity.store.get('focus');\n }\n\n get selectedRange() {\n return this.focusedStore?.entity.store.get('range');\n }\n\n private readonly sections: Element[] = [];\n\n registerSection(e?: Element) {\n if (!e) {\n this.sections.length = 0;\n // some elements removed, rebuild stores\n this.dirty = true;\n return;\n }\n if (this.sections.indexOf(e) === -1) {\n this.sections.push(e);\n }\n }\n\n // check if require to cleanup all stores\n beforeUpdate() {\n if (this.dirty) {\n for (let y in this.stores) {\n for (let x in this.stores[y]) {\n this.stores[y][x].dispose();\n }\n }\n this.dirty = false;\n }\n }\n\n registerColumn(x: number, type: DimensionCols): SelectionStore {\n // if hidden just create store but no operations needed\n if (isHiddenStore(x)) {\n return new SelectionStore();\n }\n if (this.columnStores[x]) {\n return this.columnStores[x];\n }\n this.columnStores[x] = new SelectionStore();\n // build cross-linking type to position\n this.storesByType[type] = x;\n this.storesXToType[x] = type;\n return this.columnStores[x];\n }\n\n registerRow(y: number, type: DimensionRows): SelectionStore {\n // if hidden just create store\n if (isHiddenStore(y)) {\n return new SelectionStore();\n }\n if (this.rowStores[y]) {\n return this.rowStores[y];\n }\n this.rowStores[y] = new SelectionStore();\n // build cross linking type to position\n this.storesByType[type] = y;\n this.storesYToType[y] = type;\n return this.rowStores[y];\n }\n\n /**\n * Cross store proxy, based on multiple dimensions\n */\n register({ x, y }: Cell): SelectionStore {\n // if hidden just create store\n if (isHiddenStore(x) || isHiddenStore(y)) {\n return new SelectionStore();\n }\n if (!this.stores[y]) {\n this.stores[y] = {};\n }\n if (this.stores[y][x]) {\n // Store already registered. Do not register twice\n return this.stores[y][x];\n }\n this.stores[y][x] = new SelectionStore();\n // proxy update, column store trigger only range area\n this.stores[y][x]?.onChange('range', c => {\n this.columnStores[x].setRangeArea(c);\n this.rowStores[y].setRangeArea(c);\n });\n // clean up on remove\n this.stores[y][x]?.store.on('dispose', () => this.destroy(x, y));\n return this.stores[y][x];\n }\n\n private destroy(x: number, y: number) {\n this.columnStores[x]?.dispose();\n this.rowStores[y]?.dispose();\n\n delete this.rowStores[y];\n delete this.columnStores[x];\n // clear x cross-link\n if (this.storesXToType[x]) {\n const type = this.storesXToType[x];\n delete this.storesXToType[x];\n delete this.storesByType[type];\n }\n // clear y cross-link\n if (this.storesYToType[y]) {\n const type = this.storesYToType[y];\n delete this.storesYToType[y];\n delete this.storesByType[type];\n }\n if (this.stores[y]) {\n delete this.stores[y][x];\n }\n // clear empty rows\n if (!Object.keys(this.stores[y] || {}).length) {\n delete this.stores[y];\n }\n }\n\n setEditByCell<T extends Cell>(storePos: T, editCell: T) {\n this.focusByCell(storePos, editCell, editCell);\n this.setEdit('');\n }\n\n /**\n * Sets the next focus cell before the current one.\n * \n * @param focus - The cell to set as the next focus.\n */\n beforeNextFocusCell(focus: Cell) {\n // If there is no focused store, return early.\n if (!this.focusedStore) {\n return;\n }\n\n // Get the next store based on the current focus and the last cell.\n const lastCell = this.focusedStore.entity.store.get('lastCell');\n const next = lastCell && this.getNextStore(focus, this.focusedStore.position, lastCell);\n\n // Set the next focus cell in the store.\n next?.store?.setNextFocus({ ...focus, ...next.item });\n }\n\n focusByCell<T extends Cell>(storePos: T, start: T, end: T) {\n const store = this.stores[storePos.y][storePos.x];\n this.focus(store, { focus: start, end });\n }\n\n focus(store: SelectionStore, { focus, end }: { focus: Cell; end: Cell }) {\n const currentStorePointer = this.getCurrentStorePointer(store);\n if (!currentStorePointer) {\n return null;\n }\n\n // check for the focus in nearby store/viewport\n const lastCell = store.store.get('lastCell');\n const next = lastCell && this.getNextStore(focus, currentStorePointer, lastCell);\n\n // if next store present - update\n if (next?.store) {\n const item = { ...focus, ...next.item };\n this.focus(next.store, { focus: item, end: item });\n return null;\n }\n\n if (lastCell) {\n focus = cropCellToMax(focus, lastCell);\n end = cropCellToMax(end, lastCell); \n }\n store.setFocus(focus, end);\n return focus;\n }\n\n /**\n * Retrieves the current store pointer based on the active store.\n * Clears focus from all stores except the active one.\n */\n getCurrentStorePointer(store: SelectionStore) {\n let currentStorePointer: Cell | undefined;\n\n // Iterate through all stores\n for (let y in this.stores) {\n for (let x in this.stores[y]) {\n const s = this.stores[y][x];\n\n // Clear focus from stores other than the active one\n if (s !== store) {\n s.clearFocus();\n } else {\n // Update the current store pointer with the active store coordinates\n currentStorePointer = { \n x: parseInt(x, 10), \n y: parseInt(y, 10) \n };\n }\n }\n }\n\n return currentStorePointer;\n }\n\n /**\n * Retrieves the next store based on the focus cell and current store pointer.\n * If the next store exists, returns an object with the next store and the item in the new store.\n * If the next store does not exist, returns null.\n */\n getNextStore(\n focus: Cell,\n currentStorePointer: Cell,\n lastCell: Cell,\n ) {\n // item in new store\n const nextItem: Partial<Cell> | null = nextCell(focus, lastCell);\n\n let nextStore: SelectionStore | undefined;\n if (nextItem) {\n Object.entries(nextItem).forEach(([type, nextItemCoord]: [keyof Cell, number]) => {\n let stores;\n switch (type) {\n case 'x':\n // Get the X stores for the current Y coordinate of the current store pointer\n stores = this.getXStores(currentStorePointer.y);\n break;\n case 'y':\n // Get the Y stores for the current X coordinate of the current store pointer\n stores = this.getYStores(currentStorePointer.x);\n break;\n }\n\n // Get the next store based on the item in the new store\n if (nextItemCoord >= 0) {\n nextStore = stores[++currentStorePointer[type]];\n } else {\n nextStore = stores[--currentStorePointer[type]];\n const nextLastCell = nextStore?.store.get('lastCell');\n if (nextLastCell) {\n nextItem[type] = nextLastCell[type] + nextItemCoord;\n }\n }\n });\n }\n return {\n store: nextStore,\n item: nextItem,\n };\n }\n\n clearAll() {\n for (let y in this.stores) {\n for (let x in this.stores[y]) {\n this.stores[y][x]?.clearFocus();\n }\n }\n }\n\n setEdit(val?: string | boolean) {\n if (!this.focusedStore) {\n return;\n }\n this.focusedStore.entity.setEdit(val);\n }\n\n /**\n * Select all cells across all stores\n */\n selectAll() {\n for (let y in this.stores) {\n for (let x in this.stores[y]) {\n const store = this.stores[y][x];\n if (!store) {\n continue;\n }\n const lastCell = store.store.get('lastCell');\n if (lastCell) {\n store.setRange(\n { x: 0, y: 0 },\n { x: lastCell.x - 1, y: lastCell.y - 1 },\n );\n }\n }\n }\n }\n\n private getXStores(y: number) {\n return this.stores[y];\n }\n\n private getYStores(x: number) {\n const stores: { [p: number]: SelectionStore } = {};\n for (let i in this.stores) {\n stores[i] = this.stores[i][x];\n }\n return stores;\n }\n}\n","import { EMPTY_INDEX } from '../../services/selection.store.connector';\nimport { Cell, RangeArea } from '@type';\n\nexport function isHiddenStore(pos: number) {\n return pos === EMPTY_INDEX;\n}\n\nexport function nextCell(cell: Cell, lastCell: Cell): Partial<Cell> | null {\n const nextItem: Partial<Cell> = {};\n let types: (keyof Cell)[] = ['x', 'y'];\n\n // previous item check\n for (let t of types) {\n if (cell[t] < 0) {\n nextItem[t] = cell[t];\n return nextItem;\n }\n }\n // next item check\n for (let t of types) {\n if (cell[t] >= lastCell[t]) {\n nextItem[t] = cell[t] - lastCell[t];\n return nextItem;\n }\n }\n return null;\n}\n\nexport function cropCellToMax(cell: Cell, lastCell: Cell): Cell {\n const croppedCell: Cell = { ...cell };\n const cellCoordinates: (keyof Cell)[] = ['x', 'y'];\n\n for (const coordinate of cellCoordinates) {\n if (cell[coordinate] < 0) {\n croppedCell[coordinate] = 0;\n } else if (cell[coordinate] >= lastCell[coordinate]) {\n croppedCell[coordinate] = lastCell[coordinate] - 1;\n }\n }\n\n return croppedCell;\n}\n\nexport function getRange(start?: Cell | null, end?: Cell | null): RangeArea | null {\n return start && end\n ? {\n x: Math.min(start.x, end.x),\n y: Math.min(start.y, end.y),\n x1: Math.max(start.x, end.x),\n y1: Math.max(start.y, end.y),\n }\n : null;\n}\n\nexport function isRangeSingleCell(a: RangeArea): boolean {\n return a.x === a.x1 && a.y === a.y1;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["defaultState","range","tempRange","tempRangeType","focus","edit","lastCell","nextFocus","SelectionStore","constructor","this","unsubscribe","store","createStore","on","key","newVal","set","onChange","propName","cb","push","clearFocus","setStore","setFocus","end","getRange","setNextFocus","setTempArea","area","type","clearTemp","setRangeArea","setRange","start","setLastCell","setEdit","val","get","x","y","dispose","forEach","f","EMPTY_INDEX","SelectionStoreConnector","dirty","stores","columnStores","rowStores","storesByType","storesXToType","storesYToType","sections","focusedStore","focused","_a","entity","cell","position","parseInt","selectedRange","registerSection","e","length","indexOf","beforeUpdate","registerColumn","isHiddenStore","registerRow","register","c","_b","destroy","Object","keys","setEditByCell","storePos","editCell","focusByCell","beforeNextFocusCell","next","getNextStore","assign","item","currentStorePointer","getCurrentStorePointer","cropCellToMax","s","nextItem","nextCell","nextStore","entries","nextItemCoord","getXStores","getYStores","nextLastCell","clearAll","selectAll","i","pos","types","t","croppedCell","cellCoordinates","coordinate","Math","min","x1","max","y1","isRangeSingleCell","a"],"sources":["src/store/selection/selection.store.ts","src/services/selection.store.connector.ts","src/store/selection/selection.helpers.ts"],"sourcesContent":["/**\n * Selection store\n */\n\nimport { setStore, Observable } from '../../utils/store.utils';\nimport { getRange } from '@store';\nimport { SelectionStoreState, Cell, TempRange, RangeArea, Nullable } from '@type';\nimport { createStore } from '@stencil/store';\n\nfunction defaultState(): SelectionStoreState {\n return {\n range: null,\n tempRange: null,\n tempRangeType: null,\n focus: null,\n edit: null,\n lastCell: null,\n nextFocus: null,\n };\n}\n\nexport class SelectionStore {\n readonly store: Observable<SelectionStoreState>;\n private unsubscribe: { (): void }[] = [];\n constructor() {\n this.store = createStore(defaultState());\n this.store.on('set', (key, newVal) => {\n if (key === 'tempRange' && !newVal) {\n this.store.set('tempRangeType', null);\n }\n });\n }\n\n onChange<Key extends keyof SelectionStoreState>(propName: Key, cb: (newValue: SelectionStoreState[Key]) => void) {\n this.unsubscribe.push(this.store.onChange(propName, cb));\n }\n\n clearFocus() {\n setStore(this.store, { focus: null, range: null, edit: null, tempRange: null });\n }\n\n setFocus(focus: Cell, end?: Cell) {\n if (!end) {\n setStore(this.store, { focus });\n } else {\n setStore(this.store, {\n focus,\n range: getRange(focus, end),\n edit: null,\n tempRange: null,\n });\n }\n }\n\n setNextFocus(focus: Cell) {\n setStore(this.store, { nextFocus: focus });\n }\n\n setTempArea(range: Nullable<TempRange> | null) {\n setStore(this.store, { tempRange: range?.area, tempRangeType: range?.type, edit: null });\n }\n\n clearTemp() {\n setStore(this.store, { tempRange: null });\n }\n\n /** Can be applied from selection change or from simple keyboard change clicks */\n setRangeArea(range: RangeArea | null) {\n setStore(this.store, { range, edit: null, tempRange: null });\n }\n setRange(start: Cell, end: Cell) {\n const range = getRange(start, end);\n this.setRangeArea(range);\n }\n\n setLastCell(lastCell: Cell) {\n setStore(this.store, { lastCell });\n }\n\n setEdit(val?: string | boolean) {\n const focus = this.store.get('focus');\n if (focus && typeof val === 'string') {\n setStore(this.store, {\n edit: { x: focus.x, y: focus.y, val },\n });\n return;\n }\n setStore(this.store, { edit: null });\n }\n\n dispose() {\n this.unsubscribe.forEach(f => f());\n this.store.dispose();\n }\n}\n","import { cropCellToMax, isHiddenStore, nextCell, SelectionStore } from '@store';\nimport type {\n MultiDimensionType,\n DimensionCols,\n DimensionRows,\n Cell,\n} from '@type';\n\ntype StoreByDimension = Record<number, SelectionStore>;\ntype FocusedStore = {\n entity: SelectionStore;\n cell: Cell;\n position: Cell;\n};\n\ntype StoresMapping<T> = { [xOrY: number]: Partial<T> };\n\nexport const EMPTY_INDEX = -1;\n\nexport default class SelectionStoreConnector {\n // dirty flag required to cleanup whole store in case visibility of panels changed\n private dirty = false;\n readonly stores: { [y: number]: { [x: number]: SelectionStore } } = {};\n\n readonly columnStores: StoreByDimension = {};\n readonly rowStores: { [y: number]: SelectionStore } = {};\n\n /**\n * Helpers for data conversion\n */\n readonly storesByType: Partial<Record<MultiDimensionType, number>> = {};\n readonly storesXToType: StoresMapping<DimensionCols> = {};\n readonly storesYToType: StoresMapping<DimensionRows> = {};\n\n get focusedStore(): FocusedStore | null {\n for (let y in this.stores) {\n for (let x in this.stores[y]) {\n const focused = this.stores[y][x]?.store.get('focus');\n if (focused) {\n return {\n entity: this.stores[y][x],\n cell: focused,\n position: {\n x: parseInt(x, 10),\n y: parseInt(y, 10),\n },\n };\n }\n }\n }\n return null;\n }\n\n get edit() {\n return this.focusedStore?.entity.store.get('edit');\n }\n\n get focused() {\n return this.focusedStore?.entity.store.get('focus');\n }\n\n get selectedRange() {\n return this.focusedStore?.entity.store.get('range');\n }\n\n private readonly sections: Element[] = [];\n\n registerSection(e?: Element) {\n if (!e) {\n this.sections.length = 0;\n // some elements removed, rebuild stores\n this.dirty = true;\n return;\n }\n if (this.sections.indexOf(e) === -1) {\n this.sections.push(e);\n }\n }\n\n // check if require to cleanup all stores\n beforeUpdate() {\n if (this.dirty) {\n for (let y in this.stores) {\n for (let x in this.stores[y]) {\n this.stores[y][x].dispose();\n }\n }\n this.dirty = false;\n }\n }\n\n registerColumn(x: number, type: DimensionCols): SelectionStore {\n // if hidden just create store but no operations needed\n if (isHiddenStore(x)) {\n return new SelectionStore();\n }\n if (this.columnStores[x]) {\n return this.columnStores[x];\n }\n this.columnStores[x] = new SelectionStore();\n // build cross-linking type to position\n this.storesByType[type] = x;\n this.storesXToType[x] = type;\n return this.columnStores[x];\n }\n\n registerRow(y: number, type: DimensionRows): SelectionStore {\n // if hidden just create store\n if (isHiddenStore(y)) {\n return new SelectionStore();\n }\n if (this.rowStores[y]) {\n return this.rowStores[y];\n }\n this.rowStores[y] = new SelectionStore();\n // build cross linking type to position\n this.storesByType[type] = y;\n this.storesYToType[y] = type;\n return this.rowStores[y];\n }\n\n /**\n * Cross store proxy, based on multiple dimensions\n */\n register({ x, y }: Cell): SelectionStore {\n // if hidden just create store\n if (isHiddenStore(x) || isHiddenStore(y)) {\n return new SelectionStore();\n }\n if (!this.stores[y]) {\n this.stores[y] = {};\n }\n if (this.stores[y][x]) {\n // Store already registered. Do not register twice\n return this.stores[y][x];\n }\n this.stores[y][x] = new SelectionStore();\n // proxy update, column store trigger only range area\n this.stores[y][x]?.onChange('range', c => {\n this.columnStores[x].setRangeArea(c);\n this.rowStores[y].setRangeArea(c);\n });\n // clean up on remove\n this.stores[y][x]?.store.on('dispose', () => this.destroy(x, y));\n return this.stores[y][x];\n }\n\n private destroy(x: number, y: number) {\n this.columnStores[x]?.dispose();\n this.rowStores[y]?.dispose();\n\n delete this.rowStores[y];\n delete this.columnStores[x];\n // clear x cross-link\n if (this.storesXToType[x]) {\n const type = this.storesXToType[x];\n delete this.storesXToType[x];\n delete this.storesByType[type];\n }\n // clear y cross-link\n if (this.storesYToType[y]) {\n const type = this.storesYToType[y];\n delete this.storesYToType[y];\n delete this.storesByType[type];\n }\n if (this.stores[y]) {\n delete this.stores[y][x];\n }\n // clear empty rows\n if (!Object.keys(this.stores[y] || {}).length) {\n delete this.stores[y];\n }\n }\n\n setEditByCell<T extends Cell>(storePos: T, editCell: T) {\n this.focusByCell(storePos, editCell, editCell);\n this.setEdit('');\n }\n\n /**\n * Sets the next focus cell before the current one.\n * \n * @param focus - The cell to set as the next focus.\n */\n beforeNextFocusCell(focus: Cell) {\n // If there is no focused store, return early.\n if (!this.focusedStore) {\n return;\n }\n\n // Get the next store based on the current focus and the last cell.\n const lastCell = this.focusedStore.entity.store.get('lastCell');\n const next = lastCell && this.getNextStore(focus, this.focusedStore.position, lastCell);\n\n // Set the next focus cell in the store.\n next?.store?.setNextFocus({ ...focus, ...next.item });\n }\n\n focusByCell<T extends Cell>(storePos: T, start: T, end: T) {\n const store = this.stores[storePos.y][storePos.x];\n this.focus(store, { focus: start, end });\n }\n\n focus(store: SelectionStore, { focus, end }: { focus: Cell; end: Cell }) {\n const currentStorePointer = this.getCurrentStorePointer(store);\n if (!currentStorePointer) {\n return null;\n }\n\n // check for the focus in nearby store/viewport\n const lastCell = store.store.get('lastCell');\n const next = lastCell && this.getNextStore(focus, currentStorePointer, lastCell);\n\n // if next store present - update\n if (next?.store) {\n const item = { ...focus, ...next.item };\n this.focus(next.store, { focus: item, end: item });\n return null;\n }\n\n if (lastCell) {\n focus = cropCellToMax(focus, lastCell);\n end = cropCellToMax(end, lastCell); \n }\n store.setFocus(focus, end);\n return focus;\n }\n\n /**\n * Retrieves the current store pointer based on the active store.\n * Clears focus from all stores except the active one.\n */\n getCurrentStorePointer(store: SelectionStore) {\n let currentStorePointer: Cell | undefined;\n\n // Iterate through all stores\n for (let y in this.stores) {\n for (let x in this.stores[y]) {\n const s = this.stores[y][x];\n\n // Clear focus from stores other than the active one\n if (s !== store) {\n s.clearFocus();\n } else {\n // Update the current store pointer with the active store coordinates\n currentStorePointer = { \n x: parseInt(x, 10), \n y: parseInt(y, 10) \n };\n }\n }\n }\n\n return currentStorePointer;\n }\n\n /**\n * Retrieves the next store based on the focus cell and current store pointer.\n * If the next store exists, returns an object with the next store and the item in the new store.\n * If the next store does not exist, returns null.\n */\n getNextStore(\n focus: Cell,\n currentStorePointer: Cell,\n lastCell: Cell,\n ) {\n // item in new store\n const nextItem: Partial<Cell> | null = nextCell(focus, lastCell);\n\n let nextStore: SelectionStore | undefined;\n if (nextItem) {\n Object.entries(nextItem).forEach(([type, nextItemCoord]: [keyof Cell, number]) => {\n let stores;\n switch (type) {\n case 'x':\n // Get the X stores for the current Y coordinate of the current store pointer\n stores = this.getXStores(currentStorePointer.y);\n break;\n case 'y':\n // Get the Y stores for the current X coordinate of the current store pointer\n stores = this.getYStores(currentStorePointer.x);\n break;\n }\n\n // Get the next store based on the item in the new store\n if (nextItemCoord >= 0) {\n nextStore = stores[++currentStorePointer[type]];\n } else {\n nextStore = stores[--currentStorePointer[type]];\n const nextLastCell = nextStore?.store.get('lastCell');\n if (nextLastCell) {\n nextItem[type] = nextLastCell[type] + nextItemCoord;\n }\n }\n });\n }\n return {\n store: nextStore,\n item: nextItem,\n };\n }\n\n clearAll() {\n for (let y in this.stores) {\n for (let x in this.stores[y]) {\n this.stores[y][x]?.clearFocus();\n }\n }\n }\n\n setEdit(val?: string | boolean) {\n if (!this.focusedStore) {\n return;\n }\n this.focusedStore.entity.setEdit(val);\n }\n\n /**\n * Select all cells across all stores\n */\n selectAll() {\n for (let y in this.stores) {\n for (let x in this.stores[y]) {\n const store = this.stores[y][x];\n if (!store) {\n continue;\n }\n const lastCell = store.store.get('lastCell');\n if (lastCell) {\n store.setRange(\n { x: 0, y: 0 },\n { x: lastCell.x - 1, y: lastCell.y - 1 },\n );\n }\n }\n }\n }\n\n private getXStores(y: number) {\n return this.stores[y];\n }\n\n private getYStores(x: number) {\n const stores: { [p: number]: SelectionStore } = {};\n for (let i in this.stores) {\n stores[i] = this.stores[i][x];\n }\n return stores;\n }\n}\n","import { EMPTY_INDEX } from '../../services/selection.store.connector';\nimport { Cell, RangeArea } from '@type';\n\nexport function isHiddenStore(pos: number) {\n return pos === EMPTY_INDEX;\n}\n\nexport function nextCell(cell: Cell, lastCell: Cell): Partial<Cell> | null {\n const nextItem: Partial<Cell> = {};\n let types: (keyof Cell)[] = ['x', 'y'];\n\n // previous item check\n for (let t of types) {\n if (cell[t] < 0) {\n nextItem[t] = cell[t];\n return nextItem;\n }\n }\n // next item check\n for (let t of types) {\n if (cell[t] >= lastCell[t]) {\n nextItem[t] = cell[t] - lastCell[t];\n return nextItem;\n }\n }\n return null;\n}\n\nexport function cropCellToMax(cell: Cell, lastCell: Cell): Cell {\n const croppedCell: Cell = { ...cell };\n const cellCoordinates: (keyof Cell)[] = ['x', 'y'];\n\n for (const coordinate of cellCoordinates) {\n if (cell[coordinate] < 0) {\n croppedCell[coordinate] = 0;\n } else if (cell[coordinate] >= lastCell[coordinate]) {\n croppedCell[coordinate] = lastCell[coordinate] - 1;\n }\n }\n\n return croppedCell;\n}\n\nexport function getRange(start?: Cell | null, end?: Cell | null): RangeArea | null {\n return start && end\n ? {\n x: Math.min(start.x, end.x),\n y: Math.min(start.y, end.y),\n x1: Math.max(start.x, end.x),\n y1: Math.max(start.y, end.y),\n }\n : null;\n}\n\nexport function isRangeSingleCell(a: RangeArea): boolean {\n return a.x === a.x1 && a.y === a.y1;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Built by Revolist OU ❤️
|
|
3
3
|
*/
|
|
4
|
-
import{
|
|
5
|
-
//# sourceMappingURL=throttle-
|
|
4
|
+
import{o as t}from"./index-f65def08.js";import{d as i}from"./debounce-7781346d.js";import{i as r}from"./toNumber-8de324a7.js";const s={contentSize:0,clientSize:0,virtualSize:0,maxSize:0};const e=-1;function n(t,i,r=0){return t+(r?i-r: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({},s),rgCol:Object.assign({},s)}}setParams(t,i){const r=n(t.contentSize,t.clientSize,t.virtualSize);this.params[i]=Object.assign(Object.assign({},t),{maxSize:r-t.clientSize,virtualContentSize:r})}async setScroll(t){this.cancelScroll(t.dimension);const i=new Promise(((i,r)=>{if(this.cfg.skipAnimationFrame){return i()}const s=window.requestAnimationFrame((()=>{i()}));this.preventArtificialScroll[t.dimension]=r.bind(null,s)}));try{await i;const r=this.getParams(t.dimension);t.coordinate=Math.ceil(t.coordinate);this.previousScroll[t.dimension]=this.wrapCoordinate(t.coordinate,r);this.preventArtificialScroll[t.dimension]=null;this.cfg.applyScroll(Object.assign(Object.assign({},t),{coordinate:r.virtualSize?this.convert(t.coordinate,r,false):t.coordinate}))}catch(t){window.cancelAnimationFrame(t)}}scroll(t,i,r=false,s,n=false){this.cancelScroll(i);if(!r&&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:s,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,r;(r=(i=this.preventArtificialScroll)[t])===null||r===void 0?void 0:r.call(i);this.preventArtificialScroll[t]=null}convert(i,r,s=true){var e;const n=r.clientSize;const o=[0,((e=r.virtualContentSize)!==null&&e!==void 0?e:n)-n];const a=[0,r.contentSize-r.virtualSize];if(s){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 r=(new Date).getTime()-this.mouseWheelScrollTimestamp[t];return r>this.scrollThrottling&&i!==this.lastKnownScrollCoordinate[t]}}var c=i,l=r;var h="Expected a function";function u(t,i,r){var s=true,e=true;if(typeof t!="function"){throw new TypeError(h)}if(l(r)){s="leading"in r?!!r.leading:s;e="trailing"in r?!!r.trailing:e}return c(t,i,{leading:s,maxWait:i,trailing:e})}var d=u;export{a as L,o as a,n as g,d as t};
|
|
5
|
+
//# sourceMappingURL=throttle-041ded8e.js.map
|
package/dist/types/index.d.ts
CHANGED
|
@@ -3,6 +3,5 @@ export * from './store';
|
|
|
3
3
|
export * from './plugins/base.plugin';
|
|
4
4
|
export * from './plugins/dispatcher';
|
|
5
5
|
export * from './components';
|
|
6
|
-
export * from './utils
|
|
7
|
-
export * from './utils/column.utils';
|
|
6
|
+
export * from './utils';
|
|
8
7
|
export { h } from './stencil-public-runtime';
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { BasePlugin } from './base.plugin';
|
|
2
|
-
import { DimensionCols, ColumnRegular, DataType, BeforeSaveDataDetails, BeforeRangeSaveDataDetails } from "../types/index";
|
|
3
|
-
import { PluginProviders } from '../';
|
|
2
|
+
import { DimensionCols, ColumnRegular, DataType, BeforeSaveDataDetails, BeforeRangeSaveDataDetails, PluginProviders } from "../types/index";
|
|
4
3
|
interface Column extends ColumnRegular {
|
|
5
4
|
index: number;
|
|
6
5
|
}
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
export * from './store.utils';
|
|
2
|
+
export * from './store.types';
|
|
3
|
+
export * from './column.utils';
|
|
4
|
+
export * from './consts';
|
|
5
|
+
export * from './key.utils';
|
|
6
|
+
export * from './key.codes';
|
|
7
|
+
export * from './row-header-utils';
|
|
1
8
|
export declare function range(size: number, startAt?: number): number[];
|
|
2
9
|
export declare function findPositionInArray<T>(this: T[], el: T, compareFn: (el: T, el2: T) => number): number;
|
|
3
10
|
/**
|
package/hydrate/index.js
CHANGED
|
@@ -9437,8 +9437,131 @@ function isAll(event) {
|
|
|
9437
9437
|
(event.metaKey && event.code === 'KeyA')); // Cmd + A on Mac
|
|
9438
9438
|
}
|
|
9439
9439
|
|
|
9440
|
-
|
|
9440
|
+
function getColumnType(rgCol) {
|
|
9441
|
+
if (rgCol.pin) {
|
|
9442
|
+
return rgCol.pin;
|
|
9443
|
+
}
|
|
9444
|
+
return 'rgCol';
|
|
9445
|
+
}
|
|
9446
|
+
function getColumnSizes(cols) {
|
|
9447
|
+
const res = {};
|
|
9448
|
+
for (const [i, c] of cols.entries()) {
|
|
9449
|
+
if (c.size) {
|
|
9450
|
+
res[i] = c.size;
|
|
9451
|
+
}
|
|
9452
|
+
}
|
|
9453
|
+
return res;
|
|
9454
|
+
}
|
|
9455
|
+
/**
|
|
9456
|
+
* Check if column is grouping column
|
|
9457
|
+
*/
|
|
9458
|
+
function isColGrouping(colData) {
|
|
9459
|
+
return !!colData.children;
|
|
9460
|
+
}
|
|
9461
|
+
/**
|
|
9462
|
+
* This function is used to create a collection of columns.
|
|
9441
9463
|
*/
|
|
9464
|
+
function getColumns(columns, level = 0, types) {
|
|
9465
|
+
const collection = {
|
|
9466
|
+
// columns as they are in stores per type
|
|
9467
|
+
columns: {
|
|
9468
|
+
rgCol: [],
|
|
9469
|
+
colPinStart: [],
|
|
9470
|
+
colPinEnd: [],
|
|
9471
|
+
},
|
|
9472
|
+
// columns indexed by prop for quick access
|
|
9473
|
+
columnByProp: {},
|
|
9474
|
+
// column grouping
|
|
9475
|
+
columnGrouping: {
|
|
9476
|
+
rgCol: [],
|
|
9477
|
+
colPinStart: [],
|
|
9478
|
+
colPinEnd: [],
|
|
9479
|
+
},
|
|
9480
|
+
// max depth level for column grouping
|
|
9481
|
+
maxLevel: level,
|
|
9482
|
+
// sorting
|
|
9483
|
+
sort: {},
|
|
9484
|
+
};
|
|
9485
|
+
return reduce_1(columns, (res, colData) => {
|
|
9486
|
+
// Grouped column
|
|
9487
|
+
if (isColGrouping(colData)) {
|
|
9488
|
+
return gatherGroup(res, colData, getColumns(colData.children, level + 1, types), level);
|
|
9489
|
+
}
|
|
9490
|
+
// Regular column
|
|
9491
|
+
const regularColumn = Object.assign(Object.assign({}, (colData.columnType && types && types[colData.columnType])), colData);
|
|
9492
|
+
// Regular column, no Pin
|
|
9493
|
+
if (!regularColumn.pin) {
|
|
9494
|
+
res.columns.rgCol.push(regularColumn);
|
|
9495
|
+
// Pin
|
|
9496
|
+
}
|
|
9497
|
+
else {
|
|
9498
|
+
res.columns[regularColumn.pin].push(regularColumn);
|
|
9499
|
+
}
|
|
9500
|
+
if (regularColumn.order) {
|
|
9501
|
+
res.sort[regularColumn.prop] = regularColumn;
|
|
9502
|
+
}
|
|
9503
|
+
// it's possible that some columns have same prop, but better to avoid it
|
|
9504
|
+
if (!res.columnByProp[regularColumn.prop]) {
|
|
9505
|
+
res.columnByProp[regularColumn.prop] = [];
|
|
9506
|
+
}
|
|
9507
|
+
res.columnByProp[regularColumn.prop].push(regularColumn);
|
|
9508
|
+
// trigger setup hook if present
|
|
9509
|
+
regularColumn.beforeSetup && regularColumn.beforeSetup(regularColumn);
|
|
9510
|
+
return res;
|
|
9511
|
+
}, collection);
|
|
9512
|
+
}
|
|
9513
|
+
function gatherGroup(res, colData, collection, level = 0) {
|
|
9514
|
+
// group template
|
|
9515
|
+
const group = Object.assign(Object.assign({}, colData), { level, ids: [] });
|
|
9516
|
+
// check columns for update
|
|
9517
|
+
for (let k in collection.columns) {
|
|
9518
|
+
const key = k;
|
|
9519
|
+
const resultItem = res.columns[key];
|
|
9520
|
+
const collectionItem = collection.columns[key];
|
|
9521
|
+
// if column data
|
|
9522
|
+
if (isArray_1(resultItem) && isArray_1(collectionItem)) {
|
|
9523
|
+
// fill columns
|
|
9524
|
+
resultItem.push(...collectionItem);
|
|
9525
|
+
// fill grouping
|
|
9526
|
+
if (collectionItem.length) {
|
|
9527
|
+
res.columnGrouping[key].push(Object.assign(Object.assign({}, group), { ids: collectionItem.map(item => item.prop) }));
|
|
9528
|
+
}
|
|
9529
|
+
}
|
|
9530
|
+
}
|
|
9531
|
+
// merge column groupings
|
|
9532
|
+
for (let k in collection.columnGrouping) {
|
|
9533
|
+
const key = k;
|
|
9534
|
+
const collectionItem = collection.columnGrouping[key];
|
|
9535
|
+
res.columnGrouping[key].push(...collectionItem);
|
|
9536
|
+
}
|
|
9537
|
+
res.maxLevel = Math.max(res.maxLevel, collection.maxLevel);
|
|
9538
|
+
res.sort = Object.assign(Object.assign({}, res.sort), collection.sort);
|
|
9539
|
+
return res;
|
|
9540
|
+
}
|
|
9541
|
+
function findColumn(columns, prop) {
|
|
9542
|
+
for (const c of columns) {
|
|
9543
|
+
if (isColGrouping(c)) {
|
|
9544
|
+
const found = findColumn(c.children, prop);
|
|
9545
|
+
if (found) {
|
|
9546
|
+
return found;
|
|
9547
|
+
}
|
|
9548
|
+
}
|
|
9549
|
+
else if (c.prop === prop) {
|
|
9550
|
+
return c;
|
|
9551
|
+
}
|
|
9552
|
+
}
|
|
9553
|
+
return undefined;
|
|
9554
|
+
}
|
|
9555
|
+
function getColumnByProp(columns, prop) {
|
|
9556
|
+
return findColumn(columns, prop);
|
|
9557
|
+
}
|
|
9558
|
+
|
|
9559
|
+
const LETTER_BLOCK_SIZE$1 = 10;
|
|
9560
|
+
const calculateRowHeaderSize = (itemsLength, rowHeaderColumn, minWidth = 50) => {
|
|
9561
|
+
return ((rowHeaderColumn === null || rowHeaderColumn === void 0 ? void 0 : rowHeaderColumn.size) ||
|
|
9562
|
+
Math.max((itemsLength.toString().length + 1) * LETTER_BLOCK_SIZE$1, minWidth));
|
|
9563
|
+
};
|
|
9564
|
+
|
|
9442
9565
|
/**
|
|
9443
9566
|
* Calculate system scrollbar size
|
|
9444
9567
|
*/
|
|
@@ -10662,125 +10785,6 @@ var find = createFind(findIndex);
|
|
|
10662
10785
|
|
|
10663
10786
|
var find_1 = find;
|
|
10664
10787
|
|
|
10665
|
-
function getColumnType(rgCol) {
|
|
10666
|
-
if (rgCol.pin) {
|
|
10667
|
-
return rgCol.pin;
|
|
10668
|
-
}
|
|
10669
|
-
return 'rgCol';
|
|
10670
|
-
}
|
|
10671
|
-
function getColumnSizes(cols) {
|
|
10672
|
-
const res = {};
|
|
10673
|
-
for (const [i, c] of cols.entries()) {
|
|
10674
|
-
if (c.size) {
|
|
10675
|
-
res[i] = c.size;
|
|
10676
|
-
}
|
|
10677
|
-
}
|
|
10678
|
-
return res;
|
|
10679
|
-
}
|
|
10680
|
-
/**
|
|
10681
|
-
* Check if column is grouping column
|
|
10682
|
-
*/
|
|
10683
|
-
function isColGrouping(colData) {
|
|
10684
|
-
return !!colData.children;
|
|
10685
|
-
}
|
|
10686
|
-
/**
|
|
10687
|
-
* This function is used to create a collection of columns.
|
|
10688
|
-
*/
|
|
10689
|
-
function getColumns(columns, level = 0, types) {
|
|
10690
|
-
const collection = {
|
|
10691
|
-
// columns as they are in stores per type
|
|
10692
|
-
columns: {
|
|
10693
|
-
rgCol: [],
|
|
10694
|
-
colPinStart: [],
|
|
10695
|
-
colPinEnd: [],
|
|
10696
|
-
},
|
|
10697
|
-
// columns indexed by prop for quick access
|
|
10698
|
-
columnByProp: {},
|
|
10699
|
-
// column grouping
|
|
10700
|
-
columnGrouping: {
|
|
10701
|
-
rgCol: [],
|
|
10702
|
-
colPinStart: [],
|
|
10703
|
-
colPinEnd: [],
|
|
10704
|
-
},
|
|
10705
|
-
// max depth level for column grouping
|
|
10706
|
-
maxLevel: level,
|
|
10707
|
-
// sorting
|
|
10708
|
-
sort: {},
|
|
10709
|
-
};
|
|
10710
|
-
return reduce_1(columns, (res, colData) => {
|
|
10711
|
-
// Grouped column
|
|
10712
|
-
if (isColGrouping(colData)) {
|
|
10713
|
-
return gatherGroup(res, colData, getColumns(colData.children, level + 1, types), level);
|
|
10714
|
-
}
|
|
10715
|
-
// Regular column
|
|
10716
|
-
const regularColumn = Object.assign(Object.assign({}, (colData.columnType && types && types[colData.columnType])), colData);
|
|
10717
|
-
// Regular column, no Pin
|
|
10718
|
-
if (!regularColumn.pin) {
|
|
10719
|
-
res.columns.rgCol.push(regularColumn);
|
|
10720
|
-
// Pin
|
|
10721
|
-
}
|
|
10722
|
-
else {
|
|
10723
|
-
res.columns[regularColumn.pin].push(regularColumn);
|
|
10724
|
-
}
|
|
10725
|
-
if (regularColumn.order) {
|
|
10726
|
-
res.sort[regularColumn.prop] = regularColumn;
|
|
10727
|
-
}
|
|
10728
|
-
// it's possible that some columns have same prop, but better to avoid it
|
|
10729
|
-
if (!res.columnByProp[regularColumn.prop]) {
|
|
10730
|
-
res.columnByProp[regularColumn.prop] = [];
|
|
10731
|
-
}
|
|
10732
|
-
res.columnByProp[regularColumn.prop].push(regularColumn);
|
|
10733
|
-
// trigger setup hook if present
|
|
10734
|
-
regularColumn.beforeSetup && regularColumn.beforeSetup(regularColumn);
|
|
10735
|
-
return res;
|
|
10736
|
-
}, collection);
|
|
10737
|
-
}
|
|
10738
|
-
function gatherGroup(res, colData, collection, level = 0) {
|
|
10739
|
-
// group template
|
|
10740
|
-
const group = Object.assign(Object.assign({}, colData), { level, ids: [] });
|
|
10741
|
-
// check columns for update
|
|
10742
|
-
for (let k in collection.columns) {
|
|
10743
|
-
const key = k;
|
|
10744
|
-
const resultItem = res.columns[key];
|
|
10745
|
-
const collectionItem = collection.columns[key];
|
|
10746
|
-
// if column data
|
|
10747
|
-
if (isArray_1(resultItem) && isArray_1(collectionItem)) {
|
|
10748
|
-
// fill columns
|
|
10749
|
-
resultItem.push(...collectionItem);
|
|
10750
|
-
// fill grouping
|
|
10751
|
-
if (collectionItem.length) {
|
|
10752
|
-
res.columnGrouping[key].push(Object.assign(Object.assign({}, group), { ids: collectionItem.map(item => item.prop) }));
|
|
10753
|
-
}
|
|
10754
|
-
}
|
|
10755
|
-
}
|
|
10756
|
-
// merge column groupings
|
|
10757
|
-
for (let k in collection.columnGrouping) {
|
|
10758
|
-
const key = k;
|
|
10759
|
-
const collectionItem = collection.columnGrouping[key];
|
|
10760
|
-
res.columnGrouping[key].push(...collectionItem);
|
|
10761
|
-
}
|
|
10762
|
-
res.maxLevel = Math.max(res.maxLevel, collection.maxLevel);
|
|
10763
|
-
res.sort = Object.assign(Object.assign({}, res.sort), collection.sort);
|
|
10764
|
-
return res;
|
|
10765
|
-
}
|
|
10766
|
-
function findColumn(columns, prop) {
|
|
10767
|
-
for (const c of columns) {
|
|
10768
|
-
if (isColGrouping(c)) {
|
|
10769
|
-
const found = findColumn(c.children, prop);
|
|
10770
|
-
if (found) {
|
|
10771
|
-
return found;
|
|
10772
|
-
}
|
|
10773
|
-
}
|
|
10774
|
-
else if (c.prop === prop) {
|
|
10775
|
-
return c;
|
|
10776
|
-
}
|
|
10777
|
-
}
|
|
10778
|
-
return undefined;
|
|
10779
|
-
}
|
|
10780
|
-
function getColumnByProp(columns, prop) {
|
|
10781
|
-
return findColumn(columns, prop);
|
|
10782
|
-
}
|
|
10783
|
-
|
|
10784
10788
|
class ColumnDataProvider {
|
|
10785
10789
|
get order() {
|
|
10786
10790
|
const order = {};
|
|
@@ -11295,32 +11299,11 @@ class BasePlugin {
|
|
|
11295
11299
|
}
|
|
11296
11300
|
}
|
|
11297
11301
|
|
|
11298
|
-
/**
|
|
11299
|
-
* Dispatches a custom event to a specified target element.
|
|
11300
|
-
*
|
|
11301
|
-
* @param target - The target element to dispatch the event to.
|
|
11302
|
-
* @param eventName - The name of the custom event.
|
|
11303
|
-
* @param detail - Optional. The detail of the custom event.
|
|
11304
|
-
* @returns The custom event that was dispatched.
|
|
11305
|
-
*/
|
|
11306
|
-
function dispatch(target, eventName, detail) {
|
|
11307
|
-
// Create a new CustomEvent with the specified event name and detail.
|
|
11308
|
-
const event = new CustomEvent(eventName, {
|
|
11309
|
-
detail,
|
|
11310
|
-
cancelable: true, // Indicates whether the event can be canceled.
|
|
11311
|
-
bubbles: true, // Indicates whether the event bubbles up through the DOM.
|
|
11312
|
-
});
|
|
11313
|
-
// Dispatch the event on the target element.
|
|
11314
|
-
target === null || target === void 0 ? void 0 : target.dispatchEvent(event);
|
|
11315
|
-
// Return the custom event that was dispatched.
|
|
11316
|
-
return event;
|
|
11317
|
-
}
|
|
11318
|
-
|
|
11319
11302
|
/**
|
|
11320
11303
|
* Plugin module for revo-grid grid system
|
|
11321
11304
|
* Add support for automatic column resize
|
|
11322
11305
|
*/
|
|
11323
|
-
const LETTER_BLOCK_SIZE
|
|
11306
|
+
const LETTER_BLOCK_SIZE = 7;
|
|
11324
11307
|
var ColumnAutoSizeMode;
|
|
11325
11308
|
(function (ColumnAutoSizeMode) {
|
|
11326
11309
|
// increases column width on header click according the largest text value
|
|
@@ -11339,7 +11322,7 @@ class AutoSizeColumnPlugin extends BasePlugin {
|
|
|
11339
11322
|
/** for edge case when no columns defined before data */
|
|
11340
11323
|
this.dataResolve = null;
|
|
11341
11324
|
this.dataReject = null;
|
|
11342
|
-
this.letterBlockSize = (config === null || config === void 0 ? void 0 : config.letterBlockSize) || LETTER_BLOCK_SIZE
|
|
11325
|
+
this.letterBlockSize = (config === null || config === void 0 ? void 0 : config.letterBlockSize) || LETTER_BLOCK_SIZE;
|
|
11343
11326
|
// create test container to check text width
|
|
11344
11327
|
if (config === null || config === void 0 ? void 0 : config.preciseSize) {
|
|
11345
11328
|
this.precsizeCalculationArea = this.initiatePresizeElement();
|
|
@@ -13503,12 +13486,6 @@ const OrderRenderer = ({ ref }) => {
|
|
|
13503
13486
|
hAsync("div", { class: "drag-position", ref: e => (service.rgRow = e) })));
|
|
13504
13487
|
};
|
|
13505
13488
|
|
|
13506
|
-
const LETTER_BLOCK_SIZE = 10;
|
|
13507
|
-
const calculateRowHeaderSize = (itemsLength, rowHeaderColumn, minWidth = 50) => {
|
|
13508
|
-
return ((rowHeaderColumn === null || rowHeaderColumn === void 0 ? void 0 : rowHeaderColumn.size) ||
|
|
13509
|
-
Math.max((itemsLength.toString().length + 1) * LETTER_BLOCK_SIZE, minWidth));
|
|
13510
|
-
};
|
|
13511
|
-
|
|
13512
13489
|
class StretchColumn extends BasePlugin {
|
|
13513
13490
|
constructor(revogrid, providers) {
|
|
13514
13491
|
super(revogrid, providers);
|
|
@@ -13694,6 +13671,27 @@ class ColumnOrderHandler {
|
|
|
13694
13671
|
}
|
|
13695
13672
|
}
|
|
13696
13673
|
|
|
13674
|
+
/**
|
|
13675
|
+
* Dispatches a custom event to a specified target element.
|
|
13676
|
+
*
|
|
13677
|
+
* @param target - The target element to dispatch the event to.
|
|
13678
|
+
* @param eventName - The name of the custom event.
|
|
13679
|
+
* @param detail - Optional. The detail of the custom event.
|
|
13680
|
+
* @returns The custom event that was dispatched.
|
|
13681
|
+
*/
|
|
13682
|
+
function dispatch(target, eventName, detail) {
|
|
13683
|
+
// Create a new CustomEvent with the specified event name and detail.
|
|
13684
|
+
const event = new CustomEvent(eventName, {
|
|
13685
|
+
detail,
|
|
13686
|
+
cancelable: true, // Indicates whether the event can be canceled.
|
|
13687
|
+
bubbles: true, // Indicates whether the event bubbles up through the DOM.
|
|
13688
|
+
});
|
|
13689
|
+
// Dispatch the event on the target element.
|
|
13690
|
+
target === null || target === void 0 ? void 0 : target.dispatchEvent(event);
|
|
13691
|
+
// Return the custom event that was dispatched.
|
|
13692
|
+
return event;
|
|
13693
|
+
}
|
|
13694
|
+
|
|
13697
13695
|
var ResizeEvents;
|
|
13698
13696
|
(function (ResizeEvents) {
|
|
13699
13697
|
ResizeEvents["start"] = "resize:start";
|