@itwin/components-react 4.3.1 → 4.4.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.
Files changed (125) hide show
  1. package/CHANGELOG.md +9 -4
  2. package/lib/cjs/components-react/filter-builder/FilterBuilder.d.ts +23 -9
  3. package/lib/cjs/components-react/filter-builder/FilterBuilder.d.ts.map +1 -1
  4. package/lib/cjs/components-react/filter-builder/FilterBuilder.js +19 -8
  5. package/lib/cjs/components-react/filter-builder/FilterBuilder.js.map +1 -1
  6. package/lib/cjs/components-react/filter-builder/FilterBuilderContext.d.ts +8 -5
  7. package/lib/cjs/components-react/filter-builder/FilterBuilderContext.d.ts.map +1 -1
  8. package/lib/cjs/components-react/filter-builder/FilterBuilderContext.js +40 -18
  9. package/lib/cjs/components-react/filter-builder/FilterBuilderContext.js.map +1 -1
  10. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.d.ts.map +1 -1
  11. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.js +7 -4
  12. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.js.map +1 -1
  13. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.scss +8 -1
  14. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.d.ts.map +1 -1
  15. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.js +3 -2
  16. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.js.map +1 -1
  17. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.d.ts +1 -1
  18. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.js.map +1 -1
  19. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.d.ts +11 -2
  20. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.d.ts.map +1 -1
  21. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.js +2 -3
  22. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.js.map +1 -1
  23. package/lib/cjs/components-react/filter-builder/FilterBuilderState.d.ts +49 -10
  24. package/lib/cjs/components-react/filter-builder/FilterBuilderState.d.ts.map +1 -1
  25. package/lib/cjs/components-react/filter-builder/FilterBuilderState.js +106 -13
  26. package/lib/cjs/components-react/filter-builder/FilterBuilderState.js.map +1 -1
  27. package/lib/cjs/components-react/toolbar/InternalToolbarComponent.d.ts +144 -0
  28. package/lib/cjs/components-react/toolbar/InternalToolbarComponent.d.ts.map +1 -0
  29. package/lib/cjs/components-react/toolbar/InternalToolbarComponent.js +550 -0
  30. package/lib/cjs/components-react/toolbar/InternalToolbarComponent.js.map +1 -0
  31. package/lib/cjs/components-react/toolbar/ItemWrapper.js +3 -3
  32. package/lib/cjs/components-react/toolbar/ItemWrapper.js.map +1 -1
  33. package/lib/cjs/components-react/toolbar/Items.js +5 -5
  34. package/lib/cjs/components-react/toolbar/Items.js.map +1 -1
  35. package/lib/cjs/components-react/toolbar/Overflow.js +3 -3
  36. package/lib/cjs/components-react/toolbar/Overflow.js.map +1 -1
  37. package/lib/cjs/components-react/toolbar/OverflowPanel.js +5 -5
  38. package/lib/cjs/components-react/toolbar/OverflowPanel.js.map +1 -1
  39. package/lib/cjs/components-react/toolbar/PopupItem.js +4 -4
  40. package/lib/cjs/components-react/toolbar/PopupItem.js.map +1 -1
  41. package/lib/cjs/components-react/toolbar/PopupItemWithDrag.d.ts +1 -1
  42. package/lib/cjs/components-react/toolbar/PopupItemWithDrag.d.ts.map +1 -1
  43. package/lib/cjs/components-react/toolbar/PopupItemWithDrag.js +4 -4
  44. package/lib/cjs/components-react/toolbar/PopupItemWithDrag.js.map +1 -1
  45. package/lib/cjs/components-react/toolbar/PopupItemsPanel.js +2 -2
  46. package/lib/cjs/components-react/toolbar/PopupItemsPanel.js.map +1 -1
  47. package/lib/cjs/components-react/toolbar/Toolbar.d.ts +2 -2
  48. package/lib/cjs/components-react/toolbar/Toolbar.d.ts.map +1 -1
  49. package/lib/cjs/components-react/toolbar/Toolbar.js +2 -69
  50. package/lib/cjs/components-react/toolbar/Toolbar.js.map +1 -1
  51. package/lib/cjs/components-react/toolbar/ToolbarWithOverflow.d.ts +5 -105
  52. package/lib/cjs/components-react/toolbar/ToolbarWithOverflow.d.ts.map +1 -1
  53. package/lib/cjs/components-react/toolbar/ToolbarWithOverflow.js +6 -481
  54. package/lib/cjs/components-react/toolbar/ToolbarWithOverflow.js.map +1 -1
  55. package/lib/cjs/components-react/toolbar/useConditionalSynchedItems.d.ts +14 -0
  56. package/lib/cjs/components-react/toolbar/useConditionalSynchedItems.d.ts.map +1 -0
  57. package/lib/cjs/components-react/toolbar/useConditionalSynchedItems.js +119 -0
  58. package/lib/cjs/components-react/toolbar/useConditionalSynchedItems.js.map +1 -0
  59. package/lib/cjs/components-react.d.ts +6 -2
  60. package/lib/cjs/components-react.d.ts.map +1 -1
  61. package/lib/cjs/components-react.js +6 -2
  62. package/lib/cjs/components-react.js.map +1 -1
  63. package/lib/esm/components-react/filter-builder/FilterBuilder.d.ts +23 -9
  64. package/lib/esm/components-react/filter-builder/FilterBuilder.d.ts.map +1 -1
  65. package/lib/esm/components-react/filter-builder/FilterBuilder.js +17 -7
  66. package/lib/esm/components-react/filter-builder/FilterBuilder.js.map +1 -1
  67. package/lib/esm/components-react/filter-builder/FilterBuilderContext.d.ts +8 -5
  68. package/lib/esm/components-react/filter-builder/FilterBuilderContext.d.ts.map +1 -1
  69. package/lib/esm/components-react/filter-builder/FilterBuilderContext.js +40 -18
  70. package/lib/esm/components-react/filter-builder/FilterBuilderContext.js.map +1 -1
  71. package/lib/esm/components-react/filter-builder/FilterBuilderRule.d.ts.map +1 -1
  72. package/lib/esm/components-react/filter-builder/FilterBuilderRule.js +8 -5
  73. package/lib/esm/components-react/filter-builder/FilterBuilderRule.js.map +1 -1
  74. package/lib/esm/components-react/filter-builder/FilterBuilderRule.scss +8 -1
  75. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.d.ts.map +1 -1
  76. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.js +3 -2
  77. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.js.map +1 -1
  78. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.d.ts +1 -1
  79. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.js.map +1 -1
  80. package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.d.ts +11 -2
  81. package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.d.ts.map +1 -1
  82. package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.js +2 -3
  83. package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.js.map +1 -1
  84. package/lib/esm/components-react/filter-builder/FilterBuilderState.d.ts +49 -10
  85. package/lib/esm/components-react/filter-builder/FilterBuilderState.d.ts.map +1 -1
  86. package/lib/esm/components-react/filter-builder/FilterBuilderState.js +99 -7
  87. package/lib/esm/components-react/filter-builder/FilterBuilderState.js.map +1 -1
  88. package/lib/esm/components-react/toolbar/InternalToolbarComponent.d.ts +144 -0
  89. package/lib/esm/components-react/toolbar/InternalToolbarComponent.d.ts.map +1 -0
  90. package/lib/esm/components-react/toolbar/InternalToolbarComponent.js +514 -0
  91. package/lib/esm/components-react/toolbar/InternalToolbarComponent.js.map +1 -0
  92. package/lib/esm/components-react/toolbar/ItemWrapper.js +1 -1
  93. package/lib/esm/components-react/toolbar/ItemWrapper.js.map +1 -1
  94. package/lib/esm/components-react/toolbar/Items.js +1 -1
  95. package/lib/esm/components-react/toolbar/Items.js.map +1 -1
  96. package/lib/esm/components-react/toolbar/Overflow.js +1 -1
  97. package/lib/esm/components-react/toolbar/Overflow.js.map +1 -1
  98. package/lib/esm/components-react/toolbar/OverflowPanel.js +1 -1
  99. package/lib/esm/components-react/toolbar/OverflowPanel.js.map +1 -1
  100. package/lib/esm/components-react/toolbar/PopupItem.js +1 -1
  101. package/lib/esm/components-react/toolbar/PopupItem.js.map +1 -1
  102. package/lib/esm/components-react/toolbar/PopupItemWithDrag.d.ts +1 -1
  103. package/lib/esm/components-react/toolbar/PopupItemWithDrag.d.ts.map +1 -1
  104. package/lib/esm/components-react/toolbar/PopupItemWithDrag.js +1 -1
  105. package/lib/esm/components-react/toolbar/PopupItemWithDrag.js.map +1 -1
  106. package/lib/esm/components-react/toolbar/PopupItemsPanel.js +1 -1
  107. package/lib/esm/components-react/toolbar/PopupItemsPanel.js.map +1 -1
  108. package/lib/esm/components-react/toolbar/Toolbar.d.ts +2 -2
  109. package/lib/esm/components-react/toolbar/Toolbar.d.ts.map +1 -1
  110. package/lib/esm/components-react/toolbar/Toolbar.js +2 -66
  111. package/lib/esm/components-react/toolbar/Toolbar.js.map +1 -1
  112. package/lib/esm/components-react/toolbar/ToolbarWithOverflow.d.ts +5 -105
  113. package/lib/esm/components-react/toolbar/ToolbarWithOverflow.d.ts.map +1 -1
  114. package/lib/esm/components-react/toolbar/ToolbarWithOverflow.js +5 -471
  115. package/lib/esm/components-react/toolbar/ToolbarWithOverflow.js.map +1 -1
  116. package/lib/esm/components-react/toolbar/useConditionalSynchedItems.d.ts +14 -0
  117. package/lib/esm/components-react/toolbar/useConditionalSynchedItems.d.ts.map +1 -0
  118. package/lib/esm/components-react/toolbar/useConditionalSynchedItems.js +92 -0
  119. package/lib/esm/components-react/toolbar/useConditionalSynchedItems.js.map +1 -0
  120. package/lib/esm/components-react.d.ts +6 -2
  121. package/lib/esm/components-react.d.ts.map +1 -1
  122. package/lib/esm/components-react.js +6 -2
  123. package/lib/esm/components-react.js.map +1 -1
  124. package/lib/public/locales/en/UiComponents.json +4 -1
  125. package/package.json +8 -9
