@itwin/components-react 3.3.0-dev.9 → 3.3.0
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/CHANGELOG.md +58 -1
- package/lib/cjs/components-react/common/DateUtils.d.ts +12 -2
- package/lib/cjs/components-react/common/DateUtils.d.ts.map +1 -1
- package/lib/cjs/components-react/common/DateUtils.js +14 -4
- package/lib/cjs/components-react/common/DateUtils.js.map +1 -1
- package/lib/cjs/components-react/common/SubscriptionScheduler.d.ts +6 -8
- package/lib/cjs/components-react/common/SubscriptionScheduler.d.ts.map +1 -1
- package/lib/cjs/components-react/common/SubscriptionScheduler.js +18 -52
- package/lib/cjs/components-react/common/SubscriptionScheduler.js.map +1 -1
- package/lib/cjs/components-react/editors/DateTimeEditor.d.ts.map +1 -1
- package/lib/cjs/components-react/editors/DateTimeEditor.js +2 -0
- package/lib/cjs/components-react/editors/DateTimeEditor.js.map +1 -1
- package/lib/cjs/components-react/filter-builder/FilterBuilder.d.ts +36 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilder.d.ts.map +1 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilder.js +118 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilder.js.map +1 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilderRule.d.ts +11 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilderRule.d.ts.map +1 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilderRule.js +76 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilderRule.js.map +1 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilderRule.scss +41 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.d.ts +29 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.d.ts.map +1 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.js +79 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.js.map +1 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.scss +73 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.d.ts +12 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.d.ts.map +1 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.js +47 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.js.map +1 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.d.ts +11 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.d.ts.map +1 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.js +52 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.js.map +1 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.d.ts +11 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.d.ts.map +1 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.js +43 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.js.map +1 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilderState.d.ts +43 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilderState.d.ts.map +1 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilderState.js +152 -0
- package/lib/cjs/components-react/filter-builder/FilterBuilderState.js.map +1 -0
- package/lib/cjs/components-react/filter-builder/Operators.d.ts +27 -0
- package/lib/cjs/components-react/filter-builder/Operators.d.ts.map +1 -0
- package/lib/cjs/components-react/filter-builder/Operators.js +113 -0
- package/lib/cjs/components-react/filter-builder/Operators.js.map +1 -0
- package/lib/cjs/components-react/filter-builder/Types.d.ts +18 -0
- package/lib/cjs/components-react/filter-builder/Types.d.ts.map +1 -0
- package/lib/cjs/components-react/filter-builder/Types.js +9 -0
- package/lib/cjs/components-react/filter-builder/Types.js.map +1 -0
- package/lib/cjs/components-react/toolbar/Overflow.scss +3 -2
- package/lib/cjs/components-react/toolbar/PopupItem.scss +4 -5
- package/lib/cjs/components-react/tree/controlled/TreeHooks.d.ts.map +1 -1
- package/lib/cjs/components-react/tree/controlled/TreeHooks.js +5 -8
- package/lib/cjs/components-react/tree/controlled/TreeHooks.js.map +1 -1
- package/lib/cjs/components-react/tree/controlled/TreeNodeLoader.d.ts +8 -4
- package/lib/cjs/components-react/tree/controlled/TreeNodeLoader.d.ts.map +1 -1
- package/lib/cjs/components-react/tree/controlled/TreeNodeLoader.js +54 -45
- package/lib/cjs/components-react/tree/controlled/TreeNodeLoader.js.map +1 -1
- package/lib/cjs/components-react/tree/controlled/component/TreeNodeRenderer.d.ts +2 -0
- package/lib/cjs/components-react/tree/controlled/component/TreeNodeRenderer.d.ts.map +1 -1
- package/lib/cjs/components-react/tree/controlled/component/TreeNodeRenderer.js +1 -1
- package/lib/cjs/components-react/tree/controlled/component/TreeNodeRenderer.js.map +1 -1
- package/lib/cjs/components-react.d.ts +9 -0
- package/lib/cjs/components-react.d.ts.map +1 -1
- package/lib/cjs/components-react.js +9 -0
- package/lib/cjs/components-react.js.map +1 -1
- package/lib/esm/components-react/common/DateUtils.d.ts +12 -2
- package/lib/esm/components-react/common/DateUtils.d.ts.map +1 -1
- package/lib/esm/components-react/common/DateUtils.js +12 -2
- package/lib/esm/components-react/common/DateUtils.js.map +1 -1
- package/lib/esm/components-react/common/SubscriptionScheduler.d.ts +6 -8
- package/lib/esm/components-react/common/SubscriptionScheduler.d.ts.map +1 -1
- package/lib/esm/components-react/common/SubscriptionScheduler.js +18 -52
- package/lib/esm/components-react/common/SubscriptionScheduler.js.map +1 -1
- package/lib/esm/components-react/editors/DateTimeEditor.d.ts.map +1 -1
- package/lib/esm/components-react/editors/DateTimeEditor.js +2 -0
- package/lib/esm/components-react/editors/DateTimeEditor.js.map +1 -1
- package/lib/esm/components-react/filter-builder/FilterBuilder.d.ts +36 -0
- package/lib/esm/components-react/filter-builder/FilterBuilder.d.ts.map +1 -0
- package/lib/esm/components-react/filter-builder/FilterBuilder.js +94 -0
- package/lib/esm/components-react/filter-builder/FilterBuilder.js.map +1 -0
- package/lib/esm/components-react/filter-builder/FilterBuilderRule.d.ts +11 -0
- package/lib/esm/components-react/filter-builder/FilterBuilderRule.d.ts.map +1 -0
- package/lib/esm/components-react/filter-builder/FilterBuilderRule.js +53 -0
- package/lib/esm/components-react/filter-builder/FilterBuilderRule.js.map +1 -0
- package/lib/esm/components-react/filter-builder/FilterBuilderRule.scss +41 -0
- package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.d.ts +29 -0
- package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.d.ts.map +1 -0
- package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.js +55 -0
- package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.js.map +1 -0
- package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.scss +73 -0
- package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.d.ts +12 -0
- package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.d.ts.map +1 -0
- package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.js +24 -0
- package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.js.map +1 -0
- package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.d.ts +11 -0
- package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.d.ts.map +1 -0
- package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.js +29 -0
- package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.js.map +1 -0
- package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.d.ts +11 -0
- package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.d.ts.map +1 -0
- package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.js +20 -0
- package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.js.map +1 -0
- package/lib/esm/components-react/filter-builder/FilterBuilderState.d.ts +43 -0
- package/lib/esm/components-react/filter-builder/FilterBuilderState.d.ts.map +1 -0
- package/lib/esm/components-react/filter-builder/FilterBuilderState.js +127 -0
- package/lib/esm/components-react/filter-builder/FilterBuilderState.js.map +1 -0
- package/lib/esm/components-react/filter-builder/Operators.d.ts +27 -0
- package/lib/esm/components-react/filter-builder/Operators.d.ts.map +1 -0
- package/lib/esm/components-react/filter-builder/Operators.js +107 -0
- package/lib/esm/components-react/filter-builder/Operators.js.map +1 -0
- package/lib/esm/components-react/filter-builder/Types.d.ts +18 -0
- package/lib/esm/components-react/filter-builder/Types.d.ts.map +1 -0
- package/lib/esm/components-react/filter-builder/Types.js +5 -0
- package/lib/esm/components-react/filter-builder/Types.js.map +1 -0
- package/lib/esm/components-react/toolbar/Overflow.scss +3 -2
- package/lib/esm/components-react/toolbar/PopupItem.scss +4 -5
- package/lib/esm/components-react/tree/controlled/TreeHooks.d.ts.map +1 -1
- package/lib/esm/components-react/tree/controlled/TreeHooks.js +6 -9
- package/lib/esm/components-react/tree/controlled/TreeHooks.js.map +1 -1
- package/lib/esm/components-react/tree/controlled/TreeNodeLoader.d.ts +8 -4
- package/lib/esm/components-react/tree/controlled/TreeNodeLoader.d.ts.map +1 -1
- package/lib/esm/components-react/tree/controlled/TreeNodeLoader.js +53 -44
- package/lib/esm/components-react/tree/controlled/TreeNodeLoader.js.map +1 -1
- package/lib/esm/components-react/tree/controlled/component/TreeNodeRenderer.d.ts +2 -0
- package/lib/esm/components-react/tree/controlled/component/TreeNodeRenderer.d.ts.map +1 -1
- package/lib/esm/components-react/tree/controlled/component/TreeNodeRenderer.js +1 -1
- package/lib/esm/components-react/tree/controlled/component/TreeNodeRenderer.js.map +1 -1
- package/lib/esm/components-react.d.ts +9 -0
- package/lib/esm/components-react.d.ts.map +1 -1
- package/lib/esm/components-react.js +9 -0
- package/lib/esm/components-react.js.map +1 -1
- package/lib/public/locales/en/UiComponents.json +16 -0
- package/package.json +19 -16
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { PropertyDescription, PropertyValue } from "@itwin/appui-abstract";
|
|
2
|
+
import { PropertyFilterRuleGroupOperator, PropertyFilterRuleOperator } from "./Operators";
|
|
3
|
+
/** @alpha */
|
|
4
|
+
export interface PropertyFilterBuilderState {
|
|
5
|
+
rootGroup: PropertyFilterBuilderRuleGroup;
|
|
6
|
+
}
|
|
7
|
+
/** @alpha */
|
|
8
|
+
export declare type PropertyFilterBuilderRuleGroupItem = PropertyFilterBuilderRuleGroup | PropertyFilterBuilderRule;
|
|
9
|
+
/** @alpha */
|
|
10
|
+
export interface PropertyFilterBuilderRuleGroup {
|
|
11
|
+
id: string;
|
|
12
|
+
groupId?: string;
|
|
13
|
+
operator: PropertyFilterRuleGroupOperator;
|
|
14
|
+
items: PropertyFilterBuilderRuleGroupItem[];
|
|
15
|
+
}
|
|
16
|
+
/** @alpha */
|
|
17
|
+
export interface PropertyFilterBuilderRule {
|
|
18
|
+
id: string;
|
|
19
|
+
groupId: string;
|
|
20
|
+
property?: PropertyDescription;
|
|
21
|
+
operator?: PropertyFilterRuleOperator;
|
|
22
|
+
value?: PropertyValue;
|
|
23
|
+
}
|
|
24
|
+
/** @alpha */
|
|
25
|
+
export declare class PropertyFilterBuilderActions {
|
|
26
|
+
private setState;
|
|
27
|
+
constructor(setState: (setter: (prevState: PropertyFilterBuilderState) => PropertyFilterBuilderState) => void);
|
|
28
|
+
private updateState;
|
|
29
|
+
addItem(path: string[], itemType: "RULE_GROUP" | "RULE"): void;
|
|
30
|
+
removeItem(path: string[]): void;
|
|
31
|
+
setRuleGroupOperator(path: string[], operator: PropertyFilterRuleGroupOperator): void;
|
|
32
|
+
setRuleProperty(path: string[], property?: PropertyDescription): void;
|
|
33
|
+
setRuleOperator(path: string[], operator: PropertyFilterRuleOperator): void;
|
|
34
|
+
setRuleValue(path: string[], value: PropertyValue): void;
|
|
35
|
+
}
|
|
36
|
+
/** @alpha */
|
|
37
|
+
export declare function isPropertyFilterBuilderRuleGroup(item: PropertyFilterBuilderRuleGroupItem): item is PropertyFilterBuilderRuleGroup;
|
|
38
|
+
/** @alpha */
|
|
39
|
+
export declare function usePropertyFilterBuilderState(): {
|
|
40
|
+
state: PropertyFilterBuilderState;
|
|
41
|
+
actions: PropertyFilterBuilderActions;
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=FilterBuilderState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterBuilderState.d.ts","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderState.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3E,OAAO,EAAiC,+BAA+B,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzH,aAAa;AACb,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,8BAA8B,CAAC;CAC3C;AAED,aAAa;AACb,oBAAY,kCAAkC,GAAG,8BAA8B,GAAG,yBAAyB,CAAC;AAE5G,aAAa;AACb,MAAM,WAAW,8BAA8B;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,+BAA+B,CAAC;IAC1C,KAAK,EAAE,kCAAkC,EAAE,CAAC;CAC7C;AAED,aAAa;AACb,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,QAAQ,CAAC,EAAE,0BAA0B,CAAC;IACtC,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,aAAa;AACb,qBAAa,4BAA4B;IAC3B,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,0BAA0B,KAAK,0BAA0B,KAAK,IAAI;IAErH,OAAO,CAAC,WAAW;IAIZ,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM;IAUvD,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE;IAoBzB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,+BAA+B;IAS9E,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,mBAAmB;IAU9D,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,0BAA0B;IAWpE,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa;CAQzD;AAED,aAAa;AACb,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,kCAAkC,GAAG,IAAI,IAAI,8BAA8B,CAEjI;AAED,aAAa;AACb,wBAAgB,6BAA6B;;;EAO5C"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import { produce } from "immer";
|
|
6
|
+
import * as React from "react";
|
|
7
|
+
import { Guid } from "@itwin/core-bentley";
|
|
8
|
+
import { isUnaryPropertyFilterOperator, PropertyFilterRuleGroupOperator } from "./Operators";
|
|
9
|
+
/** @alpha */
|
|
10
|
+
export class PropertyFilterBuilderActions {
|
|
11
|
+
constructor(setState) {
|
|
12
|
+
this.setState = setState;
|
|
13
|
+
}
|
|
14
|
+
updateState(updater) {
|
|
15
|
+
this.setState(produce(updater));
|
|
16
|
+
}
|
|
17
|
+
addItem(path, itemType) {
|
|
18
|
+
this.updateState((state) => {
|
|
19
|
+
const parentGroup = findRuleGroup(state.rootGroup, path);
|
|
20
|
+
if (!parentGroup)
|
|
21
|
+
return;
|
|
22
|
+
const item = itemType === "RULE_GROUP" ? createEmptyRuleGroup(parentGroup.id) : createEmptyRule(parentGroup.id);
|
|
23
|
+
parentGroup.items.push(item);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
removeItem(path) {
|
|
27
|
+
function removeItemFromGroup(state, pathToItem) {
|
|
28
|
+
const pathToParent = pathToItem.slice(0, -1);
|
|
29
|
+
const parentGroup = findRuleGroup(state.rootGroup, pathToParent);
|
|
30
|
+
if (!parentGroup)
|
|
31
|
+
return;
|
|
32
|
+
const itemId = pathToItem[pathToItem.length - 1];
|
|
33
|
+
const itemIndex = parentGroup.items.findIndex((item) => item.id === itemId);
|
|
34
|
+
if (itemIndex === -1)
|
|
35
|
+
return;
|
|
36
|
+
parentGroup.items.splice(itemIndex, 1);
|
|
37
|
+
if (parentGroup.items.length === 0)
|
|
38
|
+
removeItemFromGroup(state, pathToParent);
|
|
39
|
+
}
|
|
40
|
+
this.updateState((state) => {
|
|
41
|
+
removeItemFromGroup(state, path);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
setRuleGroupOperator(path, operator) {
|
|
45
|
+
this.updateState((state) => {
|
|
46
|
+
const group = findRuleGroup(state.rootGroup, path);
|
|
47
|
+
if (!group)
|
|
48
|
+
return;
|
|
49
|
+
group.operator = operator;
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
setRuleProperty(path, property) {
|
|
53
|
+
this.updateState((state) => {
|
|
54
|
+
const rule = findRule(state.rootGroup, path);
|
|
55
|
+
if (!rule)
|
|
56
|
+
return;
|
|
57
|
+
rule.property = property;
|
|
58
|
+
rule.value = undefined;
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
setRuleOperator(path, operator) {
|
|
62
|
+
this.updateState((state) => {
|
|
63
|
+
const rule = findRule(state.rootGroup, path);
|
|
64
|
+
if (!rule)
|
|
65
|
+
return;
|
|
66
|
+
if (isUnaryPropertyFilterOperator(operator))
|
|
67
|
+
rule.value = undefined;
|
|
68
|
+
rule.operator = operator;
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
setRuleValue(path, value) {
|
|
72
|
+
this.updateState((state) => {
|
|
73
|
+
const rule = findRule(state.rootGroup, path);
|
|
74
|
+
if (!rule)
|
|
75
|
+
return;
|
|
76
|
+
rule.value = value;
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/** @alpha */
|
|
81
|
+
export function isPropertyFilterBuilderRuleGroup(item) {
|
|
82
|
+
return item.items !== undefined;
|
|
83
|
+
}
|
|
84
|
+
/** @alpha */
|
|
85
|
+
export function usePropertyFilterBuilderState() {
|
|
86
|
+
const [state, setState] = React.useState(() => ({
|
|
87
|
+
rootGroup: createEmptyRuleGroup(),
|
|
88
|
+
}));
|
|
89
|
+
const [actions] = React.useState(() => new PropertyFilterBuilderActions(setState));
|
|
90
|
+
return { state, actions };
|
|
91
|
+
}
|
|
92
|
+
function createEmptyRule(groupId) {
|
|
93
|
+
return {
|
|
94
|
+
id: Guid.createValue(),
|
|
95
|
+
groupId,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
function createEmptyRuleGroup(groupId) {
|
|
99
|
+
const id = Guid.createValue();
|
|
100
|
+
return {
|
|
101
|
+
id,
|
|
102
|
+
groupId,
|
|
103
|
+
operator: PropertyFilterRuleGroupOperator.And,
|
|
104
|
+
items: [createEmptyRule(id)],
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
function findRuleGroup(rootGroup, path) {
|
|
108
|
+
if (path.length === 0)
|
|
109
|
+
return rootGroup;
|
|
110
|
+
const [currentItemId, ...rest] = path;
|
|
111
|
+
const currentItem = rootGroup.items.find((item) => item.id === currentItemId);
|
|
112
|
+
if (!currentItem || !isPropertyFilterBuilderRuleGroup(currentItem))
|
|
113
|
+
return undefined;
|
|
114
|
+
return findRuleGroup(currentItem, rest);
|
|
115
|
+
}
|
|
116
|
+
function findRule(rootGroup, path) {
|
|
117
|
+
if (path.length === 0)
|
|
118
|
+
return undefined;
|
|
119
|
+
const [currentItemId, ...rest] = path;
|
|
120
|
+
const currentItem = rootGroup.items.find((item) => item.id === currentItemId);
|
|
121
|
+
if (!currentItem)
|
|
122
|
+
return undefined;
|
|
123
|
+
if (isPropertyFilterBuilderRuleGroup(currentItem))
|
|
124
|
+
return findRule(currentItem, rest);
|
|
125
|
+
return currentItem;
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=FilterBuilderState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterBuilderState.js","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderState.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { Draft, produce } from \"immer\";\r\nimport * as React from \"react\";\r\nimport { PropertyDescription, PropertyValue } from \"@itwin/appui-abstract\";\r\nimport { Guid } from \"@itwin/core-bentley\";\r\nimport { isUnaryPropertyFilterOperator, PropertyFilterRuleGroupOperator, PropertyFilterRuleOperator } from \"./Operators\";\r\n\r\n/** @alpha */\r\nexport interface PropertyFilterBuilderState {\r\n rootGroup: PropertyFilterBuilderRuleGroup;\r\n}\r\n\r\n/** @alpha */\r\nexport type PropertyFilterBuilderRuleGroupItem = PropertyFilterBuilderRuleGroup | PropertyFilterBuilderRule;\r\n\r\n/** @alpha */\r\nexport interface PropertyFilterBuilderRuleGroup {\r\n id: string;\r\n groupId?: string;\r\n operator: PropertyFilterRuleGroupOperator;\r\n items: PropertyFilterBuilderRuleGroupItem[];\r\n}\r\n\r\n/** @alpha */\r\nexport interface PropertyFilterBuilderRule {\r\n id: string;\r\n groupId: string;\r\n property?: PropertyDescription;\r\n operator?: PropertyFilterRuleOperator;\r\n value?: PropertyValue;\r\n}\r\n\r\n/** @alpha */\r\nexport class PropertyFilterBuilderActions {\r\n constructor(private setState: (setter: (prevState: PropertyFilterBuilderState) => PropertyFilterBuilderState) => void) {}\r\n\r\n private updateState(updater: (state: Draft<PropertyFilterBuilderState>) => void) {\r\n this.setState(produce(updater));\r\n }\r\n\r\n public addItem(path: string[], itemType: \"RULE_GROUP\" | \"RULE\") {\r\n this.updateState((state) => {\r\n const parentGroup = findRuleGroup(state.rootGroup, path);\r\n if (!parentGroup)\r\n return;\r\n const item = itemType === \"RULE_GROUP\" ? createEmptyRuleGroup(parentGroup.id) : createEmptyRule(parentGroup.id);\r\n parentGroup.items.push(item);\r\n });\r\n }\r\n\r\n public removeItem(path: string[]) {\r\n function removeItemFromGroup(state: Draft<PropertyFilterBuilderState>, pathToItem: string[]) {\r\n const pathToParent = pathToItem.slice(0, -1);\r\n const parentGroup = findRuleGroup(state.rootGroup, pathToParent);\r\n if (!parentGroup)\r\n return;\r\n const itemId = pathToItem[pathToItem.length - 1];\r\n const itemIndex = parentGroup.items.findIndex((item) => item.id === itemId);\r\n if (itemIndex === -1)\r\n return;\r\n parentGroup.items.splice(itemIndex, 1);\r\n if (parentGroup.items.length === 0)\r\n removeItemFromGroup(state, pathToParent);\r\n }\r\n\r\n this.updateState((state) => {\r\n removeItemFromGroup(state, path);\r\n });\r\n }\r\n\r\n public setRuleGroupOperator(path: string[], operator: PropertyFilterRuleGroupOperator) {\r\n this.updateState((state) => {\r\n const group = findRuleGroup(state.rootGroup, path);\r\n if (!group)\r\n return;\r\n group.operator = operator;\r\n });\r\n }\r\n\r\n public setRuleProperty(path: string[], property?: PropertyDescription) {\r\n this.updateState((state) => {\r\n const rule = findRule(state.rootGroup, path);\r\n if (!rule)\r\n return;\r\n rule.property = property;\r\n rule.value = undefined;\r\n });\r\n }\r\n\r\n public setRuleOperator(path: string[], operator: PropertyFilterRuleOperator) {\r\n this.updateState((state) => {\r\n const rule = findRule(state.rootGroup, path);\r\n if (!rule)\r\n return;\r\n if (isUnaryPropertyFilterOperator(operator))\r\n rule.value = undefined;\r\n rule.operator = operator;\r\n });\r\n }\r\n\r\n public setRuleValue(path: string[], value: PropertyValue) {\r\n this.updateState((state) => {\r\n const rule = findRule(state.rootGroup, path);\r\n if (!rule)\r\n return;\r\n rule.value = value;\r\n });\r\n }\r\n}\r\n\r\n/** @alpha */\r\nexport function isPropertyFilterBuilderRuleGroup(item: PropertyFilterBuilderRuleGroupItem): item is PropertyFilterBuilderRuleGroup {\r\n return (item as any).items !== undefined;\r\n}\r\n\r\n/** @alpha */\r\nexport function usePropertyFilterBuilderState() {\r\n const [state, setState] = React.useState<PropertyFilterBuilderState>(() => ({\r\n rootGroup: createEmptyRuleGroup(),\r\n }));\r\n const [actions] = React.useState(() => new PropertyFilterBuilderActions(setState));\r\n\r\n return { state, actions };\r\n}\r\n\r\nfunction createEmptyRule(groupId: string): PropertyFilterBuilderRule {\r\n return {\r\n id: Guid.createValue(),\r\n groupId,\r\n };\r\n}\r\n\r\nfunction createEmptyRuleGroup(groupId?: string): PropertyFilterBuilderRuleGroup {\r\n const id = Guid.createValue();\r\n return {\r\n id,\r\n groupId,\r\n operator: PropertyFilterRuleGroupOperator.And,\r\n items: [createEmptyRule(id)],\r\n };\r\n}\r\n\r\nfunction findRuleGroup(rootGroup: PropertyFilterBuilderRuleGroup, path: string[]): PropertyFilterBuilderRuleGroup | undefined {\r\n if (path.length === 0)\r\n return rootGroup;\r\n\r\n const [currentItemId, ...rest] = path;\r\n const currentItem = rootGroup.items.find((item) => item.id === currentItemId);\r\n if (!currentItem || !isPropertyFilterBuilderRuleGroup(currentItem))\r\n return undefined;\r\n\r\n return findRuleGroup(currentItem, rest);\r\n}\r\n\r\nfunction findRule(rootGroup: PropertyFilterBuilderRuleGroup, path: string[]): PropertyFilterBuilderRule | undefined {\r\n if (path.length === 0)\r\n return undefined;\r\n\r\n const [currentItemId, ...rest] = path;\r\n const currentItem = rootGroup.items.find((item) => item.id === currentItemId);\r\n if (!currentItem)\r\n return undefined;\r\n\r\n if (isPropertyFilterBuilderRuleGroup(currentItem))\r\n return findRule(currentItem, rest);\r\n\r\n return currentItem;\r\n}\r\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { PropertyDescription } from "@itwin/appui-abstract";
|
|
2
|
+
/** @alpha */
|
|
3
|
+
export declare enum PropertyFilterRuleGroupOperator {
|
|
4
|
+
And = 0,
|
|
5
|
+
Or = 1
|
|
6
|
+
}
|
|
7
|
+
/** @alpha */
|
|
8
|
+
export declare enum PropertyFilterRuleOperator {
|
|
9
|
+
IsTrue = 0,
|
|
10
|
+
IsFalse = 1,
|
|
11
|
+
IsEqual = 2,
|
|
12
|
+
IsNotEqual = 3,
|
|
13
|
+
Greater = 4,
|
|
14
|
+
GreaterOrEqual = 5,
|
|
15
|
+
Less = 6,
|
|
16
|
+
LessOrEqual = 7,
|
|
17
|
+
Like = 8,
|
|
18
|
+
IsNull = 9,
|
|
19
|
+
IsNotNull = 10
|
|
20
|
+
}
|
|
21
|
+
/** @alpha */
|
|
22
|
+
export declare function getPropertyFilterOperators(property: PropertyDescription): PropertyFilterRuleOperator[];
|
|
23
|
+
/** @alpha */
|
|
24
|
+
export declare function getPropertyFilterOperatorLabel(operator: PropertyFilterRuleOperator): string;
|
|
25
|
+
/** @alpha */
|
|
26
|
+
export declare function isUnaryPropertyFilterOperator(operator: PropertyFilterRuleOperator): boolean;
|
|
27
|
+
//# sourceMappingURL=Operators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Operators.d.ts","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/Operators.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,mBAAmB,EAAqB,MAAM,uBAAuB,CAAC;AAG/E,aAAa;AACb,oBAAY,+BAA+B;IACzC,GAAG,IAAA;IACH,EAAE,IAAA;CACH;AAED,aAAa;AACb,oBAAY,0BAA0B;IACpC,MAAM,IAAA;IACN,OAAO,IAAA;IAEP,OAAO,IAAA;IACP,UAAU,IAAA;IAEV,OAAO,IAAA;IACP,cAAc,IAAA;IACd,IAAI,IAAA;IACJ,WAAW,IAAA;IAEX,IAAI,IAAA;IAEJ,MAAM,IAAA;IACN,SAAS,KAAA;CACV;AAED,aAAa;AACb,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,mBAAmB,gCA2CvE;AAGD,aAAa;AACb,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,0BAA0B,UAyBlF;AAED,aAAa;AACb,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,0BAA0B,WASjF"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import { StandardTypeNames } from "@itwin/appui-abstract";
|
|
6
|
+
import { UiComponents } from "../UiComponents";
|
|
7
|
+
/** @alpha */
|
|
8
|
+
export var PropertyFilterRuleGroupOperator;
|
|
9
|
+
(function (PropertyFilterRuleGroupOperator) {
|
|
10
|
+
PropertyFilterRuleGroupOperator[PropertyFilterRuleGroupOperator["And"] = 0] = "And";
|
|
11
|
+
PropertyFilterRuleGroupOperator[PropertyFilterRuleGroupOperator["Or"] = 1] = "Or";
|
|
12
|
+
})(PropertyFilterRuleGroupOperator || (PropertyFilterRuleGroupOperator = {}));
|
|
13
|
+
/** @alpha */
|
|
14
|
+
export var PropertyFilterRuleOperator;
|
|
15
|
+
(function (PropertyFilterRuleOperator) {
|
|
16
|
+
PropertyFilterRuleOperator[PropertyFilterRuleOperator["IsTrue"] = 0] = "IsTrue";
|
|
17
|
+
PropertyFilterRuleOperator[PropertyFilterRuleOperator["IsFalse"] = 1] = "IsFalse";
|
|
18
|
+
PropertyFilterRuleOperator[PropertyFilterRuleOperator["IsEqual"] = 2] = "IsEqual";
|
|
19
|
+
PropertyFilterRuleOperator[PropertyFilterRuleOperator["IsNotEqual"] = 3] = "IsNotEqual";
|
|
20
|
+
PropertyFilterRuleOperator[PropertyFilterRuleOperator["Greater"] = 4] = "Greater";
|
|
21
|
+
PropertyFilterRuleOperator[PropertyFilterRuleOperator["GreaterOrEqual"] = 5] = "GreaterOrEqual";
|
|
22
|
+
PropertyFilterRuleOperator[PropertyFilterRuleOperator["Less"] = 6] = "Less";
|
|
23
|
+
PropertyFilterRuleOperator[PropertyFilterRuleOperator["LessOrEqual"] = 7] = "LessOrEqual";
|
|
24
|
+
PropertyFilterRuleOperator[PropertyFilterRuleOperator["Like"] = 8] = "Like";
|
|
25
|
+
PropertyFilterRuleOperator[PropertyFilterRuleOperator["IsNull"] = 9] = "IsNull";
|
|
26
|
+
PropertyFilterRuleOperator[PropertyFilterRuleOperator["IsNotNull"] = 10] = "IsNotNull";
|
|
27
|
+
})(PropertyFilterRuleOperator || (PropertyFilterRuleOperator = {}));
|
|
28
|
+
/** @alpha */
|
|
29
|
+
export function getPropertyFilterOperators(property) {
|
|
30
|
+
const typename = property.typename;
|
|
31
|
+
if (typename === StandardTypeNames.Bool || typename === StandardTypeNames.Boolean) {
|
|
32
|
+
return [
|
|
33
|
+
PropertyFilterRuleOperator.IsTrue,
|
|
34
|
+
PropertyFilterRuleOperator.IsFalse,
|
|
35
|
+
];
|
|
36
|
+
}
|
|
37
|
+
const operators = [
|
|
38
|
+
PropertyFilterRuleOperator.IsEqual,
|
|
39
|
+
PropertyFilterRuleOperator.IsNotEqual,
|
|
40
|
+
PropertyFilterRuleOperator.IsNull,
|
|
41
|
+
PropertyFilterRuleOperator.IsNotNull,
|
|
42
|
+
];
|
|
43
|
+
if (typename === StandardTypeNames.Number
|
|
44
|
+
|| typename === StandardTypeNames.Int
|
|
45
|
+
|| typename === StandardTypeNames.Integer
|
|
46
|
+
|| typename === StandardTypeNames.Double
|
|
47
|
+
|| typename === StandardTypeNames.Float
|
|
48
|
+
|| typename === StandardTypeNames.Hex
|
|
49
|
+
|| typename === StandardTypeNames.Hexadecimal
|
|
50
|
+
|| typename === StandardTypeNames.ShortDate
|
|
51
|
+
|| typename === StandardTypeNames.DateTime) {
|
|
52
|
+
return [
|
|
53
|
+
...operators,
|
|
54
|
+
PropertyFilterRuleOperator.Greater,
|
|
55
|
+
PropertyFilterRuleOperator.GreaterOrEqual,
|
|
56
|
+
PropertyFilterRuleOperator.Less,
|
|
57
|
+
PropertyFilterRuleOperator.LessOrEqual,
|
|
58
|
+
];
|
|
59
|
+
}
|
|
60
|
+
if (typename === StandardTypeNames.String || typename === StandardTypeNames.Text) {
|
|
61
|
+
return [
|
|
62
|
+
...operators,
|
|
63
|
+
PropertyFilterRuleOperator.Like,
|
|
64
|
+
];
|
|
65
|
+
}
|
|
66
|
+
return operators;
|
|
67
|
+
}
|
|
68
|
+
/* istanbul ignore next */
|
|
69
|
+
/** @alpha */
|
|
70
|
+
export function getPropertyFilterOperatorLabel(operator) {
|
|
71
|
+
switch (operator) {
|
|
72
|
+
case PropertyFilterRuleOperator.IsTrue:
|
|
73
|
+
return UiComponents.translate("filterBuilder.operators.isTrue");
|
|
74
|
+
case PropertyFilterRuleOperator.IsFalse:
|
|
75
|
+
return UiComponents.translate("filterBuilder.operators.isFalse");
|
|
76
|
+
case PropertyFilterRuleOperator.IsEqual:
|
|
77
|
+
return UiComponents.translate("filterBuilder.operators.equal");
|
|
78
|
+
case PropertyFilterRuleOperator.IsNotEqual:
|
|
79
|
+
return UiComponents.translate("filterBuilder.operators.notEqual");
|
|
80
|
+
case PropertyFilterRuleOperator.Greater:
|
|
81
|
+
return ">";
|
|
82
|
+
case PropertyFilterRuleOperator.GreaterOrEqual:
|
|
83
|
+
return ">=";
|
|
84
|
+
case PropertyFilterRuleOperator.Less:
|
|
85
|
+
return "<";
|
|
86
|
+
case PropertyFilterRuleOperator.LessOrEqual:
|
|
87
|
+
return "<=";
|
|
88
|
+
case PropertyFilterRuleOperator.Like:
|
|
89
|
+
return UiComponents.translate("filterBuilder.operators.contains");
|
|
90
|
+
case PropertyFilterRuleOperator.IsNull:
|
|
91
|
+
return UiComponents.translate("filterBuilder.operators.isNull");
|
|
92
|
+
case PropertyFilterRuleOperator.IsNotNull:
|
|
93
|
+
return UiComponents.translate("filterBuilder.operators.isNotNull");
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/** @alpha */
|
|
97
|
+
export function isUnaryPropertyFilterOperator(operator) {
|
|
98
|
+
switch (operator) {
|
|
99
|
+
case PropertyFilterRuleOperator.IsTrue:
|
|
100
|
+
case PropertyFilterRuleOperator.IsFalse:
|
|
101
|
+
case PropertyFilterRuleOperator.IsNull:
|
|
102
|
+
case PropertyFilterRuleOperator.IsNotNull:
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=Operators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Operators.js","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/Operators.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { PropertyDescription, StandardTypeNames } from \"@itwin/appui-abstract\";\r\nimport { UiComponents } from \"../UiComponents\";\r\n\r\n/** @alpha */\r\nexport enum PropertyFilterRuleGroupOperator {\r\n And,\r\n Or,\r\n}\r\n\r\n/** @alpha */\r\nexport enum PropertyFilterRuleOperator {\r\n IsTrue,\r\n IsFalse,\r\n\r\n IsEqual,\r\n IsNotEqual,\r\n\r\n Greater,\r\n GreaterOrEqual,\r\n Less,\r\n LessOrEqual,\r\n\r\n Like,\r\n\r\n IsNull,\r\n IsNotNull,\r\n}\r\n\r\n/** @alpha */\r\nexport function getPropertyFilterOperators(property: PropertyDescription) {\r\n const typename = property.typename;\r\n\r\n if (typename === StandardTypeNames.Bool || typename === StandardTypeNames.Boolean) {\r\n return [\r\n PropertyFilterRuleOperator.IsTrue,\r\n PropertyFilterRuleOperator.IsFalse,\r\n ];\r\n }\r\n\r\n const operators = [\r\n PropertyFilterRuleOperator.IsEqual,\r\n PropertyFilterRuleOperator.IsNotEqual,\r\n PropertyFilterRuleOperator.IsNull,\r\n PropertyFilterRuleOperator.IsNotNull,\r\n ];\r\n\r\n if (typename === StandardTypeNames.Number\r\n || typename === StandardTypeNames.Int\r\n || typename === StandardTypeNames.Integer\r\n || typename === StandardTypeNames.Double\r\n || typename === StandardTypeNames.Float\r\n || typename === StandardTypeNames.Hex\r\n || typename === StandardTypeNames.Hexadecimal\r\n || typename === StandardTypeNames.ShortDate\r\n || typename === StandardTypeNames.DateTime) {\r\n return [\r\n ...operators,\r\n PropertyFilterRuleOperator.Greater,\r\n PropertyFilterRuleOperator.GreaterOrEqual,\r\n PropertyFilterRuleOperator.Less,\r\n PropertyFilterRuleOperator.LessOrEqual,\r\n ];\r\n }\r\n\r\n if (typename === StandardTypeNames.String || typename === StandardTypeNames.Text) {\r\n return [\r\n ...operators,\r\n PropertyFilterRuleOperator.Like,\r\n ];\r\n }\r\n\r\n return operators;\r\n}\r\n\r\n/* istanbul ignore next */\r\n/** @alpha */\r\nexport function getPropertyFilterOperatorLabel(operator: PropertyFilterRuleOperator) {\r\n switch(operator) {\r\n case PropertyFilterRuleOperator.IsTrue:\r\n return UiComponents.translate(\"filterBuilder.operators.isTrue\");\r\n case PropertyFilterRuleOperator.IsFalse:\r\n return UiComponents.translate(\"filterBuilder.operators.isFalse\");\r\n case PropertyFilterRuleOperator.IsEqual:\r\n return UiComponents.translate(\"filterBuilder.operators.equal\");\r\n case PropertyFilterRuleOperator.IsNotEqual:\r\n return UiComponents.translate(\"filterBuilder.operators.notEqual\");\r\n case PropertyFilterRuleOperator.Greater:\r\n return \">\";\r\n case PropertyFilterRuleOperator.GreaterOrEqual:\r\n return \">=\";\r\n case PropertyFilterRuleOperator.Less:\r\n return \"<\";\r\n case PropertyFilterRuleOperator.LessOrEqual:\r\n return \"<=\";\r\n case PropertyFilterRuleOperator.Like:\r\n return UiComponents.translate(\"filterBuilder.operators.contains\");\r\n case PropertyFilterRuleOperator.IsNull:\r\n return UiComponents.translate(\"filterBuilder.operators.isNull\");\r\n case PropertyFilterRuleOperator.IsNotNull:\r\n return UiComponents.translate(\"filterBuilder.operators.isNotNull\");\r\n }\r\n}\r\n\r\n/** @alpha */\r\nexport function isUnaryPropertyFilterOperator(operator: PropertyFilterRuleOperator) {\r\n switch (operator) {\r\n case PropertyFilterRuleOperator.IsTrue:\r\n case PropertyFilterRuleOperator.IsFalse:\r\n case PropertyFilterRuleOperator.IsNull:\r\n case PropertyFilterRuleOperator.IsNotNull:\r\n return true;\r\n }\r\n return false;\r\n}\r\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { PropertyDescription, PropertyValue } from "@itwin/appui-abstract";
|
|
2
|
+
import { PropertyFilterRuleGroupOperator, PropertyFilterRuleOperator } from "./Operators";
|
|
3
|
+
/** @alpha */
|
|
4
|
+
export declare type PropertyFilter = PropertyFilterRule | PropertyFilterRuleGroup;
|
|
5
|
+
/** @alpha */
|
|
6
|
+
export interface PropertyFilterRuleGroup {
|
|
7
|
+
operator: PropertyFilterRuleGroupOperator;
|
|
8
|
+
rules: Array<PropertyFilter>;
|
|
9
|
+
}
|
|
10
|
+
/** @alpha */
|
|
11
|
+
export interface PropertyFilterRule {
|
|
12
|
+
property: PropertyDescription;
|
|
13
|
+
operator: PropertyFilterRuleOperator;
|
|
14
|
+
value?: PropertyValue;
|
|
15
|
+
}
|
|
16
|
+
/** @alpha */
|
|
17
|
+
export declare function isPropertyFilterRuleGroup(filter: PropertyFilter): filter is PropertyFilterRuleGroup;
|
|
18
|
+
//# sourceMappingURL=Types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Types.d.ts","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/Types.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,+BAA+B,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAE1F,aAAa;AACb,oBAAY,cAAc,GAAG,kBAAkB,GAAG,uBAAuB,CAAC;AAE1E,aAAa;AACb,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,+BAA+B,CAAC;IAC1C,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;CAC9B;AAED,aAAa;AACb,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,QAAQ,EAAE,0BAA0B,CAAC;IACrC,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,aAAa;AACb,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,IAAI,uBAAuB,CAEnG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Types.js","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/Types.ts"],"names":[],"mappings":"AAuBA,aAAa;AACb,MAAM,UAAU,yBAAyB,CAAC,MAAsB;IAC9D,OAAQ,MAAc,CAAC,KAAK,KAAK,SAAS,CAAC;AAC7C,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { PropertyDescription, PropertyValue } from \"@itwin/appui-abstract\";\r\nimport { PropertyFilterRuleGroupOperator, PropertyFilterRuleOperator } from \"./Operators\";\r\n\r\n/** @alpha */\r\nexport type PropertyFilter = PropertyFilterRule | PropertyFilterRuleGroup;\r\n\r\n/** @alpha */\r\nexport interface PropertyFilterRuleGroup {\r\n operator: PropertyFilterRuleGroupOperator;\r\n rules: Array<PropertyFilter>;\r\n}\r\n\r\n/** @alpha */\r\nexport interface PropertyFilterRule {\r\n property: PropertyDescription;\r\n operator: PropertyFilterRuleOperator;\r\n value?: PropertyValue;\r\n}\r\n\r\n/** @alpha */\r\nexport function isPropertyFilterRuleGroup(filter: PropertyFilter): filter is PropertyFilterRuleGroup {\r\n return (filter as any).rules !== undefined;\r\n}\r\n"]}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
5
|
@import "~@itwin/core-react/lib/cjs/core-react/z-index";
|
|
6
|
+
@import "~@itwin/itwinui-css/scss/style/speed";
|
|
6
7
|
@import "variables";
|
|
7
8
|
|
|
8
9
|
.components-toolbar-button-item.components-ellipsis-icon {
|
|
@@ -47,10 +48,10 @@
|
|
|
47
48
|
|
|
48
49
|
@include uicore-z-index(toolbar-panels);
|
|
49
50
|
|
|
50
|
-
transition: visibility
|
|
51
|
+
transition: visibility $iui-speed ease, opacity $iui-speed ease;
|
|
51
52
|
|
|
52
53
|
&.nz-hidden {
|
|
53
54
|
opacity: 0;
|
|
54
55
|
visibility: hidden;
|
|
55
56
|
}
|
|
56
|
-
}
|
|
57
|
+
}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
5
|
@import "~@itwin/core-react/lib/cjs/core-react/z-index";
|
|
6
6
|
@import "~@itwin/core-react/lib/cjs/core-react/geometry";
|
|
7
|
+
@import "~@itwin/itwinui-css/scss/style/speed";
|
|
7
8
|
@import "variables";
|
|
8
9
|
|
|
9
10
|
.components-toolbar-expandable-button {
|
|
@@ -29,11 +30,9 @@
|
|
|
29
30
|
filter: $arrow-shadow;
|
|
30
31
|
pointer-events: none;
|
|
31
32
|
|
|
32
|
-
@include triangle-bottom-right(
|
|
33
|
-
$width: $triangle-width,
|
|
33
|
+
@include triangle-bottom-right($width: $triangle-width,
|
|
34
34
|
$height: $triangle-height,
|
|
35
|
-
$color: $buic-icon-color
|
|
36
|
-
);
|
|
35
|
+
$color: $buic-icon-color );
|
|
37
36
|
}
|
|
38
37
|
|
|
39
38
|
&:active>.components-triangle {
|
|
@@ -78,7 +77,7 @@
|
|
|
78
77
|
border-style: solid;
|
|
79
78
|
border-radius: 3px;
|
|
80
79
|
|
|
81
|
-
transition: visibility
|
|
80
|
+
transition: visibility $iui-speed ease, opacity $iui-speed ease;
|
|
82
81
|
|
|
83
82
|
&.nz-hidden {
|
|
84
83
|
opacity: 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeHooks.d.ts","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeHooks.ts"],"names":[],"mappings":"AAIA;;GAEG;
|
|
1
|
+
{"version":3,"file":"TreeHooks.d.ts","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeHooks.ts"],"names":[],"mappings":"AAIA;;GAEG;AAKH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvE;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,eAAe,GAAG,SAAS,CAMpE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,SAAS,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,iCAGlI;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,aAAa,SAAS,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,sCAGzJ;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,gBAAgB,mBAGhE;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,cAAc,SAAS,gBAAgB,EAAE,eAAe,EAAE,CAAC,MAAM,cAAc,CAAC,GAAG,sBAAsB,oBAO7I"}
|
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
/** @packageDocumentation
|
|
6
6
|
* @module Tree
|
|
7
7
|
*/
|
|
8
|
-
import { useCallback, useEffect, useMemo
|
|
8
|
+
import { useCallback, useEffect, useMemo } from "react";
|
|
9
9
|
import { useDisposable } from "@itwin/core-react";
|
|
10
|
+
import { useRerender } from "../../common/UseRerender";
|
|
10
11
|
import { TreeEventHandler } from "./TreeEventHandler";
|
|
11
12
|
import { TreeModelSource } from "./TreeModelSource";
|
|
12
13
|
import { PagedTreeNodeLoader, TreeNodeLoader } from "./TreeNodeLoader";
|
|
@@ -17,15 +18,11 @@ import { PagedTreeNodeLoader, TreeNodeLoader } from "./TreeNodeLoader";
|
|
|
17
18
|
* @public
|
|
18
19
|
*/
|
|
19
20
|
export function useTreeModel(modelSource) {
|
|
20
|
-
const
|
|
21
|
+
const { rerender } = useRerender();
|
|
21
22
|
useEffect(() => {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
onModelChanged();
|
|
26
|
-
return modelSource.onModelChanged.addListener(onModelChanged);
|
|
27
|
-
}, [modelSource]);
|
|
28
|
-
return model;
|
|
23
|
+
return modelSource.onModelChanged.addListener(rerender);
|
|
24
|
+
}, [modelSource, rerender]);
|
|
25
|
+
return modelSource.getModel();
|
|
29
26
|
}
|
|
30
27
|
/**
|
|
31
28
|
* Custom hook which creates a nodes' loader using the supplied data provider and model source. The
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeHooks.js","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeHooks.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"TreeHooks.js","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeHooks.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAA0B,MAAM,oBAAoB,CAAC;AAE9E,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvE;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,WAA4B;IACvD,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;IACnC,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC1D,CAAC,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC5B,OAAO,WAAW,CAAC,QAAQ,EAAE,CAAC;AAChC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAyC,YAA2B,EAAE,WAA4B;IACjI,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,cAAc,CAAC,YAAY,EAAE,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC;IACnH,OAAO,aAAa,CAAC,YAAY,CAAC,CAAC;AACrC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAyC,YAA2B,EAAE,QAAgB,EAAE,WAA4B;IACxJ,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,mBAAmB,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC5I,OAAO,aAAa,CAAC,YAAY,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,YAA8B;IAC/D,0HAA0H;IAC1H,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,eAAe,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,kDAAkD;AACjH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAA0C,eAAgE;IAC5I,MAAM,OAAO,GAAG,WAAW,CAAC,GAAqB,EAAE;QACjD,IAAI,OAAO,eAAe,KAAK,UAAU;YACvC,OAAO,eAAe,EAAE,CAAC;QAC3B,OAAO,IAAI,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAC/C,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IACtB,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tree\r\n */\r\n\r\nimport { useCallback, useEffect, useMemo } from \"react\";\r\nimport { useDisposable } from \"@itwin/core-react\";\r\nimport { useRerender } from \"../../common/UseRerender\";\r\nimport { TreeDataProvider } from \"../TreeDataProvider\";\r\nimport { TreeEventHandler, TreeEventHandlerParams } from \"./TreeEventHandler\";\r\nimport { TreeModel } from \"./TreeModel\";\r\nimport { TreeModelSource } from \"./TreeModelSource\";\r\nimport { PagedTreeNodeLoader, TreeNodeLoader } from \"./TreeNodeLoader\";\r\n\r\n/**\r\n * React hook that returns an immutable `TreeModel` whenever it changes in the given\r\n * `TreeModelSource`.\r\n *\r\n * @public\r\n */\r\nexport function useTreeModel(modelSource: TreeModelSource): TreeModel {\r\n const { rerender } = useRerender();\r\n useEffect(() => {\r\n return modelSource.onModelChanged.addListener(rerender);\r\n }, [modelSource, rerender]);\r\n return modelSource.getModel();\r\n}\r\n\r\n/**\r\n * Custom hook which creates a nodes' loader using the supplied data provider and model source. The\r\n * loader pulls nodes from the data provider and puts them into the model source.\r\n *\r\n * @public\r\n */\r\nexport function useTreeNodeLoader<TDataProvider extends TreeDataProvider>(dataProvider: TDataProvider, modelSource: TreeModelSource) {\r\n const createLoader = useCallback(() => new TreeNodeLoader(dataProvider, modelSource), [dataProvider, modelSource]);\r\n return useDisposable(createLoader);\r\n}\r\n\r\n/**\r\n * Custom hook which creates a paging nodes' loader using the supplied data provider and model source. The loader pulls\r\n * nodes from the data provider and puts them into the model source.\r\n * @public\r\n */\r\nexport function usePagedTreeNodeLoader<TDataProvider extends TreeDataProvider>(dataProvider: TDataProvider, pageSize: number, modelSource: TreeModelSource) {\r\n const createLoader = useCallback(() => new PagedTreeNodeLoader(dataProvider, modelSource, pageSize), [dataProvider, modelSource, pageSize]);\r\n return useDisposable(createLoader);\r\n}\r\n\r\n/**\r\n * Custom hook which creates a `TreeModelSource`.\r\n *\r\n * @note The model source has no direct dependency on the data provider, but we want a fresh model\r\n * source whenever the data provider changes - that's the reason the hook takes a data provider.\r\n *\r\n * @public\r\n */\r\nexport function useTreeModelSource(dataProvider: TreeDataProvider) {\r\n // need to create new model source every time data provider changes although it does not need data provider to be created.\r\n return useMemo(() => new TreeModelSource(), [dataProvider]); // eslint-disable-line react-hooks/exhaustive-deps\r\n}\r\n\r\n/**\r\n * Custom hook which creates and takes care of disposing a TreeEventsHandler. The input is either a factory method\r\n * for a custom `TreeEventHandler` implementation or parameters for the default implementation.\r\n *\r\n * @note Caller must ensure `factoryOrParams` changes only when a new handler needs to be created. `useCallback` or `useMemo` can\r\n * be used for that purpose based on whether the input is a factory function or params object.\r\n *\r\n * @public\r\n */\r\nexport function useTreeEventsHandler<TEventsHandler extends TreeEventHandler>(factoryOrParams: (() => TEventsHandler) | TreeEventHandlerParams) {\r\n const factory = useCallback((): TreeEventHandler => {\r\n if (typeof factoryOrParams === \"function\")\r\n return factoryOrParams();\r\n return new TreeEventHandler(factoryOrParams);\r\n }, [factoryOrParams]);\r\n return useDisposable(factory);\r\n}\r\n"]}
|
|
@@ -71,6 +71,7 @@ export declare abstract class AbstractTreeNodeLoaderWithProvider<TDataProvider e
|
|
|
71
71
|
export declare class TreeNodeLoader<TDataProvider extends TreeDataProvider> extends AbstractTreeNodeLoaderWithProvider<TDataProvider> implements IDisposable {
|
|
72
72
|
private _treeDataSource;
|
|
73
73
|
private _activeRequests;
|
|
74
|
+
private _scheduler;
|
|
74
75
|
constructor(dataProvider: TDataProvider, modelSource: TreeModelSource);
|
|
75
76
|
/** Disposes data source */
|
|
76
77
|
dispose(): void;
|
|
@@ -78,16 +79,18 @@ export declare class TreeNodeLoader<TDataProvider extends TreeDataProvider> exte
|
|
|
78
79
|
* Schedules to load children of node and returns an Observable.
|
|
79
80
|
* @note It does not start loading node until '.subscribe()' is called on returned Observable.
|
|
80
81
|
*/
|
|
81
|
-
|
|
82
|
-
|
|
82
|
+
loadNode(parent: TreeModelNode | TreeModelRootNode, _childIndex?: number): Observable<TreeNodeLoadResult>;
|
|
83
|
+
protected load(): Observable<LoadedNodeHierarchy>;
|
|
83
84
|
}
|
|
84
85
|
/**
|
|
85
86
|
* Default paged tree node loader with `TreeDataProvider` implementation.
|
|
86
87
|
* @public
|
|
87
88
|
*/
|
|
88
89
|
export declare class PagedTreeNodeLoader<TDataProvider extends TreeDataProvider> extends AbstractTreeNodeLoaderWithProvider<TDataProvider> implements IDisposable {
|
|
89
|
-
private
|
|
90
|
+
private _treeDataSource;
|
|
90
91
|
private _pageSize;
|
|
92
|
+
private _activePageRequests;
|
|
93
|
+
private _scheduler;
|
|
91
94
|
constructor(dataProvider: TDataProvider, modelSource: TreeModelSource, pageSize: number);
|
|
92
95
|
/** Disposes data source */
|
|
93
96
|
dispose(): void;
|
|
@@ -97,7 +100,8 @@ export declare class PagedTreeNodeLoader<TDataProvider extends TreeDataProvider>
|
|
|
97
100
|
* Schedules to load one page of node children and returns an Observable.
|
|
98
101
|
* @note It does not start loading node page until '.subscribe()' is called on returned Observable.
|
|
99
102
|
*/
|
|
100
|
-
|
|
103
|
+
loadNode(parent: TreeModelNode | TreeModelRootNode, childIndex: number): Observable<TreeNodeLoadResult>;
|
|
104
|
+
protected load(): Observable<LoadedNodeHierarchy>;
|
|
101
105
|
}
|
|
102
106
|
/**
|
|
103
107
|
* Data structure that describes hierarchy loaded for parent node.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeNodeLoader.d.ts","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeNodeLoader.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAWxE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAI3D,OAAO,EAEL,uBAAuB,EAAE,gBAAgB,EAAuB,YAAY,EAC7E,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAoB,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAqC,aAAa,EAAsB,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACxI,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,YAAY,EAAE,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;CAC3G;AAED;;;GAGG;AACH,MAAM,WAAW,2BAA2B,CAAC,aAAa,SAAS,gBAAgB,CAAE,SAAQ,eAAe;IAC1G,qDAAqD;IACrD,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC;CACtC;AAED;;;GAGG;AACH,8BAAsB,sBAAuB,YAAW,eAAe;IACrE,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,cAAc,CAAmD;IAEzE,SAAS,aAAa,WAAW,EAAE,eAAe;IAIlD,IAAW,WAAW,oBAAoC;IAE1D,+CAA+C;IACxC,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,UAAU,CAAC,kBAAkB,CAAC;IAU9G;;;;;OAKG;IACH,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE,mBAAmB,GAAG,IAAI;IAIjE,wFAAwF;IACxF,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,GAAG,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,UAAU,CAAC,mBAAmB,CAAC;CACxH;AAED;;;GAGG;AACH,8BAAsB,kCAAkC,CAAC,aAAa,SAAS,gBAAgB,CAAE,SAAQ,sBAAuB,YAAW,2BAA2B,CAAC,aAAa,CAAC;IACnL,OAAO,CAAC,aAAa,CAAgB;IAErC,SAAS,aAAa,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa;IAK/E,IAAW,YAAY,kBAAiC;CACzD;AAED;;;GAGG;AACH,qBAAa,cAAc,CAAC,aAAa,SAAS,gBAAgB,CAAE,SAAQ,kCAAkC,CAAC,aAAa,CAAE,YAAW,WAAW;IAClJ,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,eAAe,
|
|
1
|
+
{"version":3,"file":"TreeNodeLoader.d.ts","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeNodeLoader.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAWxE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAI3D,OAAO,EAEL,uBAAuB,EAAE,gBAAgB,EAAuB,YAAY,EAC7E,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAoB,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAqC,aAAa,EAAsB,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACxI,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,YAAY,EAAE,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;CAC3G;AAED;;;GAGG;AACH,MAAM,WAAW,2BAA2B,CAAC,aAAa,SAAS,gBAAgB,CAAE,SAAQ,eAAe;IAC1G,qDAAqD;IACrD,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC;CACtC;AAED;;;GAGG;AACH,8BAAsB,sBAAuB,YAAW,eAAe;IACrE,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,cAAc,CAAmD;IAEzE,SAAS,aAAa,WAAW,EAAE,eAAe;IAIlD,IAAW,WAAW,oBAAoC;IAE1D,+CAA+C;IACxC,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,UAAU,CAAC,kBAAkB,CAAC;IAU9G;;;;;OAKG;IACH,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE,mBAAmB,GAAG,IAAI;IAIjE,wFAAwF;IACxF,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,GAAG,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,UAAU,CAAC,mBAAmB,CAAC;CACxH;AAED;;;GAGG;AACH,8BAAsB,kCAAkC,CAAC,aAAa,SAAS,gBAAgB,CAAE,SAAQ,sBAAuB,YAAW,2BAA2B,CAAC,aAAa,CAAC;IACnL,OAAO,CAAC,aAAa,CAAgB;IAErC,SAAS,aAAa,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa;IAK/E,IAAW,YAAY,kBAAiC;CACzD;AAED;;;GAGG;AACH,qBAAa,cAAc,CAAC,aAAa,SAAS,gBAAgB,CAAE,SAAQ,kCAAkC,CAAC,aAAa,CAAE,YAAW,WAAW;IAClJ,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,eAAe,CAAqE;IAC5F,OAAO,CAAC,UAAU,CAAmD;gBAEzD,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe;IAKrE,2BAA2B;IACpB,OAAO;IAEd;;;OAGG;IACa,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,iBAAiB,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,kBAAkB,CAAC;IAwBzH,SAAS,CAAC,IAAI,IAAI,UAAU,CAAC,mBAAmB,CAAC;CAGlD;AAED;;;GAGG;AACH,qBAAa,mBAAmB,CAAC,aAAa,SAAS,gBAAgB,CAAE,SAAQ,kCAAkC,CAAC,aAAa,CAAE,YAAW,WAAW;IACvJ,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,mBAAmB,CAAuE;IAClG,OAAO,CAAC,UAAU,CAA4C;gBAElD,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM;IAQvF,2BAA2B;IACpB,OAAO;IAEd,kDAAkD;IAClD,IAAW,QAAQ,IAAI,MAAM,CAA2B;IAExD;;;OAGG;IACa,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,UAAU,CAAC,kBAAkB,CAAC;IAwCvH,SAAS,CAAC,IAAI,IAAI,UAAU,CAAC,mBAAmB,CAAC;CAGlD;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,uDAAuD;IACvD,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,cAAc,EAAE,uBAAuB,EAAE,CAAC;IAC1C,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,6BAA6B;IAC7B,IAAI,EAAE,gBAAgB,CAAC;IACvB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,uBAAuB,EAAE,CAAC;IACrC,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAgED,gBAAgB;AAChB,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,mBAAmB,QAkB3G;AA4DD,UAAU,oBAAoB;IAC5B,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,qBAAa,cAAe,YAAW,WAAW;IAChD,OAAO,CAAC,aAAa,CAAmB;IACxC,OAAO,CAAC,gCAAgC,CAAC,CAAa;IAEtD,SAAgB,cAAc,mCAA0C;gBAE5D,YAAY,EAAE,gBAAgB;IAYnC,OAAO;IAIP,YAAY,CACjB,MAAM,EAAE,YAAY,GAAG,SAAS,EAChC,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,kBAAkB,EAAE,OAAO,GAC1B,cAAc,CAAC,oBAAoB,CAAC;YAiCzB,QAAQ;IAiBtB,OAAO,CAAC,WAAW;CAMpB"}
|