@omegagrid/grid 0.10.87 → 0.10.89

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.
@@ -14,6 +14,7 @@ export declare abstract class BaseEditor extends LitElement {
14
14
  get isOpen(): boolean;
15
15
  protected _valid: boolean;
16
16
  get isValid(): boolean;
17
+ protected get formulasEnabled(): boolean;
17
18
  validate(): boolean;
18
19
  constructor();
19
20
  abstract getValue(): unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"baseEditor.d.ts","sourceRoot":"","sources":["../../src/editors/baseEditor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAgC,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAO,MAAM,KAAK,CAAC;AAEtC,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,qBAAa,WAAY,SAAQ,KAAK;CAAI;AAE1C,8BAAsB,UAAW,SAAQ,UAAU;IAElD,MAAM,CAAC,UAAU,0BAef;IAEF,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC;IACrB,SAAS,CAAC,MAAM,UAAS;IACzB,SAAS,CAAC,UAAU,EAAE,oBAAoB,CAAC;IAC3C,SAAS,CAAC,eAAe,EAAE,SAAS,CAAC;IACrC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC;IAEhC,SAAS,CAAC,KAAK,UAAS;IACxB,IAAI,MAAM,YAAwB;IAElC,SAAS,CAAC,MAAM,UAAQ;IACxB,IAAI,OAAO,YAAyB;IAEpC,QAAQ;;IAaR,QAAQ,CAAC,QAAQ,IAAK,OAAO;IAE7B,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAI,IAAI;IAExC,eAAe,IAAK,MAAM;IAI1B,IAAI;IAaJ,iBAAiB;IAKjB,aAAa;IAOb,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,GAAE,OAAc,EAAE,cAAc,UAAO;IAiBpE,MAAM;IAWN,KAAK;IAeL,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAI,IAAI;IAKhC,UAAU,IAAK,IAAI;CAInB"}
1
+ {"version":3,"file":"baseEditor.d.ts","sourceRoot":"","sources":["../../src/editors/baseEditor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAgC,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAO,MAAM,KAAK,CAAC;AAEtC,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,qBAAa,WAAY,SAAQ,KAAK;CAAI;AAE1C,8BAAsB,UAAW,SAAQ,UAAU;IAElD,MAAM,CAAC,UAAU,0BAef;IAEF,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC;IACrB,SAAS,CAAC,MAAM,UAAS;IACzB,SAAS,CAAC,UAAU,EAAE,oBAAoB,CAAC;IAC3C,SAAS,CAAC,eAAe,EAAE,SAAS,CAAC;IACrC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC;IAEhC,SAAS,CAAC,KAAK,UAAS;IACxB,IAAI,MAAM,YAAwB;IAElC,SAAS,CAAC,MAAM,UAAQ;IACxB,IAAI,OAAO,YAAyB;IAEpC,SAAS,KAAK,eAAe,YAAgE;IAE7F,QAAQ;;IAaR,QAAQ,CAAC,QAAQ,IAAK,OAAO;IAE7B,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAI,IAAI;IAExC,eAAe,IAAK,MAAM;IAI1B,IAAI;IAaJ,iBAAiB;IAKjB,aAAa;IAOb,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,GAAE,OAAc,EAAE,cAAc,UAAO;IAiBpE,MAAM;IAWN,KAAK;IAeL,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAI,IAAI;IAKhC,UAAU,IAAK,IAAI;CAInB"}
@@ -6,6 +6,7 @@ export class EditorEvent extends Event {
6
6
  export class BaseEditor extends LitElement {
7
7
  get isOpen() { return this._open; }
8
8
  get isValid() { return this._valid; }
9
+ get formulasEnabled() { return this.grid ? this.grid.model.formulasEnabled : true; }
9
10
  validate() {
10
11
  this._valid = true;
11
12
  if (this.activeCell)
@@ -1 +1 @@
1
- {"version":3,"file":"baseEditor.js","sourceRoot":"","sources":["../../src/editors/baseEditor.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAGtC,MAAM,OAAO,WAAY,SAAQ,KAAK;CAAI;AAE1C,MAAM,OAAgB,UAAW,SAAQ,UAAU;IA0BlD,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,KAAK,CAAA,CAAC,CAAC;IAGlC,IAAI,OAAO,KAAK,OAAO,IAAI,CAAC,MAAM,CAAA,CAAC,CAAC;IAEpC,QAAQ;QACP,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxF,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAED;QACC,KAAK,EAAE,CAAC;QAnBC,WAAM,GAAG,KAAK,CAAC;QAKf,UAAK,GAAG,KAAK,CAAC;QAGd,WAAM,GAAG,IAAI,CAAC;QAYvB,IAAI,CAAC,IAAI,EAAE,CAAC;IACb,CAAC;IAOD,eAAe;QACd,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI;QACH,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE;YACpC,IAAI,CAAC,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC;gBACtB,IAAI,CAAC,KAAK,EAAE,CAAC;YACd,CAAC;iBAAM,IAAI,CAAC,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC9B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;gBACnB,IAAI,CAAC,KAAK,EAAE,CAAC;YACd,CAAC;iBAAM,CAAC;gBACP,CAAC,CAAC,eAAe,EAAE,CAAC;YACrB,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,iBAAiB;QAChB,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,EAAE,CAAC;IACtB,CAAC;IAED,aAAa;QACZ,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAChE,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,EAAC,CAAC,EAAE,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC;QACzF,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,YAAY,EAAC,CAAC,CAAC;IACtF,CAAC;IAED,IAAI,CAAC,IAAU,EAAE,eAAwB,IAAI,EAAE,cAAc,GAAG,IAAI;QACnE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;QAC5C,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;QAChF,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC1B,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,cAAc;YAAE,IAAI,CAAC,aAAa,EAAE,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACzB,IAAI,YAAY,KAAK,IAAI;YAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACvD,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM;QACL,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACxD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAC3B,IAAI,CAAC,eAAe,EACpB,EAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAmB,EAAE,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,EAAC,CACjE,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK;QACJ,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;YACnC,uEAAuE;YACvE,iEAAiE;YACjE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAC,aAAa,EAAE,IAAI,EAAC,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,QAAQ,CAAC,IAAe;QACvB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,UAAU;QACT,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC;IACnD,CAAC;;AA7HM,qBAAU,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;EAetB,AAfgB,CAef","sourcesContent":["import { CellModel, CellValueType, validateValue } from \"@omegagrid/grid-core\";\nimport { LitElement, css } from 'lit';\nimport { dom } from \"@omegagrid/core\";\nimport { Grid } from \"../ui/grid\";\n\nexport class EditorEvent extends Event { }\n\nexport abstract class BaseEditor extends LitElement {\n\n\tstatic baseStyles = css`\n\t\t* { box-sizing: border-box }\n\n\t\t:host {\n\t\t\tdisplay: block;\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tbackground: var(--og-cell-background);\n\t\t\tz-index: 200;\n\t\t}\n\n\t\t:host(.invalid) input {\n\t\t\tcolor: #ff0000;\n\t\t\tborder: 1px solid #ff0000;\n\t\t}\n\t`;\n\n\tprotected grid: Grid;\n\tprotected cancel = false;\n\tprotected activeCell: HTMLTableCellElement;\n\tprotected activeCellModel: CellModel;\n\tprotected initialValue: unknown;\n\t\n\tprotected _open = false;\n\tget isOpen() { return this._open }\n\n\tprotected _valid = true;\n\tget isValid() { return this._valid }\n\n\tvalidate() {\n\t\tthis._valid = true;\n\t\tif (this.activeCell) this._valid = validateValue(this.activeCellModel, this.getValue());\n\t\tthis.classList.toggle('invalid', !this._valid);\n\t\treturn this._valid;\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.init();\n\t}\n\n\t\n\tabstract getValue() : unknown;\n\n\tabstract setValue(value: unknown) : void;\n\t\n\tgetDisplayValue() : string {\n\t\treturn null;\n\t}\n\n\tinit() {\n\t\tthis.addEventListener('keydown', e => {\n\t\t\tif (e.key == 'Enter') {\n\t\t\t\tthis.close();\n\t\t\t} else if (e.key == 'Escape') {\n\t\t\t\tthis.cancel = true;\n\t\t\t\tthis.close();\n\t\t\t} else {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t});\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback();\n\t\tthis.performUpdate();\n\t}\n\n\talignWithCell() {\n\t\tif (!this.activeCell) return;\n\t\tconst offset = dom.getElementOffset(this.activeCell, this.grid);\n\t\tdom.setPosition(this, {t: offset.top * this.grid.zoom, l: offset.left * this.grid.zoom});\n\t\tdom.setSize(this, {w: this.activeCell.offsetWidth, h: this.activeCell.offsetHeight});\n\t}\n\n\topen(grid: Grid, initialValue: unknown = null, updatePosition = true) {\n\t\tthis._valid = true;\n\t\tthis.initialValue = initialValue;\n\t\tthis._open = true;\n\t\tthis.grid = grid;\n\t\tconst cellModel = grid.selecting.activeCell;\n\t\tthis.activeCellModel = cellModel;\n\t\tthis.activeCell = this.grid.table.getCellByModelIndex(cellModel.c, cellModel.r);\n\t\tthis.grid.selector.hide();\n\t\tdom.showElement(this);\n\t\tif (updatePosition) this.alignWithCell();\n\t\tthis.activate(cellModel);\n\t\tif (initialValue !== null) this.setValue(initialValue);\n\t\tdom.zoomElement(this, this.grid.zoom);\n\t\treturn this;\n\t}\n\n\tcommit() {\n\t\tif (this._open && !this.cancel && this.activeCellModel) {\n\t\t\tthis.grid.editing.updateCell(\n\t\t\t\tthis.activeCellModel, \n\t\t\t\t{v: this.getValue() as CellValueType, dv: this.getDisplayValue()}\n\t\t\t);\n\t\t\tthis.grid.rendering.updateCell(this.activeCellModel, true);\n\t\t}\n\t\tthis.cancel = false;\n\t}\n\n\tclose() {\n\t\tif (this._open) {\n\t\t\tthis.deactivate();\n\t\t\tdom.hideElement(this);\n\t\t\tthis.grid.table.renderBodyCell(this.activeCellModel);\n\t\t\tthis.grid.selecting.showSelector();\n\t\t\t// preventScroll: focus would otherwise natively scroll overflow:hidden\n\t\t\t// ancestors (e.g. og-container) that manage scrolling themselves\n\t\t\tthis.grid.focus({preventScroll: true});\n\t\t\tthis._open = false;\n\t\t\tthis.grid.editing.endEdit();\n\t\t}\n\t\tthis.cancel = false;\n\t}\n\n\tactivate(cell: CellModel) : void {\n\t\tthis.activeCellModel = cell;\n\t\tthis.dispatchEvent(new EditorEvent('activate'));\n\t}\n\t\n\tdeactivate() : void {\n\t\tthis.dispatchEvent(new EditorEvent('deactivate'));\n\t}\n\n}"]}
1
+ {"version":3,"file":"baseEditor.js","sourceRoot":"","sources":["../../src/editors/baseEditor.ts"],"names":[],"mappings":"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","sourcesContent":["import { CellModel, CellValueType, validateValue } from \"@omegagrid/grid-core\";\nimport { LitElement, css } from 'lit';\nimport { dom } from \"@omegagrid/core\";\nimport { Grid } from \"../ui/grid\";\n\nexport class EditorEvent extends Event { }\n\nexport abstract class BaseEditor extends LitElement {\n\n\tstatic baseStyles = css`\n\t\t* { box-sizing: border-box }\n\n\t\t:host {\n\t\t\tdisplay: block;\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tbackground: var(--og-cell-background);\n\t\t\tz-index: 200;\n\t\t}\n\n\t\t:host(.invalid) input {\n\t\t\tcolor: #ff0000;\n\t\t\tborder: 1px solid #ff0000;\n\t\t}\n\t`;\n\n\tprotected grid: Grid;\n\tprotected cancel = false;\n\tprotected activeCell: HTMLTableCellElement;\n\tprotected activeCellModel: CellModel;\n\tprotected initialValue: unknown;\n\t\n\tprotected _open = false;\n\tget isOpen() { return this._open }\n\n\tprotected _valid = true;\n\tget isValid() { return this._valid }\n\n\tprotected get formulasEnabled() { return this.grid ? this.grid.model.formulasEnabled : true }\n\n\tvalidate() {\n\t\tthis._valid = true;\n\t\tif (this.activeCell) this._valid = validateValue(this.activeCellModel, this.getValue());\n\t\tthis.classList.toggle('invalid', !this._valid);\n\t\treturn this._valid;\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.init();\n\t}\n\n\t\n\tabstract getValue() : unknown;\n\n\tabstract setValue(value: unknown) : void;\n\t\n\tgetDisplayValue() : string {\n\t\treturn null;\n\t}\n\n\tinit() {\n\t\tthis.addEventListener('keydown', e => {\n\t\t\tif (e.key == 'Enter') {\n\t\t\t\tthis.close();\n\t\t\t} else if (e.key == 'Escape') {\n\t\t\t\tthis.cancel = true;\n\t\t\t\tthis.close();\n\t\t\t} else {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t});\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback();\n\t\tthis.performUpdate();\n\t}\n\n\talignWithCell() {\n\t\tif (!this.activeCell) return;\n\t\tconst offset = dom.getElementOffset(this.activeCell, this.grid);\n\t\tdom.setPosition(this, {t: offset.top * this.grid.zoom, l: offset.left * this.grid.zoom});\n\t\tdom.setSize(this, {w: this.activeCell.offsetWidth, h: this.activeCell.offsetHeight});\n\t}\n\n\topen(grid: Grid, initialValue: unknown = null, updatePosition = true) {\n\t\tthis._valid = true;\n\t\tthis.initialValue = initialValue;\n\t\tthis._open = true;\n\t\tthis.grid = grid;\n\t\tconst cellModel = grid.selecting.activeCell;\n\t\tthis.activeCellModel = cellModel;\n\t\tthis.activeCell = this.grid.table.getCellByModelIndex(cellModel.c, cellModel.r);\n\t\tthis.grid.selector.hide();\n\t\tdom.showElement(this);\n\t\tif (updatePosition) this.alignWithCell();\n\t\tthis.activate(cellModel);\n\t\tif (initialValue !== null) this.setValue(initialValue);\n\t\tdom.zoomElement(this, this.grid.zoom);\n\t\treturn this;\n\t}\n\n\tcommit() {\n\t\tif (this._open && !this.cancel && this.activeCellModel) {\n\t\t\tthis.grid.editing.updateCell(\n\t\t\t\tthis.activeCellModel, \n\t\t\t\t{v: this.getValue() as CellValueType, dv: this.getDisplayValue()}\n\t\t\t);\n\t\t\tthis.grid.rendering.updateCell(this.activeCellModel, true);\n\t\t}\n\t\tthis.cancel = false;\n\t}\n\n\tclose() {\n\t\tif (this._open) {\n\t\t\tthis.deactivate();\n\t\t\tdom.hideElement(this);\n\t\t\tthis.grid.table.renderBodyCell(this.activeCellModel);\n\t\t\tthis.grid.selecting.showSelector();\n\t\t\t// preventScroll: focus would otherwise natively scroll overflow:hidden\n\t\t\t// ancestors (e.g. og-container) that manage scrolling themselves\n\t\t\tthis.grid.focus({preventScroll: true});\n\t\t\tthis._open = false;\n\t\t\tthis.grid.editing.endEdit();\n\t\t}\n\t\tthis.cancel = false;\n\t}\n\n\tactivate(cell: CellModel) : void {\n\t\tthis.activeCellModel = cell;\n\t\tthis.dispatchEvent(new EditorEvent('activate'));\n\t}\n\t\n\tdeactivate() : void {\n\t\tthis.dispatchEvent(new EditorEvent('deactivate'));\n\t}\n\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"numberEditor.d.ts","sourceRoot":"","sources":["../../src/editors/numberEditor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI1C,qBACa,YAAa,SAAQ,UAAU;IAE3C,OAAO,CAAC,cAAc;IAKtB,MAAM,CAAC,CAAC,EAAE,aAAa;IAQvB,QAAQ,CAAC,KAAK,EAAE,MAAM;IAItB,YAAY;IAKZ,QAAQ;CAIR"}
1
+ {"version":3,"file":"numberEditor.d.ts","sourceRoot":"","sources":["../../src/editors/numberEditor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI1C,qBACa,YAAa,SAAQ,UAAU;IAE3C,OAAO,CAAC,cAAc;IAMtB,MAAM,CAAC,CAAC,EAAE,aAAa;IAQvB,QAAQ,CAAC,KAAK,EAAE,MAAM;IAItB,YAAY;IAKZ,QAAQ;CAKR"}
@@ -6,11 +6,13 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { TextEditor } from "./textEditor";
8
8
  import { customElement } from 'lit/decorators.js';
9
- import { isFormula } from "@omegagrid/grid-core";
9
+ import { hasQuotePrefix, isFormula } from "@omegagrid/grid-core";
10
10
  let NumberEditor = class NumberEditor extends TextEditor {
11
11
  validateNumber(value) {
12
+ if (hasQuotePrefix(value))
13
+ return true; // quote prefixed value is a plain text
12
14
  value = value.replace(',', '.');
13
- return isFormula(value) || !isNaN(Number(value)) || value == '-';
15
+ return (this.formulasEnabled && isFormula(value)) || !isNaN(Number(value)) || value == '-';
14
16
  }
15
17
  _onKey(e) {
16
18
  if (e.key.length === 1) {
@@ -27,7 +29,9 @@ let NumberEditor = class NumberEditor extends TextEditor {
27
29
  this.input.addEventListener('keypress', e => this._onKey(e));
28
30
  }
29
31
  getValue() {
30
- return this.input.value === '' ? null : this.input.value.replace(',', '.');
32
+ if (this.input.value === '')
33
+ return null;
34
+ return hasQuotePrefix(this.input.value) ? this.input.value : this.input.value.replace(',', '.');
31
35
  }
32
36
  };
33
37
  NumberEditor = __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"numberEditor.js","sourceRoot":"","sources":["../../src/editors/numberEditor.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAG1C,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,UAAU;IAEnC,cAAc,CAAC,KAAa;QACnC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAChC,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,GAAG,CAAC;IAClE,CAAC;IAED,MAAM,CAAC,CAAgB;QACtB,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpD,CAAC,CAAC,cAAc,EAAE,CAAC;YACpB,CAAC;QACF,CAAC;IACF,CAAC;IAED,QAAQ,CAAC,KAAa;QACrB,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,CAAC;IAED,YAAY;QACX,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,QAAQ;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC5E,CAAC;CAED,CAAA;AA5BY,YAAY;IADxB,aAAa,CAAC,sBAAsB,CAAC;GACzB,YAAY,CA4BxB","sourcesContent":["import { TextEditor } from \"./textEditor\";\nimport { customElement } from 'lit/decorators.js';\nimport { isFormula } from \"@omegagrid/grid-core\";\n\n@customElement('og-grid-numbereditor')\nexport class NumberEditor extends TextEditor {\n\n\tprivate validateNumber(value: string) {\n\t\tvalue = value.replace(',', '.');\n\t\treturn isFormula(value) || !isNaN(Number(value)) || value == '-';\n\t}\n\n\t_onKey(e: KeyboardEvent) {\n\t\tif (e.key.length === 1) {\n\t\t\tif (!this.validateNumber(this.input.value + e.key)) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t}\n\t}\n\n\tsetValue(value: string) {\n\t\tthis.input.value = this.validateNumber(value) ? value : '';\n\t}\n\n\tfirstUpdated() {\n\t\tthis.input.addEventListener('keydown', e => this._onKey(e));\n\t\tthis.input.addEventListener('keypress', e => this._onKey(e));\n\t}\n\n\tgetValue() {\n\t\treturn this.input.value === '' ? null : this.input.value.replace(',', '.');\n\t}\n\n}"]}
1
+ {"version":3,"file":"numberEditor.js","sourceRoot":"","sources":["../../src/editors/numberEditor.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAG1D,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,UAAU;IAEnC,cAAc,CAAC,KAAa;QACnC,IAAI,cAAc,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,CAAC,uCAAuC;QAC/E,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC,eAAe,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,GAAG,CAAC;IAC5F,CAAC;IAED,MAAM,CAAC,CAAgB;QACtB,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpD,CAAC,CAAC,cAAc,EAAE,CAAC;YACpB,CAAC;QACF,CAAC;IACF,CAAC;IAED,QAAQ,CAAC,KAAa;QACrB,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,CAAC;IAED,YAAY;QACX,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,QAAQ;QACP,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC;QACzC,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACjG,CAAC;CAED,CAAA;AA9BY,YAAY;IADxB,aAAa,CAAC,sBAAsB,CAAC;GACzB,YAAY,CA8BxB","sourcesContent":["import { TextEditor } from \"./textEditor\";\nimport { customElement } from 'lit/decorators.js';\nimport { hasQuotePrefix, isFormula } from \"@omegagrid/grid-core\";\n\n@customElement('og-grid-numbereditor')\nexport class NumberEditor extends TextEditor {\n\n\tprivate validateNumber(value: string) {\n\t\tif (hasQuotePrefix(value)) return true; // quote prefixed value is a plain text\n\t\tvalue = value.replace(',', '.');\n\t\treturn (this.formulasEnabled && isFormula(value)) || !isNaN(Number(value)) || value == '-';\n\t}\n\n\t_onKey(e: KeyboardEvent) {\n\t\tif (e.key.length === 1) {\n\t\t\tif (!this.validateNumber(this.input.value + e.key)) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t}\n\t}\n\n\tsetValue(value: string) {\n\t\tthis.input.value = this.validateNumber(value) ? value : '';\n\t}\n\n\tfirstUpdated() {\n\t\tthis.input.addEventListener('keydown', e => this._onKey(e));\n\t\tthis.input.addEventListener('keypress', e => this._onKey(e));\n\t}\n\n\tgetValue() {\n\t\tif (this.input.value === '') return null;\n\t\treturn hasQuotePrefix(this.input.value) ? this.input.value : this.input.value.replace(',', '.');\n\t}\n\n}"]}
@@ -23,7 +23,7 @@ let TextEditor = TextEditor_1 = class TextEditor extends BaseEditor {
23
23
  this.close();
24
24
  }
25
25
  _onKeyUp() {
26
- if (isFormula(this.input.value)) {
26
+ if (this.formulasEnabled && isFormula(this.input.value)) {
27
27
  // switch to formula editor
28
28
  this.cancel = true;
29
29
  this.close();
@@ -1 +1 @@
1
- {"version":3,"file":"textEditor.js","sourceRoot":"","sources":["../../src/editors/textEditor.ts"],"names":[],"mappings":";;;;;;;AAAA,OAAO,EAAa,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAO,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGjC,IAAM,UAAU,kBAAhB,MAAM,UAAW,SAAQ,UAAU;IAAnC;;QAiBN,aAAQ,GAA0B,SAAS,EAAE,CAAC;IA0C/C,CAAC;IAzCA,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAA,CAAC,CAAC;IAElC,OAAO;QACd,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,CAAC,KAAK,EAAE,CAAC;IACd,CAAC;IAEO,QAAQ;QACf,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,2BAA2B;YAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,QAAQ,EAAE,CAAC;QACjB,CAAC;IACF,CAAC;IAED,MAAM;QACL,OAAO,IAAI,CAAA;YACD,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;;aAEjB,IAAI,CAAC,OAAO;cACX,IAAI,CAAC,QAAQ;GACxB,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,IAAe;QACvB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED,QAAQ;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IACzB,CAAC;IAED,QAAQ,CAAC,KAAc;QACtB,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAW,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxG,CAAC;;AAvDM,iBAAM,GAAG,CAAC,YAAU,CAAC,UAAU,EAAE,GAAG,CAAA;;;8CAGE,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC;;;;;;;;;;EAUrF,CAAC,AAbW,CAaV;AAfS,UAAU;IADtB,aAAa,CAAC,oBAAoB,CAAC;GACvB,UAAU,CA2DtB","sourcesContent":["import { CellModel, isFormula } from \"@omegagrid/grid-core\";\nimport { BaseEditor } from \"./baseEditor\";\nimport { customElement } from 'lit/decorators.js';\nimport { css, html, unsafeCSS } from 'lit';\nimport { createRef, Ref, ref } from 'lit/directives/ref.js';\nimport constants from \"../constants\";\nimport { utils } from \"@omegagrid/core\";\n\n@customElement('og-grid-texteditor')\nexport class TextEditor extends BaseEditor {\n\n\tstatic styles = [TextEditor.baseStyles, css`\n\t\tinput {\n\t\t\toutline: none;\n\t\t\tborder: 1px solid var(--og-accent-color, ${unsafeCSS(constants.DEFAULT_ACCENT_COLOR)});\n\t\t\tbackground: var(--og-cell-background);\n\t\t\tcolor: var(--og-text-color);\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tpadding: 0;\n\t\t\tfont-family: var(--og-font-family);\n\t\t\tfont-size: var(--og-font-size);\n\t\t\tbox-sizing: border-box;\n\t\t}\n\t`];\n\n\tinputRef: Ref<HTMLInputElement> = createRef();\n\tget input() { return this.inputRef.value }\n\n\tprivate _onBlur() {\n\t\tthis.commit();\n\t\tthis.close();\n\t}\n\n\tprivate _onKeyUp() {\n\t\tif (isFormula(this.input.value)) {\n\t\t\t// switch to formula editor\n\t\t\tthis.cancel = true;\n\t\t\tthis.close();\n\t\t\tthis.grid.editing.startEdit(this.input.value);\n\t\t} else {\n\t\t\tthis.validate();\n\t\t}\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<input ${ref(this.inputRef)}\n\t\t\t\ttype=\"text\"\n\t\t\t\t@blur=\"${this._onBlur}\"\n\t\t\t\t@keyup=\"${this._onKeyUp}\">\n\t\t`;\n\t}\n\n\tactivate(cell: CellModel) {\n\t\tsuper.activate(cell);\n\t\tthis.input.value = cell.value == null ? '' : cell.value.toString();\n\t\tthis.input.focus();\n\t}\n\n\tgetValue(): unknown {\n\t\treturn this.input.value;\n\t}\n\n\tsetValue(value: unknown) {\n\t\tthis.input.value = utils.isString(value) ? (value) as string : (value == null ? '' : value.toString());\n\t}\n\n}"]}
1
+ {"version":3,"file":"textEditor.js","sourceRoot":"","sources":["../../src/editors/textEditor.ts"],"names":[],"mappings":";;;;;;;AAAA,OAAO,EAAa,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAO,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGjC,IAAM,UAAU,kBAAhB,MAAM,UAAW,SAAQ,UAAU;IAAnC;;QAiBN,aAAQ,GAA0B,SAAS,EAAE,CAAC;IA0C/C,CAAC;IAzCA,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAA,CAAC,CAAC;IAElC,OAAO;QACd,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,CAAC,KAAK,EAAE,CAAC;IACd,CAAC;IAEO,QAAQ;QACf,IAAI,IAAI,CAAC,eAAe,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACzD,2BAA2B;YAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,QAAQ,EAAE,CAAC;QACjB,CAAC;IACF,CAAC;IAED,MAAM;QACL,OAAO,IAAI,CAAA;YACD,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;;aAEjB,IAAI,CAAC,OAAO;cACX,IAAI,CAAC,QAAQ;GACxB,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,IAAe;QACvB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED,QAAQ;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IACzB,CAAC;IAED,QAAQ,CAAC,KAAc;QACtB,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAW,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxG,CAAC;;AAvDM,iBAAM,GAAG,CAAC,YAAU,CAAC,UAAU,EAAE,GAAG,CAAA;;;8CAGE,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC;;;;;;;;;;EAUrF,CAAC,AAbW,CAaV;AAfS,UAAU;IADtB,aAAa,CAAC,oBAAoB,CAAC;GACvB,UAAU,CA2DtB","sourcesContent":["import { CellModel, isFormula } from \"@omegagrid/grid-core\";\nimport { BaseEditor } from \"./baseEditor\";\nimport { customElement } from 'lit/decorators.js';\nimport { css, html, unsafeCSS } from 'lit';\nimport { createRef, Ref, ref } from 'lit/directives/ref.js';\nimport constants from \"../constants\";\nimport { utils } from \"@omegagrid/core\";\n\n@customElement('og-grid-texteditor')\nexport class TextEditor extends BaseEditor {\n\n\tstatic styles = [TextEditor.baseStyles, css`\n\t\tinput {\n\t\t\toutline: none;\n\t\t\tborder: 1px solid var(--og-accent-color, ${unsafeCSS(constants.DEFAULT_ACCENT_COLOR)});\n\t\t\tbackground: var(--og-cell-background);\n\t\t\tcolor: var(--og-text-color);\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tpadding: 0;\n\t\t\tfont-family: var(--og-font-family);\n\t\t\tfont-size: var(--og-font-size);\n\t\t\tbox-sizing: border-box;\n\t\t}\n\t`];\n\n\tinputRef: Ref<HTMLInputElement> = createRef();\n\tget input() { return this.inputRef.value }\n\n\tprivate _onBlur() {\n\t\tthis.commit();\n\t\tthis.close();\n\t}\n\n\tprivate _onKeyUp() {\n\t\tif (this.formulasEnabled && isFormula(this.input.value)) {\n\t\t\t// switch to formula editor\n\t\t\tthis.cancel = true;\n\t\t\tthis.close();\n\t\t\tthis.grid.editing.startEdit(this.input.value);\n\t\t} else {\n\t\t\tthis.validate();\n\t\t}\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<input ${ref(this.inputRef)}\n\t\t\t\ttype=\"text\"\n\t\t\t\t@blur=\"${this._onBlur}\"\n\t\t\t\t@keyup=\"${this._onKeyUp}\">\n\t\t`;\n\t}\n\n\tactivate(cell: CellModel) {\n\t\tsuper.activate(cell);\n\t\tthis.input.value = cell.value == null ? '' : cell.value.toString();\n\t\tthis.input.focus();\n\t}\n\n\tgetValue(): unknown {\n\t\treturn this.input.value;\n\t}\n\n\tsetValue(value: unknown) {\n\t\tthis.input.value = utils.isString(value) ? (value) as string : (value == null ? '' : value.toString());\n\t}\n\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"dropdownFilter.d.ts","sourceRoot":"","sources":["../../src/filters/dropdownFilter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAInF,qBACa,cAAe,SAAQ,UAAU;IAE7C,MAAM,CAAC,MAAM,4BAWV;IAGH,QAAQ,EAAE,YAAY,CAAC;IAGvB,KAAK,EAAE,UAAU,CAAM;IAGvB,OAAO,EAAE,WAAW,CAAC;IAGrB,KAAK,EAAE,SAAS,CAAC;IAEjB,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAYhC,YAAY;IAMlB,SAAS,aAQR;IAKD,UAAU,GAAU,GAAG,aAAa,mBAoBnC;IAED,MAAM,6CAYJ;IAEF,QAAQ;IAUR,UAAU;CAKV"}
1
+ {"version":3,"file":"dropdownFilter.d.ts","sourceRoot":"","sources":["../../src/filters/dropdownFilter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAInF,qBACa,cAAe,SAAQ,UAAU;IAE7C,MAAM,CAAC,MAAM,4BAWV;IAGH,QAAQ,EAAE,YAAY,CAAC;IAGvB,KAAK,EAAE,UAAU,CAAM;IAGvB,OAAO,EAAE,WAAW,CAAC;IAGrB,KAAK,EAAE,SAAS,CAAC;IAEjB,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAYhC,YAAY;IAMlB,SAAS,aAQR;IAKD,UAAU,GAAU,GAAG,aAAa,mBAoBnC;IAED,MAAM,6CAYJ;IAEF,QAAQ;IAWR,UAAU;CAKV"}
@@ -87,8 +87,9 @@ let DropdownFilter = class DropdownFilter extends BaseFilter {
87
87
  setTimeout(async () => {
88
88
  await this.dropdown.open();
89
89
  if (utils.isString(this.currentValue)) {
90
- this.dropdown.filter(this.currentValue);
90
+ await this.dropdown.filter(this.currentValue);
91
91
  }
92
+ this.dropdown.input?.selectAll();
92
93
  }, 100);
93
94
  }
94
95
  deactivate() {
@@ -1 +1 @@
1
- {"version":3,"file":"dropdownFilter.js","sourceRoot":"","sources":["../../src/filters/dropdownFilter.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAA6B,SAAS,EAAc,MAAM,iBAAiB,CAAC;AACnF,OAAO,EAAY,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAI3C,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,UAAU;IAAvC;;QAmBN,UAAK,GAAe,EAAE,CAAC;QA0BvB,cAAS,GAAG,GAAG,EAAE;YAChB,MAAM,MAAM,GAAe,EAAE,CAAC;YAC9B,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;gBAChD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACvD,IAAI,GAAG,IAAI,IAAI;oBAAE,MAAM,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAC,CAAC,CAAC;YAC9D,CAAC,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,MAAM;gBAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;;gBAClC,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,CAAC,CAAA;QAED,qFAAqF;QACrF,qFAAqF;QACrF,uEAAuE;QACvE,eAAU,GAAG,KAAK,EAAE,CAAgB,EAAE,EAAE;YACvC,IAAI,CAAC,CAAC,GAAG,IAAI,OAAO;gBAAE,OAAO;YAC7B,CAAC,CAAC,wBAAwB,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAE3B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAChD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACX,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC,gDAAgD;gBACtF,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClB,OAAO;YACR,CAAC;YAED,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,mEAAmE;YACrG,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC9D,IAAI,KAAK,IAAI,CAAC;gBAAE,OAAO,CAAC,iEAAiE;YAEzF,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAClC,IAAI,CAAC,UAAU,EAAE,CAAC;QACnB,CAAC,CAAA;QAED,WAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAA;;;;;;gBAMJ,EAAC,UAAU,EAAE,UAAU,EAAC;cAC1B,IAAI,CAAC,KAAK;gBACR,IAAI,CAAC,OAAO;eACb,IAAI,CAAC,SAAS;;;EAG3B,CAAC;IAiBH,CAAC;IAlFA,UAAU,CAAC,KAA2B;QACrC,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YACnB,CAAC;iBAAM,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACvB,IAAI,CAAC,KAAK,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YACnB,CAAC;QACF,CAAC;IACF,CAAC;IAED,KAAK,CAAC,YAAY;QACjB,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAa,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QAC7F,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAClE,CAAC;IAmDD,QAAQ;QACP,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,UAAU,CAAC,KAAK,IAAI,EAAE;YACrB,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;gBACvC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,YAAsB,CAAC,CAAC;YACnD,CAAC;QACF,CAAC,EAAE,GAAG,CAAC,CAAC;IACT,CAAC;IAED,UAAU;QACT,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,KAAK,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;;AAzGM,qBAAM,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,CAAA;;;;;;;;;;;EAWzC,CAAC,AAXW,CAWV;AAGH;IADC,KAAK,CAAC,kBAAkB,CAAC;gDACH;AAGvB;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,KAAK,EAAC,CAAC;6CACD;AAGvB;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC;+CACJ;AAGrB;IADC,KAAK,EAAE;6CACS;AAzBL,cAAc;IAD1B,aAAa,CAAC,GAAG,SAAS,CAAC,MAAM,kBAAkB,CAAC;GACxC,cAAc,CA6G1B","sourcesContent":["import constants from \"../constants\";\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { BaseFilter } from \"./baseFilter\";\nimport { html, css } from 'lit';\nimport { TreeAdapter, TreeDropdown, TreeModel, TreeSource } from \"@omegagrid/tree\";\nimport { KeyValue, utils } from \"@omegagrid/core\";\n\n\n@customElement(`${constants.PREFIX}-filter-dropdown`)\nexport class DropdownFilter extends BaseFilter {\n\t\n\tstatic styles = [...BaseFilter.styles, css`\n\t\t.filter-inner {\n\t\t\theight: 100%;\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: row;\n\t\t\toverflow: hidden;\n\t\t}\n\n\t\tog-tree-dropdown {\n\t\t\twidth: 100%;\n\t\t}\n\t`];\n\n\t@query('og-tree-dropdown')\n\tdropdown: TreeDropdown;\n\n\t@property({type: Array})\n\titems: TreeSource = [];\n\n\t@property({type: Object})\n\tadapter: TreeAdapter;\n\n\t@state()\n\tmodel: TreeModel;\n\n\twillUpdate(props: Map<string, unknown>) {\n\t\tif (props.has('items')) {\n\t\t\tif (this.adapter) {\n\t\t\t\tthis.model = null;\n\t\t\t} else if (this.items) {\n\t\t\t\tthis.model = new TreeModel(this.items, {});\n\t\t\t} else {\n\t\t\t\tthis.model = null;\n\t\t\t}\n\t\t}\n\t}\n\n\tasync firstUpdated() {\n\t\tawait this.dropdown.updateComplete;\n\t\tthis.dropdown.dropdown.addEventListener('mousedown', (e: MouseEvent) => e.stopPropagation());\n\t\tthis.dropdown.input.addEventListener('keydown', this._onKeyDown);\n\t}\n\n\t_onChange = () => {\n\t\tconst values: KeyValue[] = [];\n\t\tthis.dropdown.selection.items.forEach((_, key) => {\n\t\t\tconst node = this.dropdown.tree.model.nodeMap.get(key);\n\t\t\tif (key != null) values.push({key: key, value: node?.value});\n\t\t});\n\t\tif (values.length) this.filter(values);\n\t\telse this.clearFilter();\n\t}\n\n\t// a value typed into the search field is resolved to the matching items of the list,\n\t// so the filter works with their keys instead of the searched text - the field holds\n\t// the whole filter, several values can be entered separated by a comma\n\t_onKeyDown = async (e: KeyboardEvent) => {\n\t\tif (e.key != 'Enter') return;\n\t\te.stopImmediatePropagation();\n\t\tif (!this.dropdown) return;\n\n\t\tconst term = this.dropdown.input?.value?.trim();\n\t\tif (!term) {\n\t\t\tawait this.dropdown.clearSelection(); // an empty search field clears the whole filter\n\t\t\tthis.clearFilter();\n\t\t\tthis.deactivate();\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.dropdown.filter(term); // the search field filters with a delay, apply the term right away\n\t\tconst count = await this.dropdown.selectFiltered(false, true);\n\t\tif (count == 0) return; // nothing matches the term, keep the dropdown open to correct it\n\n\t\tthis._onChange();\n\t\tawait this.dropdown.clearFilter();\n\t\tthis.deactivate();\n\t}\n\n\trender = () => html`\n\t\t<div class=\"filter-inner\">\n\t\t\t<og-tree-dropdown\n\t\t\t\tcross\n\t\t\t\tbuttonInput\n\t\t\t\tpreventInputEnter\n\t\t\t\t.options=\"${{selectMode: 'multiple'}}\"\n\t\t\t\t.model=\"${this.model}\"\n\t\t\t\t.adapter=\"${this.adapter}\"\n\t\t\t\t@change=\"${this._onChange}\">\n\t\t\t</og-tree-dropdown>\n\t\t</div>\n\t`;\n\n\tactivate() {\n\t\tsuper.activate();\n\t\tsetTimeout(async () => {\n\t\t\tawait this.dropdown.open();\n\t\t\tif (utils.isString(this.currentValue)) {\n\t\t\t\tthis.dropdown.filter(this.currentValue as string);\n\t\t\t}\n\t\t}, 100);\n\t}\n\n\tdeactivate() {\n\t\tthis.dropdown.close();\n\t\tsuper.deactivate();\n\t}\n\n}"]}
1
+ {"version":3,"file":"dropdownFilter.js","sourceRoot":"","sources":["../../src/filters/dropdownFilter.ts"],"names":[],"mappings":"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","sourcesContent":["import constants from \"../constants\";\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { BaseFilter } from \"./baseFilter\";\nimport { html, css } from 'lit';\nimport { TreeAdapter, TreeDropdown, TreeModel, TreeSource } from \"@omegagrid/tree\";\nimport { KeyValue, utils } from \"@omegagrid/core\";\n\n\n@customElement(`${constants.PREFIX}-filter-dropdown`)\nexport class DropdownFilter extends BaseFilter {\n\t\n\tstatic styles = [...BaseFilter.styles, css`\n\t\t.filter-inner {\n\t\t\theight: 100%;\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: row;\n\t\t\toverflow: hidden;\n\t\t}\n\n\t\tog-tree-dropdown {\n\t\t\twidth: 100%;\n\t\t}\n\t`];\n\n\t@query('og-tree-dropdown')\n\tdropdown: TreeDropdown;\n\n\t@property({type: Array})\n\titems: TreeSource = [];\n\n\t@property({type: Object})\n\tadapter: TreeAdapter;\n\n\t@state()\n\tmodel: TreeModel;\n\n\twillUpdate(props: Map<string, unknown>) {\n\t\tif (props.has('items')) {\n\t\t\tif (this.adapter) {\n\t\t\t\tthis.model = null;\n\t\t\t} else if (this.items) {\n\t\t\t\tthis.model = new TreeModel(this.items, {});\n\t\t\t} else {\n\t\t\t\tthis.model = null;\n\t\t\t}\n\t\t}\n\t}\n\n\tasync firstUpdated() {\n\t\tawait this.dropdown.updateComplete;\n\t\tthis.dropdown.dropdown.addEventListener('mousedown', (e: MouseEvent) => e.stopPropagation());\n\t\tthis.dropdown.input.addEventListener('keydown', this._onKeyDown);\n\t}\n\n\t_onChange = () => {\n\t\tconst values: KeyValue[] = [];\n\t\tthis.dropdown.selection.items.forEach((_, key) => {\n\t\t\tconst node = this.dropdown.tree.model.nodeMap.get(key);\n\t\t\tif (key != null) values.push({key: key, value: node?.value});\n\t\t});\n\t\tif (values.length) this.filter(values);\n\t\telse this.clearFilter();\n\t}\n\n\t// a value typed into the search field is resolved to the matching items of the list,\n\t// so the filter works with their keys instead of the searched text - the field holds\n\t// the whole filter, several values can be entered separated by a comma\n\t_onKeyDown = async (e: KeyboardEvent) => {\n\t\tif (e.key != 'Enter') return;\n\t\te.stopImmediatePropagation();\n\t\tif (!this.dropdown) return;\n\n\t\tconst term = this.dropdown.input?.value?.trim();\n\t\tif (!term) {\n\t\t\tawait this.dropdown.clearSelection(); // an empty search field clears the whole filter\n\t\t\tthis.clearFilter();\n\t\t\tthis.deactivate();\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.dropdown.filter(term); // the search field filters with a delay, apply the term right away\n\t\tconst count = await this.dropdown.selectFiltered(false, true);\n\t\tif (count == 0) return; // nothing matches the term, keep the dropdown open to correct it\n\n\t\tthis._onChange();\n\t\tawait this.dropdown.clearFilter();\n\t\tthis.deactivate();\n\t}\n\n\trender = () => html`\n\t\t<div class=\"filter-inner\">\n\t\t\t<og-tree-dropdown\n\t\t\t\tcross\n\t\t\t\tbuttonInput\n\t\t\t\tpreventInputEnter\n\t\t\t\t.options=\"${{selectMode: 'multiple'}}\"\n\t\t\t\t.model=\"${this.model}\"\n\t\t\t\t.adapter=\"${this.adapter}\"\n\t\t\t\t@change=\"${this._onChange}\">\n\t\t\t</og-tree-dropdown>\n\t\t</div>\n\t`;\n\n\tactivate() {\n\t\tsuper.activate();\n\t\tsetTimeout(async () => {\n\t\t\tawait this.dropdown.open();\n\t\t\tif (utils.isString(this.currentValue)) {\n\t\t\t\tawait this.dropdown.filter(this.currentValue as string);\n\t\t\t}\n\t\t\tthis.dropdown.input?.selectAll();\n\t\t}, 100);\n\t}\n\n\tdeactivate() {\n\t\tthis.dropdown.close();\n\t\tsuper.deactivate();\n\t}\n\n}"]}
@@ -66,7 +66,7 @@ let NumberFilter = class NumberFilter extends BaseFilter {
66
66
  if (this.input) {
67
67
  this.input.value = this.currentValue ?? '';
68
68
  }
69
- setTimeout(() => this.input?.focus(), 100);
69
+ setTimeout(() => this.input?.select(), 100);
70
70
  }
71
71
  deactivate() {
72
72
  super.deactivate();
@@ -1 +1 @@
1
- {"version":3,"file":"numberFilter.js","sourceRoot":"","sources":["../../src/filters/numberFilter.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE1C;;;;;;GAMG;AAEI,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,UAAU;IAArC;;QAgCE,aAAQ,GAAG,SAAS,EAAoB,CAAC;QAGzC,oBAAe,GAAG,SAAS,EAAqB,CAAC;QAGjD,mBAAc,GAAG,SAAS,EAAqB,CAAC;QA4BxD,WAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAA;;YAER,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;;aAEjB,GAAG,CAAC,uFAAuF,CAAC;gBACzF,IAAI,CAAC,eAAe;cACtB,IAAI,CAAC,YAAsB,IAAI,EAAE;6CACF,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB,IAAI,CAAC,cAAc;yCAChE,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,gBAAgB,IAAI,CAAC,aAAa;;EAEjG,CAAC;IAcH,CAAC;IAzDA,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAA,CAAC,CAAC;IAG1C,IAAI,YAAY,KAAK,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAA,CAAC,CAAC;IAGxD,IAAI,WAAW,KAAK,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAA,CAAC,CAAC;IAE9C,MAAM;QACb,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/C,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YAClB,IAAI,CAAC,WAAW,EAAE,CAAC;QACpB,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACF,CAAC;IAED,cAAc;QACb,IAAI,CAAC,MAAM,EAAE,CAAC;IACf,CAAC;IAED,aAAa;QACZ,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;QACtC,IAAI,CAAC,WAAW,EAAE,CAAC;IACpB,CAAC;IAED,eAAe,CAAC,CAAgB;QAC/B,IAAI,CAAC,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,UAAU,EAAE,CAAC;QACnB,CAAC;IACF,CAAC;IAcD,QAAQ;QACP,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,YAAsB,IAAI,EAAE,CAAC;QACtD,CAAC;QACD,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC;IAC5C,CAAC;IAED,UAAU;QACT,KAAK,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;;AAtFM,mBAAM,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4BzC,CAAC,AA5BW,CA4BV;AA9BS,YAAY;IADxB,aAAa,CAAC,GAAG,SAAS,CAAC,MAAM,gBAAgB,CAAC;GACtC,YAAY,CA0FxB","sourcesContent":["import constants from \"../constants\";\nimport { customElement } from 'lit/decorators.js';\nimport { BaseFilter } from \"./baseFilter\";\nimport { html, css } from 'lit';\nimport { createRef, ref } from 'lit/directives/ref.js';\nimport { msg } from '@omegagrid/localize';\n\n/**\n * Text-based filter for numeric columns. Instead of a range popup the user types an\n * expression such as `> 100`, `<10 or >20`, `>10 and <20`, `100..200`, `=42` (exact),\n * `!=5`, or a value list `1 2 3` (OR of exact matches). A single bare number is matched\n * as a plain text \"contains\" search. Parsing and matching are handled by grid-core's\n * `createCellMatcher`.\n */\n@customElement(`${constants.PREFIX}-filter-number`)\nexport class NumberFilter extends BaseFilter {\n\n\tstatic styles = [...BaseFilter.styles, css`\n\t\t.filter-inner {\n\t\t\theight: 100%;\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: row;\n\t\t\toverflow: hidden;\n\t\t}\n\n\t\tinput {\n\t\t\tborder-width: 0;\n\t\t\toutline: none;\n\t\t\theight: 100%;\n\t\t\tflex: 1;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: var(--og-background-color);\n\t\t\tcolor: var(--og-text-color);\n\t\t}\n\n\t\tog-button {\n\t\t\tflex: 0;\n\t\t\tmin-width: 18px;\n\t\t\tmax-width: 18px;\n\t\t\tpadding: 0;\n\t\t\ttext-align: center;\n\t\t\tborder-width: 0;\n\t\t\tborder-radius: 0;\n\t\t\theight: 100%;\n\t\t}\n\t`];\n\n\tprivate inputRef = createRef<HTMLInputElement>();\n\tget input() { return this.inputRef.value }\n\n\tprivate filterButtonRef = createRef<HTMLButtonElement>();\n\tget filterButton() { return this.filterButtonRef.value }\n\n\tprivate clearButtonRef = createRef<HTMLButtonElement>();\n\tget clearButton() { return this.clearButtonRef.value }\n\n\tprivate _apply() {\n\t\tconst value = (this.input?.value ?? '').trim();\n\t\tif (value === '') {\n\t\t\tthis.clearFilter();\n\t\t} else {\n\t\t\tthis.filter(value);\n\t\t}\n\t}\n\n\t_onFilterClick() {\n\t\tthis._apply();\n\t}\n\n\t_onClearClick() {\n\t\tif (this.input) this.input.value = '';\n\t\tthis.clearFilter();\n\t}\n\n\t_onInputKeyDown(e: KeyboardEvent) {\n\t\tif (e.key == 'Enter') {\n\t\t\tthis._apply();\n\t\t\tthis.deactivate();\n\t\t}\n\t}\n\n\trender = () => html`\n\t\t<div class=\"filter-inner\">\n\t\t\t<input ${ref(this.inputRef)}\n\t\t\t\ttype=\"text\"\n\t\t\t\ttitle=\"${msg('Examples: > 100, <10 or >20, >10 and <20, 100..200, 1 2 3, =42 (exact), 42 (contains)')}\"\n\t\t\t\t@keydown=\"${this._onInputKeyDown}\"\n\t\t\t\t.value=\"${this.currentValue as string ?? ''}\">\n\t\t\t<og-button icon=\"filter\" color=\"accent\" ${ref(this.filterButtonRef)} @mousedown=\"${this._onFilterClick}\"></og-button>\n\t\t\t<og-button icon=\"xmark\" color=\"red\" ${ref(this.clearButtonRef)} @mousedown=\"${this._onClearClick}\"></og-button>\n\t\t</div>\n\t`;\n\n\tactivate() {\n\t\tsuper.activate();\n\t\tif (this.input) {\n\t\t\tthis.input.value = this.currentValue as string ?? '';\n\t\t}\n\t\tsetTimeout(() => this.input?.focus(), 100);\n\t}\n\n\tdeactivate() {\n\t\tsuper.deactivate();\n\t}\n\n}\n"]}
1
+ {"version":3,"file":"numberFilter.js","sourceRoot":"","sources":["../../src/filters/numberFilter.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE1C;;;;;;GAMG;AAEI,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,UAAU;IAArC;;QAgCE,aAAQ,GAAG,SAAS,EAAoB,CAAC;QAGzC,oBAAe,GAAG,SAAS,EAAqB,CAAC;QAGjD,mBAAc,GAAG,SAAS,EAAqB,CAAC;QA4BxD,WAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAA;;YAER,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;;aAEjB,GAAG,CAAC,uFAAuF,CAAC;gBACzF,IAAI,CAAC,eAAe;cACtB,IAAI,CAAC,YAAsB,IAAI,EAAE;6CACF,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB,IAAI,CAAC,cAAc;yCAChE,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,gBAAgB,IAAI,CAAC,aAAa;;EAEjG,CAAC;IAcH,CAAC;IAzDA,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAA,CAAC,CAAC;IAG1C,IAAI,YAAY,KAAK,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAA,CAAC,CAAC;IAGxD,IAAI,WAAW,KAAK,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAA,CAAC,CAAC;IAE9C,MAAM;QACb,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/C,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YAClB,IAAI,CAAC,WAAW,EAAE,CAAC;QACpB,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACF,CAAC;IAED,cAAc;QACb,IAAI,CAAC,MAAM,EAAE,CAAC;IACf,CAAC;IAED,aAAa;QACZ,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;QACtC,IAAI,CAAC,WAAW,EAAE,CAAC;IACpB,CAAC;IAED,eAAe,CAAC,CAAgB;QAC/B,IAAI,CAAC,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,UAAU,EAAE,CAAC;QACnB,CAAC;IACF,CAAC;IAcD,QAAQ;QACP,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,YAAsB,IAAI,EAAE,CAAC;QACtD,CAAC;QACD,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC;IAED,UAAU;QACT,KAAK,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;;AAtFM,mBAAM,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4BzC,CAAC,AA5BW,CA4BV;AA9BS,YAAY;IADxB,aAAa,CAAC,GAAG,SAAS,CAAC,MAAM,gBAAgB,CAAC;GACtC,YAAY,CA0FxB","sourcesContent":["import constants from \"../constants\";\nimport { customElement } from 'lit/decorators.js';\nimport { BaseFilter } from \"./baseFilter\";\nimport { html, css } from 'lit';\nimport { createRef, ref } from 'lit/directives/ref.js';\nimport { msg } from '@omegagrid/localize';\n\n/**\n * Text-based filter for numeric columns. Instead of a range popup the user types an\n * expression such as `> 100`, `<10 or >20`, `>10 and <20`, `100..200`, `=42` (exact),\n * `!=5`, or a value list `1 2 3` (OR of exact matches). A single bare number is matched\n * as a plain text \"contains\" search. Parsing and matching are handled by grid-core's\n * `createCellMatcher`.\n */\n@customElement(`${constants.PREFIX}-filter-number`)\nexport class NumberFilter extends BaseFilter {\n\n\tstatic styles = [...BaseFilter.styles, css`\n\t\t.filter-inner {\n\t\t\theight: 100%;\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: row;\n\t\t\toverflow: hidden;\n\t\t}\n\n\t\tinput {\n\t\t\tborder-width: 0;\n\t\t\toutline: none;\n\t\t\theight: 100%;\n\t\t\tflex: 1;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: var(--og-background-color);\n\t\t\tcolor: var(--og-text-color);\n\t\t}\n\n\t\tog-button {\n\t\t\tflex: 0;\n\t\t\tmin-width: 18px;\n\t\t\tmax-width: 18px;\n\t\t\tpadding: 0;\n\t\t\ttext-align: center;\n\t\t\tborder-width: 0;\n\t\t\tborder-radius: 0;\n\t\t\theight: 100%;\n\t\t}\n\t`];\n\n\tprivate inputRef = createRef<HTMLInputElement>();\n\tget input() { return this.inputRef.value }\n\n\tprivate filterButtonRef = createRef<HTMLButtonElement>();\n\tget filterButton() { return this.filterButtonRef.value }\n\n\tprivate clearButtonRef = createRef<HTMLButtonElement>();\n\tget clearButton() { return this.clearButtonRef.value }\n\n\tprivate _apply() {\n\t\tconst value = (this.input?.value ?? '').trim();\n\t\tif (value === '') {\n\t\t\tthis.clearFilter();\n\t\t} else {\n\t\t\tthis.filter(value);\n\t\t}\n\t}\n\n\t_onFilterClick() {\n\t\tthis._apply();\n\t}\n\n\t_onClearClick() {\n\t\tif (this.input) this.input.value = '';\n\t\tthis.clearFilter();\n\t}\n\n\t_onInputKeyDown(e: KeyboardEvent) {\n\t\tif (e.key == 'Enter') {\n\t\t\tthis._apply();\n\t\t\tthis.deactivate();\n\t\t}\n\t}\n\n\trender = () => html`\n\t\t<div class=\"filter-inner\">\n\t\t\t<input ${ref(this.inputRef)}\n\t\t\t\ttype=\"text\"\n\t\t\t\ttitle=\"${msg('Examples: > 100, <10 or >20, >10 and <20, 100..200, 1 2 3, =42 (exact), 42 (contains)')}\"\n\t\t\t\t@keydown=\"${this._onInputKeyDown}\"\n\t\t\t\t.value=\"${this.currentValue as string ?? ''}\">\n\t\t\t<og-button icon=\"filter\" color=\"accent\" ${ref(this.filterButtonRef)} @mousedown=\"${this._onFilterClick}\"></og-button>\n\t\t\t<og-button icon=\"xmark\" color=\"red\" ${ref(this.clearButtonRef)} @mousedown=\"${this._onClearClick}\"></og-button>\n\t\t</div>\n\t`;\n\n\tactivate() {\n\t\tsuper.activate();\n\t\tif (this.input) {\n\t\t\tthis.input.value = this.currentValue as string ?? '';\n\t\t}\n\t\tsetTimeout(() => this.input?.select(), 100);\n\t}\n\n\tdeactivate() {\n\t\tsuper.deactivate();\n\t}\n\n}\n"]}
@@ -47,7 +47,7 @@ let TextFilter = class TextFilter extends BaseFilter {
47
47
  if (this.input) {
48
48
  this.input.value = this.currentValue ?? '';
49
49
  }
50
- setTimeout(() => this.input.focus(), 100);
50
+ setTimeout(() => this.input?.select(), 100);
51
51
  }
52
52
  deactivate() {
53
53
  super.deactivate();
@@ -1 +1 @@
1
- {"version":3,"file":"textFilter.js","sourceRoot":"","sources":["../../src/filters/textFilter.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAGhD,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,UAAU;IAAnC;;QAgCE,aAAQ,GAAG,SAAS,EAAoB,CAAC;QAGzC,oBAAe,GAAG,SAAS,EAAqB,CAAC;QAGjD,mBAAc,GAAG,SAAS,EAAqB,CAAC;QAmBxD,WAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAA;;YAER,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;;gBAEd,IAAI,CAAC,eAAe;cACtB,IAAI,CAAC,YAAsB,IAAI,EAAE;6CACF,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB,IAAI,CAAC,cAAc;yCAChE,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,gBAAgB,IAAI,CAAC,aAAa;;EAEjG,CAAC;IAcH,CAAC;IA/CA,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAA,CAAC,CAAC;IAG1C,IAAI,YAAY,KAAK,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAA,CAAC,CAAC;IAGxD,IAAI,WAAW,KAAK,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAA,CAAC,CAAC;IAEtD,cAAc;QACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,aAAa;QACZ,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,WAAW,EAAE,CAAC;IACpB,CAAC;IAED,eAAe,CAAC,CAAgB;QAC/B,IAAI,CAAC,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,CAAC,UAAU,EAAE,CAAC;QACnB,CAAC;IACF,CAAC;IAaD,QAAQ;QACP,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,YAAsB,IAAI,EAAE,CAAC;QACtD,CAAC;QACD,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;IAED,UAAU;QACT,KAAK,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;;AA5EM,iBAAM,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4BzC,CAAC,AA5BW,CA4BV;AA9BS,UAAU;IADtB,aAAa,CAAC,GAAG,SAAS,CAAC,MAAM,cAAc,CAAC;GACpC,UAAU,CAgFtB","sourcesContent":["import constants from \"../constants\";\nimport { customElement } from 'lit/decorators.js';\nimport { BaseFilter } from \"./baseFilter\";\nimport { html, css } from 'lit';\nimport { createRef, ref } from 'lit/directives/ref.js';\n\n@customElement(`${constants.PREFIX}-filter-text`)\nexport class TextFilter extends BaseFilter {\n\t\n\tstatic styles = [...BaseFilter.styles, css`\n\t\t.filter-inner {\n\t\t\theight: 100%;\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: row;\n\t\t\toverflow: hidden;\n\t\t}\n\n\t\tinput {\n\t\t\tborder-width: 0;\n\t\t\toutline: none;\n\t\t\theight: 100%;\n\t\t\tflex: 1;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: var(--og-background-color);\n\t\t\tcolor: var(--og-text-color);\n\t\t}\n\n\t\tog-button {\n\t\t\tflex: 0;\n\t\t\tmin-width: 18px;\n\t\t\tmax-width: 18px;\n\t\t\tpadding: 0;\n\t\t\ttext-align: center;\n\t\t\tborder-width: 0;\n\t\t\tborder-radius: 0;\n\t\t\theight: 100%;\n\t\t}\n\t`];\n\n\tprivate inputRef = createRef<HTMLInputElement>();\n\tget input() { return this.inputRef.value }\n\n\tprivate filterButtonRef = createRef<HTMLButtonElement>();\n\tget filterButton() { return this.filterButtonRef.value }\n\n\tprivate clearButtonRef = createRef<HTMLButtonElement>();\n\tget clearButton() { return this.clearButtonRef.value }\n\t\n\t_onFilterClick() {\n\t\tthis.filter(this.input.value);\n\t}\n\n\t_onClearClick() {\n\t\tthis.input.value = '';\n\t\tthis.clearFilter();\n\t}\n\n\t_onInputKeyDown(e: KeyboardEvent) {\n\t\tif (e.key == 'Enter') {\n\t\t\tthis.filter(this.input.value);\n\t\t\tthis.deactivate();\n\t\t}\n\t}\n\n\trender = () => html`\n\t\t<div class=\"filter-inner\">\n\t\t\t<input ${ref(this.inputRef)}\n\t\t\t\ttype=\"text\" \n\t\t\t\t@keydown=\"${this._onInputKeyDown}\"\n\t\t\t\t.value=\"${this.currentValue as string ?? ''}\">\n\t\t\t<og-button icon=\"filter\" color=\"accent\" ${ref(this.filterButtonRef)} @mousedown=\"${this._onFilterClick}\"></og-button>\n\t\t\t<og-button icon=\"xmark\" color=\"red\" ${ref(this.clearButtonRef)} @mousedown=\"${this._onClearClick}\"></og-button>\n\t\t</div>\n\t`;\n\n\tactivate() {\n\t\tsuper.activate();\n\t\tif (this.input) {\n\t\t\tthis.input.value = this.currentValue as string ?? '';\n\t\t}\n\t\tsetTimeout(() => this.input.focus(), 100);\n\t}\n\n\tdeactivate() {\n\t\tsuper.deactivate();\n\t}\n\n}"]}
1
+ {"version":3,"file":"textFilter.js","sourceRoot":"","sources":["../../src/filters/textFilter.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAGhD,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,UAAU;IAAnC;;QAgCE,aAAQ,GAAG,SAAS,EAAoB,CAAC;QAGzC,oBAAe,GAAG,SAAS,EAAqB,CAAC;QAGjD,mBAAc,GAAG,SAAS,EAAqB,CAAC;QAmBxD,WAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAA;;YAER,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;;gBAEd,IAAI,CAAC,eAAe;cACtB,IAAI,CAAC,YAAsB,IAAI,EAAE;6CACF,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB,IAAI,CAAC,cAAc;yCAChE,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,gBAAgB,IAAI,CAAC,aAAa;;EAEjG,CAAC;IAcH,CAAC;IA/CA,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAA,CAAC,CAAC;IAG1C,IAAI,YAAY,KAAK,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAA,CAAC,CAAC;IAGxD,IAAI,WAAW,KAAK,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAA,CAAC,CAAC;IAEtD,cAAc;QACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,aAAa;QACZ,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,WAAW,EAAE,CAAC;IACpB,CAAC;IAED,eAAe,CAAC,CAAgB;QAC/B,IAAI,CAAC,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,CAAC,UAAU,EAAE,CAAC;QACnB,CAAC;IACF,CAAC;IAaD,QAAQ;QACP,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,YAAsB,IAAI,EAAE,CAAC;QACtD,CAAC;QACD,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC;IAED,UAAU;QACT,KAAK,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;;AA5EM,iBAAM,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4BzC,CAAC,AA5BW,CA4BV;AA9BS,UAAU;IADtB,aAAa,CAAC,GAAG,SAAS,CAAC,MAAM,cAAc,CAAC;GACpC,UAAU,CAgFtB","sourcesContent":["import constants from \"../constants\";\nimport { customElement } from 'lit/decorators.js';\nimport { BaseFilter } from \"./baseFilter\";\nimport { html, css } from 'lit';\nimport { createRef, ref } from 'lit/directives/ref.js';\n\n@customElement(`${constants.PREFIX}-filter-text`)\nexport class TextFilter extends BaseFilter {\n\t\n\tstatic styles = [...BaseFilter.styles, css`\n\t\t.filter-inner {\n\t\t\theight: 100%;\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: row;\n\t\t\toverflow: hidden;\n\t\t}\n\n\t\tinput {\n\t\t\tborder-width: 0;\n\t\t\toutline: none;\n\t\t\theight: 100%;\n\t\t\tflex: 1;\n\t\t\twidth: 100%;\n\t\t\tbackground-color: var(--og-background-color);\n\t\t\tcolor: var(--og-text-color);\n\t\t}\n\n\t\tog-button {\n\t\t\tflex: 0;\n\t\t\tmin-width: 18px;\n\t\t\tmax-width: 18px;\n\t\t\tpadding: 0;\n\t\t\ttext-align: center;\n\t\t\tborder-width: 0;\n\t\t\tborder-radius: 0;\n\t\t\theight: 100%;\n\t\t}\n\t`];\n\n\tprivate inputRef = createRef<HTMLInputElement>();\n\tget input() { return this.inputRef.value }\n\n\tprivate filterButtonRef = createRef<HTMLButtonElement>();\n\tget filterButton() { return this.filterButtonRef.value }\n\n\tprivate clearButtonRef = createRef<HTMLButtonElement>();\n\tget clearButton() { return this.clearButtonRef.value }\n\t\n\t_onFilterClick() {\n\t\tthis.filter(this.input.value);\n\t}\n\n\t_onClearClick() {\n\t\tthis.input.value = '';\n\t\tthis.clearFilter();\n\t}\n\n\t_onInputKeyDown(e: KeyboardEvent) {\n\t\tif (e.key == 'Enter') {\n\t\t\tthis.filter(this.input.value);\n\t\t\tthis.deactivate();\n\t\t}\n\t}\n\n\trender = () => html`\n\t\t<div class=\"filter-inner\">\n\t\t\t<input ${ref(this.inputRef)}\n\t\t\t\ttype=\"text\" \n\t\t\t\t@keydown=\"${this._onInputKeyDown}\"\n\t\t\t\t.value=\"${this.currentValue as string ?? ''}\">\n\t\t\t<og-button icon=\"filter\" color=\"accent\" ${ref(this.filterButtonRef)} @mousedown=\"${this._onFilterClick}\"></og-button>\n\t\t\t<og-button icon=\"xmark\" color=\"red\" ${ref(this.clearButtonRef)} @mousedown=\"${this._onClearClick}\"></og-button>\n\t\t</div>\n\t`;\n\n\tactivate() {\n\t\tsuper.activate();\n\t\tif (this.input) {\n\t\t\tthis.input.value = this.currentValue as string ?? '';\n\t\t}\n\t\tsetTimeout(() => this.input?.select(), 100);\n\t}\n\n\tdeactivate() {\n\t\tsuper.deactivate();\n\t}\n\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"NumberRenderer.d.ts","sourceRoot":"","sources":["../../src/renderers/NumberRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAE/C,wBAAgB,cAAc,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAI,cAAc,CAYnH"}
1
+ {"version":3,"file":"NumberRenderer.d.ts","sourceRoot":"","sources":["../../src/renderers/NumberRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAE/C,wBAAgB,cAAc,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAI,cAAc,CAanH"}
@@ -1,7 +1,8 @@
1
1
  import { BaseRenderer } from "./BaseRenderer";
2
2
  export function NumberRenderer(div, cell, options) {
3
3
  if (!cell.cssStyle || !cell.cssStyle.textAlign) {
4
- div.style.textAlign = 'right';
4
+ // quote prefixed value is a plain text, it is aligned as a text
5
+ div.style.textAlign = cell.quotePrefix ? 'left' : 'right';
5
6
  }
6
7
  try {
7
8
  div.innerHTML = cell.formattedValue;
@@ -1 +1 @@
1
- {"version":3,"file":"NumberRenderer.js","sourceRoot":"","sources":["../../src/renderers/NumberRenderer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,UAAU,cAAc,CAAC,GAAmB,EAAE,IAAe,EAAE,OAA6B;IACjG,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QAChD,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC;QACJ,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,GAAG,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IACjD,CAAC;IAED,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACpD,CAAC","sourcesContent":["import { CellModel } from \"@omegagrid/grid-core\";\nimport { BaseRenderer } from \"./BaseRenderer\";\nimport { CellRendererOptions } from \"../types\";\n\nexport function NumberRenderer(div: HTMLDivElement, cell: CellModel, options?: CellRendererOptions) : HTMLDivElement {\n\tif (!cell.cssStyle || !cell.cssStyle.textAlign) {\n\t\tdiv.style.textAlign = 'right';\n\t}\n\n\ttry {\n\t\tdiv.innerHTML = cell.formattedValue;\n\t} catch (error) {\n\t\tdiv.textContent = (cell.value ?? '').toString();\n\t}\n\t\n\treturn BaseRenderer.call(this, div, cell, options);\n}"]}
1
+ {"version":3,"file":"NumberRenderer.js","sourceRoot":"","sources":["../../src/renderers/NumberRenderer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,UAAU,cAAc,CAAC,GAAmB,EAAE,IAAe,EAAE,OAA6B;IACjG,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QAChD,gEAAgE;QAChE,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAC3D,CAAC;IAED,IAAI,CAAC;QACJ,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,GAAG,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IACjD,CAAC;IAED,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACpD,CAAC","sourcesContent":["import { CellModel } from \"@omegagrid/grid-core\";\nimport { BaseRenderer } from \"./BaseRenderer\";\nimport { CellRendererOptions } from \"../types\";\n\nexport function NumberRenderer(div: HTMLDivElement, cell: CellModel, options?: CellRendererOptions) : HTMLDivElement {\n\tif (!cell.cssStyle || !cell.cssStyle.textAlign) {\n\t\t// quote prefixed value is a plain text, it is aligned as a text\n\t\tdiv.style.textAlign = cell.quotePrefix ? 'left' : 'right';\n\t}\n\n\ttry {\n\t\tdiv.innerHTML = cell.formattedValue;\n\t} catch (error) {\n\t\tdiv.textContent = (cell.value ?? '').toString();\n\t}\n\t\n\treturn BaseRenderer.call(this, div, cell, options);\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TextRenderer.d.ts","sourceRoot":"","sources":["../../src/renderers/TextRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAG/C,wBAAgB,YAAY,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAI,cAAc,CAiCjH"}
1
+ {"version":3,"file":"TextRenderer.d.ts","sourceRoot":"","sources":["../../src/renderers/TextRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAG/C,wBAAgB,YAAY,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAI,cAAc,CAoCjH"}
@@ -5,6 +5,10 @@ export function TextRenderer(div, cell, options) {
5
5
  if (cell.hasDisplayValue) {
6
6
  text = cell.displayValue;
7
7
  }
8
+ else if (cell.quotePrefix) {
9
+ // quote prefixed value is a plain text, the prefix is never displayed
10
+ text = cell.formattedValue;
11
+ }
8
12
  else if (cell.value != null) {
9
13
  const formatter = cell.valueFormatter;
10
14
  if (formatter) {
@@ -1 +1 @@
1
- {"version":3,"file":"TextRenderer.js","sourceRoot":"","sources":["../../src/renderers/TextRenderer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAEtC,MAAM,UAAU,YAAY,CAAC,GAAmB,EAAE,IAAe,EAAE,OAA6B;IAC/F,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;QAC1B,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;IAC1B,CAAC;SAAM,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC;QACtC,IAAI,SAAS,EAAE,CAAC;YACf,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACP,IAAI,GAAG,IAAI,CAAC,KAAe,IAAI,EAAE,CAAC;QACnC,CAAC;IACF,CAAC;IAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,CAAC,GAAG,GAAG,CAAC,aAAa,CAAkB,GAAG,CAAC,CAAC;QAClD,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;QACxB,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACnC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACf,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE;YACvC,CAAC,CAAC,eAAe,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;QACH,+IAA+I;IAChJ,CAAC;SAAM,CAAC;QACP,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC;IACxB,CAAC;IAED,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAElD,2FAA2F;IAC3F,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,UAAU;QAAE,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;IACtE,OAAO,GAAG,CAAC;AACZ,CAAC","sourcesContent":["import { CellModel } from \"@omegagrid/grid-core\";\nimport { BaseRenderer } from \"./BaseRenderer\";\nimport { CellRendererOptions } from \"../types\";\nimport { dom } from \"@omegagrid/core\";\n\nexport function TextRenderer(div: HTMLDivElement, cell: CellModel, options?: CellRendererOptions) : HTMLDivElement {\n\tlet text = '';\n\tif (cell.hasDisplayValue) {\n\t\ttext = cell.displayValue;\n\t} else if (cell.value != null) {\n\t\tconst formatter = cell.valueFormatter;\n\t\tif (formatter) {\n\t\t\ttext = formatter(cell.value as string);\n\t\t} else {\n\t\t\ttext = cell.value as string ?? '';\n\t\t}\n\t}\n\t\n\tif (cell.hyperlink) {\n\t\tconst a = dom.createElement<HTMLLinkElement>('a');\n\t\ta.href = cell.hyperlink;\n\t\ta.textContent = text;\n\t\ta.setAttribute('target', '_blank');\n\t\tdom.empty(div);\n\t\tdiv.appendChild(a);\n\t\ta.addEventListener('pointerdown', (e) => {\n\t\t\te.stopPropagation();\n\t\t});\n\t\t// div.innerHTML = `<a href=\"${cell.hyperlink}\" target=\"_blank\" rel=\"noopener noreferrer\" onpointerdown=\"event.stopPropagation()\">${text}</a>`;\n\t} else {\n\t\tdiv.textContent = text;\n\t}\n\n\tdiv = BaseRenderer.call(this, div, cell, options);\n\n\t// If word wrap is off (whiteSpace != 'pre-wrap'), set it to 'pre' to allow for line breaks\n\tif (div.style.whiteSpace !== 'pre-wrap') div.style.whiteSpace = 'pre';\n\treturn div;\n}"]}
1
+ {"version":3,"file":"TextRenderer.js","sourceRoot":"","sources":["../../src/renderers/TextRenderer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAEtC,MAAM,UAAU,YAAY,CAAC,GAAmB,EAAE,IAAe,EAAE,OAA6B;IAC/F,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;QAC1B,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;IAC1B,CAAC;SAAM,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7B,sEAAsE;QACtE,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC;IAC5B,CAAC;SAAM,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC;QACtC,IAAI,SAAS,EAAE,CAAC;YACf,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACP,IAAI,GAAG,IAAI,CAAC,KAAe,IAAI,EAAE,CAAC;QACnC,CAAC;IACF,CAAC;IAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,CAAC,GAAG,GAAG,CAAC,aAAa,CAAkB,GAAG,CAAC,CAAC;QAClD,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;QACxB,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACnC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACf,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE;YACvC,CAAC,CAAC,eAAe,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;QACH,+IAA+I;IAChJ,CAAC;SAAM,CAAC;QACP,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC;IACxB,CAAC;IAED,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAElD,2FAA2F;IAC3F,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,UAAU;QAAE,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;IACtE,OAAO,GAAG,CAAC;AACZ,CAAC","sourcesContent":["import { CellModel } from \"@omegagrid/grid-core\";\nimport { BaseRenderer } from \"./BaseRenderer\";\nimport { CellRendererOptions } from \"../types\";\nimport { dom } from \"@omegagrid/core\";\n\nexport function TextRenderer(div: HTMLDivElement, cell: CellModel, options?: CellRendererOptions) : HTMLDivElement {\n\tlet text = '';\n\tif (cell.hasDisplayValue) {\n\t\ttext = cell.displayValue;\n\t} else if (cell.quotePrefix) {\n\t\t// quote prefixed value is a plain text, the prefix is never displayed\n\t\ttext = cell.formattedValue;\n\t} else if (cell.value != null) {\n\t\tconst formatter = cell.valueFormatter;\n\t\tif (formatter) {\n\t\t\ttext = formatter(cell.value as string);\n\t\t} else {\n\t\t\ttext = cell.value as string ?? '';\n\t\t}\n\t}\n\t\n\tif (cell.hyperlink) {\n\t\tconst a = dom.createElement<HTMLLinkElement>('a');\n\t\ta.href = cell.hyperlink;\n\t\ta.textContent = text;\n\t\ta.setAttribute('target', '_blank');\n\t\tdom.empty(div);\n\t\tdiv.appendChild(a);\n\t\ta.addEventListener('pointerdown', (e) => {\n\t\t\te.stopPropagation();\n\t\t});\n\t\t// div.innerHTML = `<a href=\"${cell.hyperlink}\" target=\"_blank\" rel=\"noopener noreferrer\" onpointerdown=\"event.stopPropagation()\">${text}</a>`;\n\t} else {\n\t\tdiv.textContent = text;\n\t}\n\n\tdiv = BaseRenderer.call(this, div, cell, options);\n\n\t// If word wrap is off (whiteSpace != 'pre-wrap'), set it to 'pre' to allow for line breaks\n\tif (div.style.whiteSpace !== 'pre-wrap') div.style.whiteSpace = 'pre';\n\treturn div;\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"grid.editing.d.ts","sourceRoot":"","sources":["../../src/ui/grid.editing.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAwB,aAAa,EAA2B,UAAU,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxI,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAI9B,MAAM,MAAM,aAAa,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAA;CACrB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG;IAC3C,KAAK,CAAC,EAAE,OAAO,CAAA;CACf,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG;IAC3C,WAAW,EAAE,MAAM,CAAA;CACnB,CAAC;AAEF,qBAAa,WAAW;IAmBX,QAAQ,CAAC,IAAI,EAAE,IAAI;IAjB/B,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,MAAM,CAAa;IAE3B,YAAY,UAAS;IACrB,SAAS,UAAS;IAElB,IAAI,KAAK,6CAA6B;IACtC,IAAI,SAAS,kDAAiC;IAC9C,IAAI,QAAQ,kCAAgC;IAC5C,IAAI,MAAM,uCAA8B;IACxC,IAAI,KAAK,4BAA6B;IACtC,IAAI,SAAS,YAA2B;IACxC,IAAI,YAAY,eAAyB;IAEzC,OAAO,CAAC,YAAY,CAAS;IAC7B,IAAI,aAAa,YAAiE;gBAE7D,IAAI,EAAE,IAAI;IAE/B,OAAO,CAAC,IAAI,EAAE,SAAS;IAIvB,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,GAAG,UAAU,EAAE,aAAa,UAAO,EAAE,WAAW,UAAQ;IAIxG,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,aAAa,GAAG,UAAU,CAAC,EAAE,EAAE,aAAa,UAAO,EAAE,WAAW,UAAQ;IAyDjH,gBAAgB;IAKhB,cAAc,CAAC,KAAK,UAAO;IAQ3B,SAAS,CAAC,YAAY,GAAE,OAAc;IAuBtC,OAAO;IASP,UAAU;IAOV,UAAU,CAAC,OAAO,EAAE,aAAa;IAYjC,aAAa,CAAC,OAAO,EAAE,aAAa;IAYpC,UAAU,CAAC,OAAO,EAAE,aAAa;IAYjC,aAAa,CAAC,OAAO,EAAE,aAAa;IAYpC,QAAQ,CAAC,OAAO,EAAE,aAAa;IAY/B,WAAW,CAAC,OAAO,EAAE,aAAa;IAYlC,cAAc,CAAC,aAAa,UAAO;IAMnC,SAAS,CAAC,IAAI,EAAE,SAAS;IAoBzB,gBAAgB;IAUhB,oBAAoB;IAMpB,aAAa;IA4Bb,OAAO,CAAC,WAAW;IA2FnB,OAAO,CAAC,SAAS;IAIX,KAAK;IAoBX,YAAY,CAAC,IAAI,EAAE,SAAS;IAM5B,IAAI;IA6BJ,IAAI;IA6BJ,iBAAiB,CAAC,EAAE,EAAE,MAAM;IAI5B,KAAK,CAAC,KAAK,CAAC,EAAE,WAAW;IASzB,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW;CAW3B"}
1
+ {"version":3,"file":"grid.editing.d.ts","sourceRoot":"","sources":["../../src/ui/grid.editing.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,SAAS,EAA0D,aAAa,EAA2B,UAAU,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC1K,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAI9B,MAAM,MAAM,aAAa,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAA;CACrB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG;IAC3C,KAAK,CAAC,EAAE,OAAO,CAAA;CACf,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG;IAC3C,WAAW,EAAE,MAAM,CAAA;CACnB,CAAC;AAEF,qBAAa,WAAW;IAmBX,QAAQ,CAAC,IAAI,EAAE,IAAI;IAjB/B,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,MAAM,CAAa;IAE3B,YAAY,UAAS;IACrB,SAAS,UAAS;IAElB,IAAI,KAAK,6CAA6B;IACtC,IAAI,SAAS,kDAAiC;IAC9C,IAAI,QAAQ,kCAAgC;IAC5C,IAAI,MAAM,uCAA8B;IACxC,IAAI,KAAK,4BAA6B;IACtC,IAAI,SAAS,YAA2B;IACxC,IAAI,YAAY,eAAyB;IAEzC,OAAO,CAAC,YAAY,CAAS;IAC7B,IAAI,aAAa,YAAiE;gBAE7D,IAAI,EAAE,IAAI;IAE/B,OAAO,CAAC,IAAI,EAAE,SAAS;IAIvB,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,GAAG,UAAU,EAAE,aAAa,UAAO,EAAE,WAAW,UAAQ;IAIxG,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,aAAa,GAAG,UAAU,CAAC,EAAE,EAAE,aAAa,UAAO,EAAE,WAAW,UAAQ;IA6DjH,gBAAgB;IAKhB,cAAc,CAAC,KAAK,UAAO;IAQ3B,SAAS,CAAC,YAAY,GAAE,OAAc;IAuBtC,OAAO;IASP,UAAU;IAOV,UAAU,CAAC,OAAO,EAAE,aAAa;IAYjC,aAAa,CAAC,OAAO,EAAE,aAAa;IAYpC,UAAU,CAAC,OAAO,EAAE,aAAa;IAYjC,aAAa,CAAC,OAAO,EAAE,aAAa;IAYpC,QAAQ,CAAC,OAAO,EAAE,aAAa;IAY/B,WAAW,CAAC,OAAO,EAAE,aAAa;IAYlC,cAAc,CAAC,aAAa,UAAO;IAMnC,SAAS,CAAC,IAAI,EAAE,SAAS;IAoBzB,gBAAgB;IAUhB,oBAAoB;IAMpB,aAAa;IA4Bb,OAAO,CAAC,WAAW;IA2FnB,OAAO,CAAC,SAAS;IAIX,KAAK;IAoBX,YAAY,CAAC,IAAI,EAAE,SAAS;IAM5B,IAAI;IA6BJ,IAAI;IA6BJ,iBAAiB,CAAC,EAAE,EAAE,MAAM;IAI5B,KAAK,CAAC,KAAK,CAAC,EAAE,WAAW;IASzB,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW;CAW3B"}
@@ -1,6 +1,6 @@
1
1
  import { csv, utils } from "@omegagrid/core";
2
2
  import { FormulaEditor, getEditorFactory } from "../editors";
3
- import { isFormula, CellRange, decodeColumn, decodeRow } from "@omegagrid/grid-core";
3
+ import { isFormula, hasQuotePrefix, stripQuotePrefix, CellRange, decodeColumn, decodeRow } from "@omegagrid/grid-core";
4
4
  import { GridEditEvent, GridEvent } from "./grid.events";
5
5
  import constants from "../constants";
6
6
  export class GridEditing {
@@ -38,6 +38,9 @@ export class GridEditing {
38
38
  if (utils.isObject(values[i])) {
39
39
  newProps = values[i];
40
40
  newValue = ('v' in newProps) ? newProps.v : undefined;
41
+ if (cell.quotePrefixable && hasQuotePrefix(newValue)) {
42
+ newProps = { ...newProps, dv: stripQuotePrefix(newValue) };
43
+ }
41
44
  }
42
45
  else {
43
46
  newValue = values[i];
@@ -51,6 +54,8 @@ export class GridEditing {
51
54
  if (oldValue !== newValue) {
52
55
  oldProps = { v: oldValue, dv: cell.displayValue };
53
56
  cell.value = newValue;
57
+ if (cell.quotePrefix)
58
+ cell.displayValue = stripQuotePrefix(newValue);
54
59
  }
55
60
  }
56
61
  if (dispatchEvent && oldProps) {
@@ -97,7 +102,7 @@ export class GridEditing {
97
102
  if (cell && this.canEdit(cell)) {
98
103
  this.grid.logger.info(`start edit ${(new CellRange(cell.c, cell.r)).A1}`);
99
104
  let formula = true;
100
- if (isFormula(initialValue)) {
105
+ if (this.model.formulasEnabled && isFormula(initialValue)) {
101
106
  this.editor = this.getFormulaEditor().open(this.grid, initialValue);
102
107
  }
103
108
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"grid.editing.js","sourceRoot":"","sources":["../../src/ui/grid.editing.ts"],"names":[],"mappings":"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","sourcesContent":["import { csv, Matrix, utils } from \"@omegagrid/core\";\nimport { FormulaEditor, getEditorFactory } from \"../editors\";\nimport { BaseEditor } from \"../editors/baseEditor\";\nimport { CellModel, isFormula, CellRange, CellValueType, decodeColumn, decodeRow, CellSource, CellAddress } from \"@omegagrid/grid-core\";\nimport { Grid } from \"./grid\";\nimport { GridEditEvent, GridEvent } from \"./grid.events\";\nimport constants from \"../constants\";\n\nexport type DeleteOptions = {\n\tindex: number,\n\tcount: number,\n\tdispatchEvent?: boolean,\n\tfromHistory?: boolean\n};\n\nexport type InsertOptions = DeleteOptions & {\n\tafter?: boolean\n};\n\nexport type MovingOptions = DeleteOptions & {\n\ttargetIndex: number\n};\n\nexport class GridEditing {\n\n\tprivate editorMap = new Map<string, BaseEditor>();\n\tprivate editor: BaseEditor;\n\n\tcolumnMoving = false;\n\trowMoving = false;\n\n\tget model() { return this.grid.model }\n\tget selection() { return this.grid.selection }\n\tget selector() { return this.grid.selector }\n\tget events() { return this.grid.events }\n\tget table() { return this.grid.table }\n\tget isEditing() { return !!this.editor }\n\tget activeEditor() { return this.editor }\n\n\tprivate _formulaMode = false;\n\tget isFormulaMode() { return this._formulaMode || this.grid.group?.isFormulaMode }\n\n\tconstructor(readonly grid: Grid) { }\n\n\tcanEdit(cell: CellModel) {\n\t\treturn (cell.editable || this.grid.designMode) && cell.type !== 'a';\n\t}\n\n\tupdateCell(cell: CellModel, value: CellValueType | CellSource, dispatchEvent = true, fromHistory = false) {\n\t\tthis.updateCells([cell], [value], dispatchEvent, fromHistory);\n\t}\n\n\tupdateCells(cells: CellModel[], values: (CellValueType | CellSource)[], dispatchEvent = true, fromHistory = false) {\n\t\tlet oldValues: CellValueType[];\n\t\tlet oldPropsArr: CellValueType[];\n\t\tlet newValues: CellValueType[];\n\t\tlet newPropsArr: CellValueType[];\n\t\tlet editedCells: CellModel[];\n\t\tcells.forEach((cell, i) => {\n\t\t\tconst oldValue = cell.value;\n\t\t\tlet newValue: CellValueType;\n\t\t\tlet newProps: CellSource;\n\n\t\t\tif (utils.isObject(values[i])) {\n\t\t\t\tnewProps = values[i] as CellSource;\n\t\t\t\tnewValue = ('v' in newProps) ? newProps.v : undefined;\n\t\t\t} else {\n\t\t\t\tnewValue = values[i] as CellValueType;\n\t\t\t}\n\n\t\t\tlet oldProps: Partial<CellSource>;\n\t\t\tif (newProps) {\n\t\t\t\toldProps = cell.update(newProps);\n\t\t\t} else {\n\t\t\t\tcell.clearFormula();\n\t\t\t\tif (oldValue !== newValue) {\n\t\t\t\t\toldProps = {v: oldValue, dv: cell.displayValue};\n\t\t\t\t\tcell.value = newValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (dispatchEvent && oldProps) {\n\t\t\t\toldValues = oldValues || [];\n\t\t\t\toldPropsArr = oldPropsArr || [];\n\t\t\t\tnewValues = newValues || [];\n\t\t\t\tnewPropsArr = newPropsArr || [];\n\t\t\t\teditedCells = editedCells || [];\n\t\t\t\toldValues.push(oldValue);\n\t\t\t\toldPropsArr.push(oldProps);\n\t\t\t\tnewValues.push(newValue);\n\t\t\t\tnewPropsArr.push(newProps);\n\t\t\t\teditedCells.push(cell);\n\t\t\t}\n\t\t});\n\n\t\tif (dispatchEvent && editedCells?.length) {\n\t\t\tthis.grid.dispatchEvent(new GridEditEvent({\n\t\t\t\tgrid: this.grid,\n\t\t\t\tfromHistory: !!fromHistory,\n\t\t\t\tcells: editedCells,\n\t\t\t\teditType: 'value',\n\t\t\t\tnewValues: newValues,\n\t\t\t\tnewProps: newPropsArr,\n\t\t\t\toldValues: oldValues,\n\t\t\t\toldProps: oldPropsArr\n\t\t\t}));\n\t\t}\n\t}\n\n\tstartFormulaMode() {\n\t\tthis._formulaMode = true;\n\t\tif (this.grid.group) this.grid.group.startFormulaMode(this.grid);\n\t}\n\n\tendFormulaMode(group = true) {\n\t\tthis._formulaMode = false;\n\t\tif (group && this.grid.group) this.grid.group.endFormulaMode();\n\t\tthis.grid.selecting.hideFormulaSelector();\n\t\tthis.grid.selecting.removeFormulaHighlight();\n\t\tthis.grid.selecting.showSelector();\n\t}\n\n\tstartEdit(initialValue: unknown = null) {\n\t\tconst cell = this.grid.selecting.activeCell;\n\t\tif (cell && this.canEdit(cell)) {\n\t\t\tthis.grid.logger.info(`start edit ${(new CellRange(cell.c, cell.r)).A1}`);\n\t\t\tlet formula = true;\n\t\t\tif (isFormula(initialValue as string)) {\n\t\t\t\tthis.editor = this.getFormulaEditor().open(this.grid, initialValue);\n\t\t\t} else {\n\t\t\t\tif (initialValue == null && cell.hasOwnFormula) {\n\t\t\t\t\tthis.editor = this.getFormulaEditor().open(this.grid, initialValue);\n\t\t\t\t} else {\n\t\t\t\t\tformula = false;\n\t\t\t\t\tthis.editor = this.getEditor(cell).open(this.grid, initialValue);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.grid.dispatchEvent(new GridEvent('startEdit', {grid: this.grid}));\n\t\t\tif (formula) {\n\t\t\t\tthis.startFormulaMode();\n\t\t\t\tthis.grid.dispatchEvent(new GridEvent('startFormulaEdit', {grid: this.grid}));\n\t\t\t}\n\t\t}\n\t}\n\n\tendEdit() {\n\t\tif (!this.editor) return;\n\t\tthis.grid.logger.info('end edit');\n\t\tthis.grid.editing.endFormulaMode();\n\t\tthis.editor?.close();\n\t\tthis.editor = null;\n\t\tthis.grid.dispatchEvent(new GridEvent('endEdit', {grid: this.grid}));\n\t}\n\n\tcommitEdit() {\n\t\tif (this.editor) {\n\t\t\tthis.editor.commit();\n\t\t\tthis.endEdit();\n\t\t}\n\t}\n\n\tinsertRows(options: InsertOptions) {\n\t\tconst newRows = this.model.insertRows(options.index, options.count, options.after);\n\t\tthis.grid.rendering.renderAll(true);\n\t\tif (utils.ifNull(options.dispatchEvent, true)) this.grid.dispatchEvent(new GridEditEvent({\n\t\t\tgrid: this.grid,\n\t\t\tfromHistory: !!options.fromHistory,\n\t\t\teditType: 'insert_row',\n\t\t\tnewValues: newRows\n\t\t}));\n\t\treturn newRows;\n\t}\n\n\tinsertColumns(options: InsertOptions) {\n\t\tconst newColumns = this.model.insertColumns(options.index , options.count, options.after);\n\t\tthis.grid.rendering.renderAll(true);\n\t\tif (utils.ifNull(options.dispatchEvent, true)) this.grid.dispatchEvent(new GridEditEvent({\n\t\t\tgrid: this.grid,\n\t\t\tfromHistory: !!options.fromHistory,\n\t\t\teditType: 'insert_column',\n\t\t\tnewValues: newColumns\n\t\t}));\n\t\treturn newColumns;\n\t}\n\n\tdeleteRows(options: DeleteOptions) {\n\t\tconst deletedRows = this.model.deleteRows(options.index, options.count);\n\t\tthis.grid.rendering.renderAll(true);\n\t\tif (utils.ifNull(options.dispatchEvent, true)) this.grid.dispatchEvent(new GridEditEvent({\n\t\t\tgrid: this.grid,\n\t\t\tfromHistory: !!options.fromHistory,\n\t\t\teditType: 'delete_row',\n\t\t\toldValues: deletedRows\n\t\t}));\n\t\treturn deletedRows;\n\t}\n\n\tdeleteColumns(options: DeleteOptions) {\n\t\tconst deletedColumns = this.model.deleteColumns(options.index, options.count);\n\t\tthis.grid.rendering.renderAll(true);\n\t\tif (utils.ifNull(options.dispatchEvent, true)) this.grid.dispatchEvent(new GridEditEvent({\n\t\t\tgrid: this.grid,\n\t\t\tfromHistory: !!options.fromHistory,\n\t\t\teditType: 'delete_column',\n\t\t\toldValues: deletedColumns\n\t\t}));\n\t\treturn deletedColumns\n\t}\n\n\tmoveRows(options: MovingOptions) {\n\t\tthis.model.moveRows(options.index, options.count, options.targetIndex);\n\t\tthis.grid.rendering.renderAll(false);\n\t\tif (utils.ifNull(options.dispatchEvent, true)) this.grid.dispatchEvent(new GridEditEvent({\n\t\t\tgrid: this.grid,\n\t\t\tfromHistory: options.fromHistory,\n\t\t\teditType: 'move_row',\n\t\t\toldValues: [new CellRange(0, options.index, Infinity, options.index + options.count - 1)],\n\t\t\tnewValues: [new CellRange(0, options.targetIndex, Infinity, options.targetIndex + options.count - 1)],\n\t\t}));\n\t}\n\n\tmoveColumns(options: MovingOptions) {\n\t\tthis.model.moveColumns(options.index, options.count, options.targetIndex);\n\t\tthis.grid.rendering.renderAll(false);\n\t\tif (utils.ifNull(options.dispatchEvent, true)) this.grid.dispatchEvent(new GridEditEvent({\n\t\t\tgrid: this.grid,\n\t\t\tfromHistory: options.fromHistory,\n\t\t\teditType: 'move_column',\n\t\t\toldValues: [new CellRange(options.index, options.index + options.count - 1, Infinity)],\n\t\t\tnewValues: [new CellRange(options.targetIndex, 0, options.targetIndex + options.count - 1, Infinity)],\n\t\t}));\n\t}\n\n\tclearSelection(dispatchEvent = true) {\n\t\tconst cells = this.model.getCellArray(this.selection.range).filter(cell => this.canEdit(cell));\n\t\tthis.updateCells(cells, cells.map(() => null as CellModel), dispatchEvent);\n\t\tthis.grid.rendering.updateCells(cells, true);\n\t}\n\n\tgetEditor(cell: CellModel) {\n\t\tlet factory = cell.editorFactory;\n\t\tlet key: string = null;\n\n\t\tif (factory) {\n\t\t\tkey = cell.address;\n\t\t} else {\n\t\t\tkey = cell.type;\n\t\t\tfactory = getEditorFactory(cell.type);\n\t\t}\n\n\t\tif (!this.editorMap.has(key)) {\n\t\t\tconst editor = factory(cell, this.model.options.editing) as BaseEditor;\n\t\t\tthis.grid.shadowRoot.appendChild(editor);\n\t\t\tthis.editorMap.set(key, editor);\n\t\t}\n\n\t\treturn this.editorMap.get(key);\n\t}\n\n\tgetFormulaEditor() {\n\t\tconst type = 'formula';\n\t\tif (!this.editorMap.has(type)) {\n\t\t\tconst editor = new FormulaEditor();\n\t\t\tthis.grid.shadowRoot.appendChild(editor);\n\t\t\tthis.editorMap.set(type, editor);\n\t\t}\n\t\treturn this.editorMap.get(type);\n\t}\n\n\tgetSelectionCellData() {\n\t\treturn this.model.getCellMatrix(this.selection.range).map(\n\t\t\trow => row.map(cell => cell.getSourceData({displayValue: true}))\n\t\t);\n\t}\n\n\tcopySelection() {\n\t\tconst customClipboardSupport = ClipboardItem.supports(constants.CUSTOM_CLIPBOARD_TYPE);\n\t\tconst values = this.model.getValuesInRange(this.selection.range, customClipboardSupport);\n\t\tthis.grid.selecting.hideSelector();\n\t\tthis.grid.selecting.showCopySelector();\n\n\t\tconst { columns, rows } = this.selection.range.size;\n\t\tlet csvText = csv.arrayToCsv(values, {decimalSeparator: this.model.options.systemDecimalSeparator});\n\t\tif (columns === 1 && rows === 1) csvText = csvText.replace(/[\\r\\n]+$/, '');\n\n\t\tconst clipboardData: Record<string, string|Blob> = {'text/plain': new Blob([csvText], {\n\t\t\ttype: \"text/plain\"\n\t\t})};\n\n\t\tif (customClipboardSupport) {\n\t\t\tclipboardData[constants.CUSTOM_CLIPBOARD_TYPE] = new Blob([JSON.stringify(this.getSelectionCellData())], {\n\t\t\t\ttype: \"application/json\"\n\t\t\t});\n\t\t} else {\n\t\t\tthis.grid.logger.warn(\"Browser does not support custom clipboard type\");\n\t\t}\n\n\t\tnavigator.clipboard.write([new ClipboardItem(clipboardData)]).then(\n\t\t\t() => this.grid.logger.info(\"selected content copied\"),\n\t\t\t() => this.grid.logger.error(\"copy rejected\")\n\t\t);\n\t}\n\n\tprivate pasteMatrix(data: Matrix<string | CellSource>) {\n\t\tconst range = this.selection.range;\n\t\tconst cells: CellModel[] = [];\n\t\tconst cellValues: CellValueType[] = [];\n\t\tconst rowPasteMode = this.model.options.clipboard?.rowPasteMode;\n\t\tconst columnPasteMode = this.model.options.clipboard?.columnPasteMode;\n\n\t\tconst pasteProps = (this.model.options.clipboard?.pasteProps ?? 'all') == 'all'\n\t\t\t? null : this.model.options.clipboard.pasteProps as (keyof CellSource)[];\n\n\t\tconst height = data.length;\n\t\tconst width = height > 0 ? data[0].length : 0;\n\n\t\t// insert rows if needed\n\t\tif (rowPasteMode == 'insert') {\n\t\t\tthis.insertRows({index: range.r1, count: height, after: false});\n\t\t} else if (rowPasteMode == 'rewrite_append' && range.r1 + height > this.model.rows.length - 1) {\n\t\t\tthis.insertRows({\n\t\t\t\tindex: this.model.rows.length - 1,\n\t\t\t\tcount: range.r1 + height - this.model.rows.length,\n\t\t\t\tafter: true\n\t\t\t});\n\t\t}\n\n\t\t// insert columns if needed\n\t\tif (columnPasteMode == 'insert') {\n\t\t\tthis.insertColumns({index: range.c1, count: width, after: false});\n\t\t} else if (columnPasteMode == 'rewrite_append' && range.c1 + width > this.model.columns.length - 1) {\n\t\t\tthis.insertColumns({\n\t\t\t\tindex: this.model.columns.length - 1,\n\t\t\t\tcount: range.c1 + width - this.model.columns.length,\n\t\t\t\tafter: true\n\t\t\t});\n\t\t}\n\n\t\t// duplicate clipboard matrix over selection range if it fits\n\t\tconst dataFitsSelection = height > 0 && width > 0 &&\n\t\t\trange.size.rows % height == 0 && range.size.columns % width == 0;\n\n\t\tlet rMax = Math.min(\n\t\t\tdataFitsSelection ? range.r2 : range.r1 + height - 1,\n\t\t\tthis.model.rows.length - 1\n\t\t);\n\n\t\tconst cMax = Math.min(\n\t\t\tdataFitsSelection ? range.c2 : range.c1 + width - 1,\n\t\t\tthis.model.columns.length - 1\n\t\t);\n\n\t\tfor (let r = range.r1; r <= rMax; r++) {\n\t\t\tconst i = (r - range.r1) % height;\n\t\t\tconst row = this.model.rows[r];\n\t\t\tif (!row) break;\n\n\t\t\tif (this.model.options.clipboard?.skipHiddenRows) {\n\t\t\t\tif (!row.visible) {\n\t\t\t\t\t// resize target range to accommodate skipped row, but only if clipboard data is larger than selection\n\t\t\t\t\tif (height > range.size.rows) rMax++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (let c = range.c1; c <= cMax; c++) {\n\t\t\t\tconst cell = row.cell(c);\n\t\t\t\tif (!cell.editable) continue;\n\n\t\t\t\tconst j = (c - range.c1) % data[i].length;\n\n\t\t\t\tif (pasteProps && utils.isObject(data[i][j])) {\n\t\t\t\t\t// filter unwanted properties\n\t\t\t\t\tconst updateProps: Partial<CellSource> = {};\n\t\t\t\t\tpasteProps.forEach(<T extends keyof Partial<CellSource>>(key: T) => {\n\t\t\t\t\t\tupdateProps[key] = (data[i][j] as CellSource)[key];\n\t\t\t\t\t});\n\n\t\t\t\t\t// copiing properties of cell with display value into cell without display value\n\t\t\t\t\tif (!cell.prefersDisplayValue) updateProps.dv = undefined;\n\n\t\t\t\t\tcellValues.push(updateProps);\n\t\t\t\t} else {\n\t\t\t\t\tcellValues.push(data[i][j]);\n\t\t\t\t}\n\n\t\t\t\tcells.push(cell);\n\t\t\t}\n\t\t}\n\n\t\tthis.updateCells(cells, cellValues, true);\n\t\tthis.grid.rendering.updateCells(cells, true);\n\t}\n\n\tprivate pasteText(text: string) {\n\t\tthis.pasteMatrix(csv.csvToArray(text));\n\t}\n\n\tasync paste() {\n\t\tthis.grid.selecting.hideCopySelector();\n\n\t\ttry\t{\n\t\t\tconst clipboardItems = await navigator.clipboard.read();\n\t\t\tif (clipboardItems.length == 0) return;\n\t\t\tconst clipboardItem = clipboardItems[0];\n\t\t\tif (clipboardItem.types.includes(constants.CUSTOM_CLIPBOARD_TYPE)) {\n\t\t\t\tconst data = await clipboardItem.getType(constants.CUSTOM_CLIPBOARD_TYPE);\n\t\t\t\tthis.pasteMatrix(JSON.parse(await data.text()));\n\t\t\t} else if (clipboardItem.types.includes('text/plain')) {\n\t\t\t\tconst data = await clipboardItem.getType('text/plain');\n\t\t\t\tthis.pasteText(await data.text());\n\t\t\t}\n\t\t} catch (_e) {\n\t\t\tthis.grid.logger.error(\"paste rejected\");\n\t\t\treturn;\n\t\t}\n\t}\n\n\topenComments(cell: CellModel) {\n\t\tsetTimeout(() => {\n\t\t\tthis.grid.comment.attachTo(this.grid.table.getCellByCellModel(cell), cell, true);\n\t\t}, 100);\n\t}\n\n\tundo() {\n\t\tlet cells: CellModel[];\n\t\tconst [item] = this.grid.history.pop();\n\t\tif (!item) return;\n\t\tswitch (item.type) {\n\t\t\tcase 'value':\n\t\t\t\tcells = item.addresses.map(addr => this.model.getCellByA1(addr));\n\t\t\t\tthis.updateCells(cells, item.oldProps, true, true);\n\t\t\t\tthis.grid.rendering.updateCells(cells, true);\n\t\t\t\tbreak;\n\t\t\tcase 'insert_column':\n\t\t\t\titem.newValues.forEach((_, i) => this.grid.editing.deleteColumns({\n\t\t\t\t\tindex: decodeColumn(item.addresses[i]),\n\t\t\t\t\tcount: 1,\n\t\t\t\t\tdispatchEvent: true,\n\t\t\t\t\tfromHistory: true\n\t\t\t\t}));\n\t\t\t\tbreak;\n\t\t\tcase 'insert_row':\n\t\t\t\titem.newValues.forEach((_, i) => this.grid.editing.deleteRows({\n\t\t\t\t\tindex: decodeRow(item.addresses[i]),\n\t\t\t\t\tcount: 1,\n\t\t\t\t\tdispatchEvent: true,\n\t\t\t\t\tfromHistory: true\n\t\t\t\t}));\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tredo() {\n\t\tlet cells: CellModel[];\n\t\tconst [item] = this.grid.history.pop2();\n\t\tif (!item) return;\n\t\tswitch (item.type) {\n\t\t\tcase 'value':\n\t\t\t\tcells = item.addresses.map(addr => this.model.getCellByA1(addr))\n\t\t\t\tthis.updateCells(cells, item.newValues, true, true);\n\t\t\t\tthis.grid.rendering.updateCells(cells, true);\n\t\t\t\tbreak;\n\t\t\tcase 'insert_column':\n\t\t\t\titem.newValues.forEach((_, i) => this.grid.editing.insertColumns({\n\t\t\t\t\tindex: decodeColumn(item.addresses[i]),\n\t\t\t\t\tcount: 1,\n\t\t\t\t\tdispatchEvent: true,\n\t\t\t\t\tfromHistory: true\n\t\t\t\t}));\n\t\t\t\tbreak;\n\t\t\tcase 'insert_row':\n\t\t\t\titem.newValues.forEach((_, i) => this.grid.editing.insertRows({\n\t\t\t\t\tindex: decodeRow(item.addresses[i]),\n\t\t\t\t\tcount: 1,\n\t\t\t\t\tdispatchEvent: true,\n\t\t\t\t\tfromHistory: true\n\t\t\t\t}));\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tstartColumnMoving(_c: number) {\n\t\tthis.columnMoving = true;\n\t}\n\n\tmerge(range?: CellAddress) {\n\t\tconst r = range ? CellRange.fromA1(range) : this.selection.range;\n\t\tconst cell = this.model.rows[r.r1]?.cell(r.c1);\n\t\tif (!cell) return;\n\t\tthis.model.merges.add({r: r.r1, c: r.c1, rs: r.size.rows, cs: r.size.columns});\n\t\tthis.grid.rendering.renderCells({vertical: true, horizontal: true});\n\t\tthis.grid.selecting.select(r);\n\t}\n\n\tunmerge(range?: CellAddress) {\n\t\tconst r = range ? CellRange.fromA1(range) : this.selection.range;\n\t\tconst cell = this.model.rows[r.r1]?.cell(r.c1);\n\t\tif (!cell) return;\n\t\tconst merge = this.model.merges.mergedCells.get(cell.address);\n\t\tif (!merge) return;\n\t\tthis.model.merges.remove(cell.address);\n\t\tthis.grid.rendering.renderCells({vertical: true, horizontal: true});\n\t\tthis.grid.selecting.select(new CellRange(merge.c, merge.r, merge.c + merge.cs - 1, merge.r + merge.rs - 1));\n\t}\n\n}\n"]}
1
+ {"version":3,"file":"grid.editing.js","sourceRoot":"","sources":["../../src/ui/grid.editing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAU,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE7D,OAAO,EAAa,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,SAAS,EAAiB,YAAY,EAAE,SAAS,EAA2B,MAAM,sBAAsB,CAAC;AAE1K,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,SAAS,MAAM,cAAc,CAAC;AAiBrC,MAAM,OAAO,WAAW;IAQvB,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA,CAAC,CAAC;IACtC,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAA,CAAC,CAAC;IAC9C,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAA,CAAC,CAAC;IAC5C,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAA,CAAC,CAAC;IACxC,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA,CAAC,CAAC;IACtC,IAAI,SAAS,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAA,CAAC,CAAC;IACxC,IAAI,YAAY,KAAK,OAAO,IAAI,CAAC,MAAM,CAAA,CAAC,CAAC;IAGzC,IAAI,aAAa,KAAK,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAA,CAAC,CAAC;IAElF,YAAqB,IAAU;QAAV,SAAI,GAAJ,IAAI,CAAM;QAjBvB,cAAS,GAAG,IAAI,GAAG,EAAsB,CAAC;QAGlD,iBAAY,GAAG,KAAK,CAAC;QACrB,cAAS,GAAG,KAAK,CAAC;QAUV,iBAAY,GAAG,KAAK,CAAC;IAGM,CAAC;IAEpC,OAAO,CAAC,IAAe;QACtB,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC;IACrE,CAAC;IAED,UAAU,CAAC,IAAe,EAAE,KAAiC,EAAE,aAAa,GAAG,IAAI,EAAE,WAAW,GAAG,KAAK;QACvG,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;IAC/D,CAAC;IAED,WAAW,CAAC,KAAkB,EAAE,MAAsC,EAAE,aAAa,GAAG,IAAI,EAAE,WAAW,GAAG,KAAK;QAChH,IAAI,SAA0B,CAAC;QAC/B,IAAI,WAA4B,CAAC;QACjC,IAAI,SAA0B,CAAC;QAC/B,IAAI,WAA4B,CAAC;QACjC,IAAI,WAAwB,CAAC;QAC7B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;YAC5B,IAAI,QAAuB,CAAC;YAC5B,IAAI,QAA6B,CAAC;YAElC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/B,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAe,CAAC;gBACnC,QAAQ,GAAG,CAAC,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACtD,IAAI,IAAI,CAAC,eAAe,IAAI,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACtD,QAAQ,GAAG,EAAC,GAAG,QAAQ,EAAE,EAAE,EAAE,gBAAgB,CAAC,QAAQ,CAAW,EAAC,CAAC;gBACpE,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAkB,CAAC;YACvC,CAAC;YAED,IAAI,QAA6B,CAAC;YAClC,IAAI,QAAQ,EAAE,CAAC;gBACd,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBAC3B,QAAQ,GAAG,EAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,YAAY,EAAC,CAAC;oBAChD,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;oBACtB,IAAI,IAAI,CAAC,WAAW;wBAAE,IAAI,CAAC,YAAY,GAAG,gBAAgB,CAAC,QAAQ,CAAW,CAAC;gBAChF,CAAC;YACF,CAAC;YAED,IAAI,aAAa,IAAI,QAAQ,EAAE,CAAC;gBAC/B,SAAS,GAAG,SAAS,IAAI,EAAE,CAAC;gBAC5B,WAAW,GAAG,WAAW,IAAI,EAAE,CAAC;gBAChC,SAAS,GAAG,SAAS,IAAI,EAAE,CAAC;gBAC5B,WAAW,GAAG,WAAW,IAAI,EAAE,CAAC;gBAChC,WAAW,GAAG,WAAW,IAAI,EAAE,CAAC;gBAChC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACzB,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC3B,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACzB,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC3B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,IAAI,aAAa,IAAI,WAAW,EAAE,MAAM,EAAE,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC;gBACzC,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,KAAK,EAAE,WAAW;gBAClB,QAAQ,EAAE,OAAO;gBACjB,SAAS,EAAE,SAAS;gBACpB,QAAQ,EAAE,WAAW;gBACrB,SAAS,EAAE,SAAS;gBACpB,QAAQ,EAAE,WAAW;aACrB,CAAC,CAAC,CAAC;QACL,CAAC;IACF,CAAC;IAED,gBAAgB;QACf,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC;IAED,cAAc,CAAC,KAAK,GAAG,IAAI;QAC1B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAC/D,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;IACpC,CAAC;IAED,SAAS,CAAC,eAAwB,IAAI;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;QAC5C,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC1E,IAAI,OAAO,GAAG,IAAI,CAAC;YACnB,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,IAAI,SAAS,CAAC,YAAsB,CAAC,EAAE,CAAC;gBACrE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YACrE,CAAC;iBAAM,CAAC;gBACP,IAAI,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBAChD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;gBACrE,CAAC;qBAAM,CAAC;oBACP,OAAO,GAAG,KAAK,CAAC;oBAChB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;gBAClE,CAAC;YACF,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,WAAW,EAAE,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC;YACvE,IAAI,OAAO,EAAE,CAAC;gBACb,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,kBAAkB,EAAE,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC;YAC/E,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO;QACN,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QACzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,SAAS,EAAE,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,UAAU;QACT,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACrB,IAAI,CAAC,OAAO,EAAE,CAAC;QAChB,CAAC;IACF,CAAC;IAED,UAAU,CAAC,OAAsB;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACnF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC;gBACxF,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW;gBAClC,QAAQ,EAAE,YAAY;gBACtB,SAAS,EAAE,OAAO;aAClB,CAAC,CAAC,CAAC;QACJ,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,aAAa,CAAC,OAAsB;QACnC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,EAAG,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAC1F,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC;gBACxF,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW;gBAClC,QAAQ,EAAE,eAAe;gBACzB,SAAS,EAAE,UAAU;aACrB,CAAC,CAAC,CAAC;QACJ,OAAO,UAAU,CAAC;IACnB,CAAC;IAED,UAAU,CAAC,OAAsB;QAChC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACxE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC;gBACxF,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW;gBAClC,QAAQ,EAAE,YAAY;gBACtB,SAAS,EAAE,WAAW;aACtB,CAAC,CAAC,CAAC;QACJ,OAAO,WAAW,CAAC;IACpB,CAAC;IAED,aAAa,CAAC,OAAsB;QACnC,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9E,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC;gBACxF,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW;gBAClC,QAAQ,EAAE,eAAe;gBACzB,SAAS,EAAE,cAAc;aACzB,CAAC,CAAC,CAAC;QACJ,OAAO,cAAc,CAAA;IACtB,CAAC;IAED,QAAQ,CAAC,OAAsB;QAC9B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;QACvE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC;gBACxF,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,QAAQ,EAAE,UAAU;gBACpB,SAAS,EAAE,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBACzF,SAAS,EAAE,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;aACrG,CAAC,CAAC,CAAC;IACL,CAAC;IAED,WAAW,CAAC,OAAsB;QACjC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;QAC1E,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC;gBACxF,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,QAAQ,EAAE,aAAa;gBACvB,SAAS,EAAE,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;gBACtF,SAAS,EAAE,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;aACrG,CAAC,CAAC,CAAC;IACL,CAAC;IAED,cAAc,CAAC,aAAa,GAAG,IAAI;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/F,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAiB,CAAC,EAAE,aAAa,CAAC,CAAC;QAC3E,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,SAAS,CAAC,IAAe;QACxB,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC;QACjC,IAAI,GAAG,GAAW,IAAI,CAAC;QAEvB,IAAI,OAAO,EAAE,CAAC;YACb,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;QACpB,CAAC;aAAM,CAAC;YACP,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;YAChB,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAe,CAAC;YACvE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACzC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACjC,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,gBAAgB;QACf,MAAM,IAAI,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACzC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,oBAAoB;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,CACxD,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,EAAC,YAAY,EAAE,IAAI,EAAC,CAAC,CAAC,CAChE,CAAC;IACH,CAAC;IAED,aAAa;QACZ,MAAM,sBAAsB,GAAG,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QACvF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;QACzF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC;QAEvC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;QACpD,IAAI,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,EAAC,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,sBAAsB,EAAC,CAAC,CAAC;QACpG,IAAI,OAAO,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC;YAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAE3E,MAAM,aAAa,GAAgC,EAAC,YAAY,EAAE,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;gBACrF,IAAI,EAAE,YAAY;aAClB,CAAC,EAAC,CAAC;QAEJ,IAAI,sBAAsB,EAAE,CAAC;YAC5B,aAAa,CAAC,SAAS,CAAC,qBAAqB,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,EAAE;gBACxG,IAAI,EAAE,kBAAkB;aACxB,CAAC,CAAC;QACJ,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QACzE,CAAC;QAED,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CACjE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,EACtD,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAC7C,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,IAAiC;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QACnC,MAAM,KAAK,GAAgB,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAoB,EAAE,CAAC;QACvC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC;QAChE,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC;QAEtE,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK;YAC9E,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,UAAkC,CAAC;QAE1E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAE9C,wBAAwB;QACxB,IAAI,YAAY,IAAI,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,UAAU,CAAC,EAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAC,CAAC,CAAC;QACjE,CAAC;aAAM,IAAI,YAAY,IAAI,gBAAgB,IAAI,KAAK,CAAC,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/F,IAAI,CAAC,UAAU,CAAC;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;gBACjC,KAAK,EAAE,KAAK,CAAC,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM;gBACjD,KAAK,EAAE,IAAI;aACX,CAAC,CAAC;QACJ,CAAC;QAED,2BAA2B;QAC3B,IAAI,eAAe,IAAI,QAAQ,EAAE,CAAC;YACjC,IAAI,CAAC,aAAa,CAAC,EAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAC,CAAC,CAAC;QACnE,CAAC;aAAM,IAAI,eAAe,IAAI,gBAAgB,IAAI,KAAK,CAAC,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpG,IAAI,CAAC,aAAa,CAAC;gBAClB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;gBACpC,KAAK,EAAE,KAAK,CAAC,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM;gBACnD,KAAK,EAAE,IAAI;aACX,CAAC,CAAC;QACJ,CAAC;QAED,6DAA6D;QAC7D,MAAM,iBAAiB,GAAG,MAAM,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC;YAChD,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,IAAI,CAAC,CAAC;QAElE,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAClB,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,GAAG,CAAC,EACpD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAC1B,CAAC;QAEF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CACpB,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC,EACnD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAC7B,CAAC;QAEF,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,CAAC,GAAG;gBAAE,MAAM;YAEhB,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,EAAE,CAAC;gBAClD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;oBAClB,sGAAsG;oBACtG,IAAI,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI;wBAAE,IAAI,EAAE,CAAC;oBACrC,SAAS;gBACV,CAAC;YACF,CAAC;YAED,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,QAAQ;oBAAE,SAAS;gBAE7B,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBAE1C,IAAI,UAAU,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC9C,6BAA6B;oBAC7B,MAAM,WAAW,GAAwB,EAAE,CAAC;oBAC5C,UAAU,CAAC,OAAO,CAAC,CAAsC,GAAM,EAAE,EAAE;wBAClE,WAAW,CAAC,GAAG,CAAC,GAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAgB,CAAC,GAAG,CAAC,CAAC;oBACpD,CAAC,CAAC,CAAC;oBAEH,gFAAgF;oBAChF,IAAI,CAAC,IAAI,CAAC,mBAAmB;wBAAE,WAAW,CAAC,EAAE,GAAG,SAAS,CAAC;oBAE1D,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC9B,CAAC;qBAAM,CAAC;oBACP,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7B,CAAC;gBAED,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;QACF,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IAEO,SAAS,CAAC,IAAY;QAC7B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,KAAK;QACV,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC;QAEvC,IAAI,CAAC;YACJ,MAAM,cAAc,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACxD,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC;gBAAE,OAAO;YACvC,MAAM,aAAa,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YACxC,IAAI,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,qBAAqB,CAAC,EAAE,CAAC;gBACnE,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;gBAC1E,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACjD,CAAC;iBAAM,IAAI,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBACvD,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;gBACvD,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACnC,CAAC;QACF,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YACzC,OAAO;QACR,CAAC;IACF,CAAC;IAED,YAAY,CAAC,IAAe;QAC3B,UAAU,CAAC,GAAG,EAAE;YACf,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAClF,CAAC,EAAE,GAAG,CAAC,CAAC;IACT,CAAC;IAED,IAAI;QACH,IAAI,KAAkB,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,OAAO;gBACX,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;gBACjE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBACnD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC7C,MAAM;YACP,KAAK,eAAe;gBACnB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;oBAChE,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBACtC,KAAK,EAAE,CAAC;oBACR,aAAa,EAAE,IAAI;oBACnB,WAAW,EAAE,IAAI;iBACjB,CAAC,CAAC,CAAC;gBACJ,MAAM;YACP,KAAK,YAAY;gBAChB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;oBAC7D,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBACnC,KAAK,EAAE,CAAC;oBACR,aAAa,EAAE,IAAI;oBACnB,WAAW,EAAE,IAAI;iBACjB,CAAC,CAAC,CAAC;gBACJ,MAAM;QACR,CAAC;IACF,CAAC;IAED,IAAI;QACH,IAAI,KAAkB,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,OAAO;gBACX,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAA;gBAChE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBACpD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC7C,MAAM;YACP,KAAK,eAAe;gBACnB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;oBAChE,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBACtC,KAAK,EAAE,CAAC;oBACR,aAAa,EAAE,IAAI;oBACnB,WAAW,EAAE,IAAI;iBACjB,CAAC,CAAC,CAAC;gBACJ,MAAM;YACP,KAAK,YAAY;gBAChB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;oBAC7D,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBACnC,KAAK,EAAE,CAAC;oBACR,aAAa,EAAE,IAAI;oBACnB,WAAW,EAAE,IAAI;iBACjB,CAAC,CAAC,CAAC;gBACJ,MAAM;QACR,CAAC;IACF,CAAC;IAED,iBAAiB,CAAC,EAAU;QAC3B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,KAAmB;QACxB,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QACjE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,EAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAC,CAAC,CAAC;QACpE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,CAAC,KAAmB;QAC1B,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QACjE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9D,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAC,CAAC,CAAC;QACpE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7G,CAAC;CAED","sourcesContent":["import { csv, Matrix, utils } from \"@omegagrid/core\";\nimport { FormulaEditor, getEditorFactory } from \"../editors\";\nimport { BaseEditor } from \"../editors/baseEditor\";\nimport { CellModel, isFormula, hasQuotePrefix, stripQuotePrefix, CellRange, CellValueType, decodeColumn, decodeRow, CellSource, CellAddress } from \"@omegagrid/grid-core\";\nimport { Grid } from \"./grid\";\nimport { GridEditEvent, GridEvent } from \"./grid.events\";\nimport constants from \"../constants\";\n\nexport type DeleteOptions = {\n\tindex: number,\n\tcount: number,\n\tdispatchEvent?: boolean,\n\tfromHistory?: boolean\n};\n\nexport type InsertOptions = DeleteOptions & {\n\tafter?: boolean\n};\n\nexport type MovingOptions = DeleteOptions & {\n\ttargetIndex: number\n};\n\nexport class GridEditing {\n\n\tprivate editorMap = new Map<string, BaseEditor>();\n\tprivate editor: BaseEditor;\n\n\tcolumnMoving = false;\n\trowMoving = false;\n\n\tget model() { return this.grid.model }\n\tget selection() { return this.grid.selection }\n\tget selector() { return this.grid.selector }\n\tget events() { return this.grid.events }\n\tget table() { return this.grid.table }\n\tget isEditing() { return !!this.editor }\n\tget activeEditor() { return this.editor }\n\n\tprivate _formulaMode = false;\n\tget isFormulaMode() { return this._formulaMode || this.grid.group?.isFormulaMode }\n\n\tconstructor(readonly grid: Grid) { }\n\n\tcanEdit(cell: CellModel) {\n\t\treturn (cell.editable || this.grid.designMode) && cell.type !== 'a';\n\t}\n\n\tupdateCell(cell: CellModel, value: CellValueType | CellSource, dispatchEvent = true, fromHistory = false) {\n\t\tthis.updateCells([cell], [value], dispatchEvent, fromHistory);\n\t}\n\n\tupdateCells(cells: CellModel[], values: (CellValueType | CellSource)[], dispatchEvent = true, fromHistory = false) {\n\t\tlet oldValues: CellValueType[];\n\t\tlet oldPropsArr: CellValueType[];\n\t\tlet newValues: CellValueType[];\n\t\tlet newPropsArr: CellValueType[];\n\t\tlet editedCells: CellModel[];\n\t\tcells.forEach((cell, i) => {\n\t\t\tconst oldValue = cell.value;\n\t\t\tlet newValue: CellValueType;\n\t\t\tlet newProps: Partial<CellSource>;\n\n\t\t\tif (utils.isObject(values[i])) {\n\t\t\t\tnewProps = values[i] as CellSource;\n\t\t\t\tnewValue = ('v' in newProps) ? newProps.v : undefined;\n\t\t\t\tif (cell.quotePrefixable && hasQuotePrefix(newValue)) {\n\t\t\t\t\tnewProps = {...newProps, dv: stripQuotePrefix(newValue) as string};\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnewValue = values[i] as CellValueType;\n\t\t\t}\n\n\t\t\tlet oldProps: Partial<CellSource>;\n\t\t\tif (newProps) {\n\t\t\t\toldProps = cell.update(newProps);\n\t\t\t} else {\n\t\t\t\tcell.clearFormula();\n\t\t\t\tif (oldValue !== newValue) {\n\t\t\t\t\toldProps = {v: oldValue, dv: cell.displayValue};\n\t\t\t\t\tcell.value = newValue;\n\t\t\t\t\tif (cell.quotePrefix) cell.displayValue = stripQuotePrefix(newValue) as string;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (dispatchEvent && oldProps) {\n\t\t\t\toldValues = oldValues || [];\n\t\t\t\toldPropsArr = oldPropsArr || [];\n\t\t\t\tnewValues = newValues || [];\n\t\t\t\tnewPropsArr = newPropsArr || [];\n\t\t\t\teditedCells = editedCells || [];\n\t\t\t\toldValues.push(oldValue);\n\t\t\t\toldPropsArr.push(oldProps);\n\t\t\t\tnewValues.push(newValue);\n\t\t\t\tnewPropsArr.push(newProps);\n\t\t\t\teditedCells.push(cell);\n\t\t\t}\n\t\t});\n\n\t\tif (dispatchEvent && editedCells?.length) {\n\t\t\tthis.grid.dispatchEvent(new GridEditEvent({\n\t\t\t\tgrid: this.grid,\n\t\t\t\tfromHistory: !!fromHistory,\n\t\t\t\tcells: editedCells,\n\t\t\t\teditType: 'value',\n\t\t\t\tnewValues: newValues,\n\t\t\t\tnewProps: newPropsArr,\n\t\t\t\toldValues: oldValues,\n\t\t\t\toldProps: oldPropsArr\n\t\t\t}));\n\t\t}\n\t}\n\n\tstartFormulaMode() {\n\t\tthis._formulaMode = true;\n\t\tif (this.grid.group) this.grid.group.startFormulaMode(this.grid);\n\t}\n\n\tendFormulaMode(group = true) {\n\t\tthis._formulaMode = false;\n\t\tif (group && this.grid.group) this.grid.group.endFormulaMode();\n\t\tthis.grid.selecting.hideFormulaSelector();\n\t\tthis.grid.selecting.removeFormulaHighlight();\n\t\tthis.grid.selecting.showSelector();\n\t}\n\n\tstartEdit(initialValue: unknown = null) {\n\t\tconst cell = this.grid.selecting.activeCell;\n\t\tif (cell && this.canEdit(cell)) {\n\t\t\tthis.grid.logger.info(`start edit ${(new CellRange(cell.c, cell.r)).A1}`);\n\t\t\tlet formula = true;\n\t\t\tif (this.model.formulasEnabled && isFormula(initialValue as string)) {\n\t\t\t\tthis.editor = this.getFormulaEditor().open(this.grid, initialValue);\n\t\t\t} else {\n\t\t\t\tif (initialValue == null && cell.hasOwnFormula) {\n\t\t\t\t\tthis.editor = this.getFormulaEditor().open(this.grid, initialValue);\n\t\t\t\t} else {\n\t\t\t\t\tformula = false;\n\t\t\t\t\tthis.editor = this.getEditor(cell).open(this.grid, initialValue);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.grid.dispatchEvent(new GridEvent('startEdit', {grid: this.grid}));\n\t\t\tif (formula) {\n\t\t\t\tthis.startFormulaMode();\n\t\t\t\tthis.grid.dispatchEvent(new GridEvent('startFormulaEdit', {grid: this.grid}));\n\t\t\t}\n\t\t}\n\t}\n\n\tendEdit() {\n\t\tif (!this.editor) return;\n\t\tthis.grid.logger.info('end edit');\n\t\tthis.grid.editing.endFormulaMode();\n\t\tthis.editor?.close();\n\t\tthis.editor = null;\n\t\tthis.grid.dispatchEvent(new GridEvent('endEdit', {grid: this.grid}));\n\t}\n\n\tcommitEdit() {\n\t\tif (this.editor) {\n\t\t\tthis.editor.commit();\n\t\t\tthis.endEdit();\n\t\t}\n\t}\n\n\tinsertRows(options: InsertOptions) {\n\t\tconst newRows = this.model.insertRows(options.index, options.count, options.after);\n\t\tthis.grid.rendering.renderAll(true);\n\t\tif (utils.ifNull(options.dispatchEvent, true)) this.grid.dispatchEvent(new GridEditEvent({\n\t\t\tgrid: this.grid,\n\t\t\tfromHistory: !!options.fromHistory,\n\t\t\teditType: 'insert_row',\n\t\t\tnewValues: newRows\n\t\t}));\n\t\treturn newRows;\n\t}\n\n\tinsertColumns(options: InsertOptions) {\n\t\tconst newColumns = this.model.insertColumns(options.index , options.count, options.after);\n\t\tthis.grid.rendering.renderAll(true);\n\t\tif (utils.ifNull(options.dispatchEvent, true)) this.grid.dispatchEvent(new GridEditEvent({\n\t\t\tgrid: this.grid,\n\t\t\tfromHistory: !!options.fromHistory,\n\t\t\teditType: 'insert_column',\n\t\t\tnewValues: newColumns\n\t\t}));\n\t\treturn newColumns;\n\t}\n\n\tdeleteRows(options: DeleteOptions) {\n\t\tconst deletedRows = this.model.deleteRows(options.index, options.count);\n\t\tthis.grid.rendering.renderAll(true);\n\t\tif (utils.ifNull(options.dispatchEvent, true)) this.grid.dispatchEvent(new GridEditEvent({\n\t\t\tgrid: this.grid,\n\t\t\tfromHistory: !!options.fromHistory,\n\t\t\teditType: 'delete_row',\n\t\t\toldValues: deletedRows\n\t\t}));\n\t\treturn deletedRows;\n\t}\n\n\tdeleteColumns(options: DeleteOptions) {\n\t\tconst deletedColumns = this.model.deleteColumns(options.index, options.count);\n\t\tthis.grid.rendering.renderAll(true);\n\t\tif (utils.ifNull(options.dispatchEvent, true)) this.grid.dispatchEvent(new GridEditEvent({\n\t\t\tgrid: this.grid,\n\t\t\tfromHistory: !!options.fromHistory,\n\t\t\teditType: 'delete_column',\n\t\t\toldValues: deletedColumns\n\t\t}));\n\t\treturn deletedColumns\n\t}\n\n\tmoveRows(options: MovingOptions) {\n\t\tthis.model.moveRows(options.index, options.count, options.targetIndex);\n\t\tthis.grid.rendering.renderAll(false);\n\t\tif (utils.ifNull(options.dispatchEvent, true)) this.grid.dispatchEvent(new GridEditEvent({\n\t\t\tgrid: this.grid,\n\t\t\tfromHistory: options.fromHistory,\n\t\t\teditType: 'move_row',\n\t\t\toldValues: [new CellRange(0, options.index, Infinity, options.index + options.count - 1)],\n\t\t\tnewValues: [new CellRange(0, options.targetIndex, Infinity, options.targetIndex + options.count - 1)],\n\t\t}));\n\t}\n\n\tmoveColumns(options: MovingOptions) {\n\t\tthis.model.moveColumns(options.index, options.count, options.targetIndex);\n\t\tthis.grid.rendering.renderAll(false);\n\t\tif (utils.ifNull(options.dispatchEvent, true)) this.grid.dispatchEvent(new GridEditEvent({\n\t\t\tgrid: this.grid,\n\t\t\tfromHistory: options.fromHistory,\n\t\t\teditType: 'move_column',\n\t\t\toldValues: [new CellRange(options.index, options.index + options.count - 1, Infinity)],\n\t\t\tnewValues: [new CellRange(options.targetIndex, 0, options.targetIndex + options.count - 1, Infinity)],\n\t\t}));\n\t}\n\n\tclearSelection(dispatchEvent = true) {\n\t\tconst cells = this.model.getCellArray(this.selection.range).filter(cell => this.canEdit(cell));\n\t\tthis.updateCells(cells, cells.map(() => null as CellModel), dispatchEvent);\n\t\tthis.grid.rendering.updateCells(cells, true);\n\t}\n\n\tgetEditor(cell: CellModel) {\n\t\tlet factory = cell.editorFactory;\n\t\tlet key: string = null;\n\n\t\tif (factory) {\n\t\t\tkey = cell.address;\n\t\t} else {\n\t\t\tkey = cell.type;\n\t\t\tfactory = getEditorFactory(cell.type);\n\t\t}\n\n\t\tif (!this.editorMap.has(key)) {\n\t\t\tconst editor = factory(cell, this.model.options.editing) as BaseEditor;\n\t\t\tthis.grid.shadowRoot.appendChild(editor);\n\t\t\tthis.editorMap.set(key, editor);\n\t\t}\n\n\t\treturn this.editorMap.get(key);\n\t}\n\n\tgetFormulaEditor() {\n\t\tconst type = 'formula';\n\t\tif (!this.editorMap.has(type)) {\n\t\t\tconst editor = new FormulaEditor();\n\t\t\tthis.grid.shadowRoot.appendChild(editor);\n\t\t\tthis.editorMap.set(type, editor);\n\t\t}\n\t\treturn this.editorMap.get(type);\n\t}\n\n\tgetSelectionCellData() {\n\t\treturn this.model.getCellMatrix(this.selection.range).map(\n\t\t\trow => row.map(cell => cell.getSourceData({displayValue: true}))\n\t\t);\n\t}\n\n\tcopySelection() {\n\t\tconst customClipboardSupport = ClipboardItem.supports(constants.CUSTOM_CLIPBOARD_TYPE);\n\t\tconst values = this.model.getValuesInRange(this.selection.range, customClipboardSupport);\n\t\tthis.grid.selecting.hideSelector();\n\t\tthis.grid.selecting.showCopySelector();\n\n\t\tconst { columns, rows } = this.selection.range.size;\n\t\tlet csvText = csv.arrayToCsv(values, {decimalSeparator: this.model.options.systemDecimalSeparator});\n\t\tif (columns === 1 && rows === 1) csvText = csvText.replace(/[\\r\\n]+$/, '');\n\n\t\tconst clipboardData: Record<string, string|Blob> = {'text/plain': new Blob([csvText], {\n\t\t\ttype: \"text/plain\"\n\t\t})};\n\n\t\tif (customClipboardSupport) {\n\t\t\tclipboardData[constants.CUSTOM_CLIPBOARD_TYPE] = new Blob([JSON.stringify(this.getSelectionCellData())], {\n\t\t\t\ttype: \"application/json\"\n\t\t\t});\n\t\t} else {\n\t\t\tthis.grid.logger.warn(\"Browser does not support custom clipboard type\");\n\t\t}\n\n\t\tnavigator.clipboard.write([new ClipboardItem(clipboardData)]).then(\n\t\t\t() => this.grid.logger.info(\"selected content copied\"),\n\t\t\t() => this.grid.logger.error(\"copy rejected\")\n\t\t);\n\t}\n\n\tprivate pasteMatrix(data: Matrix<string | CellSource>) {\n\t\tconst range = this.selection.range;\n\t\tconst cells: CellModel[] = [];\n\t\tconst cellValues: CellValueType[] = [];\n\t\tconst rowPasteMode = this.model.options.clipboard?.rowPasteMode;\n\t\tconst columnPasteMode = this.model.options.clipboard?.columnPasteMode;\n\n\t\tconst pasteProps = (this.model.options.clipboard?.pasteProps ?? 'all') == 'all'\n\t\t\t? null : this.model.options.clipboard.pasteProps as (keyof CellSource)[];\n\n\t\tconst height = data.length;\n\t\tconst width = height > 0 ? data[0].length : 0;\n\n\t\t// insert rows if needed\n\t\tif (rowPasteMode == 'insert') {\n\t\t\tthis.insertRows({index: range.r1, count: height, after: false});\n\t\t} else if (rowPasteMode == 'rewrite_append' && range.r1 + height > this.model.rows.length - 1) {\n\t\t\tthis.insertRows({\n\t\t\t\tindex: this.model.rows.length - 1,\n\t\t\t\tcount: range.r1 + height - this.model.rows.length,\n\t\t\t\tafter: true\n\t\t\t});\n\t\t}\n\n\t\t// insert columns if needed\n\t\tif (columnPasteMode == 'insert') {\n\t\t\tthis.insertColumns({index: range.c1, count: width, after: false});\n\t\t} else if (columnPasteMode == 'rewrite_append' && range.c1 + width > this.model.columns.length - 1) {\n\t\t\tthis.insertColumns({\n\t\t\t\tindex: this.model.columns.length - 1,\n\t\t\t\tcount: range.c1 + width - this.model.columns.length,\n\t\t\t\tafter: true\n\t\t\t});\n\t\t}\n\n\t\t// duplicate clipboard matrix over selection range if it fits\n\t\tconst dataFitsSelection = height > 0 && width > 0 &&\n\t\t\trange.size.rows % height == 0 && range.size.columns % width == 0;\n\n\t\tlet rMax = Math.min(\n\t\t\tdataFitsSelection ? range.r2 : range.r1 + height - 1,\n\t\t\tthis.model.rows.length - 1\n\t\t);\n\n\t\tconst cMax = Math.min(\n\t\t\tdataFitsSelection ? range.c2 : range.c1 + width - 1,\n\t\t\tthis.model.columns.length - 1\n\t\t);\n\n\t\tfor (let r = range.r1; r <= rMax; r++) {\n\t\t\tconst i = (r - range.r1) % height;\n\t\t\tconst row = this.model.rows[r];\n\t\t\tif (!row) break;\n\n\t\t\tif (this.model.options.clipboard?.skipHiddenRows) {\n\t\t\t\tif (!row.visible) {\n\t\t\t\t\t// resize target range to accommodate skipped row, but only if clipboard data is larger than selection\n\t\t\t\t\tif (height > range.size.rows) rMax++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (let c = range.c1; c <= cMax; c++) {\n\t\t\t\tconst cell = row.cell(c);\n\t\t\t\tif (!cell.editable) continue;\n\n\t\t\t\tconst j = (c - range.c1) % data[i].length;\n\n\t\t\t\tif (pasteProps && utils.isObject(data[i][j])) {\n\t\t\t\t\t// filter unwanted properties\n\t\t\t\t\tconst updateProps: Partial<CellSource> = {};\n\t\t\t\t\tpasteProps.forEach(<T extends keyof Partial<CellSource>>(key: T) => {\n\t\t\t\t\t\tupdateProps[key] = (data[i][j] as CellSource)[key];\n\t\t\t\t\t});\n\n\t\t\t\t\t// copiing properties of cell with display value into cell without display value\n\t\t\t\t\tif (!cell.prefersDisplayValue) updateProps.dv = undefined;\n\n\t\t\t\t\tcellValues.push(updateProps);\n\t\t\t\t} else {\n\t\t\t\t\tcellValues.push(data[i][j]);\n\t\t\t\t}\n\n\t\t\t\tcells.push(cell);\n\t\t\t}\n\t\t}\n\n\t\tthis.updateCells(cells, cellValues, true);\n\t\tthis.grid.rendering.updateCells(cells, true);\n\t}\n\n\tprivate pasteText(text: string) {\n\t\tthis.pasteMatrix(csv.csvToArray(text));\n\t}\n\n\tasync paste() {\n\t\tthis.grid.selecting.hideCopySelector();\n\n\t\ttry\t{\n\t\t\tconst clipboardItems = await navigator.clipboard.read();\n\t\t\tif (clipboardItems.length == 0) return;\n\t\t\tconst clipboardItem = clipboardItems[0];\n\t\t\tif (clipboardItem.types.includes(constants.CUSTOM_CLIPBOARD_TYPE)) {\n\t\t\t\tconst data = await clipboardItem.getType(constants.CUSTOM_CLIPBOARD_TYPE);\n\t\t\t\tthis.pasteMatrix(JSON.parse(await data.text()));\n\t\t\t} else if (clipboardItem.types.includes('text/plain')) {\n\t\t\t\tconst data = await clipboardItem.getType('text/plain');\n\t\t\t\tthis.pasteText(await data.text());\n\t\t\t}\n\t\t} catch (_e) {\n\t\t\tthis.grid.logger.error(\"paste rejected\");\n\t\t\treturn;\n\t\t}\n\t}\n\n\topenComments(cell: CellModel) {\n\t\tsetTimeout(() => {\n\t\t\tthis.grid.comment.attachTo(this.grid.table.getCellByCellModel(cell), cell, true);\n\t\t}, 100);\n\t}\n\n\tundo() {\n\t\tlet cells: CellModel[];\n\t\tconst [item] = this.grid.history.pop();\n\t\tif (!item) return;\n\t\tswitch (item.type) {\n\t\t\tcase 'value':\n\t\t\t\tcells = item.addresses.map(addr => this.model.getCellByA1(addr));\n\t\t\t\tthis.updateCells(cells, item.oldProps, true, true);\n\t\t\t\tthis.grid.rendering.updateCells(cells, true);\n\t\t\t\tbreak;\n\t\t\tcase 'insert_column':\n\t\t\t\titem.newValues.forEach((_, i) => this.grid.editing.deleteColumns({\n\t\t\t\t\tindex: decodeColumn(item.addresses[i]),\n\t\t\t\t\tcount: 1,\n\t\t\t\t\tdispatchEvent: true,\n\t\t\t\t\tfromHistory: true\n\t\t\t\t}));\n\t\t\t\tbreak;\n\t\t\tcase 'insert_row':\n\t\t\t\titem.newValues.forEach((_, i) => this.grid.editing.deleteRows({\n\t\t\t\t\tindex: decodeRow(item.addresses[i]),\n\t\t\t\t\tcount: 1,\n\t\t\t\t\tdispatchEvent: true,\n\t\t\t\t\tfromHistory: true\n\t\t\t\t}));\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tredo() {\n\t\tlet cells: CellModel[];\n\t\tconst [item] = this.grid.history.pop2();\n\t\tif (!item) return;\n\t\tswitch (item.type) {\n\t\t\tcase 'value':\n\t\t\t\tcells = item.addresses.map(addr => this.model.getCellByA1(addr))\n\t\t\t\tthis.updateCells(cells, item.newValues, true, true);\n\t\t\t\tthis.grid.rendering.updateCells(cells, true);\n\t\t\t\tbreak;\n\t\t\tcase 'insert_column':\n\t\t\t\titem.newValues.forEach((_, i) => this.grid.editing.insertColumns({\n\t\t\t\t\tindex: decodeColumn(item.addresses[i]),\n\t\t\t\t\tcount: 1,\n\t\t\t\t\tdispatchEvent: true,\n\t\t\t\t\tfromHistory: true\n\t\t\t\t}));\n\t\t\t\tbreak;\n\t\t\tcase 'insert_row':\n\t\t\t\titem.newValues.forEach((_, i) => this.grid.editing.insertRows({\n\t\t\t\t\tindex: decodeRow(item.addresses[i]),\n\t\t\t\t\tcount: 1,\n\t\t\t\t\tdispatchEvent: true,\n\t\t\t\t\tfromHistory: true\n\t\t\t\t}));\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tstartColumnMoving(_c: number) {\n\t\tthis.columnMoving = true;\n\t}\n\n\tmerge(range?: CellAddress) {\n\t\tconst r = range ? CellRange.fromA1(range) : this.selection.range;\n\t\tconst cell = this.model.rows[r.r1]?.cell(r.c1);\n\t\tif (!cell) return;\n\t\tthis.model.merges.add({r: r.r1, c: r.c1, rs: r.size.rows, cs: r.size.columns});\n\t\tthis.grid.rendering.renderCells({vertical: true, horizontal: true});\n\t\tthis.grid.selecting.select(r);\n\t}\n\n\tunmerge(range?: CellAddress) {\n\t\tconst r = range ? CellRange.fromA1(range) : this.selection.range;\n\t\tconst cell = this.model.rows[r.r1]?.cell(r.c1);\n\t\tif (!cell) return;\n\t\tconst merge = this.model.merges.mergedCells.get(cell.address);\n\t\tif (!merge) return;\n\t\tthis.model.merges.remove(cell.address);\n\t\tthis.grid.rendering.renderCells({vertical: true, horizontal: true});\n\t\tthis.grid.selecting.select(new CellRange(merge.c, merge.r, merge.c + merge.cs - 1, merge.r + merge.rs - 1));\n\t}\n\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@omegagrid/grid",
3
- "version": "0.10.87",
3
+ "version": "0.10.89",
4
4
  "license": "UNLICENSED",
5
5
  "description": "Universal datagrid component",
6
6
  "main": "./dist/index.js",
@@ -35,12 +35,12 @@
35
35
  "_prepublish": "yarn test && yarn lint"
36
36
  },
37
37
  "dependencies": {
38
- "@omegagrid/commands": "^0.10.87",
39
- "@omegagrid/core": "^0.10.87",
40
- "@omegagrid/grid-core": "^0.10.87",
41
- "@omegagrid/localize": "^0.10.87",
42
- "@omegagrid/tabs": "^0.10.87",
43
- "@omegagrid/tree": "^0.10.87",
38
+ "@omegagrid/commands": "^0.10.89",
39
+ "@omegagrid/core": "^0.10.89",
40
+ "@omegagrid/grid-core": "^0.10.89",
41
+ "@omegagrid/localize": "^0.10.89",
42
+ "@omegagrid/tabs": "^0.10.89",
43
+ "@omegagrid/tree": "^0.10.89",
44
44
  "@stdlib/stats": "^0.0.13",
45
45
  "date-fns": "^3.2.0",
46
46
  "lit": "^3.1.1",