@@ -1 +1 @@
1
- {"version":3,"file":"FilterBuilderRuleValue.d.ts","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderRuleValue.tsx"],"names":[],"mappings":"AAIA;;GAEG;;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAKhF;;;GAGG;AACH,MAAM,WAAW,mCAAmC;IAClD,+BAA+B;IAC/B,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,qEAAqE;IACrE,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,mDAAmD;IACnD,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;CAC1C;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,mCAAmC,eA6B3C"}
1
+ {"version":3,"file":"FilterBuilderRuleValue.d.ts","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderRuleValue.tsx"],"names":[],"mappings":"AAIA;;GAEG;;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAIhF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAE9D;;;GAGG;AACH,MAAM,WAAW,mCAAmC;IAClD,+BAA+B;IAC/B,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,qEAAqE;IACrE,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,mDAAmD;IACnD,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;CAC1C;AAED;;;GAGG;AACH,MAAM,WAAW,2CACf,SAAQ,mCAAmC;IAC3C,wBAAwB;IACxB,QAAQ,EAAE,0BAA0B,CAAC;CACtC;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,mCAAmC,eA2B3C"}
@@ -36,7 +36,7 @@ const appui_abstract_1 = require("@itwin/appui-abstract");
36
36
  const EditorContainer_1 = require("../editors/EditorContainer");
37
37
  /**
38
38
  * Component that renders [[PropertyFilterBuilderRuleRenderer]] value input.
39
- * @internal
39
+ * @beta
40
40
  */
