@omegagrid/tree 0.10.81 → 0.10.86
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constants.d.ts +1 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/model/filterModel.d.ts +5 -0
- package/dist/model/filterModel.d.ts.map +1 -1
- package/dist/model/filterModel.js +46 -5
- package/dist/model/filterModel.js.map +1 -1
- package/dist/model/selectionModel.d.ts +6 -0
- package/dist/model/selectionModel.d.ts.map +1 -1
- package/dist/model/selectionModel.js +15 -0
- package/dist/model/selectionModel.js.map +1 -1
- package/dist/options.d.ts +1 -0
- package/dist/options.d.ts.map +1 -1
- package/dist/options.js +2 -1
- package/dist/options.js.map +1 -1
- package/dist/ui/dropdown.d.ts +6 -0
- package/dist/ui/dropdown.d.ts.map +1 -1
- package/dist/ui/dropdown.js +29 -9
- package/dist/ui/dropdown.js.map +1 -1
- package/dist/ui/tree.d.ts +9 -2
- package/dist/ui/tree.d.ts.map +1 -1
- package/dist/ui/tree.js +66 -5
- package/dist/ui/tree.js.map +1 -1
- package/dist/ui/tree.style.d.ts.map +1 -1
- package/dist/ui/tree.style.js +17 -5
- package/dist/ui/tree.style.js.map +1 -1
- package/package.json +3 -3
package/dist/constants.d.ts
CHANGED
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,wBAQC"}
|
|
@@ -4,6 +4,11 @@ export type FilterSettings = {
|
|
|
4
4
|
propertyc: string;
|
|
5
5
|
};
|
|
6
6
|
export type Matches = [number, number][];
|
|
7
|
+
/**
|
|
8
|
+
* Splits a search expression into terms - a comma separates them, the same way it separates
|
|
9
|
+
* the values of a selection, so a selection text can be edited and searched again.
|
|
10
|
+
*/
|
|
11
|
+
export declare const splitTerms: (term: string) => string[];
|
|
7
12
|
export declare class FilterModel {
|
|
8
13
|
model: TreeModel;
|
|
9
14
|
private _term;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filterModel.d.ts","sourceRoot":"","sources":["../../src/model/filterModel.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,MAAM,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"filterModel.d.ts","sourceRoot":"","sources":["../../src/model/filterModel.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,MAAM,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;AAEzC;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,aAAqE,CAAC;AAqD7G,qBAAa,WAAW;IASJ,KAAK,EAAE,SAAS;IAPnC,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,SAAS,CAA4B;IAE7C,IAAI,IAAI,WAAwB;IAEhC,IAAI,SAAS,YAAsD;gBAEhD,KAAK,EAAE,SAAS;IAEnC,MAAM,CAAC,IAAI,EAAE,MAAM;IA+BnB,KAAK;CAUL"}
|
|
@@ -1,7 +1,34 @@
|
|
|
1
1
|
/* eslint "@typescript-eslint/no-unused-vars": "off" */
|
|
2
2
|
import { html, utils } from '@omegagrid/core';
|
|
3
3
|
import { tree } from '@omegagrid/core';
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Splits a search expression into terms - a comma separates them, the same way it separates
|
|
6
|
+
* the values of a selection, so a selection text can be edited and searched again.
|
|
7
|
+
*/
|
|
8
|
+
export const splitTerms = (term) => (term ?? '').split(',').map(t => t.trim()).filter(t => t !== '');
|
|
9
|
+
/** Sorts the matched ranges and merges the overlapping ones, the highlighting expects them in order. */
|
|
10
|
+
const mergeMatches = (matches) => {
|
|
11
|
+
const merged = [];
|
|
12
|
+
matches.sort((a, b) => a[0] - b[0] || a[1] - b[1]).forEach(match => {
|
|
13
|
+
const last = merged[merged.length - 1];
|
|
14
|
+
if (last && match[0] <= last[1])
|
|
15
|
+
last[1] = Math.max(last[1], match[1]);
|
|
16
|
+
else
|
|
17
|
+
merged.push([match[0], match[1]]);
|
|
18
|
+
});
|
|
19
|
+
return merged;
|
|
20
|
+
};
|
|
21
|
+
const normalizeValue = (value) => utils.removeAccents((value ?? '').toString()).toLowerCase();
|
|
22
|
+
/** Matches an item whose whole value is the term, the match covers the whole value. */
|
|
23
|
+
const createExactMatcher = (term, property) => {
|
|
24
|
+
const normalizedTerm = normalizeValue(term);
|
|
25
|
+
return (item) => {
|
|
26
|
+
const value = (item[property] ?? '').toString();
|
|
27
|
+
return (normalizeValue(value) === normalizedTerm ? [[0, value.length]] : []);
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
/** Matches an item having the term anywhere in its value, the matches are the found ranges. */
|
|
31
|
+
const createTermMatcher = (term, property) => {
|
|
5
32
|
const regex = new RegExp(`${utils.escapeRegExp(utils.removeAccents(term))}`, 'ig');
|
|
6
33
|
let match;
|
|
7
34
|
return (item) => {
|
|
@@ -12,9 +39,22 @@ const createMatcher = (term, property) => {
|
|
|
12
39
|
return matches;
|
|
13
40
|
};
|
|
14
41
|
};
|
|
42
|
+
/**
|
|
43
|
+
* Matcher of a whole search expression - a match of any of its terms counts. A single term is
|
|
44
|
+
* searched anywhere in the values, but in a list of terms a term equal to a value of some item
|
|
45
|
+
* matches just that item, so a text of a selection can be edited and searched again.
|
|
46
|
+
*/
|
|
47
|
+
const createMatcher = (term, property, nodes) => {
|
|
48
|
+
const terms = splitTerms(term);
|
|
49
|
+
const values = terms.length > 1 ? new Set(nodes.map(node => normalizeValue(node[property]))) : null;
|
|
50
|
+
const matchers = terms.map(t => values?.has(normalizeValue(t))
|
|
51
|
+
? createExactMatcher(t, property)
|
|
52
|
+
: createTermMatcher(t, property));
|
|
53
|
+
return (node) => mergeMatches(matchers.flatMap(matcher => matcher(node)));
|
|
54
|
+
};
|
|
15
55
|
export class FilterModel {
|
|
16
56
|
get term() { return this._term; }
|
|
17
|
-
get hasFilter() { return this._term
|
|
57
|
+
get hasFilter() { return this._term !== '' && this._term !== null; }
|
|
18
58
|
constructor(model) {
|
|
19
59
|
this.model = model;
|
|
20
60
|
this._term = null;
|
|
@@ -22,12 +62,13 @@ export class FilterModel {
|
|
|
22
62
|
}
|
|
23
63
|
filter(term) {
|
|
24
64
|
this._term = term;
|
|
25
|
-
const matcher = createMatcher(this._term, this._property);
|
|
65
|
+
const matcher = createMatcher(this._term, this._property, this.model.nodes);
|
|
66
|
+
const hasTerm = splitTerms(term).length > 0;
|
|
26
67
|
let matches;
|
|
27
68
|
this.model.nodes.forEach(node => {
|
|
28
69
|
node.collapsed = false;
|
|
29
70
|
node.htmlValue = null;
|
|
30
|
-
if (
|
|
71
|
+
if (hasTerm) {
|
|
31
72
|
matches = matcher(node);
|
|
32
73
|
node.filterState = matches.length > 0 ? tree.FilterState.Matched : tree.FilterState.Filtered;
|
|
33
74
|
}
|
|
@@ -40,7 +81,7 @@ export class FilterModel {
|
|
|
40
81
|
if (parentNode.filterState == tree.FilterState.Filtered)
|
|
41
82
|
parentNode.filterState = tree.FilterState.ChildMatched;
|
|
42
83
|
});
|
|
43
|
-
if (
|
|
84
|
+
if (hasTerm) {
|
|
44
85
|
node.htmlValue = html.highlightText(node.value, matches);
|
|
45
86
|
}
|
|
46
87
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filterModel.js","sourceRoot":"","sources":["../../src/model/filterModel.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAWvC,MAAM,aAAa,GAAG,CAAQ,IAAY,EAAE,QAAqB,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"filterModel.js","sourceRoot":"","sources":["../../src/model/filterModel.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint \"@typescript-eslint/no-unused-vars\": \"off\" */\n\nimport { html, utils } from '@omegagrid/core';\nimport { tree } from '@omegagrid/core';\nimport { TreeModel } from './treeModel';\nimport { NodeModel } from './nodeModel';\n\nexport type FilterSettings = {\n\tterm: string;\n\tpropertyc: string;\n};\n\nexport type Matches = [number, number][];\n\n/**\n * Splits a search expression into terms - a comma separates them, the same way it separates\n * the values of a selection, so a selection text can be edited and searched again.\n */\nexport const splitTerms = (term: string) => (term ?? '').split(',').map(t => t.trim()).filter(t => t !== '');\n\n/** Sorts the matched ranges and merges the overlapping ones, the highlighting expects them in order. */\nconst mergeMatches = (matches: Matches) => {\n\tconst merged: Matches = [];\n\tmatches.sort((a, b) => a[0] - b[0] || a[1] - b[1]).forEach(match => {\n\t\tconst last = merged[merged.length - 1];\n\t\tif (last && match[0] <= last[1]) last[1] = Math.max(last[1], match[1]);\n\t\telse merged.push([match[0], match[1]]);\n\t});\n\treturn merged;\n};\n\nconst normalizeValue = (value: unknown) => utils.removeAccents((value ?? '').toString()).toLowerCase();\n\n/** Matches an item whose whole value is the term, the match covers the whole value. */\nconst createExactMatcher = <TItem>(term: string, property: keyof TItem) => {\n\tconst normalizedTerm = normalizeValue(term);\n\treturn (item: TItem) => {\n\t\tconst value = (item[property] ?? '').toString();\n\t\treturn (normalizeValue(value) === normalizedTerm ? [[0, value.length]] : []) as Matches;\n\t}\n};\n\n/** Matches an item having the term anywhere in its value, the matches are the found ranges. */\nconst createTermMatcher = <TItem>(term: string, property: keyof TItem) => {\n\tconst regex = new RegExp(`${utils.escapeRegExp(utils.removeAccents(term))}`, 'ig');\n\tlet match: RegExpExecArray;\n\treturn (item: TItem) => {\n\t\tconst matches: Matches = [];\n\t\twhile (match = regex.exec(utils.removeAccents((item[property] ?? \"\").toString()))) {\n\t\t\tmatches.push([match.index, regex.lastIndex]);\n\t\t}\n\t\treturn matches;\n\t}\n};\n\n/**\n * Matcher of a whole search expression - a match of any of its terms counts. A single term is\n * searched anywhere in the values, but in a list of terms a term equal to a value of some item\n * matches just that item, so a text of a selection can be edited and searched again.\n */\nconst createMatcher = (term: string, property: keyof NodeModel, nodes: NodeModel[]) => {\n\tconst terms = splitTerms(term);\n\tconst values = terms.length > 1 ? new Set(nodes.map(node => normalizeValue(node[property]))) : null;\n\tconst matchers = terms.map(t => values?.has(normalizeValue(t))\n\t\t? createExactMatcher<NodeModel>(t, property)\n\t\t: createTermMatcher<NodeModel>(t, property)\n\t);\n\treturn (node: NodeModel) => mergeMatches(matchers.flatMap(matcher => matcher(node)));\n};\n\n\nexport class FilterModel {\n\n\tprivate _term: string = null;\n\tprivate _property: keyof NodeModel = 'value';\n\n\tget term() { return this._term }\n\n\tget hasFilter() { return this._term !== '' && this._term !== null }\n\n\tconstructor(public model: TreeModel) { }\n\n\tfilter(term: string) {\n\t\tthis._term = term;\n\t\tconst matcher = createMatcher(this._term, this._property, this.model.nodes as NodeModel[]);\n\t\tconst hasTerm = splitTerms(term).length > 0;\n\t\tlet matches: Matches;\n\n\t\tthis.model.nodes.forEach(node => {\n\t\t\tnode.collapsed = false;\n\t\t\tnode.htmlValue = null;\n\t\t\tif (hasTerm) {\n\t\t\t\tmatches = matcher(node);\n\t\t\t\tnode.filterState = matches.length > 0 ? tree.FilterState.Matched : tree.FilterState.Filtered;\n\t\t\t} else {\n\t\t\t\tnode.filterState = tree.FilterState.Matched;\n\t\t\t\tnode.collapse();\n\t\t\t}\n\t\t\t\n\t\t\tif (node.filterState == tree.FilterState.Matched) {\n\t\t\t\tnode.walkUp(parentNode => {\n\t\t\t\t\tif (parentNode.filterState == tree.FilterState.Filtered) parentNode.filterState = tree.FilterState.ChildMatched;\n\t\t\t\t});\n\n\t\t\t\tif (hasTerm) {\n\t\t\t\t\tnode.htmlValue = html.highlightText(node.value, matches)\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.model.indexVisibleNodes();\n\t}\n\n\tclear() {\n\t\tthis._term = null;\n\t\tthis.model.nodes.forEach(node => {\n\t\t\tnode.filterState = tree.FilterState.Matched;\n\t\t\tnode.collapsed = false;\n\t\t\tnode.htmlValue = null;\n\t\t});\n\t\tthis.model.indexVisibleNodes();\n\t}\n\n}"]}
|
|
@@ -28,6 +28,12 @@ export declare class TreeSelectionModel {
|
|
|
28
28
|
validateChange(node: NodeModel, level: number, value: boolean): boolean;
|
|
29
29
|
toggle(node: NodeModel, level: number): this;
|
|
30
30
|
select(node: NodeModel, level: number, value?: boolean | null): this;
|
|
31
|
+
/**
|
|
32
|
+
* Selects every node matching the current filter, returns the number of them.
|
|
33
|
+
* With replace, the matched nodes become the whole selection - but only when there is
|
|
34
|
+
* at least one of them, an unmatched filter never throws the selection away.
|
|
35
|
+
*/
|
|
36
|
+
selectAll(replace?: boolean): number;
|
|
31
37
|
deselect(node: NodeModel, level: number): this;
|
|
32
38
|
clearItemSelection(node: NodeModel): void;
|
|
33
39
|
getLevelSelection(node: NodeModel): Map<number, boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectionModel.d.ts","sourceRoot":"","sources":["../../src/model/selectionModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"selectionModel.d.ts","sourceRoot":"","sources":["../../src/model/selectionModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,CAAC;AAM9B,oBAAY,mBAAmB;IAC9B,IAAI,IAAI;IACR,OAAO,IAAI;IACX,eAAe,IAAI;IACnB,SAAS,IAAI;CACb;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAE9E,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,CAAC,MAAM,GAAC,MAAM,GAAC,eAAe,CAAC,EAAE,qBAKhF;AAED,MAAM,MAAM,kBAAkB,GAAG;IAChC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAA;CACd,CAAC;AAEF,qBAAa,kBAAkB;IASX,OAAO,EAAE,OAAO;IAPnC,KAAK,kCAAyC;IAC9C,KAAK,EAAE,SAAS,CAAC;IAEjB,IAAI,KAAK,WAER;gBAEkB,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,eAAe,EAAE;IAMnE,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAOtC,QAAQ,CAAC,KAAK,EAAE,eAAe,EAAE;IAIjC,QAAQ,CAAC,UAAU,EAAE,eAAe,EAAE;IAWtC,qBAAqB,CAAC,eAAe,CAAC,EAAE,CAAC,MAAM,UAAU,CAAC,EAAE,IACnD,SAAS,MAAM,EAAE,QAAQ,kBAAkB;IAUpD,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC,MAAM,UAAU,CAAC,EAAE;IAahD,KAAK;IAIL,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IAS7D,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM;IAmCrC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,OAAO,GAAC,IAAW;IAgBjE;;;;OAIG;IACH,SAAS,CAAC,OAAO,UAAQ;IAQzB,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM;IAUvC,kBAAkB,CAAC,IAAI,EAAE,SAAS;IAIlC,iBAAiB,CAAC,IAAI,EAAE,SAAS;IAMjC,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,GAAE,OAAc;IAOrE,kBAAkB,CAAC,IAAI,EAAE,SAAS;IAYlC,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,mBAAmB;IAaxD,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM;CAgB/C"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { SelectMode } from "../types";
|
|
2
|
+
import { tree } from "@omegagrid/core";
|
|
2
3
|
const getMapValue = (map, key, defaultValue = null) => map.has(key) ? map.get(key) : defaultValue;
|
|
3
4
|
export var NodeSelectionStatus;
|
|
4
5
|
(function (NodeSelectionStatus) {
|
|
@@ -134,6 +135,20 @@ export class TreeSelectionModel {
|
|
|
134
135
|
this.clearItemSelection(node);
|
|
135
136
|
return this;
|
|
136
137
|
}
|
|
138
|
+
/**
|
|
139
|
+
* Selects every node matching the current filter, returns the number of them.
|
|
140
|
+
* With replace, the matched nodes become the whole selection - but only when there is
|
|
141
|
+
* at least one of them, an unmatched filter never throws the selection away.
|
|
142
|
+
*/
|
|
143
|
+
selectAll(replace = false) {
|
|
144
|
+
const matched = this.model.nodes.filter(node => node.filterState == tree.FilterState.Matched);
|
|
145
|
+
if (matched.length == 0)
|
|
146
|
+
return 0;
|
|
147
|
+
if (replace)
|
|
148
|
+
this.clear();
|
|
149
|
+
matched.forEach(node => this.ensureItem(node.key, node.value).levels.set(0, true));
|
|
150
|
+
return matched.length;
|
|
151
|
+
}
|
|
137
152
|
deselect(node, level) {
|
|
138
153
|
if (!this.validateChange(node, level, false))
|
|
139
154
|
return this;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectionModel.js","sourceRoot":"","sources":["../../src/model/selectionModel.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeModel, NodeSource } from \"./nodeModel\";\nimport { Options } from \"../options\";\nimport { SelectMode } from \"../types\";\nimport { TreeModel } from \".\";\n\nconst getMapValue = <TKey, TValue>(map: Map<TKey, TValue>, key: TKey, defaultValue: TValue = null) =>\n\tmap.has(key) ? map.get(key) : defaultValue;\n\nexport enum NodeSelectionStatus {\n\tNone = 0,\n\tChecked = 1,\n\tCheckedByParent = 2,\n\tUnchecked = 3\n}\n\nexport type SerializedValue = [string, number?, (0|1)?, Partial<NodeSource>?];\n\nexport function normalizeSerializedValues(data: (string|number|SerializedValue)[]) {\n\treturn data.map<SerializedValue>(item => {\n\t\tif (Array.isArray(item)) return item;\n\t\treturn [item.toString(), 0, 1];\n\t});\n}\n\nexport type SelectedItemParams = {\n\tlevels: Map<number, boolean>,\n\tvalue?: string\n};\n\nexport class TreeSelectionModel {\n\n\titems = new Map<string, SelectedItemParams>();\n\tmodel: TreeModel;\n\n\tget count() {\n\t\treturn this.items.size;\n\t}\n\n\tconstructor(public options: Options, sourceData?: SerializedValue[]) {\n\t\tif (sourceData) {\n\t\t\tthis.populate(sourceData);\n\t\t}\n\t}\n\n\tensureItem(key: string, value?: string) {\n\t\tif (!this.items.has(key)) this.items.set(key, {levels: new Map<number, boolean>()});\n\t\tconst item = this.items.get(key);\n\t\tif (value != null) item.value = value;\n\t\treturn item;\t\n\t}\n\n\tsetItems(items: SerializedValue[]) {\n\t\tthis.populate(items ?? []);\n\t}\n\n\tpopulate(sourceData: SerializedValue[]) {\n\t\tconst oldItems = this.items;\n\t\tthis.items = new Map();\n\t\tsourceData.forEach(sourceItem => {\n\t\t\tconst value = sourceItem[3]?.v ?? sourceItem[3]?.value ?? oldItems.get(sourceItem[0])?.value;\n\t\t\tconst item = this.ensureItem(sourceItem[0], value);\n\t\t\titem.levels.set(sourceItem[1] ?? 0, (sourceItem[2] ?? 1) == 1);\n\t\t\tif (sourceItem[3]) Object.assign(item, sourceItem[3]);\n\t\t});\n\t}\n\n\tgetPropertySerializer(serializedProps?: (keyof NodeSource)[]) {\n\t\treturn (nodeKey: string, params: SelectedItemParams) => serializedProps.reduce((acc, key) => {\n\t\t\tif (key == 'v' || key == 'value') {\n\t\t\t\tacc[key] = params.value ?? this.model?.nodeMap.get(nodeKey)?.value;\n\t\t\t} else {\n\t\t\t\tacc[key] = this.model?.nodeMap.get(nodeKey)?.value;\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, {} as Record<string, unknown>);\n\t}\n\n\tserialize(serializedProps?: (keyof NodeSource)[]) {\n\t\tconst items: SerializedValue[] = [];\n\t\tconst propertySerializer = serializedProps?.length ? this.getPropertySerializer(serializedProps) : null;\n\t\tthis.items.forEach((item, key) => {\n\t\t\tconst props = propertySerializer ? propertySerializer(key, item) : null;\n\t\t\titem.levels.forEach((value, level) => items.push(props \n\t\t\t\t? [key, level, value ? 1 : 0, props] \n\t\t\t\t: [key, level, value ? 1 : 0]\n\t\t\t));\n\t\t});\n\t\treturn items;\n\t}\n\n\tclear() {\n\t\tthis.items.clear();\n\t}\n\n\tvalidateChange(node: NodeModel, level: number, value: boolean) {\n\t\tif (this.options.selectMode == SelectMode.Single) {\n\t\t\tif (value === false && this.items.size == 1) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\ttoggle(node: NodeModel, level: number) {\n\t\tlet item = this.ensureItem(node.key, node.value);\n\t\tconst currentValue = item.levels.has(level) ? item.levels.get(level) : null;\n\t\t\n\t\tif (!this.validateChange(node, level, item.levels.has(level) ? !item.levels.get(level) : true)) return this;\n\n\t\tif (currentValue) {\n\t\t\titem.levels.delete(level);\n\t\t} else if (this.options.selectMode == SelectMode.MultipleLevels) {\n\t\t\tif (level == 0 && this.isSelectedByParent(node)) {\n\t\t\t\tif (currentValue === false) {\n\t\t\t\t\titem.levels.delete(0);\n\t\t\t\t} else {\n\t\t\t\t\titem.levels.set(0, false);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\titem.levels.set(level, true);\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.options.selectMode == SelectMode.Single) {\n\t\t\t\tthis.clear();\n\t\t\t\titem = this.ensureItem(node.key, node.value);\n\t\t\t}\n\n\t\t\tif (level == 0) {\n\t\t\t\titem.levels.set(0, true);\n\t\t\t} else {\n\t\t\t\tthis.toggleChildNodes(node, level);\n\t\t\t}\n\t\t}\n\n\t\tif (item.levels.size == 0) this.clearItemSelection(node);\n\t\treturn this;\n\t}\n\t\n\tselect(node: NodeModel, level: number, value: boolean|null = true) {\n\t\tconst item = this.ensureItem(node.key, node.value);\n\n\t\tif (!this.validateChange(node, level, value === null ? (item.levels.has(level) ? item.levels.get(level) : false) : value)) return this;\n\n\t\tif (value === true) {\n\t\t\titem.levels.set(level, true);\n\t\t} else if (value === false && this.options.selectMode == SelectMode.MultipleLevels) {\n\t\t\titem.levels.set(level, false);\n\t\t} else {\n\t\t\titem.levels.delete(level);\n\t\t}\n\t\tif (item.levels.size == 0) this.clearItemSelection(node);\n\t\treturn this;\n\t}\n\n\tdeselect(node: NodeModel, level: number) {\n\t\tif (!this.validateChange(node, level, false)) return this;\n\n\t\tif (this.items.has(node.key)) {\n\t\t\tthis.items.get(node.key).levels.delete(level);\n\t\t\tif (this.items.get(node.key).levels.size == 0) this.clearItemSelection(node);\n\t\t}\n\t\treturn this;\n\t}\n\t\n\tclearItemSelection(node: NodeModel) {\n\t\tthis.items.delete(node.key);\n\t}\n\n\tgetLevelSelection(node: NodeModel) {\n\t\treturn this.items.has(node.key)\n\t\t\t? this.items.get(node.key).levels\n\t\t\t: new Map<number, boolean>()\n\t}\n\n\tgetValue(node: NodeModel, level: number, defaultValue: boolean = null) {\n\t\tif (this.items.has(node.key)) {\n\t\t\treturn getMapValue(this.items.get(node.key).levels, level, defaultValue);\n\t\t}\n\t\treturn defaultValue;\n\t}\n\n\tisSelectedByParent(node: NodeModel) {\n\t\tlet parent = node.parent as NodeModel;\n\t\tlet levelSpan = 0;\n\t\twhile (parent) {\n\t\t\tif (this.getValue(parent, ++levelSpan, false)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tparent = parent.parent as NodeModel;\n\t\t}\n\t\treturn false;\n\t}\n\n\tgetSelectionStatus(node: NodeModel): NodeSelectionStatus {\n\t\tconst value = this.getValue(node, 0, null);\n\n\t\tif (value === true) {\n\t\t\treturn NodeSelectionStatus.Checked;\n\t\t} else if (value === false) {\n\t\t\treturn NodeSelectionStatus.Unchecked;\n\t\t} else if (this.options.selectMode == SelectMode.MultipleLevels && this.isSelectedByParent(node)) {\n\t\t\treturn NodeSelectionStatus.CheckedByParent;\n\t\t}\n\t\treturn NodeSelectionStatus.None;\n\t}\n\n\ttoggleChildNodes(node: NodeModel, level: number) {\n\t\tconst parentLevel = node.level;\n\t\tlet value: boolean = null;\n\n\t\tnode.walk((n: NodeModel) => {\n\t\t\tif (n.level - parentLevel == level) {\n\t\t\t\tif (value === null) {\n\t\t\t\t\tvalue = this.getSelectionStatus(n) != NodeSelectionStatus.Checked;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.select(n, 0, value ? true : null)\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t}\n\n}"]}
|
|
1
|
+
{"version":3,"file":"selectionModel.js","sourceRoot":"","sources":["../../src/model/selectionModel.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,MAAM,WAAW,GAAG,CAAe,GAAsB,EAAE,GAAS,EAAE,eAAuB,IAAI,EAAE,EAAE,CACpG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;AAE5C,MAAM,CAAN,IAAY,mBAKX;AALD,WAAY,mBAAmB;IAC9B,6DAAQ,CAAA;IACR,mEAAW,CAAA;IACX,mFAAmB,CAAA;IACnB,uEAAa,CAAA;AACd,CAAC,EALW,mBAAmB,KAAnB,mBAAmB,QAK9B;AAID,MAAM,UAAU,yBAAyB,CAAC,IAAuC;IAChF,OAAO,IAAI,CAAC,GAAG,CAAkB,IAAI,CAAC,EAAE;QACvC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACJ,CAAC;AAOD,MAAM,OAAO,kBAAkB;IAK9B,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACxB,CAAC;IAED,YAAmB,OAAgB,EAAE,UAA8B;QAAhD,YAAO,GAAP,OAAO,CAAS;QAPnC,UAAK,GAAG,IAAI,GAAG,EAA8B,CAAC;QAQ7C,IAAI,UAAU,EAAE,CAAC;YAChB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC3B,CAAC;IACF,CAAC;IAED,UAAU,CAAC,GAAW,EAAE,KAAc;QACrC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAC,MAAM,EAAE,IAAI,GAAG,EAAmB,EAAC,CAAC,CAAC;QACpF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,KAAK,IAAI,IAAI;YAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACtC,OAAO,IAAI,CAAC;IACb,CAAC;IAED,QAAQ,CAAC,KAAwB;QAChC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,QAAQ,CAAC,UAA6B;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;QACvB,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YAC/B,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;YAC7F,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACnD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC/D,IAAI,UAAU,CAAC,CAAC,CAAC;gBAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,qBAAqB,CAAC,eAAsC;QAC3D,OAAO,CAAC,OAAe,EAAE,MAA0B,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC3F,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,OAAO,EAAE,CAAC;gBAClC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC;YACpE,CAAC;iBAAM,CAAC;gBACP,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC;YACpD,CAAC;YACD,OAAO,GAAG,CAAC;QACZ,CAAC,EAAE,EAA6B,CAAC,CAAC;IACnC,CAAC;IAED,SAAS,CAAC,eAAsC;QAC/C,MAAM,KAAK,GAAsB,EAAE,CAAC;QACpC,MAAM,kBAAkB,GAAG,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACxG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YAChC,MAAM,KAAK,GAAG,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACxE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK;gBACrD,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;gBACpC,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC7B,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACd,CAAC;IAED,KAAK;QACJ,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED,cAAc,CAAC,IAAe,EAAE,KAAa,EAAE,KAAc;QAC5D,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YAClD,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;gBAC7C,OAAO,KAAK,CAAC;YACd,CAAC;QACF,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,CAAC,IAAe,EAAE,KAAa;QACpC,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE5E,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAE5G,IAAI,YAAY,EAAE,CAAC;YAClB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,UAAU,CAAC,cAAc,EAAE,CAAC;YACjE,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjD,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;oBAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACP,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC3B,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC9B,CAAC;QACF,CAAC;aAAM,CAAC;YACP,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;gBAClD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9C,CAAC;YAED,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;gBAChB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACpC,CAAC;QACF,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;YAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,CAAC,IAAe,EAAE,KAAa,EAAE,QAAsB,IAAI;QAChE,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAEnD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEvI,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC9B,CAAC;aAAM,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,UAAU,CAAC,cAAc,EAAE,CAAC;YACpF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;YAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,OAAO,GAAG,KAAK;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC9F,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC;QAClC,IAAI,OAAO;YAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QACnF,OAAO,OAAO,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,QAAQ,CAAC,IAAe,EAAE,KAAa;QACtC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAE1D,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;gBAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,kBAAkB,CAAC,IAAe;QACjC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,iBAAiB,CAAC,IAAe;QAChC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;YAC9B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM;YACjC,CAAC,CAAC,IAAI,GAAG,EAAmB,CAAA;IAC9B,CAAC;IAED,QAAQ,CAAC,IAAe,EAAE,KAAa,EAAE,eAAwB,IAAI;QACpE,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,YAAY,CAAC;IACrB,CAAC;IAED,kBAAkB,CAAC,IAAe;QACjC,IAAI,MAAM,GAAG,IAAI,CAAC,MAAmB,CAAC;QACtC,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,OAAO,MAAM,EAAE,CAAC;YACf,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC;gBAC/C,OAAO,IAAI,CAAC;YACb,CAAC;YACD,MAAM,GAAG,MAAM,CAAC,MAAmB,CAAC;QACrC,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAED,kBAAkB,CAAC,IAAe;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAE3C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACpB,OAAO,mBAAmB,CAAC,OAAO,CAAC;QACpC,CAAC;aAAM,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;YAC5B,OAAO,mBAAmB,CAAC,SAAS,CAAC;QACtC,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,UAAU,CAAC,cAAc,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;YAClG,OAAO,mBAAmB,CAAC,eAAe,CAAC;QAC5C,CAAC;QACD,OAAO,mBAAmB,CAAC,IAAI,CAAC;IACjC,CAAC;IAED,gBAAgB,CAAC,IAAe,EAAE,KAAa;QAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;QAC/B,IAAI,KAAK,GAAY,IAAI,CAAC;QAE1B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAY,EAAE,EAAE;YAC1B,IAAI,CAAC,CAAC,KAAK,GAAG,WAAW,IAAI,KAAK,EAAE,CAAC;gBACpC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBACpB,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,mBAAmB,CAAC,OAAO,CAAC;gBACnE,CAAC;gBAED,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;gBACtC,OAAO,KAAK,CAAC;YACd,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;CAED","sourcesContent":["import { NodeModel, NodeSource } from \"./nodeModel\";\nimport { Options } from \"../options\";\nimport { SelectMode } from \"../types\";\nimport { TreeModel } from \".\";\nimport { tree } from \"@omegagrid/core\";\n\nconst getMapValue = <TKey, TValue>(map: Map<TKey, TValue>, key: TKey, defaultValue: TValue = null) =>\n\tmap.has(key) ? map.get(key) : defaultValue;\n\nexport enum NodeSelectionStatus {\n\tNone = 0,\n\tChecked = 1,\n\tCheckedByParent = 2,\n\tUnchecked = 3\n}\n\nexport type SerializedValue = [string, number?, (0|1)?, Partial<NodeSource>?];\n\nexport function normalizeSerializedValues(data: (string|number|SerializedValue)[]) {\n\treturn data.map<SerializedValue>(item => {\n\t\tif (Array.isArray(item)) return item;\n\t\treturn [item.toString(), 0, 1];\n\t});\n}\n\nexport type SelectedItemParams = {\n\tlevels: Map<number, boolean>,\n\tvalue?: string\n};\n\nexport class TreeSelectionModel {\n\n\titems = new Map<string, SelectedItemParams>();\n\tmodel: TreeModel;\n\n\tget count() {\n\t\treturn this.items.size;\n\t}\n\n\tconstructor(public options: Options, sourceData?: SerializedValue[]) {\n\t\tif (sourceData) {\n\t\t\tthis.populate(sourceData);\n\t\t}\n\t}\n\n\tensureItem(key: string, value?: string) {\n\t\tif (!this.items.has(key)) this.items.set(key, {levels: new Map<number, boolean>()});\n\t\tconst item = this.items.get(key);\n\t\tif (value != null) item.value = value;\n\t\treturn item;\t\n\t}\n\n\tsetItems(items: SerializedValue[]) {\n\t\tthis.populate(items ?? []);\n\t}\n\n\tpopulate(sourceData: SerializedValue[]) {\n\t\tconst oldItems = this.items;\n\t\tthis.items = new Map();\n\t\tsourceData.forEach(sourceItem => {\n\t\t\tconst value = sourceItem[3]?.v ?? sourceItem[3]?.value ?? oldItems.get(sourceItem[0])?.value;\n\t\t\tconst item = this.ensureItem(sourceItem[0], value);\n\t\t\titem.levels.set(sourceItem[1] ?? 0, (sourceItem[2] ?? 1) == 1);\n\t\t\tif (sourceItem[3]) Object.assign(item, sourceItem[3]);\n\t\t});\n\t}\n\n\tgetPropertySerializer(serializedProps?: (keyof NodeSource)[]) {\n\t\treturn (nodeKey: string, params: SelectedItemParams) => serializedProps.reduce((acc, key) => {\n\t\t\tif (key == 'v' || key == 'value') {\n\t\t\t\tacc[key] = params.value ?? this.model?.nodeMap.get(nodeKey)?.value;\n\t\t\t} else {\n\t\t\t\tacc[key] = this.model?.nodeMap.get(nodeKey)?.value;\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, {} as Record<string, unknown>);\n\t}\n\n\tserialize(serializedProps?: (keyof NodeSource)[]) {\n\t\tconst items: SerializedValue[] = [];\n\t\tconst propertySerializer = serializedProps?.length ? this.getPropertySerializer(serializedProps) : null;\n\t\tthis.items.forEach((item, key) => {\n\t\t\tconst props = propertySerializer ? propertySerializer(key, item) : null;\n\t\t\titem.levels.forEach((value, level) => items.push(props \n\t\t\t\t? [key, level, value ? 1 : 0, props] \n\t\t\t\t: [key, level, value ? 1 : 0]\n\t\t\t));\n\t\t});\n\t\treturn items;\n\t}\n\n\tclear() {\n\t\tthis.items.clear();\n\t}\n\n\tvalidateChange(node: NodeModel, level: number, value: boolean) {\n\t\tif (this.options.selectMode == SelectMode.Single) {\n\t\t\tif (value === false && this.items.size == 1) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\ttoggle(node: NodeModel, level: number) {\n\t\tlet item = this.ensureItem(node.key, node.value);\n\t\tconst currentValue = item.levels.has(level) ? item.levels.get(level) : null;\n\t\t\n\t\tif (!this.validateChange(node, level, item.levels.has(level) ? !item.levels.get(level) : true)) return this;\n\n\t\tif (currentValue) {\n\t\t\titem.levels.delete(level);\n\t\t} else if (this.options.selectMode == SelectMode.MultipleLevels) {\n\t\t\tif (level == 0 && this.isSelectedByParent(node)) {\n\t\t\t\tif (currentValue === false) {\n\t\t\t\t\titem.levels.delete(0);\n\t\t\t\t} else {\n\t\t\t\t\titem.levels.set(0, false);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\titem.levels.set(level, true);\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.options.selectMode == SelectMode.Single) {\n\t\t\t\tthis.clear();\n\t\t\t\titem = this.ensureItem(node.key, node.value);\n\t\t\t}\n\n\t\t\tif (level == 0) {\n\t\t\t\titem.levels.set(0, true);\n\t\t\t} else {\n\t\t\t\tthis.toggleChildNodes(node, level);\n\t\t\t}\n\t\t}\n\n\t\tif (item.levels.size == 0) this.clearItemSelection(node);\n\t\treturn this;\n\t}\n\t\n\tselect(node: NodeModel, level: number, value: boolean|null = true) {\n\t\tconst item = this.ensureItem(node.key, node.value);\n\n\t\tif (!this.validateChange(node, level, value === null ? (item.levels.has(level) ? item.levels.get(level) : false) : value)) return this;\n\n\t\tif (value === true) {\n\t\t\titem.levels.set(level, true);\n\t\t} else if (value === false && this.options.selectMode == SelectMode.MultipleLevels) {\n\t\t\titem.levels.set(level, false);\n\t\t} else {\n\t\t\titem.levels.delete(level);\n\t\t}\n\t\tif (item.levels.size == 0) this.clearItemSelection(node);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Selects every node matching the current filter, returns the number of them.\n\t * With replace, the matched nodes become the whole selection - but only when there is\n\t * at least one of them, an unmatched filter never throws the selection away.\n\t */\n\tselectAll(replace = false) {\n\t\tconst matched = this.model.nodes.filter(node => node.filterState == tree.FilterState.Matched);\n\t\tif (matched.length == 0) return 0;\n\t\tif (replace) this.clear();\n\t\tmatched.forEach(node => this.ensureItem(node.key, node.value).levels.set(0, true));\n\t\treturn matched.length;\n\t}\n\n\tdeselect(node: NodeModel, level: number) {\n\t\tif (!this.validateChange(node, level, false)) return this;\n\n\t\tif (this.items.has(node.key)) {\n\t\t\tthis.items.get(node.key).levels.delete(level);\n\t\t\tif (this.items.get(node.key).levels.size == 0) this.clearItemSelection(node);\n\t\t}\n\t\treturn this;\n\t}\n\t\n\tclearItemSelection(node: NodeModel) {\n\t\tthis.items.delete(node.key);\n\t}\n\n\tgetLevelSelection(node: NodeModel) {\n\t\treturn this.items.has(node.key)\n\t\t\t? this.items.get(node.key).levels\n\t\t\t: new Map<number, boolean>()\n\t}\n\n\tgetValue(node: NodeModel, level: number, defaultValue: boolean = null) {\n\t\tif (this.items.has(node.key)) {\n\t\t\treturn getMapValue(this.items.get(node.key).levels, level, defaultValue);\n\t\t}\n\t\treturn defaultValue;\n\t}\n\n\tisSelectedByParent(node: NodeModel) {\n\t\tlet parent = node.parent as NodeModel;\n\t\tlet levelSpan = 0;\n\t\twhile (parent) {\n\t\t\tif (this.getValue(parent, ++levelSpan, false)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tparent = parent.parent as NodeModel;\n\t\t}\n\t\treturn false;\n\t}\n\n\tgetSelectionStatus(node: NodeModel): NodeSelectionStatus {\n\t\tconst value = this.getValue(node, 0, null);\n\n\t\tif (value === true) {\n\t\t\treturn NodeSelectionStatus.Checked;\n\t\t} else if (value === false) {\n\t\t\treturn NodeSelectionStatus.Unchecked;\n\t\t} else if (this.options.selectMode == SelectMode.MultipleLevels && this.isSelectedByParent(node)) {\n\t\t\treturn NodeSelectionStatus.CheckedByParent;\n\t\t}\n\t\treturn NodeSelectionStatus.None;\n\t}\n\n\ttoggleChildNodes(node: NodeModel, level: number) {\n\t\tconst parentLevel = node.level;\n\t\tlet value: boolean = null;\n\n\t\tnode.walk((n: NodeModel) => {\n\t\t\tif (n.level - parentLevel == level) {\n\t\t\t\tif (value === null) {\n\t\t\t\t\tvalue = this.getSelectionStatus(n) != NodeSelectionStatus.Checked;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.select(n, 0, value ? true : null)\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t}\n\n}"]}
|
package/dist/options.d.ts
CHANGED
package/dist/options.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,KAAK,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE7C,MAAM,MAAM,OAAO,GAAG;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,UAAU,CAAC,EAAE,UAAU,GAAC,MAAM,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,cAAc,CAAC,EAAE,YAAY,EAAE,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAClD,WAAW,CAAC,EAAE,iBAAiB,GAAC,MAAM,GAAC,CAAC,iBAAiB,GAAC,MAAM,CAAC,EAAE,CAAC;IACpE,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,KAAK,MAAM,GAAC,cAAc,CAAC,CAAC,CAAC,GAAC,IAAI,CAAC;IACvF,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,KAAK,IAAI,CAAA;CAC9D,GAAG,aAAa,CAAC;AAElB,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG;IAC3C,YAAY,CAAC,EAAE,CAAC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,KAAK,MAAM,GAAC,cAAc,CAAC,CAAC,CAAC,CAAA;CAC3F,CAAA;
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,KAAK,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE7C,MAAM,MAAM,OAAO,GAAG;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,UAAU,CAAC,EAAE,UAAU,GAAC,MAAM,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,GAAC,UAAU,GAAC,QAAQ,GAAC,KAAK,CAAC;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,cAAc,CAAC,EAAE,YAAY,EAAE,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAClD,WAAW,CAAC,EAAE,iBAAiB,GAAC,MAAM,GAAC,CAAC,iBAAiB,GAAC,MAAM,CAAC,EAAE,CAAC;IACpE,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,KAAK,MAAM,GAAC,cAAc,CAAC,CAAC,CAAC,GAAC,IAAI,CAAC;IACvF,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,KAAK,IAAI,CAAA;CAC9D,GAAG,aAAa,CAAC;AAElB,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG;IAC3C,YAAY,CAAC,EAAE,CAAC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,KAAK,MAAM,GAAC,cAAc,CAAC,CAAC,CAAC,CAAA;CAC3F,CAAA;AAsBD,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,WAAW,GAAE,OAAc,GAAG,OAAO,CAO5F"}
|
package/dist/options.js
CHANGED
package/dist/options.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAiB,MAAM,iBAAiB,CAAC;AAEnE,OAAO,EAAgD,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAiB,MAAM,iBAAiB,CAAC;AAEnE,OAAO,EAAgD,UAAU,EAAE,MAAM,SAAS,CAAC;AAmCnF,MAAM,eAAe,GAAqB;IACzC,UAAU,EAAE,SAAS,CAAC,mBAAmB;IACzC,qBAAqB,EAAE,SAAS,CAAC,uBAAuB;IACxD,UAAU,EAAE,UAAU,CAAC,cAAc;IACrC,WAAW,EAAE,EAAE;IACf,QAAQ,EAAE,IAAI;IACd,YAAY,EAAE,IAAI;IAClB,mBAAmB,EAAE,IAAI;IACzB,UAAU,EAAE,IAAI;IAChB,cAAc,EAAE,EAAE;IAClB,eAAe,EAAE,EAAE;IACnB,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,KAAK;IACb,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE,KAAK;IAChB,aAAa,EAAE,IAAI;IACnB,aAAa,EAAE,KAAK;IACpB,aAAa,EAAE,KAAK;CACpB,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,OAA0B,EAAE,cAAuB,IAAI;IAClF,OAAO;QACN,GAAG,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC;QAC1C,GAAG,eAAe;QAClB,GAAG,WAAW;QACd,GAAG,OAAO;KACV,CAAC;AACH,CAAC","sourcesContent":["import constants from \"./constants\";\nimport { initCommonOptions, CommonOptions } from \"@omegagrid/core\";\nimport { NodeModel } from \"./model/nodeModel\";\nimport { FolderOptions, ItemProperty, ItemTypeOptions, SelectMode } from \"./types\";\nimport { TemplateResult } from \"lit-html\";\nimport { CSSResultOrNative } from \"lit\";\nimport { SelectedItemParams } from \"./model\";\n\nexport type Options = {\n\talwaysRefresh?: boolean,\n\tnodeHeight?: number,\n\trenderingNodeTreshold?: number,\n\tselectMode?: SelectMode|string,\n\tselectAllMode?: 'none'|'filtered'|'always'|false,\n\tlevelIndent?: number,\n\tmaxLevel?: number,\n\tglobalLevels?: boolean,\n\tlevelsAlwaysVisible?: boolean,\n\tcheckboxes?: boolean,\n\texpanders?: boolean,\n\tallowEmpty?: boolean,\n\tautoClose?: boolean,\n\tsearch?: boolean,\n\tfileDrop?: boolean,\n\tpageSize?: number,\n\tcustomSearch?: boolean,\n\tfolderOptions?: FolderOptions,\n\titemProperties?: ItemProperty[],\n\titemTypeOptions?: Record<string, ItemTypeOptions>,\n\tcustomStyle?: CSSResultOrNative|string|(CSSResultOrNative|string)[],\n\tnodeRenderer?: (div: HTMLDivElement, node: NodeModel) => string|TemplateResult<1>|void,\n\tafterRenderer?: (div: HTMLDivElement, node: NodeModel) => void\n} & CommonOptions;\n\nexport type TreeDropdownOptions = Options & {\n\ttextRenderer?: (selectedItems: Map<string, SelectedItemParams>) => string|TemplateResult<1>\n}\n\nconst DEFAULT_OPTIONS: Partial<Options> = {\n\tnodeHeight: constants.DEFAULT_NODE_HEIGHT,\n\trenderingNodeTreshold: constants.RENDERING_NODE_TRESHOLD,\n\tselectMode: SelectMode.MultipleLevels,\n\tlevelIndent: 10,\n\tmaxLevel: null,\n\tglobalLevels: true,\n\tlevelsAlwaysVisible: true,\n\tallowEmpty: true,\n\titemProperties: [],\n\titemTypeOptions: {},\n\texpanders: true,\n\tsearch: false,\n\tcheckboxes: true,\n\tautoClose: false,\n\tfolderOptions: null,\n\talwaysRefresh: false,\n\tselectAllMode: false\n};\n\nexport function initOptions(options?: Partial<Options>, origOptions: Options = null): Options {\n\treturn {\n\t\t...initCommonOptions(options, origOptions),\n\t\t...DEFAULT_OPTIONS,\n\t\t...origOptions,\n\t\t...options,\n\t};\n}"]}
|
package/dist/ui/dropdown.d.ts
CHANGED
|
@@ -44,6 +44,12 @@ export declare class TreeDropdown extends Dropdown {
|
|
|
44
44
|
willUpdate(changedProps: Map<PropertyKey, unknown>): Promise<void>;
|
|
45
45
|
filter(term: string): Promise<void>;
|
|
46
46
|
clearFilter(): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Selects all the items matching the current search term - the same set the tree
|
|
49
|
+
* select all button works with. With replace, the matched items become the whole
|
|
50
|
+
* selection. Returns the number of the matched items.
|
|
51
|
+
*/
|
|
52
|
+
selectFiltered(dispatchEvent?: boolean, replace?: boolean): Promise<number>;
|
|
47
53
|
focus(): void;
|
|
48
54
|
constructor();
|
|
49
55
|
connectedCallback(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown.d.ts","sourceRoot":"","sources":["../../src/ui/dropdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAO,KAAK,EAAqB,MAAM,iBAAiB,CAAC;AAE3F,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAClG,OAAO,EAAe,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAIzC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAKrC,qBACa,YAAa,SAAQ,QAAQ;IAEzC,MAAM,CAAC,MAAM,4BAA+B;IAG5C,OAAO,EAAE,mBAAmB,CAAiB;IAG7C,KAAK,EAAE,SAAS,CAAC;IAGjB,OAAO,EAAE,WAAW,CAAC;IAGrB,SAAS,EAAE,kBAAkB,CAAwC;IAGrE,SAAS,SAAO;IAGhB,QAAQ,SAAO;IAGf,KAAK,EAAE,eAAe,EAAE,CAAC;IAGzB,KAAK,UAAS;IAGd,OAAO,EAAE,MAAM,CAAC;IAGhB,WAAW,EAAE,MAAM,CAAC;IAGpB,WAAW,UAAS;IAGpB,iBAAiB,UAAS;IAG1B,YAAY,UAAS;IAGrB,aAAa,kCAAyC;IAGtD,MAAM,EAAE,MAAM,CAAC;IAGf,KAAK,EAAE,KAAK,CAAC;IAGb,UAAU,EAAE,cAAc,CAAC;IAG3B,UAAU,SAAM;IAEhB,KAAK,EAAE,IAAI,CAAC;IACZ,eAAe,UAAQ;IACvB,UAAU,UAAQ;IAClB,cAAc,UAAQ;IACtB,aAAa,SAAK;IAElB,oBAAoB;;uBAvEZ,CAAC;MA2EN;IAEH,aAAa,aAEZ;IAED,KAAK;IAIL,IAAI,cAAc,YAEjB;IAED,IAAI,IAAI,
|
|
1
|
+
{"version":3,"file":"dropdown.d.ts","sourceRoot":"","sources":["../../src/ui/dropdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAO,KAAK,EAAqB,MAAM,iBAAiB,CAAC;AAE3F,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAClG,OAAO,EAAe,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAIzC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAKrC,qBACa,YAAa,SAAQ,QAAQ;IAEzC,MAAM,CAAC,MAAM,4BAA+B;IAG5C,OAAO,EAAE,mBAAmB,CAAiB;IAG7C,KAAK,EAAE,SAAS,CAAC;IAGjB,OAAO,EAAE,WAAW,CAAC;IAGrB,SAAS,EAAE,kBAAkB,CAAwC;IAGrE,SAAS,SAAO;IAGhB,QAAQ,SAAO;IAGf,KAAK,EAAE,eAAe,EAAE,CAAC;IAGzB,KAAK,UAAS;IAGd,OAAO,EAAE,MAAM,CAAC;IAGhB,WAAW,EAAE,MAAM,CAAC;IAGpB,WAAW,UAAS;IAGpB,iBAAiB,UAAS;IAG1B,YAAY,UAAS;IAGrB,aAAa,kCAAyC;IAGtD,MAAM,EAAE,MAAM,CAAC;IAGf,KAAK,EAAE,KAAK,CAAC;IAGb,UAAU,EAAE,cAAc,CAAC;IAG3B,UAAU,SAAM;IAEhB,KAAK,EAAE,IAAI,CAAC;IACZ,eAAe,UAAQ;IACvB,UAAU,UAAQ;IAClB,cAAc,UAAQ;IACtB,aAAa,SAAK;IAElB,oBAAoB;;uBAvEZ,CAAC;MA2EN;IAEH,aAAa,aAEZ;IAED,KAAK;IAIL,IAAI,cAAc,YAEjB;IAED,IAAI,IAAI,SAYP;IAED,OAAO,UAA4C;IAEnD,SAAS,CAAC,CAAC,EAAE,SAAS;IAYhB,IAAI;IAMJ,UAAU,CAAC,YAAY,EAAE,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC;IAiClD,MAAM,CAAC,IAAI,EAAE,MAAM;IAQnB,WAAW;IAQjB;;;;OAIG;IACG,cAAc,CAAC,aAAa,UAAO,EAAE,OAAO,UAAQ;IAa1D,KAAK;;IAmBL,iBAAiB;IASjB,aAAa,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,GAAE,OAAO,CAAC,mBAAmB,CAAQ;IAMlF,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,mBAAmB,CAAC;IAKnD,WAAW;IAaL,cAAc,CAAC,aAAa,UAAQ;IAQ1C,YAAY,aASX;IAED,WAAW,aAEV;IAED,iBAAiB,IAAK,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE;IAgBjE,oBAAoB;IA2BpB,gBAAgB;IAehB,gBAAgB;IAOhB,eAAe;;uBA1UP,CAAC;MA6UD;IAER,QAAQ,GAAU,GAAG,UAAU,mBAK9B;IAED,eAAe,GAAI,GAAG,aAAa,UAmBlC;IAED,YAAY,eAAoD;IAEhE,MAAM,6CAsCJ;CACF"}
|
package/dist/ui/dropdown.js
CHANGED
|
@@ -34,7 +34,6 @@ let TreeDropdown = class TreeDropdown extends Dropdown {
|
|
|
34
34
|
this._tree.adapter = this.adapter;
|
|
35
35
|
this._tree.selection = this.selection;
|
|
36
36
|
this._tree.options = this.options;
|
|
37
|
-
this._tree.maxHeight = this.maxHeight;
|
|
38
37
|
this._tree.addEventListener('change', (e) => this._onChange(e));
|
|
39
38
|
this._tree.addEventListener('render', this._onTreeRender);
|
|
40
39
|
this._tree.slot = 'inner-content';
|
|
@@ -96,16 +95,37 @@ let TreeDropdown = class TreeDropdown extends Dropdown {
|
|
|
96
95
|
if (this.input)
|
|
97
96
|
this.input.value = term;
|
|
98
97
|
await this.tree.updateComplete;
|
|
99
|
-
this.tree.filter(term);
|
|
98
|
+
await this.tree.filter(term);
|
|
100
99
|
}
|
|
101
100
|
async clearFilter() {
|
|
102
101
|
if (this.input)
|
|
103
102
|
this.searchTerm = '';
|
|
104
103
|
await this.updateComplete;
|
|
104
|
+
// the input doubles as the button content, without a search term it shows the selection
|
|
105
105
|
if (this.input)
|
|
106
|
-
this.input.value =
|
|
106
|
+
this.input.value = this.getSelectionText();
|
|
107
107
|
this.tree.clearFilter();
|
|
108
108
|
}
|
|
109
|
+
/**
|
|
110
|
+
* Selects all the items matching the current search term - the same set the tree
|
|
111
|
+
* select all button works with. With replace, the matched items become the whole
|
|
112
|
+
* selection. Returns the number of the matched items.
|
|
113
|
+
*/
|
|
114
|
+
async selectFiltered(dispatchEvent = true, replace = false) {
|
|
115
|
+
if (!this._tree?.model)
|
|
116
|
+
return 0;
|
|
117
|
+
const count = await this._tree.selectAll(replace);
|
|
118
|
+
if (count == 0)
|
|
119
|
+
return 0;
|
|
120
|
+
this._autoHighlight = false; // prevent autoscroll, the selection was not made in the list
|
|
121
|
+
this.selectedItems = null;
|
|
122
|
+
this.selectedItems = this.selection.items;
|
|
123
|
+
this.value = this.selection.serialize();
|
|
124
|
+
await this.updateComplete;
|
|
125
|
+
if (dispatchEvent)
|
|
126
|
+
this.dispatchEvent(new TreeEvent('change', { component: this._tree }));
|
|
127
|
+
return count;
|
|
128
|
+
}
|
|
109
129
|
focus() {
|
|
110
130
|
if (this.buttonInput)
|
|
111
131
|
this.input?.focus();
|
|
@@ -116,7 +136,7 @@ let TreeDropdown = class TreeDropdown extends Dropdown {
|
|
|
116
136
|
super();
|
|
117
137
|
this.options = initOptions();
|
|
118
138
|
this.selection = new TreeSelectionModel(this.options);
|
|
119
|
-
this.maxHeight = 300;
|
|
139
|
+
this.maxHeight = 300; // applied to the dropdown container, the tree stretches to fill it
|
|
120
140
|
this.maxWidth = 400;
|
|
121
141
|
this.cross = false;
|
|
122
142
|
this.buttonInput = false;
|
|
@@ -133,7 +153,7 @@ let TreeDropdown = class TreeDropdown extends Dropdown {
|
|
|
133
153
|
return;
|
|
134
154
|
if (this.dynamicWidth)
|
|
135
155
|
this.adjustWidth();
|
|
136
|
-
|
|
156
|
+
this.layout(); // the content changed height, the panel has to be re-measured and repositioned
|
|
137
157
|
});
|
|
138
158
|
this._onTreeRender = () => {
|
|
139
159
|
this._debounceWidthUpdate();
|
|
@@ -258,7 +278,7 @@ let TreeDropdown = class TreeDropdown extends Dropdown {
|
|
|
258
278
|
const width = this.tree.list.calculateViewportMaxItemWidth();
|
|
259
279
|
if (width > this.dropdown.offsetWidth) {
|
|
260
280
|
dom.setSize(this.dropdown, { w: Math.min(width, this.maxWidth) });
|
|
261
|
-
|
|
281
|
+
// no layout() here - _debounceWidthUpdate runs it right after this call
|
|
262
282
|
}
|
|
263
283
|
}
|
|
264
284
|
}
|
|
@@ -314,15 +334,15 @@ let TreeDropdown = class TreeDropdown extends Dropdown {
|
|
|
314
334
|
return html `${unsafeHTML(items.map(([node, levels, red]) => [
|
|
315
335
|
node && node.icon ? `<og-icon icon="${node.icon}"></og-icon>` : ``,
|
|
316
336
|
red
|
|
317
|
-
? `<span style="color:#ff0000">${node.value}</span>`
|
|
318
|
-
: `<span>${node.value}</span>`,
|
|
337
|
+
? `<span style="color:#ff0000">${htmlUtils.escapeHTML(node.value)}</span>`
|
|
338
|
+
: `<span>${htmlUtils.escapeHTML(node.value)}</span>`,
|
|
319
339
|
levels.length > 0
|
|
320
340
|
? levels.map(level => `<og-icon class="lvl" icon="circle-${level[0]}">${level[0]}</og-icon>`).join('')
|
|
321
341
|
: ``
|
|
322
342
|
].join('')).join(', '))}`;
|
|
323
343
|
}
|
|
324
344
|
getSelectionText() {
|
|
325
|
-
return this.getSelectionItems().map(([node, levels]) =>
|
|
345
|
+
return this.getSelectionItems().map(([node, levels]) => node.value + (levels.length > 0
|
|
326
346
|
? ` (${levels.map(level => level[0]).join(',')})`
|
|
327
347
|
: '')).join(',');
|
|
328
348
|
}
|
package/dist/ui/dropdown.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown.js","sourceRoot":"","sources":["../../src/ui/dropdown.ts"],"names":[],"mappings":"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","sourcesContent":["import { Button, Dropdown, Tooltip, dom, Input, ListSelectTrigger } from \"@omegagrid/core\";\nimport { customElement, property, query, state } from \"lit/decorators.js\";\nimport { TreeModel, TreeSource } from \"../model/treeModel\";\nimport { SelectedItemParams, TreeSelectionModel, SerializedValue } from \"../model/selectionModel\";\nimport { initOptions, TreeDropdownOptions } from \"../options\";\nimport { html } from \"lit\";\nimport { TreeAdapter } from \"../model/treeAdapter\";\nimport { Tree, TreeEvent } from \"./tree\";\nimport { map } from 'lit/directives/map.js';\nimport { join } from 'lit/directives/join.js';\nimport { debounce } from \"ts-debounce\";\nimport { NodeModel } from \"../model\";\nimport { style } from \"./dropdown.style\";\nimport { unsafeHTML } from \"lit-html/directives/unsafe-html.js\";\nimport { html as htmlUtils } from \"@omegagrid/core\";\n\n@customElement('og-tree-dropdown')\nexport class TreeDropdown extends Dropdown {\n\n\tstatic styles = [...Dropdown.styles, style];\n\n\t@property({type: Object})\n\toptions: TreeDropdownOptions = initOptions();\n\n\t@property({type: Object})\n\tmodel: TreeModel;\n\n\t@property({type: Object})\n\tadapter: TreeAdapter;\n\n\t@property({type: Object})\n\tselection: TreeSelectionModel = new TreeSelectionModel(this.options);\n\n\t@property({type: Number})\n\tmaxHeight = 300;\n\n\t@property({type: Number})\n\tmaxWidth = 400;\n\n\t@property({type: Array})\n\tvalue: SerializedValue[];\n\n\t@property({type: Boolean, reflect: true})\n\tcross = false;\n\n\t@property({type: String})\n\tcaption: string;\n\n\t@property({type: String})\n\tplaceholder: string;\n\n\t@property({type: Boolean})\n\tbuttonInput = false;\n\n\t@property({type: Boolean})\n\tpreventInputEnter = false;\n\n\t@property({type: Boolean})\n\tdynamicWidth = false;\n\n\t@state()\n\tselectedItems = new Map<string, SelectedItemParams>();\n\n\t@query('og-button')\n\tbutton: Button;\n\n\t@query('og-input')\n\tinput: Input;\n\n\t@query('.content')\n\tcontentDiv: HTMLDivElement;\n\n\t@state()\n\tsearchTerm = '';\n\n\t_tree: Tree;\n\t_renderDropdown = true;\n\t_firstOpen = true;\n\t_autoHighlight = true;\n\toriginalWidth = 0;\n\n\t_debounceWidthUpdate = debounce(() => {\n\t\tif (!this.dropdown || !this.dropdown.isConnected) return;\n\t\tif (this.dynamicWidth) this.adjustWidth();\n\t\tdom.fixElementPosition(this.dropdown);\n\t});\n\n\t_onTreeRender = () => {\n\t\tthis._debounceWidthUpdate();\n\t}\n\n\treset() {\n\t\tthis._tree = null;\n\t}\n\n\tget hasCrossButton() {\n\t\treturn this.cross && ((this.selection.count > 0 && this.options.allowEmpty) || this.searchTerm !== '');\n\t}\n\n\tget tree() {\n\t\tif (this._tree) return this._tree;\n\t\tthis._tree = new Tree();\n\t\tthis._tree.disableAutoload = true;\n\t\tthis._tree.model = this.adapter ? null : this.model;\n\t\tthis._tree.adapter = this.adapter;\n\t\tthis._tree.selection = this.selection;\n\t\tthis._tree.options = this.options;\n\t\tthis._tree.maxHeight = this.maxHeight;\n\t\tthis._tree.addEventListener('change', (e: TreeEvent) => this._onChange(e));\n\t\tthis._tree.addEventListener('render', this._onTreeRender);\n\t\tthis._tree.slot = 'inner-content';\n\t\treturn this._tree;\n\t}\n\n\ttooltip = dom.createElement<Tooltip>('og-tooltip');\n\n\t_onChange(e: TreeEvent) {\n\t\tthis._autoHighlight = false; // prevent autoscroll after manual selection\n\t\tthis.selectedItems = null;\n\t\tthis.selectedItems = e.component.selection.items;\n\t\tthis.value = e.component.selection.serialize();\n\t\tif (this.options.autoClose) this.close();\n\t\tthis.dispatchEvent(new TreeEvent(e.type, {component: e.component, node: e.node}));\n\t\t// if (this.input) {\n\t\t// \tsetTimeout(() => this.input.focus(), 1000);\n\t\t// }\n\t}\n\n\tasync open() {\n\t\tif (this.tree.parentElement != this.dropdown) this.dropdown.appendChild(this._tree);\n\t\tawait super.open();\n\t\tif (this.dynamicWidth) this._debounceWidthUpdate();\n\t}\n\n\tasync willUpdate(changedProps: Map<PropertyKey, unknown>) {\n\t\tif (this.buttonInput) {\n\t\t\tthis.options.search = false;\n\t\t}\n\n\t\tif (changedProps.has('value')) {\n\t\t\tthis.selection.setItems(this.value);\n\t\t\tthis.selectedItems = null;\n\t\t\tthis.selectedItems = this.selection.items;\n\n\t\t\tif (this.isOpen && this.tree) {\n\t\t\t\tif (this._autoHighlight) {\n\t\t\t\t\tthis.tree.highlightFirstSelectedNode();\n\t\t\t\t} else {\n\t\t\t\t\tthis._autoHighlight = true;\n\t\t\t\t}\n\t\t\t\tthis.tree.renderItems(true);\n\t\t\t}\n\t\t}\n\n\t\tif (this._tree) {\n\t\t\tif (changedProps.has('adapter')) this._tree.adapter = this.adapter;\n\t\t\tif (changedProps.has('model')) this._tree.model = this.model;\n\t\t}\n\n\t\tif (changedProps.has('adapter') && this.adapter) {\n\t\t\tthis._firstOpen = true; // force to reload data after opening dropdown\n\t\t\tthis.options = initOptions(await this.adapter.getOptions(), this.options);\n\t\t}\n\n\t\tthis._renderDropdown = true;\n\t}\n\n\tasync filter(term: string) {\n\t\tif (this.input) this.searchTerm = term;\n\t\tawait this.updateComplete;\n\t\tif (this.input) this.input.value = term;\n\t\tawait this.tree.updateComplete;\n\t\tthis.tree.filter(term);\n\t}\n\n\tasync clearFilter() {\n\t\tif (this.input) this.searchTerm = '';\n\t\tawait this.updateComplete;\n\t\tif (this.input) this.input.value = '';\n\t\tthis.tree.clearFilter();\n\t}\n\n\tfocus() {\n\t\tif (this.buttonInput) this.input?.focus();\n\t\telse super.focus();\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.addEventListener('dropdown.open', async () => {\n\t\t\tthis.focus();\n\n\t\t\tif (this.adapter && (this._firstOpen || this.options.alwaysRefresh)) {\n\t\t\t\tawait this.tree.loadData();\n\t\t\t}\n\n\t\t\tthis._firstOpen = false;\n\t\t});\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback();\n\n\t\tif (!this.hasUpdated) {\n\t\t\tif (this.value) this.selection.setItems(this.value);\n\t\t\tthis.selectedItems = this.selection.items;\n\t\t}\n\t}\n\n\tsetSourceData(sourceData: TreeSource, options: Partial<TreeDropdownOptions> = null) {\n\t\tif (options) this.updateOptions(options);\n\t\tthis.model = new TreeModel(sourceData, this.options);\n\t\tif (this._tree) this._tree.model = this.model;\n\t}\n\n\tupdateOptions(options: Partial<TreeDropdownOptions>) {\n\t\tObject.assign(this.options, options ?? {});\n\t\tthis.requestUpdate();\n\t}\n\n\tadjustWidth() {\n\t\tif (this.tree?.list && this.dropdown) {\n\t\t\tthis.originalWidth = this.originalWidth || this.dropdown.offsetWidth;\n\t\t\tdom.setSize(this.dropdown, {w: Math.min(this.originalWidth, this.maxWidth)});\n\n\t\t\tconst width = this.tree.list.calculateViewportMaxItemWidth();\n\t\t\tif (width > this.dropdown.offsetWidth) {\n\t\t\t\tdom.setSize(this.dropdown, {w: Math.min(width, this.maxWidth)});\n\t\t\t\tthis.layout();\n\t\t\t}\n\t\t}\n\t}\n\n\tasync clearSelection(dispatchEvent = false) {\n\t\tthis.selection.clear();\n\t\tawait this.clearFilter();\n\t\tthis.requestUpdate();\n\t\tif (dispatchEvent) this.dispatchEvent(new TreeEvent('change', {component: this.tree}));\n\t\tthis.tree?.renderItems(true);\n\t}\n\n\t_onMouseOver = () => {\n\t\tif (this.contentDiv && this.contentDiv.scrollWidth > this.contentDiv.clientWidth) {\n\t\t\tif (!this.tooltip.parentElement) {\n\t\t\t\tdocument.body.appendChild(this.tooltip);\n\t\t\t\tdom.setSize(this.tooltip, {w: this.button.offsetWidth});\n\t\t\t}\n\t\t\tthis.tooltip.content = this.getSelectionHtml();\n\t\t\tthis.tooltip.attachTo(this.button, 'bottom');\n\t\t}\n\t}\n\n\t_onMouseOut = () => {\n\t\tthis.tooltip.deatach();\n\t}\n\n\tgetSelectionItems() : [NodeModel, [number, boolean][], boolean][] {\n\t\tconst model = this.tree?.model ?? this.model;\n\t\treturn Array.from(this.selectedItems).map(([key, item]) => {\n\t\t\tconst red = item.levels.has(0) && item.levels.get(0) == false;\n\t\t\tconst levels = [...item.levels.entries()].filter(item2 => item2[0] > 0);\n\t\t\tconst node = model?.nodeMap.has(key) ? model.nodeMap.get(key) : new NodeModel(this.tree.model, {\n\t\t\t\tk: key,\n\t\t\t\tv: item?.value ?? key\n\t\t\t});\n\t\t\tif (levels.length < item.levels.size && levels.length > 0) {\n\t\t\t\tlevels.unshift([0, item.levels.get(0)]);\n\t\t\t}\n\t\t\treturn [node, levels, red] as [NodeModel, [number, boolean][], boolean];\n\t\t});\n\t}\n\n\tgetButtonContentHtml() {\n\t\tif (this.options?.textRenderer) {\n\t\t\treturn this.options.textRenderer(this.selectedItems);\n\t\t}\n\n\t\tconst items = this.getSelectionItems();\n\t\tconst caption = this.caption ? html`<div class=\"caption\">${this.caption}</div>` : null;\n\t\tconst placeholder = this.placeholder ? html`<div class=\"placeholder\">${this.placeholder}</div>` : null;\n\t\treturn items.length > 0 ? html`${caption ? html`${caption}:` : ``}${join(map(items, ([node, levels, red]) => html`\n\t\t\t<div class=\"itm\">\n\t\t\t\t${node && node.icon ? html`<og-icon .icon=\"${node.icon}\"></og-icon>` : null}\n\t\t\t\t${red\n\t\t\t\t\t? html`<div style=\"color:#ff0000\">${node.value}</div>`\n\t\t\t\t\t: html`<div>${node.value}</div>`\n\t\t\t\t}\n\t\t\t\t${levels.length > 0\n\t\t\t\t\t? html`${map(levels, level => html`\n\t\t\t\t\t\t<og-icon class=\"lvl\" icon=\"circle-${level[0]}\">${level[0]}</og-icon>\n\t\t\t\t\t`)}` : ``\n\t\t\t\t}\n\t\t\t</div>\n\t\t`), html`<div class=\"sep\">,</div>`)}` : (caption\n\t\t\t? html`${caption}${placeholder ? html`: ${placeholder}` : ``}`\n\t\t\t: (placeholder ? html`${placeholder}` : html` `)\n\t\t);\n\t}\n\n\tgetSelectionHtml() {\n\t\tconst items = this.getSelectionItems();\n\t\tif (items.length === 0) null;\n\n\t\treturn html`${unsafeHTML(items.map(([node, levels, red]) => [\n\t\t\tnode && node.icon ? `<og-icon icon=\"${node.icon}\"></og-icon>` : ``,\n\t\t\tred\n\t\t\t\t? `<span style=\"color:#ff0000\">${node.value}</span>`\n\t\t\t\t: `<span>${node.value}</span>`,\n\t\t\tlevels.length > 0\n\t\t\t\t? levels.map(level => `<og-icon class=\"lvl\" icon=\"circle-${level[0]}\">${level[0]}</og-icon>`).join('')\n\t\t\t\t: ``\n\t\t].join('')).join(', '))}`;\n\t}\n\n\tgetSelectionText() {\n\t\treturn this.getSelectionItems().map(([node, levels]) => htmlUtils.escapeHTML(node.value) + (levels.length > 0\n\t\t\t? ` (${levels.map(level => level[0]).join(',')})`\n\t\t\t: ''\n\t\t)).join(',');\n\t}\n\n\t_debounceFilter = debounce((term: string) => {\n\t\tthis.tree.filter(term);\n\t\tthis.dispatchEvent(new TreeEvent('tree.filter'));\n\t}, 300);\n\n\t_onInput = async (e: InputEvent) => {\n\t\tif (!this.isOpen) await this.open();\n\t\tconst value = (e.target as Input).value;\n\t\tthis._debounceFilter(value);\n\t\tthis.searchTerm = value;\n\t}\n\n\t_onInputKeyDown = (e: KeyboardEvent) => {\n\t\tswitch (e.key) {\n\t\t\tcase 'ArrowDown':\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.tree.list.moveDown();\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowUp':\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.tree.list.moveUp();\n\t\t\t\tbreak;\n\t\t\tcase 'Enter':\n\t\t\t\te.preventDefault();\n\t\t\t\tif (this.preventInputEnter) return;\n\t\t\t\tif (this.tree.list.selectedIndex > -1) {\n\t\t\t\t\tthis.tree.list.select(this.tree.list.selectedIndex, ListSelectTrigger.Enter);\n\t\t\t\t\tsetTimeout(() => this.input.focus(), 100);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t_onInputBlur = () => this.input.value = this.getSelectionText();\n\n\trender = () => html`\n\t\t${this.buttonInput ? html`\n\t\t\t<og-input\n\t\t\t\t@input=\"${this._onInput}\"\n\t\t\t\t@keydown=\"${this._onInputKeyDown}\"\n\t\t\t\t@blur=\"${this._onInputBlur}\"\n\t\t\t\tplaceholder=\"${this.placeholder || ''}\"\n\t\t\t\t.value=\"${this.getSelectionText()}\">\n\t\t\t</og-input>\n\t\t` : ''}\n\n\t\t<og-button\n\t\t\t?disabled=\"${this.disabled}\"\n\t\t\t@mousedown=\"${this._onMousedown}\"\n\t\t\t@mouseenter=\"${this._onMouseOver}\"\n\t\t\t@mouseleave=\"${this._onMouseOut}\"\n\t\t\tcolor=\"${this.color}\"\n\t\t\tclass=\"main\"\n\t\t\tstyle=\"flex: 1\"\n\t\t\t.caret=\"${this.noCaret ? 'none' : this.openDirection}\">\n\t\t\t${this.buttonInput ? '' : html`\n\t\t\t\t<div class=\"content\" slot=\"content\">\n\t\t\t\t\t${this.getButtonContentHtml()}\n\t\t\t\t</div>\n\t\t\t`}\n\t\t</og-button>\n\n\t\t${this.hasCrossButton ? html`\n\t\t\t<og-button\n\t\t\t\tclass=\"cross\"\n\t\t\t\t?disabled=\"${this.disabled}\"\n\t\t\t\t@mousedown=\"${() => this.clearSelection(true)}\"\n\t\t\t\ticon=\"xmark\"\n\t\t\t\tcolor=\"red\">\n\t\t\t</og-button>\n\t\t` : ``}\n\n\t\t${this.renderDropdown()}\n\t`;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"dropdown.js","sourceRoot":"","sources":["../../src/ui/dropdown.ts"],"names":[],"mappings":"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","sourcesContent":["import { Button, Dropdown, Tooltip, dom, Input, ListSelectTrigger } from \"@omegagrid/core\";\nimport { customElement, property, query, state } from \"lit/decorators.js\";\nimport { TreeModel, TreeSource } from \"../model/treeModel\";\nimport { SelectedItemParams, TreeSelectionModel, SerializedValue } from \"../model/selectionModel\";\nimport { initOptions, TreeDropdownOptions } from \"../options\";\nimport { html } from \"lit\";\nimport { TreeAdapter } from \"../model/treeAdapter\";\nimport { Tree, TreeEvent } from \"./tree\";\nimport { map } from 'lit/directives/map.js';\nimport { join } from 'lit/directives/join.js';\nimport { debounce } from \"ts-debounce\";\nimport { NodeModel } from \"../model\";\nimport { style } from \"./dropdown.style\";\nimport { unsafeHTML } from \"lit-html/directives/unsafe-html.js\";\nimport { html as htmlUtils } from \"@omegagrid/core\";\n\n@customElement('og-tree-dropdown')\nexport class TreeDropdown extends Dropdown {\n\n\tstatic styles = [...Dropdown.styles, style];\n\n\t@property({type: Object})\n\toptions: TreeDropdownOptions = initOptions();\n\n\t@property({type: Object})\n\tmodel: TreeModel;\n\n\t@property({type: Object})\n\tadapter: TreeAdapter;\n\n\t@property({type: Object})\n\tselection: TreeSelectionModel = new TreeSelectionModel(this.options);\n\n\t@property({type: Number})\n\tmaxHeight = 300; // applied to the dropdown container, the tree stretches to fill it\n\n\t@property({type: Number})\n\tmaxWidth = 400;\n\n\t@property({type: Array})\n\tvalue: SerializedValue[];\n\n\t@property({type: Boolean, reflect: true})\n\tcross = false;\n\n\t@property({type: String})\n\tcaption: string;\n\n\t@property({type: String})\n\tplaceholder: string;\n\n\t@property({type: Boolean})\n\tbuttonInput = false;\n\n\t@property({type: Boolean})\n\tpreventInputEnter = false;\n\n\t@property({type: Boolean})\n\tdynamicWidth = false;\n\n\t@state()\n\tselectedItems = new Map<string, SelectedItemParams>();\n\n\t@query('og-button')\n\tbutton: Button;\n\n\t@query('og-input')\n\tinput: Input;\n\n\t@query('.content')\n\tcontentDiv: HTMLDivElement;\n\n\t@state()\n\tsearchTerm = '';\n\n\t_tree: Tree;\n\t_renderDropdown = true;\n\t_firstOpen = true;\n\t_autoHighlight = true;\n\toriginalWidth = 0;\n\n\t_debounceWidthUpdate = debounce(() => {\n\t\tif (!this.dropdown || !this.dropdown.isConnected) return;\n\t\tif (this.dynamicWidth) this.adjustWidth();\n\t\tthis.layout(); // the content changed height, the panel has to be re-measured and repositioned\n\t});\n\n\t_onTreeRender = () => {\n\t\tthis._debounceWidthUpdate();\n\t}\n\n\treset() {\n\t\tthis._tree = null;\n\t}\n\n\tget hasCrossButton() {\n\t\treturn this.cross && ((this.selection.count > 0 && this.options.allowEmpty) || this.searchTerm !== '');\n\t}\n\n\tget tree() {\n\t\tif (this._tree) return this._tree;\n\t\tthis._tree = new Tree();\n\t\tthis._tree.disableAutoload = true;\n\t\tthis._tree.model = this.adapter ? null : this.model;\n\t\tthis._tree.adapter = this.adapter;\n\t\tthis._tree.selection = this.selection;\n\t\tthis._tree.options = this.options;\n\t\tthis._tree.addEventListener('change', (e: TreeEvent) => this._onChange(e));\n\t\tthis._tree.addEventListener('render', this._onTreeRender);\n\t\tthis._tree.slot = 'inner-content';\n\t\treturn this._tree;\n\t}\n\n\ttooltip = dom.createElement<Tooltip>('og-tooltip');\n\n\t_onChange(e: TreeEvent) {\n\t\tthis._autoHighlight = false; // prevent autoscroll after manual selection\n\t\tthis.selectedItems = null;\n\t\tthis.selectedItems = e.component.selection.items;\n\t\tthis.value = e.component.selection.serialize();\n\t\tif (this.options.autoClose) this.close();\n\t\tthis.dispatchEvent(new TreeEvent(e.type, {component: e.component, node: e.node}));\n\t\t// if (this.input) {\n\t\t// \tsetTimeout(() => this.input.focus(), 1000);\n\t\t// }\n\t}\n\n\tasync open() {\n\t\tif (this.tree.parentElement != this.dropdown) this.dropdown.appendChild(this._tree);\n\t\tawait super.open();\n\t\tif (this.dynamicWidth) this._debounceWidthUpdate();\n\t}\n\n\tasync willUpdate(changedProps: Map<PropertyKey, unknown>) {\n\t\tif (this.buttonInput) {\n\t\t\tthis.options.search = false;\n\t\t}\n\n\t\tif (changedProps.has('value')) {\n\t\t\tthis.selection.setItems(this.value);\n\t\t\tthis.selectedItems = null;\n\t\t\tthis.selectedItems = this.selection.items;\n\n\t\t\tif (this.isOpen && this.tree) {\n\t\t\t\tif (this._autoHighlight) {\n\t\t\t\t\tthis.tree.highlightFirstSelectedNode();\n\t\t\t\t} else {\n\t\t\t\t\tthis._autoHighlight = true;\n\t\t\t\t}\n\t\t\t\tthis.tree.renderItems(true);\n\t\t\t}\n\t\t}\n\n\t\tif (this._tree) {\n\t\t\tif (changedProps.has('adapter')) this._tree.adapter = this.adapter;\n\t\t\tif (changedProps.has('model')) this._tree.model = this.model;\n\t\t}\n\n\t\tif (changedProps.has('adapter') && this.adapter) {\n\t\t\tthis._firstOpen = true; // force to reload data after opening dropdown\n\t\t\tthis.options = initOptions(await this.adapter.getOptions(), this.options);\n\t\t}\n\n\t\tthis._renderDropdown = true;\n\t}\n\n\tasync filter(term: string) {\n\t\tif (this.input) this.searchTerm = term;\n\t\tawait this.updateComplete;\n\t\tif (this.input) this.input.value = term;\n\t\tawait this.tree.updateComplete;\n\t\tawait this.tree.filter(term);\n\t}\n\n\tasync clearFilter() {\n\t\tif (this.input) this.searchTerm = '';\n\t\tawait this.updateComplete;\n\t\t// the input doubles as the button content, without a search term it shows the selection\n\t\tif (this.input) this.input.value = this.getSelectionText();\n\t\tthis.tree.clearFilter();\n\t}\n\n\t/**\n\t * Selects all the items matching the current search term - the same set the tree\n\t * select all button works with. With replace, the matched items become the whole\n\t * selection. Returns the number of the matched items.\n\t */\n\tasync selectFiltered(dispatchEvent = true, replace = false) {\n\t\tif (!this._tree?.model) return 0;\n\t\tconst count = await this._tree.selectAll(replace);\n\t\tif (count == 0) return 0;\n\t\tthis._autoHighlight = false; // prevent autoscroll, the selection was not made in the list\n\t\tthis.selectedItems = null;\n\t\tthis.selectedItems = this.selection.items;\n\t\tthis.value = this.selection.serialize();\n\t\tawait this.updateComplete;\n\t\tif (dispatchEvent) this.dispatchEvent(new TreeEvent('change', {component: this._tree}));\n\t\treturn count;\n\t}\n\n\tfocus() {\n\t\tif (this.buttonInput) this.input?.focus();\n\t\telse super.focus();\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.addEventListener('dropdown.open', async () => {\n\t\t\tthis.focus();\n\n\t\t\tif (this.adapter && (this._firstOpen || this.options.alwaysRefresh)) {\n\t\t\t\tawait this.tree.loadData();\n\t\t\t}\n\n\t\t\tthis._firstOpen = false;\n\t\t});\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback();\n\n\t\tif (!this.hasUpdated) {\n\t\t\tif (this.value) this.selection.setItems(this.value);\n\t\t\tthis.selectedItems = this.selection.items;\n\t\t}\n\t}\n\n\tsetSourceData(sourceData: TreeSource, options: Partial<TreeDropdownOptions> = null) {\n\t\tif (options) this.updateOptions(options);\n\t\tthis.model = new TreeModel(sourceData, this.options);\n\t\tif (this._tree) this._tree.model = this.model;\n\t}\n\n\tupdateOptions(options: Partial<TreeDropdownOptions>) {\n\t\tObject.assign(this.options, options ?? {});\n\t\tthis.requestUpdate();\n\t}\n\n\tadjustWidth() {\n\t\tif (this.tree?.list && this.dropdown) {\n\t\t\tthis.originalWidth = this.originalWidth || this.dropdown.offsetWidth;\n\t\t\tdom.setSize(this.dropdown, {w: Math.min(this.originalWidth, this.maxWidth)});\n\n\t\t\tconst width = this.tree.list.calculateViewportMaxItemWidth();\n\t\t\tif (width > this.dropdown.offsetWidth) {\n\t\t\t\tdom.setSize(this.dropdown, {w: Math.min(width, this.maxWidth)});\n\t\t\t\t// no layout() here - _debounceWidthUpdate runs it right after this call\n\t\t\t}\n\t\t}\n\t}\n\n\tasync clearSelection(dispatchEvent = false) {\n\t\tthis.selection.clear();\n\t\tawait this.clearFilter();\n\t\tthis.requestUpdate();\n\t\tif (dispatchEvent) this.dispatchEvent(new TreeEvent('change', {component: this.tree}));\n\t\tthis.tree?.renderItems(true);\n\t}\n\n\t_onMouseOver = () => {\n\t\tif (this.contentDiv && this.contentDiv.scrollWidth > this.contentDiv.clientWidth) {\n\t\t\tif (!this.tooltip.parentElement) {\n\t\t\t\tdocument.body.appendChild(this.tooltip);\n\t\t\t\tdom.setSize(this.tooltip, {w: this.button.offsetWidth});\n\t\t\t}\n\t\t\tthis.tooltip.content = this.getSelectionHtml();\n\t\t\tthis.tooltip.attachTo(this.button, 'bottom');\n\t\t}\n\t}\n\n\t_onMouseOut = () => {\n\t\tthis.tooltip.deatach();\n\t}\n\n\tgetSelectionItems() : [NodeModel, [number, boolean][], boolean][] {\n\t\tconst model = this.tree?.model ?? this.model;\n\t\treturn Array.from(this.selectedItems).map(([key, item]) => {\n\t\t\tconst red = item.levels.has(0) && item.levels.get(0) == false;\n\t\t\tconst levels = [...item.levels.entries()].filter(item2 => item2[0] > 0);\n\t\t\tconst node = model?.nodeMap.has(key) ? model.nodeMap.get(key) : new NodeModel(this.tree.model, {\n\t\t\t\tk: key,\n\t\t\t\tv: item?.value ?? key\n\t\t\t});\n\t\t\tif (levels.length < item.levels.size && levels.length > 0) {\n\t\t\t\tlevels.unshift([0, item.levels.get(0)]);\n\t\t\t}\n\t\t\treturn [node, levels, red] as [NodeModel, [number, boolean][], boolean];\n\t\t});\n\t}\n\n\tgetButtonContentHtml() {\n\t\tif (this.options?.textRenderer) {\n\t\t\treturn this.options.textRenderer(this.selectedItems);\n\t\t}\n\n\t\tconst items = this.getSelectionItems();\n\t\tconst caption = this.caption ? html`<div class=\"caption\">${this.caption}</div>` : null;\n\t\tconst placeholder = this.placeholder ? html`<div class=\"placeholder\">${this.placeholder}</div>` : null;\n\t\treturn items.length > 0 ? html`${caption ? html`${caption}:` : ``}${join(map(items, ([node, levels, red]) => html`\n\t\t\t<div class=\"itm\">\n\t\t\t\t${node && node.icon ? html`<og-icon .icon=\"${node.icon}\"></og-icon>` : null}\n\t\t\t\t${red\n\t\t\t\t\t? html`<div style=\"color:#ff0000\">${node.value}</div>`\n\t\t\t\t\t: html`<div>${node.value}</div>`\n\t\t\t\t}\n\t\t\t\t${levels.length > 0\n\t\t\t\t\t? html`${map(levels, level => html`\n\t\t\t\t\t\t<og-icon class=\"lvl\" icon=\"circle-${level[0]}\">${level[0]}</og-icon>\n\t\t\t\t\t`)}` : ``\n\t\t\t\t}\n\t\t\t</div>\n\t\t`), html`<div class=\"sep\">,</div>`)}` : (caption\n\t\t\t? html`${caption}${placeholder ? html`: ${placeholder}` : ``}`\n\t\t\t: (placeholder ? html`${placeholder}` : html` `)\n\t\t);\n\t}\n\n\tgetSelectionHtml() {\n\t\tconst items = this.getSelectionItems();\n\t\tif (items.length === 0) null;\n\n\t\treturn html`${unsafeHTML(items.map(([node, levels, red]) => [\n\t\t\tnode && node.icon ? `<og-icon icon=\"${node.icon}\"></og-icon>` : ``,\n\t\t\tred\n\t\t\t\t? `<span style=\"color:#ff0000\">${htmlUtils.escapeHTML(node.value)}</span>`\n\t\t\t\t: `<span>${htmlUtils.escapeHTML(node.value)}</span>`,\n\t\t\tlevels.length > 0\n\t\t\t\t? levels.map(level => `<og-icon class=\"lvl\" icon=\"circle-${level[0]}\">${level[0]}</og-icon>`).join('')\n\t\t\t\t: ``\n\t\t].join('')).join(', '))}`;\n\t}\n\n\tgetSelectionText() {\n\t\treturn this.getSelectionItems().map(([node, levels]) => node.value + (levels.length > 0\n\t\t\t? ` (${levels.map(level => level[0]).join(',')})`\n\t\t\t: ''\n\t\t)).join(',');\n\t}\n\n\t_debounceFilter = debounce((term: string) => {\n\t\tthis.tree.filter(term);\n\t\tthis.dispatchEvent(new TreeEvent('tree.filter'));\n\t}, 300);\n\n\t_onInput = async (e: InputEvent) => {\n\t\tif (!this.isOpen) await this.open();\n\t\tconst value = (e.target as Input).value;\n\t\tthis._debounceFilter(value);\n\t\tthis.searchTerm = value;\n\t}\n\n\t_onInputKeyDown = (e: KeyboardEvent) => {\n\t\tswitch (e.key) {\n\t\t\tcase 'ArrowDown':\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.tree.list.moveDown();\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowUp':\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.tree.list.moveUp();\n\t\t\t\tbreak;\n\t\t\tcase 'Enter':\n\t\t\t\te.preventDefault();\n\t\t\t\tif (this.preventInputEnter) return;\n\t\t\t\tif (this.tree.list.selectedIndex > -1) {\n\t\t\t\t\tthis.tree.list.select(this.tree.list.selectedIndex, ListSelectTrigger.Enter);\n\t\t\t\t\tsetTimeout(() => this.input.focus(), 100);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t_onInputBlur = () => this.input.value = this.getSelectionText();\n\n\trender = () => html`\n\t\t${this.buttonInput ? html`\n\t\t\t<og-input\n\t\t\t\t@input=\"${this._onInput}\"\n\t\t\t\t@keydown=\"${this._onInputKeyDown}\"\n\t\t\t\t@blur=\"${this._onInputBlur}\"\n\t\t\t\tplaceholder=\"${this.placeholder || ''}\"\n\t\t\t\t.value=\"${this.getSelectionText()}\">\n\t\t\t</og-input>\n\t\t` : ''}\n\n\t\t<og-button\n\t\t\t?disabled=\"${this.disabled}\"\n\t\t\t@mousedown=\"${this._onMousedown}\"\n\t\t\t@mouseenter=\"${this._onMouseOver}\"\n\t\t\t@mouseleave=\"${this._onMouseOut}\"\n\t\t\tcolor=\"${this.color}\"\n\t\t\tclass=\"main\"\n\t\t\tstyle=\"flex: 1\"\n\t\t\t.caret=\"${this.noCaret ? 'none' : this.openDirection}\">\n\t\t\t${this.buttonInput ? '' : html`\n\t\t\t\t<div class=\"content\" slot=\"content\">\n\t\t\t\t\t${this.getButtonContentHtml()}\n\t\t\t\t</div>\n\t\t\t`}\n\t\t</og-button>\n\n\t\t${this.hasCrossButton ? html`\n\t\t\t<og-button\n\t\t\t\tclass=\"cross\"\n\t\t\t\t?disabled=\"${this.disabled}\"\n\t\t\t\t@mousedown=\"${() => this.clearSelection(true)}\"\n\t\t\t\ticon=\"xmark\"\n\t\t\t\tcolor=\"red\">\n\t\t\t</og-button>\n\t\t` : ``}\n\n\t\t${this.renderDropdown()}\n\t`;\n}\n"]}
|
package/dist/ui/tree.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { List, log, ListPointerEvent } from '@omegagrid/core';
|
|
1
|
+
import { List, log, ListPointerEvent, Layout } from '@omegagrid/core';
|
|
2
2
|
import { Options } from '../options';
|
|
3
3
|
import { TreeModel, TreeSource } from '../model/treeModel';
|
|
4
4
|
import { LitElement } from 'lit';
|
|
@@ -24,7 +24,7 @@ export declare class TreeDropEvent extends DragEvent {
|
|
|
24
24
|
node: NodeModel;
|
|
25
25
|
constructor(type: string, e: DragEvent, args?: Partial<TreeDropEvent>);
|
|
26
26
|
}
|
|
27
|
-
export declare class Tree extends LitElement {
|
|
27
|
+
export declare class Tree extends LitElement implements Layout {
|
|
28
28
|
static styles: import("lit").CSSResult[];
|
|
29
29
|
model: TreeModel;
|
|
30
30
|
adapter: TreeAdapter;
|
|
@@ -40,6 +40,8 @@ export declare class Tree extends LitElement {
|
|
|
40
40
|
globalTreeLevels: Levels;
|
|
41
41
|
loading: boolean;
|
|
42
42
|
noMatches: boolean;
|
|
43
|
+
showSelectAll: boolean;
|
|
44
|
+
get hasSelectAllButton(): boolean;
|
|
43
45
|
filtering: FilterModel;
|
|
44
46
|
awaitFilter: boolean;
|
|
45
47
|
currentFilter: string;
|
|
@@ -75,11 +77,16 @@ export declare class Tree extends LitElement {
|
|
|
75
77
|
_onListRender: () => void;
|
|
76
78
|
_onListMenu: (e: ListPointerEvent) => void;
|
|
77
79
|
get itemStyle(): (string | import("lit").CSSResultOrNative)[];
|
|
80
|
+
get hasToolbar(): boolean;
|
|
78
81
|
render(): Iterable<string | import("lit-html").TemplateResult<1>>;
|
|
79
82
|
highlightNode(key: string): Promise<void>;
|
|
80
83
|
highlightFirstSelectedNode(): void;
|
|
81
84
|
renderItems(all?: boolean): void;
|
|
85
|
+
layout(): void;
|
|
86
|
+
get naturalHeight(): number;
|
|
82
87
|
clearSelection(): void;
|
|
88
|
+
/** Selects every node matching the current filter, returns the number of them. */
|
|
89
|
+
selectAll(replace?: boolean): Promise<number>;
|
|
83
90
|
filter(term?: string): Promise<void>;
|
|
84
91
|
clearFilter(): Promise<void>;
|
|
85
92
|
}
|
package/dist/ui/tree.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../src/ui/tree.ts"],"names":[],"mappings":"AAAA,OAAO,EACD,IAAI,EAAE,GAAG,EACI,gBAAgB,
|
|
1
|
+
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../src/ui/tree.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/tree.js
CHANGED
|
@@ -18,6 +18,7 @@ import { FilterModel } from '../model/filterModel';
|
|
|
18
18
|
import { styleMap } from 'lit-html/directives/style-map.js';
|
|
19
19
|
import { SelectMode } from '../types';
|
|
20
20
|
import { join } from 'lit/directives/join.js';
|
|
21
|
+
import { msg } from '@omegagrid/localize';
|
|
21
22
|
export class TreeEvent extends Event {
|
|
22
23
|
constructor(type, args) {
|
|
23
24
|
super(type, { bubbles: false, cancelable: true, composed: false });
|
|
@@ -37,6 +38,15 @@ export class TreeDropEvent extends DragEvent {
|
|
|
37
38
|
}
|
|
38
39
|
}
|
|
39
40
|
let Tree = class Tree extends LitElement {
|
|
41
|
+
get hasSelectAllButton() {
|
|
42
|
+
if (this.noMatches)
|
|
43
|
+
return false;
|
|
44
|
+
if (this.options.selectAllMode == 'always')
|
|
45
|
+
return true;
|
|
46
|
+
if (this.options.selectAllMode == 'filtered')
|
|
47
|
+
return this.filtering.hasFilter;
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
40
50
|
get size() {
|
|
41
51
|
return this.model?.visibleNodes.length ?? 0;
|
|
42
52
|
}
|
|
@@ -54,6 +64,7 @@ let Tree = class Tree extends LitElement {
|
|
|
54
64
|
this.disableAutoload = false;
|
|
55
65
|
this.loading = false;
|
|
56
66
|
this.noMatches = false;
|
|
67
|
+
this.showSelectAll = false;
|
|
57
68
|
this.awaitFilter = false;
|
|
58
69
|
this.currentFilter = '';
|
|
59
70
|
this.loadingNodes = new Set();
|
|
@@ -157,6 +168,7 @@ let Tree = class Tree extends LitElement {
|
|
|
157
168
|
params = params ?? {};
|
|
158
169
|
const [tree, options] = await Promise.all([this.adapter.getTree(params), this.adapter.getOptions()]);
|
|
159
170
|
this.setSourceData(tree, options);
|
|
171
|
+
this.currentFilter = params.filter ?? ''; // the loaded data is filtered by the requested term only
|
|
160
172
|
if (options?.pageSize > 0) {
|
|
161
173
|
this.updateNodeLoadState(this.model.root, this.model.root.children.length);
|
|
162
174
|
this.model.indexVisibleNodes();
|
|
@@ -184,6 +196,7 @@ let Tree = class Tree extends LitElement {
|
|
|
184
196
|
willUpdate(props) {
|
|
185
197
|
if (props.has('adapter') && this.adapter) {
|
|
186
198
|
this.model = null;
|
|
199
|
+
this.filtering = null;
|
|
187
200
|
this.adapter.attach(this);
|
|
188
201
|
if (!this.disableAutoload)
|
|
189
202
|
this.loadData();
|
|
@@ -191,14 +204,16 @@ let Tree = class Tree extends LitElement {
|
|
|
191
204
|
// if (props.has('value')) {
|
|
192
205
|
// this.setValue(this.value);
|
|
193
206
|
// }
|
|
194
|
-
this.model
|
|
195
|
-
this.filtering = new FilterModel(this.model);
|
|
207
|
+
this.model ?? (this.model = new TreeModel([], null));
|
|
208
|
+
this.filtering ?? (this.filtering = new FilterModel(this.model));
|
|
209
|
+
this.filtering.model = this.model; // the model gets replaced by loading data, the filtering has to follow it
|
|
196
210
|
this.selection.model = this.model;
|
|
197
211
|
if (props.has('options')) {
|
|
198
212
|
this.options = initOptions(this.options);
|
|
199
213
|
this.model.options = this.options;
|
|
200
214
|
this.selection.options = this.options;
|
|
201
215
|
}
|
|
216
|
+
this.showSelectAll = this.hasSelectAllButton;
|
|
202
217
|
}
|
|
203
218
|
updated(changedProps) {
|
|
204
219
|
if (changedProps.has('model') && this.list) {
|
|
@@ -319,10 +334,13 @@ let Tree = class Tree extends LitElement {
|
|
|
319
334
|
const customStyle = this.options?.customStyle;
|
|
320
335
|
return [itemStyle, ...(customStyle ? (Array.isArray(customStyle) ? customStyle : [customStyle]) : [])];
|
|
321
336
|
}
|
|
337
|
+
get hasToolbar() {
|
|
338
|
+
return (this.hasGlobalLevels || this.hasSelectAllButton) && !this.noMatches;
|
|
339
|
+
}
|
|
322
340
|
render() {
|
|
323
341
|
this.logger.info(`render ${this.model?.visibleNodes.length ?? 0}`);
|
|
324
342
|
const list = html `
|
|
325
|
-
<div class="main" style="${styleMap({
|
|
343
|
+
<div class="main" style="${styleMap({ maxHeight: this.maxHeight ? dom.numToPixels(this.maxHeight) : null })}">
|
|
326
344
|
<og-list
|
|
327
345
|
size="${this.size}"
|
|
328
346
|
.customStyle=${this.itemStyle}
|
|
@@ -349,7 +367,7 @@ let Tree = class Tree extends LitElement {
|
|
|
349
367
|
const alert = this.noMatches ? html `
|
|
350
368
|
<og-alert text="No matches" type="warning"></og-alert>
|
|
351
369
|
` : null;
|
|
352
|
-
const
|
|
370
|
+
const toolbar = this.hasToolbar ? html `
|
|
353
371
|
<div class="toolbar toolbar-levels">
|
|
354
372
|
<og-tree-levels
|
|
355
373
|
id="globalLevels"
|
|
@@ -357,9 +375,19 @@ let Tree = class Tree extends LitElement {
|
|
|
357
375
|
.selection="${this.selection.getLevelSelection(this.model.root)}"
|
|
358
376
|
@levelselect="${this._onGlobalLevelSelect}">
|
|
359
377
|
</og-tree-levels>
|
|
378
|
+
|
|
379
|
+
${this.showSelectAll ? html `
|
|
380
|
+
<div style="flex: 1"></div>
|
|
381
|
+
<og-button
|
|
382
|
+
class="btn-select-all"
|
|
383
|
+
color="transparent"
|
|
384
|
+
.text="${msg('All')}"
|
|
385
|
+
@click="${() => this.selectAll()}">
|
|
386
|
+
</og-button>
|
|
387
|
+
` : null}
|
|
360
388
|
</div>
|
|
361
389
|
` : null;
|
|
362
|
-
return join([search, alert,
|
|
390
|
+
return join([search, alert, toolbar, loader, list], () => ' ');
|
|
363
391
|
}
|
|
364
392
|
async highlightNode(key) {
|
|
365
393
|
const node = this.model?.nodeMap.get(key);
|
|
@@ -395,10 +423,37 @@ let Tree = class Tree extends LitElement {
|
|
|
395
423
|
this.list.renderItems(all);
|
|
396
424
|
}
|
|
397
425
|
}
|
|
426
|
+
// called by the dropdown container after it has been resized - the list viewport
|
|
427
|
+
// changed, so the visible window of items has to be rebuilt
|
|
428
|
+
layout() {
|
|
429
|
+
this.renderItems(true);
|
|
430
|
+
}
|
|
431
|
+
// the toolbars keep their intrinsic height, but the virtualized list does not -
|
|
432
|
+
// take the height it reports instead of measuring it
|
|
433
|
+
get naturalHeight() {
|
|
434
|
+
if (!this.list)
|
|
435
|
+
return null;
|
|
436
|
+
let height = this.list.naturalHeight;
|
|
437
|
+
for (const child of this.shadowRoot.children) {
|
|
438
|
+
if (child instanceof HTMLElement && !child.contains(this.list))
|
|
439
|
+
height += child.offsetHeight;
|
|
440
|
+
}
|
|
441
|
+
return height;
|
|
442
|
+
}
|
|
398
443
|
clearSelection() {
|
|
399
444
|
this.selection.clear();
|
|
400
445
|
this.requestUpdate();
|
|
401
446
|
}
|
|
447
|
+
/** Selects every node matching the current filter, returns the number of them. */
|
|
448
|
+
async selectAll(replace = false) {
|
|
449
|
+
const count = this.selection.selectAll(replace);
|
|
450
|
+
this.requestUpdate();
|
|
451
|
+
if (this.list) {
|
|
452
|
+
await this.list.updateComplete;
|
|
453
|
+
this.list.renderItems(true);
|
|
454
|
+
}
|
|
455
|
+
return count;
|
|
456
|
+
}
|
|
402
457
|
async filter(term) {
|
|
403
458
|
term = (term ?? '').trim();
|
|
404
459
|
if (term === this.currentFilter)
|
|
@@ -412,6 +467,8 @@ let Tree = class Tree extends LitElement {
|
|
|
412
467
|
await this.loadData({ filter: term });
|
|
413
468
|
return;
|
|
414
469
|
}
|
|
470
|
+
if (this.filtering)
|
|
471
|
+
this.filtering.model = this.model; // the model can have been replaced since the last update
|
|
415
472
|
if (term == null) {
|
|
416
473
|
this.filtering?.clear();
|
|
417
474
|
this.noMatches = false;
|
|
@@ -420,6 +477,7 @@ let Tree = class Tree extends LitElement {
|
|
|
420
477
|
this.filtering?.filter(term);
|
|
421
478
|
this.noMatches = this.size == 0;
|
|
422
479
|
}
|
|
480
|
+
this.showSelectAll = this.hasSelectAllButton;
|
|
423
481
|
this.list.size = this.size;
|
|
424
482
|
this.list.select(0);
|
|
425
483
|
this.list.requestUpdate();
|
|
@@ -475,6 +533,9 @@ __decorate([
|
|
|
475
533
|
__decorate([
|
|
476
534
|
state()
|
|
477
535
|
], Tree.prototype, "noMatches", void 0);
|
|
536
|
+
__decorate([
|
|
537
|
+
state()
|
|
538
|
+
], Tree.prototype, "showSelectAll", void 0);
|
|
478
539
|
Tree = __decorate([
|
|
479
540
|
customElement('og-tree')
|
|
480
541
|
], Tree);
|
package/dist/ui/tree.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../../src/ui/tree.ts"],"names":[],"mappings":"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","sourcesContent":["import { \n\tdom, List, log, ListSelectTrigger, ListSelectEvent, Expander, \n\tLevelExpandEvent, ListPointerEvent, Icon \n} from '@omegagrid/core';\nimport { Options, initOptions } from '../options';\nimport { TreeModel, TreeSource } from '../model/treeModel';\nimport { LitElement, html } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { style, itemStyle } from \"./tree.style\";\nimport Levels, { LevelSelectEvent } from './levels';\nimport { createItemRenderer } from './tree.renderer';\nimport { TreeSelectionModel, SerializedValue } from '../model/selectionModel';\nimport constants from '../constants';\nimport { NodeModel } from '../model/nodeModel';\nimport { TreeAdapter } from '../model/treeAdapter';\nimport { FilterModel } from '../model/filterModel';\nimport Search from './search';\nimport { styleMap } from 'lit-html/directives/style-map.js';\nimport { NodePlaceholder, SelectMode, TreeAdapterParams } from '../types';\nimport { join } from 'lit/directives/join.js';\n\nexport class TreeEvent extends Event {\n\n\tcomponent: Tree;\n\tnode: NodeModel;\n\n\tconstructor(type: string, args?: Partial<TreeEvent>) {\n\t\tsuper(type, {bubbles: false, cancelable: true, composed: false});\n\t\tObject.assign(this, args);\n\t}\n}\n\nexport class TreePointerEvent extends PointerEvent {\n\n\ttree: Tree;\n\tnode: NodeModel;\n\n\tconstructor(type: string, e: PointerEvent, args?: Partial<TreePointerEvent>) {\n\t\tsuper(`tree.${type}`, e);\n\t\tObject.assign(this, args);\n\t}\n}\n\nexport class TreeDropEvent extends DragEvent {\n\n\ttree: Tree;\n\tnode: NodeModel;\n\n\tconstructor(type: string, e: DragEvent, args?: Partial<TreeDropEvent>) {\n\t\tsuper(`tree.${type}`, e);\n\t\tObject.assign(this, args);\n\t}\n}\n\n@customElement('og-tree')\nexport class Tree extends LitElement {\n\n\tstatic styles = [style];\n\n\t@property({type: Object})\n\tmodel: TreeModel;\n\n\t@property({type: Object})\n\tadapter: TreeAdapter;\n\n\t@property({type: Object})\n\toptions: Options = initOptions();\n\n\t@property({type: Object})\n\tselection: TreeSelectionModel = new TreeSelectionModel(this.options);\n\n\t@property({type: Object})\n\tlogger: log.Logger = new log.Logger('Ωtree');\n\n\t@property({type: Number})\n\tmaxHeight: number = null;\n\n\t@property({type: Number})\n\titemHeight: number = constants.LIST_ITEM_HEIGHT;\n\t\n\t@property({type: Array})\n\tvalue: SerializedValue[];\n\n\t@property({type: Boolean})\n\tdisableAutoload = false;\n\t\n\t@query('og-list')\n\tlist: List;\n\n\t@query('og-tree-search')\n\tsearchBar: Search;\n\n\t@query('#globalLevels')\n\tglobalTreeLevels: Levels;\n\n\t@state()\n\tloading = false;\n\n\t@state()\n\tnoMatches = false;\n\n\tfiltering: FilterModel;\n\tawaitFilter = false;\n\tcurrentFilter = '';\n\tloadingNodes: Set<string> = new Set();\n\tpendingHighlight: string;\n\n\tget size () {\n\t\treturn this.model?.visibleNodes.length ?? 0;\n\t}\n\n\tget hasGlobalLevels() {\n\t\treturn (this.options.selectMode == SelectMode.Multiple || this.options.selectMode == SelectMode.MultipleLevels)\n\t\t\t&& this.options.globalLevels && this.model.maxLevel > 0;\n\t}\n\n\t_lastDragItem: HTMLElement;\n\t_onDragover = (e: DragEvent) => {\n\t\tif (!this.options.fileDrop) return;\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\tif (e.dataTransfer.types[0] == 'Files') {\n\t\t\te.dataTransfer.dropEffect = 'move';\n\t\t\tconst item = e.composedPath().find((elm: HTMLElement) => elm.classList && elm.classList.contains('item')) as HTMLElement;\n\t\t\tthis._onDragLeave();\n\t\t\tif (item) item.classList.add('drag');\n\t\t\tthis._lastDragItem = item;\n\t\t}\n\t}\n\n\t_onDrop = (e: DragEvent) => {\n\t\te.preventDefault();\n\t\tthis._onDragLeave();\n\t\tconst item = e.composedPath().find((elm: HTMLElement) => elm.classList && elm.classList.contains('item')) as HTMLElement;\n\t\tconst node = this.model.nodes[parseInt(item.dataset.node)];\n\t\tthis.dispatchEvent(new TreeDropEvent('drop', e, {tree: this, node: node}));\n\t}\n\n\t_onDragLeave = () => {\n\t\tif (this._lastDragItem) this._lastDragItem.classList.remove('drag');\n\t\tthis._lastDragItem = null;\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.addEventListener('dragover', this._onDragover);\n\t\tthis.addEventListener('dragleave', this._onDragLeave);\n\t\tthis.addEventListener('drop', this._onDrop);\n\t}\n\n\tdestroy() {\n\t\tthis.logger.info('destroy');\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback();\n\t\tthis.logger.info('init');\n\t\tthis.tabIndex = 0;\n\t}\n\n\tsetSourceData(sourceData: TreeSource, options: Partial<Options> = null) {\n\t\tObject.assign(this.options, options ?? {});\n\t\tthis.model = new TreeModel(sourceData, this.options);\n\n\t\tif (sourceData?.length > 0 && sourceData[0].s !== undefined) {\n\t\t\tthis.selection.setItems(sourceData.filter(i => i.s).map(i => [i.k, 0, 1]));\n\t\t}\n\n\t\tthis.dispatchEvent(new TreeEvent('load', {component: this}));\n\t}\n\n\tsetValue(values: SerializedValue[]) {\n\t\tthis.selection.populate(values);\n\t}\n\n\tasync loadData(params?: TreeAdapterParams) {\n\t\tthis.loading = true;\n\t\tif (this.list) this.list.size = 0;\n\t\t\n\t\tthis.model = null;\n\t\tparams = params ?? {};\n\t\tconst [tree, options] = await Promise.all([this.adapter.getTree(params), this.adapter.getOptions()]);\n\t\tthis.setSourceData(tree, options);\n\t\tif (options?.pageSize > 0) {\n\t\t\tthis.updateNodeLoadState(this.model.root, this.model.root.children.length);\n\t\t\tthis.model.indexVisibleNodes();\n\t\t}\n\t\tthis.loading = false;\n\n\t\tif (this.pendingHighlight) {\n\t\t\tawait this.updateComplete;\n\t\t\tawait this.highlightNode(this.pendingHighlight);\n\t\t\tthis.pendingHighlight = null;\n\t\t}\n\t}\n\n\tasync loadMore(parent: NodeModel) {\n\t\tconst offset = parent.children.length;\n\t\tconst sourceData = await this.adapter.getTree({parent: parent, parentKey: parent.key, offset: offset});\n\t\tconst model = new TreeModel(sourceData, this.options);\n\t\tparent.insertChildren(model.root.children, offset);\n\t\tthis.updateNodeLoadState(parent, model.root.children.length);\n\t\tthis.model.indexNodesByTree(true);\n\t\tthis.list.size = this.size;\n\t\tthis.list.requestUpdate();\n\t}\n\n\tasync refresh() {\n\t\tawait this.loadData({filter: this.currentFilter});\n\t}\n\n\tkeyActions = {\n\t\t'ArrowRight': () => {\n\t\t\tconst node = this.model.visibleNodes[this.list.selectedIndex] as NodeModel;\n\t\t\tif (node.collapsed) {\n\t\t\t\tthis.toggleNodeCollapse(node);\n\t\t\t\tthis.model.indexVisibleNodes();\n\t\t\t\tthis.list.size = this.size;\n\t\t\t}\n\t\t},\n\t\t'ArrowLeft': () => {\n\t\t\tconst node = this.model.visibleNodes[this.list.selectedIndex] as NodeModel;\n\t\t\tif (!node.collapsed) {\n\t\t\t\tthis.toggleNodeCollapse(node);\n\t\t\t\tthis.model.indexVisibleNodes();\n\t\t\t\tthis.list.size = this.size;\n\t\t\t}\n\t\t}\n\t}\n\t\n\twillUpdate(props: Map<PropertyKey, unknown>) {\n\t\tif (props.has('adapter') && this.adapter) {\n\t\t\tthis.model = null;\n\t\t\tthis.adapter.attach(this);\n\t\t\tif (!this.disableAutoload) this.loadData();\n\t\t}\n\n\t\t// if (props.has('value')) {\n\t\t// \tthis.setValue(this.value);\n\t\t// }\n\n\t\tthis.model = this.model ?? new TreeModel([], null);\n\t\tthis.filtering = new FilterModel(this.model);\n\t\tthis.selection.model = this.model;\n\n\t\tif (props.has('options')) {\n\t\t\tthis.options = initOptions(this.options);\n\t\t\tthis.model.options = this.options;\n\t\t\tthis.selection.options = this.options;\n\t\t}\n\t}\n\n\tupdated(changedProps: Map<PropertyKey, unknown>): void {\n\t\tif (changedProps.has('model') && this.list) {\n\t\t\tthis.list.size = this.size;\n\t\t\tthis.noMatches = this.noMatches && this.size == 0;\n\t\t\tthis.list.requestUpdate();\n\t\t}\n\t}\n\n\tasync firstUpdated() {\n\t\tif (this.value) {\n\t\t\tthis.selection.setItems(this.value ?? []);\n\t\t}\n\n\t\tthis.list.itemRenderer = createItemRenderer(this);\n\n\t\tdom.on(this.list, 'toggle', '.item', async (e, elm) => {\n\t\t\tconst node = this.model.nodes[parseInt(elm.dataset.node)];\n\t\t\tthis.toggleNodeCollapse(node);\n\t\t\tthis.model.indexVisibleNodes();\n\t\t\tthis.list.size = this.size;\n\t\t});\n\n\t\tdom.on(this.list, 'levelselect', '.item', (e: LevelExpandEvent, elm) => {\n\t\t\tthis.toggleNode(this.model.nodes[parseInt(elm.dataset.node)], e.level, true);\n\t\t});\n\t\t\n\t\tdom.on(this.list, 'contextmenu', '.item', (e, elm) => {\n\t\t\te.preventDefault();\n\t\t\tconst node = this.model.nodes[parseInt(elm.dataset.node)];\n\t\t\tthis.selection.select(node, 0, false);\n\t\t\tthis.list.renderItems(true);\n\t\t});\n\n\t\tthis.list.addEventListener('select', (e: ListSelectEvent) => {\n\t\t\te.stopPropagation();\n\t\t\tif (e.trigger != ListSelectTrigger.Arrow && !(e.elm instanceof Expander)) {\n\t\t\t\tconst item = this.model.visibleNodes[e.index];\n\t\t\t\tif (item instanceof NodeModel) {\n\t\t\t\t\tconst node = item as NodeModel;\n\t\t\t\t\tif (node.checkbox ?? this.options.selectMode != SelectMode.None) {\n\t\t\t\t\t\tthis.toggleNode(node, 0, true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.toggleNodeCollapse(node);\n\t\t\t\t\t\tthis.model.indexVisibleNodes();\n\t\t\t\t\t\tthis.list.size = this.size;\n\t\t\t\t\t}\n\t\t\t\t\tthis.dispatchEvent(new TreeEvent('select', {component: this, node}));\n\t\t\t\t} else if (item) {\n\t\t\t\t\tconst placeholder = item as NodePlaceholder;\n\t\t\t\t\tif (placeholder.loading) return;\n\t\t\t\t\tplaceholder.loading = true;\n\t\t\t\t\tplaceholder.element.querySelector<Icon>('og-icon').icon = 'hourglass-half';\n\t\t\t\t\tthis.loadMore(placeholder.parent);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.list.addEventListener('keydown', (e: KeyboardEvent) => {\n\t\t\tconst action = this.keyActions[e.key as keyof typeof this.keyActions];\n\t\t\tif (action) {\n\t\t\t\taction();\n\t\t\t} else if (!isNaN(parseInt(e.key))) {\n\t\t\t\tconst level = parseInt(e.key);\n\t\t\t\tconst node = this.model.visibleNodes[this.list.selectedIndex] as NodeModel;\n\t\t\t\tif (node.subLevels >= level) {\n\t\t\t\t\tthis.toggleNode(node, level, true);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t_onGlobalLevelSelect = async (e: LevelSelectEvent) => {\n\t\tthis.toggleNode(this.model.root, e.level, true);\n\t\tthis.globalTreeLevels.requestUpdate();\n\t\tthis.requestUpdate();\n\t\tawait this.list.updateComplete;\n\t\tthis.list.renderItems(true);\n\t}\n\n\t_onSearch = () => {\n\t\tthis.list.size = this.size;\n\t\tthis.list.select(0);\n\t\tthis.renderItems(true);\n\t\tthis.noMatches = this.size == 0;\n\t}\n\n\ttoggleNode(node: NodeModel, level: number, dispatchEvent = false) {\n\t\tthis.selection.toggle(node, level);\n\t\tthis.list.renderItems(true);\n\t\tsetTimeout(() => this.list.focus()); // TODO: list looses focus for unknown reason\n\t\tif (dispatchEvent) {\n\t\t\tthis.dispatchEvent(new TreeEvent('change', {component: this, node}));\n\t\t}\n\t}\n\n\tupdateNodeLoadState(node: NodeModel, newNodeCount: number) {\n\t\tif (this.options.pageSize > 0) {\n\t\t\tif (newNodeCount < this.options.pageSize) node.count = node.children.length;\n\t\t\telse node.count = node.children.length + 1;\n\t\t}\n\t}\n\n\tasync toggleNodeCollapse(node: NodeModel, dispatchEvent = true) {\n\t\tnode.toggleCollapse();\n\t\tif (!node.isLoaded && !node.isPartialyLoaded && this.adapter && !this.loadingNodes.has(node.key)) {\n\t\t\tthis.loadingNodes.add(node.key);\n\t\t\tthis.list.requestUpdate();\n\t\t\tconst sourceData = await this.adapter.getTree({parent: node, parentKey: node.key, offset: 0});\n\t\t\tconst model = new TreeModel(sourceData, this.options);\n\t\t\tnode.insertChildren(model.root.children, 0);\n\t\t\tthis.updateNodeLoadState(node, node.children.length);\n\t\t\tthis.model.indexNodesByTree(true);\n\t\t\tthis.list.size = this.size;\n\t\t\tthis.list.requestUpdate();\n\t\t\tthis.loadingNodes.delete(node.key);\n\t\t\tif (this.globalTreeLevels) this.globalTreeLevels.count = this.model.maxLevel + 1;\n\t\t}\n\t\tif (dispatchEvent) this.dispatchEvent(new TreeEvent('tree.collapse', {component: this, node}));\n\t}\n\n\ttoggleTreeCollapse(node?: NodeModel, dispatchEvent = true) {\n\t\tif (this.model.nodes.length == 0) return;\n\t\tif (!node) {\n\t\t\tnode = this.model.root;\n\t\t\tnode.collapsed = this.model.nodes[0].collapsed;\n\t\t}\n\t\tnode.toggleCollapse(true);\n\t\tthis.model.indexVisibleNodes();\n\t\tthis.list.size = this.size;\n\t\tif (dispatchEvent) this.dispatchEvent(new TreeEvent('tree.collapse', {component: this, node}));\n\t}\n\n\t_onListRender = () => {\n\t\tif (this.awaitFilter) {\n\t\t\tthis.filter(this.currentFilter);\n\t\t\tthis.awaitFilter = null;\n\t\t}\n\t}\n\n\t_onListMenu = (e: ListPointerEvent) => {\n\t\tthis.dispatchEvent(new TreePointerEvent('menu', e, {\n\t\t\ttree: this,\n\t\t\tnode: this.model.visibleNodes[e.index] as NodeModel\n\t\t}));\n\t}\n\n\tget itemStyle() {\n\t\tconst customStyle = this.options?.customStyle;\n\t\treturn [itemStyle, ...(customStyle ? (Array.isArray(customStyle) ? customStyle : [customStyle]) : [])];\n\t}\n\t\n\trender() {\n\t\tthis.logger.info(`render ${this.model?.visibleNodes.length ?? 0}`);\n\n\t\tconst list = html`\n\t\t\t<div class=\"main\" style=\"${styleMap({overflow: 'hidden', maxHeight: this.maxHeight ? dom.numToPixels(this.maxHeight) : null})}\">\n\t\t\t\t<og-list\n\t\t\t\t\tsize=\"${this.size}\"\n\t\t\t\t\t.customStyle=${this.itemStyle}\n\t\t\t\t\t?nativeHeight=\"${!this.maxHeight}\"\n\t\t\t\t\tmaxHeight=\"${this.maxHeight || null}\"\n\t\t\t\t\t@render=\"${this._onListRender}\"\n\t\t\t\t\t@list.menu=\"${this._onListMenu}\">\n\t\t\t\t</og-list>\n\t\t\t</div>\n\t\t`;\n\n\t\tconst loader = this.loading ? html`\n\t\t\t<div style=\"padding: 10px; text-align: center\">\n\t\t\t\t<og-loader></og-loader>\n\t\t\t</div>\n\t\t` : null;\n\n\t\tconst search = this.options.search ? html`\n\t\t\t<div class=\"toolbar toolbar-search\">\n\t\t\t\t<og-tree-search\n\t\t\t\t\t.tree=\"${this}\"\n\t\t\t\t\t@search=\"${this._onSearch}\">\n\t\t\t\t</og-tree-search>\n\t\t\t</div>\n\t\t` : null;\n\n\t\tconst alert = this.noMatches ? html`\n\t\t\t<og-alert text=\"No matches\" type=\"warning\"></og-alert>\n\t\t` : null;\n\n\t\tconst levels = this.hasGlobalLevels && !this.noMatches ? html`\n\t\t\t<div class=\"toolbar toolbar-levels\">\n\t\t\t\t<og-tree-levels\n\t\t\t\t\tid=\"globalLevels\"\n\t\t\t\t\t.count=\"${(this.options.maxLevel ?? this.model.maxLevel) + 1}\"\n\t\t\t\t\t.selection=\"${this.selection.getLevelSelection(this.model.root)}\"\n\t\t\t\t\t@levelselect=\"${this._onGlobalLevelSelect}\">\n\t\t\t\t</og-tree-levels>\n\t\t\t</div>\n\t\t` : null;\n\n\t\treturn join([search, alert, levels, loader, list], () => ' ');\n\t}\n\n\tasync highlightNode(key: string) {\n\t\tconst node = this.model?.nodeMap.get(key);\n\t\tif (!node) {\n\t\t\tthis.pendingHighlight = key;\n\t\t\treturn;\n\t\t}\n\t\tnode.walkUp((n: NodeModel) => n.expand(true));\n\t\tthis.model.indexVisibleNodes();\n\t\tthis.list.selectedIndex = node.visibleIndex;\n\t\t\n\t\tthis.list.requestUpdate();\n\t\tawait this.list.updateComplete;\n\n\t\tconst index = Math.max(0, node.visibleIndex - constants.MAX_HIGHLIGHT_ITEM_OFFSET);\n\t\tthis.list.scrollToIndex(index);\n\t}\n\n\thighlightFirstSelectedNode() {\n\t\tif (!this.list) return; // TODO - fix this\n\t\tif (!this.selection?.count) return;\n\t\tconst key = this.selection.items.keys().next().value;\n\t\tconst node = this.model.nodeMap.get(key);\n\t\tif (!node || node.visibleIndex == null) {\n\t\t\tthis.list.selectedIndex = -1;\n\t\t\treturn;\n\t\t}\n\n\t\tthis.list.selectedIndex = node.visibleIndex;\n\t\tthis.list.scrollToIndex(node.index);\n\t}\n\n\trenderItems(all = false) {\n\t\tif (this.list) {\n\t\t\tthis.list.size = this.size;\n\t\t\tthis.list.renderItems(all);\n\t\t}\n\t}\n\n\tclearSelection() {\n\t\tthis.selection.clear();\n\t\tthis.requestUpdate();\n\t}\n\n\tasync filter(term?: string) {\n\t\tterm = (term ?? '').trim();\n\t\tif (term === this.currentFilter) return;\n\n\t\tthis.currentFilter = term;\n\t\t\n\t\tif (this.loading || !this.firstUpdated) {\n\t\t\tthis.awaitFilter = true;\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.options.customSearch && this.adapter) {\n\t\t\tawait this.loadData({filter: term});\n\t\t\treturn;\n\t\t}\n\n\t\tif (term == null) {\n\t\t\tthis.filtering?.clear();\n\t\t\tthis.noMatches = false;\n\t\t} else {\n\t\t\tthis.filtering?.filter(term);\n\t\t\tthis.noMatches = this.size == 0;\n\t\t}\n\n\t\tthis.list.size = this.size;\n\t\tthis.list.select(0);\n\t\tthis.list.requestUpdate();\n\t}\n\n\tasync clearFilter() {\n\t\tif (this.searchBar?.searchInput) this.searchBar.searchInput.value = '';\n\t\tif (!this.firstUpdated) return;\n\t\tawait this.filter();\n\t}\n\n\n}"]}
|
|
1
|
+
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../../src/ui/tree.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EACN,GAAG,EAAQ,GAAG,EAAE,iBAAiB,EAAmB,QAAQ,EAE5D,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAW,WAAW,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,SAAS,EAAc,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAmB,MAAM,yBAAyB,CAAC;AAC9E,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAC5D,OAAO,EAAmB,UAAU,EAAqB,MAAM,UAAU,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE1C,MAAM,OAAO,SAAU,SAAQ,KAAK;IAKnC,YAAY,IAAY,EAAE,IAAyB;QAClD,KAAK,CAAC,IAAI,EAAE,EAAC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC,CAAC;QACjE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;CACD;AAED,MAAM,OAAO,gBAAiB,SAAQ,YAAY;IAKjD,YAAY,IAAY,EAAE,CAAe,EAAE,IAAgC;QAC1E,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;CACD;AAED,MAAM,OAAO,aAAc,SAAQ,SAAS;IAK3C,YAAY,IAAY,EAAE,CAAY,EAAE,IAA6B;QACpE,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;CACD;AAGM,IAAM,IAAI,GAAV,MAAM,IAAK,SAAQ,UAAU;IAiDnC,IAAI,kBAAkB;QACrB,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QACjC,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,QAAQ;YAAE,OAAO,IAAI,CAAC;QACxD,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,UAAU;YAAE,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;QAC9E,OAAO,KAAK,CAAC;IACd,CAAC;IAQD,IAAI,IAAI;QACP,OAAO,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,MAAM,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,eAAe;QAClB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,UAAU,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,UAAU,CAAC,cAAc,CAAC;eAC3G,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;IAC1D,CAAC;IA6BD;QACC,KAAK,EAAE,CAAC;QAxFT,YAAO,GAAY,WAAW,EAAE,CAAC;QAGjC,cAAS,GAAuB,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAGrE,WAAM,GAAe,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAG7C,cAAS,GAAW,IAAI,CAAC;QAGzB,eAAU,GAAW,SAAS,CAAC,gBAAgB,CAAC;QAMhD,oBAAe,GAAG,KAAK,CAAC;QAYxB,YAAO,GAAG,KAAK,CAAC;QAGhB,cAAS,GAAG,KAAK,CAAC;QAGlB,kBAAa,GAAG,KAAK,CAAC;QAUtB,gBAAW,GAAG,KAAK,CAAC;QACpB,kBAAa,GAAG,EAAE,CAAC;QACnB,iBAAY,GAAgB,IAAI,GAAG,EAAE,CAAC;QAatC,gBAAW,GAAG,CAAC,CAAY,EAAE,EAAE;YAC9B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ;gBAAE,OAAO;YACnC,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,CAAC,CAAC,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxC,CAAC,CAAC,YAAY,CAAC,UAAU,GAAG,MAAM,CAAC;gBACnC,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,GAAgB,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAgB,CAAC;gBACzH,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,IAAI,IAAI;oBAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACrC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC3B,CAAC;QACF,CAAC,CAAA;QAED,YAAO,GAAG,CAAC,CAAY,EAAE,EAAE;YAC1B,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,GAAgB,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAgB,CAAC;YACzH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3D,IAAI,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC;QAC5E,CAAC,CAAA;QAED,iBAAY,GAAG,GAAG,EAAE;YACnB,IAAI,IAAI,CAAC,aAAa;gBAAE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACpE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC3B,CAAC,CAAA;QAuED,eAAU,GAAG;YACZ,YAAY,EAAE,GAAG,EAAE;gBAClB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAc,CAAC;gBAC3E,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACpB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;oBAC9B,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;oBAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBAC5B,CAAC;YACF,CAAC;YACD,WAAW,EAAE,GAAG,EAAE;gBACjB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAc,CAAC;gBAC3E,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACrB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;oBAC9B,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;oBAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBAC5B,CAAC;YACF,CAAC;SACD,CAAA;QAmGD,yBAAoB,GAAG,KAAK,EAAE,CAAmB,EAAE,EAAE;YACpD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAChD,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC;YACtC,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAA;QAED,cAAS,GAAG,GAAG,EAAE;YAChB,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;QACjC,CAAC,CAAA;QAgDD,kBAAa,GAAG,GAAG,EAAE;YACpB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAChC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACzB,CAAC;QACF,CAAC,CAAA;QAED,gBAAW,GAAG,CAAC,CAAmB,EAAE,EAAE;YACrC,IAAI,CAAC,aAAa,CAAC,IAAI,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE;gBAClD,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAc;aACnD,CAAC,CAAC,CAAC;QACL,CAAC,CAAA;QAhQA,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACpD,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACtD,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO;QACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAED,iBAAiB;QAChB,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,aAAa,CAAC,UAAsB,EAAE,UAA4B,IAAI;QACrE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,GAAG,IAAI,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAErD,IAAI,UAAU,EAAE,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YAC7D,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,QAAQ,CAAC,MAAyB;QACjC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAA0B;QACxC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QAElC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;QACtB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QACrG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,yDAAyD;QACnG,IAAI,OAAO,EAAE,QAAQ,GAAG,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC3E,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QAErB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,MAAM,IAAI,CAAC,cAAc,CAAC;YAC1B,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAChD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC9B,CAAC;IACF,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAiB;QAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QACtC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAC,CAAC,CAAC;QACvG,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,OAAO;QACZ,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAC,CAAC,CAAC;IACnD,CAAC;IAqBD,UAAU,CAAC,KAAgC;QAC1C,IAAI,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC1C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,eAAe;gBAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5C,CAAC;QAED,4BAA4B;QAC5B,8BAA8B;QAC9B,IAAI;QAEJ,IAAI,CAAC,KAAK,KAAV,IAAI,CAAC,KAAK,GAAK,IAAI,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,EAAC;QACvC,IAAI,CAAC,SAAS,KAAd,IAAI,CAAC,SAAS,GAAK,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAC;QAC/C,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,0EAA0E;QAC7G,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAElC,IAAI,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAClC,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QACvC,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC;IAC9C,CAAC;IAED,OAAO,CAAC,YAAuC;QAC9C,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;YAClD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACF,CAAC;IAED,KAAK,CAAC,YAAY;QACjB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAElD,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE;YACrD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1D,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAmB,EAAE,GAAG,EAAE,EAAE;YACtE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC9E,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;YACpD,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1D,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAkB,EAAE,EAAE;YAC3D,CAAC,CAAC,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,CAAC,OAAO,IAAI,iBAAiB,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,QAAQ,CAAC,EAAE,CAAC;gBAC1E,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBAC9C,IAAI,IAAI,YAAY,SAAS,EAAE,CAAC;oBAC/B,MAAM,IAAI,GAAG,IAAiB,CAAC;oBAC/B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;wBACjE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;oBAChC,CAAC;yBAAM,CAAC;wBACP,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;wBAC9B,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;wBAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;oBAC5B,CAAC;oBACD,IAAI,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE,EAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC;gBACtE,CAAC;qBAAM,IAAI,IAAI,EAAE,CAAC;oBACjB,MAAM,WAAW,GAAG,IAAuB,CAAC;oBAC5C,IAAI,WAAW,CAAC,OAAO;wBAAE,OAAO;oBAChC,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;oBAC3B,WAAW,CAAC,OAAO,CAAC,aAAa,CAAO,SAAS,CAAC,CAAC,IAAI,GAAG,gBAAgB,CAAC;oBAC3E,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;gBACnC,CAAC;YACF,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAgB,EAAE,EAAE;YAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAmC,CAAC,CAAC;YACtE,IAAI,MAAM,EAAE,CAAC;gBACZ,MAAM,EAAE,CAAC;YACV,CAAC;iBAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACpC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAc,CAAC;gBAC3E,IAAI,IAAI,CAAC,SAAS,IAAI,KAAK,EAAE,CAAC;oBAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;gBACpC,CAAC;YACF,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAiBD,UAAU,CAAC,IAAe,EAAE,KAAa,EAAE,aAAa,GAAG,KAAK;QAC/D,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC5B,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,6CAA6C;QAClF,IAAI,aAAa,EAAE,CAAC;YACnB,IAAI,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE,EAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC;QACtE,CAAC;IACF,CAAC;IAED,mBAAmB,CAAC,IAAe,EAAE,YAAoB;QACxD,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;YAC/B,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ;gBAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;;gBACvE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5C,CAAC;IACF,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,IAAe,EAAE,aAAa,GAAG,IAAI;QAC7D,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAClG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YAC1B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAC,CAAC,CAAC;YAC9F,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACtD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC5C,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACrD,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YAC1B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,IAAI,CAAC,gBAAgB;gBAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,aAAa;YAAE,IAAI,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,eAAe,EAAE,EAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC;IAChG,CAAC;IAED,kBAAkB,CAAC,IAAgB,EAAE,aAAa,GAAG,IAAI;QACxD,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO;QACzC,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAChD,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAC3B,IAAI,aAAa;YAAE,IAAI,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,eAAe,EAAE,EAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC;IAChG,CAAC;IAgBD,IAAI,SAAS;QACZ,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;QAC9C,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxG,CAAC;IAED,IAAI,UAAU;QACb,OAAO,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;IAC7E,CAAC;IAED,MAAM;QACL,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;QAEnE,MAAM,IAAI,GAAG,IAAI,CAAA;8BACW,QAAQ,CAAC,EAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAC,CAAC;;aAE/F,IAAI,CAAC,IAAI;oBACF,IAAI,CAAC,SAAS;sBACZ,CAAC,IAAI,CAAC,SAAS;kBACnB,IAAI,CAAC,SAAS,IAAI,IAAI;gBACxB,IAAI,CAAC,aAAa;mBACf,IAAI,CAAC,WAAW;;;GAGhC,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA;;;;GAIjC,CAAC,CAAC,CAAC,IAAI,CAAC;QAET,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA;;;cAG7B,IAAI;gBACF,IAAI,CAAC,SAAS;;;GAG3B,CAAC,CAAC,CAAC,IAAI,CAAC;QAET,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAA;;GAElC,CAAC,CAAC,CAAC,IAAI,CAAC;QAET,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAA;;;;eAIzB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;mBAC9C,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;qBAC/C,IAAI,CAAC,oBAAoB;;;MAGxC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAA;;;;;eAKhB,GAAG,CAAC,KAAK,CAAC;gBACT,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE;;KAEjC,CAAC,CAAC,CAAC,IAAI;;GAET,CAAC,CAAC,CAAC,IAAI,CAAC;QAET,OAAO,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,GAAW;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC;YAC5B,OAAO;QACR,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAY,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC;QAE5C,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;QAE/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,yBAAyB,CAAC,CAAC;QACnF,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,0BAA0B;QACzB,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,kBAAkB;QAC1C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK;YAAE,OAAO;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;YAC7B,OAAO;QACR,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,WAAW,CAAC,GAAG,GAAG,KAAK;QACtB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACF,CAAC;IAED,iFAAiF;IACjF,4DAA4D;IAC5D,MAAM;QACL,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,gFAAgF;IAChF,qDAAqD;IACrD,IAAI,aAAa;QAChB,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAC5B,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;QACrC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YAC9C,IAAI,KAAK,YAAY,WAAW,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC;QAC9F,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IAED,cAAc;QACb,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,aAAa,EAAE,CAAC;IACtB,CAAC;IAED,kFAAkF;IAClF,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,KAAK;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAa;QACzB,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,IAAI,KAAK,IAAI,CAAC,aAAa;YAAE,OAAO;QAExC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAE1B,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACxC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,OAAO;QACR,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/C,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC,CAAC;YACpC,OAAO;QACR,CAAC;QAED,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,yDAAyD;QAEhH,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YAClB,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACxB,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAE7C,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,WAAW;QAChB,IAAI,IAAI,CAAC,SAAS,EAAE,WAAW;YAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,GAAG,EAAE,CAAC;QACvE,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO;QAC/B,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;IACrB,CAAC;;AAphBM,WAAM,GAAG,CAAC,KAAK,CAAC,AAAV,CAAW;AAGxB;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC;mCACR;AAGjB;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC;qCACJ;AAGrB;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC;qCACQ;AAGjC;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC;uCAC4C;AAGrE;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC;oCACoB;AAG7C;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC;uCACA;AAGzB;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC;wCACuB;AAGhD;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,KAAK,EAAC,CAAC;mCACC;AAGzB;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,OAAO,EAAC,CAAC;6CACF;AAGxB;IADC,KAAK,CAAC,SAAS,CAAC;kCACN;AAGX;IADC,KAAK,CAAC,gBAAgB,CAAC;uCACN;AAGlB;IADC,KAAK,CAAC,eAAe,CAAC;8CACE;AAGzB;IADC,KAAK,EAAE;qCACQ;AAGhB;IADC,KAAK,EAAE;uCACU;AAGlB;IADC,KAAK,EAAE;2CACc;AA/CV,IAAI;IADhB,aAAa,CAAC,SAAS,CAAC;GACZ,IAAI,CAyhBhB","sourcesContent":["import { \n\tdom, List, log, ListSelectTrigger, ListSelectEvent, Expander, \n\tLevelExpandEvent, ListPointerEvent, Icon, Layout \n} from '@omegagrid/core';\nimport { Options, initOptions } from '../options';\nimport { TreeModel, TreeSource } from '../model/treeModel';\nimport { LitElement, html } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { style, itemStyle } from \"./tree.style\";\nimport Levels, { LevelSelectEvent } from './levels';\nimport { createItemRenderer } from './tree.renderer';\nimport { TreeSelectionModel, SerializedValue } from '../model/selectionModel';\nimport constants from '../constants';\nimport { NodeModel } from '../model/nodeModel';\nimport { TreeAdapter } from '../model/treeAdapter';\nimport { FilterModel } from '../model/filterModel';\nimport Search from './search';\nimport { styleMap } from 'lit-html/directives/style-map.js';\nimport { NodePlaceholder, SelectMode, TreeAdapterParams } from '../types';\nimport { join } from 'lit/directives/join.js';\nimport { msg } from '@omegagrid/localize';\n\nexport class TreeEvent extends Event {\n\n\tcomponent: Tree;\n\tnode: NodeModel;\n\n\tconstructor(type: string, args?: Partial<TreeEvent>) {\n\t\tsuper(type, {bubbles: false, cancelable: true, composed: false});\n\t\tObject.assign(this, args);\n\t}\n}\n\nexport class TreePointerEvent extends PointerEvent {\n\n\ttree: Tree;\n\tnode: NodeModel;\n\n\tconstructor(type: string, e: PointerEvent, args?: Partial<TreePointerEvent>) {\n\t\tsuper(`tree.${type}`, e);\n\t\tObject.assign(this, args);\n\t}\n}\n\nexport class TreeDropEvent extends DragEvent {\n\n\ttree: Tree;\n\tnode: NodeModel;\n\n\tconstructor(type: string, e: DragEvent, args?: Partial<TreeDropEvent>) {\n\t\tsuper(`tree.${type}`, e);\n\t\tObject.assign(this, args);\n\t}\n}\n\n@customElement('og-tree')\nexport class Tree extends LitElement implements Layout {\n\n\tstatic styles = [style];\n\n\t@property({type: Object})\n\tmodel: TreeModel;\n\n\t@property({type: Object})\n\tadapter: TreeAdapter;\n\n\t@property({type: Object})\n\toptions: Options = initOptions();\n\n\t@property({type: Object})\n\tselection: TreeSelectionModel = new TreeSelectionModel(this.options);\n\n\t@property({type: Object})\n\tlogger: log.Logger = new log.Logger('Ωtree');\n\n\t@property({type: Number})\n\tmaxHeight: number = null;\n\n\t@property({type: Number})\n\titemHeight: number = constants.LIST_ITEM_HEIGHT;\n\t\n\t@property({type: Array})\n\tvalue: SerializedValue[];\n\n\t@property({type: Boolean})\n\tdisableAutoload = false;\n\t\n\t@query('og-list')\n\tlist: List;\n\n\t@query('og-tree-search')\n\tsearchBar: Search;\n\n\t@query('#globalLevels')\n\tglobalTreeLevels: Levels;\n\n\t@state()\n\tloading = false;\n\n\t@state()\n\tnoMatches = false;\n\n\t@state()\n\tshowSelectAll = false;\n\n\tget hasSelectAllButton() {\n\t\tif (this.noMatches) return false;\n\t\tif (this.options.selectAllMode == 'always') return true;\n\t\tif (this.options.selectAllMode == 'filtered') return this.filtering.hasFilter;\n\t\treturn false;\n\t}\n\n\tfiltering: FilterModel;\n\tawaitFilter = false;\n\tcurrentFilter = '';\n\tloadingNodes: Set<string> = new Set();\n\tpendingHighlight: string;\n\n\tget size () {\n\t\treturn this.model?.visibleNodes.length ?? 0;\n\t}\n\n\tget hasGlobalLevels() {\n\t\treturn (this.options.selectMode == SelectMode.Multiple || this.options.selectMode == SelectMode.MultipleLevels)\n\t\t\t&& this.options.globalLevels && this.model.maxLevel > 0;\n\t}\n\n\t_lastDragItem: HTMLElement;\n\t_onDragover = (e: DragEvent) => {\n\t\tif (!this.options.fileDrop) return;\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\tif (e.dataTransfer.types[0] == 'Files') {\n\t\t\te.dataTransfer.dropEffect = 'move';\n\t\t\tconst item = e.composedPath().find((elm: HTMLElement) => elm.classList && elm.classList.contains('item')) as HTMLElement;\n\t\t\tthis._onDragLeave();\n\t\t\tif (item) item.classList.add('drag');\n\t\t\tthis._lastDragItem = item;\n\t\t}\n\t}\n\n\t_onDrop = (e: DragEvent) => {\n\t\te.preventDefault();\n\t\tthis._onDragLeave();\n\t\tconst item = e.composedPath().find((elm: HTMLElement) => elm.classList && elm.classList.contains('item')) as HTMLElement;\n\t\tconst node = this.model.nodes[parseInt(item.dataset.node)];\n\t\tthis.dispatchEvent(new TreeDropEvent('drop', e, {tree: this, node: node}));\n\t}\n\n\t_onDragLeave = () => {\n\t\tif (this._lastDragItem) this._lastDragItem.classList.remove('drag');\n\t\tthis._lastDragItem = null;\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.addEventListener('dragover', this._onDragover);\n\t\tthis.addEventListener('dragleave', this._onDragLeave);\n\t\tthis.addEventListener('drop', this._onDrop);\n\t}\n\n\tdestroy() {\n\t\tthis.logger.info('destroy');\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback();\n\t\tthis.logger.info('init');\n\t\tthis.tabIndex = 0;\n\t}\n\n\tsetSourceData(sourceData: TreeSource, options: Partial<Options> = null) {\n\t\tObject.assign(this.options, options ?? {});\n\t\tthis.model = new TreeModel(sourceData, this.options);\n\n\t\tif (sourceData?.length > 0 && sourceData[0].s !== undefined) {\n\t\t\tthis.selection.setItems(sourceData.filter(i => i.s).map(i => [i.k, 0, 1]));\n\t\t}\n\n\t\tthis.dispatchEvent(new TreeEvent('load', {component: this}));\n\t}\n\n\tsetValue(values: SerializedValue[]) {\n\t\tthis.selection.populate(values);\n\t}\n\n\tasync loadData(params?: TreeAdapterParams) {\n\t\tthis.loading = true;\n\t\tif (this.list) this.list.size = 0;\n\t\t\n\t\tthis.model = null;\n\t\tparams = params ?? {};\n\t\tconst [tree, options] = await Promise.all([this.adapter.getTree(params), this.adapter.getOptions()]);\n\t\tthis.setSourceData(tree, options);\n\t\tthis.currentFilter = params.filter ?? ''; // the loaded data is filtered by the requested term only\n\t\tif (options?.pageSize > 0) {\n\t\t\tthis.updateNodeLoadState(this.model.root, this.model.root.children.length);\n\t\t\tthis.model.indexVisibleNodes();\n\t\t}\n\t\tthis.loading = false;\n\n\t\tif (this.pendingHighlight) {\n\t\t\tawait this.updateComplete;\n\t\t\tawait this.highlightNode(this.pendingHighlight);\n\t\t\tthis.pendingHighlight = null;\n\t\t}\n\t}\n\n\tasync loadMore(parent: NodeModel) {\n\t\tconst offset = parent.children.length;\n\t\tconst sourceData = await this.adapter.getTree({parent: parent, parentKey: parent.key, offset: offset});\n\t\tconst model = new TreeModel(sourceData, this.options);\n\t\tparent.insertChildren(model.root.children, offset);\n\t\tthis.updateNodeLoadState(parent, model.root.children.length);\n\t\tthis.model.indexNodesByTree(true);\n\t\tthis.list.size = this.size;\n\t\tthis.list.requestUpdate();\n\t}\n\n\tasync refresh() {\n\t\tawait this.loadData({filter: this.currentFilter});\n\t}\n\n\tkeyActions = {\n\t\t'ArrowRight': () => {\n\t\t\tconst node = this.model.visibleNodes[this.list.selectedIndex] as NodeModel;\n\t\t\tif (node.collapsed) {\n\t\t\t\tthis.toggleNodeCollapse(node);\n\t\t\t\tthis.model.indexVisibleNodes();\n\t\t\t\tthis.list.size = this.size;\n\t\t\t}\n\t\t},\n\t\t'ArrowLeft': () => {\n\t\t\tconst node = this.model.visibleNodes[this.list.selectedIndex] as NodeModel;\n\t\t\tif (!node.collapsed) {\n\t\t\t\tthis.toggleNodeCollapse(node);\n\t\t\t\tthis.model.indexVisibleNodes();\n\t\t\t\tthis.list.size = this.size;\n\t\t\t}\n\t\t}\n\t}\n\t\n\twillUpdate(props: Map<PropertyKey, unknown>) {\n\t\tif (props.has('adapter') && this.adapter) {\n\t\t\tthis.model = null;\n\t\t\tthis.filtering = null;\n\t\t\tthis.adapter.attach(this);\n\t\t\tif (!this.disableAutoload) this.loadData();\n\t\t}\n\n\t\t// if (props.has('value')) {\n\t\t// \tthis.setValue(this.value);\n\t\t// }\n\n\t\tthis.model ??= new TreeModel([], null);\n\t\tthis.filtering ??= new FilterModel(this.model);\n\t\tthis.filtering.model = this.model; // the model gets replaced by loading data, the filtering has to follow it\n\t\tthis.selection.model = this.model;\n\n\t\tif (props.has('options')) {\n\t\t\tthis.options = initOptions(this.options);\n\t\t\tthis.model.options = this.options;\n\t\t\tthis.selection.options = this.options;\n\t\t}\n\n\t\tthis.showSelectAll = this.hasSelectAllButton;\n\t}\n\n\tupdated(changedProps: Map<PropertyKey, unknown>): void {\n\t\tif (changedProps.has('model') && this.list) {\n\t\t\tthis.list.size = this.size;\n\t\t\tthis.noMatches = this.noMatches && this.size == 0;\n\t\t\tthis.list.requestUpdate();\n\t\t}\n\t}\n\n\tasync firstUpdated() {\n\t\tif (this.value) {\n\t\t\tthis.selection.setItems(this.value ?? []);\n\t\t}\n\n\t\tthis.list.itemRenderer = createItemRenderer(this);\n\n\t\tdom.on(this.list, 'toggle', '.item', async (e, elm) => {\n\t\t\tconst node = this.model.nodes[parseInt(elm.dataset.node)];\n\t\t\tthis.toggleNodeCollapse(node);\n\t\t\tthis.model.indexVisibleNodes();\n\t\t\tthis.list.size = this.size;\n\t\t});\n\n\t\tdom.on(this.list, 'levelselect', '.item', (e: LevelExpandEvent, elm) => {\n\t\t\tthis.toggleNode(this.model.nodes[parseInt(elm.dataset.node)], e.level, true);\n\t\t});\n\t\t\n\t\tdom.on(this.list, 'contextmenu', '.item', (e, elm) => {\n\t\t\te.preventDefault();\n\t\t\tconst node = this.model.nodes[parseInt(elm.dataset.node)];\n\t\t\tthis.selection.select(node, 0, false);\n\t\t\tthis.list.renderItems(true);\n\t\t});\n\n\t\tthis.list.addEventListener('select', (e: ListSelectEvent) => {\n\t\t\te.stopPropagation();\n\t\t\tif (e.trigger != ListSelectTrigger.Arrow && !(e.elm instanceof Expander)) {\n\t\t\t\tconst item = this.model.visibleNodes[e.index];\n\t\t\t\tif (item instanceof NodeModel) {\n\t\t\t\t\tconst node = item as NodeModel;\n\t\t\t\t\tif (node.checkbox ?? this.options.selectMode != SelectMode.None) {\n\t\t\t\t\t\tthis.toggleNode(node, 0, true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.toggleNodeCollapse(node);\n\t\t\t\t\t\tthis.model.indexVisibleNodes();\n\t\t\t\t\t\tthis.list.size = this.size;\n\t\t\t\t\t}\n\t\t\t\t\tthis.dispatchEvent(new TreeEvent('select', {component: this, node}));\n\t\t\t\t} else if (item) {\n\t\t\t\t\tconst placeholder = item as NodePlaceholder;\n\t\t\t\t\tif (placeholder.loading) return;\n\t\t\t\t\tplaceholder.loading = true;\n\t\t\t\t\tplaceholder.element.querySelector<Icon>('og-icon').icon = 'hourglass-half';\n\t\t\t\t\tthis.loadMore(placeholder.parent);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.list.addEventListener('keydown', (e: KeyboardEvent) => {\n\t\t\tconst action = this.keyActions[e.key as keyof typeof this.keyActions];\n\t\t\tif (action) {\n\t\t\t\taction();\n\t\t\t} else if (!isNaN(parseInt(e.key))) {\n\t\t\t\tconst level = parseInt(e.key);\n\t\t\t\tconst node = this.model.visibleNodes[this.list.selectedIndex] as NodeModel;\n\t\t\t\tif (node.subLevels >= level) {\n\t\t\t\t\tthis.toggleNode(node, level, true);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t_onGlobalLevelSelect = async (e: LevelSelectEvent) => {\n\t\tthis.toggleNode(this.model.root, e.level, true);\n\t\tthis.globalTreeLevels.requestUpdate();\n\t\tthis.requestUpdate();\n\t\tawait this.list.updateComplete;\n\t\tthis.list.renderItems(true);\n\t}\n\n\t_onSearch = () => {\n\t\tthis.list.size = this.size;\n\t\tthis.list.select(0);\n\t\tthis.renderItems(true);\n\t\tthis.noMatches = this.size == 0;\n\t}\n\n\ttoggleNode(node: NodeModel, level: number, dispatchEvent = false) {\n\t\tthis.selection.toggle(node, level);\n\t\tthis.list.renderItems(true);\n\t\tsetTimeout(() => this.list.focus()); // TODO: list looses focus for unknown reason\n\t\tif (dispatchEvent) {\n\t\t\tthis.dispatchEvent(new TreeEvent('change', {component: this, node}));\n\t\t}\n\t}\n\n\tupdateNodeLoadState(node: NodeModel, newNodeCount: number) {\n\t\tif (this.options.pageSize > 0) {\n\t\t\tif (newNodeCount < this.options.pageSize) node.count = node.children.length;\n\t\t\telse node.count = node.children.length + 1;\n\t\t}\n\t}\n\n\tasync toggleNodeCollapse(node: NodeModel, dispatchEvent = true) {\n\t\tnode.toggleCollapse();\n\t\tif (!node.isLoaded && !node.isPartialyLoaded && this.adapter && !this.loadingNodes.has(node.key)) {\n\t\t\tthis.loadingNodes.add(node.key);\n\t\t\tthis.list.requestUpdate();\n\t\t\tconst sourceData = await this.adapter.getTree({parent: node, parentKey: node.key, offset: 0});\n\t\t\tconst model = new TreeModel(sourceData, this.options);\n\t\t\tnode.insertChildren(model.root.children, 0);\n\t\t\tthis.updateNodeLoadState(node, node.children.length);\n\t\t\tthis.model.indexNodesByTree(true);\n\t\t\tthis.list.size = this.size;\n\t\t\tthis.list.requestUpdate();\n\t\t\tthis.loadingNodes.delete(node.key);\n\t\t\tif (this.globalTreeLevels) this.globalTreeLevels.count = this.model.maxLevel + 1;\n\t\t}\n\t\tif (dispatchEvent) this.dispatchEvent(new TreeEvent('tree.collapse', {component: this, node}));\n\t}\n\n\ttoggleTreeCollapse(node?: NodeModel, dispatchEvent = true) {\n\t\tif (this.model.nodes.length == 0) return;\n\t\tif (!node) {\n\t\t\tnode = this.model.root;\n\t\t\tnode.collapsed = this.model.nodes[0].collapsed;\n\t\t}\n\t\tnode.toggleCollapse(true);\n\t\tthis.model.indexVisibleNodes();\n\t\tthis.list.size = this.size;\n\t\tif (dispatchEvent) this.dispatchEvent(new TreeEvent('tree.collapse', {component: this, node}));\n\t}\n\n\t_onListRender = () => {\n\t\tif (this.awaitFilter) {\n\t\t\tthis.filter(this.currentFilter);\n\t\t\tthis.awaitFilter = null;\n\t\t}\n\t}\n\n\t_onListMenu = (e: ListPointerEvent) => {\n\t\tthis.dispatchEvent(new TreePointerEvent('menu', e, {\n\t\t\ttree: this,\n\t\t\tnode: this.model.visibleNodes[e.index] as NodeModel\n\t\t}));\n\t}\n\n\tget itemStyle() {\n\t\tconst customStyle = this.options?.customStyle;\n\t\treturn [itemStyle, ...(customStyle ? (Array.isArray(customStyle) ? customStyle : [customStyle]) : [])];\n\t}\n\n\tget hasToolbar() {\n\t\treturn (this.hasGlobalLevels || this.hasSelectAllButton) && !this.noMatches;\n\t}\n\t\n\trender() {\n\t\tthis.logger.info(`render ${this.model?.visibleNodes.length ?? 0}`);\n\n\t\tconst list = html`\n\t\t\t<div class=\"main\" style=\"${styleMap({maxHeight: this.maxHeight ? dom.numToPixels(this.maxHeight) : null})}\">\n\t\t\t\t<og-list\n\t\t\t\t\tsize=\"${this.size}\"\n\t\t\t\t\t.customStyle=${this.itemStyle}\n\t\t\t\t\t?nativeHeight=\"${!this.maxHeight}\"\n\t\t\t\t\tmaxHeight=\"${this.maxHeight || null}\"\n\t\t\t\t\t@render=\"${this._onListRender}\"\n\t\t\t\t\t@list.menu=\"${this._onListMenu}\">\n\t\t\t\t</og-list>\n\t\t\t</div>\n\t\t`;\n\n\t\tconst loader = this.loading ? html`\n\t\t\t<div style=\"padding: 10px; text-align: center\">\n\t\t\t\t<og-loader></og-loader>\n\t\t\t</div>\n\t\t` : null;\n\n\t\tconst search = this.options.search ? html`\n\t\t\t<div class=\"toolbar toolbar-search\">\n\t\t\t\t<og-tree-search\n\t\t\t\t\t.tree=\"${this}\"\n\t\t\t\t\t@search=\"${this._onSearch}\">\n\t\t\t\t</og-tree-search>\n\t\t\t</div>\n\t\t` : null;\n\n\t\tconst alert = this.noMatches ? html`\n\t\t\t<og-alert text=\"No matches\" type=\"warning\"></og-alert>\n\t\t` : null;\n\n\t\tconst toolbar = this.hasToolbar ? html`\n\t\t\t<div class=\"toolbar toolbar-levels\">\n\t\t\t\t<og-tree-levels\n\t\t\t\t\tid=\"globalLevels\"\n\t\t\t\t\t.count=\"${(this.options.maxLevel ?? this.model.maxLevel) + 1}\"\n\t\t\t\t\t.selection=\"${this.selection.getLevelSelection(this.model.root)}\"\n\t\t\t\t\t@levelselect=\"${this._onGlobalLevelSelect}\">\n\t\t\t\t</og-tree-levels>\n\n\t\t\t\t${this.showSelectAll ? html`\n\t\t\t\t\t<div style=\"flex: 1\"></div>\n\t\t\t\t\t<og-button\n\t\t\t\t\t\tclass=\"btn-select-all\"\n\t\t\t\t\t\tcolor=\"transparent\"\n\t\t\t\t\t\t.text=\"${msg('All')}\"\n\t\t\t\t\t\t@click=\"${() => this.selectAll()}\">\n\t\t\t\t\t</og-button>\n\t\t\t\t` : null}\n\t\t\t</div>\n\t\t` : null;\n\n\t\treturn join([search, alert, toolbar, loader, list], () => ' ');\n\t}\n\n\tasync highlightNode(key: string) {\n\t\tconst node = this.model?.nodeMap.get(key);\n\t\tif (!node) {\n\t\t\tthis.pendingHighlight = key;\n\t\t\treturn;\n\t\t}\n\t\tnode.walkUp((n: NodeModel) => n.expand(true));\n\t\tthis.model.indexVisibleNodes();\n\t\tthis.list.selectedIndex = node.visibleIndex;\n\t\t\n\t\tthis.list.requestUpdate();\n\t\tawait this.list.updateComplete;\n\n\t\tconst index = Math.max(0, node.visibleIndex - constants.MAX_HIGHLIGHT_ITEM_OFFSET);\n\t\tthis.list.scrollToIndex(index);\n\t}\n\n\thighlightFirstSelectedNode() {\n\t\tif (!this.list) return; // TODO - fix this\n\t\tif (!this.selection?.count) return;\n\t\tconst key = this.selection.items.keys().next().value;\n\t\tconst node = this.model.nodeMap.get(key);\n\t\tif (!node || node.visibleIndex == null) {\n\t\t\tthis.list.selectedIndex = -1;\n\t\t\treturn;\n\t\t}\n\n\t\tthis.list.selectedIndex = node.visibleIndex;\n\t\tthis.list.scrollToIndex(node.index);\n\t}\n\n\trenderItems(all = false) {\n\t\tif (this.list) {\n\t\t\tthis.list.size = this.size;\n\t\t\tthis.list.renderItems(all);\n\t\t}\n\t}\n\n\t// called by the dropdown container after it has been resized - the list viewport\n\t// changed, so the visible window of items has to be rebuilt\n\tlayout() {\n\t\tthis.renderItems(true);\n\t}\n\n\t// the toolbars keep their intrinsic height, but the virtualized list does not -\n\t// take the height it reports instead of measuring it\n\tget naturalHeight() {\n\t\tif (!this.list) return null;\n\t\tlet height = this.list.naturalHeight;\n\t\tfor (const child of this.shadowRoot.children) {\n\t\t\tif (child instanceof HTMLElement && !child.contains(this.list)) height += child.offsetHeight;\n\t\t}\n\t\treturn height;\n\t}\n\n\tclearSelection() {\n\t\tthis.selection.clear();\n\t\tthis.requestUpdate();\n\t}\n\n\t/** Selects every node matching the current filter, returns the number of them. */\n\tasync selectAll(replace = false) {\n\t\tconst count = this.selection.selectAll(replace);\n\t\tthis.requestUpdate();\n\t\tif (this.list) {\n\t\t\tawait this.list.updateComplete;\n\t\t\tthis.list.renderItems(true);\n\t\t}\n\t\treturn count;\n\t}\n\n\tasync filter(term?: string) {\n\t\tterm = (term ?? '').trim();\n\t\tif (term === this.currentFilter) return;\n\n\t\tthis.currentFilter = term;\n\t\t\n\t\tif (this.loading || !this.firstUpdated) {\n\t\t\tthis.awaitFilter = true;\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.options.customSearch && this.adapter) {\n\t\t\tawait this.loadData({filter: term});\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.filtering) this.filtering.model = this.model; // the model can have been replaced since the last update\n\n\t\tif (term == null) {\n\t\t\tthis.filtering?.clear();\n\t\t\tthis.noMatches = false;\n\t\t} else {\n\t\t\tthis.filtering?.filter(term);\n\t\t\tthis.noMatches = this.size == 0;\n\t\t}\n\n\t\tthis.showSelectAll = this.hasSelectAllButton;\n\n\t\tthis.list.size = this.size;\n\t\tthis.list.select(0);\n\t\tthis.list.requestUpdate();\n\t}\n\n\tasync clearFilter() {\n\t\tif (this.searchBar?.searchInput) this.searchBar.searchInput.value = '';\n\t\tif (!this.firstUpdated) return;\n\t\tawait this.filter();\n\t}\n\n\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.style.d.ts","sourceRoot":"","sources":["../../src/ui/tree.style.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"tree.style.d.ts","sourceRoot":"","sources":["../../src/ui/tree.style.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,KAAK,yBA6DjB,CAAC;AAEF,eAAO,MAAM,SAAS,yBA6FrB,CAAC"}
|
package/dist/ui/tree.style.js
CHANGED
|
@@ -6,6 +6,7 @@ export const style = css `
|
|
|
6
6
|
font-family: var(--og-font-family);
|
|
7
7
|
position: relative;
|
|
8
8
|
width: 100%;
|
|
9
|
+
min-height: 0;
|
|
9
10
|
display: flex;
|
|
10
11
|
flex-direction: column;
|
|
11
12
|
user-select: none;
|
|
@@ -19,8 +20,8 @@ export const style = css `
|
|
|
19
20
|
|
|
20
21
|
og-list {
|
|
21
22
|
width: 100%;
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
flex: 1 1 auto;
|
|
24
|
+
min-height: 0;
|
|
24
25
|
}
|
|
25
26
|
|
|
26
27
|
.toolbar {
|
|
@@ -29,14 +30,21 @@ export const style = css `
|
|
|
29
30
|
|
|
30
31
|
.toolbar-levels {
|
|
31
32
|
min-height: 18px;
|
|
32
|
-
margin:
|
|
33
|
+
margin: 1px;
|
|
34
|
+
display: flex;
|
|
35
|
+
flex-direction: row;
|
|
33
36
|
}
|
|
34
37
|
|
|
35
|
-
.toolbar-levels >
|
|
38
|
+
.toolbar-levels > *, .btn-select-all {
|
|
36
39
|
height: 18px;
|
|
37
40
|
line-height: 18px;
|
|
38
41
|
}
|
|
39
42
|
|
|
43
|
+
.btn-select-all {
|
|
44
|
+
border: 1px solid var(--og-accent-color);
|
|
45
|
+
border-radius: 0;
|
|
46
|
+
}
|
|
47
|
+
|
|
40
48
|
.toolbar-search {
|
|
41
49
|
margin: 0;
|
|
42
50
|
border-bottom: 1px solid var(--og-bucket-border-color);
|
|
@@ -47,7 +55,11 @@ export const style = css `
|
|
|
47
55
|
}
|
|
48
56
|
|
|
49
57
|
.main {
|
|
50
|
-
flex: 1;
|
|
58
|
+
flex: 1 1 auto;
|
|
59
|
+
min-height: 0;
|
|
60
|
+
overflow: hidden;
|
|
61
|
+
display: flex;
|
|
62
|
+
flex-direction: column;
|
|
51
63
|
}
|
|
52
64
|
`;
|
|
53
65
|
export const itemStyle = css `
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.style.js","sourceRoot":"","sources":["../../src/ui/tree.style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,MAAM,CAAC,MAAM,KAAK,GAAG,GAAG,CAAA
|
|
1
|
+
{"version":3,"file":"tree.style.js","sourceRoot":"","sources":["../../src/ui/tree.style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,MAAM,CAAC,MAAM,KAAK,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6DvB,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAoEV,SAAS,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;CAyBtC,CAAC","sourcesContent":["import { css } from 'lit';\nimport constants from '../constants';\n\nexport const style = css`\n\t:host {\n\t\tfont-size: var(--og-font-size);\n\t\tfont-family: var(--og-font-family);\n\t\tposition: relative;\n\t\twidth: 100%;\n\t\tmin-height: 0;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tuser-select: none;\n\t\toutline: none;\n\t}\n\n\tog-alert {\n\t\tborder-radius: 0;\n\t\tborder-width: 0;\n\t}\n\n\tog-list {\n\t\twidth: 100%;\n\t\tflex: 1 1 auto;\n\t\tmin-height: 0;\n\t}\n\n\t.toolbar {\n\t\tflex: 0;\n\t}\n\n\t.toolbar-levels {\n\t\tmin-height: 18px;\n\t\tmargin: 1px;\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t}\n\n\t.toolbar-levels > *, .btn-select-all {\n\t\theight: 18px;\n\t\tline-height: 18px;\n\t}\n\n\t.btn-select-all {\n\t\tborder: 1px solid var(--og-accent-color);\n\t\tborder-radius: 0;\t\t\n\t}\n\n\t.toolbar-search {\n\t\tmargin: 0;\n\t\tborder-bottom: 1px solid var(--og-bucket-border-color);\n\t}\n\n\t.toolbar-search og-tree-search {\n\t\tmin-height: 22px;\n\t}\n\n\t.main {\n\t\tflex: 1 1 auto;\n\t\tmin-height: 0;\n\t\toverflow: hidden;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t}\n`;\n\nexport const itemStyle = css`\n\t.item {\n\t\tdisplay: flex;\n\t\tposition: relative;\n\t\twhite-space: nowrap;\n\t}\n\n\t.item.drag {\n\t\tborder-bottom: 2px solid var(--og-text-color);\n\t}\n\n\t.item > div {\n\t\tflex: 0;\n\t\tmargin-left: 2px;\n\t}\n\n\t.item.filtered {\n\t\topacity: 0.5;\n\t}\n\n\t.item div.exp {\n\t\tmin-width: 20px;\n\t\tposition: relative;\n\t}\n\n\t.item div.chck {\n\t\tmin-width: 20px;\n\t\tpadding-left: 2px;\n \t}\n\n\t.item div.chck og-checkbox {\n\t\tdisplay: block;\n\t\tmargin-top: 3px;\n\t}\n\n\t.item div.dir {\n\t\ttext-align: left;\n\t\tmin-width: 20px;\n\t\tpadding-left: 2px;\n\t}\n\n\t.item div.dir og-icon {\n\t\theight: 100%;\n\t}\n\n\t.item div.dir img {\n\t\theight: 18px;\n\t\tmargin-top: 2px;\n\t}\n\n\t.item div.txt {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\tflex: 1;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t.item div.txt og-icon {\n\t\tmin-width: 20px;\n\t\tmargin-left: 2px;\n\t\tdisplay: flex;\n\t\theight: 100%;\n\t}\n\n\t.item div.lvl {\n\t\tvertical-align: middle;\n\t\tline-height: 18px;\n\t\tmargin-right: ${constants.SLIDER_SIZE}px;\n\t}\n\n\t.item div.lvl {\n\t\tdisplay: flex;\n\t\tvertical-align: middle;\n\t\tline-height: 18px;\n\t\tpadding-top: 2px;\n\t}\n\n\t.item div.lvl og-tree-levels {\n\t\theight: 18px;\n\t}\n\n\t.item div.lvl.hideable {\n\t\tdisplay: none;\n\t}\n\n\t.item:hover div.lvl.hideable {\n\t\tdisplay: flex;\n\t}\n\n\t.item:hover div.lvl {\n\t\tdisplay: flex;\n\t}\n`;\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@omegagrid/tree",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.86",
|
|
4
4
|
"license": "UNLICENSED",
|
|
5
5
|
"description": "Universal treeview component",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
"_prepublish": "yarn test && yarn lint"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@omegagrid/core": "^0.10.
|
|
31
|
-
"@omegagrid/localize": "^0.10.
|
|
30
|
+
"@omegagrid/core": "^0.10.86",
|
|
31
|
+
"@omegagrid/localize": "^0.10.86",
|
|
32
32
|
"date-fns": "^3.2.0",
|
|
33
33
|
"lit": "^3.1.1",
|
|
34
34
|
"lit-html": "^3.1.1",
|