@revolist/revogrid 4.3.0-next.12 → 4.3.0-next.14
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/custom-element/revogr-overlay-selection2.js +21 -7
- package/custom-element/revogr-overlay-selection2.js.map +1 -1
- package/custom-element/revogr-row-headers2.js +3 -2
- package/custom-element/revogr-row-headers2.js.map +1 -1
- package/custom-element/revogr-temp-range2.js.map +1 -1
- package/dist/cjs/revo-grid_11.cjs.entry.js +24 -9
- package/dist/cjs/revo-grid_11.cjs.entry.js.map +1 -1
- package/dist/collection/components/overlay/autofill.service.d.ts +4 -0
- package/dist/collection/components/overlay/autofill.service.js +21 -7
- package/dist/collection/components/overlay/autofill.service.js.map +1 -1
- package/dist/collection/components/overlay/revogr-overlay-selection.d.ts +26 -4
- package/dist/collection/components/overlay/revogr-overlay-selection.js +7 -7
- package/dist/collection/components/overlay/revogr-overlay-selection.js.map +1 -1
- package/dist/collection/components/selectionTempRange/revogr-temp-range.d.ts +12 -1
- package/dist/collection/components/selectionTempRange/revogr-temp-range.js +6 -3
- package/dist/collection/components/selectionTempRange/revogr-temp-range.js.map +1 -1
- package/dist/collection/components.d.ts +56 -8
- package/dist/collection/store/viewPort/viewport.helpers.js +3 -2
- package/dist/collection/store/viewPort/viewport.helpers.js.map +1 -1
- package/dist/esm/revo-grid_11.entry.js +24 -9
- package/dist/esm/revo-grid_11.entry.js.map +1 -1
- package/dist/revo-grid/revo-grid_11.entry.js +1 -1
- package/dist/revo-grid/revo-grid_11.entry.js.map +1 -1
- package/dist/types/components/overlay/autofill.service.d.ts +4 -0
- package/dist/types/components/overlay/revogr-overlay-selection.d.ts +26 -4
- package/dist/types/components/selectionTempRange/revogr-temp-range.d.ts +12 -1
- package/dist/types/components.d.ts +56 -8
- package/package.json +1 -1
|
@@ -265,6 +265,7 @@ class AutoFillService {
|
|
|
265
265
|
* on mouse move apply based on previous direction (if present)
|
|
266
266
|
*/
|
|
267
267
|
doAutofillMouseMove({ x, y }, data) {
|
|
268
|
+
// if no initial - not started
|
|
268
269
|
if (!this.autoFillInitial) {
|
|
269
270
|
return;
|
|
270
271
|
}
|
|
@@ -275,15 +276,22 @@ class AutoFillService {
|
|
|
275
276
|
this.autoFillLast = this.autoFillStart;
|
|
276
277
|
}
|
|
277
278
|
}
|
|
278
|
-
// check if not the latest
|
|
279
|
+
// check if not the latest, if latest - do nothing
|
|
279
280
|
if (isAfterLast(current, data)) {
|
|
280
281
|
return;
|
|
281
282
|
}
|
|
282
283
|
this.autoFillLast = current;
|
|
283
|
-
this.
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
284
|
+
const isSame = current.x === this.autoFillInitial.x && current.y === this.autoFillInitial.y;
|
|
285
|
+
// if same as initial - clear
|
|
286
|
+
if (isSame) {
|
|
287
|
+
this.sv.setTempRange(null);
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
this.sv.setTempRange({
|
|
291
|
+
area: getRange(this.autoFillInitial, this.autoFillLast),
|
|
292
|
+
type: this.autoFillType,
|
|
293
|
+
});
|
|
294
|
+
}
|
|
287
295
|
}
|
|
288
296
|
/**
|
|
289
297
|
* Range selection started
|
|
@@ -299,12 +307,16 @@ class AutoFillService {
|
|
|
299
307
|
this.autoFillStart = getCurrentCell({ x: left, y: top }, data);
|
|
300
308
|
e.preventDefault();
|
|
301
309
|
}
|
|
302
|
-
|
|
310
|
+
/**
|
|
311
|
+
* Clear current range selection
|
|
312
|
+
* on mouse up and mouse leave events
|
|
313
|
+
*/
|
|
303
314
|
clearAutoFillSelection() {
|
|
304
|
-
// Apply autofill values on mouse up
|
|
315
|
+
// Apply autofill values on mouse up if present
|
|
305
316
|
if (this.autoFillInitial) {
|
|
306
317
|
// Get latest
|
|
307
318
|
this.autoFillInitial = this.getFocus();
|
|
319
|
+
// Apply range data if present
|
|
308
320
|
if (this.autoFillType === AutoFillType.autoFill) {
|
|
309
321
|
const range = getRange(this.autoFillInitial, this.autoFillLast);
|
|
310
322
|
if (range) {
|
|
@@ -315,6 +327,7 @@ class AutoFillService {
|
|
|
315
327
|
this.applyRangeWithData(newRange);
|
|
316
328
|
}
|
|
317
329
|
else {
|
|
330
|
+
// if prevented - clear temp range
|
|
318
331
|
this.sv.setTempRange(null);
|
|
319
332
|
}
|
|
320
333
|
}
|
|
@@ -358,6 +371,7 @@ class AutoFillService {
|
|
|
358
371
|
rangeData.newData = changed;
|
|
359
372
|
rangeData.mapping = mapping;
|
|
360
373
|
let e = this.sv.selectionChanged(rangeData);
|
|
374
|
+
// if default prevented - clear range
|
|
361
375
|
if (e.defaultPrevented) {
|
|
362
376
|
this.sv.setTempRange(null);
|
|
363
377
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"revogr-overlay-selection2.js","mappings":"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","names":["debounce"],"sources":["./src/store/selection/selection.store.service.ts","./src/components/overlay/editors/edit.utils.ts","./src/components/overlay/keyboard.service.ts","./src/components/overlay/autofill.service.tsx","./src/components/overlay/clipboard.service.tsx","./src/components/overlay/revogr-overlay-style.scss?tag=revogr-overlay-selection","./src/components/overlay/revogr-overlay-selection.tsx"],"sourcesContent":["import { Edition, Observable, Selection } from '../../interfaces';\nimport { getRange } from './selection.helpers';\nimport Cell = Selection.Cell;\nimport Range = Selection.RangeArea;\n\ninterface Config {\n changeRange(range: Range): boolean;\n focus(focus: Cell, end: Cell): boolean;\n}\n\nexport default class SelectionStoreService {\n constructor(public store: Observable<Selection.SelectionStoreState>, private config: Config) {\n this.store = store;\n }\n\n get edited(): Edition.EditCellStore | null {\n return this.store.get('edit');\n }\n\n get focused(): Cell | null {\n return this.store.get('focus');\n }\n\n get ranged(): Range | null {\n return this.store.get('range');\n }\n\n changeRange(range: Range) {\n return this.config.changeRange(range);\n }\n\n focus(cell?: Cell, isMulti = false) {\n if (!cell) {\n return false;\n }\n let end: Cell = cell;\n\n // range edit\n if (isMulti) {\n let start: Cell | null = this.store.get('focus');\n if (start) {\n return this.config.changeRange(getRange(start, end));\n }\n }\n\n // single focus\n return this.config.focus(cell, end);\n }\n}\n","import { EDIT_INPUT_WR } from '../../../utils/consts';\n\n// is edit input\nexport function isEditInput(el?: HTMLElement) {\n return !!el?.closest(`.${EDIT_INPUT_WR}`);\n}\n","import { Observable, Selection } from '../../interfaces';\nimport { getRange } from '../../store/selection/selection.helpers';\nimport SelectionStoreService from '../../store/selection/selection.store.service';\nimport { codesLetter } from '../../utils/keyCodes';\nimport { isClear, isCtrlKey, isEnterKey, isLetterKey } from '../../utils/keyCodes.utils';\nimport { timeout } from '../../utils';\nimport { EventData, getCoordinate, isAfterLast, isBeforeFirst } from './selection.utils';\nimport { RESIZE_INTERVAL } from '../../utils/consts';\n\ntype Config = {\n selectionStoreService: SelectionStoreService;\n selectionStore: Observable<Selection.SelectionStoreState>;\n\n applyEdit(val?: any): void;\n cancelEdit(): void;\n clearCell(): void;\n focusNext(focus: Selection.Cell, next: Partial<Selection.Cell>): boolean;\n getData(): any;\n internalPaste(): void;\n range(range: Selection.RangeArea): boolean;\n selectAll(): void;\n};\n\nconst DIRECTION_CODES: string[] = [\n codesLetter.TAB,\n codesLetter.ARROW_UP,\n codesLetter.ARROW_DOWN,\n codesLetter.ARROW_LEFT,\n codesLetter.ARROW_RIGHT,\n];\nexport class KeyboardService {\n private ctrlDown = false;\n\n constructor(private sv: Config) {}\n\n async keyDown(e: KeyboardEvent, canRange: boolean) {\n if (isCtrlKey(e.keyCode, navigator.platform)) {\n this.ctrlDown = true;\n }\n\n\n /**\n * IF EDIT MODE\n */\n if (this.sv.selectionStoreService.edited) {\n switch (e.code) {\n case codesLetter.ESCAPE:\n this.sv.cancelEdit();\n break;\n }\n return;\n }\n\n /**\n * IF NOT EDIT MODE\n */\n\n // pressed clear key\n if (this.sv.selectionStoreService.ranged && isClear(e.code)) {\n this.sv.clearCell();\n return;\n }\n\n // below works with focus only\n if (!this.sv.selectionStoreService.focused) {\n return;\n }\n\n // tab key means same as arrow right\n if (codesLetter.TAB === e.code) {\n this.keyChangeSelection(e, canRange);\n return;\n }\n\n // pressed enter\n if (isEnterKey(e.code)) {\n this.sv.applyEdit();\n return;\n }\n\n // copy operation\n if (this.isCopy(e)) {\n return;\n }\n\n // cut operation\n if (this.isCut(e)) {\n return;\n }\n\n // paste operation\n if (this.isPaste(e)) {\n this.sv.internalPaste();\n return;\n }\n\n // select all\n if (this.isAll(e)) {\n if (canRange) {\n this.selectAll(e);\n }\n return;\n }\n\n // pressed letter key\n if (isLetterKey(e.keyCode)) {\n this.sv.applyEdit(e.key);\n return;\n }\n\n // pressed arrow, change selection position\n if (await this.keyChangeSelection(e, canRange)) {\n return;\n }\n }\n\n private selectAll(e: KeyboardEvent) {\n const range = this.sv.selectionStore.get('range');\n const focus = this.sv.selectionStore.get('focus');\n // if no range or focus - do nothing\n if (!range || !focus) {\n return;\n }\n e.preventDefault();\n this.sv.selectAll();\n }\n\n async keyChangeSelection(e: KeyboardEvent, canRange: boolean) {\n const data = this.changeDirectionKey(e, canRange);\n if (!data) {\n return false;\n }\n\n // this interval needed for several cases\n // grid could be resized before next click\n // at this case to avoid screen jump we use this interval\n await timeout(RESIZE_INTERVAL + 30);\n\n const range = this.sv.selectionStore.get('range');\n const focus = this.sv.selectionStore.get('focus');\n return this.keyPositionChange(data.changes, range, focus, data.isMulti);\n }\n\n keyPositionChange(\n changes: Partial<Selection.Cell>,\n range?: Selection.RangeArea,\n focus?: Selection.Cell,\n isMulti = false\n ) {\n if (!range || !focus) {\n return false;\n }\n const data = getCoordinate(range, focus, changes, isMulti);\n if (!data) {\n return false;\n }\n if (isMulti) {\n const eData: EventData = this.sv.getData();\n if (isAfterLast(data.end, eData) || isBeforeFirst(data.start)) {\n return false;\n }\n const range = getRange(data.start, data.end);\n return this.sv.range(range);\n }\n return this.sv.focusNext(data.start, changes);\n }\n\n keyUp(e: KeyboardEvent): void {\n if (isCtrlKey(e.keyCode, navigator.platform)) {\n this.ctrlDown = false;\n }\n }\n isCut(e: KeyboardEvent): boolean {\n return this.ctrlDown && e.code == codesLetter.X;\n }\n isCopy(e: KeyboardEvent): boolean {\n return this.ctrlDown && e.code == codesLetter.C;\n }\n isPaste(e: KeyboardEvent): boolean {\n return this.ctrlDown && e.code == codesLetter.V;\n }\n isAll(e: KeyboardEvent): boolean {\n return this.ctrlDown && e.code == codesLetter.A;\n }\n /** Monitor key direction changes */\n changeDirectionKey(e: KeyboardEvent, canRange: boolean): { changes: Partial<Selection.Cell>; isMulti?: boolean } | void {\n const isMulti = canRange && e.shiftKey;\n if (DIRECTION_CODES.includes(e.code)) {\n e.preventDefault();\n }\n switch (e.code) {\n case codesLetter.ARROW_UP:\n return { changes: { y: -1 }, isMulti };\n case codesLetter.ARROW_DOWN:\n return { changes: { y: 1 }, isMulti };\n case codesLetter.ARROW_LEFT:\n return { changes: { x: -1 }, isMulti };\n case codesLetter.TAB:\n case codesLetter.ARROW_RIGHT:\n return { changes: { x: 1 }, isMulti };\n }\n }\n}\n","import debounce from 'lodash/debounce';\nimport { DebouncedFunc } from 'lodash';\n\nimport { h } from '@stencil/core';\nimport { CELL_HANDLER_CLASS } from '../../utils/consts';\nimport { Observable, Selection, RevoGrid, Edition } from '../../interfaces';\nimport { EventData, getCell, getCurrentCell, isAfterLast } from './selection.utils';\nimport { getRange } from '../../store/selection/selection.helpers';\nimport SelectionStoreService from '../../store/selection/selection.store.service';\nimport ColumnService from '../data/columnService';\nimport { DataSourceState, getSourceItem } from '../../store/dataSource/data.store';\n\ntype Config = {\n selectionStoreService: SelectionStoreService;\n dimensionRow: Observable<RevoGrid.DimensionSettingsState>;\n dimensionCol: Observable<RevoGrid.DimensionSettingsState>;\n columnService: ColumnService;\n dataStore: Observable<DataSourceState<RevoGrid.DataType, RevoGrid.DimensionRows>>;\n\n setTempRange(e: Selection.TempRange | null): Event;\n selectionChanged(e: Selection.ChangedRange): Event;\n rangeCopy(e: Selection.ChangedRange): Event;\n rangeDataApply(e: Edition.BeforeRangeSaveDataDetails): CustomEvent;\n setRange(e: Selection.RangeArea): boolean;\n clearRangeDataApply(e: {\n range: Selection.RangeArea\n }): CustomEvent<{\n range: Selection.RangeArea\n }>;\n\n getData(): any;\n};\n\nenum AutoFillType {\n selection = 'Selection',\n autoFill = 'AutoFill',\n}\n\nexport class AutoFillService {\n private autoFillType: AutoFillType | null = null;\n private autoFillInitial: Selection.Cell | null = null;\n private autoFillStart: Selection.Cell | null = null;\n private autoFillLast: Selection.Cell | null = null;\n\n private onMouseMoveAutofill: DebouncedFunc<(e: MouseEvent, data: EventData) => void>;\n\n constructor(private sv: Config) {}\n\n /**\n * Render autofill box\n * @param range\n * @param selectionFocus\n */\n renderAutofill(range: Selection.RangeArea, selectionFocus: Selection.Cell) {\n let handlerStyle;\n if (range) {\n handlerStyle = getCell(range, this.sv.dimensionRow.state, this.sv.dimensionCol.state);\n } else {\n handlerStyle = getCell(\n {\n ...selectionFocus,\n x1: selectionFocus.x,\n y1: selectionFocus.y,\n },\n this.sv.dimensionRow.state,\n this.sv.dimensionCol.state,\n );\n }\n return (\n <div\n class={CELL_HANDLER_CLASS}\n style={{ left: `${handlerStyle.right}px`, top: `${handlerStyle.bottom}px` }}\n onMouseDown={(e: MouseEvent) => this.selectionStart(e, this.sv.getData(), AutoFillType.autoFill)}\n />\n );\n }\n\n get isAutoFill() {\n return !!this.autoFillType;\n }\n\n /** Process mouse move events */\n selectionMouseMove(e: MouseEvent) {\n // initiate mouse move debounce if not present\n if (!this.onMouseMoveAutofill) {\n this.onMouseMoveAutofill = debounce((e: MouseEvent, data: EventData) => this.doAutofillMouseMove(e, data), 5);\n }\n if (this.isAutoFill) {\n this.onMouseMoveAutofill(e, this.sv.getData());\n }\n }\n\n private getFocus() {\n let focus = this.sv.selectionStoreService.focused;\n const range = this.sv.selectionStoreService.ranged;\n if (range) {\n focus = { x: range.x, y: range.y };\n }\n if (!focus && !range) {\n return null;\n }\n return focus;\n }\n\n /**\n * Autofill logic:\n * on mouse move apply based on previous direction (if present)\n */\n private doAutofillMouseMove({ x, y }: MouseEvent, data: EventData) {\n if (!this.autoFillInitial) {\n return;\n }\n const current = getCurrentCell({ x, y }, data);\n\n // first time or direction equal to start(same as first time)\n if (!this.autoFillLast) {\n if (!this.autoFillLast) {\n this.autoFillLast = this.autoFillStart;\n }\n }\n\n // check if not the latest\n if (isAfterLast(current, data)) {\n return;\n }\n this.autoFillLast = current;\n this.sv.setTempRange({\n area: getRange(this.autoFillInitial, this.autoFillLast),\n type: this.autoFillType,\n });\n }\n\n /**\n * Range selection started\n * Mode @param type:\n * Can be triggered from MouseDown selection on element\n * Or can be triggered on corner square drag\n */\n selectionStart(e: MouseEvent, data: EventData, type = AutoFillType.selection) {\n /** Get cell by autofill element */\n const { top, left } = (e.target as HTMLElement).getBoundingClientRect();\n this.autoFillInitial = this.getFocus();\n this.autoFillType = type;\n this.autoFillStart = getCurrentCell({ x: left, y: top }, data);\n e.preventDefault();\n }\n\n // Clear current range selection\n clearAutoFillSelection() {\n // Apply autofill values on mouse up\n if (this.autoFillInitial) {\n // Get latest\n this.autoFillInitial = this.getFocus();\n if (this.autoFillType === AutoFillType.autoFill) {\n\n const range = getRange(this.autoFillInitial, this.autoFillLast);\n if (range) {\n const {\n defaultPrevented: stopApply,\n detail: { range: newRange }\n } = this.sv.clearRangeDataApply({\n range,\n });\n if (!stopApply) {\n this.applyRangeWithData(newRange);\n } else {\n this.sv.setTempRange(null);\n }\n }\n } else {\n this.applyRangeOnly(this.autoFillInitial, this.autoFillLast);\n }\n }\n\n this.autoFillType = null;\n this.autoFillInitial = null;\n this.autoFillLast = null;\n this.autoFillStart = null;\n }\n\n /** Trigger range apply events and handle responses */\n onRangeApply(data: RevoGrid.DataLookup, range: Selection.RangeArea): void {\n const models: RevoGrid.DataLookup = {};\n for (let rowIndex in data) {\n models[rowIndex] = getSourceItem(this.sv.dataStore, parseInt(rowIndex, 10));\n }\n const {\n defaultPrevented: stopRange,\n detail,\n } = this.sv.rangeDataApply({\n data,\n models,\n type: this.sv.dataStore.get('type'),\n });\n if (!stopRange) {\n this.sv.columnService.applyRangeData(detail.data);\n }\n this.sv.setRange(range);\n }\n\n /** Apply range and copy data during range application */\n private applyRangeWithData(newRange: Selection.RangeArea) {\n const oldRange = this.sv.selectionStoreService.ranged;\n const rangeData: Selection.ChangedRange = {\n type: this.sv.dataStore.get('type'),\n newData: {},\n mapping: {},\n newRange,\n oldRange,\n };\n const { mapping, changed } = this.sv.columnService.getRangeData(rangeData, this.sv.columnService.columns);\n rangeData.newData = changed;\n rangeData.mapping = mapping;\n let e = this.sv.selectionChanged(rangeData);\n if (e.defaultPrevented) {\n this.sv.setTempRange(null);\n return;\n }\n\n e = this.sv.rangeCopy(rangeData);\n if (e.defaultPrevented) {\n this.sv.setRange(newRange);\n return;\n }\n this.onRangeApply(rangeData.newData, newRange);\n }\n\n /** Update range selection ony, no data change (mouse selection) */\n private applyRangeOnly(start?: Selection.Cell, end?: Selection.Cell) {\n // no changes to apply\n if (!start || !end) {\n return;\n }\n\n const newRange = getRange(start, end);\n this.sv.setRange(newRange);\n }\n}\n","import { h } from '@stencil/core';\nimport SelectionStoreService from '../../store/selection/selection.store.service';\nimport { Observable, RevoGrid, Selection } from '../../interfaces';\nimport { getRange } from '../../store/selection/selection.helpers';\nimport ColumnService from '../data/columnService';\nimport { DataSourceState } from '../../store/dataSource/data.store';\n\ntype Config = {\n selectionStoreService: SelectionStoreService;\n columnService: ColumnService;\n dataStore: Observable<DataSourceState<RevoGrid.DataType, RevoGrid.DimensionRows>>;\n rangeApply(data: RevoGrid.DataLookup, range: Selection.RangeArea): void;\n rangeCopy(range: Selection.RangeArea): any;\n rangeClear(): void;\n beforeCopy(range: Selection.RangeArea): CustomEvent;\n beforePaste(data: RevoGrid.DataLookup, range: Selection.RangeArea): CustomEvent;\n};\n\nexport class ClipboardService {\n private clipboard: HTMLRevogrClipboardElement;\n constructor(private sv: Config) {}\n\n renderClipboard() {\n return <revogr-clipboard\n onCopyRegion={e => this.onCopy(e.detail)}\n onClearRegion={() => this.sv.rangeClear()}\n ref={e => (this.clipboard = e)}\n onPasteRegion={e => this.onPaste(e.detail)} />;\n }\n private getRegion() {\n const focus = this.sv.selectionStoreService.focused;\n let range = this.sv.selectionStoreService.ranged;\n if (!range) {\n range = getRange(focus, focus);\n }\n return range;\n }\n private onCopy(e: DataTransfer) {\n const range = this.getRegion();\n const canCopyEvent = this.sv.beforeCopy(range);\n if (canCopyEvent.defaultPrevented) {\n return false;\n }\n const data = this.sv.rangeCopy(range);\n this.clipboard.doCopy(e, data);\n return true;\n }\n\n private onPaste(data: string[][]) {\n const focus = this.sv.selectionStoreService.focused;\n const isEditing = this.sv.selectionStoreService.edited !== null;\n if (!focus || isEditing) {\n return;\n }\n let { changed, range } = this.sv.columnService.getTransformedDataToApply(focus, data);\n const { defaultPrevented: canPaste } = this.sv.beforePaste(changed, range);\n if (canPaste) {\n return;\n }\n this.sv.rangeApply(changed, range);\n }\n}\n","revogr-overlay-selection {\n display: block;\n position: relative;\n width: 100%;\n\n .autofill-handle {\n $handler-size: 10px;\n position: absolute;\n width: $handler-size;\n height: $handler-size;\n background: $selection-border;\n margin-left: -$handler-size + 1;\n margin-top: -$handler-size + 1;\n border: 1px solid white;\n box-sizing: border-box;\n z-index: 10;\n cursor: crosshair;\n }\n\n .selection-border-range {\n position: absolute;\n pointer-events: none;\n z-index: 9;\n }\n\n .selection-border-range {\n @include selection();\n }\n\n revogr-edit {\n z-index: 10;\n }\n}\n","import { Component, Event, EventEmitter, h, Host, Listen, Prop, VNode, Element, Watch } from '@stencil/core';\n\nimport { AllDimensionType, ApplyFocusEvent, FocusRenderEvent, Edition, Observable, RevoGrid, Selection, DragStartEvent } from '../../interfaces';\nimport ColumnService from '../data/columnService';\nimport SelectionStoreService from '../../store/selection/selection.store.service';\nimport { codesLetter } from '../../utils/keyCodes';\nimport { SELECTION_BORDER_CLASS } from '../../utils/consts';\nimport { DataSourceState } from '../../store/dataSource/data.store';\nimport { isRangeSingleCell } from '../../store/selection/selection.helpers';\nimport { getCurrentCell, getElStyle } from './selection.utils';\nimport { isEditInput } from './editors/edit.utils';\nimport { KeyboardService } from './keyboard.service';\nimport { AutoFillService } from './autofill.service';\nimport { ClipboardService } from './clipboard.service';\n\n@Component({\n tag: 'revogr-overlay-selection',\n styleUrl: 'revogr-overlay-style.scss',\n})\nexport class OverlaySelection {\n protected columnService: ColumnService;\n\n protected selectionStoreService: SelectionStoreService;\n private keyboardService: KeyboardService | null = null;\n private autoFillService: AutoFillService | null = null;\n private clipboardService: ClipboardService | null = null;\n private orderEditor: HTMLRevogrOrderEditorElement;\n private revogrEdit: HTMLRevogrEditElement | null = null;\n\n @Element() element: HTMLElement;\n\n // --------------------------------------------------------------------------\n //\n // Properties\n //\n // --------------------------------------------------------------------------\n\n @Prop() readonly: boolean;\n @Prop() range: boolean;\n @Prop() canDrag: boolean;\n @Prop() useClipboard: boolean;\n\n /** Dynamic stores */\n @Prop() selectionStore: Observable<Selection.SelectionStoreState>;\n @Prop() dimensionRow: Observable<RevoGrid.DimensionSettingsState>;\n @Prop() dimensionCol: Observable<RevoGrid.DimensionSettingsState>;\n\n /** Static stores, not expected to change during component lifetime */\n @Prop() dataStore: Observable<DataSourceState<RevoGrid.DataType, RevoGrid.DimensionRows>>;\n\n @Prop() colData: Observable<DataSourceState<RevoGrid.ColumnRegular, RevoGrid.DimensionCols>>;\n /** Last cell position */\n @Prop() lastCell: Selection.Cell;\n /** Custom editors register */\n @Prop() editors: Edition.Editors;\n /** If true applys changes when cell closes if not Escape */\n @Prop() applyChangesOnClose: boolean = false;\n\n // --------------------------------------------------------------------------\n //\n // Events\n //\n // --------------------------------------------------------------------------\n\n @Event({ cancelable: true }) internalCopy: EventEmitter;\n @Event({ cancelable: true }) internalPaste: EventEmitter;\n\n @Event({ cancelable: true }) internalCellEdit: EventEmitter<Edition.BeforeSaveDataDetails>;\n @Event({ cancelable: true }) beforeFocusCell: EventEmitter<Edition.BeforeSaveDataDetails>;\n\n @Event() setEdit: EventEmitter<Edition.BeforeEdit>;\n @Event({ eventName: 'before-apply-range' }) beforeApplyRange: EventEmitter<FocusRenderEvent>;\n @Event({ eventName: 'before-set-range' }) beforeSetRange: EventEmitter;\n @Event({ eventName: 'before-edit-render' }) beforeEditRender: EventEmitter<FocusRenderEvent>;\n @Event() setRange: EventEmitter<Selection.RangeArea & { type: RevoGrid.MultiDimensionType }>;\n @Event({ eventName: 'selectall' }) selectAll: EventEmitter;\n /**\n * Used for editors support when close requested\n */\n @Event() cancelEdit: EventEmitter;\n @Event() setTempRange: EventEmitter<Selection.TempRange | null>;\n\n @Event() applyFocus: EventEmitter<FocusRenderEvent>;\n @Event() focusCell: EventEmitter<ApplyFocusEvent>;\n /** Range data apply */\n @Event() beforeRangeDataApply: EventEmitter<FocusRenderEvent>;\n /** Selection range changed */\n @Event({ cancelable: true }) internalSelectionChanged: EventEmitter<Selection.ChangedRange>;\n /** Selection range changed */\n @Event({ cancelable: true, bubbles: true }) beforeRangeCopyApply: EventEmitter<Selection.ChangedRange>;\n\n /** Range data apply */\n @Event({ cancelable: true }) internalRangeDataApply: EventEmitter<Edition.BeforeRangeSaveDataDetails>;\n /** Range copy */\n @Event({ cancelable: true }) rangeClipboardCopy: EventEmitter;\n @Event({ cancelable: true }) rangeClipboardPaste: EventEmitter;\n\n /**\n * Runs before cell save\n * Can be used to override or cancel original save\n */\n @Event({ eventName: 'before-cell-save', cancelable: true }) beforeCellSave: EventEmitter;\n // --------------------------------------------------------------------------\n //\n // Listeners\n //\n // --------------------------------------------------------------------------\n\n @Listen('mousemove', { target: 'document' }) onMouseMove(e: MouseEvent) {\n if (this.selectionStoreService.focused) {\n this.autoFillService.selectionMouseMove(e);\n }\n }\n\n /** Pointer left document, clear any active operation */\n @Listen('mouseleave', { target: 'document' }) onMouseOut() {\n this.autoFillService.clearAutoFillSelection();\n }\n\n /** Action finished inside of the document */\n @Listen('mouseup', { target: 'document' }) onMouseUp() {\n this.autoFillService.clearAutoFillSelection();\n }\n\n /** Row drag started */\n @Listen('dragStartCell') onCellDrag(e: CustomEvent<DragStartEvent>) {\n this.orderEditor?.dragStart(e.detail);\n }\n\n /** Get keyboard down from element */\n @Listen('keyup', { target: 'document' }) onKeyUp(e: KeyboardEvent) {\n this.keyboardService?.keyUp(e);\n }\n\n /** Get keyboard down from element */\n @Listen('keydown', { target: 'document' }) onKeyDown(e: KeyboardEvent) {\n if (e.defaultPrevented) {\n return;\n }\n this.keyboardService?.keyDown(e, this.range);\n }\n\n // selection & keyboard\n @Watch('selectionStore') selectionServiceSet(s: Observable<Selection.SelectionStoreState>) {\n this.selectionStoreService = new SelectionStoreService(s, {\n changeRange: range => this.triggerRangeEvent(range),\n focus: (focus, end) => this.doFocus(focus, end),\n });\n\n this.keyboardService = new KeyboardService({\n selectionStoreService: this.selectionStoreService,\n selectionStore: s,\n range: r => this.selectionStoreService.changeRange(r),\n focusNext: (f, next) => this.doFocus(f, f, next),\n applyEdit: val => {\n if (this.readonly) {\n return;\n }\n this.doEdit(val);\n },\n cancelEdit: async () => {\n await this.revogrEdit.cancel();\n this.closeEdit();\n },\n clearCell: () => !this.readonly && this.clearCell(),\n internalPaste: () => !this.readonly && this.internalPaste.emit(),\n getData: () => this.getData(),\n selectAll: () => this.selectAll.emit(),\n });\n this.createAutoFillService();\n this.createClipboardService();\n }\n // autofill\n @Watch('dimensionRow')\n @Watch('dimensionCol')\n createAutoFillService() {\n this.autoFillService = new AutoFillService({\n selectionStoreService: this.selectionStoreService,\n dimensionRow: this.dimensionRow,\n dimensionCol: this.dimensionCol,\n columnService: this.columnService,\n dataStore: this.dataStore,\n\n clearRangeDataApply: e =>\n this.beforeRangeDataApply.emit({\n ...e,\n ...this.types,\n }),\n setTempRange: e => this.setTempRange.emit(e),\n selectionChanged: e => this.internalSelectionChanged.emit(e),\n rangeCopy: e => this.beforeRangeCopyApply.emit(e),\n rangeDataApply: e => this.internalRangeDataApply.emit(e),\n\n setRange: e => this.triggerRangeEvent(e),\n getData: () => this.getData(),\n });\n }\n\n // columns\n @Watch('dataStore')\n @Watch('colData')\n columnServiceSet() {\n this.columnService?.destroy();\n this.columnService = new ColumnService(this.dataStore, this.colData);\n this.createAutoFillService();\n this.createClipboardService();\n }\n\n // clipboard\n createClipboardService() {\n this.clipboardService = new ClipboardService({\n selectionStoreService: this.selectionStoreService,\n columnService: this.columnService,\n dataStore: this.dataStore,\n rangeApply: (d, r) => this.autoFillService.onRangeApply(d, r),\n rangeCopy: range => {\n if (!range) {\n return undefined;\n }\n const { data, mapping } = this.columnService.copyRangeArray(range, this.dataStore);\n const event = this.rangeClipboardCopy.emit({\n range,\n data,\n mapping,\n ...this.types,\n });\n if (event.defaultPrevented) {\n return undefined;\n }\n return event.detail.data;\n },\n rangeClear: () => !this.readonly && this.clearCell(),\n beforeCopy: range => this.internalCopy.emit(range),\n beforePaste: (data, range) => {\n return this.rangeClipboardPaste.emit({\n data,\n range,\n ...this.types,\n });\n },\n });\n }\n\n connectedCallback() {\n this.columnServiceSet();\n this.selectionServiceSet(this.selectionStore);\n }\n\n disconnectedCallback() {\n this.columnService?.destroy();\n }\n\n private renderRange(range: Selection.RangeArea) {\n const style = getElStyle(range, this.dimensionRow.state, this.dimensionCol.state);\n return [<div class={SELECTION_BORDER_CLASS} style={style} />];\n }\n\n private renderEditCell() {\n // if can edit\n const editCell = this.selectionStore.get('edit');\n if (this.readonly || !editCell) {\n return null;\n }\n const val = editCell.val || this.columnService.getCellData(editCell.y, editCell.x);\n const editable = {\n ...editCell,\n ...this.columnService.getSaveData(editCell.y, editCell.x, val),\n };\n const renderEvent = this.beforeEditRender.emit({\n range: {\n ...editCell,\n x1: editCell.x,\n y1: editCell.y,\n },\n ...this.types,\n });\n if (renderEvent.defaultPrevented) {\n return null;\n }\n\n const {\n detail: { range },\n } = renderEvent;\n const style = getElStyle(range, this.dimensionRow.state, this.dimensionCol.state);\n return (\n <revogr-edit\n ref={el => {\n this.revogrEdit = el;\n }}\n onCellEdit={e => {\n const saveEv = this.beforeCellSave.emit(e.detail);\n if (!saveEv.defaultPrevented) {\n this.cellEdit(saveEv.detail);\n }\n\n // if not clear navigate to next cell after edit\n if (!saveEv.detail.preventFocus) {\n this.focusNext();\n }\n }}\n onCloseEdit={e => this.closeEdit(e)}\n editCell={editable}\n saveOnClose={this.applyChangesOnClose}\n column={this.columnService.columns[editCell.x]}\n editor={this.columnService.getCellEditor(editCell.y, editCell.x, this.editors)}\n style={style}\n />\n );\n }\n\n render() {\n const els: VNode[] = [];\n const editCell = this.renderEditCell();\n if (editCell) {\n els.push(editCell);\n } else {\n const range = this.selectionStoreService.ranged;\n const selectionFocus = this.selectionStoreService.focused;\n if ((range || selectionFocus) && this.useClipboard) {\n els.push(this.clipboardService.renderClipboard());\n }\n\n if (range) {\n els.push(...this.renderRange(range));\n }\n if (selectionFocus && !this.readonly && this.range) {\n els.push(this.autoFillService.renderAutofill(range, selectionFocus));\n }\n if (this.canDrag) {\n els.push(\n <revogr-order-editor\n ref={e => (this.orderEditor = e)}\n dataStore={this.dataStore}\n dimensionRow={this.dimensionRow}\n dimensionCol={this.dimensionCol}\n parent={this.element}\n onInternalRowDragStart={e => this.onRowDragStart(e)}\n />,\n );\n }\n }\n return (\n <Host onDblClick={() => this.doEdit()} onMouseDown={(e: MouseEvent) => this.onElementMouseDown(e)}>\n {els}\n <slot name=\"data\" />\n </Host>\n );\n }\n\n private doFocus(focus: Selection.Cell, end: Selection.Cell, next?: Partial<Selection.Cell>) {\n const { defaultPrevented } = this.beforeFocusCell.emit(this.columnService.getSaveData(focus.y, focus.x));\n if (defaultPrevented) {\n return false;\n }\n const evData = {\n range: {\n ...focus,\n x1: end.x,\n y1: end.y,\n },\n next,\n ...this.types,\n };\n const applyEvent = this.applyFocus.emit(evData);\n if (applyEvent.defaultPrevented) {\n return false;\n }\n const { range } = applyEvent.detail;\n return !this.focusCell.emit({\n focus: {\n x: range.x,\n y: range.y,\n },\n end: {\n x: range.x1,\n y: range.y1,\n },\n ...applyEvent.detail,\n }).defaultPrevented;\n }\n\n private triggerRangeEvent(range: Selection.RangeArea) {\n const type = this.types.rowType;\n const applyEvent = this.beforeApplyRange.emit({\n range: { ...range },\n ...this.types,\n });\n if (applyEvent.defaultPrevented) {\n return false;\n }\n const data = this.columnService.getRangeTransformedToProps(applyEvent.detail.range, this.dataStore);\n let e = this.beforeSetRange.emit(data);\n e = this.setRange.emit({ ...applyEvent.detail.range, type });\n if (e.defaultPrevented) {\n return false;\n }\n return !e.defaultPrevented;\n }\n\n protected onElementMouseDown(e: MouseEvent) {\n // Ignore focus if clicked input\n if (isEditInput(e.target as HTMLElement | undefined)) {\n return;\n }\n const data = this.getData();\n if (e.defaultPrevented) {\n return;\n }\n // Regular cell click\n const focusCell = getCurrentCell({ x: e.x, y: e.y }, data);\n this.selectionStoreService.focus(focusCell, this.range && e.shiftKey);\n\n // Initiate autofill selection\n if (this.range) {\n this.autoFillService.selectionStart(e, data);\n }\n }\n\n protected doEdit(val = '') {\n if (this.canEdit()) {\n const editCell = this.selectionStore.get('focus');\n const data = this.columnService.getSaveData(editCell.y, editCell.x);\n this.setEdit?.emit({\n ...data,\n val,\n });\n }\n }\n\n /**\n * Close editor event triggered\n * @param details - if requires focus next\n */\n private closeEdit(e?: CustomEvent<boolean>) {\n this.cancelEdit.emit();\n if (e?.detail) {\n this.focusNext();\n }\n }\n\n /** Edit finished, close cell and save */\n protected cellEdit(e: Edition.SaveDataDetails) {\n const dataToSave = this.columnService.getSaveData(e.rgRow, e.rgCol, e.val);\n this.internalCellEdit.emit(dataToSave);\n }\n\n private async focusNext() {\n const canFocus = await this.keyboardService.keyChangeSelection(\n new KeyboardEvent('keydown', {\n code: codesLetter.ARROW_DOWN,\n }),\n this.range,\n );\n if (!canFocus) {\n this.closeEdit();\n }\n }\n\n protected clearCell() {\n if (this.selectionStoreService.ranged && !isRangeSingleCell(this.selectionStoreService.ranged)) {\n const data = this.columnService.getRangeStaticData(this.selectionStoreService.ranged, '');\n this.autoFillService.onRangeApply(data, this.selectionStoreService.ranged);\n } else if (this.canEdit()) {\n const focused = this.selectionStoreService.focused;\n this.cellEdit({ rgRow: focused.y, rgCol: focused.x, val: '' });\n }\n }\n\n private onRowDragStart({ detail }: CustomEvent<{ cell: Selection.Cell; text: string }>) {\n detail.text = this.columnService.getCellData(detail.cell.y, detail.cell.x);\n }\n\n /** Check if edit possible */\n protected canEdit() {\n if (this.readonly) {\n return false;\n }\n const editCell = this.selectionStoreService.focused;\n return editCell && !this.columnService?.isReadOnly(editCell.y, editCell.x);\n }\n\n get types(): AllDimensionType {\n return {\n rowType: this.dataStore.get('type'),\n colType: this.columnService.type,\n };\n }\n\n /** Collect data from element */\n protected getData() {\n return {\n el: this.element,\n rows: this.dimensionRow.state,\n cols: this.dimensionCol.state,\n lastCell: this.lastCell,\n };\n }\n}\n"],"version":3}
|
|
1
|
+
{"file":"revogr-overlay-selection2.js","mappings":"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","names":["debounce"],"sources":["./src/store/selection/selection.store.service.ts","./src/components/overlay/editors/edit.utils.ts","./src/components/overlay/keyboard.service.ts","./src/components/overlay/autofill.service.tsx","./src/components/overlay/clipboard.service.tsx","./src/components/overlay/revogr-overlay-style.scss?tag=revogr-overlay-selection","./src/components/overlay/revogr-overlay-selection.tsx"],"sourcesContent":["import { Edition, Observable, Selection } from '../../interfaces';\nimport { getRange } from './selection.helpers';\nimport Cell = Selection.Cell;\nimport Range = Selection.RangeArea;\n\ninterface Config {\n changeRange(range: Range): boolean;\n focus(focus: Cell, end: Cell): boolean;\n}\n\nexport default class SelectionStoreService {\n constructor(public store: Observable<Selection.SelectionStoreState>, private config: Config) {\n this.store = store;\n }\n\n get edited(): Edition.EditCellStore | null {\n return this.store.get('edit');\n }\n\n get focused(): Cell | null {\n return this.store.get('focus');\n }\n\n get ranged(): Range | null {\n return this.store.get('range');\n }\n\n changeRange(range: Range) {\n return this.config.changeRange(range);\n }\n\n focus(cell?: Cell, isMulti = false) {\n if (!cell) {\n return false;\n }\n let end: Cell = cell;\n\n // range edit\n if (isMulti) {\n let start: Cell | null = this.store.get('focus');\n if (start) {\n return this.config.changeRange(getRange(start, end));\n }\n }\n\n // single focus\n return this.config.focus(cell, end);\n }\n}\n","import { EDIT_INPUT_WR } from '../../../utils/consts';\n\n// is edit input\nexport function isEditInput(el?: HTMLElement) {\n return !!el?.closest(`.${EDIT_INPUT_WR}`);\n}\n","import { Observable, Selection } from '../../interfaces';\nimport { getRange } from '../../store/selection/selection.helpers';\nimport SelectionStoreService from '../../store/selection/selection.store.service';\nimport { codesLetter } from '../../utils/keyCodes';\nimport { isClear, isCtrlKey, isEnterKey, isLetterKey } from '../../utils/keyCodes.utils';\nimport { timeout } from '../../utils';\nimport { EventData, getCoordinate, isAfterLast, isBeforeFirst } from './selection.utils';\nimport { RESIZE_INTERVAL } from '../../utils/consts';\n\ntype Config = {\n selectionStoreService: SelectionStoreService;\n selectionStore: Observable<Selection.SelectionStoreState>;\n\n applyEdit(val?: any): void;\n cancelEdit(): void;\n clearCell(): void;\n focusNext(focus: Selection.Cell, next: Partial<Selection.Cell>): boolean;\n getData(): any;\n internalPaste(): void;\n range(range: Selection.RangeArea): boolean;\n selectAll(): void;\n};\n\nconst DIRECTION_CODES: string[] = [\n codesLetter.TAB,\n codesLetter.ARROW_UP,\n codesLetter.ARROW_DOWN,\n codesLetter.ARROW_LEFT,\n codesLetter.ARROW_RIGHT,\n];\nexport class KeyboardService {\n private ctrlDown = false;\n\n constructor(private sv: Config) {}\n\n async keyDown(e: KeyboardEvent, canRange: boolean) {\n if (isCtrlKey(e.keyCode, navigator.platform)) {\n this.ctrlDown = true;\n }\n\n\n /**\n * IF EDIT MODE\n */\n if (this.sv.selectionStoreService.edited) {\n switch (e.code) {\n case codesLetter.ESCAPE:\n this.sv.cancelEdit();\n break;\n }\n return;\n }\n\n /**\n * IF NOT EDIT MODE\n */\n\n // pressed clear key\n if (this.sv.selectionStoreService.ranged && isClear(e.code)) {\n this.sv.clearCell();\n return;\n }\n\n // below works with focus only\n if (!this.sv.selectionStoreService.focused) {\n return;\n }\n\n // tab key means same as arrow right\n if (codesLetter.TAB === e.code) {\n this.keyChangeSelection(e, canRange);\n return;\n }\n\n // pressed enter\n if (isEnterKey(e.code)) {\n this.sv.applyEdit();\n return;\n }\n\n // copy operation\n if (this.isCopy(e)) {\n return;\n }\n\n // cut operation\n if (this.isCut(e)) {\n return;\n }\n\n // paste operation\n if (this.isPaste(e)) {\n this.sv.internalPaste();\n return;\n }\n\n // select all\n if (this.isAll(e)) {\n if (canRange) {\n this.selectAll(e);\n }\n return;\n }\n\n // pressed letter key\n if (isLetterKey(e.keyCode)) {\n this.sv.applyEdit(e.key);\n return;\n }\n\n // pressed arrow, change selection position\n if (await this.keyChangeSelection(e, canRange)) {\n return;\n }\n }\n\n private selectAll(e: KeyboardEvent) {\n const range = this.sv.selectionStore.get('range');\n const focus = this.sv.selectionStore.get('focus');\n // if no range or focus - do nothing\n if (!range || !focus) {\n return;\n }\n e.preventDefault();\n this.sv.selectAll();\n }\n\n async keyChangeSelection(e: KeyboardEvent, canRange: boolean) {\n const data = this.changeDirectionKey(e, canRange);\n if (!data) {\n return false;\n }\n\n // this interval needed for several cases\n // grid could be resized before next click\n // at this case to avoid screen jump we use this interval\n await timeout(RESIZE_INTERVAL + 30);\n\n const range = this.sv.selectionStore.get('range');\n const focus = this.sv.selectionStore.get('focus');\n return this.keyPositionChange(data.changes, range, focus, data.isMulti);\n }\n\n keyPositionChange(\n changes: Partial<Selection.Cell>,\n range?: Selection.RangeArea,\n focus?: Selection.Cell,\n isMulti = false\n ) {\n if (!range || !focus) {\n return false;\n }\n const data = getCoordinate(range, focus, changes, isMulti);\n if (!data) {\n return false;\n }\n if (isMulti) {\n const eData: EventData = this.sv.getData();\n if (isAfterLast(data.end, eData) || isBeforeFirst(data.start)) {\n return false;\n }\n const range = getRange(data.start, data.end);\n return this.sv.range(range);\n }\n return this.sv.focusNext(data.start, changes);\n }\n\n keyUp(e: KeyboardEvent): void {\n if (isCtrlKey(e.keyCode, navigator.platform)) {\n this.ctrlDown = false;\n }\n }\n isCut(e: KeyboardEvent): boolean {\n return this.ctrlDown && e.code == codesLetter.X;\n }\n isCopy(e: KeyboardEvent): boolean {\n return this.ctrlDown && e.code == codesLetter.C;\n }\n isPaste(e: KeyboardEvent): boolean {\n return this.ctrlDown && e.code == codesLetter.V;\n }\n isAll(e: KeyboardEvent): boolean {\n return this.ctrlDown && e.code == codesLetter.A;\n }\n /** Monitor key direction changes */\n changeDirectionKey(e: KeyboardEvent, canRange: boolean): { changes: Partial<Selection.Cell>; isMulti?: boolean } | void {\n const isMulti = canRange && e.shiftKey;\n if (DIRECTION_CODES.includes(e.code)) {\n e.preventDefault();\n }\n switch (e.code) {\n case codesLetter.ARROW_UP:\n return { changes: { y: -1 }, isMulti };\n case codesLetter.ARROW_DOWN:\n return { changes: { y: 1 }, isMulti };\n case codesLetter.ARROW_LEFT:\n return { changes: { x: -1 }, isMulti };\n case codesLetter.TAB:\n case codesLetter.ARROW_RIGHT:\n return { changes: { x: 1 }, isMulti };\n }\n }\n}\n","import debounce from 'lodash/debounce';\nimport { DebouncedFunc } from 'lodash';\n\nimport { h } from '@stencil/core';\nimport { CELL_HANDLER_CLASS } from '../../utils/consts';\nimport { Observable, Selection, RevoGrid, Edition } from '../../interfaces';\nimport { EventData, getCell, getCurrentCell, isAfterLast } from './selection.utils';\nimport { getRange } from '../../store/selection/selection.helpers';\nimport SelectionStoreService from '../../store/selection/selection.store.service';\nimport ColumnService from '../data/columnService';\nimport { DataSourceState, getSourceItem } from '../../store/dataSource/data.store';\n\ntype Config = {\n selectionStoreService: SelectionStoreService;\n dimensionRow: Observable<RevoGrid.DimensionSettingsState>;\n dimensionCol: Observable<RevoGrid.DimensionSettingsState>;\n columnService: ColumnService;\n dataStore: Observable<DataSourceState<RevoGrid.DataType, RevoGrid.DimensionRows>>;\n\n setTempRange(e: Selection.TempRange | null): Event;\n selectionChanged(e: Selection.ChangedRange): Event;\n rangeCopy(e: Selection.ChangedRange): Event;\n rangeDataApply(e: Edition.BeforeRangeSaveDataDetails): CustomEvent;\n setRange(e: Selection.RangeArea): boolean;\n clearRangeDataApply(e: {\n range: Selection.RangeArea\n }): CustomEvent<{\n range: Selection.RangeArea\n }>;\n\n getData(): any;\n};\n\nenum AutoFillType {\n selection = 'Selection',\n autoFill = 'AutoFill',\n}\n\nexport class AutoFillService {\n private autoFillType: AutoFillType | null = null;\n private autoFillInitial: Selection.Cell | null = null;\n private autoFillStart: Selection.Cell | null = null;\n private autoFillLast: Selection.Cell | null = null;\n\n private onMouseMoveAutofill: DebouncedFunc<(e: MouseEvent, data: EventData) => void>;\n\n constructor(private sv: Config) {}\n\n /**\n * Render autofill box\n * @param range\n * @param selectionFocus\n */\n renderAutofill(range: Selection.RangeArea, selectionFocus: Selection.Cell) {\n let handlerStyle;\n if (range) {\n handlerStyle = getCell(range, this.sv.dimensionRow.state, this.sv.dimensionCol.state);\n } else {\n handlerStyle = getCell(\n {\n ...selectionFocus,\n x1: selectionFocus.x,\n y1: selectionFocus.y,\n },\n this.sv.dimensionRow.state,\n this.sv.dimensionCol.state,\n );\n }\n return (\n <div\n class={CELL_HANDLER_CLASS}\n style={{ left: `${handlerStyle.right}px`, top: `${handlerStyle.bottom}px` }}\n onMouseDown={(e: MouseEvent) => this.selectionStart(e, this.sv.getData(), AutoFillType.autoFill)}\n />\n );\n }\n\n get isAutoFill() {\n return !!this.autoFillType;\n }\n\n /** Process mouse move events */\n selectionMouseMove(e: MouseEvent) {\n // initiate mouse move debounce if not present\n if (!this.onMouseMoveAutofill) {\n this.onMouseMoveAutofill = debounce((e: MouseEvent, data: EventData) => this.doAutofillMouseMove(e, data), 5);\n }\n if (this.isAutoFill) {\n this.onMouseMoveAutofill(e, this.sv.getData());\n }\n }\n\n private getFocus() {\n let focus = this.sv.selectionStoreService.focused;\n const range = this.sv.selectionStoreService.ranged;\n if (range) {\n focus = { x: range.x, y: range.y };\n }\n if (!focus && !range) {\n return null;\n }\n return focus;\n }\n\n /**\n * Autofill logic:\n * on mouse move apply based on previous direction (if present)\n */\n private doAutofillMouseMove({ x, y }: MouseEvent, data: EventData) {\n // if no initial - not started\n if (!this.autoFillInitial) {\n return;\n }\n const current = getCurrentCell({ x, y }, data);\n\n // first time or direction equal to start(same as first time)\n if (!this.autoFillLast) {\n if (!this.autoFillLast) {\n this.autoFillLast = this.autoFillStart;\n }\n }\n\n // check if not the latest, if latest - do nothing\n if (isAfterLast(current, data)) {\n return;\n }\n this.autoFillLast = current;\n\n const isSame = current.x === this.autoFillInitial.x && current.y === this.autoFillInitial.y;\n // if same as initial - clear\n if (isSame) {\n this.sv.setTempRange(null);\n } else {\n this.sv.setTempRange({\n area: getRange(this.autoFillInitial, this.autoFillLast),\n type: this.autoFillType,\n });\n }\n }\n\n /**\n * Range selection started\n * Mode @param type:\n * Can be triggered from MouseDown selection on element\n * Or can be triggered on corner square drag\n */\n selectionStart(e: MouseEvent, data: EventData, type = AutoFillType.selection) {\n /** Get cell by autofill element */\n const { top, left } = (e.target as HTMLElement).getBoundingClientRect();\n this.autoFillInitial = this.getFocus();\n this.autoFillType = type;\n this.autoFillStart = getCurrentCell({ x: left, y: top }, data);\n e.preventDefault();\n }\n\n /**\n * Clear current range selection\n * on mouse up and mouse leave events\n */ \n clearAutoFillSelection() {\n // Apply autofill values on mouse up if present\n if (this.autoFillInitial) {\n // Get latest\n this.autoFillInitial = this.getFocus();\n\n // Apply range data if present\n if (this.autoFillType === AutoFillType.autoFill) {\n const range = getRange(this.autoFillInitial, this.autoFillLast);\n if (range) {\n const {\n defaultPrevented: stopApply,\n detail: { range: newRange }\n } = this.sv.clearRangeDataApply({\n range,\n });\n if (!stopApply) {\n this.applyRangeWithData(newRange);\n } else {\n // if prevented - clear temp range\n this.sv.setTempRange(null);\n }\n }\n } else {\n this.applyRangeOnly(this.autoFillInitial, this.autoFillLast);\n }\n }\n\n this.autoFillType = null;\n this.autoFillInitial = null;\n this.autoFillLast = null;\n this.autoFillStart = null;\n }\n\n /** Trigger range apply events and handle responses */\n onRangeApply(data: RevoGrid.DataLookup, range: Selection.RangeArea): void {\n const models: RevoGrid.DataLookup = {};\n for (let rowIndex in data) {\n models[rowIndex] = getSourceItem(this.sv.dataStore, parseInt(rowIndex, 10));\n }\n const {\n defaultPrevented: stopRange,\n detail,\n } = this.sv.rangeDataApply({\n data,\n models,\n type: this.sv.dataStore.get('type'),\n });\n if (!stopRange) {\n this.sv.columnService.applyRangeData(detail.data);\n }\n this.sv.setRange(range);\n }\n\n /** Apply range and copy data during range application */\n private applyRangeWithData(newRange: Selection.RangeArea) {\n const oldRange = this.sv.selectionStoreService.ranged;\n const rangeData: Selection.ChangedRange = {\n type: this.sv.dataStore.get('type'),\n newData: {},\n mapping: {},\n newRange,\n oldRange,\n };\n const { mapping, changed } = this.sv.columnService.getRangeData(rangeData, this.sv.columnService.columns);\n rangeData.newData = changed;\n rangeData.mapping = mapping;\n let e = this.sv.selectionChanged(rangeData);\n\n // if default prevented - clear range\n if (e.defaultPrevented) {\n this.sv.setTempRange(null);\n return;\n }\n\n e = this.sv.rangeCopy(rangeData);\n if (e.defaultPrevented) {\n this.sv.setRange(newRange);\n return;\n }\n this.onRangeApply(rangeData.newData, newRange);\n }\n\n /** Update range selection ony, no data change (mouse selection) */\n private applyRangeOnly(start?: Selection.Cell, end?: Selection.Cell) {\n // no changes to apply\n if (!start || !end) {\n return;\n }\n\n const newRange = getRange(start, end);\n this.sv.setRange(newRange);\n }\n}\n","import { h } from '@stencil/core';\nimport SelectionStoreService from '../../store/selection/selection.store.service';\nimport { Observable, RevoGrid, Selection } from '../../interfaces';\nimport { getRange } from '../../store/selection/selection.helpers';\nimport ColumnService from '../data/columnService';\nimport { DataSourceState } from '../../store/dataSource/data.store';\n\ntype Config = {\n selectionStoreService: SelectionStoreService;\n columnService: ColumnService;\n dataStore: Observable<DataSourceState<RevoGrid.DataType, RevoGrid.DimensionRows>>;\n rangeApply(data: RevoGrid.DataLookup, range: Selection.RangeArea): void;\n rangeCopy(range: Selection.RangeArea): any;\n rangeClear(): void;\n beforeCopy(range: Selection.RangeArea): CustomEvent;\n beforePaste(data: RevoGrid.DataLookup, range: Selection.RangeArea): CustomEvent;\n};\n\nexport class ClipboardService {\n private clipboard: HTMLRevogrClipboardElement;\n constructor(private sv: Config) {}\n\n renderClipboard() {\n return <revogr-clipboard\n onCopyRegion={e => this.onCopy(e.detail)}\n onClearRegion={() => this.sv.rangeClear()}\n ref={e => (this.clipboard = e)}\n onPasteRegion={e => this.onPaste(e.detail)} />;\n }\n private getRegion() {\n const focus = this.sv.selectionStoreService.focused;\n let range = this.sv.selectionStoreService.ranged;\n if (!range) {\n range = getRange(focus, focus);\n }\n return range;\n }\n private onCopy(e: DataTransfer) {\n const range = this.getRegion();\n const canCopyEvent = this.sv.beforeCopy(range);\n if (canCopyEvent.defaultPrevented) {\n return false;\n }\n const data = this.sv.rangeCopy(range);\n this.clipboard.doCopy(e, data);\n return true;\n }\n\n private onPaste(data: string[][]) {\n const focus = this.sv.selectionStoreService.focused;\n const isEditing = this.sv.selectionStoreService.edited !== null;\n if (!focus || isEditing) {\n return;\n }\n let { changed, range } = this.sv.columnService.getTransformedDataToApply(focus, data);\n const { defaultPrevented: canPaste } = this.sv.beforePaste(changed, range);\n if (canPaste) {\n return;\n }\n this.sv.rangeApply(changed, range);\n }\n}\n","revogr-overlay-selection {\n display: block;\n position: relative;\n width: 100%;\n\n .autofill-handle {\n $handler-size: 10px;\n position: absolute;\n width: $handler-size;\n height: $handler-size;\n background: $selection-border;\n margin-left: -$handler-size + 1;\n margin-top: -$handler-size + 1;\n border: 1px solid white;\n box-sizing: border-box;\n z-index: 10;\n cursor: crosshair;\n }\n\n .selection-border-range {\n position: absolute;\n pointer-events: none;\n z-index: 9;\n }\n\n .selection-border-range {\n @include selection();\n }\n\n revogr-edit {\n z-index: 10;\n }\n}\n","import { Component, Event, EventEmitter, h, Host, Listen, Prop, VNode, Element, Watch } from '@stencil/core';\n\nimport { AllDimensionType, ApplyFocusEvent, FocusRenderEvent, Edition, Observable, RevoGrid, Selection, DragStartEvent } from '../../interfaces';\nimport ColumnService from '../data/columnService';\nimport SelectionStoreService from '../../store/selection/selection.store.service';\nimport { codesLetter } from '../../utils/keyCodes';\nimport { SELECTION_BORDER_CLASS } from '../../utils/consts';\nimport { DataSourceState } from '../../store/dataSource/data.store';\nimport { isRangeSingleCell } from '../../store/selection/selection.helpers';\nimport { getCurrentCell, getElStyle } from './selection.utils';\nimport { isEditInput } from './editors/edit.utils';\nimport { KeyboardService } from './keyboard.service';\nimport { AutoFillService } from './autofill.service';\nimport { ClipboardService } from './clipboard.service';\n\n@Component({\n tag: 'revogr-overlay-selection',\n styleUrl: 'revogr-overlay-style.scss',\n})\nexport class OverlaySelection {\n protected columnService: ColumnService;\n\n protected selectionStoreService: SelectionStoreService;\n private keyboardService: KeyboardService | null = null;\n private autoFillService: AutoFillService | null = null;\n private clipboardService: ClipboardService | null = null;\n private orderEditor: HTMLRevogrOrderEditorElement;\n private revogrEdit: HTMLRevogrEditElement | null = null;\n\n @Element() element: HTMLElement;\n\n // --------------------------------------------------------------------------\n //\n // Properties\n //\n // --------------------------------------------------------------------------\n\n /**\n * If readonly mode enables\n */\n @Prop() readonly: boolean;\n /**\n * Range selection mode\n */\n @Prop() range: boolean;\n /**\n * Enable revogr-order-editor component (read more in revogr-order-editor component)\n * Allows D&D\n */\n @Prop() canDrag: boolean;\n\n /**\n * Enable revogr-clipboard component (read more in revogr-clipboard component)\n * Allows copy/paste\n */\n @Prop() useClipboard: boolean;\n\n // --------------------------------------------------------------------------\n //\n // Dynamic stores\n //\n // --------------------------------------------------------------------------\n @Prop() selectionStore: Observable<Selection.SelectionStoreState>;\n @Prop() dimensionRow: Observable<RevoGrid.DimensionSettingsState>;\n @Prop() dimensionCol: Observable<RevoGrid.DimensionSettingsState>;\n\n // --------------------------------------------------------------------------\n //\n // Static stores, not expected to change during component lifetime\n //\n // --------------------------------------------------------------------------\n\n /**\n * Row data store\n */\n @Prop() dataStore: Observable<DataSourceState<RevoGrid.DataType, RevoGrid.DimensionRows>>;\n\n /**\n * Column data store\n */\n @Prop() colData: Observable<DataSourceState<RevoGrid.ColumnRegular, RevoGrid.DimensionCols>>;\n /**\n * Last cell position\n */\n @Prop() lastCell: Selection.Cell;\n /**\n * Custom editors register\n */\n @Prop() editors: Edition.Editors;\n /** If true applys changes when cell closes if not Escape */\n @Prop() applyChangesOnClose: boolean = false;\n\n // --------------------------------------------------------------------------\n //\n // Events\n //\n // --------------------------------------------------------------------------\n\n @Event({ cancelable: true }) internalCopy: EventEmitter;\n @Event({ cancelable: true }) internalPaste: EventEmitter;\n\n @Event({ cancelable: true }) internalCellEdit: EventEmitter<Edition.BeforeSaveDataDetails>;\n @Event({ cancelable: true }) beforeFocusCell: EventEmitter<Edition.BeforeSaveDataDetails>;\n\n @Event() setEdit: EventEmitter<Edition.BeforeEdit>;\n @Event({ eventName: 'before-apply-range' }) beforeApplyRange: EventEmitter<FocusRenderEvent>;\n @Event({ eventName: 'before-set-range' }) beforeSetRange: EventEmitter;\n @Event({ eventName: 'before-edit-render' }) beforeEditRender: EventEmitter<FocusRenderEvent>;\n @Event() setRange: EventEmitter<Selection.RangeArea & { type: RevoGrid.MultiDimensionType }>;\n @Event({ eventName: 'selectall' }) selectAll: EventEmitter;\n /**\n * Used for editors support when close requested\n */\n @Event() cancelEdit: EventEmitter;\n @Event() setTempRange: EventEmitter<Selection.TempRange | null>;\n\n @Event() applyFocus: EventEmitter<FocusRenderEvent>;\n @Event() focusCell: EventEmitter<ApplyFocusEvent>;\n /** Range data apply */\n @Event() beforeRangeDataApply: EventEmitter<FocusRenderEvent>;\n /** Selection range changed */\n @Event({ cancelable: true }) internalSelectionChanged: EventEmitter<Selection.ChangedRange>;\n /** Selection range changed */\n @Event({ cancelable: true, bubbles: true }) beforeRangeCopyApply: EventEmitter<Selection.ChangedRange>;\n\n /** Range data apply */\n @Event({ cancelable: true }) internalRangeDataApply: EventEmitter<Edition.BeforeRangeSaveDataDetails>;\n /** Range copy */\n @Event({ cancelable: true }) rangeClipboardCopy: EventEmitter;\n @Event({ cancelable: true }) rangeClipboardPaste: EventEmitter;\n\n /**\n * Runs before cell save\n * Can be used to override or cancel original save\n */\n @Event({ eventName: 'before-cell-save', cancelable: true }) beforeCellSave: EventEmitter;\n // --------------------------------------------------------------------------\n //\n // Listeners\n //\n // --------------------------------------------------------------------------\n\n @Listen('mousemove', { target: 'document' }) onMouseMove(e: MouseEvent) {\n if (this.selectionStoreService.focused) {\n this.autoFillService.selectionMouseMove(e);\n }\n }\n\n /** Pointer left document, clear any active operation */\n @Listen('mouseleave', { target: 'document' }) onMouseOut() {\n this.autoFillService.clearAutoFillSelection();\n }\n\n /** Action finished inside of the document */\n @Listen('mouseup', { target: 'document' }) onMouseUp() {\n this.autoFillService.clearAutoFillSelection();\n }\n\n /** Row drag started */\n @Listen('dragStartCell') onCellDrag(e: CustomEvent<DragStartEvent>) {\n this.orderEditor?.dragStart(e.detail);\n }\n\n /** Get keyboard down from element */\n @Listen('keyup', { target: 'document' }) onKeyUp(e: KeyboardEvent) {\n this.keyboardService?.keyUp(e);\n }\n\n /** Get keyboard down from element */\n @Listen('keydown', { target: 'document' }) onKeyDown(e: KeyboardEvent) {\n if (e.defaultPrevented) {\n return;\n }\n this.keyboardService?.keyDown(e, this.range);\n }\n\n // selection & keyboard\n @Watch('selectionStore') selectionServiceSet(s: Observable<Selection.SelectionStoreState>) {\n this.selectionStoreService = new SelectionStoreService(s, {\n changeRange: range => this.triggerRangeEvent(range),\n focus: (focus, end) => this.doFocus(focus, end),\n });\n\n this.keyboardService = new KeyboardService({\n selectionStoreService: this.selectionStoreService,\n selectionStore: s,\n range: r => this.selectionStoreService.changeRange(r),\n focusNext: (f, next) => this.doFocus(f, f, next),\n applyEdit: val => {\n if (this.readonly) {\n return;\n }\n this.doEdit(val);\n },\n cancelEdit: async () => {\n await this.revogrEdit.cancel();\n this.closeEdit();\n },\n clearCell: () => !this.readonly && this.clearCell(),\n internalPaste: () => !this.readonly && this.internalPaste.emit(),\n getData: () => this.getData(),\n selectAll: () => this.selectAll.emit(),\n });\n this.createAutoFillService();\n this.createClipboardService();\n }\n // autofill\n @Watch('dimensionRow')\n @Watch('dimensionCol')\n createAutoFillService() {\n this.autoFillService = new AutoFillService({\n selectionStoreService: this.selectionStoreService,\n dimensionRow: this.dimensionRow,\n dimensionCol: this.dimensionCol,\n columnService: this.columnService,\n dataStore: this.dataStore,\n\n clearRangeDataApply: e =>\n this.beforeRangeDataApply.emit({\n ...e,\n ...this.types,\n }),\n setTempRange: e => this.setTempRange.emit(e),\n selectionChanged: e => this.internalSelectionChanged.emit(e),\n rangeCopy: e => this.beforeRangeCopyApply.emit(e),\n rangeDataApply: e => this.internalRangeDataApply.emit(e),\n\n setRange: e => this.triggerRangeEvent(e),\n getData: () => this.getData(),\n });\n }\n\n // columns\n @Watch('dataStore')\n @Watch('colData')\n columnServiceSet() {\n this.columnService?.destroy();\n this.columnService = new ColumnService(this.dataStore, this.colData);\n this.createAutoFillService();\n this.createClipboardService();\n }\n\n // clipboard\n createClipboardService() {\n this.clipboardService = new ClipboardService({\n selectionStoreService: this.selectionStoreService,\n columnService: this.columnService,\n dataStore: this.dataStore,\n rangeApply: (d, r) => this.autoFillService.onRangeApply(d, r),\n rangeCopy: range => {\n if (!range) {\n return undefined;\n }\n const { data, mapping } = this.columnService.copyRangeArray(range, this.dataStore);\n const event = this.rangeClipboardCopy.emit({\n range,\n data,\n mapping,\n ...this.types,\n });\n if (event.defaultPrevented) {\n return undefined;\n }\n return event.detail.data;\n },\n rangeClear: () => !this.readonly && this.clearCell(),\n beforeCopy: range => this.internalCopy.emit(range),\n beforePaste: (data, range) => {\n return this.rangeClipboardPaste.emit({\n data,\n range,\n ...this.types,\n });\n },\n });\n }\n\n connectedCallback() {\n this.columnServiceSet();\n this.selectionServiceSet(this.selectionStore);\n }\n\n disconnectedCallback() {\n this.columnService?.destroy();\n }\n\n private renderRange(range: Selection.RangeArea) {\n const style = getElStyle(range, this.dimensionRow.state, this.dimensionCol.state);\n return [<div class={SELECTION_BORDER_CLASS} style={style} />];\n }\n\n private renderEditCell() {\n // if can edit\n const editCell = this.selectionStore.get('edit');\n if (this.readonly || !editCell) {\n return null;\n }\n const val = editCell.val || this.columnService.getCellData(editCell.y, editCell.x);\n const editable = {\n ...editCell,\n ...this.columnService.getSaveData(editCell.y, editCell.x, val),\n };\n const renderEvent = this.beforeEditRender.emit({\n range: {\n ...editCell,\n x1: editCell.x,\n y1: editCell.y,\n },\n ...this.types,\n });\n if (renderEvent.defaultPrevented) {\n return null;\n }\n\n const {\n detail: { range },\n } = renderEvent;\n const style = getElStyle(range, this.dimensionRow.state, this.dimensionCol.state);\n return (\n <revogr-edit\n ref={el => {\n this.revogrEdit = el;\n }}\n onCellEdit={e => {\n const saveEv = this.beforeCellSave.emit(e.detail);\n if (!saveEv.defaultPrevented) {\n this.cellEdit(saveEv.detail);\n }\n\n // if not clear navigate to next cell after edit\n if (!saveEv.detail.preventFocus) {\n this.focusNext();\n }\n }}\n onCloseEdit={e => this.closeEdit(e)}\n editCell={editable}\n saveOnClose={this.applyChangesOnClose}\n column={this.columnService.columns[editCell.x]}\n editor={this.columnService.getCellEditor(editCell.y, editCell.x, this.editors)}\n style={style}\n />\n );\n }\n\n render() {\n const els: VNode[] = [];\n const editCell = this.renderEditCell();\n if (editCell) {\n els.push(editCell);\n } else {\n const range = this.selectionStoreService.ranged;\n const selectionFocus = this.selectionStoreService.focused;\n if ((range || selectionFocus) && this.useClipboard) {\n els.push(this.clipboardService.renderClipboard());\n }\n\n if (range) {\n els.push(...this.renderRange(range));\n }\n if (selectionFocus && !this.readonly && this.range) {\n els.push(this.autoFillService.renderAutofill(range, selectionFocus));\n }\n if (this.canDrag) {\n els.push(\n <revogr-order-editor\n ref={e => (this.orderEditor = e)}\n dataStore={this.dataStore}\n dimensionRow={this.dimensionRow}\n dimensionCol={this.dimensionCol}\n parent={this.element}\n onInternalRowDragStart={e => this.onRowDragStart(e)}\n />,\n );\n }\n }\n return (\n <Host onDblClick={() => this.doEdit()} onMouseDown={(e: MouseEvent) => this.onElementMouseDown(e)}>\n {els}\n <slot name=\"data\" />\n </Host>\n );\n }\n\n private doFocus(focus: Selection.Cell, end: Selection.Cell, next?: Partial<Selection.Cell>) {\n const { defaultPrevented } = this.beforeFocusCell.emit(this.columnService.getSaveData(focus.y, focus.x));\n if (defaultPrevented) {\n return false;\n }\n const evData = {\n range: {\n ...focus,\n x1: end.x,\n y1: end.y,\n },\n next,\n ...this.types,\n };\n const applyEvent = this.applyFocus.emit(evData);\n if (applyEvent.defaultPrevented) {\n return false;\n }\n const { range } = applyEvent.detail;\n return !this.focusCell.emit({\n focus: {\n x: range.x,\n y: range.y,\n },\n end: {\n x: range.x1,\n y: range.y1,\n },\n ...applyEvent.detail,\n }).defaultPrevented;\n }\n\n private triggerRangeEvent(range: Selection.RangeArea) {\n const type = this.types.rowType;\n const applyEvent = this.beforeApplyRange.emit({\n range: { ...range },\n ...this.types,\n });\n if (applyEvent.defaultPrevented) {\n return false;\n }\n const data = this.columnService.getRangeTransformedToProps(applyEvent.detail.range, this.dataStore);\n let e = this.beforeSetRange.emit(data);\n e = this.setRange.emit({ ...applyEvent.detail.range, type });\n if (e.defaultPrevented) {\n return false;\n }\n return !e.defaultPrevented;\n }\n\n protected onElementMouseDown(e: MouseEvent) {\n // Ignore focus if clicked input\n if (isEditInput(e.target as HTMLElement | undefined)) {\n return;\n }\n const data = this.getData();\n if (e.defaultPrevented) {\n return;\n }\n // Regular cell click\n const focusCell = getCurrentCell({ x: e.x, y: e.y }, data);\n this.selectionStoreService.focus(focusCell, this.range && e.shiftKey);\n\n // Initiate autofill selection\n if (this.range) {\n this.autoFillService.selectionStart(e, data);\n }\n }\n\n protected doEdit(val = '') {\n if (this.canEdit()) {\n const editCell = this.selectionStore.get('focus');\n const data = this.columnService.getSaveData(editCell.y, editCell.x);\n this.setEdit?.emit({\n ...data,\n val,\n });\n }\n }\n\n /**\n * Close editor event triggered\n * @param details - if requires focus next\n */\n private closeEdit(e?: CustomEvent<boolean>) {\n this.cancelEdit.emit();\n if (e?.detail) {\n this.focusNext();\n }\n }\n\n /** Edit finished, close cell and save */\n protected cellEdit(e: Edition.SaveDataDetails) {\n const dataToSave = this.columnService.getSaveData(e.rgRow, e.rgCol, e.val);\n this.internalCellEdit.emit(dataToSave);\n }\n\n private async focusNext() {\n const canFocus = await this.keyboardService.keyChangeSelection(\n new KeyboardEvent('keydown', {\n code: codesLetter.ARROW_DOWN,\n }),\n this.range,\n );\n if (!canFocus) {\n this.closeEdit();\n }\n }\n\n protected clearCell() {\n if (this.selectionStoreService.ranged && !isRangeSingleCell(this.selectionStoreService.ranged)) {\n const data = this.columnService.getRangeStaticData(this.selectionStoreService.ranged, '');\n this.autoFillService.onRangeApply(data, this.selectionStoreService.ranged);\n } else if (this.canEdit()) {\n const focused = this.selectionStoreService.focused;\n this.cellEdit({ rgRow: focused.y, rgCol: focused.x, val: '' });\n }\n }\n\n private onRowDragStart({ detail }: CustomEvent<{ cell: Selection.Cell; text: string }>) {\n detail.text = this.columnService.getCellData(detail.cell.y, detail.cell.x);\n }\n\n /** Check if edit possible */\n protected canEdit() {\n if (this.readonly) {\n return false;\n }\n const editCell = this.selectionStoreService.focused;\n return editCell && !this.columnService?.isReadOnly(editCell.y, editCell.x);\n }\n\n get types(): AllDimensionType {\n return {\n rowType: this.dataStore.get('type'),\n colType: this.columnService.type,\n };\n }\n\n /** Collect data from element */\n protected getData() {\n return {\n el: this.element,\n rows: this.dimensionRow.state,\n cols: this.dimensionCol.state,\n lastCell: this.lastCell,\n };\n }\n}\n"],"version":3}
|
|
@@ -18,7 +18,6 @@ function getUpdatedItemsByPosition(pos, // coordinate
|
|
|
18
18
|
items, realCount, virtualSize, dimension) {
|
|
19
19
|
const activeItem = getItemByPosition(dimension, pos);
|
|
20
20
|
const firstItem = getFirstItem(items);
|
|
21
|
-
console.log('getUpdatedItemsByPosition', items, pos, firstItem);
|
|
22
21
|
let toUpdate;
|
|
23
22
|
// do simple position recombination if items already present in viewport
|
|
24
23
|
if (firstItem) {
|
|
@@ -43,7 +42,9 @@ items, realCount, virtualSize, dimension) {
|
|
|
43
42
|
firstItemIndex: activeItem.itemIndex,
|
|
44
43
|
origSize: dimension.originItemSize,
|
|
45
44
|
// virtual size can differ based on scroll position if some big items are present
|
|
46
|
-
|
|
45
|
+
// scroll can be in the middle of item and virtual size will be larger
|
|
46
|
+
// so we need to exclude this part from virtual size hence it's already passed
|
|
47
|
+
maxSize: Math.min(virtualSize + (activeItem.end - activeItem.start), dimension.realSize),
|
|
47
48
|
maxCount: realCount,
|
|
48
49
|
sizes: dimension.sizes,
|
|
49
50
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"revogr-row-headers2.js","mappings":"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","names":[],"sources":["./src/store/viewPort/viewport.helpers.ts","./src/store/viewPort/viewport.store.ts","./src/utils/row-header-utils.ts","./src/components/rowHeaders/row-header-render.tsx","./src/components/rowHeaders/revogr-row-headers.tsx"],"sourcesContent":["import { getItemByPosition } from '../dimension/dimension.helpers';\nimport { RevoGrid } from '../../interfaces';\n\nexport type DimensionDataViewport = Pick<\n RevoGrid.DimensionSettingsState,\n 'indexes' | 'positionIndexes' | 'positionIndexToItem' | 'sizes' | 'originItemSize' | 'realSize'\n>;\n\ntype ItemsToUpdate = Pick<RevoGrid.ViewportStateItems, 'items' | 'start' | 'end'>;\n/**\n * Update items based on new scroll position\n * If viewport wasn't changed fully simple recombination of positions\n * Otherwise rebuild viewport items\n */\nexport function getUpdatedItemsByPosition<T extends ItemsToUpdate>(\n pos: number, // coordinate\n items: T,\n realCount: number,\n virtualSize: number,\n dimension: DimensionDataViewport\n): ItemsToUpdate {\n const activeItem: RevoGrid.PositionItem = getItemByPosition(dimension, pos);\n const firstItem: RevoGrid.VirtualPositionItem = getFirstItem(items);\n\n console.log('getUpdatedItemsByPosition', items, pos, firstItem)\n let toUpdate: ItemsToUpdate;\n // do simple position recombination if items already present in viewport\n if (firstItem) {\n let changedOffsetStart = activeItem.itemIndex - (firstItem.itemIndex || 0);\n // if item changed\n if (changedOffsetStart) {\n // simple recombination\n toUpdate = recombineByOffset(Math.abs(changedOffsetStart), {\n positiveDirection: changedOffsetStart > -1,\n ...dimension,\n ...items,\n });\n }\n }\n\n // if partial recombination add items if revo-viewport has some space left\n if (toUpdate) {\n const extra = addMissingItems(activeItem, realCount, virtualSize, toUpdate, dimension);\n if (extra.length) {\n updateMissingAndRange(toUpdate.items, extra, toUpdate);\n }\n }\n\n // new collection if no items after replacement full replacement\n if (!toUpdate) {\n const items = getItems({\n firstItemStart: activeItem.start,\n firstItemIndex: activeItem.itemIndex,\n origSize: dimension.originItemSize,\n // virtual size can differ based on scroll position if some big items are present\n maxSize: Math.min(virtualSize + (pos - activeItem.start), dimension.realSize),\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\nexport function updateMissingAndRange(\n items: RevoGrid.VirtualPositionItem[],\n missing: RevoGrid.VirtualPositionItem[],\n range: RevoGrid.Range\n) {\n items.splice(range.end + 1, 0, ...missing);\n // update range if start larger after recombination\n if (range.start >= range.end && !(range.start === range.end && range.start === 0)) {\n range.start += missing.length;\n }\n range.end += missing.length;\n}\n\n/**\n * If partial replacement\n * this function adds items if viewport has some space left\n */\nexport function addMissingItems<T extends ItemsToUpdate>(\n firstItem: RevoGrid.PositionItem,\n realCount: number,\n virtualSize: number,\n existingCollection: T,\n dimension: Pick<RevoGrid.DimensionSettingsState, 'sizes' | 'originItemSize'>,\n): RevoGrid.VirtualPositionItem[] {\n const lastItem: RevoGrid.VirtualPositionItem = getLastItem(existingCollection);\n const items = getItems({\n sizes: dimension.sizes,\n firstItemStart: lastItem.end,\n firstItemIndex: lastItem.itemIndex + 1,\n origSize: dimension.originItemSize,\n maxSize: virtualSize - (lastItem.end - firstItem.start),\n maxCount: realCount,\n });\n return items;\n}\n\n/**\n * Get wiewport items parameters\n * caching position and calculating items count in viewport\n */\nexport function getItems(\n opt: {\n firstItemIndex: number;\n firstItemStart: number;\n origSize: number;\n maxSize: number; // virtual size\n maxCount: number; // real item count, where the last item\n sizes?: RevoGrid.ViewSettingSizeProp;\n },\n currentSize = 0,\n) {\n const items: RevoGrid.VirtualPositionItem[] = [];\n\n let index = opt.firstItemIndex;\n let size = currentSize;\n\n // max size or max count\n while (size <= opt.maxSize && index < opt.maxCount) {\n const newSize = getItemSize(index, opt.sizes, opt.origSize);\n items.push({\n start: opt.firstItemStart + size,\n end: opt.firstItemStart + size + newSize,\n itemIndex: index,\n size: newSize,\n });\n size += newSize;\n index++;\n }\n return items;\n}\n\n/**\n * Do batch items recombination\n * If items not overlapped with existing viewport returns null\n */\ntype RecombindDimensionData = Pick<RevoGrid.DimensionSettingsState, 'sizes' | 'realSize' | 'originItemSize'>;\ntype RecombineOffsetData = {\n positiveDirection: boolean;\n} & ItemsToUpdate & RecombindDimensionData;\nexport function recombineByOffset(\n offset: number,\n data: RecombineOffsetData\n): ItemsToUpdate | null {\n const newItems = [...data.items];\n const itemsCount = newItems.length;\n let newRange = {\n start: data.start,\n end: data.end,\n };\n\n // if offset out of revo-viewport, makes sense whole redraw\n if (offset > itemsCount) {\n return null;\n }\n\n // is direction of scroll positive\n if (data.positiveDirection) {\n // push item to the end\n let lastItem: RevoGrid.VirtualPositionItem = getLastItem(data);\n\n let i: number = newRange.start;\n const length = i + offset;\n for (; i < length; i++) {\n const newIndex: number = lastItem.itemIndex + 1;\n const size: number = getItemSize(newIndex, data.sizes, data.originItemSize);\n\n // if item overlapped limit break a loop\n if (lastItem.end + size > data.realSize) {\n break;\n }\n\n // new item index to recombine\n let newEnd = i % itemsCount;\n\n // item should always present, we do not create new item, we recombine them\n if (!newItems[newEnd]) {\n throw new Error('incorrect index');\n }\n\n // do recombination\n newItems[newEnd] = lastItem = {\n start: lastItem.end,\n end: lastItem.end + size,\n itemIndex: newIndex,\n size: size,\n };\n // update range\n newRange.start++;\n newRange.end = newEnd;\n }\n\n // direction is negative\n } else {\n // push item to the start\n let firstItem: RevoGrid.VirtualPositionItem = getFirstItem(data);\n\n const end = newRange.end;\n for (let i = 0; i < offset; i++) {\n const newIndex: number = firstItem.itemIndex - 1;\n const size: number = getItemSize(newIndex, data.sizes, data.originItemSize);\n\n // new item index to recombine\n let newStart = end - i;\n newStart = (newStart < 0 ? itemsCount + newStart : newStart) % itemsCount;\n\n // item should always present, we do not create new item, we recombine them\n if (!newItems[newStart]) {\n throw new Error('incorrect index');\n }\n\n // do recombination\n newItems[newStart] = firstItem = {\n start: firstItem.start - size,\n end: firstItem.start,\n itemIndex: newIndex,\n size: size,\n };\n // update range\n newRange.start = newStart;\n newRange.end--;\n }\n }\n const range = {\n start: (newRange.start < 0 ? itemsCount + newRange.start : newRange.start) % itemsCount,\n end: (newRange.end < 0 ? itemsCount + newRange.end : newRange.end) % itemsCount,\n };\n return {\n items: newItems,\n ...range,\n };\n}\n\nfunction getItemSize(index: number, sizes?: RevoGrid.ViewSettingSizeProp, origSize: number = 0): number {\n if (sizes && sizes[index]) {\n return sizes[index];\n }\n return origSize;\n}\n\nexport function isActiveRange(pos: number, item: RevoGrid.PositionItem | undefined): boolean {\n return item && pos >= item.start && pos <= item.end;\n}\n\nexport function getFirstItem(s: ItemsToUpdate): RevoGrid.VirtualPositionItem | undefined {\n return s.items[s.start];\n}\n\nexport function getLastItem(s: ItemsToUpdate): RevoGrid.VirtualPositionItem {\n return s.items[s.end];\n}\n\n/**\n * Set items sizes from start index to end\n * @param vpItems \n * @param start \n * @param size \n * @param lastCoordinate \n * @returns \n */\nexport function setItemSizes(\n vpItems: RevoGrid.VirtualPositionItem[],\n initialIndex: number,\n size: number,\n lastCoordinate: number\n) {\n const items = [...vpItems];\n const count = items.length;\n\n let pos = lastCoordinate;\n let i = 0;\n let start = initialIndex;\n\n // viewport not inited\n if (!count) {\n return [];\n }\n // loop through array from initial item after recombination\n while (i < count) {\n const item = items[start];\n item.start = pos;\n item.size = size;\n item.end = item.start + size;\n pos = item.end;\n // loop by start index\n start++;\n i++;\n\n // if start index out of array, reset it\n if (start === count) {\n start = 0;\n }\n }\n return items;\n}\n","/**\n * Store is responsible for visible\n * Viewport information for each dimension\n * Redraw items during scrolling\n */\n\nimport { createStore } from '@stencil/store';\n\nimport {\n addMissingItems,\n DimensionDataViewport,\n getFirstItem,\n getLastItem,\n getUpdatedItemsByPosition,\n isActiveRange,\n setItemSizes,\n updateMissingAndRange,\n} from './viewport.helpers';\n\nimport { setStore } from '../../utils/store.utils';\nimport { Observable, RevoGrid } from '../../interfaces';\n\nfunction initialState(): RevoGrid.ViewportState {\n return {\n // virtual item information per rendered item\n items: [],\n // virtual dom item order to render\n start: 0,\n\n end: 0,\n\n // size of viewport in px\n virtualSize: 0,\n\n // total number of items\n realCount: 0,\n };\n}\n\nexport default class ViewportStore {\n readonly store: Observable<RevoGrid.ViewportState>;\n // last coordinate for store position restore\n private lastKnownScroll = 0;\n get lastCoordinate() {\n return this.lastKnownScroll;\n }\n private set lastCoordinate(value: number) {\n this.lastKnownScroll = value;\n }\n constructor(readonly type: RevoGrid.MultiDimensionType) {\n this.store = createStore(initialState());\n this.store.onChange('realCount', () => this.clearItems());\n // drop items on virtual size change, require a new item set\n this.store.onChange('virtualSize', () => this.setViewport({ items: [] }));\n }\n\n /**\n * Render viewport based on coordinate\n * It's the main method for draw\n */\n setViewPortCoordinate(position: number, dimension: DimensionDataViewport) {\n let virtualSize = this.store.get('virtualSize');\n // no visible data to calculate\n if (!virtualSize) {\n return;\n }\n\n const frameOffset = 1;\n const outsize = frameOffset * 2 * dimension.originItemSize;\n virtualSize += outsize;\n\n let maxCoordinate = virtualSize;\n if (dimension.realSize > virtualSize) {\n maxCoordinate = dimension.realSize - virtualSize;\n }\n this.lastCoordinate = position;\n let pos = position;\n pos -= frameOffset * dimension.originItemSize;\n pos = pos < 0 ? 0 : pos < maxCoordinate ? pos : maxCoordinate;\n\n const firstItem = getFirstItem(this.getItems());\n const lastItem = getLastItem(this.getItems());\n\n let toUpdate: Partial<RevoGrid.ViewportState> = {};\n // left position changed\n if (!isActiveRange(pos, firstItem)) {\n toUpdate = {\n ...toUpdate,\n ...getUpdatedItemsByPosition(pos, this.getItems(), this.store.get('realCount'), virtualSize, dimension),\n };\n setStore(this.store, { ...toUpdate });\n // right position changed\n } else if (firstItem && this.store.get('virtualSize') + pos > lastItem?.end) {\n // check is any item missing for full fill content\n const missing = addMissingItems(firstItem, this.store.get('realCount'), virtualSize + pos - firstItem.start, this.getItems(), dimension);\n\n if (missing.length) {\n const items = [...this.store.get('items')];\n const range = {\n start: this.store.get('start'),\n end: this.store.get('end'),\n };\n updateMissingAndRange(items, missing, range);\n toUpdate = {\n ...toUpdate,\n items: [...items],\n ...range,\n };\n setStore(this.store, { ...toUpdate });\n }\n }\n }\n\n /**\n * Update viewport sizes for existing items\n * This method is generating new item positions based on custom sizes and original sizes\n * @param sizes - custom sizes for each item\n * @param dropToOriginalSize - drop to original size if requested\n */\n setViewPortDimensionSizes(sizes: RevoGrid.ViewSettingSizeProp, dropToOriginalSize?: number) {\n let items = [...this.store.get('items')];\n const count = items.length;\n // viewport not inited\n if (!count) {\n return;\n }\n\n let changedCoordinate = 0;\n let i = 0;\n let start = this.store.get('start');\n\n // drop to original size if requested\n if (dropToOriginalSize) {\n items = setItemSizes(items, start, dropToOriginalSize, this.lastCoordinate);\n }\n\n // loop through array from initial item after recombination\n // if size change present, change position for all items after\n while (i < count) {\n const item = items[start];\n // change pos if size change present before\n if (changedCoordinate) {\n item.start += changedCoordinate;\n item.end += changedCoordinate;\n }\n // check if size change present\n const size: number | undefined = sizes[item.itemIndex];\n // size found\n if (size) {\n const changedSize = size - item.size;\n changedCoordinate += changedSize;\n item.size = size;\n item.end = item.start + size;\n // size lost\n }\n\n // loop by start index\n start++;\n i++;\n // if start index out of array, reset it\n if (start === count) {\n start = 0;\n }\n }\n\n setStore(this.store, { items: [...items] });\n }\n\n /**\n * Set sizes for existing items\n */\n setOriginalSizes(size: number) {\n const items = this.store.get('items');\n const count = items.length;\n // viewport not inited\n if (!count) {\n return;\n }\n\n setStore(this.store, {\n items: setItemSizes(items, this.store.get('start'), size, this.lastCoordinate),\n });\n }\n\n getItems(): Pick<RevoGrid.ViewportStateItems, 'items' | 'start' | 'end'> {\n return {\n items: this.store.get('items'),\n start: this.store.get('start'),\n end: this.store.get('end'),\n };\n }\n\n setViewport(data: Partial<RevoGrid.ViewportState>) {\n setStore(this.store, data);\n }\n\n clearItems() {\n this.store.set('items', []);\n }\n}\n","import { RevoGrid } from '../interfaces';\n\nconst LETTER_BLOCK_SIZE = 10;\nexport const calculateRowHeaderSize = (itemsLength: number, rowHeaderColumn?: RevoGrid.RowHeaders) => {\n return rowHeaderColumn?.size || (itemsLength.toString().length + 1) * LETTER_BLOCK_SIZE;\n};\n","import { VNode } from '@stencil/core';\nimport { RevoGrid } from '../../interfaces';\n\ntype HeaderRender = {\n (start: number): (h: RevoGrid.HyperFunc<VNode>, e: { rowIndex: number }) => number;\n};\nexport const RowHeaderRender: HeaderRender = s => (__, { rowIndex: i }) => s + i;\n","import { h, Host } from '@stencil/core';\nimport { Component, Prop, Event, EventEmitter } from '@stencil/core';\nimport { RevoGrid } from '../../interfaces';\nimport DataStore from '../../store/dataSource/data.store';\nimport ViewportStore from '../../store/viewPort/viewport.store';\nimport { ROW_HEADER_TYPE, UUID } from '../../utils/consts';\nimport { ElementScroll } from '../revoGrid/viewport.scrolling.service';\nimport { ViewportData } from '../revoGrid/viewport.interfaces';\nimport { RowHeaderRender } from './row-header-render';\nimport { calculateRowHeaderSize } from '../../utils/row-header-utils';\nimport { HEADER_SLOT } from '../revoGrid/viewport.helpers';\n\n/**\n * Row headers component\n * Visible on the left side of the table\n */\n\n@Component({ tag: 'revogr-row-headers' })\nexport class RevogrRowHeaders {\n @Prop() height: number;\n\n @Prop() dataPorts: ViewportData[];\n @Prop() headerProp: Record<string, any>;\n @Prop() uiid: string;\n @Prop() rowClass: string;\n\n @Prop() resize: boolean;\n @Prop() rowHeaderColumn: RevoGrid.RowHeaders;\n /** Additional data to pass to renderer */\n @Prop() additionalData: any;\n\n @Event({ bubbles: false }) scrollViewport: EventEmitter<RevoGrid.ViewPortScrollEvent>;\n @Event({ bubbles: false }) elementToScroll: EventEmitter<ElementScroll>;\n\n render() {\n const dataViews: HTMLElement[] = [];\n const viewport = new ViewportStore('colPinStart');\n\n /** render viewports rows */\n let totalLength = 1;\n for (let data of this.dataPorts) {\n const itemCount = data.dataStore.get('items').length;\n // initiate row data\n const dataStore = new DataStore<RevoGrid.DataType, RevoGrid.DimensionRows>(data.type);\n dataStore.updateData(data.dataStore.get('source'));\n // initiate column data\n const colData = new DataStore<RevoGrid.ColumnRegular, RevoGrid.DimensionCols>('colPinStart');\n const column = {\n cellTemplate: RowHeaderRender(totalLength),\n ...this.rowHeaderColumn,\n };\n colData.updateData([column]);\n\n const viewData = {\n ...data,\n rowClass: this.rowClass,\n dataStore: dataStore.store,\n colData: colData.store,\n viewportCol: viewport.store,\n readonly: true,\n range: false,\n };\n dataViews.push(<revogr-data {...viewData} />);\n totalLength += itemCount;\n }\n\n const colSize = calculateRowHeaderSize(totalLength, this.rowHeaderColumn);\n viewport.setViewport({\n realCount: 1,\n virtualSize: 0,\n items: [\n {\n size: colSize,\n start: 0,\n end: colSize,\n itemIndex: 0,\n },\n ],\n });\n\n const parent = `${this.uiid}-rowHeaders`;\n const viewportScroll = {\n [UUID]: parent,\n contentHeight: this.height,\n contentWidth: 0,\n style: { minWidth: `${colSize}px` },\n ref: (el: ElementScroll) => this.elementToScroll.emit(el),\n onScrollViewport: (e: CustomEvent) => this.scrollViewport.emit(e.detail),\n };\n const viewportHeader = {\n ...this.headerProp,\n colData: typeof this.rowHeaderColumn === 'object' ? [this.rowHeaderColumn] : [],\n viewportCol: viewport.store,\n canResize: false,\n type: ROW_HEADER_TYPE,\n parent,\n slot: HEADER_SLOT,\n };\n return (\n <Host class={ { [ROW_HEADER_TYPE]: true } } key={ROW_HEADER_TYPE}>\n <revogr-viewport-scroll {...viewportScroll}>\n <revogr-header {...viewportHeader} />\n {dataViews}\n </revogr-viewport-scroll>\n </Host>\n );\n }\n}\n"],"version":3}
|
|
1
|
+
{"file":"revogr-row-headers2.js","mappings":"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","names":[],"sources":["./src/store/viewPort/viewport.helpers.ts","./src/store/viewPort/viewport.store.ts","./src/utils/row-header-utils.ts","./src/components/rowHeaders/row-header-render.tsx","./src/components/rowHeaders/revogr-row-headers.tsx"],"sourcesContent":["import { getItemByPosition } from '../dimension/dimension.helpers';\nimport { RevoGrid } from '../../interfaces';\n\nexport type DimensionDataViewport = Pick<\n RevoGrid.DimensionSettingsState,\n 'indexes' | 'positionIndexes' | 'positionIndexToItem' | 'sizes' | 'originItemSize' | 'realSize'\n>;\n\ntype ItemsToUpdate = Pick<RevoGrid.ViewportStateItems, 'items' | 'start' | 'end'>;\n/**\n * Update items based on new scroll position\n * If viewport wasn't changed fully simple recombination of positions\n * Otherwise rebuild viewport items\n */\nexport function getUpdatedItemsByPosition<T extends ItemsToUpdate>(\n pos: number, // coordinate\n items: T,\n realCount: number,\n virtualSize: number,\n dimension: DimensionDataViewport\n): ItemsToUpdate {\n const activeItem: RevoGrid.PositionItem = getItemByPosition(dimension, pos);\n const firstItem: RevoGrid.VirtualPositionItem = getFirstItem(items);\n let toUpdate: ItemsToUpdate;\n // do simple position recombination if items already present in viewport\n if (firstItem) {\n let changedOffsetStart = activeItem.itemIndex - (firstItem.itemIndex || 0);\n // if item changed\n if (changedOffsetStart) {\n // simple recombination\n toUpdate = recombineByOffset(Math.abs(changedOffsetStart), {\n positiveDirection: changedOffsetStart > -1,\n ...dimension,\n ...items,\n });\n }\n }\n\n // if partial recombination add items if revo-viewport has some space left\n if (toUpdate) {\n const extra = addMissingItems(activeItem, realCount, virtualSize, toUpdate, dimension);\n if (extra.length) {\n updateMissingAndRange(toUpdate.items, extra, toUpdate);\n }\n }\n\n // new collection if no items after replacement full replacement\n if (!toUpdate) {\n const items = getItems({\n firstItemStart: activeItem.start,\n firstItemIndex: activeItem.itemIndex,\n origSize: dimension.originItemSize,\n // 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\n maxSize: Math.min(virtualSize + (activeItem.end - activeItem.start), dimension.realSize),\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\nexport function updateMissingAndRange(\n items: RevoGrid.VirtualPositionItem[],\n missing: RevoGrid.VirtualPositionItem[],\n range: RevoGrid.Range\n) {\n items.splice(range.end + 1, 0, ...missing);\n // update range if start larger after recombination\n if (range.start >= range.end && !(range.start === range.end && range.start === 0)) {\n range.start += missing.length;\n }\n range.end += missing.length;\n}\n\n/**\n * If partial replacement\n * this function adds items if viewport has some space left\n */\nexport function addMissingItems<T extends ItemsToUpdate>(\n firstItem: RevoGrid.PositionItem,\n realCount: number,\n virtualSize: number,\n existingCollection: T,\n dimension: Pick<RevoGrid.DimensionSettingsState, 'sizes' | 'originItemSize'>,\n): RevoGrid.VirtualPositionItem[] {\n const lastItem: RevoGrid.VirtualPositionItem = getLastItem(existingCollection);\n const items = getItems({\n sizes: dimension.sizes,\n firstItemStart: lastItem.end,\n firstItemIndex: lastItem.itemIndex + 1,\n origSize: dimension.originItemSize,\n maxSize: virtualSize - (lastItem.end - firstItem.start),\n maxCount: realCount,\n });\n return items;\n}\n\n/**\n * Get wiewport items parameters\n * caching position and calculating items count in viewport\n */\nexport function getItems(\n opt: {\n firstItemIndex: number;\n firstItemStart: number;\n origSize: number;\n maxSize: number; // virtual size\n maxCount: number; // real item count, where the last item\n sizes?: RevoGrid.ViewSettingSizeProp;\n },\n currentSize = 0,\n) {\n const items: RevoGrid.VirtualPositionItem[] = [];\n\n let index = opt.firstItemIndex;\n let size = currentSize;\n\n // max size or max count\n while (size <= opt.maxSize && index < opt.maxCount) {\n const newSize = getItemSize(index, opt.sizes, opt.origSize);\n items.push({\n start: opt.firstItemStart + size,\n end: opt.firstItemStart + size + newSize,\n itemIndex: index,\n size: newSize,\n });\n size += newSize;\n index++;\n }\n return items;\n}\n\n/**\n * Do batch items recombination\n * If items not overlapped with existing viewport returns null\n */\ntype RecombindDimensionData = Pick<RevoGrid.DimensionSettingsState, 'sizes' | 'realSize' | 'originItemSize'>;\ntype RecombineOffsetData = {\n positiveDirection: boolean;\n} & ItemsToUpdate & RecombindDimensionData;\nexport function recombineByOffset(\n offset: number,\n data: RecombineOffsetData\n): ItemsToUpdate | null {\n const newItems = [...data.items];\n const itemsCount = newItems.length;\n let newRange = {\n start: data.start,\n end: data.end,\n };\n\n // if offset out of revo-viewport, makes sense whole redraw\n if (offset > itemsCount) {\n return null;\n }\n\n // is direction of scroll positive\n if (data.positiveDirection) {\n // push item to the end\n let lastItem: RevoGrid.VirtualPositionItem = getLastItem(data);\n\n let i: number = newRange.start;\n const length = i + offset;\n for (; i < length; i++) {\n const newIndex: number = lastItem.itemIndex + 1;\n const size: number = getItemSize(newIndex, data.sizes, data.originItemSize);\n\n // if item overlapped limit break a loop\n if (lastItem.end + size > data.realSize) {\n break;\n }\n\n // new item index to recombine\n let newEnd = i % itemsCount;\n\n // item should always present, we do not create new item, we recombine them\n if (!newItems[newEnd]) {\n throw new Error('incorrect index');\n }\n\n // do recombination\n newItems[newEnd] = lastItem = {\n start: lastItem.end,\n end: lastItem.end + size,\n itemIndex: newIndex,\n size: size,\n };\n // update range\n newRange.start++;\n newRange.end = newEnd;\n }\n\n // direction is negative\n } else {\n // push item to the start\n let firstItem: RevoGrid.VirtualPositionItem = getFirstItem(data);\n\n const end = newRange.end;\n for (let i = 0; i < offset; i++) {\n const newIndex: number = firstItem.itemIndex - 1;\n const size: number = getItemSize(newIndex, data.sizes, data.originItemSize);\n\n // new item index to recombine\n let newStart = end - i;\n newStart = (newStart < 0 ? itemsCount + newStart : newStart) % itemsCount;\n\n // item should always present, we do not create new item, we recombine them\n if (!newItems[newStart]) {\n throw new Error('incorrect index');\n }\n\n // do recombination\n newItems[newStart] = firstItem = {\n start: firstItem.start - size,\n end: firstItem.start,\n itemIndex: newIndex,\n size: size,\n };\n // update range\n newRange.start = newStart;\n newRange.end--;\n }\n }\n const range = {\n start: (newRange.start < 0 ? itemsCount + newRange.start : newRange.start) % itemsCount,\n end: (newRange.end < 0 ? itemsCount + newRange.end : newRange.end) % itemsCount,\n };\n return {\n items: newItems,\n ...range,\n };\n}\n\nfunction getItemSize(index: number, sizes?: RevoGrid.ViewSettingSizeProp, origSize: number = 0): number {\n if (sizes && sizes[index]) {\n return sizes[index];\n }\n return origSize;\n}\n\nexport function isActiveRange(pos: number, item: RevoGrid.PositionItem | undefined): boolean {\n return item && pos >= item.start && pos <= item.end;\n}\n\nexport function getFirstItem(s: ItemsToUpdate): RevoGrid.VirtualPositionItem | undefined {\n return s.items[s.start];\n}\n\nexport function getLastItem(s: ItemsToUpdate): RevoGrid.VirtualPositionItem {\n return s.items[s.end];\n}\n\n/**\n * Set items sizes from start index to end\n * @param vpItems \n * @param start \n * @param size \n * @param lastCoordinate \n * @returns \n */\nexport function setItemSizes(\n vpItems: RevoGrid.VirtualPositionItem[],\n initialIndex: number,\n size: number,\n lastCoordinate: number\n) {\n const items = [...vpItems];\n const count = items.length;\n\n let pos = lastCoordinate;\n let i = 0;\n let start = initialIndex;\n\n // viewport not inited\n if (!count) {\n return [];\n }\n // loop through array from initial item after recombination\n while (i < count) {\n const item = items[start];\n item.start = pos;\n item.size = size;\n item.end = item.start + size;\n pos = item.end;\n // loop by start index\n start++;\n i++;\n\n // if start index out of array, reset it\n if (start === count) {\n start = 0;\n }\n }\n return items;\n}\n","/**\n * Store is responsible for visible\n * Viewport information for each dimension\n * Redraw items during scrolling\n */\n\nimport { createStore } from '@stencil/store';\n\nimport {\n addMissingItems,\n DimensionDataViewport,\n getFirstItem,\n getLastItem,\n getUpdatedItemsByPosition,\n isActiveRange,\n setItemSizes,\n updateMissingAndRange,\n} from './viewport.helpers';\n\nimport { setStore } from '../../utils/store.utils';\nimport { Observable, RevoGrid } from '../../interfaces';\n\nfunction initialState(): RevoGrid.ViewportState {\n return {\n // virtual item information per rendered item\n items: [],\n // virtual dom item order to render\n start: 0,\n\n end: 0,\n\n // size of viewport in px\n virtualSize: 0,\n\n // total number of items\n realCount: 0,\n };\n}\n\nexport default class ViewportStore {\n readonly store: Observable<RevoGrid.ViewportState>;\n // last coordinate for store position restore\n private lastKnownScroll = 0;\n get lastCoordinate() {\n return this.lastKnownScroll;\n }\n private set lastCoordinate(value: number) {\n this.lastKnownScroll = value;\n }\n constructor(readonly type: RevoGrid.MultiDimensionType) {\n this.store = createStore(initialState());\n this.store.onChange('realCount', () => this.clearItems());\n // drop items on virtual size change, require a new item set\n this.store.onChange('virtualSize', () => this.setViewport({ items: [] }));\n }\n\n /**\n * Render viewport based on coordinate\n * It's the main method for draw\n */\n setViewPortCoordinate(position: number, dimension: DimensionDataViewport) {\n let virtualSize = this.store.get('virtualSize');\n // no visible data to calculate\n if (!virtualSize) {\n return;\n }\n\n const frameOffset = 1;\n const outsize = frameOffset * 2 * dimension.originItemSize;\n virtualSize += outsize;\n\n let maxCoordinate = virtualSize;\n if (dimension.realSize > virtualSize) {\n maxCoordinate = dimension.realSize - virtualSize;\n }\n this.lastCoordinate = position;\n let pos = position;\n pos -= frameOffset * dimension.originItemSize;\n pos = pos < 0 ? 0 : pos < maxCoordinate ? pos : maxCoordinate;\n\n const firstItem = getFirstItem(this.getItems());\n const lastItem = getLastItem(this.getItems());\n\n let toUpdate: Partial<RevoGrid.ViewportState> = {};\n // left position changed\n if (!isActiveRange(pos, firstItem)) {\n toUpdate = {\n ...toUpdate,\n ...getUpdatedItemsByPosition(pos, this.getItems(), this.store.get('realCount'), virtualSize, dimension),\n };\n setStore(this.store, { ...toUpdate });\n // right position changed\n } else if (firstItem && this.store.get('virtualSize') + pos > lastItem?.end) {\n // check is any item missing for full fill content\n const missing = addMissingItems(firstItem, this.store.get('realCount'), virtualSize + pos - firstItem.start, this.getItems(), dimension);\n\n if (missing.length) {\n const items = [...this.store.get('items')];\n const range = {\n start: this.store.get('start'),\n end: this.store.get('end'),\n };\n updateMissingAndRange(items, missing, range);\n toUpdate = {\n ...toUpdate,\n items: [...items],\n ...range,\n };\n setStore(this.store, { ...toUpdate });\n }\n }\n }\n\n /**\n * Update viewport sizes for existing items\n * This method is generating new item positions based on custom sizes and original sizes\n * @param sizes - custom sizes for each item\n * @param dropToOriginalSize - drop to original size if requested\n */\n setViewPortDimensionSizes(sizes: RevoGrid.ViewSettingSizeProp, dropToOriginalSize?: number) {\n let items = [...this.store.get('items')];\n const count = items.length;\n // viewport not inited\n if (!count) {\n return;\n }\n\n let changedCoordinate = 0;\n let i = 0;\n let start = this.store.get('start');\n\n // drop to original size if requested\n if (dropToOriginalSize) {\n items = setItemSizes(items, start, dropToOriginalSize, this.lastCoordinate);\n }\n\n // loop through array from initial item after recombination\n // if size change present, change position for all items after\n while (i < count) {\n const item = items[start];\n // change pos if size change present before\n if (changedCoordinate) {\n item.start += changedCoordinate;\n item.end += changedCoordinate;\n }\n // check if size change present\n const size: number | undefined = sizes[item.itemIndex];\n // size found\n if (size) {\n const changedSize = size - item.size;\n changedCoordinate += changedSize;\n item.size = size;\n item.end = item.start + size;\n // size lost\n }\n\n // loop by start index\n start++;\n i++;\n // if start index out of array, reset it\n if (start === count) {\n start = 0;\n }\n }\n\n setStore(this.store, { items: [...items] });\n }\n\n /**\n * Set sizes for existing items\n */\n setOriginalSizes(size: number) {\n const items = this.store.get('items');\n const count = items.length;\n // viewport not inited\n if (!count) {\n return;\n }\n\n setStore(this.store, {\n items: setItemSizes(items, this.store.get('start'), size, this.lastCoordinate),\n });\n }\n\n getItems(): Pick<RevoGrid.ViewportStateItems, 'items' | 'start' | 'end'> {\n return {\n items: this.store.get('items'),\n start: this.store.get('start'),\n end: this.store.get('end'),\n };\n }\n\n setViewport(data: Partial<RevoGrid.ViewportState>) {\n setStore(this.store, data);\n }\n\n clearItems() {\n this.store.set('items', []);\n }\n}\n","import { RevoGrid } from '../interfaces';\n\nconst LETTER_BLOCK_SIZE = 10;\nexport const calculateRowHeaderSize = (itemsLength: number, rowHeaderColumn?: RevoGrid.RowHeaders) => {\n return rowHeaderColumn?.size || (itemsLength.toString().length + 1) * LETTER_BLOCK_SIZE;\n};\n","import { VNode } from '@stencil/core';\nimport { RevoGrid } from '../../interfaces';\n\ntype HeaderRender = {\n (start: number): (h: RevoGrid.HyperFunc<VNode>, e: { rowIndex: number }) => number;\n};\nexport const RowHeaderRender: HeaderRender = s => (__, { rowIndex: i }) => s + i;\n","import { h, Host } from '@stencil/core';\nimport { Component, Prop, Event, EventEmitter } from '@stencil/core';\nimport { RevoGrid } from '../../interfaces';\nimport DataStore from '../../store/dataSource/data.store';\nimport ViewportStore from '../../store/viewPort/viewport.store';\nimport { ROW_HEADER_TYPE, UUID } from '../../utils/consts';\nimport { ElementScroll } from '../revoGrid/viewport.scrolling.service';\nimport { ViewportData } from '../revoGrid/viewport.interfaces';\nimport { RowHeaderRender } from './row-header-render';\nimport { calculateRowHeaderSize } from '../../utils/row-header-utils';\nimport { HEADER_SLOT } from '../revoGrid/viewport.helpers';\n\n/**\n * Row headers component\n * Visible on the left side of the table\n */\n\n@Component({ tag: 'revogr-row-headers' })\nexport class RevogrRowHeaders {\n @Prop() height: number;\n\n @Prop() dataPorts: ViewportData[];\n @Prop() headerProp: Record<string, any>;\n @Prop() uiid: string;\n @Prop() rowClass: string;\n\n @Prop() resize: boolean;\n @Prop() rowHeaderColumn: RevoGrid.RowHeaders;\n /** Additional data to pass to renderer */\n @Prop() additionalData: any;\n\n @Event({ bubbles: false }) scrollViewport: EventEmitter<RevoGrid.ViewPortScrollEvent>;\n @Event({ bubbles: false }) elementToScroll: EventEmitter<ElementScroll>;\n\n render() {\n const dataViews: HTMLElement[] = [];\n const viewport = new ViewportStore('colPinStart');\n\n /** render viewports rows */\n let totalLength = 1;\n for (let data of this.dataPorts) {\n const itemCount = data.dataStore.get('items').length;\n // initiate row data\n const dataStore = new DataStore<RevoGrid.DataType, RevoGrid.DimensionRows>(data.type);\n dataStore.updateData(data.dataStore.get('source'));\n // initiate column data\n const colData = new DataStore<RevoGrid.ColumnRegular, RevoGrid.DimensionCols>('colPinStart');\n const column = {\n cellTemplate: RowHeaderRender(totalLength),\n ...this.rowHeaderColumn,\n };\n colData.updateData([column]);\n\n const viewData = {\n ...data,\n rowClass: this.rowClass,\n dataStore: dataStore.store,\n colData: colData.store,\n viewportCol: viewport.store,\n readonly: true,\n range: false,\n };\n dataViews.push(<revogr-data {...viewData} />);\n totalLength += itemCount;\n }\n\n const colSize = calculateRowHeaderSize(totalLength, this.rowHeaderColumn);\n viewport.setViewport({\n realCount: 1,\n virtualSize: 0,\n items: [\n {\n size: colSize,\n start: 0,\n end: colSize,\n itemIndex: 0,\n },\n ],\n });\n\n const parent = `${this.uiid}-rowHeaders`;\n const viewportScroll = {\n [UUID]: parent,\n contentHeight: this.height,\n contentWidth: 0,\n style: { minWidth: `${colSize}px` },\n ref: (el: ElementScroll) => this.elementToScroll.emit(el),\n onScrollViewport: (e: CustomEvent) => this.scrollViewport.emit(e.detail),\n };\n const viewportHeader = {\n ...this.headerProp,\n colData: typeof this.rowHeaderColumn === 'object' ? [this.rowHeaderColumn] : [],\n viewportCol: viewport.store,\n canResize: false,\n type: ROW_HEADER_TYPE,\n parent,\n slot: HEADER_SLOT,\n };\n return (\n <Host class={ { [ROW_HEADER_TYPE]: true } } key={ROW_HEADER_TYPE}>\n <revogr-viewport-scroll {...viewportScroll}>\n <revogr-header {...viewportHeader} />\n {dataViews}\n </revogr-viewport-scroll>\n </Host>\n );\n }\n}\n"],"version":3}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"revogr-temp-range2.js","mappings":";;;;;;;;AAAA,MAAM,uBAAuB,GAAG,g+UAAg+U;;
|
|
1
|
+
{"file":"revogr-temp-range2.js","mappings":";;;;;;;;AAAA,MAAM,uBAAuB,GAAG,g+UAAg+U;;MCan/U,WAAW;;;;IAsBL,aAAQ,GAAGA,eAAQ,CAAC,CAAC,CAAc,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;;;;;EAExE,QAAQ,CAAC,CAAc;IAC7B,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,cAAc,CAAC;MAChB,KAAK,EAAE,SAAS;MAChB,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;GACJ;EAED,kBAAkB;IAChB,IAAI,IAAI,CAAC,EAAE,EAAE;MACX,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACxB;GACF;EAED,MAAM;IACJ,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACtD,IAAI,CAAC,IAAI,EAAE;MACT,OAAO;KACR;IACD,IAAI,UAAU,GAAG,QAAQ,CAAC;IAC1B,IAAI,UAAU,GAAG,OAAO,CAAC;IACzB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC9B,IAAI,CAAC,KAAK,EAAE;MACV,OAAO;KACR;IACD,IAAI,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE;MACpB,UAAU,GAAG,KAAK,CAAC;KACpB;IACD,IAAI,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE;MACpB,UAAU,GAAG,MAAM,CAAC;KACrB;IACD,MAAM,cAAc,GAAG,GAAG,UAAU,IAAI,UAAU,EAAE,CAAC;IACrD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACjF,QACE,EAAC,IAAI,IACH,KAAK,EAAE;QACL,CAAC,sBAAsB,GAAG,IAAI;QAC9B,CAAC,IAAI,IAAI,EAAE,GAAG,IAAI;OACnB,EACD,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,KAAK,IAEb,WAAK,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,CAAc,MAAM,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAI,CACjE,EACP;GACH;EAEO,QAAQ;IACd,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,KAAK,EAAE;MACT,OAAO,KAAK,CAAC;KACd;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK,EAAE;MACV,OAAO,IAAI,CAAC;KACb;IACD,uCACK,KAAK,KACR,EAAE,EAAE,KAAK,CAAC,CAAC,EACX,EAAE,EAAE,KAAK,CAAC,CAAC,IACX;GACH;;;;;;;;;;;;;;;;;;;;;;;","names":["throttle"],"sources":["./src/components/selectionTempRange/revogr-temp-range-style.scss?tag=revogr-temp-range","./src/components/selectionTempRange/revogr-temp-range.tsx"],"sourcesContent":[".temp-bg-range {\n display: block !important;\n position: absolute;\n pointer-events: none;\n z-index: 9;\n border: 1px solid rgb(255, 94, 0);\n box-sizing: border-box;\n\n &.Selection {\n border: 1px dashed gray;\n }\n\n > div {\n width: 1px;\n height: 1px;\n position: absolute;\n\n &.top {\n top: -1px;\n }\n\n &.bottom {\n bottom: -1px;\n }\n\n &.left {\n left: -1px;\n }\n\n &.right {\n right: -1px;\n }\n }\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\nimport { throttle } from 'lodash';\nimport { Observable, RevoGrid, Selection } from '../../interfaces';\nimport { TMP_SELECTION_BG_CLASS } from '../../utils/consts';\nimport { getElStyle } from '../overlay/selection.utils';\n\n/**\n * Temporary range selection\n */\n@Component({\n tag: 'revogr-temp-range',\n styleUrl: 'revogr-temp-range-style.scss',\n})\nexport class RevogrFocus {\n el: HTMLElement;\n\n // --------------------------------------------------------------------------\n //\n // Dynamic stores\n //\n // --------------------------------------------------------------------------\n\n /**\n * Selection store, shows current selection and focus\n */\n @Prop() selectionStore: Observable<Selection.SelectionStoreState>;\n\n /**\n * Dimension row store\n */\n @Prop() dimensionRow: Observable<RevoGrid.DimensionSettingsState>;\n /**\n * Dimension column store\n */\n @Prop() dimensionCol: Observable<RevoGrid.DimensionSettingsState>;\n private readonly onChange = throttle((e: HTMLElement) => this.doChange(e), 300);\n\n private doChange(e: HTMLElement): void {\n e?.scrollIntoView({\n block: 'nearest',\n inline: 'nearest',\n });\n }\n\n componentDidRender(): void {\n if (this.el) {\n this.onChange(this.el);\n }\n }\n\n render() {\n const data = this.selectionStore.get('tempRange');\n const type = this.selectionStore.get('tempRangeType');\n if (!data) {\n return;\n }\n let directionY = 'bottom';\n let derectionX = 'right';\n const range = this.getRange();\n if (!range) {\n return;\n }\n if (data.y < range.y) {\n directionY = 'top';\n }\n if (data.x < range.x) {\n derectionX = 'left';\n }\n const directionClass = `${derectionX} ${directionY}`;\n const style = getElStyle(data, this.dimensionRow.state, this.dimensionCol.state);\n return (\n <Host\n class={{\n [TMP_SELECTION_BG_CLASS]: true,\n [type || '']: true,\n }}\n style={style}\n hidden={false}\n >\n <div class={directionClass} ref={(e: HTMLElement) => (this.el = e)} />\n </Host>\n );\n }\n\n private getRange(): Selection.RangeArea | null {\n const range = this.selectionStore.get('range');\n if (range) {\n return range;\n }\n const focus = this.selectionStore.get('focus');\n if (!focus) {\n return null;\n }\n return {\n ...focus,\n x1: focus.x,\n y1: focus.y,\n };\n }\n}\n"],"version":3}
|