41
41
  function PropertyFilterBuilderRuleValue(props) {
42
42
  const { value, property, onChange } = props;
@@ -46,8 +46,7 @@ function PropertyFilterBuilderRuleValue(props) {
46
46
  const onValueChange = React.useCallback(({ newValue }) => {
47
47
  onChange(newValue);
48
48
  }, [onChange]);
49
- return (React.createElement("div", { className: "rule-value" },
50
- React.createElement(EditorContainer_1.EditorContainer, { propertyRecord: propertyRecord, onCancel: /* istanbul ignore next */ () => { }, onCommit: onValueChange, setFocus: false, shouldCommitOnChange: true })));
49
+ return (React.createElement(EditorContainer_1.EditorContainer, { propertyRecord: propertyRecord, onCancel: /* istanbul ignore next */ () => { }, onCommit: onValueChange, setFocus: false, shouldCommitOnChange: false }));
51
50
  }
52
51
  exports.PropertyFilterBuilderRuleValue = PropertyFilterBuilderRuleValue;
53
52
  //# sourceMappingURL=FilterBuilderRuleValue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilterBuilderRuleValue.js","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderRuleValue.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,6CAA+B;AAE/B,0DAA4E;AAE5E,gEAA6D;AAe7D;;;GAGG;AACH,SAAgB,8BAA8B,CAC5C,KAA0C;IAE1C,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAE5C,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACxC,OAAO,IAAI,+BAAc,CACvB,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,EAAE,WAAW,EAAE,oCAAmB,CAAC,SAAS,EAAE,EACvD,QAAQ,CACT,CAAC;IACJ,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEtB,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CACrC,CAAC,EAAE,QAAQ,EAAuB,EAAE,EAAE;QACpC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrB,CAAC,EACD,CAAC,QAAQ,CAAC,CACX,CAAC;IAEF,OAAO,CACL,6BAAK,SAAS,EAAC,YAAY;QACzB,oBAAC,iCAAe,IACd,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,0BAA0B,CAAC,GAAG,EAAE,GAAE,CAAC,EAC7C,QAAQ,EAAE,aAAa,EACvB,QAAQ,EAAE,KAAK,EACf,oBAAoB,EAAE,IAAI,GAC1B,CACE,CACP,CAAC;AACJ,CAAC;AA9BD,wEA8BC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module PropertyFilterBuilder\n */\n\nimport * as React from \"react\";\nimport type { PropertyDescription, PropertyValue } from \"@itwin/appui-abstract\";\nimport { PropertyRecord, PropertyValueFormat } from \"@itwin/appui-abstract\";\nimport type { PropertyUpdatedArgs } from \"../editors/EditorContainer\";\nimport { EditorContainer } from \"../editors/EditorContainer\";\n\n/**\n * Props for [[PropertyFilterBuilderRuleValue]] component.\n * @internal\n */\nexport interface PropertyFilterBuilderRuleValueProps {\n /** Currently entered value. */\n value?: PropertyValue;\n /** Property used in rule to which this value will be compared to. */\n property: PropertyDescription;\n /** Callback that is invoked when value changes. */\n onChange: (value: PropertyValue) => void;\n}\n\n/**\n * Component that renders [[PropertyFilterBuilderRuleRenderer]] value input.\n * @internal\n */\nexport function PropertyFilterBuilderRuleValue(\n props: PropertyFilterBuilderRuleValueProps\n) {\n const { value, property, onChange } = props;\n\n const propertyRecord = React.useMemo(() => {\n return new PropertyRecord(\n value ?? { valueFormat: PropertyValueFormat.Primitive },\n property\n );\n }, [value, property]);\n\n const onValueChange = React.useCallback(\n ({ newValue }: PropertyUpdatedArgs) => {\n onChange(newValue);\n },\n [onChange]\n );\n\n return (\n <div className=\"rule-value\">\n <EditorContainer\n propertyRecord={propertyRecord}\n onCancel={/* istanbul ignore next */ () => {}}\n onCommit={onValueChange}\n setFocus={false}\n shouldCommitOnChange={true}\n />\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"FilterBuilderRuleValue.js","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderRuleValue.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,6CAA+B;AAE/B,0DAA4E;AAE5E,gEAA6D;AA0B7D;;;GAGG;AACH,SAAgB,8BAA8B,CAC5C,KAA0C;IAE1C,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAE5C,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACxC,OAAO,IAAI,+BAAc,CACvB,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,EAAE,WAAW,EAAE,oCAAmB,CAAC,SAAS,EAAE,EACvD,QAAQ,CACT,CAAC;IACJ,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEtB,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CACrC,CAAC,EAAE,QAAQ,EAAuB,EAAE,EAAE;QACpC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrB,CAAC,EACD,CAAC,QAAQ,CAAC,CACX,CAAC;IAEF,OAAO,CACL,oBAAC,iCAAe,IACd,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,0BAA0B,CAAC,GAAG,EAAE,GAAE,CAAC,EAC7C,QAAQ,EAAE,aAAa,EACvB,QAAQ,EAAE,KAAK,EACf,oBAAoB,EAAE,KAAK,GAC3B,CACH,CAAC;AACJ,CAAC;AA5BD,wEA4BC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module PropertyFilterBuilder\n */\n\nimport * as React from \"react\";\nimport type { PropertyDescription, PropertyValue } from \"@itwin/appui-abstract\";\nimport { PropertyRecord, PropertyValueFormat } from \"@itwin/appui-abstract\";\nimport type { PropertyUpdatedArgs } from \"../editors/EditorContainer\";\nimport { EditorContainer } from \"../editors/EditorContainer\";\nimport type { PropertyFilterRuleOperator } from \"./Operators\";\n\n/**\n * Props for [[PropertyFilterBuilderRuleValue]] component.\n * @beta\n */\nexport interface PropertyFilterBuilderRuleValueProps {\n /** Currently entered value. */\n value?: PropertyValue;\n /** Property used in rule to which this value will be compared to. */\n property: PropertyDescription;\n /** Callback that is invoked when value changes. */\n onChange: (value: PropertyValue) => void;\n}\n\n/**\n * Props for custom [[PropertyFilterBuilderRuleValue]] renderer.\n * @beta\n */\nexport interface PropertyFilterBuilderRuleValueRendererProps\n extends PropertyFilterBuilderRuleValueProps {\n /** Current operator. */\n operator: PropertyFilterRuleOperator;\n}\n\n/**\n * Component that renders [[PropertyFilterBuilderRuleRenderer]] value input.\n * @beta\n */\nexport function PropertyFilterBuilderRuleValue(\n props: PropertyFilterBuilderRuleValueProps\n) {\n const { value, property, onChange } = props;\n\n const propertyRecord = React.useMemo(() => {\n return new PropertyRecord(\n value ?? { valueFormat: PropertyValueFormat.Primitive },\n property\n );\n }, [value, property]);\n\n const onValueChange = React.useCallback(\n ({ newValue }: PropertyUpdatedArgs) => {\n onChange(newValue);\n },\n [onChange]\n );\n\n return (\n <EditorContainer\n propertyRecord={propertyRecord}\n onCancel={/* istanbul ignore next */ () => {}}\n onCommit={onValueChange}\n setFocus={false}\n shouldCommitOnChange={false}\n />\n );\n}\n"]}
@@ -2,12 +2,12 @@
2
2
  * @module PropertyFilterBuilder
3
3
  */
4
4
  import type { PropertyDescription, PropertyValue } from "@itwin/appui-abstract";
5
- import type { PropertyFilterRuleOperator } from "./Operators";
5
+ import { PropertyFilterRuleOperator } from "./Operators";
6
6
  import { PropertyFilterRuleGroupOperator } from "./Operators";
7
7
  import type { PropertyFilter } from "./Types";
8
8
  /**
9
9
  * Data structure that describes [[PropertyFilterBuilder]] component state.
10
- * @internal
10
+ * @beta
11
11
  */
12
12
  export interface PropertyFilterBuilderState {
13
13
  /** Root group of rules in [[PropertyFilterBuilder]] component. */
@@ -15,12 +15,12 @@ export interface PropertyFilterBuilderState {
15
15
  }
16
16
  /**
17
17
  * Type that describes [[PropertyFilterBuilder]] component group item.
18
- * @internal
18
+ * @beta
19
19
  */
20
20
  export type PropertyFilterBuilderRuleGroupItem = PropertyFilterBuilderRuleGroup | PropertyFilterBuilderRule;
21
21
  /**
22
22
  * Data structure that describes [[PropertyFilterBuilder]] component rule group.
23
- * @internal
23
+ * @beta
24
24
  */
25
25
  export interface PropertyFilterBuilderRuleGroup {
26
26
  /** Id of this rule group. */
@@ -34,7 +34,7 @@ export interface PropertyFilterBuilderRuleGroup {
34
34
  }
35
35
  /**
36
36
  * Data structure that describes [[PropertyFilterBuilder]] component single rule.
37
- * @internal
37
+ * @beta
38
38
  */
39
39
  export interface PropertyFilterBuilderRule {
40
40
  /** Id of this rule. */
@@ -47,10 +47,12 @@ export interface PropertyFilterBuilderRule {
47
47
  operator?: PropertyFilterRuleOperator;
48
48
  /** Value that property should be compared to. */
49
49
  value?: PropertyValue;
50
+ /** Error message of this rule. */
51
+ errorMessage?: string;
50
52
  }
51
53
  /**
52
54
  * Actions for controlling [[PropertyFilterBuilder]] component state.
53
- * @internal
55
+ * @beta
54
56
  */
55
57
  export declare class PropertyFilterBuilderActions {
56
58
  private setState;
@@ -68,21 +70,58 @@ export declare class PropertyFilterBuilderActions {
68
70
  setRuleOperator(path: string[], operator: PropertyFilterRuleOperator): void;
69
71
  /** Sets value of rule specified by the path. */
70
72
  setRuleValue(path: string[], value: PropertyValue): void;
73
+ /**
74
+ * Sets error messages of the rules specified by id.
75
+ * If rule id is not present in the map, then its error message will be cleared.
76
+ */
77
+ setRuleErrorMessages(ruleIdsAndErrorMessages: Map<string, string>): void;
71
78
  }
72
79
  /**
73
80
  * Function to check if supplied [[PropertyFilterBuilderRuleGroupItem]] is [[PropertyFilterBuilderRuleGroup]].
74
- * @internal
81
+ * @beta
75
82
  */
76
83
  export declare function isPropertyFilterBuilderRuleGroup(item: PropertyFilterBuilderRuleGroupItem): item is PropertyFilterBuilderRuleGroup;
84
+ /**
85
+ * Props for [[usePropertyFilterBuilder]]
86
+ * @beta
87
+ */
88
+ export interface UsePropertyFilterBuilderProps {
89
+ /** Initial filter for [[PropertyFilterBuilder]] */
90
+ initialFilter?: PropertyFilter;
91
+ /** Custom rule validator to be used when [[UsePropertyFilterBuilderResult.buildFilter]] is invoked. Should return error message or `undefined`, if rule is valid. */
92
+ ruleValidator?: (rule: PropertyFilterBuilderRule) => string | undefined;
93
+ }
94
+ /**
95
+ * Type for [[usePropertyFilterBuilder]] return object.
96
+ * @beta
97
+ */
98
+ export interface UsePropertyFilterBuilderResult {
99
+ /** Root group of the [[PropertyFilterBuilder]]. */
100
+ rootGroup: PropertyFilterBuilderRuleGroup;
101
+ /** Actions for manipulating [[PropertyFilterBuilder]] state. */
102
+ actions: PropertyFilterBuilderActions;
103
+ /**
104
+ * Validates and builds [[PropertyFilter]] based on current state. It uses [[defaultPropertyFilterBuilderRuleValidator]] or
105
+ * custom validator provided through [[UsePropertyFilterBuilderProps]] to validate each rule.
106
+ * @returns [[PropertyFilter]] if all rules are valid, `undefined` otherwise.
107
+ */
108
+ buildFilter: () => PropertyFilter | undefined;
109
+ }
77
110
  /**
78
111
  * Custom hook that creates state for [[PropertyFilterBuilder]] component. It creates empty state or initializes
79
112
  * state from supplied initial filter.
80
- * @internal
113
+ * @beta
81
114
  */
82
- export declare function usePropertyFilterBuilderState(initialFilter?: PropertyFilter): {
83
- state: PropertyFilterBuilderState;
115
+ export declare function usePropertyFilterBuilder(props?: UsePropertyFilterBuilderProps): {
116
+ rootGroup: PropertyFilterBuilderRuleGroup;
84
117
  actions: PropertyFilterBuilderActions;
118
+ buildFilter: () => PropertyFilter | undefined;
85
119
  };
120
+ /**
121
+ * Default rule validator.
122
+ * @beta
123
+ */
124
+ export declare function defaultPropertyFilterBuilderRuleValidator(item: PropertyFilterBuilderRule): string | undefined;
86
125
  /** @internal */
87
126
  export declare function buildPropertyFilter(groupItem: PropertyFilterBuilderRuleGroupItem): PropertyFilter | undefined;
88
127
  //# sourceMappingURL=FilterBuilderState.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilterBuilderState.d.ts","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderState.ts"],"names":[],"mappings":"AAIA;;GAEG;AAKH,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGhF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAEL,+BAA+B,EAChC,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,cAAc,EAAsB,MAAM,SAAS,CAAC;AAGlE;;;GAGG;AACH,MAAM,WAAW,0BAA0B;IACzC,kEAAkE;IAClE,SAAS,EAAE,8BAA8B,CAAC;CAC3C;AAED;;;GAGG;AACH,MAAM,MAAM,kCAAkC,GAC1C,8BAA8B,GAC9B,yBAAyB,CAAC;AAE9B;;;GAGG;AACH,MAAM,WAAW,8BAA8B;IAC7C,6BAA6B;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,QAAQ,EAAE,+BAA+B,CAAC;IAC1C,2BAA2B;IAC3B,KAAK,EAAE,kCAAkC,EAAE,CAAC;CAC7C;AAED;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,uBAAuB;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,0BAA0B,CAAC;IACtC,iDAAiD;IACjD,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED;;;GAGG;AACH,qBAAa,4BAA4B;IAErC,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,CAChB,MAAM,EAAE,CACN,SAAS,EAAE,0BAA0B,KAClC,0BAA0B,KAC5B,IAAI;IAGX,OAAO,CAAC,WAAW;IAMnB,sEAAsE;IAC/D,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM;IAY9D,sCAAsC;IAC/B,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE;IAyBhC,yDAAyD;IAClD,oBAAoB,CACzB,IAAI,EAAE,MAAM,EAAE,EACd,QAAQ,EAAE,+BAA+B;IAS3C,mDAAmD;IAC5C,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,mBAAmB;IASrE,mDAAmD;IAC5C,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,0BAA0B;IAS3E,gDAAgD;IACzC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa;CAOzD;AAED;;;GAGG;AACH,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,kCAAkC,GACvC,IAAI,IAAI,8BAA8B,CAExC;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,aAAa,CAAC,EAAE,cAAc;;;EAW3E;AAED,gBAAgB;AAChB,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,kCAAkC,GAC5C,cAAc,GAAG,SAAS,CAI5B"}
1
+ {"version":3,"file":"FilterBuilderState.d.ts","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderState.ts"],"names":[],"mappings":"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"}
@@ -30,16 +30,18 @@ var __importStar = (this && this.__importStar) || function (mod) {
30
30
  return result;
31
31
  };
32
32
  Object.defineProperty(exports, "__esModule", { value: true });
33
- exports.buildPropertyFilter = exports.usePropertyFilterBuilderState = exports.isPropertyFilterBuilderRuleGroup = exports.PropertyFilterBuilderActions = void 0;
33
+ exports.buildPropertyFilter = exports.defaultPropertyFilterBuilderRuleValidator = exports.usePropertyFilterBuilder = exports.isPropertyFilterBuilderRuleGroup = exports.PropertyFilterBuilderActions = void 0;
34
34
  const immer_1 = require("immer");
35
35
  const React = __importStar(require("react"));
36
36
  const appui_abstract_1 = require("@itwin/appui-abstract");
37
37
  const core_bentley_1 = require("@itwin/core-bentley");
38
38
  const Operators_1 = require("./Operators");
39
+ const Operators_2 = require("./Operators");
39
40
  const Types_1 = require("./Types");
41
+ const UiComponents_1 = require("../UiComponents");
40
42
  /**
41
43
  * Actions for controlling [[PropertyFilterBuilder]] component state.
42
- * @internal
44
+ * @beta
43
45
  */
44
46
  class PropertyFilterBuilderActions {
45
47
  constructor(setState) {
@@ -98,6 +100,7 @@ class PropertyFilterBuilderActions {
98
100
  return;
99
101
  rule.property = property;
100
102
  rule.value = undefined;
103
+ rule.errorMessage = undefined;
101
104
  });
102
105
  }
103
106
  /** Sets operator of rule specified by the path. */
@@ -106,8 +109,12 @@ class PropertyFilterBuilderActions {
106
109
  const rule = findRule(state.rootGroup, path);
107
110
  if (!rule)
108
111
  return;
109
- if ((0, Operators_1.isUnaryPropertyFilterOperator)(operator))
112
+ if ((0, Operators_2.isUnaryPropertyFilterOperator)(operator))
110
113
  rule.value = undefined;
114
+ if (operator !== rule.operator &&
115
+ !areOperatorsSimilar(operator, rule.operator)) {
116
+ rule.value = undefined;
117
+ }
111
118
  rule.operator = operator;
112
119
  });
113
120
  }
@@ -120,11 +127,30 @@ class PropertyFilterBuilderActions {
120
127
  rule.value = value;
121
128
  });
122
129
  }
130
+ /**
131
+ * Sets error messages of the rules specified by id.
132
+ * If rule id is not present in the map, then its error message will be cleared.
133
+ */
134
+ setRuleErrorMessages(ruleIdsAndErrorMessages) {
135
+ this.updateState((state) => {
136
+ const setErrorMessages = (item) => {
137
+ if (isPropertyFilterBuilderRuleGroup(item)) {
138
+ item.items.forEach((itm) => {
139
+ setErrorMessages(itm);
140
+ });
141
+ }
142
+ else {
143
+ item.errorMessage = ruleIdsAndErrorMessages.get(item.id);
144
+ }
145
+ };
146
+ setErrorMessages(state.rootGroup);
147
+ });
148
+ }
123
149
  }
