@omegagrid/grid 0.10.24 → 0.10.26

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.
@@ -1 +1 @@
1
- {"version":3,"file":"filterFactory.d.ts","sourceRoot":"","sources":["../../src/filters/filterFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,WAAW,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAsC1C,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,GAAG,UAAU,CAMrF"}
1
+ {"version":3,"file":"filterFactory.d.ts","sourceRoot":"","sources":["../../src/filters/filterFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,WAAW,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAyC1C,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,GAAG,UAAU,CAMrF"}
@@ -24,7 +24,10 @@ const createDropdownFilter = (column) => {
24
24
  };
25
25
  const filterMap = new Map([
26
26
  ['t', () => dom.createElement('og-filter-text')],
27
- ['n', () => dom.createElement('og-filter-text')],
27
+ ['n', () => dom.createElement('og-filter-range')],
28
+ ['d', () => dom.createElement('og-filter-range')],
29
+ ['dt', () => dom.createElement('og-filter-range')],
30
+ ['tm', () => dom.createElement('og-filter-range')],
28
31
  ['b', () => dom.createElement('og-filter-checkbox')],
29
32
  ['s', (column) => createDropdownFilter(column)],
30
33
  ['m', (column) => createDropdownFilter(column)]
@@ -1 +1 @@
1
- {"version":3,"file":"filterFactory.js","sourceRoot":"","sources":["../../src/filters/filterFactory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAItC,SAAS,oBAAoB,CAAC,MAAmB;IAChD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAe,EAAE,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAC,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC;IAC7C,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,oBAAoB,GAAG,CAAC,MAAmB,EAAE,EAAE;IACpD,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAiB,oBAAoB,CAAC,CAAC;IAC1E,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC,OAAsB,CAAC;IACnD,CAAC;SAAM,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACjC,SAAS,CAAC,KAAK,GAAG,MAAM,CAAC,aAA2B,CAAC;IACtD,CAAC;SAAM,CAAC;QACP,SAAS,CAAC,KAAK,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC,CAAA;AAED,MAAM,SAAS,GAAG,IAAI,GAAG,CAAgD;IACxE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAChD,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAChD,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;IACpD,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;CAC/C,CAAC,CAAC;AAEH,MAAM,UAAU,YAAY,CAAC,MAAmB,EAAE,UAAuB;IACxE,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAe,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAC9F,SAAS,CAAC,WAAW,GAAG,MAAM,CAAC;IAC/B,SAAS,CAAC,WAAW,GAAG,UAAU,CAAC;IACnC,OAAO,SAAS,CAAC;AAClB,CAAC","sourcesContent":["import { CellType, ColumnModel, FilterModel } from \"@omegagrid/grid-core\";\nimport { BaseFilter } from \"./baseFilter\";\nimport { dom } from \"@omegagrid/core\";\nimport { DropdownFilter } from \"./dropdownFilter\";\nimport { TreeAdapter, TreeSource } from \"@omegagrid/tree\";\n\nfunction collectDropdownItems(column: ColumnModel) : TreeSource {\n\tconst values = new Map<string, string>();\n\t\n\tfor (let r = 0; r < column.model.rows.length; r++) {\n\t\tconst cell = column.cell(r);\n\t\tvalues.set(cell.value as string, (cell.displayValue ?? cell.value ?? \"\").toString());\n\t}\n\n\tconst items: TreeSource = [];\n\tvalues.forEach((v, k) => items.push({k, v}));\n\treturn items;\n}\n\nconst createDropdownFilter = (column: ColumnModel) => {\n\tconst component = dom.createElement<DropdownFilter>('og-filter-dropdown');\n\tif (column.adapter) {\n\t\tcomponent.adapter = column.adapter as TreeAdapter;\n\t} else if (column.editorContent) {\n\t\tcomponent.items = column.editorContent as TreeSource;\n\t} else {\n\t\tcomponent.items = collectDropdownItems(column);\n\t}\n\treturn component;\n}\n\nconst filterMap = new Map<CellType, (column: ColumnModel) => BaseFilter>([\n\t['t', () => dom.createElement('og-filter-text')],\n\t['n', () => dom.createElement('og-filter-text')],\n\t['b', () => dom.createElement('og-filter-checkbox')],\n\t['s', (column) => createDropdownFilter(column)],\n\t['m', (column) => createDropdownFilter(column)]\n]);\n\nexport function createFilter(column: ColumnModel, filteModel: FilterModel): BaseFilter {\n\tconst factory = filterMap.get(column.type);\n\tconst component: BaseFilter = factory ? factory(column) : dom.createElement('og-filter-text');\n\tcomponent.columnModel = column;\n\tcomponent.filterModel = filteModel;\n\treturn component;\n}\n"]}
1
+ {"version":3,"file":"filterFactory.js","sourceRoot":"","sources":["../../src/filters/filterFactory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAItC,SAAS,oBAAoB,CAAC,MAAmB;IAChD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAe,EAAE,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAC,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC;IAC7C,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,oBAAoB,GAAG,CAAC,MAAmB,EAAE,EAAE;IACpD,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAiB,oBAAoB,CAAC,CAAC;IAC1E,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC,OAAsB,CAAC;IACnD,CAAC;SAAM,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACjC,SAAS,CAAC,KAAK,GAAG,MAAM,CAAC,aAA2B,CAAC;IACtD,CAAC;SAAM,CAAC;QACP,SAAS,CAAC,KAAK,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC,CAAA;AAED,MAAM,SAAS,GAAG,IAAI,GAAG,CAAgD;IACxE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAChD,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;IACjD,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;IACjD,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;IAClD,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;IAClD,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;IACpD,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;CAC/C,CAAC,CAAC;AAEH,MAAM,UAAU,YAAY,CAAC,MAAmB,EAAE,UAAuB;IACxE,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAe,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAC9F,SAAS,CAAC,WAAW,GAAG,MAAM,CAAC;IAC/B,SAAS,CAAC,WAAW,GAAG,UAAU,CAAC;IACnC,OAAO,SAAS,CAAC;AAClB,CAAC","sourcesContent":["import { CellType, ColumnModel, FilterModel } from \"@omegagrid/grid-core\";\nimport { BaseFilter } from \"./baseFilter\";\nimport { dom } from \"@omegagrid/core\";\nimport { DropdownFilter } from \"./dropdownFilter\";\nimport { TreeAdapter, TreeSource } from \"@omegagrid/tree\";\n\nfunction collectDropdownItems(column: ColumnModel) : TreeSource {\n\tconst values = new Map<string, string>();\n\t\n\tfor (let r = 0; r < column.model.rows.length; r++) {\n\t\tconst cell = column.cell(r);\n\t\tvalues.set(cell.value as string, (cell.displayValue ?? cell.value ?? \"\").toString());\n\t}\n\n\tconst items: TreeSource = [];\n\tvalues.forEach((v, k) => items.push({k, v}));\n\treturn items;\n}\n\nconst createDropdownFilter = (column: ColumnModel) => {\n\tconst component = dom.createElement<DropdownFilter>('og-filter-dropdown');\n\tif (column.adapter) {\n\t\tcomponent.adapter = column.adapter as TreeAdapter;\n\t} else if (column.editorContent) {\n\t\tcomponent.items = column.editorContent as TreeSource;\n\t} else {\n\t\tcomponent.items = collectDropdownItems(column);\n\t}\n\treturn component;\n}\n\nconst filterMap = new Map<CellType, (column: ColumnModel) => BaseFilter>([\n\t['t', () => dom.createElement('og-filter-text')],\n\t['n', () => dom.createElement('og-filter-range')],\n\t['d', () => dom.createElement('og-filter-range')],\n\t['dt', () => dom.createElement('og-filter-range')],\n\t['tm', () => dom.createElement('og-filter-range')],\n\t['b', () => dom.createElement('og-filter-checkbox')],\n\t['s', (column) => createDropdownFilter(column)],\n\t['m', (column) => createDropdownFilter(column)]\n]);\n\nexport function createFilter(column: ColumnModel, filteModel: FilterModel): BaseFilter {\n\tconst factory = filterMap.get(column.type);\n\tconst component: BaseFilter = factory ? factory(column) : dom.createElement('og-filter-text');\n\tcomponent.columnModel = column;\n\tcomponent.filterModel = filteModel;\n\treturn component;\n}\n"]}
@@ -1,5 +1,7 @@
1
1
  export * from "./textFilter";
2
2
  export * from "./checkboxFilter";
3
3
  export * from "./dropdownFilter";
4
+ export * from "./rangeFilter";
5
+ export * from "./rangeFilterPopup";
4
6
  export * from "./filterFactory";
5
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/filters/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/filters/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC"}
@@ -1,5 +1,7 @@
1
1
  export * from "./textFilter";
2
2
  export * from "./checkboxFilter";
3
3
  export * from "./dropdownFilter";
4
+ export * from "./rangeFilter";
5
+ export * from "./rangeFilterPopup";
4
6
  export * from "./filterFactory";
5
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/filters/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC","sourcesContent":["export * from \"./textFilter\";\nexport * from \"./checkboxFilter\";\nexport * from \"./dropdownFilter\";\nexport * from \"./filterFactory\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/filters/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC","sourcesContent":["export * from \"./textFilter\";\nexport * from \"./checkboxFilter\";\nexport * from \"./dropdownFilter\";\nexport * from \"./rangeFilter\";\nexport * from \"./rangeFilterPopup\";\nexport * from \"./filterFactory\";\n"]}
@@ -0,0 +1,15 @@
1
+ import { BaseFilter } from "./baseFilter";
2
+ export declare class RangeFilter extends BaseFilter {
3
+ static styles: import("lit").CSSResult[];
4
+ private dropdownEl;
5
+ private popupEl;
6
+ private get popupType();
7
+ private _currentRange;
8
+ private _formatLabel;
9
+ private _onApply;
10
+ private _onClear;
11
+ render: () => import("lit-html").TemplateResult<1>;
12
+ activate(): void;
13
+ deactivate(): void;
14
+ }
15
+ //# sourceMappingURL=rangeFilter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rangeFilter.d.ts","sourceRoot":"","sources":["../../src/filters/rangeFilter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAsB1C,qBACa,WAAY,SAAQ,UAAU;IAE1C,MAAM,CAAC,MAAM,4BAaV;IAGH,OAAO,CAAC,UAAU,CAAW;IAG7B,OAAO,CAAC,OAAO,CAAmB;IAElC,OAAO,KAAK,SAAS,GAGpB;IAED,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,YAAY;IAoBpB,OAAO,CAAC,QAAQ,CAQf;IAED,OAAO,CAAC,QAAQ,CAIf;IAED,MAAM,6CASJ;IAEF,QAAQ;IASR,UAAU;CAIV"}
@@ -0,0 +1,135 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import constants from "../constants";
8
+ import { customElement, query } from 'lit/decorators.js';
9
+ import { BaseFilter } from "./baseFilter";
10
+ import { html, css } from 'lit';
11
+ const isRangeTerm = (v) => !!v && typeof v === 'object' && !Array.isArray(v) && v.kind === 'range';
12
+ const toDate = (v) => {
13
+ if (v == null || v === '')
14
+ return null;
15
+ if (v instanceof Date)
16
+ return v;
17
+ const d = new Date(v);
18
+ return Number.isNaN(d.getTime()) ? null : d;
19
+ };
20
+ const toNum = (v) => {
21
+ if (v == null || v === '')
22
+ return null;
23
+ const n = typeof v === 'number' ? v : Number(v);
24
+ return Number.isNaN(n) ? null : n;
25
+ };
26
+ let RangeFilter = class RangeFilter extends BaseFilter {
27
+ constructor() {
28
+ super(...arguments);
29
+ this._onApply = (e) => {
30
+ if (e.from == null && e.to == null) {
31
+ this.clearFilter();
32
+ }
33
+ else {
34
+ this.filter({ kind: 'range', from: e.from, to: e.to });
35
+ }
36
+ this.dropdownEl?.close();
37
+ this.deactivate();
38
+ };
39
+ this._onClear = () => {
40
+ this.clearFilter();
41
+ this.dropdownEl?.close();
42
+ this.deactivate();
43
+ };
44
+ this.render = () => html `
45
+ <og-dropdown color="transparent" alignment="left">
46
+ <div slot="label">${this._formatLabel()}</div>
47
+ <og-filter-range-popup slot="content"
48
+ type="${this.popupType}"
49
+ @apply="${this._onApply}"
50
+ @clear="${this._onClear}">
51
+ </og-filter-range-popup>
52
+ </og-dropdown>
53
+ `;
54
+ }
55
+ get popupType() {
56
+ const t = this.columnModel?.type;
57
+ return (t === 'd' || t === 'dt' || t === 'tm') ? t : 'n';
58
+ }
59
+ _currentRange() {
60
+ const r = isRangeTerm(this.currentValue) ? this.currentValue : null;
61
+ if (!r)
62
+ return { from: null, to: null };
63
+ switch (this.popupType) {
64
+ case 'n': return { from: toNum(r.from), to: toNum(r.to) };
65
+ case 'd':
66
+ case 'dt': return { from: toDate(r.from), to: toDate(r.to) };
67
+ case 'tm': return {
68
+ from: r.from == null ? null : String(r.from),
69
+ to: r.to == null ? null : String(r.to),
70
+ };
71
+ }
72
+ }
73
+ _formatLabel() {
74
+ const r = isRangeTerm(this.currentValue) ? this.currentValue : null;
75
+ if (!r || (r.from == null && r.to == null))
76
+ return '';
77
+ const type = this.popupType;
78
+ const fmt = (v) => {
79
+ if (v == null)
80
+ return '';
81
+ if (v instanceof Date)
82
+ return v.toLocaleDateString();
83
+ if (type === 'd' || type === 'dt') {
84
+ const d = toDate(v);
85
+ if (d)
86
+ return d.toLocaleDateString();
87
+ }
88
+ return String(v);
89
+ };
90
+ const from = fmt(r.from);
91
+ const to = fmt(r.to);
92
+ if (from && to)
93
+ return `${from} – ${to}`;
94
+ if (from)
95
+ return `≥ ${from}`;
96
+ return `≤ ${to}`;
97
+ }
98
+ activate() {
99
+ super.activate();
100
+ const { from, to } = this._currentRange();
101
+ setTimeout(() => {
102
+ this.popupEl?.setValues(from, to);
103
+ this.dropdownEl?.open();
104
+ }, 50);
105
+ }
106
+ deactivate() {
107
+ this.dropdownEl?.close();
108
+ super.deactivate();
109
+ }
110
+ };
111
+ RangeFilter.styles = [...BaseFilter.styles, css `
112
+ :host {
113
+ display: block;
114
+ box-sizing: border-box;
115
+ height: 100%;
116
+ width: 100%;
117
+ }
118
+
119
+ og-dropdown {
120
+ display: flex;
121
+ width: 100%;
122
+ height: 100%;
123
+ }
124
+ `];
125
+ __decorate([
126
+ query('og-dropdown')
127
+ ], RangeFilter.prototype, "dropdownEl", void 0);
128
+ __decorate([
129
+ query(`${constants.PREFIX}-filter-range-popup`)
130
+ ], RangeFilter.prototype, "popupEl", void 0);
131
+ RangeFilter = __decorate([
132
+ customElement(`${constants.PREFIX}-filter-range`)
133
+ ], RangeFilter);
134
+ export { RangeFilter };
135
+ //# sourceMappingURL=rangeFilter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rangeFilter.js","sourceRoot":"","sources":["../../src/filters/rangeFilter.ts"],"names":[],"mappings":"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","sourcesContent":["import constants from \"../constants\";\nimport { customElement, query } from 'lit/decorators.js';\nimport { BaseFilter } from \"./baseFilter\";\nimport { html, css } from 'lit';\nimport { FilterRange } from \"@omegagrid/grid-core\";\nimport { Dropdown } from \"@omegagrid/core\";\nimport { RangeFilterApplyEvent, RangeFilterPopup, RangeFilterType, RangeValue } from \"./rangeFilterPopup\";\n\nconst isRangeTerm = (v: unknown): v is FilterRange =>\n\t!!v && typeof v === 'object' && !Array.isArray(v) && (v as FilterRange).kind === 'range';\n\nconst toDate = (v: unknown): Date | null => {\n\tif (v == null || v === '') return null;\n\tif (v instanceof Date) return v;\n\tconst d = new Date(v as string);\n\treturn Number.isNaN(d.getTime()) ? null : d;\n};\n\nconst toNum = (v: unknown): number | null => {\n\tif (v == null || v === '') return null;\n\tconst n = typeof v === 'number' ? v : Number(v);\n\treturn Number.isNaN(n) ? null : n;\n};\n\n@customElement(`${constants.PREFIX}-filter-range`)\nexport class RangeFilter extends BaseFilter {\n\n\tstatic styles = [...BaseFilter.styles, css`\n\t\t:host {\n\t\t\tdisplay: block;\n\t\t\tbox-sizing: border-box;\n\t\t\theight: 100%;\n\t\t\twidth: 100%;\n\t\t}\n\n\t\tog-dropdown {\n\t\t\tdisplay: flex;\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t}\n\t`];\n\n\t@query('og-dropdown')\n\tprivate dropdownEl: Dropdown;\n\n\t@query(`${constants.PREFIX}-filter-range-popup`)\n\tprivate popupEl: RangeFilterPopup;\n\n\tprivate get popupType(): RangeFilterType {\n\t\tconst t = this.columnModel?.type;\n\t\treturn (t === 'd' || t === 'dt' || t === 'tm') ? t : 'n';\n\t}\n\n\tprivate _currentRange(): { from: RangeValue, to: RangeValue } {\n\t\tconst r = isRangeTerm(this.currentValue) ? this.currentValue : null;\n\t\tif (!r) return { from: null, to: null };\n\t\tswitch (this.popupType) {\n\t\t\tcase 'n': return { from: toNum(r.from), to: toNum(r.to) };\n\t\t\tcase 'd':\n\t\t\tcase 'dt': return { from: toDate(r.from), to: toDate(r.to) };\n\t\t\tcase 'tm': return {\n\t\t\t\tfrom: r.from == null ? null : String(r.from),\n\t\t\t\tto: r.to == null ? null : String(r.to),\n\t\t\t};\n\t\t}\n\t}\n\n\tprivate _formatLabel(): string {\n\t\tconst r = isRangeTerm(this.currentValue) ? this.currentValue : null;\n\t\tif (!r || (r.from == null && r.to == null)) return '';\n\t\tconst type = this.popupType;\n\t\tconst fmt = (v: unknown) => {\n\t\t\tif (v == null) return '';\n\t\t\tif (v instanceof Date) return v.toLocaleDateString();\n\t\t\tif (type === 'd' || type === 'dt') {\n\t\t\t\tconst d = toDate(v);\n\t\t\t\tif (d) return d.toLocaleDateString();\n\t\t\t}\n\t\t\treturn String(v);\n\t\t};\n\t\tconst from = fmt(r.from);\n\t\tconst to = fmt(r.to);\n\t\tif (from && to) return `${from} – ${to}`;\n\t\tif (from) return `≥ ${from}`;\n\t\treturn `≤ ${to}`;\n\t}\n\n\tprivate _onApply = (e: RangeFilterApplyEvent) => {\n\t\tif (e.from == null && e.to == null) {\n\t\t\tthis.clearFilter();\n\t\t} else {\n\t\t\tthis.filter({ kind: 'range', from: e.from, to: e.to } as FilterRange);\n\t\t}\n\t\tthis.dropdownEl?.close();\n\t\tthis.deactivate();\n\t}\n\n\tprivate _onClear = () => {\n\t\tthis.clearFilter();\n\t\tthis.dropdownEl?.close();\n\t\tthis.deactivate();\n\t}\n\n\trender = () => html`\n\t\t<og-dropdown color=\"transparent\" alignment=\"left\">\n\t\t\t<div slot=\"label\">${this._formatLabel()}</div>\n\t\t\t<og-filter-range-popup slot=\"content\"\n\t\t\t\ttype=\"${this.popupType}\"\n\t\t\t\t@apply=\"${this._onApply}\"\n\t\t\t\t@clear=\"${this._onClear}\">\n\t\t\t</og-filter-range-popup>\n\t\t</og-dropdown>\n\t`;\n\n\tactivate() {\n\t\tsuper.activate();\n\t\tconst { from, to } = this._currentRange();\n\t\tsetTimeout(() => {\n\t\t\tthis.popupEl?.setValues(from, to);\n\t\t\tthis.dropdownEl?.open();\n\t\t}, 50);\n\t}\n\n\tdeactivate() {\n\t\tthis.dropdownEl?.close();\n\t\tsuper.deactivate();\n\t}\n}\n"]}
@@ -0,0 +1,30 @@
1
+ import { LitElement } from 'lit';
2
+ export type RangeFilterType = 'n' | 'd' | 'dt' | 'tm';
3
+ export type RangeValue = Date | number | string | null;
4
+ export declare class RangeFilterApplyEvent extends Event {
5
+ from: RangeValue;
6
+ to: RangeValue;
7
+ constructor(from: RangeValue, to: RangeValue);
8
+ }
9
+ export declare class RangeFilterClearEvent extends Event {
10
+ constructor();
11
+ }
12
+ export declare class RangeFilterPopup extends LitElement {
13
+ static styles: import("lit").CSSResult;
14
+ type: RangeFilterType;
15
+ private _from;
16
+ private _to;
17
+ setValues(from: RangeValue, to: RangeValue): void;
18
+ private _onFromDate;
19
+ private _onToDate;
20
+ private _onFromNum;
21
+ private _onToNum;
22
+ private _onFromText;
23
+ private _onToText;
24
+ private _apply;
25
+ private _clear;
26
+ private _onKeyDown;
27
+ private _renderRow;
28
+ render(): import("lit-html").TemplateResult<1>;
29
+ }
30
+ //# sourceMappingURL=rangeFilterPopup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rangeFilterPopup.d.ts","sourceRoot":"","sources":["../../src/filters/rangeFilterPopup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAM5C,MAAM,MAAM,eAAe,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AACtD,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AAEvD,qBAAa,qBAAsB,SAAQ,KAAK;IAC5B,IAAI,EAAE,UAAU;IAAS,EAAE,EAAE,UAAU;gBAAvC,IAAI,EAAE,UAAU,EAAS,EAAE,EAAE,UAAU;CAG1D;AAED,qBAAa,qBAAsB,SAAQ,KAAK;;CAI/C;AAED,qBACa,gBAAiB,SAAQ,UAAU;IAE/C,MAAM,CAAC,MAAM,0BAkCX;IAGF,IAAI,EAAE,eAAe,CAAO;IAEnB,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,GAAG,CAAoB;IAExC,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU;IAK1C,OAAO,CAAC,WAAW,CAAqE;IACxF,OAAO,CAAC,SAAS,CAAmE;IAEpF,OAAO,CAAC,UAAU,CAGjB;IACD,OAAO,CAAC,QAAQ,CAGf;IAED,OAAO,CAAC,WAAW,CAAuE;IAC1F,OAAO,CAAC,SAAS,CAAqE;IAEtF,OAAO,CAAC,MAAM,CAEb;IAED,OAAO,CAAC,MAAM,CAIb;IAED,OAAO,CAAC,UAAU,CAKjB;IAED,OAAO,CAAC,UAAU;IAgBlB,MAAM;CAYN"}
@@ -0,0 +1,138 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { LitElement, html, css } from 'lit';
8
+ import { customElement, property, state } from 'lit/decorators.js';
9
+ import { msg } from '@omegagrid/localize';
10
+ import constants from '../constants';
11
+ export class RangeFilterApplyEvent extends Event {
12
+ constructor(from, to) {
13
+ super('apply', { bubbles: false, composed: true });
14
+ this.from = from;
15
+ this.to = to;
16
+ }
17
+ }
18
+ export class RangeFilterClearEvent extends Event {
19
+ constructor() {
20
+ super('clear', { bubbles: false, composed: true });
21
+ }
22
+ }
23
+ let RangeFilterPopup = class RangeFilterPopup extends LitElement {
24
+ constructor() {
25
+ super(...arguments);
26
+ this.type = 'n';
27
+ this._from = null;
28
+ this._to = null;
29
+ this._onFromDate = (e) => { this._from = e.value ?? null; };
30
+ this._onToDate = (e) => { this._to = e.value ?? null; };
31
+ this._onFromNum = (e) => {
32
+ const v = e.target.value;
33
+ this._from = v == null || Number.isNaN(v) ? null : v;
34
+ };
35
+ this._onToNum = (e) => {
36
+ const v = e.target.value;
37
+ this._to = v == null || Number.isNaN(v) ? null : v;
38
+ };
39
+ this._onFromText = (e) => { this._from = e.value || null; };
40
+ this._onToText = (e) => { this._to = e.value || null; };
41
+ this._apply = () => {
42
+ this.dispatchEvent(new RangeFilterApplyEvent(this._from, this._to));
43
+ };
44
+ this._clear = () => {
45
+ this._from = null;
46
+ this._to = null;
47
+ this.dispatchEvent(new RangeFilterClearEvent());
48
+ };
49
+ this._onKeyDown = (e) => {
50
+ if (e.key === 'Enter') {
51
+ e.stopPropagation();
52
+ this._apply();
53
+ }
54
+ };
55
+ }
56
+ setValues(from, to) {
57
+ this._from = from;
58
+ this._to = to;
59
+ }
60
+ _renderRow(label, value, which) {
61
+ let control;
62
+ if (this.type === 'd' || this.type === 'dt') {
63
+ const onChange = which === 'from' ? this._onFromDate : this._onToDate;
64
+ control = html `<og-calendar-dropdown cross buttonInput .value="${value}" @change="${onChange}"></og-calendar-dropdown>`;
65
+ }
66
+ else if (this.type === 'tm') {
67
+ // TODO: change to time picker when available
68
+ const onChange = which === 'from' ? this._onFromText : this._onToText;
69
+ control = html `<og-input .value="${(value ?? '')}" @change="${onChange}"></og-input>`;
70
+ }
71
+ else {
72
+ const onChange = which === 'from' ? this._onFromNum : this._onToNum;
73
+ control = html `<og-numericinput buttons .value="${value}" @change="${onChange}"></og-numericinput>`;
74
+ }
75
+ return html `<div class="row"><label>${label}</label>${control}</div>`;
76
+ }
77
+ render() {
78
+ return html `
79
+ <div @keydown="${this._onKeyDown}" style="display: contents;">
80
+ ${this._renderRow(msg('From'), this._from, 'from')}
81
+ ${this._renderRow(msg('To'), this._to, 'to')}
82
+ <div class="actions">
83
+ <og-button icon="check" color="accent" text="${msg('Apply')}" @click="${this._apply}"></og-button>
84
+ <og-button icon="xmark" color="red" text="${msg('Clear')}" @click="${this._clear}"></og-button>
85
+ </div>
86
+ </div>
87
+ `;
88
+ }
89
+ };
90
+ RangeFilterPopup.styles = css `
91
+ :host {
92
+ display: flex;
93
+ flex-direction: column;
94
+ gap: 5px;
95
+ padding: 6px;
96
+ min-width: 200px;
97
+ }
98
+
99
+ .row {
100
+ display: flex;
101
+ flex-direction: row;
102
+ align-items: center;
103
+ gap: 6px;
104
+ }
105
+
106
+ .row > label {
107
+ flex: 0 0 28px;
108
+ }
109
+
110
+ .row > og-calendar-dropdown,
111
+ .row > og-numericinput,
112
+ .row > og-input {
113
+ flex: 1;
114
+ min-width: 0;
115
+ box-sizing: border-box;
116
+ }
117
+
118
+ .actions {
119
+ display: flex;
120
+ justify-content: flex-end;
121
+ gap: 4px;
122
+ margin-top: 4px;
123
+ }
124
+ `;
125
+ __decorate([
126
+ property({ type: String })
127
+ ], RangeFilterPopup.prototype, "type", void 0);
128
+ __decorate([
129
+ state()
130
+ ], RangeFilterPopup.prototype, "_from", void 0);
131
+ __decorate([
132
+ state()
133
+ ], RangeFilterPopup.prototype, "_to", void 0);
134
+ RangeFilterPopup = __decorate([
135
+ customElement(`${constants.PREFIX}-filter-range-popup`)
136
+ ], RangeFilterPopup);
137
+ export { RangeFilterPopup };
138
+ //# sourceMappingURL=rangeFilterPopup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rangeFilterPopup.js","sourceRoot":"","sources":["../../src/filters/rangeFilterPopup.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, css } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { events } from '@omegagrid/core';\nimport { msg } from '@omegagrid/localize';\nimport constants from '../constants';\n\nexport type RangeFilterType = 'n' | 'd' | 'dt' | 'tm';\nexport type RangeValue = Date | number | string | null;\n\nexport class RangeFilterApplyEvent extends Event {\n\tconstructor(public from: RangeValue, public to: RangeValue) {\n\t\tsuper('apply', { bubbles: false, composed: true });\n\t}\n}\n\nexport class RangeFilterClearEvent extends Event {\n\tconstructor() {\n\t\tsuper('clear', { bubbles: false, composed: true });\n\t}\n}\n\n@customElement(`${constants.PREFIX}-filter-range-popup`)\nexport class RangeFilterPopup extends LitElement {\n\n\tstatic styles = css`\n\t\t:host {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\tgap: 5px;\n\t\t\tpadding: 6px;\n\t\t\tmin-width: 200px;\n\t\t}\n\n\t\t.row {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: row;\n\t\t\talign-items: center;\n\t\t\tgap: 6px;\n\t\t}\n\n\t\t.row > label {\n\t\t\tflex: 0 0 28px;\n\t\t}\n\n\t\t.row > og-calendar-dropdown,\n\t\t.row > og-numericinput,\n\t\t.row > og-input {\n\t\t\tflex: 1;\n\t\t\tmin-width: 0;\n\t\t\tbox-sizing: border-box;\n\t\t}\n\n\t\t.actions {\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: flex-end;\n\t\t\tgap: 4px;\n\t\t\tmargin-top: 4px;\n\t\t}\n\t`;\n\n\t@property({ type: String })\n\ttype: RangeFilterType = 'n';\n\n\t@state() private _from: RangeValue = null;\n\t@state() private _to: RangeValue = null;\n\n\tsetValues(from: RangeValue, to: RangeValue) {\n\t\tthis._from = from;\n\t\tthis._to = to;\n\t}\n\n\tprivate _onFromDate = (e: events.ChangeEvent<Date>) => { this._from = e.value ?? null; }\n\tprivate _onToDate = (e: events.ChangeEvent<Date>) => { this._to = e.value ?? null; }\n\n\tprivate _onFromNum = (e: Event) => {\n\t\tconst v = (e.target as unknown as { value: number }).value;\n\t\tthis._from = v == null || Number.isNaN(v) ? null : v;\n\t}\n\tprivate _onToNum = (e: Event) => {\n\t\tconst v = (e.target as unknown as { value: number }).value;\n\t\tthis._to = v == null || Number.isNaN(v) ? null : v;\n\t}\n\n\tprivate _onFromText = (e: events.ChangeEvent<string>) => { this._from = e.value || null; }\n\tprivate _onToText = (e: events.ChangeEvent<string>) => { this._to = e.value || null; }\n\n\tprivate _apply = () => {\n\t\tthis.dispatchEvent(new RangeFilterApplyEvent(this._from, this._to));\n\t}\n\n\tprivate _clear = () => {\n\t\tthis._from = null;\n\t\tthis._to = null;\n\t\tthis.dispatchEvent(new RangeFilterClearEvent());\n\t}\n\n\tprivate _onKeyDown = (e: KeyboardEvent) => {\n\t\tif (e.key === 'Enter') {\n\t\t\te.stopPropagation();\n\t\t\tthis._apply();\n\t\t}\n\t}\n\n\tprivate _renderRow(label: string, value: RangeValue, which: 'from' | 'to') {\n\t\tlet control;\n\t\tif (this.type === 'd' || this.type === 'dt') {\n\t\t\tconst onChange = which === 'from' ? this._onFromDate : this._onToDate;\n\t\t\tcontrol = html`<og-calendar-dropdown cross buttonInput .value=\"${value as Date | null}\" @change=\"${onChange}\"></og-calendar-dropdown>`;\n\t\t} else if (this.type === 'tm') {\n\t\t\t// TODO: change to time picker when available\n\t\t\tconst onChange = which === 'from' ? this._onFromText : this._onToText;\n\t\t\tcontrol = html`<og-input .value=\"${(value ?? '') as string}\" @change=\"${onChange}\"></og-input>`;\n\t\t} else {\n\t\t\tconst onChange = which === 'from' ? this._onFromNum : this._onToNum;\n\t\t\tcontrol = html`<og-numericinput buttons .value=\"${value as number | null}\" @change=\"${onChange}\"></og-numericinput>`;\n\t\t}\n\t\treturn html`<div class=\"row\"><label>${label}</label>${control}</div>`;\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<div @keydown=\"${this._onKeyDown}\" style=\"display: contents;\">\n\t\t\t\t${this._renderRow(msg('From'), this._from, 'from')}\n\t\t\t\t${this._renderRow(msg('To'), this._to, 'to')}\n\t\t\t\t<div class=\"actions\">\n\t\t\t\t\t<og-button icon=\"check\" color=\"accent\" text=\"${msg('Apply')}\" @click=\"${this._apply}\"></og-button>\n\t\t\t\t\t<og-button icon=\"xmark\" color=\"red\" text=\"${msg('Clear')}\" @click=\"${this._clear}\"></og-button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`;\n\t}\n}\n"]}
@@ -47,7 +47,7 @@ export declare class Comment extends LitElement {
47
47
  updated(): void;
48
48
  canEdit(index: number): boolean;
49
49
  get canAdd(): boolean;
50
- renderItemHeader: (item: CommentItem, index: number) => import("lit-html").TemplateResult<1> | "";
50
+ renderItemHeader: (item: CommentItem, index: number) => "" | import("lit-html").TemplateResult<1>;
51
51
  renderItem: (item: CommentItem, index: number) => import("lit-html").TemplateResult<1>;
52
52
  render: () => import("lit-html").TemplateResult<1>;
53
53
  deatach(timeout?: number): void;
@@ -5,6 +5,7 @@ export declare class FilterLabel extends LitElement {
5
5
  value: FilterValue;
6
6
  constructor();
7
7
  connectedCallback(): void;
8
+ renderValue(): string | import("lit-html").TemplateResult<1>;
8
9
  render: () => import("lit-html").TemplateResult<1>;
9
10
  }
10
11
  //# sourceMappingURL=filterLabel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"filterLabel.d.ts","sourceRoot":"","sources":["../../src/ui/filterLabel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAI5C,qBACa,WAAY,SAAQ,UAAU;IAE1C,MAAM,CAAC,MAAM,0BA4CX;IAGF,KAAK,EAAE,WAAW,CAAC;;IAMnB,iBAAiB;IAIjB,MAAM,6CAKJ;CAEF"}
1
+ {"version":3,"file":"filterLabel.d.ts","sourceRoot":"","sources":["../../src/ui/filterLabel.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AA2B5C,qBACa,WAAY,SAAQ,UAAU;IAE1C,MAAM,CAAC,MAAM,0BA4CX;IAGF,KAAK,EAAE,WAAW,CAAC;;IAMnB,iBAAiB;IAIjB,WAAW;IAUX,MAAM,6CAGJ;CAEF"}
@@ -7,19 +7,54 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  import { utils } from '@omegagrid/core';
8
8
  import { LitElement, html, css } from 'lit';
9
9
  import { customElement, property } from 'lit/decorators.js';
10
+ const isRangeTerm = (v) => !!v && typeof v === 'object' && !Array.isArray(v) && v.kind === 'range';
11
+ const formatRangePart = (v) => {
12
+ if (v == null || v === '')
13
+ return '';
14
+ if (v instanceof Date)
15
+ return v.toLocaleDateString();
16
+ if (typeof v === 'string') {
17
+ const d = new Date(v);
18
+ if (!Number.isNaN(d.getTime()))
19
+ return d.toLocaleDateString();
20
+ return v;
21
+ }
22
+ return String(v);
23
+ };
24
+ const formatRange = (r) => {
25
+ const from = formatRangePart(r.from);
26
+ const to = formatRangePart(r.to);
27
+ if (from && to)
28
+ return `${from} – ${to}`;
29
+ if (from)
30
+ return `≥ ${from}`;
31
+ if (to)
32
+ return `≤ ${to}`;
33
+ return '';
34
+ };
10
35
  let FilterLabel = class FilterLabel extends LitElement {
11
36
  constructor() {
12
37
  super();
13
38
  this.render = () => html `
14
39
  <og-icon id="filterIcon" .icon="${{ icon: "filter" }}"></og-icon>
15
- <div class="text">${utils.isBool(this.value) ? html `
16
- <og-icon .icon="${this.value ? 'square-check' : 'square'}"></og-icon>
17
- ` : this.value}</div>
40
+ <div class="text">${this.renderValue()}</div>
18
41
  `;
19
42
  }
20
43
  connectedCallback() {
21
44
  super.connectedCallback();
22
45
  }
46
+ renderValue() {
47
+ if (this.value == null)
48
+ return '';
49
+ if (utils.isBool(this.value)) {
50
+ return html `<og-icon .icon="${this.value ? 'square-check' : 'square'}"></og-icon>`;
51
+ }
52
+ if (isRangeTerm(this.value))
53
+ return formatRange(this.value);
54
+ if (typeof this.value === 'object')
55
+ return '';
56
+ return this.value;
57
+ }
23
58
  };
24
59
  FilterLabel.styles = css `
25
60
  :host {
@@ -1 +1 @@
1
- {"version":3,"file":"filterLabel.js","sourceRoot":"","sources":["../../src/ui/filterLabel.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAIrD,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,UAAU;IAmD1C;QACC,KAAK,EAAE,CAAC;QAOT,WAAM,GAAG,GAAG,EAAE,CAAA,IAAI,CAAA;oCACiB,EAAC,IAAI,EAAE,QAAQ,EAAC;sBAC9B,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;qBAChC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ;GACxD,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK;EACd,CAAC;IAXF,CAAC;IAED,iBAAiB;QAChB,KAAK,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;;AAvDM,kBAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4ClB,AA5CY,CA4CX;AAGF;IADC,QAAQ,EAAE;0CACQ;AAjDP,WAAW;IADvB,aAAa,CAAC,iBAAiB,CAAC;GACpB,WAAW,CAkEvB","sourcesContent":["import { utils } from '@omegagrid/core';\nimport { FilterValue } from '@omegagrid/grid-core';\nimport { LitElement, html, css } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\n\n@customElement('og-filter-label')\nexport class FilterLabel extends LitElement {\n\n\tstatic styles = css`\n\t\t:host {\n\t\t\tpadding: 0;\n\t\t\tdisplay: block;\n\t\t\talign-items: center;\n\t\t\tcursor: pointer;\n\t\t\theight: 100%;\n\t\t\tline-height: 21px;\n\t\t}\n\n\t\t:host(:hover og-icon) {\n\t\t\tbackground-color: var(--og-accent-color-highlight);\n\t\t}\n\n\t\tinput {\n\t\t\tcolor: var(--og-text-color);\n\t\t}\n\n\t\tog-icon {\n\t\t\tcolor: var(--og-accent-color);\n\t\t\tflex: 0;\n\t\t\tmin-width: 20px;\n\t\t\tpadding-top: 1px;\n\t\t\tpadding-left: 0px;\n\t\t}\n\n\t\t#filterIcon {\n\t\t\tposition: absolute;\n\t\t\tleft: 0px;\n\t\t\ttop: 0px;\n\t\t}\n\n\t\t.text {\n\t\t\tflex: 1;\n\t\t\theight: 100%;\n\t\t\tfont-style: italic;\n\t\t\tfont-weight: normal;\n\t\t}\n\n\t\t.text:empty {\n\t\t\tbackground-image: repeating-linear-gradient(45deg, var(--og-accent-color-alpha) 0, var(--og-accent-color-alpha) 2px, transparent 0, transparent 50%);\n\t\t\tbackground-size: 10px 10px;\n\t\t\tbackground-color: transparent;\n\t\t}\n\t`;\n\n\t@property()\n\tvalue: FilterValue;\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback();\n\t}\n\n\trender = () =>html`\n\t\t<og-icon id=\"filterIcon\" .icon=\"${{icon: \"filter\"}}\"></og-icon>\n\t\t<div class=\"text\">${utils.isBool(this.value) ? html`\n\t\t\t<og-icon .icon=\"${this.value ? 'square-check' : 'square'}\"></og-icon>\t\n\t\t` : this.value}</div>\n\t`;\n\t\n}"]}
1
+ {"version":3,"file":"filterLabel.js","sourceRoot":"","sources":["../../src/ui/filterLabel.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE5D,MAAM,WAAW,GAAG,CAAC,CAAU,EAAoB,EAAE,CACpD,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAK,CAAiB,CAAC,IAAI,KAAK,OAAO,CAAC;AAE1F,MAAM,eAAe,GAAG,CAAC,CAAU,EAAU,EAAE;IAC9C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IACrC,IAAI,CAAC,YAAY,IAAI;QAAE,OAAO,CAAC,CAAC,kBAAkB,EAAE,CAAC;IACrD,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YAAE,OAAO,CAAC,CAAC,kBAAkB,EAAE,CAAC;QAC9D,OAAO,CAAC,CAAC;IACV,CAAC;IACD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,CAAc,EAAU,EAAE;IAC9C,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACjC,IAAI,IAAI,IAAI,EAAE;QAAE,OAAO,GAAG,IAAI,MAAM,EAAE,EAAE,CAAC;IACzC,IAAI,IAAI;QAAE,OAAO,KAAK,IAAI,EAAE,CAAC;IAC7B,IAAI,EAAE;QAAE,OAAO,KAAK,EAAE,EAAE,CAAC;IACzB,OAAO,EAAE,CAAC;AACX,CAAC,CAAC;AAIK,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,UAAU;IAmD1C;QACC,KAAK,EAAE,CAAC;QAiBT,WAAM,GAAG,GAAG,EAAE,CAAA,IAAI,CAAA;oCACiB,EAAC,IAAI,EAAE,QAAQ,EAAC;sBAC9B,IAAI,CAAC,WAAW,EAAE;EACtC,CAAC;IAnBF,CAAC;IAED,iBAAiB;QAChB,KAAK,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAED,WAAW;QACV,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;YAAE,OAAO,EAAE,CAAC;QAClC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAA,mBAAmB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,cAAc,CAAC;QACpF,CAAC;QACD,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5D,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC,KAAe,CAAC;IAC7B,CAAC;;AAjEM,kBAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4ClB,AA5CY,CA4CX;AAGF;IADC,QAAQ,EAAE;0CACQ;AAjDP,WAAW;IADvB,aAAa,CAAC,iBAAiB,CAAC;GACpB,WAAW,CA0EvB","sourcesContent":["import { utils } from '@omegagrid/core';\nimport { FilterRange, FilterValue } from '@omegagrid/grid-core';\nimport { LitElement, html, css } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nconst isRangeTerm = (v: unknown): v is FilterRange =>\n\t!!v && typeof v === 'object' && !Array.isArray(v) && (v as FilterRange).kind === 'range';\n\nconst formatRangePart = (v: unknown): string => {\n\tif (v == null || v === '') return '';\n\tif (v instanceof Date) return v.toLocaleDateString();\n\tif (typeof v === 'string') {\n\t\tconst d = new Date(v);\n\t\tif (!Number.isNaN(d.getTime())) return d.toLocaleDateString();\n\t\treturn v;\n\t}\n\treturn String(v);\n};\n\nconst formatRange = (r: FilterRange): string => {\n\tconst from = formatRangePart(r.from);\n\tconst to = formatRangePart(r.to);\n\tif (from && to) return `${from} – ${to}`;\n\tif (from) return `≥ ${from}`;\n\tif (to) return `≤ ${to}`;\n\treturn '';\n};\n\n\n@customElement('og-filter-label')\nexport class FilterLabel extends LitElement {\n\n\tstatic styles = css`\n\t\t:host {\n\t\t\tpadding: 0;\n\t\t\tdisplay: block;\n\t\t\talign-items: center;\n\t\t\tcursor: pointer;\n\t\t\theight: 100%;\n\t\t\tline-height: 21px;\n\t\t}\n\n\t\t:host(:hover og-icon) {\n\t\t\tbackground-color: var(--og-accent-color-highlight);\n\t\t}\n\n\t\tinput {\n\t\t\tcolor: var(--og-text-color);\n\t\t}\n\n\t\tog-icon {\n\t\t\tcolor: var(--og-accent-color);\n\t\t\tflex: 0;\n\t\t\tmin-width: 20px;\n\t\t\tpadding-top: 1px;\n\t\t\tpadding-left: 0px;\n\t\t}\n\n\t\t#filterIcon {\n\t\t\tposition: absolute;\n\t\t\tleft: 0px;\n\t\t\ttop: 0px;\n\t\t}\n\n\t\t.text {\n\t\t\tflex: 1;\n\t\t\theight: 100%;\n\t\t\tfont-style: italic;\n\t\t\tfont-weight: normal;\n\t\t}\n\n\t\t.text:empty {\n\t\t\tbackground-image: repeating-linear-gradient(45deg, var(--og-accent-color-alpha) 0, var(--og-accent-color-alpha) 2px, transparent 0, transparent 50%);\n\t\t\tbackground-size: 10px 10px;\n\t\t\tbackground-color: transparent;\n\t\t}\n\t`;\n\n\t@property()\n\tvalue: FilterValue;\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback();\n\t}\n\n\trenderValue() {\n\t\tif (this.value == null) return '';\n\t\tif (utils.isBool(this.value)) {\n\t\t\treturn html`<og-icon .icon=\"${this.value ? 'square-check' : 'square'}\"></og-icon>`;\n\t\t}\n\t\tif (isRangeTerm(this.value)) return formatRange(this.value);\n\t\tif (typeof this.value === 'object') return '';\n\t\treturn this.value as string;\n\t}\n\n\trender = () =>html`\n\t\t<og-icon id=\"filterIcon\" .icon=\"${{icon: \"filter\"}}\"></og-icon>\n\t\t<div class=\"text\">${this.renderValue()}</div>\n\t`;\n\t\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;IAUzB,gBAAgB;IAUhB,oBAAoB;IAMpB,aAAa;IA0Bb,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,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;IAUzB,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"}
@@ -234,9 +234,11 @@ export class GridEditing {
234
234
  const values = this.model.getValuesInRange(this.selection.range, customClipboardSupport);
235
235
  this.grid.selecting.hideSelector();
236
236
  this.grid.selecting.showCopySelector();
237
- const clipboardData = { 'text/plain': new Blob([
238
- csv.arrayToCsv(values, { decimalSeparator: this.model.options.systemDecimalSeparator })
239
- ], {
237
+ const { columns, rows } = this.selection.range.size;
238
+ let csvText = csv.arrayToCsv(values, { decimalSeparator: this.model.options.systemDecimalSeparator });
239
+ if (columns === 1 && rows === 1)
240
+ csvText = csvText.replace(/[\r\n]+$/, '');
241
+ const clipboardData = { 'text/plain': new Blob([csvText], {
240
242
  type: "text/plain"
241
243
  }) };
242
244
  if (customClipboardSupport) {
@@ -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\t\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\t\t\t\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);\t\t\t\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\tconst type = cell.type;\n\t\tif (!this.editorMap.has(type)) {\n\t\t\tconst editor = getEditorFactory(type).createComponent(this.model.options.editing);\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\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 clipboardData: Record<string, string|Blob> = {'text/plain': new Blob([\n\t\t\tcsv.arrayToCsv(values, {decimalSeparator: this.model.options.systemDecimalSeparator})\n\t\t], {\n\t\t\ttype: \"text/plain\"\n\t\t})};\n\t\t\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\t\t\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\t\t\t\t\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}"]}
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\t\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\t\t\t\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);\t\t\t\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\tconst type = cell.type;\n\t\tif (!this.editorMap.has(type)) {\n\t\t\tconst editor = getEditorFactory(type).createComponent(this.model.options.editing);\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\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\t\t\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\t\t\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\t\t\t\t\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}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"grid.rendering.d.ts","sourceRoot":"","sources":["../../src/ui/grid.rendering.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"grid.rendering.d.ts","sourceRoot":"","sources":["../../src/ui/grid.rendering.ts"],"names":[],"mappings":"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"}
@@ -423,6 +423,18 @@ export class GridRendering {
423
423
  cellDiv.style.width = 'auto';
424
424
  maxWidth = Math.max(maxWidth, cellDiv.offsetWidth);
425
425
  }
426
+ if (column.header) {
427
+ for (const h of column.header) {
428
+ if (!h)
429
+ continue;
430
+ if (h.html)
431
+ div.innerHTML = h.label ?? '';
432
+ else
433
+ div.innerText = h.label ?? '';
434
+ maxWidth = Math.max(maxWidth, div.offsetWidth);
435
+ }
436
+ div.innerHTML = '';
437
+ }
426
438
  column.width = maxWidth + 10;
427
439
  if (rerender)
428
440
  this.table.renderCells({ horizontal: true });
@@ -1 +1 @@
1
- {"version":3,"file":"grid.rendering.js","sourceRoot":"","sources":["../../src/ui/grid.rendering.ts"],"names":[],"mappings":"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","sourcesContent":["import { Direction, dom, getThemeManager, utils } from \"@omegagrid/core\";\nimport { debounce } from \"ts-debounce\";\nimport { CellModel, ColumnModel, RowModel, CellRange, gridConstants as constants, RangeAddress } from \"@omegagrid/grid-core\";\nimport { Grid } from \"./grid\";\nimport { Table, TableRenderOptions, TableRow } from \"./table\";\nimport { GridEvent } from \"./grid.events\";\nimport { getCellRenderer } from \"../renderers\";\nimport { RequestFilters } from \"../gridAdapter\";\nimport { createThemeVariablesCss } from \"@omegagrid/core\";\n\nexport type RefreshOptions = {\n\tvertical?: boolean,\n\thorizontal?: boolean\n\trerenderTable?: boolean\n};\n\nexport class GridRendering {\n\n\trequireVerticalUpdate = true;\n\trequireHorizontalUpdate = false;\n\ttouchStartX: Touch;\n\ttouchStartY: Touch;\n\tresizing = false;\n\tcurrentResizedColumn: ColumnModel;\n\tcurrentResizedColumnWidth: number;\n\tcurrentResizedRow: RowModel;\n\tcurrentResizedRowHeight: number;\n\n\tprivate _vScrolling = true;\n\tget vScrolling() { return this._vScrolling }\n\tprivate _hScrolling = true;\n\tget hScrolling() { return this._hScrolling }\n\n\tget model() { return this.grid.model }\n\tget selection() { return this.grid.selection }\n\tget table() { return this.grid.table }\n\n\tconstructor(readonly grid: Grid) { }\n\n\treadonly debounceRenderCells = debounce(this.renderCells, 50, {isImmediate: false, maxWait: 100});\n\treadonly debounceCalculateViewport = debounce(this.calculateViewport, 200);\n\n\tisLastRowInViewport() {\n\t\tconst viewportRows = this.grid.table.viewport.rows;\n\t\tconst visibleRows = this.model.visibleRows;\n\t\treturn viewportRows[viewportRows.length - 1] == visibleRows[visibleRows.length - 1];\n\t}\n\n\trenderCells(update?: TableRenderOptions) {\n\t\tupdate = update || {vertical: this.requireVerticalUpdate, horizontal: this.requireHorizontalUpdate};\n\t\tthis.grid.comment.deatach();\n\t\tthis.grid.table.renderCells(update);\n\t\tthis.requireHorizontalUpdate = false;\n\t\tthis.requireVerticalUpdate = false;\n\t\tthis.debounceCalculateViewport();\n\t\tthis.grid.objects.updatePostions();\n\t}\n\n\trenderAll(rerenderTable = false) {\n\t\tif (this.grid.group) this.grid.group.grids.forEach((g: Grid) => g.rendering.render(rerenderTable));\n\t\telse this.render(rerenderTable);\n\t}\n\n\tasync render(rerenderTable = false) {\n\t\tif (!this.grid.table || !this.model) return;\n\t\tthis.grid.table.clearHeaderCache();\n\t\tthis.grid.table.clearBodyCache();\n\t\tif (this.grid.table.isConnected) {\n\t\t\tif (rerenderTable) {\n\t\t\t\tthis.grid.table.requestUpdate();\n\t\t\t\tawait this.grid.table.updateComplete;\n\t\t\t}\n\t\t\tthis.grid.table.renderCells({horizontal: true, vertical: true});\n\t\t\tthis.calculateViewport();\n\t\t}\n\t}\n\n\tupdateRange(range: CellRange, recalculate = false) {\n\t\tfor (const cell of this.model.getRangeIterator(range)) {\n\t\t\tthis.updateCells([cell], recalculate);\n\t\t}\n\t}\n\n\tupdateCell(cell: CellModel, recalculate = false) {\n\t\tthis.updateCells([cell], recalculate);\n\t}\n\n\tupdateSpilledCells(cell: CellModel) {\n\t\tlet spillCells: Set<CellModel>;\n\t\tif (cell.prevSpillRange) {\n\t\t\tspillCells = new Set();\n\t\t\tthis.model.getRangeIterator(cell.prevSpillRange).forEach(cell => spillCells.add(cell));\n\t\t}\n\t\tif (cell.spillRange) {\n\t\t\tspillCells = spillCells || new Set();\n\t\t\tthis.model.getRangeIterator(cell.spillRange).forEach(cell => spillCells.add(cell));\n\t\t}\n\t\tif (spillCells?.size > 0) this.updateCells(spillCells);\n\t}\n\n\tupdateCells(cells: Iterable<CellModel>, recalculate = false) {\n\t\tif (recalculate) {\n\t\t\tfor (const cell of cells) {\n\t\t\t\tcell.invalidateStyle();\n\t\t\t\tcell.invalidateValue();\n\t\t\t\tthis.model.calculations.clearDependecies(cell).evaluate(cell);\n\t\t\t\tthis.updateSpilledCells(cell);\n\t\t\t}\n\t\t}\n\n\t\tconst table = this.grid.table;\n\t\tfor (const cell of cells) table.renderBodyCell(cell);\n\t\t\n\t\tif (recalculate) {\n\t\t\tthis.model.calculations.invalidateDependants(cells).forEach((sheet, cell) => {\n\t\t\t\tif (sheet) this.grid.group.getGrid(sheet)?.table.renderBodyCell(cell);\n\t\t\t\telse table.renderBodyCell(cell);\n\t\t\t\tthis.updateSpilledCells(cell);\n\t\t\t});\n\t\t\tthis.grid.dispatchGridEvent('calculate', { cells: Array.from(cells) });\n\t\t}\n\t}\n\n\tupdateHeaders() {\n\t\tthis.model.indexVisibleColumns();\n\t\tthis.table.clearHeaderCache();\n\t\tthis.table.createHeaderRows();\n\t\tthis.table.renderHeader();\n\t}\n\n\tcalculateViewport(recalculate = false) {\n\t\tthis.grid.logger.info('calculate viwport');\n\t\tthis.updateCells(this.model.calculateViewport(), recalculate);\n\t}\n\n\tupdateSliders() {\n\t\tconst ws = this.table.viewportSize;\n\t\tthis.grid.vSlider.maxValue = this.model.visibleRows.length;\n\t\tthis.grid.vSlider.pageSize = ws.h / this.model.options.rowHeight;\n\t\tthis.grid.vSlider.value = this.table.rowOffset;\n\t\tthis.grid.hSlider.maxValue = this.model.visibleColumns.length;\n\t\tthis.grid.hSlider.pageSize = ws.w / this.model.options.columnWidth;\n\t\tthis.grid.hSlider.value = this.table.colOffset;\n\t}\n\n\tisVerticalScrollingEnabled() {\n\t\treturn this.grid.options.scrolling.verticalOverscroll !== false \n\t\t\t|| this.table.viewport.rows.length < this.model.visibleRows.length;\n\t}\n\n\tisHorizontalScrollingEnabled() {\n\t\treturn this.grid.options.scrolling.horizontalOverscroll !== false \n\t\t\t|| this.table.viewport.columns.length < this.model.visibleColumns.length;\n\t}\n\n\tupdateSliderVisibility() {\n\t\tthis._vScrolling = this.isVerticalScrollingEnabled();\n\t\tif (this._vScrolling) {\n\t\t\tthis.grid.vSlider.show();\n\t\t\tdom.showElement(this.grid.vSlider);\n\t\t} else {\n\t\t\tthis.grid.vSlider.hide();\n\t\t\tdom.hideElement(this.grid.vSlider);\n\t\t}\n\t\t\n\t\tthis._hScrolling = this.isHorizontalScrollingEnabled();\n\t\tif (this._hScrolling) {\n\t\t\tthis.grid.hSlider.show();\n\t\t\tdom.showElement(this.grid.hSlider);\n\t\t} else {\n\t\t\tthis.grid.hSlider.hide();\n\t\t\tdom.hideElement(this.grid.hSlider);\n\t\t}\n\t}\n\n\thideSliders() {\n\t\tthis.grid.vSlider.hide();\n\t\tthis.grid.hSlider.hide();\n\t}\n\n\tscrollVerticalByPixels(pixels: number) {\n\t\tif (!this.vScrolling) return;\n\n\t\tlet topRow = this.table.rowOffset;\n\t\tlet top = 0, r = 0;\n\t\tlet row: RowModel;\n\n\t\tif (pixels > 0) {\n\t\t\twhile (top < pixels && topRow + r < this.model.visibleRows.length) {\n\t\t\t\ttop += this.model.visibleRows[topRow + (r++)].height + 2;\n\t\t\t}\n\t\t\ttopRow = topRow + r;\n\t\t} else if (pixels < 0) {\n\t\t\tpixels = Math.abs(pixels);\n\t\t\twhile (top < pixels && topRow + r >= 0) {\n\t\t\t\trow = this.model.visibleRows[Math.min(this.model.visibleRows.length - 1, topRow + (r--))];\n\t\t\t\ttop += (row ? row.height : 0) + 2;\n\t\t\t}\n\t\t\ttopRow = topRow + r;\n\t\t}\n\n\t\tif (topRow >= this.model.visibleRows.length) topRow = this.model.visibleRows.length - 1;\n\t\t\n\t\tthis.requireVerticalUpdate = true;\n\t\tthis.table.rowOffset = Math.max(0, topRow);\n\t\tthis.debounceRenderCells();\n\t\tthis.updateSliders();\n\t}\n\n\tscrollHorizontalByPixels(pixels: number) {\n\t\tif (!this.hScrolling) return;\n\t\t\n\t\tlet leftCol = this.table.colOffset;\n\t\tlet left = 0, c = 0;\n\t\tif (pixels > 0) {\n\t\t\twhile (left < pixels && leftCol + c < this.model.visibleColumns.length) {\n\t\t\t\tleft += this.model.visibleColumns[leftCol + (c++)].width + 2;\n\t\t\t}\n\t\t\tleftCol = leftCol + c;\n\t\t} else if (pixels < 0) {\n\t\t\tpixels = Math.abs(pixels);\n\t\t\twhile (left < pixels && leftCol + c >= 0) {\n\t\t\t\tleft += this.model.visibleColumns[Math.min(this.model.visibleColumns.length - 1, leftCol + (c--))].width + 2;\n\t\t\t}\n\t\t\tleftCol = leftCol + c;\n\t\t}\n\n\t\tif (leftCol >= this.model.visibleColumns.length) leftCol = this.model.visibleColumns.length - 1;\n\n\t\tthis.requireHorizontalUpdate = true;\n\t\tthis.table.colOffset = Math.max(0, leftCol);\n\t\tthis.debounceRenderCells();\n\t\tthis.updateSliders();\n\t}\n\n\tupdateCellSelectionRange() {\n\t\tconst table = this.table;\n\t\tfor (const cell of this.model.getRangeIterator(this.selection.range, false)) {\n\t\t\ttable.renderBodyCell(cell);\n\t\t}\n\t}\n\n\tgetAdapterRequestFilters(): RequestFilters {\n\t\treturn {\n\t\t\toffset: 0,\n\t\t\tfilter: this.grid.filtering?.filter ? Array.from(this.grid.filtering.filter.settings.values()) : null,\n\t\t\torder: this.grid.model?.sorting?.settings\n\t\t};\n\t}\n\n\tasync toggleRow(index: number, dispatchEvent = true) {\n\t\tconst row = this.model.rows[index];\n\t\tif (row.isLoaded || row.isPartialyLoaded) {\n\t\t\trow.toggleCollapse(false, this.model.options.unhideRowAfterExpand);\n\t\t\tthis.table.renderCells({vertical: true});\n\t\t} else if (this.grid.adapter) {\n\t\t\tconst tr = this.table.getRowByModelIndex(index) as TableRow;\n\t\t\tif (tr && tr.expander) tr.expander.state = 'waiting';\n\t\n\t\t\trow.collapsed = false;\n\n\t\t\tconst requestFilters = Object.assign(this.getAdapterRequestFilters(), {\n\t\t\t\tparent: {r: row.index, props: row.properties}\n\t\t\t})\n\n\t\t\tconst [newRowSources] = await Promise.all([this.grid.adapter.getRows(requestFilters)]);\n\t\t\tthis.model.insertRowData(row, 0, newRowSources);\n\t\t\t\n\t\t\trequestFilters.rows = newRowSources;\n\t\t\tconst [newCellSources] = await Promise.all([this.grid.adapter.getCells(requestFilters)]);\n\t\t\tnewCellSources?.map(cellSource => this.model.getCellByCoords(cellSource.r, cellSource.c)?.update(cellSource));\n\t\t\n\t\t\tthis.table.requestUpdate();\n\t\t}\n\n\t\tthis.updateSliders();\n\t\tif (dispatchEvent) this.grid.dispatchEvent(new GridEvent('row.toggle', {grid: this.grid, row}));\n\t}\n\t\n\ttoggleColumn(index: number, dispatchEvent = true) {\n\t\tconst column = this.model.columns[index];\n\t\tcolumn.toggleCollapse(false, this.model.options.unhideColumnAfterExpand);\n\t\tthis.table.renderCells({horizontal: true});\n\t\tthis.updateSliders();\n\t\tif (dispatchEvent) this.grid.dispatchEvent(new GridEvent('column.toggle', {grid: this.grid, column }));\n\t}\n\n\tsetRowExpandLevel(level: number) {\n\t\tthis.model.setRowExpandLevel(level);\n\t\tthis.table.rowOffset = 0;\n\t\tthis.table.renderCells({vertical: true});\n\t\tthis.updateSliders();\n\t\tthis.grid.dispatchEvent(new GridEvent('row.toggle', {grid: this.grid}));\n\t}\n\n\tsetColumnExpandLevel(level: number) {\n\t\tthis.model.setColumnExpandLevel(level);\n\t\tthis.table.colOffset = 0;\n\t\tthis.table.renderCells({horizontal: true});\n\t\tthis.updateSliders();\n\t\tthis.grid.dispatchEvent(new GridEvent('column.toggle', {grid: this.grid}));\n\t}\n\n\tasync exportHTML() {\n\t\tconst div = dom.createElement<HTMLDivElement>('div');\n\t\tdom.hideElement(div);\n\t\tdocument.body.appendChild(div);\n\t\tconst table = dom.createElement<Table>('og-table');\n\t\ttable.grid = this.grid;\n\t\ttable.model = this.model;\n\t\ttable.renderAll = true;\n\t\tdiv.appendChild(table);\n\t\tawait table.updateComplete;\n\n\t\tconst rowBreaks = this.model.options?.print?.rowBreaks;\n\t\tconst tableElm = table.table;\n\n\t\t// split table into multiple tables if page breaks are defined\n\t\tconst hasRowBreaks = rowBreaks && rowBreaks.length > 0;\n\t\tif (hasRowBreaks) {\n\t\t\tconst colgroup = tableElm.querySelector('colgroup');\n\t\t\tconst rows = [...tableElm.tBodies[0].rows];\n\n\t\t\tconst rowTitlesRange = this.model.options?.print?.rowTitles \n\t\t\t\t? CellRange.fromA1(this.model.options?.print?.rowTitles) : null;\n\n\t\t\tconst rowTitles = rowTitlesRange ? Array.from({\n\t\t\t\tlength: rowTitlesRange.r2 - rowTitlesRange.r1 + 1}, \n\t\t\t\t(_, i) => rows[table.rowMap.get(rowTitlesRange.r1 + i)]\n\t\t\t) : [];\n\n\t\t\tfor (let i = 0; i < rowBreaks.length; i++) {\n\t\t\t\tconst tableElm2 = dom.createElement<HTMLTableElement>('table');\n\t\t\t\ttableElm2.appendChild(colgroup.cloneNode(true));\n\t\t\t\tconst tbody = dom.createElement<HTMLTableSectionElement>('tbody');\n\t\t\t\ttableElm2.appendChild(tbody);\n\n\t\t\t\tconst rMin = table.rowMap.get(rowBreaks[i]);\n\t\t\t\tconst rMax = i < rowBreaks.length - 1 \n\t\t\t\t\t? table.rowMap.get(rowBreaks[i + 1]) \n\t\t\t\t\t: this.model.visibleRows.length - 1;\n\n\t\t\t\trowTitles.forEach(row => tbody.appendChild(row.cloneNode(true)));\n\n\t\t\t\tfor (let r = rMin; r <= rMax; r++) {\n\t\t\t\t\ttbody.appendChild(rows[r]);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\ttable.shadowRoot.appendChild(tableElm2);\n\t\t\t}\n\n\t\t\tcolgroup.cloneNode(true);\n\t\t}\n\n\t\tconst tableCss = `\n\t\t\t<style>\n\t\t\t\thtml {\n\t\t\t\t\t${createThemeVariablesCss(getThemeManager().themes.get('light')).cssText}\n\t\t\t\t}\n\t\t\t\t${hasRowBreaks ? 'table {break-after: page}' : ''}\n\t\t\t\t${Table.styles.map(style => style.cssText).join('\\n')}\n\t\t\t</style>\\n\n\t\t`;\n\n\t\tconst html = tableCss + table.shadowRoot.innerHTML.replace(/<!---->/g, '');\n\t\tdiv.remove();\n\t\treturn html;\n\t}\n\n\tautoscrollDirection: Direction;\n\tautoscrollTimer: number;\n\tautoscrollValue: number;\n\n\tstopAutoscroll() {\n\t\tif (this.autoscrollTimer) {\n\t\t\twindow.clearInterval(this.autoscrollTimer);\n\t\t}\n\t}\n\n\tstartAutoscroll() {\n\t\tthis.stopAutoscroll();\n\t\tthis.autoscrollTimer = window.setInterval(() => {\n\t\t\tif (this.autoscrollValue == 0) return this.stopAutoscroll();\n\t\t\tconst amount = Math.pow(this.autoscrollValue, constants.AUTOSCROLL_RATIO);\n\t\t\tswitch (this.autoscrollDirection) {\n\t\t\t\tcase 'down': this.scrollVerticalByPixels(amount); break;\n\t\t\t\tcase 'up': this.scrollVerticalByPixels(-amount); break;\n\t\t\t\tcase 'left': this.scrollHorizontalByPixels(-amount); break;\n\t\t\t\tcase 'right': this.scrollHorizontalByPixels(amount); break;\n\t\t\t}\n\t\t}, constants.AUTOSCROLL_INTERVAL);\n\t}\n\n\tautoscroll(moousePosition: {x: number, y: number}) {\n\t\tconst { x, y } = moousePosition;\n\t\tconst w = (this.table.clientWidth / this.table.zoom) - this.table.totalHeaderWidth;\n\t\tconst h = (this.table.clientHeight / this.table.zoom) - (this.table.totalHeaderHeight);\n\t\tlet direction: Direction;\n\t\tlet value = 0;\n\n\t\tif (x < constants.AUTOSCROLL_TRESHOLD && x < y && x < h - y) {\n\t\t\tdirection = 'left';\n\t\t\tvalue = constants.AUTOSCROLL_TRESHOLD - x;\n\t\t} else if (w - x < constants.AUTOSCROLL_TRESHOLD && w - x < y && w - x < h - y) {\n\t\t\tdirection = 'right';\n\t\t\tvalue = constants.AUTOSCROLL_TRESHOLD - w + x;\n\t\t} else if (y < constants.AUTOSCROLL_TRESHOLD) {\n\t\t\tdirection = 'up';\n\t\t\tvalue = constants.AUTOSCROLL_TRESHOLD - y;\n\t\t} else if (h - y < constants.AUTOSCROLL_TRESHOLD) {\n\t\t\tdirection = 'down';\n\t\t\tvalue = constants.AUTOSCROLL_TRESHOLD - h + y;\n\t\t}\n\n\t\tthis.autoscrollDirection = direction;\n\t\tthis.autoscrollValue = value;\n\t\tthis.stopAutoscroll();\n\t\tif (value > 0) {\n\t\t\tthis.startAutoscroll();\n\t\t}\n\t}\n\n\tasync load(requestFilters?: RequestFilters) {\n\t\trequestFilters = requestFilters || this.getAdapterRequestFilters();\n\t\tconst parentIndex = requestFilters.parent?.r ?? null;\n\t\tconst parentRow = parentIndex != null ? this.model.rows[parentIndex] : this.model.rowRoot;\n\t\t\n\t\tconst [newRowSources] = await Promise.all([this.grid.adapter.getRows(requestFilters)]);\n\t\tif (newRowSources.length > 0 && parentIndex === null) {\n\t\t\tthis.model.insertRowData(parentRow, requestFilters.offset, newRowSources);\n\t\t}\n\t\t\n\t\tconst [newCellSources] = await Promise.all([this.grid.adapter.getCells(requestFilters)]);\n\t\tnewCellSources?.map(cellSource => this.model.getCellByCoords(cellSource.r, cellSource.c)?.update(cellSource));\n\t\t\n\t\tthis.table.requestUpdate();\n\n\t\tif (newRowSources.length >= this.model.options.pageSize) parentRow.count = Infinity;\n\t\telse parentRow.count = parentRow.children.length;\n\n\t\tthis.grid.logger.info(`loaded ${newRowSources.length} rows`);\n\t\tthis.grid.loading = false;\n\t\tthis.grid.dispatchEvent(new GridEvent('afterLoad', {grid: this.grid}));\n\t}\n\n\tasync loadNextPage(parentIndex: number = null, forceLoad = false) {\n\t\tif (this.grid.loading) return;\n\t\tconst parentRow = parentIndex != null ? this.model.rows[parentIndex] : this.model.rowRoot;\n\t\tif (!forceLoad && parentRow.isLoaded) return;\n\n\t\tthis.grid.dispatchEvent(new GridEvent('beforeLoad', {grid: this.grid}));\n\t\tthis.grid.loading = true;\n\n\t\tconst offset = this.model.rows.length;\n\t\tthis.grid.logger.info(`loading rows offset = ${offset}`);\n\n\t\tawait this.load(Object.assign(this.getAdapterRequestFilters(), {\n\t\t\toffset: offset,\n\t\t\tparent: {r: parentIndex, props: null}\n\t\t}));\n\t}\n\n\tget totalSize() { return {\n\t\twidth: this.table.totalHeaderWidth + this.model.visibleColumns.reduce((acc, col) => acc + col.width, 0),\n\t\theight: this.table.thead.offsetHeight + this.model.visibleRows.reduce((acc, row) => acc + row.height, 0)\n\t} }\n\n\tprivate autofitDiv: HTMLDivElement;\n\n\tautofitColumn(c: number|ColumnModel, visibleValuesOnly = false, rerender = true) {\n\t\tconst column = typeof c === 'number' ? this.model.columns[c] : c;\n\t\tconst div = this.autofitDiv ?? (this.autofitDiv = dom.createElement<HTMLDivElement>('div'));\n\t\tdiv.style.position = 'absolute';\n\t\tdiv.style.zIndex = '100000';\n\t\tdom.setPosition(div, {l: -1000, t: -1000});\n\t\tthis.grid.shadowRoot.appendChild(div);\n\t\tlet maxWidth = 0;\n\t\tfor (const cell of this.model.getRangeIterator(CellRange.fromA1(column.address), !!visibleValuesOnly)) {\n\t\t\tconst cellDiv: HTMLDivElement = getCellRenderer(cell).call(this.table, div, cell) || div;\n\t\t\tcellDiv.style.width = 'auto';\n\t\t\tmaxWidth = Math.max(maxWidth, cellDiv.offsetWidth);\n\t\t}\n\t\tcolumn.width = maxWidth + 10;\n\t\tif (rerender) this.table.renderCells({horizontal: true});\n\t}\n\n\tautofitColumns(visibleValuesOnly = false) {\n\t\tthis.model.columns.forEach(col => this.autofitColumn(col, visibleValuesOnly, false));\n\t\tthis.table.renderCells({horizontal: true});\n\t}\n\n\tautofitRow(r: number|RowModel, visibleValuesOnly = false, rerender = true) {\n\t\tconst row = typeof r === 'number' ? this.model.rows[r] : r;\n\t\tconst div = this.autofitDiv ?? (this.autofitDiv = dom.createElement<HTMLDivElement>('div'));\n\t\tdiv.style.position = 'absolute';\n\t\tdiv.style.zIndex = '100000';\n\n\t\t// div.style.backgroundColor = 'red';\n\t\t// dom.setPosition(div, {l: 100, t: 100});\n\n\t\tdom.setPosition(div, {l: -1000, t: -1000});\n\t\tthis.grid.shadowRoot.appendChild(div);\n\t\tlet maxHeight = 0;\n\t\tfor (const cell of this.model.getRangeIterator(CellRange.fromA1(row.address), !!visibleValuesOnly)) {\n\t\t\tconst cellDiv: HTMLDivElement = getCellRenderer(cell).call(this.table, div, cell) || div;\n\t\t\tcellDiv.style.height = 'auto';\n\t\t\tmaxHeight = Math.max(maxHeight, cellDiv.offsetHeight);\n\t\t}\n\t\trow.height = maxHeight + 8;\n\t\tif (rerender) this.table.renderCells({vertical: true});\n\t}\n\n\tautofitRows(visibleValuesOnly = false) {\n\t\tthis.model.rows.forEach(row => this.autofitRow(row, visibleValuesOnly, false));\n\t\tthis.table.renderCells({vertical: true});\n\t}\n\n\tscrollTo(r: number|RangeAddress, c = 0) {\n\t\tlet range: CellRange;\n\t\tif (utils.isString(r)) range = CellRange.fromA1(r as RangeAddress);\n\t\telse range = new CellRange(c, r as number);\n\n\t\tthis.table.rowOffset = range.r1;\n\t\tthis.table.colOffset = range.c1;\n\t\tthis.requireVerticalUpdate = true;\n\t\tthis.requireHorizontalUpdate = true;\n\t\tthis.debounceRenderCells();\n\t\tthis.updateSliders();\n\t}\n\n}"]}
1
+ {"version":3,"file":"grid.rendering.js","sourceRoot":"","sources":["../../src/ui/grid.rendering.ts"],"names":[],"mappings":"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","sourcesContent":["import { Direction, dom, getThemeManager, utils } from \"@omegagrid/core\";\nimport { debounce } from \"ts-debounce\";\nimport { CellModel, ColumnModel, RowModel, CellRange, gridConstants as constants, RangeAddress } from \"@omegagrid/grid-core\";\nimport { Grid } from \"./grid\";\nimport { Table, TableRenderOptions, TableRow } from \"./table\";\nimport { GridEvent } from \"./grid.events\";\nimport { getCellRenderer } from \"../renderers\";\nimport { RequestFilters } from \"../gridAdapter\";\nimport { createThemeVariablesCss } from \"@omegagrid/core\";\n\nexport type RefreshOptions = {\n\tvertical?: boolean,\n\thorizontal?: boolean\n\trerenderTable?: boolean\n};\n\nexport class GridRendering {\n\n\trequireVerticalUpdate = true;\n\trequireHorizontalUpdate = false;\n\ttouchStartX: Touch;\n\ttouchStartY: Touch;\n\tresizing = false;\n\tcurrentResizedColumn: ColumnModel;\n\tcurrentResizedColumnWidth: number;\n\tcurrentResizedRow: RowModel;\n\tcurrentResizedRowHeight: number;\n\n\tprivate _vScrolling = true;\n\tget vScrolling() { return this._vScrolling }\n\tprivate _hScrolling = true;\n\tget hScrolling() { return this._hScrolling }\n\n\tget model() { return this.grid.model }\n\tget selection() { return this.grid.selection }\n\tget table() { return this.grid.table }\n\n\tconstructor(readonly grid: Grid) { }\n\n\treadonly debounceRenderCells = debounce(this.renderCells, 50, {isImmediate: false, maxWait: 100});\n\treadonly debounceCalculateViewport = debounce(this.calculateViewport, 200);\n\n\tisLastRowInViewport() {\n\t\tconst viewportRows = this.grid.table.viewport.rows;\n\t\tconst visibleRows = this.model.visibleRows;\n\t\treturn viewportRows[viewportRows.length - 1] == visibleRows[visibleRows.length - 1];\n\t}\n\n\trenderCells(update?: TableRenderOptions) {\n\t\tupdate = update || {vertical: this.requireVerticalUpdate, horizontal: this.requireHorizontalUpdate};\n\t\tthis.grid.comment.deatach();\n\t\tthis.grid.table.renderCells(update);\n\t\tthis.requireHorizontalUpdate = false;\n\t\tthis.requireVerticalUpdate = false;\n\t\tthis.debounceCalculateViewport();\n\t\tthis.grid.objects.updatePostions();\n\t}\n\n\trenderAll(rerenderTable = false) {\n\t\tif (this.grid.group) this.grid.group.grids.forEach((g: Grid) => g.rendering.render(rerenderTable));\n\t\telse this.render(rerenderTable);\n\t}\n\n\tasync render(rerenderTable = false) {\n\t\tif (!this.grid.table || !this.model) return;\n\t\tthis.grid.table.clearHeaderCache();\n\t\tthis.grid.table.clearBodyCache();\n\t\tif (this.grid.table.isConnected) {\n\t\t\tif (rerenderTable) {\n\t\t\t\tthis.grid.table.requestUpdate();\n\t\t\t\tawait this.grid.table.updateComplete;\n\t\t\t}\n\t\t\tthis.grid.table.renderCells({horizontal: true, vertical: true});\n\t\t\tthis.calculateViewport();\n\t\t}\n\t}\n\n\tupdateRange(range: CellRange, recalculate = false) {\n\t\tfor (const cell of this.model.getRangeIterator(range)) {\n\t\t\tthis.updateCells([cell], recalculate);\n\t\t}\n\t}\n\n\tupdateCell(cell: CellModel, recalculate = false) {\n\t\tthis.updateCells([cell], recalculate);\n\t}\n\n\tupdateSpilledCells(cell: CellModel) {\n\t\tlet spillCells: Set<CellModel>;\n\t\tif (cell.prevSpillRange) {\n\t\t\tspillCells = new Set();\n\t\t\tthis.model.getRangeIterator(cell.prevSpillRange).forEach(cell => spillCells.add(cell));\n\t\t}\n\t\tif (cell.spillRange) {\n\t\t\tspillCells = spillCells || new Set();\n\t\t\tthis.model.getRangeIterator(cell.spillRange).forEach(cell => spillCells.add(cell));\n\t\t}\n\t\tif (spillCells?.size > 0) this.updateCells(spillCells);\n\t}\n\n\tupdateCells(cells: Iterable<CellModel>, recalculate = false) {\n\t\tif (recalculate) {\n\t\t\tfor (const cell of cells) {\n\t\t\t\tcell.invalidateStyle();\n\t\t\t\tcell.invalidateValue();\n\t\t\t\tthis.model.calculations.clearDependecies(cell).evaluate(cell);\n\t\t\t\tthis.updateSpilledCells(cell);\n\t\t\t}\n\t\t}\n\n\t\tconst table = this.grid.table;\n\t\tfor (const cell of cells) table.renderBodyCell(cell);\n\t\t\n\t\tif (recalculate) {\n\t\t\tthis.model.calculations.invalidateDependants(cells).forEach((sheet, cell) => {\n\t\t\t\tif (sheet) this.grid.group.getGrid(sheet)?.table.renderBodyCell(cell);\n\t\t\t\telse table.renderBodyCell(cell);\n\t\t\t\tthis.updateSpilledCells(cell);\n\t\t\t});\n\t\t\tthis.grid.dispatchGridEvent('calculate', { cells: Array.from(cells) });\n\t\t}\n\t}\n\n\tupdateHeaders() {\n\t\tthis.model.indexVisibleColumns();\n\t\tthis.table.clearHeaderCache();\n\t\tthis.table.createHeaderRows();\n\t\tthis.table.renderHeader();\n\t}\n\n\tcalculateViewport(recalculate = false) {\n\t\tthis.grid.logger.info('calculate viwport');\n\t\tthis.updateCells(this.model.calculateViewport(), recalculate);\n\t}\n\n\tupdateSliders() {\n\t\tconst ws = this.table.viewportSize;\n\t\tthis.grid.vSlider.maxValue = this.model.visibleRows.length;\n\t\tthis.grid.vSlider.pageSize = ws.h / this.model.options.rowHeight;\n\t\tthis.grid.vSlider.value = this.table.rowOffset;\n\t\tthis.grid.hSlider.maxValue = this.model.visibleColumns.length;\n\t\tthis.grid.hSlider.pageSize = ws.w / this.model.options.columnWidth;\n\t\tthis.grid.hSlider.value = this.table.colOffset;\n\t}\n\n\tisVerticalScrollingEnabled() {\n\t\treturn this.grid.options.scrolling.verticalOverscroll !== false \n\t\t\t|| this.table.viewport.rows.length < this.model.visibleRows.length;\n\t}\n\n\tisHorizontalScrollingEnabled() {\n\t\treturn this.grid.options.scrolling.horizontalOverscroll !== false \n\t\t\t|| this.table.viewport.columns.length < this.model.visibleColumns.length;\n\t}\n\n\tupdateSliderVisibility() {\n\t\tthis._vScrolling = this.isVerticalScrollingEnabled();\n\t\tif (this._vScrolling) {\n\t\t\tthis.grid.vSlider.show();\n\t\t\tdom.showElement(this.grid.vSlider);\n\t\t} else {\n\t\t\tthis.grid.vSlider.hide();\n\t\t\tdom.hideElement(this.grid.vSlider);\n\t\t}\n\t\t\n\t\tthis._hScrolling = this.isHorizontalScrollingEnabled();\n\t\tif (this._hScrolling) {\n\t\t\tthis.grid.hSlider.show();\n\t\t\tdom.showElement(this.grid.hSlider);\n\t\t} else {\n\t\t\tthis.grid.hSlider.hide();\n\t\t\tdom.hideElement(this.grid.hSlider);\n\t\t}\n\t}\n\n\thideSliders() {\n\t\tthis.grid.vSlider.hide();\n\t\tthis.grid.hSlider.hide();\n\t}\n\n\tscrollVerticalByPixels(pixels: number) {\n\t\tif (!this.vScrolling) return;\n\n\t\tlet topRow = this.table.rowOffset;\n\t\tlet top = 0, r = 0;\n\t\tlet row: RowModel;\n\n\t\tif (pixels > 0) {\n\t\t\twhile (top < pixels && topRow + r < this.model.visibleRows.length) {\n\t\t\t\ttop += this.model.visibleRows[topRow + (r++)].height + 2;\n\t\t\t}\n\t\t\ttopRow = topRow + r;\n\t\t} else if (pixels < 0) {\n\t\t\tpixels = Math.abs(pixels);\n\t\t\twhile (top < pixels && topRow + r >= 0) {\n\t\t\t\trow = this.model.visibleRows[Math.min(this.model.visibleRows.length - 1, topRow + (r--))];\n\t\t\t\ttop += (row ? row.height : 0) + 2;\n\t\t\t}\n\t\t\ttopRow = topRow + r;\n\t\t}\n\n\t\tif (topRow >= this.model.visibleRows.length) topRow = this.model.visibleRows.length - 1;\n\t\t\n\t\tthis.requireVerticalUpdate = true;\n\t\tthis.table.rowOffset = Math.max(0, topRow);\n\t\tthis.debounceRenderCells();\n\t\tthis.updateSliders();\n\t}\n\n\tscrollHorizontalByPixels(pixels: number) {\n\t\tif (!this.hScrolling) return;\n\t\t\n\t\tlet leftCol = this.table.colOffset;\n\t\tlet left = 0, c = 0;\n\t\tif (pixels > 0) {\n\t\t\twhile (left < pixels && leftCol + c < this.model.visibleColumns.length) {\n\t\t\t\tleft += this.model.visibleColumns[leftCol + (c++)].width + 2;\n\t\t\t}\n\t\t\tleftCol = leftCol + c;\n\t\t} else if (pixels < 0) {\n\t\t\tpixels = Math.abs(pixels);\n\t\t\twhile (left < pixels && leftCol + c >= 0) {\n\t\t\t\tleft += this.model.visibleColumns[Math.min(this.model.visibleColumns.length - 1, leftCol + (c--))].width + 2;\n\t\t\t}\n\t\t\tleftCol = leftCol + c;\n\t\t}\n\n\t\tif (leftCol >= this.model.visibleColumns.length) leftCol = this.model.visibleColumns.length - 1;\n\n\t\tthis.requireHorizontalUpdate = true;\n\t\tthis.table.colOffset = Math.max(0, leftCol);\n\t\tthis.debounceRenderCells();\n\t\tthis.updateSliders();\n\t}\n\n\tupdateCellSelectionRange() {\n\t\tconst table = this.table;\n\t\tfor (const cell of this.model.getRangeIterator(this.selection.range, false)) {\n\t\t\ttable.renderBodyCell(cell);\n\t\t}\n\t}\n\n\tgetAdapterRequestFilters(): RequestFilters {\n\t\treturn {\n\t\t\toffset: 0,\n\t\t\tfilter: this.grid.filtering?.filter ? Array.from(this.grid.filtering.filter.settings.values()) : null,\n\t\t\torder: this.grid.model?.sorting?.settings\n\t\t};\n\t}\n\n\tasync toggleRow(index: number, dispatchEvent = true) {\n\t\tconst row = this.model.rows[index];\n\t\tif (row.isLoaded || row.isPartialyLoaded) {\n\t\t\trow.toggleCollapse(false, this.model.options.unhideRowAfterExpand);\n\t\t\tthis.table.renderCells({vertical: true});\n\t\t} else if (this.grid.adapter) {\n\t\t\tconst tr = this.table.getRowByModelIndex(index) as TableRow;\n\t\t\tif (tr && tr.expander) tr.expander.state = 'waiting';\n\t\n\t\t\trow.collapsed = false;\n\n\t\t\tconst requestFilters = Object.assign(this.getAdapterRequestFilters(), {\n\t\t\t\tparent: {r: row.index, props: row.properties}\n\t\t\t})\n\n\t\t\tconst [newRowSources] = await Promise.all([this.grid.adapter.getRows(requestFilters)]);\n\t\t\tthis.model.insertRowData(row, 0, newRowSources);\n\t\t\t\n\t\t\trequestFilters.rows = newRowSources;\n\t\t\tconst [newCellSources] = await Promise.all([this.grid.adapter.getCells(requestFilters)]);\n\t\t\tnewCellSources?.map(cellSource => this.model.getCellByCoords(cellSource.r, cellSource.c)?.update(cellSource));\n\t\t\n\t\t\tthis.table.requestUpdate();\n\t\t}\n\n\t\tthis.updateSliders();\n\t\tif (dispatchEvent) this.grid.dispatchEvent(new GridEvent('row.toggle', {grid: this.grid, row}));\n\t}\n\t\n\ttoggleColumn(index: number, dispatchEvent = true) {\n\t\tconst column = this.model.columns[index];\n\t\tcolumn.toggleCollapse(false, this.model.options.unhideColumnAfterExpand);\n\t\tthis.table.renderCells({horizontal: true});\n\t\tthis.updateSliders();\n\t\tif (dispatchEvent) this.grid.dispatchEvent(new GridEvent('column.toggle', {grid: this.grid, column }));\n\t}\n\n\tsetRowExpandLevel(level: number) {\n\t\tthis.model.setRowExpandLevel(level);\n\t\tthis.table.rowOffset = 0;\n\t\tthis.table.renderCells({vertical: true});\n\t\tthis.updateSliders();\n\t\tthis.grid.dispatchEvent(new GridEvent('row.toggle', {grid: this.grid}));\n\t}\n\n\tsetColumnExpandLevel(level: number) {\n\t\tthis.model.setColumnExpandLevel(level);\n\t\tthis.table.colOffset = 0;\n\t\tthis.table.renderCells({horizontal: true});\n\t\tthis.updateSliders();\n\t\tthis.grid.dispatchEvent(new GridEvent('column.toggle', {grid: this.grid}));\n\t}\n\n\tasync exportHTML() {\n\t\tconst div = dom.createElement<HTMLDivElement>('div');\n\t\tdom.hideElement(div);\n\t\tdocument.body.appendChild(div);\n\t\tconst table = dom.createElement<Table>('og-table');\n\t\ttable.grid = this.grid;\n\t\ttable.model = this.model;\n\t\ttable.renderAll = true;\n\t\tdiv.appendChild(table);\n\t\tawait table.updateComplete;\n\n\t\tconst rowBreaks = this.model.options?.print?.rowBreaks;\n\t\tconst tableElm = table.table;\n\n\t\t// split table into multiple tables if page breaks are defined\n\t\tconst hasRowBreaks = rowBreaks && rowBreaks.length > 0;\n\t\tif (hasRowBreaks) {\n\t\t\tconst colgroup = tableElm.querySelector('colgroup');\n\t\t\tconst rows = [...tableElm.tBodies[0].rows];\n\n\t\t\tconst rowTitlesRange = this.model.options?.print?.rowTitles \n\t\t\t\t? CellRange.fromA1(this.model.options?.print?.rowTitles) : null;\n\n\t\t\tconst rowTitles = rowTitlesRange ? Array.from({\n\t\t\t\tlength: rowTitlesRange.r2 - rowTitlesRange.r1 + 1}, \n\t\t\t\t(_, i) => rows[table.rowMap.get(rowTitlesRange.r1 + i)]\n\t\t\t) : [];\n\n\t\t\tfor (let i = 0; i < rowBreaks.length; i++) {\n\t\t\t\tconst tableElm2 = dom.createElement<HTMLTableElement>('table');\n\t\t\t\ttableElm2.appendChild(colgroup.cloneNode(true));\n\t\t\t\tconst tbody = dom.createElement<HTMLTableSectionElement>('tbody');\n\t\t\t\ttableElm2.appendChild(tbody);\n\n\t\t\t\tconst rMin = table.rowMap.get(rowBreaks[i]);\n\t\t\t\tconst rMax = i < rowBreaks.length - 1 \n\t\t\t\t\t? table.rowMap.get(rowBreaks[i + 1]) \n\t\t\t\t\t: this.model.visibleRows.length - 1;\n\n\t\t\t\trowTitles.forEach(row => tbody.appendChild(row.cloneNode(true)));\n\n\t\t\t\tfor (let r = rMin; r <= rMax; r++) {\n\t\t\t\t\ttbody.appendChild(rows[r]);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\ttable.shadowRoot.appendChild(tableElm2);\n\t\t\t}\n\n\t\t\tcolgroup.cloneNode(true);\n\t\t}\n\n\t\tconst tableCss = `\n\t\t\t<style>\n\t\t\t\thtml {\n\t\t\t\t\t${createThemeVariablesCss(getThemeManager().themes.get('light')).cssText}\n\t\t\t\t}\n\t\t\t\t${hasRowBreaks ? 'table {break-after: page}' : ''}\n\t\t\t\t${Table.styles.map(style => style.cssText).join('\\n')}\n\t\t\t</style>\\n\n\t\t`;\n\n\t\tconst html = tableCss + table.shadowRoot.innerHTML.replace(/<!---->/g, '');\n\t\tdiv.remove();\n\t\treturn html;\n\t}\n\n\tautoscrollDirection: Direction;\n\tautoscrollTimer: number;\n\tautoscrollValue: number;\n\n\tstopAutoscroll() {\n\t\tif (this.autoscrollTimer) {\n\t\t\twindow.clearInterval(this.autoscrollTimer);\n\t\t}\n\t}\n\n\tstartAutoscroll() {\n\t\tthis.stopAutoscroll();\n\t\tthis.autoscrollTimer = window.setInterval(() => {\n\t\t\tif (this.autoscrollValue == 0) return this.stopAutoscroll();\n\t\t\tconst amount = Math.pow(this.autoscrollValue, constants.AUTOSCROLL_RATIO);\n\t\t\tswitch (this.autoscrollDirection) {\n\t\t\t\tcase 'down': this.scrollVerticalByPixels(amount); break;\n\t\t\t\tcase 'up': this.scrollVerticalByPixels(-amount); break;\n\t\t\t\tcase 'left': this.scrollHorizontalByPixels(-amount); break;\n\t\t\t\tcase 'right': this.scrollHorizontalByPixels(amount); break;\n\t\t\t}\n\t\t}, constants.AUTOSCROLL_INTERVAL);\n\t}\n\n\tautoscroll(moousePosition: {x: number, y: number}) {\n\t\tconst { x, y } = moousePosition;\n\t\tconst w = (this.table.clientWidth / this.table.zoom) - this.table.totalHeaderWidth;\n\t\tconst h = (this.table.clientHeight / this.table.zoom) - (this.table.totalHeaderHeight);\n\t\tlet direction: Direction;\n\t\tlet value = 0;\n\n\t\tif (x < constants.AUTOSCROLL_TRESHOLD && x < y && x < h - y) {\n\t\t\tdirection = 'left';\n\t\t\tvalue = constants.AUTOSCROLL_TRESHOLD - x;\n\t\t} else if (w - x < constants.AUTOSCROLL_TRESHOLD && w - x < y && w - x < h - y) {\n\t\t\tdirection = 'right';\n\t\t\tvalue = constants.AUTOSCROLL_TRESHOLD - w + x;\n\t\t} else if (y < constants.AUTOSCROLL_TRESHOLD) {\n\t\t\tdirection = 'up';\n\t\t\tvalue = constants.AUTOSCROLL_TRESHOLD - y;\n\t\t} else if (h - y < constants.AUTOSCROLL_TRESHOLD) {\n\t\t\tdirection = 'down';\n\t\t\tvalue = constants.AUTOSCROLL_TRESHOLD - h + y;\n\t\t}\n\n\t\tthis.autoscrollDirection = direction;\n\t\tthis.autoscrollValue = value;\n\t\tthis.stopAutoscroll();\n\t\tif (value > 0) {\n\t\t\tthis.startAutoscroll();\n\t\t}\n\t}\n\n\tasync load(requestFilters?: RequestFilters) {\n\t\trequestFilters = requestFilters || this.getAdapterRequestFilters();\n\t\tconst parentIndex = requestFilters.parent?.r ?? null;\n\t\tconst parentRow = parentIndex != null ? this.model.rows[parentIndex] : this.model.rowRoot;\n\t\t\n\t\tconst [newRowSources] = await Promise.all([this.grid.adapter.getRows(requestFilters)]);\n\t\tif (newRowSources.length > 0 && parentIndex === null) {\n\t\t\tthis.model.insertRowData(parentRow, requestFilters.offset, newRowSources);\n\t\t}\n\t\t\n\t\tconst [newCellSources] = await Promise.all([this.grid.adapter.getCells(requestFilters)]);\n\t\tnewCellSources?.map(cellSource => this.model.getCellByCoords(cellSource.r, cellSource.c)?.update(cellSource));\n\t\t\n\t\tthis.table.requestUpdate();\n\n\t\tif (newRowSources.length >= this.model.options.pageSize) parentRow.count = Infinity;\n\t\telse parentRow.count = parentRow.children.length;\n\n\t\tthis.grid.logger.info(`loaded ${newRowSources.length} rows`);\n\t\tthis.grid.loading = false;\n\t\tthis.grid.dispatchEvent(new GridEvent('afterLoad', {grid: this.grid}));\n\t}\n\n\tasync loadNextPage(parentIndex: number = null, forceLoad = false) {\n\t\tif (this.grid.loading) return;\n\t\tconst parentRow = parentIndex != null ? this.model.rows[parentIndex] : this.model.rowRoot;\n\t\tif (!forceLoad && parentRow.isLoaded) return;\n\n\t\tthis.grid.dispatchEvent(new GridEvent('beforeLoad', {grid: this.grid}));\n\t\tthis.grid.loading = true;\n\n\t\tconst offset = this.model.rows.length;\n\t\tthis.grid.logger.info(`loading rows offset = ${offset}`);\n\n\t\tawait this.load(Object.assign(this.getAdapterRequestFilters(), {\n\t\t\toffset: offset,\n\t\t\tparent: {r: parentIndex, props: null}\n\t\t}));\n\t}\n\n\tget totalSize() { return {\n\t\twidth: this.table.totalHeaderWidth + this.model.visibleColumns.reduce((acc, col) => acc + col.width, 0),\n\t\theight: this.table.thead.offsetHeight + this.model.visibleRows.reduce((acc, row) => acc + row.height, 0)\n\t} }\n\n\tprivate autofitDiv: HTMLDivElement;\n\n\tautofitColumn(c: number|ColumnModel, visibleValuesOnly = false, rerender = true) {\n\t\tconst column = typeof c === 'number' ? this.model.columns[c] : c;\n\t\tconst div = this.autofitDiv ?? (this.autofitDiv = dom.createElement<HTMLDivElement>('div'));\n\t\tdiv.style.position = 'absolute';\n\t\tdiv.style.zIndex = '100000';\n\t\tdom.setPosition(div, {l: -1000, t: -1000});\n\t\tthis.grid.shadowRoot.appendChild(div);\n\t\tlet maxWidth = 0;\n\t\tfor (const cell of this.model.getRangeIterator(CellRange.fromA1(column.address), !!visibleValuesOnly)) {\n\t\t\tconst cellDiv: HTMLDivElement = getCellRenderer(cell).call(this.table, div, cell) || div;\n\t\t\tcellDiv.style.width = 'auto';\n\t\t\tmaxWidth = Math.max(maxWidth, cellDiv.offsetWidth);\n\t\t}\n\t\tif (column.header) {\n\t\t\tfor (const h of column.header) {\n\t\t\t\tif (!h) continue;\n\t\t\t\tif (h.html) div.innerHTML = h.label ?? '';\n\t\t\t\telse div.innerText = h.label ?? '';\n\t\t\t\tmaxWidth = Math.max(maxWidth, div.offsetWidth);\n\t\t\t}\n\t\t\tdiv.innerHTML = '';\n\t\t}\n\t\tcolumn.width = maxWidth + 10;\n\t\tif (rerender) this.table.renderCells({horizontal: true});\n\t}\n\n\tautofitColumns(visibleValuesOnly = false) {\n\t\tthis.model.columns.forEach(col => this.autofitColumn(col, visibleValuesOnly, false));\n\t\tthis.table.renderCells({horizontal: true});\n\t}\n\n\tautofitRow(r: number|RowModel, visibleValuesOnly = false, rerender = true) {\n\t\tconst row = typeof r === 'number' ? this.model.rows[r] : r;\n\t\tconst div = this.autofitDiv ?? (this.autofitDiv = dom.createElement<HTMLDivElement>('div'));\n\t\tdiv.style.position = 'absolute';\n\t\tdiv.style.zIndex = '100000';\n\n\t\t// div.style.backgroundColor = 'red';\n\t\t// dom.setPosition(div, {l: 100, t: 100});\n\n\t\tdom.setPosition(div, {l: -1000, t: -1000});\n\t\tthis.grid.shadowRoot.appendChild(div);\n\t\tlet maxHeight = 0;\n\t\tfor (const cell of this.model.getRangeIterator(CellRange.fromA1(row.address), !!visibleValuesOnly)) {\n\t\t\tconst cellDiv: HTMLDivElement = getCellRenderer(cell).call(this.table, div, cell) || div;\n\t\t\tcellDiv.style.height = 'auto';\n\t\t\tmaxHeight = Math.max(maxHeight, cellDiv.offsetHeight);\n\t\t}\n\t\trow.height = maxHeight + 8;\n\t\tif (rerender) this.table.renderCells({vertical: true});\n\t}\n\n\tautofitRows(visibleValuesOnly = false) {\n\t\tthis.model.rows.forEach(row => this.autofitRow(row, visibleValuesOnly, false));\n\t\tthis.table.renderCells({vertical: true});\n\t}\n\n\tscrollTo(r: number|RangeAddress, c = 0) {\n\t\tlet range: CellRange;\n\t\tif (utils.isString(r)) range = CellRange.fromA1(r as RangeAddress);\n\t\telse range = new CellRange(c, r as number);\n\n\t\tthis.table.rowOffset = range.r1;\n\t\tthis.table.colOffset = range.c1;\n\t\tthis.requireVerticalUpdate = true;\n\t\tthis.requireHorizontalUpdate = true;\n\t\tthis.debounceRenderCells();\n\t\tthis.updateSliders();\n\t}\n\n}"]}
@@ -4,6 +4,6 @@ export declare class SortingArrow extends LitElement {
4
4
  static styles: import("lit").CSSResult;
5
5
  sortSettings: SortSettings;
6
6
  updated(): void;
7
- render(): import("lit-html").TemplateResult<1> | "";
7
+ render(): "" | import("lit-html").TemplateResult<1>;
8
8
  }
9
9
  //# sourceMappingURL=sortingArrow.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@omegagrid/grid",
3
- "version": "0.10.24",
3
+ "version": "0.10.26",
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.24",
39
- "@omegagrid/core": "^0.10.24",
40
- "@omegagrid/grid-core": "^0.10.24",
41
- "@omegagrid/localize": "^0.10.24",
42
- "@omegagrid/tabs": "^0.10.24",
43
- "@omegagrid/tree": "^0.10.24",
38
+ "@omegagrid/commands": "^0.10.26",
39
+ "@omegagrid/core": "^0.10.26",
40
+ "@omegagrid/grid-core": "^0.10.26",
41
+ "@omegagrid/localize": "^0.10.26",
42
+ "@omegagrid/tabs": "^0.10.26",
43
+ "@omegagrid/tree": "^0.10.26",
44
44
  "@stdlib/stats": "^0.0.13",
45
45
  "date-fns": "^3.2.0",
46
46
  "lit": "^3.1.1",