124
150
  exports.PropertyFilterBuilderActions = PropertyFilterBuilderActions;
125
151
  /**
126
152
  * Function to check if supplied [[PropertyFilterBuilderRuleGroupItem]] is [[PropertyFilterBuilderRuleGroup]].
127
- * @internal
153
+ * @beta
128
154
  */
129
155
  function isPropertyFilterBuilderRuleGroup(item) {
130
156
  return item.items !== undefined;
@@ -133,16 +159,67 @@ exports.isPropertyFilterBuilderRuleGroup = isPropertyFilterBuilderRuleGroup;
133
159
  /**
134
160
  * Custom hook that creates state for [[PropertyFilterBuilder]] component. It creates empty state or initializes
135
161
  * state from supplied initial filter.
136
- * @internal
162
+ * @beta
137
163
  */
138
- function usePropertyFilterBuilderState(initialFilter) {
139
- const [state, setState] = React.useState(() => initialFilter
164
+ function usePropertyFilterBuilder(props) {
165
+ const { initialFilter, ruleValidator } = props !== null && props !== void 0 ? props : {
166
+ initialFilter: undefined,
167
+ ruleValidator: undefined,
168
+ };
169
+ const [state, setState] = React.useState(initialFilter
140
170
  ? convertFilterToState(initialFilter)
141
171
  : { rootGroup: createEmptyRuleGroup() });
142
172
  const [actions] = React.useState(() => new PropertyFilterBuilderActions(setState));
143
- return { state, actions };
173
+ const buildFilter = () => {
174
+ const ruleErrors = validateRules(state.rootGroup, ruleValidator);
175
+ actions.setRuleErrorMessages(ruleErrors);
176
+ if (ruleErrors.size > 0) {
177
+ return undefined;
178
+ }
179
+ return buildPropertyFilter(state.rootGroup);
180
+ };
181
+ return { rootGroup: state.rootGroup, actions, buildFilter };
182
+ }
183
+ exports.usePropertyFilterBuilder = usePropertyFilterBuilder;
184
+ function validateRules(rule, ruleValidator) {
185
+ const ruleIdsAndErrorMessages = new Map();
186
+ const validateRulesInner = (item) => {
187
+ if (isPropertyFilterBuilderRuleGroup(item)) {
188
+ item.items.forEach((itm) => {
189
+ validateRulesInner(itm);
190
+ });
191
+ }
192
+ else {
193
+ const errorMessage = ruleValidator
194
+ ? ruleValidator(item)
195
+ : defaultPropertyFilterBuilderRuleValidator(item);
196
+ if (errorMessage)
197
+ ruleIdsAndErrorMessages.set(item.id, errorMessage);
198
+ }
199
+ };
200
+ validateRulesInner(rule);
201
+ return ruleIdsAndErrorMessages;
144
202
  }
145
- exports.usePropertyFilterBuilderState = usePropertyFilterBuilderState;
203
+ /**
204
+ * Default rule validator.
205
+ * @beta
206
+ */
207
+ function defaultPropertyFilterBuilderRuleValidator(item) {
208
+ if (item.property === undefined ||
209
+ item.operator === undefined ||
210
+ (0, Operators_2.isUnaryPropertyFilterOperator)(item.operator)) {
211
+ return undefined;
212
+ }
213
+ if (item.value === undefined) {
214
+ return UiComponents_1.UiComponents.translate("filterBuilder.errorMessages.emptyValue");
215
+ }
216
+ if (item.value.valueFormat === appui_abstract_1.PropertyValueFormat.Primitive &&
217
+ (item.value.value === undefined || item.value.value === "")) {
218
+ return UiComponents_1.UiComponents.translate("filterBuilder.errorMessages.emptyValue");
219
+ }
220
+ return undefined;
221
+ }
222
+ exports.defaultPropertyFilterBuilderRuleValidator = defaultPropertyFilterBuilderRuleValidator;
146
223
  /** @internal */
147
224
  function buildPropertyFilter(groupItem) {
148
225
  if (isPropertyFilterBuilderRuleGroup(groupItem))
@@ -170,10 +247,10 @@ function buildPropertyFilterFromRule(rule) {
170
247
  const { property, operator, value } = rule;
171
248
  if (!property || operator === undefined)
172
249
  return undefined;
173
- if (!(0, Operators_1.isUnaryPropertyFilterOperator)(operator) &&
250
+ if (!(0, Operators_2.isUnaryPropertyFilterOperator)(operator) &&
174
251
  (!value ||
175
252
  value.valueFormat !== appui_abstract_1.PropertyValueFormat.Primitive ||
176
- !value.value))
253
+ value.value === undefined))
177
254
  return undefined;
178
255
  return { property, operator, value };
179
256
  }
@@ -188,7 +265,7 @@ function createEmptyRuleGroup(groupId) {
188
265
  return {
189
266
  id,
190
267
  groupId,
191
- operator: Operators_1.PropertyFilterRuleGroupOperator.And,
268
+ operator: Operators_2.PropertyFilterRuleGroupOperator.And,
192
269
  items: [createEmptyRule(id)],
193
270
  };
194
271
  }
@@ -246,9 +323,25 @@ function convertFilterToState(filter) {
246
323
  return {
247
324
  rootGroup: {
248
325
  id,
249
- operator: Operators_1.PropertyFilterRuleGroupOperator.And,
326
+ operator: Operators_2.PropertyFilterRuleGroupOperator.And,
250
327
  items: [getRuleItem(filter, id)],
251
328
  },
252
329
  };
253
330
  }
331
+ function areOperatorsSimilar(firstOperator, secondOperator) {
332
+ return ((isOperatorEqualOrIsNotEqual(firstOperator) &&
333
+ isOperatorEqualOrIsNotEqual(secondOperator)) ||
334
+ (isInequalityOperator(firstOperator) &&
335
+ isInequalityOperator(secondOperator)));
336
+ }
337
+ function isOperatorEqualOrIsNotEqual(operator) {
338
+ return (operator === Operators_1.PropertyFilterRuleOperator.IsEqual ||
339
+ operator === Operators_1.PropertyFilterRuleOperator.IsNotEqual);
340
+ }
341
+ function isInequalityOperator(operator) {
342
+ return (operator === Operators_1.PropertyFilterRuleOperator.Less ||
343
+ operator === Operators_1.PropertyFilterRuleOperator.LessOrEqual ||
344
+ operator === Operators_1.PropertyFilterRuleOperator.Greater ||
345
+ operator === Operators_1.PropertyFilterRuleOperator.GreaterOrEqual);
346
+ }
254
347
  //# sourceMappingURL=FilterBuilderState.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilterBuilderState.js","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderState.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module PropertyFilterBuilder\n */\n\nimport type { Draft } from \"immer\";\nimport { produce } from \"immer\";\nimport * as React from \"react\";\nimport type { PropertyDescription, PropertyValue } from \"@itwin/appui-abstract\";\nimport { PropertyValueFormat } from \"@itwin/appui-abstract\";\nimport { Guid } from \"@itwin/core-bentley\";\nimport type { PropertyFilterRuleOperator } from \"./Operators\";\nimport {\n isUnaryPropertyFilterOperator,\n PropertyFilterRuleGroupOperator,\n} from \"./Operators\";\nimport type { PropertyFilter, PropertyFilterRule } from \"./Types\";\nimport { isPropertyFilterRuleGroup } from \"./Types\";\n\n/**\n * Data structure that describes [[PropertyFilterBuilder]] component state.\n * @internal\n */\nexport interface PropertyFilterBuilderState {\n /** Root group of rules in [[PropertyFilterBuilder]] component. */\n rootGroup: PropertyFilterBuilderRuleGroup;\n}\n\n/**\n * Type that describes [[PropertyFilterBuilder]] component group item.\n * @internal\n */\nexport type PropertyFilterBuilderRuleGroupItem =\n | PropertyFilterBuilderRuleGroup\n | PropertyFilterBuilderRule;\n\n/**\n * Data structure that describes [[PropertyFilterBuilder]] component rule group.\n * @internal\n */\nexport interface PropertyFilterBuilderRuleGroup {\n /** Id of this rule group. */\n id: string;\n /** Id of rule group that this group is nested in. */\n groupId?: string;\n /** Operator that should join items in this group. */\n operator: PropertyFilterRuleGroupOperator;\n /** Items in this group. */\n items: PropertyFilterBuilderRuleGroupItem[];\n}\n\n/**\n * Data structure that describes [[PropertyFilterBuilder]] component single rule.\n * @internal\n */\nexport interface PropertyFilterBuilderRule {\n /** Id of this rule. */\n id: string;\n /** Id of rule group that this rule is nested in. */\n groupId: string;\n /** Property used in this rule. */\n property?: PropertyDescription;\n /** Operator that should be used to compare property value. */\n operator?: PropertyFilterRuleOperator;\n /** Value that property should be compared to. */\n value?: PropertyValue;\n}\n\n/**\n * Actions for controlling [[PropertyFilterBuilder]] component state.\n * @internal\n */\nexport class PropertyFilterBuilderActions {\n constructor(\n private setState: (\n setter: (\n prevState: PropertyFilterBuilderState\n ) => PropertyFilterBuilderState\n ) => void\n ) {}\n\n private updateState(\n updater: (state: Draft<PropertyFilterBuilderState>) => void\n ) {\n this.setState(produce(updater));\n }\n\n /** Adds new rule or group of rules to the group specified by path. */\n public addItem(path: string[], itemType: \"RULE_GROUP\" | \"RULE\") {\n this.updateState((state) => {\n const parentGroup = findRuleGroup(state.rootGroup, path);\n if (!parentGroup) return;\n const item =\n itemType === \"RULE_GROUP\"\n ? createEmptyRuleGroup(parentGroup.id)\n : createEmptyRule(parentGroup.id);\n parentGroup.items.push(item);\n });\n }\n\n /** Removes item specified by path. */\n public removeItem(path: string[]) {\n function removeItemFromGroup(\n state: Draft<PropertyFilterBuilderState>,\n pathToItem: string[]\n ) {\n const pathToParent = pathToItem.slice(0, -1);\n const parentGroup = findRuleGroup(state.rootGroup, pathToParent);\n if (!parentGroup) return;\n const itemId = pathToItem[pathToItem.length - 1];\n const itemIndex = parentGroup.items.findIndex(\n (item) => item.id === itemId\n );\n if (itemIndex === -1) return;\n if (parentGroup.items.length === 1) {\n parentGroup.items[0] = createEmptyRule(parentGroup.id);\n return;\n }\n parentGroup.items.splice(itemIndex, 1);\n }\n\n this.updateState((state) => {\n removeItemFromGroup(state, path);\n });\n }\n\n /** Sets operator of rule group specified by the path. */\n public setRuleGroupOperator(\n path: string[],\n operator: PropertyFilterRuleGroupOperator\n ) {\n this.updateState((state) => {\n const group = findRuleGroup(state.rootGroup, path);\n if (!group) return;\n group.operator = operator;\n });\n }\n\n /** Sets property of rule specified by the path. */\n public setRuleProperty(path: string[], property?: PropertyDescription) {\n this.updateState((state) => {\n const rule = findRule(state.rootGroup, path);\n if (!rule) return;\n rule.property = property;\n rule.value = undefined;\n });\n }\n\n /** Sets operator of rule specified by the path. */\n public setRuleOperator(path: string[], operator: PropertyFilterRuleOperator) {\n this.updateState((state) => {\n const rule = findRule(state.rootGroup, path);\n if (!rule) return;\n if (isUnaryPropertyFilterOperator(operator)) rule.value = undefined;\n rule.operator = operator;\n });\n }\n\n /** Sets value of rule specified by the path. */\n public setRuleValue(path: string[], value: PropertyValue) {\n this.updateState((state) => {\n const rule = findRule(state.rootGroup, path);\n if (!rule) return;\n rule.value = value;\n });\n }\n}\n\n/**\n * Function to check if supplied [[PropertyFilterBuilderRuleGroupItem]] is [[PropertyFilterBuilderRuleGroup]].\n * @internal\n */\nexport function isPropertyFilterBuilderRuleGroup(\n item: PropertyFilterBuilderRuleGroupItem\n): item is PropertyFilterBuilderRuleGroup {\n return (item as any).items !== undefined;\n}\n\n/**\n * Custom hook that creates state for [[PropertyFilterBuilder]] component. It creates empty state or initializes\n * state from supplied initial filter.\n * @internal\n */\nexport function usePropertyFilterBuilderState(initialFilter?: PropertyFilter) {\n const [state, setState] = React.useState<PropertyFilterBuilderState>(() =>\n initialFilter\n ? convertFilterToState(initialFilter)\n : { rootGroup: createEmptyRuleGroup() }\n );\n const [actions] = React.useState(\n () => new PropertyFilterBuilderActions(setState)\n );\n\n return { state, actions };\n}\n\n/** @internal */\nexport function buildPropertyFilter(\n groupItem: PropertyFilterBuilderRuleGroupItem\n): PropertyFilter | undefined {\n if (isPropertyFilterBuilderRuleGroup(groupItem))\n return buildPropertyFilterFromRuleGroup(groupItem);\n return buildPropertyFilterFromRule(groupItem);\n}\n\nfunction buildPropertyFilterFromRuleGroup(\n rootGroup: PropertyFilterBuilderRuleGroup\n): PropertyFilter | undefined {\n const rules = new Array<PropertyFilter>();\n for (const item of rootGroup.items) {\n const rule = buildPropertyFilter(item);\n if (rule) rules.push(rule);\n }\n\n if (rules.length === 0) return undefined;\n\n if (rules.length === 1) return rules[0];\n\n return {\n operator: rootGroup.operator,\n rules,\n };\n}\n\nfunction buildPropertyFilterFromRule(\n rule: PropertyFilterBuilderRule\n): PropertyFilter | undefined {\n const { property, operator, value } = rule;\n if (!property || operator === undefined) return undefined;\n\n if (\n !isUnaryPropertyFilterOperator(operator) &&\n (!value ||\n value.valueFormat !== PropertyValueFormat.Primitive ||\n !value.value)\n )\n return undefined;\n\n return { property, operator, value };\n}\n\nfunction createEmptyRule(groupId: string): PropertyFilterBuilderRule {\n return {\n id: Guid.createValue(),\n groupId,\n };\n}\n\nfunction createEmptyRuleGroup(\n groupId?: string\n): PropertyFilterBuilderRuleGroup {\n const id = Guid.createValue();\n return {\n id,\n groupId,\n operator: PropertyFilterRuleGroupOperator.And,\n items: [createEmptyRule(id)],\n };\n}\n\nfunction findRuleGroup(\n rootGroup: PropertyFilterBuilderRuleGroup,\n path: string[]\n): PropertyFilterBuilderRuleGroup | undefined {\n if (path.length === 0) return rootGroup;\n\n const [currentItemId, ...rest] = path;\n const currentItem = rootGroup.items.find((item) => item.id === currentItemId);\n if (!currentItem || !isPropertyFilterBuilderRuleGroup(currentItem))\n return undefined;\n\n return findRuleGroup(currentItem, rest);\n}\n\nfunction findRule(\n rootGroup: PropertyFilterBuilderRuleGroup,\n path: string[]\n): PropertyFilterBuilderRule | undefined {\n if (path.length === 0) return undefined;\n\n const [currentItemId, ...rest] = path;\n const currentItem = rootGroup.items.find((item) => item.id === currentItemId);\n if (!currentItem) return undefined;\n\n if (isPropertyFilterBuilderRuleGroup(currentItem))\n return findRule(currentItem, rest);\n\n return currentItem;\n}\n\nfunction getRuleGroupItem(\n filter: PropertyFilter,\n parentId: string\n): PropertyFilterBuilderRuleGroupItem {\n const id = Guid.createValue();\n if (isPropertyFilterRuleGroup(filter))\n return {\n id,\n groupId: parentId,\n operator: filter.operator,\n items: filter.rules.map((rule) => getRuleGroupItem(rule, id)),\n };\n return getRuleItem(filter, id);\n}\n\nfunction getRuleItem(filter: PropertyFilterRule, parentId: string) {\n return {\n id: Guid.createValue(),\n groupId: parentId,\n property: filter.property,\n operator: filter.operator,\n value: filter.value,\n };\n}\n\nfunction convertFilterToState(\n filter: PropertyFilter\n): PropertyFilterBuilderState {\n const id = Guid.createValue();\n if (isPropertyFilterRuleGroup(filter)) {\n return {\n rootGroup: {\n id,\n operator: filter.operator,\n items: filter.rules.map((rule) => getRuleGroupItem(rule, id)),\n },\n };\n }\n return {\n rootGroup: {\n id,\n operator: PropertyFilterRuleGroupOperator.And,\n items: [getRuleItem(filter, id)],\n },\n };\n}\n"]}
1
+ {"version":3,"file":"FilterBuilderState.js","sourceRoot":"","sources":["../../../../src/components-react/filter-builder/FilterBuilderState.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module PropertyFilterBuilder\n */\n\nimport type { Draft } from \"immer\";\nimport { produce } from \"immer\";\nimport * as React from \"react\";\nimport type { PropertyDescription, PropertyValue } from \"@itwin/appui-abstract\";\nimport { PropertyValueFormat } from \"@itwin/appui-abstract\";\nimport { Guid } from \"@itwin/core-bentley\";\nimport { PropertyFilterRuleOperator } from \"./Operators\";\nimport {\n isUnaryPropertyFilterOperator,\n PropertyFilterRuleGroupOperator,\n} from \"./Operators\";\nimport type { PropertyFilter, PropertyFilterRule } from \"./Types\";\nimport { isPropertyFilterRuleGroup } from \"./Types\";\nimport { UiComponents } from \"../UiComponents\";\n/**\n * Data structure that describes [[PropertyFilterBuilder]] component state.\n * @beta\n */\nexport interface PropertyFilterBuilderState {\n /** Root group of rules in [[PropertyFilterBuilder]] component. */\n rootGroup: PropertyFilterBuilderRuleGroup;\n}\n\n/**\n * Type that describes [[PropertyFilterBuilder]] component group item.\n * @beta\n */\nexport type PropertyFilterBuilderRuleGroupItem =\n | PropertyFilterBuilderRuleGroup\n | PropertyFilterBuilderRule;\n\n/**\n * Data structure that describes [[PropertyFilterBuilder]] component rule group.\n * @beta\n */\nexport interface PropertyFilterBuilderRuleGroup {\n /** Id of this rule group. */\n id: string;\n /** Id of rule group that this group is nested in. */\n groupId?: string;\n /** Operator that should join items in this group. */\n operator: PropertyFilterRuleGroupOperator;\n /** Items in this group. */\n items: PropertyFilterBuilderRuleGroupItem[];\n}\n\n/**\n * Data structure that describes [[PropertyFilterBuilder]] component single rule.\n * @beta\n */\nexport interface PropertyFilterBuilderRule {\n /** Id of this rule. */\n id: string;\n /** Id of rule group that this rule is nested in. */\n groupId: string;\n /** Property used in this rule. */\n property?: PropertyDescription;\n /** Operator that should be used to compare property value. */\n operator?: PropertyFilterRuleOperator;\n /** Value that property should be compared to. */\n value?: PropertyValue;\n /** Error message of this rule. */\n errorMessage?: string;\n}\n\n/**\n * Actions for controlling [[PropertyFilterBuilder]] component state.\n * @beta\n */\nexport class PropertyFilterBuilderActions {\n constructor(\n private setState: (\n setter: (\n prevState: PropertyFilterBuilderState\n ) => PropertyFilterBuilderState\n ) => void\n ) {}\n\n private updateState(\n updater: (state: Draft<PropertyFilterBuilderState>) => void\n ) {\n this.setState(produce(updater));\n }\n\n /** Adds new rule or group of rules to the group specified by path. */\n public addItem(path: string[], itemType: \"RULE_GROUP\" | \"RULE\") {\n this.updateState((state) => {\n const parentGroup = findRuleGroup(state.rootGroup, path);\n if (!parentGroup) return;\n const item =\n itemType === \"RULE_GROUP\"\n ? createEmptyRuleGroup(parentGroup.id)\n : createEmptyRule(parentGroup.id);\n parentGroup.items.push(item);\n });\n }\n\n /** Removes item specified by path. */\n public removeItem(path: string[]) {\n function removeItemFromGroup(\n state: Draft<PropertyFilterBuilderState>,\n pathToItem: string[]\n ) {\n const pathToParent = pathToItem.slice(0, -1);\n const parentGroup = findRuleGroup(state.rootGroup, pathToParent);\n if (!parentGroup) return;\n const itemId = pathToItem[pathToItem.length - 1];\n const itemIndex = parentGroup.items.findIndex(\n (item) => item.id === itemId\n );\n if (itemIndex === -1) return;\n if (parentGroup.items.length === 1) {\n parentGroup.items[0] = createEmptyRule(parentGroup.id);\n return;\n }\n parentGroup.items.splice(itemIndex, 1);\n }\n\n this.updateState((state) => {\n removeItemFromGroup(state, path);\n });\n }\n\n /** Sets operator of rule group specified by the path. */\n public setRuleGroupOperator(\n path: string[],\n operator: PropertyFilterRuleGroupOperator\n ) {\n this.updateState((state) => {\n const group = findRuleGroup(state.rootGroup, path);\n if (!group) return;\n group.operator = operator;\n });\n }\n\n /** Sets property of rule specified by the path. */\n public setRuleProperty(path: string[], property?: PropertyDescription) {\n this.updateState((state) => {\n const rule = findRule(state.rootGroup, path);\n if (!rule) return;\n rule.property = property;\n rule.value = undefined;\n rule.errorMessage = undefined;\n });\n }\n\n /** Sets operator of rule specified by the path. */\n public setRuleOperator(path: string[], operator: PropertyFilterRuleOperator) {\n this.updateState((state) => {\n const rule = findRule(state.rootGroup, path);\n if (!rule) return;\n if (isUnaryPropertyFilterOperator(operator)) rule.value = undefined;\n if (\n operator !== rule.operator &&\n !areOperatorsSimilar(operator, rule.operator)\n ) {\n rule.value = undefined;\n }\n rule.operator = operator;\n });\n }\n\n /** Sets value of rule specified by the path. */\n public setRuleValue(path: string[], value: PropertyValue) {\n this.updateState((state) => {\n const rule = findRule(state.rootGroup, path);\n if (!rule) return;\n rule.value = value;\n });\n }\n\n /**\n * Sets error messages of the rules specified by id.\n * If rule id is not present in the map, then its error message will be cleared.\n */\n public setRuleErrorMessages(ruleIdsAndErrorMessages: Map<string, string>) {\n this.updateState((state) => {\n const setErrorMessages = (item: PropertyFilterBuilderRuleGroupItem) => {\n if (isPropertyFilterBuilderRuleGroup(item)) {\n item.items.forEach((itm) => {\n setErrorMessages(itm);\n });\n } else {\n item.errorMessage = ruleIdsAndErrorMessages.get(item.id);\n }\n };\n\n setErrorMessages(state.rootGroup);\n });\n }\n}\n\n/**\n * Function to check if supplied [[PropertyFilterBuilderRuleGroupItem]] is [[PropertyFilterBuilderRuleGroup]].\n * @beta\n */\nexport function isPropertyFilterBuilderRuleGroup(\n item: PropertyFilterBuilderRuleGroupItem\n): item is PropertyFilterBuilderRuleGroup {\n return (item as any).items !== undefined;\n}\n\n/**\n * Props for [[usePropertyFilterBuilder]]\n * @beta\n */\nexport interface UsePropertyFilterBuilderProps {\n /** Initial filter for [[PropertyFilterBuilder]] */\n initialFilter?: PropertyFilter;\n /** Custom rule validator to be used when [[UsePropertyFilterBuilderResult.buildFilter]] is invoked. Should return error message or `undefined`, if rule is valid. */\n ruleValidator?: (rule: PropertyFilterBuilderRule) => string | undefined;\n}\n\n/**\n * Type for [[usePropertyFilterBuilder]] return object.\n * @beta\n */\nexport interface UsePropertyFilterBuilderResult {\n /** Root group of the [[PropertyFilterBuilder]]. */\n rootGroup: PropertyFilterBuilderRuleGroup;\n /** Actions for manipulating [[PropertyFilterBuilder]] state. */\n actions: PropertyFilterBuilderActions;\n /**\n * Validates and builds [[PropertyFilter]] based on current state. It uses [[defaultPropertyFilterBuilderRuleValidator]] or\n * custom validator provided through [[UsePropertyFilterBuilderProps]] to validate each rule.\n * @returns [[PropertyFilter]] if all rules are valid, `undefined` otherwise.\n */\n buildFilter: () => PropertyFilter | undefined;\n}\n\n/**\n * Custom hook that creates state for [[PropertyFilterBuilder]] component. It creates empty state or initializes\n * state from supplied initial filter.\n * @beta\n */\nexport function usePropertyFilterBuilder(\n props?: UsePropertyFilterBuilderProps\n) {\n const { initialFilter, ruleValidator } = props ?? {\n initialFilter: undefined,\n ruleValidator: undefined,\n };\n const [state, setState] = React.useState<PropertyFilterBuilderState>(\n initialFilter\n ? convertFilterToState(initialFilter)\n : { rootGroup: createEmptyRuleGroup() }\n );\n\n const [actions] = React.useState(\n () => new PropertyFilterBuilderActions(setState)\n );\n\n const buildFilter = () => {\n const ruleErrors = validateRules(state.rootGroup, ruleValidator);\n actions.setRuleErrorMessages(ruleErrors);\n if (ruleErrors.size > 0) {\n return undefined;\n }\n return buildPropertyFilter(state.rootGroup);\n };\n return { rootGroup: state.rootGroup, actions, buildFilter };\n}\n\nfunction validateRules(\n rule: PropertyFilterBuilderRuleGroupItem,\n ruleValidator?: (item: PropertyFilterBuilderRule) => string | undefined\n) {\n const ruleIdsAndErrorMessages = new Map<string, string>();\n\n const validateRulesInner = (item: PropertyFilterBuilderRuleGroupItem) => {\n if (isPropertyFilterBuilderRuleGroup(item)) {\n item.items.forEach((itm) => {\n validateRulesInner(itm);\n });\n } else {\n const errorMessage = ruleValidator\n ? ruleValidator(item)\n : defaultPropertyFilterBuilderRuleValidator(item);\n if (errorMessage) ruleIdsAndErrorMessages.set(item.id, errorMessage);\n }\n };\n\n validateRulesInner(rule);\n\n return ruleIdsAndErrorMessages;\n}\n\n/**\n * Default rule validator.\n * @beta\n */\nexport function defaultPropertyFilterBuilderRuleValidator(\n item: PropertyFilterBuilderRule\n): string | undefined {\n if (\n item.property === undefined ||\n item.operator === undefined ||\n isUnaryPropertyFilterOperator(item.operator)\n ) {\n return undefined;\n }\n if (item.value === undefined) {\n return UiComponents.translate(\"filterBuilder.errorMessages.emptyValue\");\n }\n if (\n item.value.valueFormat === PropertyValueFormat.Primitive &&\n (item.value.value === undefined || item.value.value === \"\")\n ) {\n return UiComponents.translate(\"filterBuilder.errorMessages.emptyValue\");\n }\n return undefined;\n}\n\n/** @internal */\nexport function buildPropertyFilter(\n groupItem: PropertyFilterBuilderRuleGroupItem\n): PropertyFilter | undefined {\n if (isPropertyFilterBuilderRuleGroup(groupItem))\n return buildPropertyFilterFromRuleGroup(groupItem);\n return buildPropertyFilterFromRule(groupItem);\n}\n\nfunction buildPropertyFilterFromRuleGroup(\n rootGroup: PropertyFilterBuilderRuleGroup\n): PropertyFilter | undefined {\n const rules = new Array<PropertyFilter>();\n for (const item of rootGroup.items) {\n const rule = buildPropertyFilter(item);\n if (rule) rules.push(rule);\n }\n\n if (rules.length === 0) return undefined;\n\n if (rules.length === 1) return rules[0];\n\n return {\n operator: rootGroup.operator,\n rules,\n };\n}\n\nfunction buildPropertyFilterFromRule(\n rule: PropertyFilterBuilderRule\n): PropertyFilter | undefined {\n const { property, operator, value } = rule;\n if (!property || operator === undefined) return undefined;\n\n if (\n !isUnaryPropertyFilterOperator(operator) &&\n (!value ||\n value.valueFormat !== PropertyValueFormat.Primitive ||\n value.value === undefined)\n )\n return undefined;\n\n return { property, operator, value };\n}\n\nfunction createEmptyRule(groupId: string): PropertyFilterBuilderRule {\n return {\n id: Guid.createValue(),\n groupId,\n };\n}\n\nfunction createEmptyRuleGroup(\n groupId?: string\n): PropertyFilterBuilderRuleGroup {\n const id = Guid.createValue();\n return {\n id,\n groupId,\n operator: PropertyFilterRuleGroupOperator.And,\n items: [createEmptyRule(id)],\n };\n}\n\nfunction findRuleGroup(\n rootGroup: PropertyFilterBuilderRuleGroup,\n path: string[]\n): PropertyFilterBuilderRuleGroup | undefined {\n if (path.length === 0) return rootGroup;\n\n const [currentItemId, ...rest] = path;\n const currentItem = rootGroup.items.find((item) => item.id === currentItemId);\n if (!currentItem || !isPropertyFilterBuilderRuleGroup(currentItem))\n return undefined;\n\n return findRuleGroup(currentItem, rest);\n}\n\nfunction findRule(\n rootGroup: PropertyFilterBuilderRuleGroup,\n path: string[]\n): PropertyFilterBuilderRule | undefined {\n if (path.length === 0) return undefined;\n\n const [currentItemId, ...rest] = path;\n const currentItem = rootGroup.items.find((item) => item.id === currentItemId);\n if (!currentItem) return undefined;\n\n if (isPropertyFilterBuilderRuleGroup(currentItem))\n return findRule(currentItem, rest);\n\n return currentItem;\n}\n\nfunction getRuleGroupItem(\n filter: PropertyFilter,\n parentId: string\n): PropertyFilterBuilderRuleGroupItem {\n const id = Guid.createValue();\n if (isPropertyFilterRuleGroup(filter))\n return {\n id,\n groupId: parentId,\n operator: filter.operator,\n items: filter.rules.map((rule) => getRuleGroupItem(rule, id)),\n };\n return getRuleItem(filter, id);\n}\n\nfunction getRuleItem(filter: PropertyFilterRule, parentId: string) {\n return {\n id: Guid.createValue(),\n groupId: parentId,\n property: filter.property,\n operator: filter.operator,\n value: filter.value,\n };\n}\n\nfunction convertFilterToState(\n filter: PropertyFilter\n): PropertyFilterBuilderState {\n const id = Guid.createValue();\n if (isPropertyFilterRuleGroup(filter)) {\n return {\n rootGroup: {\n id,\n operator: filter.operator,\n items: filter.rules.map((rule) => getRuleGroupItem(rule, id)),\n },\n };\n }\n return {\n rootGroup: {\n id,\n operator: PropertyFilterRuleGroupOperator.And,\n items: [getRuleItem(filter, id)],\n },\n };\n}\n\nfunction areOperatorsSimilar(\n firstOperator?: PropertyFilterRuleOperator,\n secondOperator?: PropertyFilterRuleOperator\n) {\n return (\n (isOperatorEqualOrIsNotEqual(firstOperator) &&\n isOperatorEqualOrIsNotEqual(secondOperator)) ||\n (isInequalityOperator(firstOperator) &&\n isInequalityOperator(secondOperator))\n );\n}\n\nfunction isOperatorEqualOrIsNotEqual(operator?: PropertyFilterRuleOperator) {\n return (\n operator === PropertyFilterRuleOperator.IsEqual ||\n operator === PropertyFilterRuleOperator.IsNotEqual\n );\n}\n\nfunction isInequalityOperator(operator?: PropertyFilterRuleOperator) {\n return (\n operator === PropertyFilterRuleOperator.Less ||\n operator === PropertyFilterRuleOperator.LessOrEqual ||\n operator === PropertyFilterRuleOperator.Greater ||\n operator === PropertyFilterRuleOperator.GreaterOrEqual\n );\n}\n"]}
@@ -0,0 +1,144 @@
1
+ /** @packageDocumentation
2
+ * @module Toolbar
3
+ */
4
+ import "./Toolbar.scss";
5
+ import * as React from "react";
6
+ import type { ActionButton, CommonToolbarItem, CustomButtonDefinition, GroupButton, OnItemExecutedFunc } from "@itwin/appui-abstract";
7
+ import type { CommonProps, NoChildrenProps } from "@itwin/core-react";
8
+ import { Direction, OrthogonalDirection } from "./utilities/Direction";
9
+ import type { BeEvent } from "@itwin/core-bentley";
10
+ /** Describes the data needed to insert a custom `React` button into an ToolbarWithOverflow.
11
+ * @public
12
+ * @deprecated in 4.0. Use [ToolbarCustomItem]($appui-react) instead.
13
+ */
14
+ export interface CustomToolbarItem extends CustomButtonDefinition {
15
+ /** defines the content to display in popup panel */
16
+ panelContentNode?: React.ReactNode;
17
+ /** If true the popup panel is mounted once and unmounted when button is unmounted. If false the
18
+ * content node is unmounted each time the popup is closed. */
19
+ keepContentsLoaded?: boolean;
20
+ }
21
+ /**
22
+ * Context used by Toolbar items to know if popup panel should be hidden - via AutoHide.
23
+ * @public
24
+ */
25
+ export declare const ToolbarPopupAutoHideContext: React.Context<boolean>;
26
+ /**
27
+ * React hook used to retrieve the ToolbarPopupAutoHideContext.
28
+ * @public
29
+ */
30
+ export declare function useToolbarPopupAutoHideContext(): boolean;
31
+ /** Describes toolbar item.
32
+ * @public
33
+ * @deprecated in 4.0. Use [ToolbarItem]($appui-react) instead.
34
+ */
35
+ export type ToolbarItem = ActionButton | GroupButton | CustomToolbarItem;
36
+ /** CustomToolbarItem type guard.
37
+ * @internal
38
+ */
39
+ export declare function isCustomToolbarItem(item: ToolbarItem): item is CustomToolbarItem;
40
+ /** @internal */
41
+ export declare const getToolbarDirection: (expandsTo: Direction) => OrthogonalDirection;
42
+ /** Available alignment modes of [[Toolbar]] panels.
43
+ * @public
44
+ */
45
+ export declare enum ToolbarPanelAlignment {
46
+ Start = 0,
47
+ End = 1
48
+ }
49
+ /** Enumeration of Toolbar Opacity setting.
50
+ * @public
51
+ */
52
+ export declare enum ToolbarOpacitySetting {
53
+ /** Use the default background, box-shadow opacity and backdrop-filter blur */
54
+ Defaults = 0,
55
+ /** Alter the opacity from transparent to the defaults based on mouse proximity */
56
+ Proximity = 1,
57
+ /** Use a transparent background, box-shadow opacity and backdrop-filter blur */
58
+ Transparent = 2
59
+ }
60
+ /** Helpers for [[ToolbarPanelAlignment]].
61
+ * @internal
62
+ */
63
+ export declare class ToolbarPanelAlignmentHelpers {
64
+ /** Class name of [[ToolbarPanelAlignment.Start]] */
65
+ static readonly START_CLASS_NAME = "components-panel-alignment-start";
66
+ /** Class name of [[ToolbarPanelAlignment.End]] */
67
+ static readonly END_CLASS_NAME = "components-panel-alignment-end";
68
+ /** @returns Class name of specified [[ToolbarPanelAlignment]] */
69
+ static getCssClassName(panelAlignment: ToolbarPanelAlignment): string;
70
+ }
71
+ /** @internal */
72
+ export interface ToolbarOverflowContextProps {
73
+ readonly expandsTo: Direction;
74
+ readonly direction: OrthogonalDirection;
75
+ readonly overflowExpandsTo: Direction;
76
+ readonly overflowDirection: OrthogonalDirection;
77
+ readonly panelAlignment: ToolbarPanelAlignment;
78
+ readonly useDragInteraction: boolean;
79
+ readonly toolbarOpacitySetting: ToolbarOpacitySetting;
80
+ readonly openPopupCount: number;
81
+ readonly onPopupPanelOpenClose: (isOpening: boolean) => void;
82
+ readonly overflowDisplayActive: boolean;
83
+ readonly onItemExecuted: OnItemExecutedFunc;
84
+ readonly onKeyDown: (e: React.KeyboardEvent) => void;
85
+ }
86
+ /**
87
+ * Context used by Toolbar component to provide Direction to child components.
88
+ * @internal
89
+ */
90
+ export declare const ToolbarWithOverflowDirectionContext: React.Context<ToolbarOverflowContextProps>;
91
+ /** @internal */
92
+ export declare function ToolbarItemComponent({ item, addGroupSeparator, }: {
93
+ item: ToolbarItem;
94
+ addGroupSeparator: boolean;
95
+ }): JSX.Element | null;
96
+ /** @internal */
97
+ export declare function useToolbarWithOverflowDirectionContext(): ToolbarOverflowContextProps;
98
+ /** Properties of [[ToolbarComponent]] component.
99
+ * @internal
100
+ */
101
+ export interface InternalToolbarComponentProps extends CommonProps, NoChildrenProps {
102
+ /** Describes to which direction the popup panels are expanded. Defaults to: [[Direction.Bottom]] */
103
+ expandsTo?: Direction;
104
+ /** Describes if items that do not fit available space should move to an expandable panel. Defaults to: false */
105
+ enableOverflow?: boolean | {
106
+ /** Describes to which direction the overflow popup panels are expanded if overflow is enabled. Defaults to: [[Direction.Right]] */
107
+ overflowExpandsTo?: Direction;
108
+ };
109
+ /** Definitions for items of the toolbar. Items are expected to be already sorted by group and item. */
110
+ items: CommonToolbarItem[];
111
+ /** Describes how expanded panels are aligned. Defaults to: [[ToolbarPanelAlignment.Start]] */
112
+ panelAlignment?: ToolbarPanelAlignment;
113
+ /** Use Drag Interaction to open popups with nest action buttons */
114
+ useDragInteraction?: boolean;
115
+ /** Determines whether to use mouse proximity to alter the opacity of the toolbar */
116
+ toolbarOpacitySetting?: ToolbarOpacitySetting;
117
+ /** Optional function to call on any item execution */
118
+ onItemExecuted?: OnItemExecutedFunc;
119
+ /** Optional function to call on any KeyDown events processed by toolbar */
120
+ onKeyDown?: (e: React.KeyboardEvent) => void;
121
+ /** SyncEvents on which the conditional should listen to */
122
+ syncUiEvent?: BeEvent<(args: {
123
+ eventIds: Set<string>;
124
+ }) => void>;
125
+ }
126
+ /** Component that displays toolbar items.
127
+ * @internal
128
+ */
129
+ export declare function InternalToolbarComponent(props: InternalToolbarComponentProps): JSX.Element;
130
+ /** Interface toolbars use to define context for its items.
131
+ * @internal
132
+ */
133
+ export interface ToolbarItemContextArgs {
134
+ readonly hasOverflow: boolean;
135
+ readonly useHeight: boolean;
136
+ readonly onResize: (w: number) => void;
137
+ }
138
+ /** Interface toolbars use to define context for its items.
139
+ * @internal
140
+ */
141
+ export declare const ToolbarItemContext: React.Context<ToolbarItemContextArgs>;
142
+ /** @internal */
143
+ export declare function useToolItemEntryContext(): ToolbarItemContextArgs;
144
+ //# sourceMappingURL=InternalToolbarComponent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InternalToolbarComponent.d.ts","sourceRoot":"","sources":["../../../../src/components-react/toolbar/InternalToolbarComponent.tsx"],"names":[],"mappings":"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"}